2013-03-24  Thien-Thi Nguyen  <ttn@gnu.org>

	Release: 0.2.1

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Use ‘(ice-9 and-let-star) and-let*’ more.

	Implicit ∀ files: "Import ‘(ice-9 and-let-star) and-let*’".
	* guile-server/echo-server.scm (echo-handle-request): Use ‘and-let*’.
	* guile-server/eval-server.scm (eval-handle-request): Likewise.
	* guile-server/icecast-server.scm (icecast-find-files)
	(icecast-detect-proto, icecast-connect-socket, icecast-id3-tag): Likewise.
	* guile-server/inetd.scm (bind-rpc-service)
	(create-portcfg, create-server, create-bindings): Likewise.
	* guile-server/mandel-server.scm
	(save-point!, mandel-detect-proto): Likewise.

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Use ‘zero?’ more.

	* guile-server/echo-server.scm (echo-handle-request): ...here.
	* guile-server/eval-server.scm (eval-handle-request): Likewise.
	* guile-server/icecast-server.scm
	(icecast-detect-proto, icecast-id3-tag): Likewise.
	* guile-server/mandel-client.scm (mandel-handle-request): Likewise.
	* guile-server/mandel-server.scm (mandel-detect-proto): Likewise.

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Revamp inetd ‘string-split’ and subroutines.

	* guile-server/inetd.scm: Import SRFI 13, 14 procs.
	(read-config, split-tuple): Use ‘string-take’.
	(crop-spaces): Delete proc.
	(next-space-position, string-split): Rewrite.

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Add abstraction: out!

	* guile-server/eval-server.scm (eval-handle-request out!):
	New proc.
	(eval-handle-request): Use ‘out!’.

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[slog] Import ‘(ice-9 rdelim)’ for ‘write-line’.

	* guile-server/mandel-server.scm: Import ‘(ice-9 rdelim) write-line’.

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Use ‘fs’ instead of ‘string-append’.

	* guile-boot.scm (create-tcp-port!, create-udp-port!): ...here.
	* guile-server/eval-server.scm (eval-handle-request)
	(eval-connect-socket): Likewise.
	* guile-server/icecast-server.scm (icecast-next-file): Likewise.
	* guile-server/mandel-client.scm (mandel-handle-request): Likewise.
	* guile-server/mandel-server.scm (mandel-save-palette, mandel-write)
	(mandel-info, mandel-finalize, mandel-handle-request): Likewise.

2013-03-20  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Rewrite mandel "output picture data" routine.

	* guile-server/mandel-shared.scm: Import SRFI 13 ‘string-concatenate’.
	* guile-server/mandel-server.scm (mandel-write)
	<output picture data>: Use ‘fs’, ‘string-concatenate’.

2013-03-19  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Rewrite ‘left-zeros’.

	* guile-server/mandel-server.scm (left-zeros):
	...here, to avoid iteration.

2013-03-19  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Take prefix for protocol-{rpc,port}-string.

	U ≡ "Take PREFIX; prepend it along with a hyphen to the returned value".
	* guile-server/inetd.scm (protocol-rpc-string): U.
	(create-rpc-portcfg, create-rpc-server):
	Update calls to ‘protocol-rpc-string’.
	(protocol-port-string): U.
	(create-portcfg, create-server, translate-internal-server):
	Update calls to ‘protocol-port-string’.

2013-03-19  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Add abstraction: hey

	* guile-server/inetd.scm (hey): New proc.
	(read-config, lookup-rpc-service, get-rpc-service)
	(run-rpc-portmapper, bind-rpc-service, lookup-service)
	(translate-internal-server, create-bindings): Use ‘hey’.

2013-03-19  Thien-Thi Nguyen  <ttn@gnu.org>

	[guile] New built-in: fs

	* guile-boot.scm (fs): New proc.

2013-03-17  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Avoid ‘set!’.

	* guile-server/inetd.scm: Import ‘(ice-9 rdelim) read-line’.
	(read-config): ...here, by rewriting the main loop.

2013-03-17  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Replace ‘(cons (cons ...))’ chains w/ quasiquote form.

	* guile-server/inetd.scm (create-rpc-portcfg): ...here.
	(create-rpc-server, create-portcfg, create-server): Likewise.

2013-03-17  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Use ‘case’ more.

	* guile-server/mandel-client.scm (mandel-handle-request): ...here.
	* guile-server/mandel-server.scm (mandel-handle-request): Likewise.

2013-03-17  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Replace ‘mandel-split’ w/ ‘mandel-tokenize’.

	* guile-server/mandel-shared.scm: Import SRFI 13, 14 procs.
	(mandel-tokenize): New proc.
	(mandel-split): Delete proc.
	* guile-server/mandel-client.scm (mandel-handle-request)
	* guile-server/mandel-server.scm (mandel-handle-request):
	Use ‘mandel-tokenize’.

2013-03-17  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Elide ‘ret’ local var.

	* guile-server/echo-server.scm (echo-info-server): ...here.
	(echo-handle-request): Likewise.
	(echo-connect-socket): Likewise, for var ‘hello’.

2013-03-13  Thien-Thi Nguyen  <ttn@gnu.org>

	Fix bug: Mention ‘--solitary’ in ‘serveez --help’ output.

	* option.c (usage): Add entry for ‘solitary’ to table.

2013-03-12  Thien-Thi Nguyen  <ttn@gnu.org>

	[int] Rewrite func ‘usage’ to use a data table.

	* option.c (LONGOPTS): New #define.
	(serveez_options) [LONGOPTS]: New forward decl.
	(longame) [LONGOPTS]: New static func.
	(usage): Rewrite.

2013-03-12  Thien-Thi Nguyen  <ttn@gnu.org>

	[int] Use ‘PACKAGE_BUGREPORT’ more.

	* option.c (usage): ...here.

2013-03-11  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Re-word one-armed ‘if’ expressions.

	Use ‘or’, ‘and’, ‘cond’, ‘and=>’, etc.

	* guile-boot.scm (create-tcp-port!, create-udp-port!): ...here.
	* guile-server/icecast-server.scm <fseek check>: Likewise.
	(icecast-find-files, icecast-close-file, icecast-next-file)
	(icecast-send-buffer, icecast-id3-tag): Likewise.
	* guile-server/inetd.scm (read-config, crop-spaces)
	(string-split, get-rpc-service, create-rpc-server, rpc-ip-proto)
	(run-rpc-portmapper, bind-rpc-service, protocol-port-string)
	(create-server, translate-internal-server, create-bindings): Likewise.
	* guile-server/mandel-server.scm (left-zeros, generate-ascii)
	(mandel-palette, mandel-save-palette, save-point!, next-index!)
	(mandel-finalize): Likewise.
	* guile-server/mandel-shared.scm (mandel-split): Likewise.

2013-03-06  Mike Gran  <spk121@yahoo.com>  (tiny change)

	[slog] Protect against Guile 2.x segv in ‘guile_error’.

	There is no XFAIL test as this is platform-specific.  Thread origin:
	<http://lists.gnu.org/archive/html/bug-serveez/2013-02/msg00000.html>.

	* guile.c (guile_error): Use ‘SCM_OPINPORTP’ for validity.

2013-02-26  Thien-Thi Nguyen  <ttn@gnu.org>

	[Scheme int] Use ‘in-vicinity’ more.

	* guile-server/icecast-server.scm (icecast-find-files): Use ‘in-vicinity’.

2013-01-22  Thien-Thi Nguyen  <ttn@gnu.org>

	Release: 0.2.0

2012-12-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Arrange for libserveez.h to #include system headers.

	* svzconfig.h.in (HAVE_WINSOCK2_H, HAVE_ARPA_INET_H)
	(HAVE_NETINET_IN_H): New ‘#undef’s.
	* Makefile.am (libserveez.h): Don't strip all #include
	lines; instead, strip only "local" (double-quoted) headers;
	also change all ‘ HAVE_’ to ‘ SVZ_HAVE_’.

2012-11-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Add option to inhibit coserver instances at startup.

	* option.h (option_t): Add member ‘coservers’.
	* option.c (serveez_options): Add ‘solitary’.
	(SERVEEZ_OPTIONS): Add "s" to end.
	(handle_options): Default ‘options.coservers’ to start instances;
	if given ‘-s’, however, arrange to not start instances.
	* serveez.c (guile_entry): Don't start coserver
	instances unconditionally; instead, use ‘options->coservers’.

2012-11-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Include package string in libserveez.h comments.

	* Makefile.am (libserveez.h): Arrange to include
	‘$(PACKAGE_STRING)’ in the header and "ends here" comments.

2012-11-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi 2.x] Use ‘scm_c_private_lookup’.

	* gi.c (gi_lookup) [V19]: Use ‘scm_c_private_lookup’
	and ‘scm_variable_ref’.

2012-11-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi 2.x] Use ‘scm_from_locale_symbol’.

	* gi.c (symbol2scm) [V19]: Use ‘scm_from_locale_symbol’.

2012-11-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Aggressively avoid <guile/gh.h> for Guile 1.9 and later.

	* gi.c: Don't #include <guile/gh.h> for Guile 1.9 and later,
	even if the configure script says that it is "available".

2012-11-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi int] Redesign Guile-version macros to express "and later".

	* gi.c (COMBINED): New macro.
	(GUILE_COMBINED_V): New #define.
	(GUILE_V_LT, GUILE_V_GE): New macros.
	(V19, V17, V15): Rewrite using ‘GUILE_V_GE’.

2012-11-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib int] Use Automake conditional to gate windoze.[hc].

	* Makefile.am (hbits): Include windoze.h only ‘if MINGW32’.

2012-11-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Generate monolithic libserveez.h; install it solely.

	* libserveez.h: Delete file.
	* libserveez.h-TEMPLATE: New file.
	* Makefile.am (CLEANFILES): Add libserveez.h.
	(BUILT_SOURCES): Add libserveez.h.
	(hbits): New var.
	(libserveez.h): New target.
	(EXTRA_DIST): Add $(hbits), libserveez.h-TEMPLATE.
	(i): Delete var.
	(install-data-hook): Delete target.

2012-11-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘svz_hash_configure’ more.

	* irc-server/irc-proto.c (make_irc_e_hash_table): New static func.
	(irc_init): Use ‘make_irc_e_hash_table’.
	* nut-server/gnutella.c (make_nut_kce_hash_table): New static func.
	(nut_init): Use ‘make_nut_kce_hash_table’.

2012-11-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C int] Promote macro ‘UNUSED’ to its own file.

	* unused.h: New file.
	* Makefile.am (noinst_HEADERS): Add unused.h.
	* gi.c: #include "unused.h".
	(UNUSED): Delete macro.
	* guile-bin.c: #include "unused.h"; do ‘s/SVZ_UNUSED/UNUSED/g’.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* option.c: Likewise.
	* serveez.c: Likewise.
	* ctrl-server/control-proto.c: Likewise.
	* fakeident-server/ident-proto.c: Likewise.
	* foo-server/foo-proto.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-event-2.c: Likewise.
	* irc-server/irc-event-3.c: Likewise.
	* irc-server/irc-event-5.c: Likewise.
	* irc-server/irc-event-6.c: Likewise.
	* irc-server/irc-event-7.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* irc-server/irc-server.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-route.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* sntp-server/sntp-proto.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-10-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_smob_free_rv

	* gi.c (POSSIBLY_UNUSED_GI_SMOB_FREE_RV_PARAM): New #define.
	(gi_smob_free_rv): New func.
	* gi.h (gi_smob_free_rv): New func decl.
	* guile-bin.c (guile_bin_free): Use ‘gi_smob_free_rv’.

2011-10-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Add abstraction: BFREE

	* guile-api.h (BFREE): New macro.
	* guile-api.c (guile_read_file): Use ‘BFREE’.
	* guile-bin.c (guile_bin_free, guile_list_to_bin): Likewise.

2011-10-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Add abstractions: BSMOB_WHAT, BDATA_WHAT

	* guile-api.h (BSMOB_WHAT, BDATA_WHAT): New #define:s.
	* guile-api.c: Do ‘s/"svz-binary-data"/BDATA_WHAT/g’;
	‘s/"svz-binary"/BSMOB_WHAT/g’.
	* guile-bin.c: Likewise.

2011-08-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Use ‘scm_mem2string’ for V17.

	Hmm, ‘scm_mem2string’ is "discouraged" but not (yet?) "deprecated".
	Using it we avoid (for now) jumping into locale land, which has its
	own set of quirks.

	* gi.c [V17] (mem2scm): Use ‘scm_mem2string’.

2011-08-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Fix bug: Declare smob sizes.

	* gi.c (gi_make_tag): Take arg ‘sz’; pass it to
	‘scm_make_smob_type’; also, default free func to ‘scm_free0’.
	* gi.h (gi_make_tag): Update func decl.
	* guile-bin.c (guile_bin_init): Declare ‘svz-binary’ size.
	* guile-server.c (INIT_SMOB): Update call to ‘gi_make_tag’.

2011-08-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Use ‘scm_free0’ directly.

	* gi.c [!SCM_SMOB_DATA] (always_zero): Delete func.
	(gi_make_tag) [!SCM_SMOB_DATA]: Use ‘scm_free0’ directly.

2011-07-16  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Simplify ‘serveez-nuke’ exit-value protocol.

	This is motivated by t005 segfaulting under Guile 1.8.7.

	* serveez.c: Don't #include "gi.h".
	(global_exit_value): Change type from ‘SCM’ to ‘int’.
	(guile_launch_pad): Update its init; pass it directly to ‘exit’.
	* guile-server.c (global_exit_value): Update var decl.
	(guile_nuke_happened): Don't bother w/ gc protection; also,
	finangle the ‘scm_exit_status’ arg to keep it from segfaulting.

2011-07-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Arrange for ‘serveez-nuke’ to set serveez exit value.

	* serveez.c: #include "gi.h".
	(global_exit_value): New var.
	(guile_launch_pad): Init ‘global_exit_value’;
	use ‘scm_exit_status’ on it to compute ‘exit’ arg.
	* guile-server.c (global_exit_value): New var decl.
	(guile_nuke_happened): Take optional arg EXIT-VALUE;
	if set, GC-protect it and save it to ‘global_exit_value’.

2011-07-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Simplify password init for control protocol.

	* option.c (handle_options): Use ‘svz_strdup’ for password.
	* serveez.c (guile_entry): Transfer the password
	from ‘option’ to ‘control_protocol_password’ directly.

2011-07-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http] Fix bug: Don't allocate ‘host’ config item in perm space.

	Allocating in permanent space (via ‘svz_pstrdup’) is wrong because
	the http configuration (including the ‘host’ item) is later freed.
	Some versions of glibc report this as "double-free".  When built
	w/ ‘ENABLE_DEBUG=1 DEBUG_MEMORY_LEAKS=1’, ‘svz_free’ reports the
	pointer "not found in heap".

	* http-server/http-core.c (http_localhost): Use ‘svz_strdup’.

2011-07-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Clean up for ‘ENABLE_DEBUG=1 DEBUG_MEMORY_LEAKS=1’.

	* le-u32-hash.h: #include <stdint.h>.

2011-07-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http cgi] Handle ‘PATH_INFO’; bump to CGI 1.1.

	* http-server/http-cgi.h (HTTP_NO_CGI): Delete #define.
	(CGI_VERSION): Bump version to "1.1".
	(http_check_cgi, http_cgi_exec): Delete func decls.
	* http-server/http-cgi.c (details): New struct.
	(clear_details): New static func.
	(cgi_create_envp): Rename from ‘http_create_cgi_envp’;
	don't take SCRIPT; instead, take ‘struct details *det’;
	use ‘det->script’ directly for ‘SCRIPT_NAME’;
	jam env vars ‘PATH_INFO’, ‘QUERY_STRING’.
	(check_cgi): Rename from ‘http_check_cgi’; make static;
	take ‘struct details *det’; change type of rv to ‘int’;
	on error, return -1; populate ‘det’ with script, filename,
	path-info and nv-pairs; don't bother w/ filename realloc.
	(pre_exec): Rename from ‘http_pre_exec’; make static; don't
	take ‘file’, ‘request’; instead, take ‘struct details *det’;
	update call to ‘cgi_create_envp’; don't set ‘QUERY_STRING’ here.
	(cgi_exec): Rename from ‘http_cgi_exec’; make static; don't
	take ‘file’, ‘request’; instead, take ‘struct details *det’;
	update calls to ‘pre_exec’.
	(LOSE): New macro.
	(http_cgi_get_response, http_post_response): Update calls
	to ‘check_cgi’, ‘cgi_exec’; use ‘clear_details’, ‘LOSE’.

2011-07-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘size_t’ more.

	* nut-server/gnutella.c (nut_hash_keylen):
	Change return type to ‘size_t’.

2011-07-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘%zu’ in format string for ‘size_t’ args.

	* foo-server/foo-proto.c (foo_info_server): Use ‘%zu’.
	* guile.c (guile_access_interfaces): Likewise.
	* http-server/http-proto.c (http_info_server): Likewise.
	* nut-server/gnutella.c (nut_info_server): Likewise.

2011-06-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi 2.x] Presume V19 if SCM_MAJOR_VERSION is 2.

	* gi.c [2 == SCM_MAJOR_VERSION] (V19): New #define.

2011-06-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Don't define some procs that Guile might already provide.

	* guile-missing.h.in: New file.
	* guile-api.c: #include "guile-missing.h".
	(guile_svz_inet_ntoa, guile_svz_inet_aton, guile_svz_ntohl)
	(guile_svz_htonl, guile_svz_ntohs, guile_svz_htons):
	Surround with like-named ‘#if GUILE_MISSING_foo ... #endif’;
	rename exported scheme procedure without "svz:" prefix.
	* guile-server/icecast-server.scm (icecast-detect-proto)
	(icecast-next-file): Use ‘inet-ntoa’ directly.
	* guile-server/inetd.scm (bind-rpc-service): Use ‘ntohs’ directly.

2011-06-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Fix bug: Use $(LDFLAGS) and $(CPPFLAGS) directly.

	Regression introduced 2011-05-31,
	"Drop ‘--with-guile’; use only guile-config(1)".

	* Makefile.am (AM_CPPFLAGS): Remove $(GUILE_CFLAGS).
	(serveez_LDFLAGS): Add $(LDFLAGS); remove $(GUILE_LDFLAGS).
	(snarfcppopts): Add $(CPPFLAGS); remove $(GUILE_CFLAGS).

2011-06-08  Thien-Thi Nguyen  <ttn@ambire>

	[gi 1.8] Use ‘scm_to_locale_stringbuf’.

	* gi.c (gi_get_xrep) [V17]: Use ‘scm_to_locale_stringbuf’.

2011-06-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi 1.6] Fix bug: Use ‘scm_c_make_vector’ correctly.

	* gi.c (make_vector): Delete macro.
	(gi_n_vector) [V15]: Use ‘len’ directly.

2011-06-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Use facilities that implicitly ‘AC_DEFINE’.

	* http-server/http-core.c (timezone, daylight): For preproc
	conditional, use ‘!HAVE_DECL_TIMEZONE || !HAVE_DECL_DAYLIGHT’.

2011-06-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Merge ‘$(SERVEEZ_LIBS)’ into ‘$(LIBS)’.

	* Makefile.am (serveez_LDADD): Remove $(SERVEEZ_LIBS).

2011-06-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Remove "AWCS protocol / server" support.

	* Makefile.am [AWCS] (SUBDIRS, PROTOLIBS):
	Delete ‘+=’-style assignements.
	* cfgfile.c: Don't #include "awcs-server/awcs-proto.h".
	(init_server_definitions) [ENABLE_AWCS_PROTO]:
	Don't add servertype ‘awcs_server_definition’.
	* ctrl-server/control-proto.c (ctrl_stat): Don't mention AWCS.
	* awcs-server/Makefile.am: Delete file.
	* awcs-server/awcs-proto.c: Delete file.
	* awcs-server/awcs-proto.h: Delete file.
	* awcs-server/: Delete directory.

2011-06-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Remove "native MSVC" support.

	* Makefile.am (EXTRA_DIST): Remove
	svzconfig.h.serveez, config.h.serveez.
	(svzconfig.h.serveez, config.h.serveez): Delete targets.
	(stems, woeap, woedsp): Delete vars.
	(EXTRA_DIST): Remove serveez.rc, $(woeap), $(woedsp).
	(MAINTAINERCLEANFILES): Remove $(woedsp).
	* serveez.ap: Delete file.

2011-06-01  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Reorder src/Makefile.am top-level; split ‘SUFFIXES’.

	* Makefile.am (.puny.c, .scm.puny): Move earlier in file.
	(SUFFIXES): Add .scm, .puny, .c; split; use ‘+=’ for second.

2011-05-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_exactp

	Suggested by Mike Gran.

	* gi.c (gi_exactp): New func.
	* gi.h (gi_exactp): New func decl.
	* guile-api.c: Do ‘s/SCM_EXACTP/gi_exactp/g’.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* guile-api.h (SCM_EXACTP): Delete macro.
	(ASSERT_EXACT): Use ‘gi_exactp’.

2011-05-28  Mike Gran  <spk121@yahoo.com>  (tiny change)

	[gi 1.8] Fix bug: Call ‘scm_makfromstr’ w/ third arg.

	* gi.c [V17] (mem2scm, mem02scm): New macros.

2011-05-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘svz_address_t *’ for func args / struct members.

	U ≡ "Update internals".
	* awcs-server/awcs-proto.c (awcs_status_connected): U.
	* ctrl-server/control-proto.c (ctrl_stat_id, stat_con_internal): U.
	* guile-api.c (guile_sock_connect, guile_sock_remote_address)
	(guile_sock_local_address, guile_coserver_rdns): U.
	* guile.c (access_interfaces_internal, guile_access_interfaces): U.
	* http-server/http-cgi.c (http_create_cgi_envp): U.
	* http-server/http-core.c (http_log, http_error_response): U.
	* http-server/http-proto.c (http_init): U.
	* irc-server/irc-config.c (irc_client_valid): U.
	* irc-server/irc-server.c (irc_dns_done): U.
	* nut-server/gnutella.c (nut_connect_ip)
	(nut_sock_client_key, nut_detect_connect): U.
	* nut-server/nht-hostlist.c (nut_hosts_check, nut_host_catcher): U.
	* nut-server/nut-request.c (nut_push_request, nut_v4addr_from): U.
	* nut-server/nut-transfer.c (nut_init_transfer, nut_send_push): U.
	* options.c (display_ifc): U.
	* tunnel-server/tunnel.c (tnl_addr, tnl_create_socket)
	(tnl_connect_socket, tnl_check_request_tcp_target)
	(tnl_handle_request_udp_target, tnl_handle_request_udp_source)
	(tnl_handle_request_icmp_target, tnl_handle_request_icmp_source): U.

2011-05-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[ipv6] Add potential unlameness: IPV6_OK

	* networking-headers.h (IPV6_OK): New #define.

2011-05-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[ipv6] Add lameness: STILL_NO_V6_DAMMIT

	* networking-headers.h (STILL_NO_V6_DAMMIT): New macro.

2011-05-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add ‘svz_address_t’ and related functions / macros.

	* libserveez.h: #include "libserveez/address.h".

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Make ‘_CTYPE’ auto-prefix "svz_" portion of the type.

	U ≡ "Throughout, update calls to
	‘MAKE_SMOB’, ‘CHECK_SMOB’, ‘CHECK_SMOB_ARG’".
	* guile-server.c: U.
	(_CTYPE): Change prefix to "guile_svz_".
	(MAKE_SMOB_DEFINITION): Don't take ‘description’; instead,
	compute it from ‘ctype’.  Update all callers.
	(INIT_SMOB): Update calls to ‘NAME_TAG’ and ‘NAME_PRINT’.
	* guile-api.c: U.

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_make_tag

	* gi.c [!SCM_SMOB_DATA] (always_zero): New static func.
	(gi_make_tag): New func.
	* gi.h (gi_make_tag): New func decl.
	* guile-bin.c (guile_bin_init): Use ‘gi_make_tag’.
	* guile-server.c (NAME_INIT): Delete macro.
	[HAVE_OLD_SMOBS] (always_zero): Delete func.
	(CREATE_SMOB_TAG): Delete macro.
	(MAKE_SMOB_DEFINITION): Don't define init func.
	(INIT_SMOB): Use ‘gi_make_tag’.
	(guile_server_init): Update call to ‘INIT_SMOB’.
	* guile-api.h (HAVE_OLD_SMOBS): Delete #define.

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_make_smob

	* gi.c [!SCM_NEWSMOB] (SCM_NEWSMOB): New #define.
	[!SCM_RETURN_NEWSMOB] (SCM_RETURN_NEWSMOB): New #define.
	(gi_make_smob): New func.
	* gi.h (gi_make_smob): New func decl.
	* guile-bin.c (NEW_BIN): New macro.
	(guile_string_to_bin, guile_bin_reverse)
	(guile_bin_subset, guile_list_to_bin)
	(guile_data_to_bin, guile_garbage_to_bin): Use ‘NEW_BIN’.
	* guile-server.c (NAME_CREATE): Delete macro.
	(MAKE_SMOB_DEFINITION): Don't define a create func.
	(MAKE_SMOB): Use ‘gi_make_smob’.
	* guile-api.h (SCM_NEWSMOB, SCM_RETURN_NEWSMOB): Delete macros.

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_smob_data

	* gi.c (gi_smob_data): New func.
	* gi.h (gi_smob_data): New func decl.
	* guile-api.h [!SCM_SMOB_DATA] (SCM_SMOB_DATA): Delete #define.
	* guile-bin.c (GET_BIN_SMOB): Delete macro.
	(CHECK_BIN_SMOB_ARG, guile_bin_print, guile_bin_free)
	(guile_bin_equal, guile_bin_search, guile_bin_concat_x)
	(guile_bin_to_data): Use ‘gi_smob_data’.
	* guile-server.c (NAME_GET): Delete macro.
	(MAKE_SMOB_DEFINITION): Don't define getter func;
	use ‘gi_smob_data’ for print func.
	(GET_SMOB): Delete macro.
	(CHECK_SMOB, CHECK_SERVER_SMOB_ARG): Use ‘gi_smob_data’.

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Decruft: Don't define unused smob free funcs.

	* guile-server.c (NAME_FREE): Delete macro.
	[HAVE_OLD_SMOBS] (always_zero): New static func.
	[HAVE_OLD_SMOBS] (CREATE_SMOB_TAG): Use ‘always_zero’.
	(MAKE_SMOB_DEFINITION): Don't define a free func.

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_smob_tagged_p

	* gi.c (gi_smob_tagged_p): New func.
	* gi.h (gi_smob_tagged_p): New func decl.
	* guile-bin.c (CHECK_BIN_SMOB): Use ‘gi_smob_tagged_p’.
	* guile-server.c (NAME_PRED): Delete macro.
	(MAKE_SMOB_DEFINITION): Don't define predicate func.
	(CHECK_SMOB): Use ‘gi_smob_tagged_p’.

2011-05-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Decruft: Remove ‘svz_servertype_config_print’ et al.

	* guile-server.c [ENABLE_DEBUG] (print_hash_kv): Delete func.
	[ENABLE_DEBUG] (portcfg_print): Likewise.
	[ENABLE_DEBUG] (guile_servertype_config_print): Likewise.
	(guile_servertype_config) [0]:
	Don't call ‘guile_servertype_config_print’.

2011-05-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[irc int] Dose ‘irc_string_regex’ w/ ‘const’.

	* irc-core/irc-core.c (irc_string_regex):
	Declare ‘const’ args ‘text’ and ‘regex’, and local var ‘p’.
	* irc-core/irc-core.h (irc_string_regex): Update func decl.

2011-05-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[nut int] Add abstraction: nut_sock_client_key

	* nut-server/gnutella.c (nut_sock_client_key): New static func.
	(nut_disconnect, nut_connect_socket): Use ‘nut_sock_client_key’.

2011-05-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[nut int] Add abstraction: nut_v4addr_from

	* nut-request.c (nut_v4addr_from): New func.
	(nut_query, nut_ping): Use ‘nut_v4addr_from’.
	* nut-request.h (nut_v4addr_from): New func decl.
	* nut-transfer.c: #include "nut-request.h".
	(nut_send_push): Use ‘nut_v4addr_from’.

2011-05-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib hash] Declare ‘const’ all ‘char *key’ args.

	U ≡ "Declare ‘const’ all ‘char *’ args".
	* awcs-server/awcs-proto.c (awcs_hash_keylen)
	(awcs_hash_equals, awcs_hash_code): U.
	* irc-core/irc-core.c (irc_string_equal): U.
	* irc-core/irc-core.h (irc_string_equal): U.
	* nut-server/gnutella.c (nut_hash_keylen)
	(nut_hash_equals, nut_hash_code): U.

2011-05-19  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Make libserveez + headers installation optional.

	* Makefile.am (aclocaldir, aclocal_DATA, bin_SCRIPTS)
	(include_HEADERS): Conditionalize var with ‘COURAGEOUS’.
	(install-data-hook): Conditionalize actions with ‘COURAGEOUS’.

2011-05-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use automake conditionals to gate sub-proto libs.

	* Makefile.am (SUBDIRS): Remove $(SERVERDIRS).
	(PROTOLIBS): Remove $(SERVERLIBS).
	[SNTP] (SUBDIRS): Add foo-server.
	[SNTP] (PROTOLIBS): Add foo-server/libfoo.a.
	[GNUTELLA] (SUBDIRS): Add nut-server.
	[GNUTELLA] (PROTOLIBS): Add nut-server/libnut.a.
	[TUNNEL] (SUBDIRS): Add tunnel-server.
	[TUNNEL] (PROTOLIBS): Add tunnel-server/libtunnel.a.
	[CONTROL] (SUBDIRS): Add ctrl-server.
	[CONTROL] (PROTOLIBS): Add ctrl-server/libctrl.a.
	[IRC] (SUBDIRS): Add irc-server, irc-core.
	[IRC] (PROTOLIBS): Add irc-server/libircserver.a,
	irc-core/libirccore.a.
	[AWCS] (SUBDIRS): Add awcs-server.
	[AWCS] (PROTOLIBS): Add awcs-server/libawcs.a.
	[HTTP] (SUBDIRS): Add http-server.
	[HTTP] (PROTOLIBS): Add http-server/libhttp.a.
	[FAKEIDENT] (SUBDIRS): Add fakeident-server.
	[FAKEIDENT] (PROTOLIBS): Add fakeident-server/libfakeident.a.
	[PROG] (SUBDIRS): Add prog-server.
	[PROG] (PROTOLIBS): Add prog-server/libprog.a.
	* awcs-server/awcs-proto.c: Remove ‘#if ENABLE_...’, peer
	‘#else ... #endif’ block, and obsolete ‘have_...’ dummy var.
	* ctrl-server/control-proto.c: Likewise.
	* fakeident-server/ident-proto.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-core.c: Likewise.
	* http-server/http-dirlist.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-config.c: Likewise.
	* irc-server/irc-crypt.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-event-2.c: Likewise.
	* irc-server/irc-event-3.c: Likewise.
	* irc-server/irc-event-4.c: Likewise.
	* irc-server/irc-event-5.c: Likewise.
	* irc-server/irc-event-6.c: Likewise.
	* irc-server/irc-event-7.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* irc-server/irc-server.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-core.c: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-route.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* sntp-server/sntp-proto.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_nfalsep

	* gi.c (gi_nfalsep): New func.
	(gi_stringp, gi_symbolp): Use ‘gi_nfalsep’.
	* gi.h (gi_nfalsep): New func decl.
	* guile-api.h: Throughout, use ‘gi_nfalsep’.
	* guile-api.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build guile] Determine smob tag type at configure time.

	* guile-bin.c (guile_bin_tag): Use ‘svz_smob_tag_t’.
	* guile-server.c (MAKE_SMOB_DEFINITION): Likewise.
	* guile-api.h (SCM_VERSION_15X, scm_t_bits): Delete #define:s.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int guile] Eliminate casts in args to ‘scm_internal_catch’.

	U(X) ≡ "Change type of X to ‘void *’; cast internally".
	* guile-server.c (guile_call_body): U (data).
	(guile_call_handler): U (data).
	(guile_call): U (body_data); U (handler_data);
	eliminate casts in args to ‘scm_internal_catch’.
	* guile.c (guile_eval_file): Delete cast to ‘char *’.
	(guile_load_config): Eliminate casts in args to
	‘scm_internal_catch’; pass NULL as "handler data".
	* guile-api.h (scm_t_catch_body)
	(scm_t_catch_handler): Delete typedefs.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add funcs: gi_primitive_{eval,load}

	* gi.c (gi_primitive_eval, gi_primitive_load): New funcs.
	* gi.h (gi_primitive_eval, gi_primitive_load): New func decls.
	* guile.c (guile_eval_file): Use new funcs.
	* guile-api.h (scm_primitive_eval_x)
	(scm_c_primitive_load): Delete macros.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int guile] Refine some guile.c funcs.

	* guile.c (guile_exception): Use local var for
	current error port; pop ‘args’; use ‘SCM_CADR’.
	(guile_init): #include "guile.x" right after ‘define-module’.
	(guile_eval_file): Don't bother saving ‘primitive-eval’ rv.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Decruft: Delete some obsoleted macros.

	* guile-api.h (SCM_VERSION_17X): Delete #define.
	(scm_gc_protect_object, scm_gc_unprotect_object): Delete macros.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add funcs: gi_{string,symbol}p

	* gi.c (gi_stringp, gi_symbolp): New funcs.
	(gi_get_xrep): Use ‘gi_symbolp’.
	* gi.h (gi_stringp, gi_symbolp): New func decls.
	(STRING_OR_SYMBOL_P): Use ‘gi_stringp’, ‘gi_symbolp’.
	* guile-api.c: Throughout, use new funcs.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* guile-api.h (SCM_STRINGP, SCM_SYMBOLP): Delete macros.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Look in $(top_builddir) for config.status.

	* irc-server/Makefile.am (timestamp.c):
	Use $(top_builddir)/config.status.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc int] Build .tsar files under src/, only if MAINTAINER_MODE.

	* Makefile.am (snarfcppopts): New var.
	(.c.x): Use $(snarfcppopts).
	[MAINTAINER_MODE] (noinst_DATA): New var.
	(foo_ar_opts, foo_ar_update): New vars.
	(scm_docable): New var.
	(scm.tsar): New target.
	(c_docable): New var.
	(c.tsar): New target.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_free_and_zero’, SVZ_{NUM2PTR,PTR2NUM}.

	* misc-macros.h: New file.
	* Makefile.am (noinst_HEADERS): Add misc-macros.h.
	* guile-bin.c: #include "misc-macros.h".
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* serveez.c: Likewise.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Fix bug: Ensure current module for initialization is ‘(guile)’.

	This is a skew bug: the default module changed from ‘(guile)’ to
	‘(guile-user)’ starting with Guile 1.4, but ‘SCM_DEFINE’ may or may
	not track that change.  Best to be explicit.

	* guile.c (guile_init): Do ‘(define-module (guile))’ first.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstractions: ASSERT_{EXACT,STRING}

	* guile-api.h (ASSERT_EXACT, ASSERT_STRING): New macros.
	* guile-api.c: Use them, throughout.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add funcs: gi_{malloc,realloc,free}

	* gi.c (UNUSED): New macro.
	(gi_malloc, gi_realloc): New funcs.
	(POSSIBLY_UNUSED_GI_FREE_PARAM): New macro.
	(gi_free): New func.
	* gi.h (gi_malloc, gi_realloc, gi_free): New func decls.
	* guile-api.c (guile_read_file):
	Use ‘gi_malloc’, ‘gi_realloc’, ‘gi_free’.
	* guile-bin.c (MAKE_BIN_SMOB): Use ‘gi_malloc’.
	(guile_bin_free): Use ‘gi_free’.
	(guile_string_to_bin, guile_bin_reverse): Use ‘gi_malloc’.
	(guile_bin_concat_x): Use ‘gi_realloc’, ‘gi_malloc’.
	(guile_list_to_bin): Use ‘gi_malloc’, ‘gi_free’.
	* guile-api.h (scm_gc_malloc, scm_gc_free)
	(scm_gc_realloc): Delete macros.

2011-05-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Avoid ‘SCM_WRITABLE_VELTS’.

	* guile-api.c (scm_return_rpcentry, scm_portmap_list):
	Build list first, then convert it to a vector.
	* guile-api.h (SCM_WRITABLE_VELTS): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Avoid ‘SCM_INUM’, ‘SCM_INUMP’, ‘SCM_MAKINUM’.

	* guile-api.h (SCM_OUT_OF_RANGE): Use ‘gi_integer2scm’.
	* guile-api.c (scm_getrpc): Use ‘SCM_EXACTP’, ‘gi_scm2int’.
	(scm_portmap, guile_coserver_rdns, guile_sock_find): Likewise.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Decruft: Only #include <guile/gh.h> where it's needed.

	* guile-api.c: #include <libguile.h> unconditionally;
	never #include <guile/gh.h>.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* serveez.c: Likewise.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_define

	* gi.c (gi_define): New func.
	* gi.h (gi_define): New func decl.
	* guile-api.c (guile_api_init): Use ‘gi_define’.
	* guile.c (guile_init): Likewise.
	* guile-api.h (scm_c_define): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Decruft: Remove unused macro.

	* guile-api.h (scm_c_free): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int guile] Fix bug: Don't free auto vars.

	These buffers are now auto (stack) allocated,
	so there is no need to free them.
	Omission from 2011-05-09, "[int] For Scheme->C
	symbol/string conversion, alloc on stack".

	* guile-api.c (guile_sock_connect): Don't free ‘str’.
	[HAVE_PMAP_GETMAPS] (scm_portmap_list): Likewise.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int guile] Fix bug: Use libserveez for freeing ‘sock->boundary’.

	The string saved into ‘sock->boundary’ is now allocated by
	libserveez so it makes sense to use libserveez to free it.
	Omission from 2011-05-09, "[int] For Scheme->C
	symbol/string conversion, alloc on stack".

	* guile-server.c (guile_sock_clear_boundary):
	Use ‘svz_free_and_zero’ for ‘sock->boundary’.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘GI_GET_XREP’ more.

	* guile-api.c (scm_getrpc) [HAVE_GETRPCBYNAME]: Use ‘GI_GET_XREP’.
	* guile-bin.c (guile_string_to_bin)
	(guile_bin_search, guile_bin_concat_x): Likewise.
	* guile-server.c (guile_sock_print): Likewise.
	* guile-api.h (SCM_STRING_UCHARS, SCM_STRING_CHARS): Delete macros.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Incorporate ‘__CTYPE’ into unique caller.

	* guile-server.c (_CTYPE): Do token-pasting directly.
	* guile-api.h (__CTYPE): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Decruft: Delete some unused macros.

	* guile-api.h (scm_mem2string, scm_c_symbol2str): Delete macros.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘scm_fileno’.

	* guile-api.c (guile_read_file): Use ‘scm_fileno’.
	* guile-api.h (SCM_FPORT_FDES): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Replace macro ‘guile_integer’ with macro ‘integer_else’.

	* guile-server.c (integer_else): New macro.
	(guile_func_global_init, guile_func_init, guile_func_detect_proto)
	(guile_func_disconnected_socket, guile_func_kicked_socket)
	(guile_func_connect_socket, guile_func_finalize)
	(guile_func_global_finalize, guile_func_notify, guile_func_reset)
	(guile_func_check_request, guile_func_handle_request)
	(guile_func_idle_func, guile_func_trigger_func)
	(guile_func_check_request_oob): Use ‘integer_else’.
	* guile-api.h (guile_integer): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_scm2int

	* gi.c (gi_scm2int): New func.
	* gi.h (gi_scm2int): New func decl.
	* guile-api.c (guile_sock_connect)
	(guile_sock_receive_buffer_size, guile_sock_send_buffer_size)
	(guile_sock_receive_buffer_reduce, guile_sock_no_delay)
	(guile_sock_idle_counter, guile_sock_find, guile_read_file)
	(guile_sock_send_oob): Use ‘gi_scm2int’.
	* guile-bin.c (guile_bin_search, guile_bin_set_x)
	(guile_bin_ref, guile_bin_subset, guile_list_to_bin)
	(BIN_REF_BODY, BIN_SET_BODY): Likewise.
	* guile-server.c (guile_sock_boundary)
	(guile_sock_floodprotect): Likewise.
	* guile.c (guile_to_integer): Likewise.
	* guile-api.h (guile_integer): Likewise.
	(SCM_NUM2INT): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_scm2long

	* gi.c (gi_scm2long): New func.
	* gi.h (gi_scm2long): New func decl.
	* guile-api.c (VALIDATE_NETPORT): Use ‘gi_scm2long’.
	* guile-bin.c (CTYPE_CHECK_RANGE): Likewise.
	* guile-api.h (SCM_NUM2LONG): Delete macro.

2011-05-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Fix bug: Make guile-boot.c first.

	Since guile.c does #include "guile-boot.c", init
	snarfing to make guile.x fails on guile-boot.c absence.
	Regression introduced 2011-05-07,
	"[build int] Use Guile-BAUX for init snarfing".

	* Makefile.am (BUILT_SOURCES): Move guile-boot.c first.

2011-05-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] For Scheme->C symbol/string conversion, alloc on stack.

	This unfortunately goes against GNU ideals by introducing
	a slew of undocumented internal arbitrary limits.

	U ≡ "Use ‘GI_GET_XREP’ or ‘GI_GET_XREP_MAYBE’; convert
	‘char *’ var to ‘char[]’; don't ‘scm_c_free’ afterwards".
	* gi.c: #include "timidity.h".
	(gi_get_xrep): New func.
	* gi.h (STRING_OR_SYMBOL_P): New macro.
	(gi_get_xrep): New func decl.
	(GI_GET_XREP, GI_GET_XREP_MAYBE): New macros.
	* guile-api.c (guile_sock_connect, guile_svz_inet_aton)
	(named_instance_or_smob, scm_portmap_list, guile_coserver_dns): U.
	* guile-server.c (optionhash_extract_proc)
	(guile_func_info_client, guile_func_info_server)
	(guile_sock_boundary, guile_server_config_ref)
	(guile_server_state_ref, guile_server_state_set_x)
	(guile_servertype_config_default, servertype_config_internal): U.
	* guile.c (guile_error, guile_to_optionhash, guile_to_integer)
	(guile_to_boolean, guile_to_hash, guile_to_strarray)
	(optionhash_extract_string, optionhash_cb_string)
	(optionhash_cb_portcfg, guile_config_instantiate)
	(guile_define_server, guile_define_port, guile_bind_server)
	(STRING_CHECKER_BODY, string_accessor, guile_exception): U.
	* guile-api.h (scm_c_scm2chars)
	(scm_c_string2str, gh_scm2chars): Delete macros.
	* guile.h (guile_to_string): Delete macro.

2011-05-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstraction: named_instance_or_smob

	* guile-api.c (named_instance_or_smob): New static func.
	(guile_server_listeners, guile_server_clients): Use it.

2011-05-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Refine ‘guile_call_handler’ a bit.

	* guile-server.c (guile_call_handler): Use local
	var for "current error port"; use ‘scm_display’ more;
	don't bother converting ‘tag’ to a C string.

2011-05-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_string_length

	* gi.c (gi_string_length): New func.
	* gi.h (gi_string_length): New func decl.
	* guile-bin.c (guile_string_to_bin): Use ‘gi_string_length’.
	(guile_bin_search, guile_bin_concat_x): Likewise.
	* guile-server.c (guile_sock_boundary)
	(guile_sock_print): Likewise.

2011-05-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_scm2ulong

	* gi.c (gi_scm2ulong): New func.
	* gi.h (gi_scm2ulong): New func decl.
	* guile-api.c (guile_svz_inet_ntoa, guile_svz_ntohl)
	(guile_svz_htonl, guile_sock_remote_address)
	(guile_sock_local_address, guile_coserver_rdns): Use ‘gi_scm2ulong’.
	* guile-bin.c (guile_list_to_bin, CTYPE_CHECK_RANGE): Likewise.
	* guile-server.c (servertype_config_internal): Likewise.
	* guile.c (guile_to_hash, guile_to_strarray)
	(guile_to_intarray): Likewise.
	* guile-api.h (SCM_NUM2ULONG): Delete macro.

2011-05-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use local var in ‘guile_error’.

	* guile.c (guile_error): Use local var for "valid load-port".

2011-05-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_lookup

	* gi.c (gi_lookup): New func.
	* gi.h (gi_lookup): New func decl.
	* guile-server.c (optionhash_extract_proc): Use ‘gi_lookup’.
	* guile-api.h (guile_lookup): Delete macro.

2011-05-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc int] Convert some "manual" @deffn to @tsin.

	* guile.c (guile_access_verbosity): Update docstring.
	(guile_access_maxsockets, guile_access_passwd): Likewise.

2011-05-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop support for doc integration w/ Guile help system.

	* guile-boot.scm (serveez-doc-add!): Delete proc.

2011-05-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Use Guile-BAUX for init snarfing.

	U ≡ "Delete all ‘scm_c_define_gsubr’
	and ‘DEFINE_SOCK_CALLBACK’ calls".
	* Makefile.am (BUILT_SOURCES):
	Add guile-bin.x, guile-server.x, guile.x.
	(.c.x): New old-style suffix rule.
	* guile-api.c (guile_api_init): U.
	* guile-bin.c (guile_bin_init): U; #include "guile-bin.x".
	* guile-server.c (DEFINE_SOCK_CALLBACK): Delete macro.
	(guile_server_init): U; #include "guile-server.x".
	* guile.c (guile_init): U; #include "guile.x".
	* guile-api.h (scm_c_define_gsubr): Delete macro.

2011-05-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use Guile-BAUX for "Scheme proc from C source" snarfing.

	U ≡ "Use ‘SCM_DEFINE’; write/rewrite/rephrase docstrings, use
	‘#define FUNC_NAME __func__’; avoid cpp-pasting ‘FUNC_NAME’".
	* guile-api.c: U.
	* guile-bin.c: U.
	(_CTYPE): Delete macro.
	(BIN_REF_HEAD, BIN_SET_HEAD): New macros.
	(guile_bin_long_ref, guile_bin_int_ref, guile_bin_short_ref)
	(guile_bin_char_ref): Use ‘BIN_REF_HEAD’.
	(guile_bin_long_set, guile_bin_int_set, guile_bin_short_set)
	(guile_bin_char_set): Use ‘BIN_SET_HEAD’.
	* guile-server.c: U.
	* guile.c: U.

2011-05-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstraction: STRING_CHECKER_BODY

	* guile.c (STRING_CHECKER_BODY): New macro.
	(MAKE_STRING_CHECKER): Delete macro.
	(guile_check_port, guile_check_server)
	(guile_check_stype): Use ‘STRING_CHECKER_BODY’.

2011-05-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstractions: BIN_{REF,SET}_BODY

	* guile-bin.c (BIN_REF_BODY, BIN_SET_BODY): New macros.
	(MAKE_BIN_REF, MAKE_BIN_SET): Delete macros.
	(guile_bin_long_ref, guile_bin_int_ref, guile_bin_short_ref)
	(guile_bin_char_ref): Use ‘BIN_REF_BODY’.
	(guile_bin_long_set, guile_bin_int_set, guile_bin_short_set)
	(guile_bin_char_set): Use ‘BIN_SET_BODY’.

2011-05-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Make ‘const’ 2nd arg to guile_to_{hash,strarray,intarray}.

	* guile.c (guile_to_hash): Make 2nd arg ‘const’; rename to ‘func’.
	(guile_to_strarray, guile_to_intarray): Make 2nd arg ‘const’.
	* guile.h (guile_to_intarray, guile_to_strarray)
	(guile_to_hash): Update func decls.

2011-05-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstraction: SOCK_CALLBACK_BODY

	* guile-server.c (SOCK_CALLBACK_BODY): New macro.
	(MAKE_SOCK_CALLBACK): Delete macro.
	(guile_sock_handle_request): Use ‘SOCK_CALLBACK_BODY’.
	(guile_sock_check_request): Likewise.
	* guile-api.c (guile_sock_disconnected_socket)
	(guile_sock_kicked_socket, guile_sock_trigger_cond)
	(guile_sock_trigger_func, guile_sock_idle_func)
	(guile_sock_check_request_oob): Likewise.

2011-04-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[sntp int] Use svz_{sock,udp}_write directly.

	* sntp-server/sntp-proto.c (wr_t): New typedef.
	(answer): Rename from ‘sntp_create_reply’; don't
	take REPLY; instead, take SOCK and WR; apply WR
	to the computed reply; return what WR returns.
	(sntp_connect_socket, sntp_handle_request): Use ‘answer’.

2011-04-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Fix bug: #include <sys/time.h> when seeking ‘gettimeofday’.

	* sntp-server/sntp-proto.c: For preproc conditional
	around #include <sys/time.h>, also check ‘HAVE_DECL_GETTIMEOFDAY’;
	also in that case, ‘#define USE_GETTIMEOFDAY’.
	(sntp_create_reply): Don't ‘#if HAVE_GETTIMEOFDAY’;
	instead ‘#if USE_GETTIMEOFDAY’.

2011-04-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘uint8_t’ more.

	U ≡ "Use ‘uint8_t’ or ‘uint8_t *’ for local var / cast";
	C ≡ "Remove cast to ‘unsigned char *’".
	* guile-api.c (guile_read_file):
	Use ‘uint8_t *’ directly for local var; C (unsigned char *).
	* guile-bin.c (guile_bin_t.data): Convert type to ‘uint8_t *’.
	(guile_string_to_bin): C.
	(guile_bin_search, guile_bin_reverse_x): U.
	(guile_bin_reverse): C.
	(guile_bin_set_x): U.
	(guile_bin_concat_x): U; C.
	(guile_bin_to_list): U.
	(guile_list_to_bin): C; U.
	* http-server/http-dirlist.c (http_create_uri): U.
	* le-u32-hash.h (le_u32_hash): U.
	* sntp-server/sntp-proto.c (sntp_create_reply)
	(sntp_connect_socket, sntp_handle_request): U.

2011-04-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘uint8_t’ for ‘svz_socket_t.oob’.

	* guile-api.c (guile_sock_send_oob): Use ‘uint8_t’ for cast.

2011-04-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘uint8_t’ for ICMP message type.

	* guile.c (guile_define_port): Use ‘uint8_t’ for cast.

2011-04-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘size_t’ for ‘svz_interface_t.index’.

	* option.c (display_ifc): Use ‘%zu’ in format string.

2011-04-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Use ‘gi_integer2scm’ more.

	* guile-api.c (scm_return_rpcentry, scm_portmap_list):
	Use ‘gi_integer2scm’; remove cast to ‘unsigned long’.

2011-04-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop typedef ‘svz_uint8_t’; use ‘uint8_t’ directly.

	* irc-server/irc-crypt.c: Do ‘s/svz_uint8_t/uint8_t/g’.
	* irc-server/irc-crypt.h: Likewise.
	* irc-server/irc-proto.h: Likewise.
	* libserveez/ChangeLog: Likewise.
	* libserveez/icmp-socket.c: Likewise.
	* libserveez/icmp-socket.h: Likewise.
	* libserveez/raw-socket.c: Likewise.
	* libserveez/raw-socket.h: Likewise.
	* libserveez/util.c: Likewise.
	* libserveez/util.h: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/gnutella.h: Likewise.
	* nut-server/nut-core.c: Likewise.
	* nut-server/nut-core.h: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-request.h: Likewise.
	* nut-server/nut-route.c: Likewise.
	* nut-server/nut-route.h: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* nut-server/nut-transfer.h: Likewise.

2011-04-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘uint16_t’ instead of ‘unsigned short’.

	* nut-server/gnutella.c: Do ‘s/unsigned short/uint16_t/g’.
	* nut-server/gnutella.h: Likewise.
	* nut-server/nut-core.c: Likewise.
	* nut-server/nut-core.h: Likewise.
	* nut-server/nut-request.c: Likewise.

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘mode_t’ for ‘svz_pipe_t.perm’.

	* guile.c (guile_define_port): Use ‘mode_t’ in cast.

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘gid_t’ for svz_pipe_t.{pgid,gid}.

	* guile.c (guile_define_port): Use ‘gid_t’ in cast.

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘uid_t’ for ‘svz_pipe_t.uid’.

	* guile.c (guile_define_port): Use ‘uid_t’ in cast.

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘size_t’ for ‘svz_hash_t’ dimensions.

	U ≡ "Convert type to ‘size_t’ for local var";
	S(X) ≡ "Likewise, for struct member(s) X".
	* http-server/http-cache.c
	(http_cache_entries): Convert type to ‘size_t’.
	(http_alloc_cache): U.
	* http-server/http-cache.h
	(http_cache_entries): Update var decl.
	(http_alloc_cache): Update func decl.
	* http-server/http-proto.c (http_init): U.
	* irc-server/irc-proto.c (irc_regex_channel, irc_regex_nick): U.
	* nut-server/gnutella.h (nut_config_t): S (connections).

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘size_t’ for ‘svz_array_t’ dimensions and indices.

	U ≡ "Convert type to ‘size_t’ for local var".
	* ctrl-server/control-proto.c (ctrl_stat_id): U.
	* foo-server/foo-proto.c (foo_connect_socket, foo_info_server): U.
	* guile-api.c (guile_server_listeners, guile_server_clients): U.
	* guile-server.c
	(guile_servertype_config_print): U; remove cast to ‘int’.
	* guile.c (guile_access_interfaces)
	(guile_strarray_to_guile, guile_intarray_to_guile): U.
	* irc-server/irc-config.c (irc_parse_config_lines): U.
	* irc-server/irc-proto.c (irc_check_tcp_bindings): U.
	* irc-server/irc-server.c (irc_connect_servers): U.
	* nut-server/gnutella.h (nut_config_t): Convert type to
	‘size_t’ for members ‘.search_index’.
	* nut-server/gnutella.c (nut_init, nut_server_notify): U.
	(nut_idle_searching): Remove cast to ‘unsigned long’.
	(nut_info_server): Likewise; also, U.
	* nut-server/nut-transfer.c
	(nut_init_transfer): U; remove cast to ‘unsigned long’.
	* prog-server/prog-server.h (prog_config_t):
	Change type to ‘size_t’ of member ‘.frequency’.
	* prog-server/prog-server.c
	(prog_check_frequency): U; remove cast to ‘unsigned long’.
	(prog_passthrough, prog_init): U.

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘size_t’ for memory allocation state.

	* ctrl-server/control-proto.c (svz_sock_printf):
	Update type of arg to ‘svz_get_curalloc’.
	* serveez.c (guile_entry): Likewise.

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘in_port_t’ instead of ‘unsigned short’.

	U ≡ "Convert type of arg or local var
	either from ‘unsigned short *’ to ‘in_port_t *’,
	or from ‘unsigned short’ to ‘in_port_t’";
	S(X) ≡ "Likewise, for struct member(s) X";
	C ≡ "Remove cast to ‘unsigned short’".
	* awcs-server/awcs-proto.c (awcs_status_connected): U.
	* guile-api.c (guile_sock_connect): U; C.
	(guile_svz_ntohs, guile_svz_htons, guile_sock_remote_address)
	(guile_sock_local_address, scm_portmap): C.
	* guile.c (guile_define_port): C.
	* irc-server/irc-proto.h (irc_server_t): S (port).
	* irc-server/irc-server.c (irc_connect_servers): C.
	* gnutella.c (nut_connect_ip): U.
	(dns_closure): S (port).
	(nut_dns_done, nut_connect_host): U.
	(nut_init): C.
	* nut-server/gnutella.h (nut_pong_t)
	(nut_reply_t, nut_push_t, nut_host_t, nut_config_t): S (port).
	* nut-server/nut-core.c (nut_parse_host, nut_parse_addr): U; C.
	(nut_client_key): U.
	* nut-server/nut-core.h (nut_parse_host)
	(nut_parse_addr, nut_client_key): U.
	* nut-server/nut-hostlist.c (nut_host_catcher): U.
	* nut-server/nut-hostlist.h (nut_host_catcher): U.
	* nut-server/nut-request.c (nut_query, nut_ping): C.
	* nut-server/nut-transfer.c (nut_send_push): C.
	* tunnel-server/tunnel.c (tnl_create_socket): U.
	* tunnel-server/tunnel.h (tnl_connect_t): S (port).

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Fix bug: Use ‘in_addr_t’ instead of ‘unsigned long’.

	U ≡ "Convert type of arg or local var
	either from ‘unsigned long *’ to ‘in_addr_t *’,
	or from ‘unsigned long’ to ‘in_addr_t’";
	S(X) ≡ "Likewise, for struct member(s) X";
	C ≡ "Remove cast to ‘unsigned long’".
	* awcs-server/awcs-proto.c (awcs_status_connected): U.
	* guile-api.c (guile_resolve): U.
	(guile_sock_connect, guile_coserver_rdns): U; C.
	* http-server/http-proto.c (http_init): U.
	* irc-server/irc-proto.h (irc_server_t): S (addr).
	* nut-server/gnutella.c (nut_connect_ip, nut_connect_host): U.
	* nut-server/gnutella.h (nut_pong_t)
	(nut_reply_t, nut_push_t, nut_host_t, nut_config_t): S (ip).
	* nut-server/nut-core.c (nut_parse_addr, nut_client_key): U.
	* nut-server/nut-core.h (nut_parse_addr, nut_client_key): U.
	* nut-server/nut-hostlist.c (nut_host_catcher): U.
	* nut-server/nut-hostlist.h (nut_host_catcher): U.
	* tunnel-server/tunnel.c (tnl_create_socket): U.
	* tunnel-server/tunnel.h (tnl_connect_t): S (ip).

2011-04-12  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Centralize ‘#include <arpa/inet.h>’.

	* networking-headers.h [!__MINGW32__]: #include <arpa/inet.h>.
	* irc-server/irc-server.c [!__MINGW32__]: Don't #include <arpa/inet.h>.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-core.c: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-04-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Rename some *_updn funcs to svz_updn_all_*.

	* serveez.c (guile_entry): Update all refs.

2011-04-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[nut int] Avoid ‘svz_hash_keys’.

	* nut-server/gnutella.c
	(dead_packet, disconnect_closure): New structs.
	(disconnect_internal): New static func.
	(nut_disconnect): Use it and ‘svz_hash_foreach’.
	(server_notify_closure): New struct.
	(server_notify_net_internal, server_notify_packet_internal)
	(server_notify_query_internal): New static funcs.
	(nut_server_notify): Use them and ‘svz_hash_foreach’.

2011-04-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[foo-server int] Avoid ‘svz_hash_keys’.

	* foo-server/foo-proto.c
	(info_server_closure): New struct.
	(info_server_internal): New static func.
	(foo_info_server): Use it and ‘svz_hash_foreach’.

2011-04-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[irc-server int] Avoid ‘svz_hash_values’.

	* irc-server/irc-event-2.c
	(names_cb_ch_closure, names_cb_cl_closure): New structs.
	(names_cb_ch_internal, names_cb_cl_internal): New static funcs.
	(irc_names_callback): Use new funcs and ‘svz_hash_foreach’.
	(list_cb_closure): New struct.
	(list_cb_internal): New static func.
	(irc_list_callback): Use it and ‘svz_hash_foreach’.
	* irc-server/irc-event-7.c
	(users_cb_closure): New struct.
	(users_cb_internal): New static func.
	(irc_users_callback): Use it and ‘svz_hash_foreach’.
	* irc-server/irc-proto.c
	(regex_channel_closure): New struct.
	(regex_channel_internal): New static func.
	(irc_regex_channel): Use it and ‘svz_hash_foreach’.
	(find_userhost_closure): New struct.
	(find_userhost_internal): New static func.
	(irc_find_userhost): Use it and ‘svz_hash_foreach’.
	(regex_nick_closure): New struct.
	(regex_nick_internal): New static func.
	(irc_regex_nick): Use it and ‘svz_hash_foreach’.
	* irc-server/irc-server.c
	(dns_done_cl_internal, dns_done_ch_internal): New static funcs.
	(irc_dns_done): Use new funcs and ‘svz_hash_foreach’.

2011-04-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[irc] Fix bug: On DNS return, propagate all info to the server.

	Scoping error introduced 2000-06-18.  Additionally,
	if GNU Serveez is configured with ‘--enable-irc-proto’
	and ‘--disable-irc-ts’, the IRC server fails to compile.

	* irc-server/irc-server.c (irc_dns_done):
	For ‘cfg->clients’ loop, move close scope out of
	‘#if ENABLE_TIMESTAMP ... #endif’.

2011-04-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[awcs int] Avoid ‘svz_hash_values’.

	* awcs-server/awcs-proto.c
	(process_broadcast_closure): New struct.
	(process_broadcast_internal): New static func.
	(awcs_process_broadcast): Use it and ‘svz_hash_foreach’.
	(disconnect_clients_internal): New static func.
	(awcs_disconnect_clients): Use it and ‘svz_hash_foreach’.

2011-04-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[nut int] Avoid ‘svz_hash_values’.

	* nut-server/nut-hostlist.c
	(hosts_check_closure): New struct.
	(hosts_check_internal): New static func.
	(nut_hosts_check): Use it and ‘svz_hash_foreach’.
	* nut-server/nut-route.c
	(route_closure): New struct.
	(route_internal): New static func.
	(nut_route): Use it and ‘svz_hash_foreach’.

2011-04-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move ‘svz_servertype_print’ to unique client.

	* serveez.c [0] (dump_servertype): New static func.
	(main) [0]: Use it and ‘svz_foreach_servertype’.

2011-04-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move ‘svz_portcfg_print’ to unique client.

	* guile-server.c [ENABLE_DEBUG] (portcfg_print): New static func.
	(guile_servertype_config_print): Use ‘portcfg_print’.

2011-04-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add ‘svz_pp_server_bindings’; drop ‘svz_server_bindings’.

	* http-server/http-proto.c (http_info_server):
	Use ‘svz_pp_server_bindings’.
	* nut-server/gnutella.c (nut_info_server): Likewise.

2011-04-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Rename ‘svz_server_foreach’ to ‘svz_foreach_server’.

	* ctrl-server/control-proto.c (ctrl_stat_all): Update ref.

2011-04-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add ‘svz_collect’ and conv. macros; zonk disparate funcs.

	* foo-server/foo-proto.c (foo_global_init): Use
	‘SVZ_COLLECT_STRARRAY’, ‘SVZ_COLLECT_INTARRAY’, ‘SVZ_COLLECT_STRHASH’.
	* nut-server/gnutella.c (nut_search_patterns): Drop trailing NULL.
	(nut_global_init): Use ‘SVZ_COLLECT_STRARRAY’.

2011-04-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop func: svz_interface_list

	* option.c (display_ifc): New static func.
	(handle_options): On 'i', display blurb, use ‘display_ifc’.

2011-04-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move ‘svz_server_single_listener’ into client.

	This also reverts 2011-03-21,
	"Internalize ‘svz_binding_contains_server’".

	* prog-server/prog-server.c (prog_init):
	Incorporate ‘svz_server_single_listener’.

2011-04-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Combine windoze daemon control funcs.

	* serveez.c (guile_entry): Use ‘svz_windoze_daemon_control’.

2011-04-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_array_destroy_zero’.

	* guile.c (guile_to_strarray): Use ‘svz_array_size’,
	‘svz_array_destroy’ directly to handle an empty array.

2011-04-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc] Reformat some source code to avoid confusing the snarfer.

	* guile.c (control_protocol_password):
	Don't distribute the type and var name between
	the two preprocessor conditional branches.

2011-04-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘vector’ data structure and funcs.

	* libserveez.h: Don't #include "libserveez/vector.h".

2011-04-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop func: svz_array_values

	* prog-server/prog-server.c (prog_passthrough):
	Build ‘argv’ using ‘svz_array_size’, ‘svz_array_get’.

2011-04-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_servertype_finalize’.

	* serveez.c (guile_entry): Don't call ‘svz_servertype_finalize’.

2011-04-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Combine svz_server_{init,finalize}_all into ‘svz_server_all_updn’.

	* serveez.c (guile_entry): Use ‘svz_server_all_updn’.

2011-04-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Combine svz_coserver_{init,finalize} into ‘svz_coserver_updn’.

	* serveez.c (guile_entry): Use ‘svz_coserver_updn’.

2011-04-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add abstractions for runtime parameter manipulation.

	* ctrl-server/control-proto.c (ctrl_stat): Use ‘SVZ_RUNPARM’.
	* guile.c (int_accessor): Delete func.
	(parm_accessor): New static func.
	(guile_access_verbosity, guile_access_maxsockets): Use ‘parm_accessor’.
	* serveez.c (guile_entry): Use ‘SVZ_RUNPARM_X’, ‘SVZ_RUNPARM’.
	(main): Use ‘SVZ_RUNPARM_X’.

2011-04-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Move control protocol password out of libserveez.

	* ctrl-server/control-proto.c
	(control_protocol_password): New var.
	(ctrl_handle_request): Use ‘control_protocol_password’.
	* guile.c (control_protocol_password): New var decl,
	either ‘extern’ or ‘static’ depending on ‘ENABLE_CONTROL_PROTO’.
	(guile_access_passwd): Use ‘control_protocol_password’.
	* option.h (option_t):
	Include ‘.pass’ only if ‘ENABLE_CONTROL_PROTO’.
	* option.c (usage, serveez_options, SERVEEZ_OPTIONS)
	(handle_options): Include "-P" support only if ‘ENABLE_CONTROL_PROTO’.
	* serveez.c [ENABLE_CONTROL_PROTO] (control_protocol_password):
	New extern var decl.
	(guile_entry): Include "-P" support only if
	‘ENABLE_CONTROL_PROTO’; use ‘control_protocol_password’;
	free and zero ‘control_protocol_password’ prior to ‘svz_halt’.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize "boot time".

	* ctrl-server/control-proto.c (ctrl_stat): Use ‘svz_uptime’.
	* irc-server/irc-event-3.c (irc_stats_callback): Likewise.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add abstraction: svz_most_recent_dead_child_p

	* http-server/http-cgi.c
	(http_cgi_died) [!__MINGW32__]: Use ‘svz_most_recent_dead_child_p’.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib woe] Add abstraction: svz_mingw_child_dead_p

	* http-server/http-cgi.c: Don't #include "woe-wait.h".
	(http_cgi_died) [__MINGW32__]: Use ‘svz_mingw_child_dead_p’.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix ‘SOCK_MAX_WRITE’ with "SVZ_".

	* http-server/http-cache.c: Update all refs.
	* http-server/http-proto.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop #define: RELAX_FD_TIME

	* nut-server/nut-transfer.c (THROTTLE_RELAX): New #define.
	(nut_file_write): Use ‘THROTTLE_RELAX’.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add abstraction: svz_wait_if_unavailable

	* http-server/http-cache.c (http_cache_write):
	Use ‘svz_wait_if_unavailable’.
	* http-server/http-proto.c (http_default_write): Likewise.
	* nut-server/nut-hostlist.c (nut_hosts_write): Likewise.
	* nut-server/nut-transfer.c (nut_file_write): Likewise.

2011-04-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Take only one arg in coserver kick, callback.

	Here, "T" means "Don't take third arg"; and "S"
	means "Don't specify fourth arg in coserver invocation".
	* awcs-server/awcs-proto.c
	(awcs_rdns_done, awcs_ident_done): T.
	(ENQ_COSERVER_REQUEST): S.
	* foo-server/foo-proto.c (foo_rdns_done): T.
	(ENQ_COSERVER_REQUEST): S.
	* guile-api.c (guile_coserver_callback): T.
	(ENQ_COSERVER_REQUEST): S.
	* http-server/http-core.c (http_identification)
	(http_remotehost, http_localhost): T.
	* http-server/http-core.h (http_identification)
	(http_remotehost, http_localhost): T.
	* http-server/http-proto.c (http_init)
	(ENQ_COSERVER_REQUEST): S.
	* irc-core/irc-core.c
	(irc_rdns_done, irc_ident_done): T.
	(ENQ_COSERVER_REQUEST): S.
	* irc-server/irc-server.c (irc_dns_done): T.
	(irc_connect_servers): S.
	* nut-server/gnutella.c (nut_dns_done): T
	(nut_connect_host): S.

2011-04-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[servers] Use only one arg in coserver kick, callback.

	Here, "S" means "make static"; "A" means "don't take ID, VERSION;
	instead, take CLOSURE, IGNORED"; "X" means "extract sock id and
	version from CLOSURE; free it".
	* awcs-server/awcs-proto.c
	(awcs_rdns_done): Rename from ‘awcs_nslookup_done’; S; A; X.
	(awcs_ident_done): S; A; X.
	(ENQ_COSERVER_REQUEST): New macro.
	(awcs_status_connected): Use ‘ENQ_COSERVER_REQUEST’.
	* foo-server/foo-proto.c
	(foo_rdns_done): Rename from ‘foo_handle_coserver_result’; S; A; X.
	(ENQ_COSERVER_REQUEST): New macro.
	(foo_connect_socket): Use ‘ENQ_COSERVER_REQUEST’.
	* http-server/http-core.c
	(http_identification, http_remotehost): A; X.
	(http_localhost): Don't take CFG; instead, take CLOSURE,
	IGNORED; extract http configuration from CLOSURE.
	* http-server/http-core.h (http_remotehost)
	(http_localhost, http_identification): Update func decls.
	* http-server/http-proto.c
	(http_init): Use ‘svz_coserver_rdns_invoke’.
	(ENQ_COSERVER_REQUEST): New macro.
	(http_connect_socket): Use ‘ENQ_COSERVER_REQUEST’.
	* irc-core/irc-core.c
	(irc_rdns_done): Rename from ‘irc_nslookup_done’; A; X.
	(irc_ident_done): A; X.
	(ENQ_COSERVER_REQUEST): New macro.
	(irc_start_auth): Use ‘ENQ_COSERVER_REQUEST’.
	* irc-server/irc-server.c
	(irc_dns_done): Rename from ‘irc_connect_server’; S; don't
	take SERVER; instead, take CLOSURE, IGNORED; extract server
	from CLOSURE.
	(irc_connect_servers): Use ‘svz_coserver_dns_invoke’.
	* nut-server/gnutella.c (dns_closure): New struct.
	(nut_dns_done): Rename from ‘nut_nslookup_done’; dont' take
	CFG, PORT; instead, take CLOSURE, IGNORED; extract config and
	port from CLOSURE; free CLOSURE.
	(nut_connect_host): Alloc/init a ‘struct dns_closure’;
	use ‘svz_coserver_dns_invoke’ with it.

2011-04-01  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Make svz:coserver:* procs not accept optional arg.

	* guile-api.c (validate_callback): New static func.
	(VALIDATE_CALLBACK): New macro.
	(guile_coserver_callback): Change type of arg 2 and 3 to
	‘void *’; mark arg 3 ‘SVZ_UNUSED’; extract ‘SCM callback’
	locally; call the callback with one arg unconditionally.
	(ENQ_COSERVER_REQUEST): New macro.
	(guile_coserver_dns): Don't take optional 2nd arg;
	use ‘VALIDATE_CALLBACK’, ‘ENQ_COSERVER_REQUEST’.
	(guile_coserver_rdns, guile_coserver_ident): Likewise.
	(guile_api_init): Specify req:opt:var values 2:0:0 for procs
	‘svz:coserver:dns’, ‘svz:coserver:reverse-dns’, ‘svz:coserver:ident’.

2011-04-01  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[scheme] Avoid arg in coserver kick; use a closure instead.

	* guile-server/icecast-server.scm (icecast-connect-socket):
	Use closures for reverse-dns and ident callbacks; omit arg.
	(icecast-dns, icecast-ident): Delete procs.

2011-03-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add macro: SVZ_CFG_TCP

	* foo-server/foo-proto.c (foo_global_init): Use ‘SVZ_CFG_TCP’.
	* guile.c (guile_define_port): Likewise.
	* irc-server/irc-proto.c (irc_check_tcp_bindings): Likewise.

2011-03-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add macro: SVZ_CFG_UDP

	* guile.c (guile_define_port): Use ‘SVZ_CFG_UDP’.

2011-03-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add macro: SVZ_CFG_ICMP

	* guile.c (guile_define_port): Use ‘SVZ_CFG_ICMP’.
	* tunnel-server/tunnel.c (tnl_create_socket): Likewise.

2011-03-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add macro: SVZ_CFG_RAW

	* guile.c (guile_define_port): Use ‘SVZ_CFG_RAW’.

2011-03-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add macro: SVZ_CFG_PIPE

	* guile.c (guile_define_port): Use ‘SVZ_CFG_PIPE’.
	* tunnel-server/tunnel.c (tnl_create_socket): Likewise.

2011-03-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Fix bug: Reorder #include "libserveez/foo.h" in libserveez.h.

	Regression (due to omission) introduced 2011-03-04,
	"Mark #include "libservez/foo.h" as internal".
	Lesson: Take care when discarding dependency (ordering) info!

	* libserveez.h: Move ‘pipe-socket’ and ‘portcfg’ before ‘cfg’.

2011-03-30  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘VSNPRINTF_BUF_SIZE’.

	* irc-server/irc-proto.c (VSNPRINTF_BUF_SIZE): New #define.

2011-03-30  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix LOG_{FATAL,ERROR,WARNING,NOTICE,DEBUG} with "SVZ_".

	* awcs-server/awcs-proto.c: Update all refs.
	* ctrl-server/control-proto.c: Likewise.
	* foo-server/foo-proto.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-core.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-config.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-event-6.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* irc-server/irc-server.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-route.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* option.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* serveez.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-03-30  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix some coserver #define:s with "SVZ_".

	* ctrl-server/control-proto.c: Update all refs.

2011-03-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Rename SOCK_FLAG_* to SVZ_SOFLG_*.

	* awcs-server/awcs-proto.c: Update all refs.
	* ctrl-server/control-proto.c: Likewise.
	* fakeident-server/ident-proto.c: Likewise.
	* guile-api.c: Likewise.
	* guile-server.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* sntp-server/sntp-proto.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-03-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop funcs svz_config_{intarray,strarray,hash}_destroy.

	* foo-server/foo-proto.c (foo_global_finalize):
	Use ‘svz_array_destroy’, ‘svz_hash_destroy’ directly.
	* nut-server/gnutella.c (nut_global_finalize):
	Use ‘svz_array_destroy’ directly.

2011-03-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix PORTCFG_{ANY,NOIP} with "SVZ_".

	* guile.c: Update all refs.

2011-03-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move several PORTCFG_* #define:s into serveez proper.

	* guile.c
	(PORTCFG_PORT, PORTCFG_PROTO, PORTCFG_TCP, PORTCFG_UDP, PORTCFG_ICMP)
	(PORTCFG_RAW, PORTCFG_PIPE, PORTCFG_IP, PORTCFG_DEVICE)
	(PORTCFG_BACKLOG, PORTCFG_TYPE, PORTCFG_RECV, PORTCFG_SEND)
	(PORTCFG_NAME, PORTCFG_PERMS, PORTCFG_USER, PORTCFG_GROUP)
	(PORTCFG_UID, PORTCFG_GID, PORTCFG_SEND_BUFSIZE, PORTCFG_RECV_BUFSIZE)
	(PORTCFG_FREQ, PORTCFG_ALLOW, PORTCFG_DENY): New #define:s.

2011-03-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix PORTCFG_{NOMATCH,EQUAL,MATCH,CONFLICT} with "SVZ_".

	* tunnel-server/tunnel.c: Update all refs.

2011-03-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix ICMP_SERVEEZ* with "SVZ_".

	* guile-api.c: Update all refs.
	* guile.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-03-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop unused "sparse vector" functionality.

	* libserveez.h: Don't #include "libserveez/sparsevec.h".

2011-03-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix PROTO_{TCP,UDP,PIPE,ICMP,RAW} with "SVZ_".

	* ctrl-server/control-proto.c: Update all refs.
	* foo-server/foo-proto.c: Likewise.
	* guile-api.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* tunnel-server/tunnel (proto_support_p): New static func.
	(tnl_init): Use ‘proto_support_p’; update all refs.
	(tnl_create_socket): Update all refs.

2011-03-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Prefix UDP_{MSG,BUF}_SIZE with "SVZ_".

	* prog-server/prog-server.c
	(prog_read_sock_drop): Use ‘SVZ_UDP_MSG_SIZE’.
	* tunnel-server/tunnel.c (resize_buffers): New static func.
	(tnl_create_socket, tnl_connect_socket): Use ‘resize_buffers’.

2011-03-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize SVZ_PROCESS_{FORK,SHUFFLE_{SOCK,PIPE}}.

	* prog-server/prog-server.c (prog_passthrough):
	Update call to ‘svz_sock_process’.

2011-03-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move client name specification to ‘svz_boot’.

	* serveez.c (main): Update call to ‘svz_boot’;
	don't call ‘svz_executable’.

2011-03-25  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_raw_ip_checksum’.

	* libserveez.h: Don't #include "libserveez/raw-socket.h".

2011-03-25  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Centralize SIZEOF_UINT{16,32}.

	* nut-server/nut-core.h
	(SIZEOF_UINT16, SIZEOF_UINT32): Delete #define:s.

2011-03-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build lib] Move some woe32 macros to their own header.

	* woe-statpred.h: New file.
	* Makefile.am (noinst_HEADERS): Add woe-statpred.h.
	* http-server/http-dirlist.c
	[__MINGW32__]: #include "woe-statpred.h".
	* http-server/http-proto.c [__MINGW32__]: Likewise.
	* nut-server/gnutella.c [__MINGW32__]: Likewise.
	* nut-server/nut-transfer.c [__MINGW32__]: Likewise.

2011-03-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http-server int] Define/use ‘http_cache_print’ conditionally.

	* http-server/http-cache.c (http_cache_print):
	Change surrounding preproc cond from ‘#if ENABLE_DEBUG’
	to ‘#if ENABLE_CACHE_PRINT’.

2011-03-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize svz_{tcp,pipe}_accept.

	* libserveez.h: Don't #include "libserveez/server-socket.h".

2011-03-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib build] Strip SBO from headers (no ‘svzint’ needed).

	* Makefile.am (install-data-hook):
	Also strip declarations that begin with ‘SBO’.

2011-03-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[nut int] Avoid ‘strcat’.

	* nut-server/gnutella.c (nut_info_server):
	Use ‘strlen’ + ‘memcpy’ instead of ‘strcat’.
	(nut_info_client): Use ‘snprintf’ instead of ‘strcat’.

2011-03-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_os_version’.

	* http-server/http-proto.c (http_default_write)
	(http_get_response): Use ‘svz_mingw_at_least_nt4_p’.

2011-03-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Don't bother symlinking data/serveez.cfg to src/.

	* Makefile.am (serveez_DEPENDENCIES): Remove serveez.cfg.
	(CLEANFILES): Remove serveez.cfg.
	(serveez.cfg): Delete target.

2011-03-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Mark unused function parameters.

	Here, "U" means "Mark unused func parms with ‘SVZ_UNUSED’".
	* awcs-server/awcs-proto.c (awcs_hash_keylen, awcs_process_status)
	(awcs_process_kick, awcs_process_floodcmd): U.
	* ctrl-server/control-proto.c (ctrl_init, ctrl_finalize)
	(ctrl_info_server, ctrl_info_client, ctrl_detect_proto)
	(ctrl_connect_socket, ctrl_quit, ctrl_help, ctrl_stat_con)
	(ctrl_stat_cache, ctrl_kill_cache, ctrl_stat_coservers)
	(ctrl_killall, ctrl_restart): U.
	* fakeident-server/ident-proto.c (fakeident_init)
	(fakeident_connect_socket, fakeident_detect_proto)
	(fakeident_handle_request): U.
	* foo-server/foo-proto.c (foo_handle_request, foo_init)
	(foo_detect_proto, foo_global_init, foo_global_finalize): U.
	* guile-bin.c (guile_bin_print): U.
	* guile-server.c (MAKE_SMOB_DEFINITION) <NAME_PRINT>: U.
	(MAKE_SMOB_DEFINITION) <NAME_FREE>: U.
	(print_hash_kv, servertype_config_internal): U.
	* guile.c (optionhash_cb_integer, optionhash_cb_boolean)
	(optionhash_cb_intarray, optionhash_cb_string)
	(optionhash_cb_strarray, optionhash_cb_hash)
	(optionhash_cb_portcfg, guile_exception): U.
	* http-server/http-cache.c (cache_consistency_internal): U.
	* http-server/http-cgi.c (http_cgi_get_response)
	(http_post_response): U.
	* http-server/http-proto.c (http_global_init)
	(http_global_finalize, http_detect_proto, http_info_client)
	(http_default_response): U.
	* irc-core/irc-core.c (irc_detect_proto, irc_connect_socket): U.
	* irc-server/irc-event-1.c (irc_motd_callback): U.
	* irc-server/irc-event-3.c (irc_lusers_callback): U.
	* irc-server/irc-event-5.c (irc_client_visible): U.
	* irc-server/irc-event-6.c (irc_error_callback): U.
	* irc-server/irc-proto.c
	(irc_global_init, irc_global_finalize): U.
	* nut-server/gnutella.c (nut_hash_keylen)
	(nut_global_init, nut_global_finalize, nut_info_client): U.
	* nut-server/nut-request.c (nut_ping): U.
	* prog-server/prog-server.c (prog_handle_request)
	(prog_detect_proto, prog_global_init, prog_global_finalize)
	(prog_notify, prog_info_client, prog_info_server): U.
	* serveez.c (guile_entry): U.
	* sntp-server/sntp-proto.c (sntp_init, sntp_detect_proto)
	(sntp_connect_socket, sntp_handle_request): U.
	* tunnel-server/tunnel.c (tnl_global_init)
	(tnl_global_finalize, tnl_detect_proto, tnl_connect_socket): U.

2011-03-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘##’-style token-pasting unconditionally.

	* guile-api.h (GUILE_CONCAT2, GUILE_CONCAT3): Delete macros.
	(__CTYPE): New macro.
	* guile-bin.c (_CTYPE): New macro.
	(MAKE_BIN_REF, MAKE_BIN_SET): Use ‘_CTYPE’.
	* guile-server.c (_CTYPE, NAME_TAG)
	(NAME_PRED, NAME_CREATE, NAME_FREE)
	(NAME_PRINT, NAME_GET, NAME_INIT): New macros.
	(CREATE_SMOB_TAG, MAKE_SMOB_DEFINITION, INIT_SMOB)
	(MAKE_SMOB, CHECK_SMOB, GET_SMOB, MAKE_SOCK_CALLBACK)
	(DEFINE_SOCK_CALLBACK): Use new macros.

2011-03-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Decruft: Delete unused local variables.

	Here, "D (...)" means "Delete local vars ...".
	* guile-server.c (guile_servertype_config_print): D (key).
	* guile.c (guile_access_interfaces): D (ifc).

2011-03-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[ctrl-proto] Fix bug in "connection statistics" command.

	Regression introduced 2011-03-05,
	"Add abstraction: svz_foreach_socket".

	* ctrl-server/control-proto.c (stat_con_internal):
	Send output to the control socket, not to the scanned one.

2011-03-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_errno’.

	* http-server/http-cgi.c
	(http_cgi_read) [!__MINGW32__]: Use ‘errno’ directly.

2011-03-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add funcs: svz_{sys,net}_strerror

	* http-server/http-dirlist.c
	(http_dirlist): Use ‘svz_sys_strerror’.

2011-03-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add funcs: svz_log_{sys,net}_error

	* http-server/http-cache.c: Throughout, use new funcs.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-core.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-event-3.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* serveez.c: Likewise.
	* woe-wait.h: Likewise.

2011-03-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Rename some #define:s with "SVZ_" prefix.

	* awcs-server/awcs-proto.c (awcs_connect_socket): Update.
	* ctrl-server/control-proto.c (ctl_stat_id): Likewise.
	* http-server/http-cgi.c (http_cgi_disconnect)
	(http_cgi_read, http_cgi_write, http_cgi_get_response)
	(http_post_response): Likewise.

2011-03-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Add sugar for ‘WaitForSingleObject’ (woe32).

	* woe-wait.h: New file.
	* Makefile.am (noinst_HEADERS): Add woe-wait.h.
	* http-server/http-cgi.c: #include "woe-wait.h".
	(http_cgi_died): Use ‘WOE_WAIT_1’, ‘WOE_WAIT_LOG_ERROR_ANONYMOUSLY’.

2011-03-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add func: svz_socket_unavailable_error_p

	* http-server/http-cache.c (http_cache_write): Use new func.
	* http-server/http-proto.c (http_default_write): Likewise.
	* nut-server/nut-hostlist.c (nut_hosts_write): Likewise.
	* nut-server/nut-transfer.c (nut_file_write): Likewise.

2011-03-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add funcs: svz_{invalid_handle_p,invalidate_handle}

	Here, "U" means "Use new funcs".
	* http-server/http-cgi.c (http_cgi_disconnect)
	(http_cgi_died, http_cgi_read, http_cgi_get_response): U.
	* http-server/http-dirlist.c (http_dirlist): U.
	* http-server/http-proto.c (http_connect_socket): U.
	* nut-server/nut-transfer.c (nut_read_database_r): U.
	* prog-server/prog-server.c (prog_child_died): U.

2011-03-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Centralize ‘chdir’ procurement.

	* changedir.h: New file.
	* Makefile.am (noinst_HEADERS): Add changedir.h.
	* http-server/http-cgi.c: Don't #include <unistd.h>;
	instead, #include "changedir.h".
	* http-server/http-core.c: Likewise.

2011-03-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add func: svz_closehandle

	* http-server/http-cgi.c (http_cgi_disconnect)
	(http_cgi_died, http_cgi_exec): Use ‘svz_closehandle’.
	* serveez.c (main): Likewise.

2011-03-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add func: svz_server_foreach

	* ctrl-server/control-proto.c (stat_all_internal): New static func.
	(ctrl_stat_all): Use it and ‘svz_server_foreach’.

2011-03-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘svz_server_get’ more.

	* ctrl-server/control-proto.c (ctrl_stat): Use ‘svz_server_get’.

2011-03-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘svz_hash_foreach’ instead of ‘svz_hash_foreach_value’.

	* http-server/http-cache.c
	[ENABLE_DEBUG] (cache_consistency_internal): New static func.
	[ENABLE_DEBUG] (http_cache_consistency): Use it and ‘svz_hash_foreach’.

2011-03-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘svz_hash_foreach’ instead of ‘svz_hash_foreach_key’.

	* guile-server.c (server_state_to_hash_internal): New static func.
	(guile_server_state_to_hash): Use it and ‘svz_hash_foreach’.
	[ENABLE_DEBUG] (print_hash_kv): New static func.
	[ENABLE_DEBUG] (guile_servertype_config_print):
	Use it and ‘svz_hash_foreach’.
	(items_append): New static func.
	(servertype_config_closure): New struct.
	(servertype_config_internal): New static func.
	(guile_servertype_config): Use it
	and ‘svz_hash_foreach’, ‘items_append’.

2011-03-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Centralize ‘#define O_BINARY’.

	* o-binary.h: New file.
	* Makefile.am (noinst_HEADERS): Add o-binary.h.
	* http-server/http-proto.c: Don't #include <fcntl.h>;
	instead, #include "o-binary.h".
	* nut-server/nut-transfer.c: Likewise.

2011-03-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Centralize <netinet/in.h>/<winsock2.h> #include.

	Here, "U" means "#include "networking-headers.h";
	don't #include <winsock.h>, <netinet/in.h>".
	* networking-headers.h: New file.
	* Makefile.am (noinst_HEADERS): New var.
	* awcs-server/awcs-proto.c: U.
	* cfgfile.c: U.
	* ctrl-server/control-proto.c: U.
	* fakeident-server/ident-proto.c: U.
	* foo-server/foo-proto.c: U.
	* guile-api.c: U.
	* guile-bin.c: U.
	* guile-server.c: U.
	* guile.c: U.
	* http-server/http-cache.c: U.
	* http-server/http-cgi.c: U.
	* http-server/http-core.c: U.
	* http-server/http-dirlist.c: U.
	* http-server/http-proto.c: U.
	* irc-core/irc-core.c: U.
	* irc-server/irc-config.c: U.
	* irc-server/irc-crypt.c: U.
	* irc-server/irc-event-1.c: U.
	* irc-server/irc-event-2.c: U.
	* irc-server/irc-event-3.c: U.
	* irc-server/irc-event-4.c: U.
	* irc-server/irc-event-5.c: U.
	* irc-server/irc-event-6.c: U.
	* irc-server/irc-event-7.c: U.
	* irc-server/irc-proto.c: U.
	* irc-server/irc-server.c: U.
	* nut-server/gnutella.c: U.
	* nut-server/nut-core.c: U.
	* nut-server/nut-hostlist.c: U.
	* nut-server/nut-request.c: U.
	* nut-server/nut-route.c: U.
	* nut-server/nut-transfer.c: U.
	* option.c: U.
	* prog-server/prog-server.c: U.
	* serveez.c: U.
	* sntp-server/sntp-proto.c: U.
	* tunnel-server/tunnel.c: U.

2011-03-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Re-implement ‘serveez-load’ in Scheme.

	* guile-boot.scm (serveez-load): New proc.
	* guile.c (guile_serveez_load_file): Delete func.
	(guile_serveez_load): Delete func.
	(guile_init): Don't define ‘serveez-load’.

2011-03-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_check_sockets’.

	* libserveez.h: Don't #include "libserveez/server-loop.h".

2011-03-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc int] Snarf docstrings of built-in Scheme procs.

	* guile-boot.scm: Write pre-form comments for doc snarfing.

2011-03-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Rewrite some int/string accessor funcs.

	* guile.c (MAKE_INT_ACCESSOR): Delete macro.
	(MAKE_STRING_ACCESSOR): Likewise.
	(int_accessor, string_accessor): New static funcs.
	(guile_access_verbosity): Use ‘int_accessor’.
	(guile_access_maxsockets): Likewise.
	(guile_access_passwd): Use ‘string_accessor’.

2011-03-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Promote "convenience" Scheme to "built-in".

	* guile-boot.scm: Rename from serveez.scm.
	* Makefile.am (pkgdata_DATA): Delete var.
	(EXTRA_DIST): Remove $(pkgdata_DATA); add guile-boot.scm.
	(BUILT_SOURCES): New var.
	(.puny.c, .scm.puny): New old-fashioned suffix rules.
	* guile.c (guile_init): #include "guile-boot.c";
	eval the string that it defines.
	* guile-server/echo-server.scm: Don't load "serveez.scm".
	* guile-server/eval-server.scm: Likewise.
	* guile-server/icecast-server.scm: Likewise.

2011-03-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_eval_string

	* gi.c (eval_string): New #define.
	(gi_eval_string): New func.
	* gi.h (gi_eval_string): New func decl.

2011-03-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move ‘svz_uptime’ out to unique caller.

	* ctrl-server/control-proto.c (uptime): New static func.
	(ctrl_stat): Use it.

2011-03-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib int] Decruft: Use svzconfig.h for some woe32 #define:s.

	* svzconfig.h.in (FD_SETSIZE): New #undef.
	(WIN32_LEAN_AND_MEAN, Win32_Winsock): Likewise.

2011-03-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Never #include <sys/types.h> in a header.

	* http-server/http-proto.h: Don't #include <sys/types.h>.

2011-03-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add some funcs.

	* gi.c (list_3): New macro.
	(gi_list_3): New func.
	(list_5): New macro.
	(gi_list_5): New func.
	(make_vector): New macro.
	(gi_n_vector): New func.
	* gi.h (gi_list_3, gi_list_5, gi_n_vector): New func decls.
	* guile-api.c (scm_return_rpcentry): Use ‘gi_n_vector’.
	(scm_getrpc): Use ‘scm_cons’.
	(scm_portmap_list): Use ‘gi_n_vector’.
	(errnostring): New static func.
	(scm_portmap): Use ‘gi_list_3’, ‘errnostring’, ‘gi_list_5’.
	(guile_read_file): Use ‘gi_list_3’, ‘errnostring’.
	* guile-api.h (scm_list_n): Delete #define.
	(scm_int2num): Delete macro.
	(scm_c_primitive_load): Use ‘gi_string2scm’.
	(scm_c_make_vector): Delete macro.
	* guile-server.c (guile_server_state_to_hash): Use ‘gi_n_vector’.

2011-03-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Embed mutex functionality; expose only feature ‘log-mutex’.

	* libserveez.h: Don't #include "libserveez/mutex.h".
	* svzconfig.h.in (SVZ_HAVE_PTHREAD_H, SVZ_HAVE_THREADS): Delete.

2011-03-07  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] #include <time.h> in some .c files.

	* http-server/http-cache.c: #include <time.h>.
	* http-server/http-cgi.c: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-event-2.c: Likewise.
	* irc-server/irc-event-5.c: Likewise.
	* irc-server/irc-server.c: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-route.c: Likewise.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Never #include <time.h> in a header.

	* http-server/http-cache.h: Don't include <time.h>.
	* http-server/http-core.h: Likewise.
	* irc-server/irc-proto.h: Likewise.
	* nut-server/gnutella.h: Likewise.
	* nut-server/nut-transfer.h: Likewise.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Never #include <stdlib.h> in a header.

	* nut-server/nut-transfer.h: Don't #include <stdlib.h>

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Never #include <stdio.h> in a header.

	* cfgfile.c: #include <stdio.h>.
	* irc-server/irc-crypt.c [ENABLE_IRC_PROTO]: Likewise.
	* irc-server/irc-event-1.c [ENABLE_IRC_PROTO]: Likewise.
	* irc-server/irc-event-2.c [ENABLE_IRC_PROTO]: Likewise.
	* irc-server/irc-event-4.c [ENABLE_IRC_PROTO]: Likewise.
	* irc-server/irc-event-5.c [ENABLE_IRC_PROTO]: Likewise.
	* irc-server/irc-event-6.c [ENABLE_IRC_PROTO]: Likewise.
	* irc-server/irc-event-7.c [ENABLE_IRC_PROTO]: Likewise.
	* http-server/http-proto.h: Don't #include <stdio.h>.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Never #include <config.h> in a header.

	* ctrl-server/control-proto.h: Don't #include <config.h>.
	* fakeident-server/ident-proto.h: Likewise.
	* foo-server/foo-proto.h: Likewise.
	* http-server/http-cache.h: Likewise.
	* http-server/http-cgi.h: Likewise.
	* http-server/http-core.h: Likewise.
	* http-server/http-dirlist.h: Likewise.
	* http-server/http-proto.h: Likewise.
	* irc-server/irc-config.h: Likewise.
	* irc-server/irc-crypt.h: Likewise.
	* irc-server/irc-event.h: Likewise.
	* irc-server/irc-proto.h: Likewise.
	* irc-server/irc-server.h: Likewise.
	* nut-server/gnutella.h: Likewise.
	* nut-server/nut-core.h: Likewise.
	* nut-server/nut-hostlist.h: Likewise.
	* nut-server/nut-request.h: Likewise.
	* nut-server/nut-route.h: Likewise.
	* nut-server/nut-transfer.h: Likewise.
	* option.h: Likewise.
	* sntp-server/sntp-proto.h: Likewise.
	* tunnel-server/tunnel.h: Likewise.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Decruft: Delete useless header serveez.h.

	* Makefile.am (serveez_SOURCES): Remove serveez.h.
	* serveez.c: Don't #include "serveez.h".
	* serveez.h: Delete file.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Strip "internals" from $(i)/{codec,coserver}/*.h, too.

	* Makefile.am (install-data-hook):
	Also process codec/*.h and coserver/*.h files.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘svz_coservertypes’.

	* ctrl-server/control-proto.c (ctrl_stat_id):
	(stat_coservers_internal, restart_coservers_internal)
	(ctrl_restart): Use ‘svz_coserver_type_name’.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move "shutting down?" behind functional interface.

	* tunnel-server/tunnel.c (tnl_disconnect_target):
	Use ‘svz_shutting_down_p’.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile int] Use an internal signal to implement ‘serveez-nuke’.

	* guile-server.c (guile_nuke_happened):
	Signal ‘SIGQUIT’ instead of setting a global variable.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop var: svz_library

	* ctrl-server/control-proto.c (ctrl_stat): Use ‘PACKAGE_STRING’.
	* http-server/http-core.h (SERVER_STRING): New #define.
	* http-server/http-cgi.c (http_create_cgi_envp): Use ‘SERVER_STRING’.
	(http_cgi_accepted): Likewise.
	* http-server/http-core.c (http_send_header): Likewise.
	(http_error_response): Likewise.
	* irc-server/irc-event-1.c (irc_send_init_block): Use ‘PACKAGE_TARNAME’.
	* irc-server/irc-event-3.c (irc_version_callback): Likewise.
	* nut-server/nut-hostlist.c (nut_hosts_check): Use ‘PACKAGE_NAME’.
	* option.c (version): Use literal string "serveez" directly.

2011-03-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop var: svz_version

	* ctrl-server/control-proto.c (ctrl_stat): Use ‘PACKAGE_VERSION’.
	* guile.c (guile_init): Likewise.
	* http-server/http-cgi.c (http_create_cgi_envp): Likewise.
	(http_cgi_accepted): Likewise.
	* http-server/http-core.c (http_send_header): Likewise.
	(http_error_response): Likewise.
	* irc-server/irc-event-1.c (irc_send_init_block): Likewise.
	* irc-server/irc-event-3.c (irc_version_callback): Likewise.
	* nut-server/nut-hostlist.c (nut_hosts_check): Likewise.
	* option.c (version): Likewise.

2011-03-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add abstraction: svz_foreach_socket

	* ctrl-server/control-proto.c (stat_con_internal): New static func.
	(ctrl_stat_con): Use it and ‘svz_foreach_socket’.
	(killall_closure): New struct.
	(killall_internal): New static func.
	(ctrl_killall): Use it and ‘svz_foreach_socket’.

2011-03-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add abstraction: svz_foreach_interface

	* guile.c (access_interfaces_internal): New static func.
	(guile_access_interfaces): Use it and ‘svz_foreach_interface’.

2011-03-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add abstraction: svz_foreach_coserver

	* ctrl-server/control-proto.c
	(stat_coservers_internal): New static func.
	(ctrl_stat_coservers): Use it, ‘svz_foreach_coserver’.
	(restart_closure): New struct.
	(restart_coservers_internal): New static func.
	(ctrl_restart): Use it and ‘svz_foreach_coserver’.

2011-03-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move "all instantiated servers" behind functional interface.

	* ctrl-server/control-proto.c
	(ctrl_stat, ctrl_stat_all): Use ‘svz_all_servers’.

2011-03-05  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move "number of connected sockets" behind functional interface.

	* ctrl-server/control-proto.c (ctrl_stat):
	Use ‘svz_sock_nconnections’.

2011-03-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Make ‘serveez-interfaces’ append only.

	* guile.c (guile_access_interfaces): If a list is
	given, don't bother clearing the current list before looping.

2011-03-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Add mechanism to strip "internals" from headers on "make install".

	* Makefile.am (install-data-hook): For each header in $(i),
	remove lines between "begin svzint" and "end svzint", inclusive.

2011-03-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Touch up libserveez.h.

	* libserveez.h: #include "libserveez/defines.h";
	move portcfg.h after all the raw-socket.h.

2011-03-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use ‘PACKAGE_VERSION’ directly.

	* Makefile.am (EXTRA_DIST): Remove version.h.serveez.
	(version.h.serveez): Delete target.
	* version.h.in: Delete file.

2011-03-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use EXIT_{SUCCESS,FAILURE} from <stdlib.h>.

	* http-server/http-cgi.c (cool): New macro.
	(http_cgi_exec): Use it.
	* option.c (usage): Take arg EXITVAL; ‘exit’ with it.
	(handle_options): Use ‘EXIT_SUCCESS’; update call to ‘usage’.
	* serveez.c (guile_launch_pad): Use ‘EXIT_SUCCESS’.
	(main): Use ‘EXIT_SUCCESS’, ‘EXIT_FAILURE’.

2011-03-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc style] Refer to procedures as ‘PROC’ instead of ‘(PROC)’.

	* guile-api.c: In docstrings, do ‘s/@code{(foo)}/@code{foo}/’.
	* guile-server.c: Likewise.
	* guile.c: Likewise.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop: svz_asprintf

	* libserveez.h: Don't #include "libserveez/asprintf.h".

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Make ‘svz_config_type_instantiate’ require error buf size.

	* guile.c (guile_config_instantiate): Use local
	buffer; update call to ‘svz_config_type_instantiate’;
	call ‘guile_error’ unconditionally.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘snprintf’ more.

	* action.h: New file.
	* Makefile.am (serveez_SOURCES): Add action.h.
	* guile-server.c: #include "action.h".
	(guile_servertype_config): Use ‘DOING’.
	(guile_define_servertype): Use ‘DEFINING’.
	* guile.c: #include "action.h".
	(guile_config_instantiate, guile_define_port): Use ‘DEFINING’.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘strncasecmp’ more.

	* http-server/http-cgi.c (http_create_cgi_envp): Compute
	each property's strlen; use it and ‘strncasecmp’ in inner loop.
	* http-server/http-core.c (http_find_property):
	Compute ‘key’ strlen; use it and ‘strncasecmp’ in loop.
	* irc-server/irc-proto.c (irc_handle_request):
	Compute request's strlen; use it and ‘strncasecmp’ in loop.
	* nut-server/nut-transfer.c (nut_init_transfer):
	Compute extension strlen; use it and ‘strncasecmp’ in loop.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Use ‘strncasecmp’ when one string is a literal.

	* guile.c (guile_to_boolean): Use ‘strncasecmp’ and ‘sizeof’.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc] Say "procedure" instead of "function".

	* guile-api.c: Say "procedure" instead of "function"
	in docstrings; reword some docstrings slightly.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[doc] Say "Scheme Procedure" instead of "Function".

	* guile-api.c: Use ‘@deffnx @PROC{}’ in docstrings.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] #include "config.h" unconditionally.

	* awcs-server/awcs-proto.c: #include "config.h" unconditionally.
	* cfgfile.c: Likewise.
	* ctrl-server/control-proto.c: Likewise.
	* fakeident-server/ident-proto.c: Likewise.
	* foo-server/foo-proto.c: Likewise.
	* guile-api.c: Likewise.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-core.c: Likewise.
	* http-server/http-dirlist.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-config.c: Likewise.
	* irc-server/irc-crypt.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-event-2.c: Likewise.
	* irc-server/irc-event-3.c: Likewise.
	* irc-server/irc-event-4.c: Likewise.
	* irc-server/irc-event-5.c: Likewise.
	* irc-server/irc-event-6.c: Likewise.
	* irc-server/irc-event-7.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* irc-server/irc-server.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/nut-core.c: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-route.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* option.c: Likewise.
	* prog-server/prog-server.c: Likewise.
	* serveez.c: Likewise.
	* sntp-server/sntp-proto.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_nnint2scm

	* gi.c (nnint2scm): New #define.
	(gi_nnint2scm): New func.
	* gi.h (gi_nnint2scm): New func decl.
	* guile-api.c (guile_svz_inet_aton, guile_svz_ntohl)
	(guile_svz_htonl, guile_sock_remote_address
	(guile_sock_local_address, scm_return_rpcentry)
	(scm_portmap_list): Use ‘gi_nnint2scm’.
	* guile-bin.c (guile_bin_to_list): Likewise.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add funcs: gi_gc_protect, gi_gc_unprotect

	* gi.c (gc_protect, gc_unprotect): New #define:s.
	(gi_gc_protect, gi_gc_unprotect): New funcs.
	* gi.h (gi_gc_protect, gi_gc_unprotect): New func decls.
	* guile-api.c (guile_coserver_callback, guile_coserver_dns)
	(guile_coserver_rdns, guile_coserver_ident): Use new funcs.
	* guile-server.c (guile_unprotect): Use ‘gi_gc_unprotect’.
	(guile_sock_setfunction): Use new funcs.
	(guile_func_disconnected_socket): Use ‘gi_gc_unprotect’.
	(guile_sock_data, guile_server_state_set_x): Use new funcs.
	(guile_define_servertype): Use ‘gi_gc_protect’.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add func: gi_integer2scm

	* gi.c (integer2scm): New #define.
	(gi_integer2scm): New func.
	* gi.h (gi_integer2scm): New func decl.
	* guile-api.c (guile_svz_ntohs, guile_svz_htons)
	(guile_sock_receive_buffer_size, guile_sock_send_buffer_size)
	(guile_sock_receive_buffer_reduce, guile_sock_remote_address)
	(guile_sock_local_address, guile_sock_protocol)
	(guile_sock_idle_counter, guile_sock_ident, guile_read_file)
	(guile_api_init): Use ‘gi_integer2scm’.
	* guile-bin.c (guile_bin_search, guile_bin_length, MAKE_BIN_REF)
	(MAKE_BIN_SET): Likewise.
	* guile-server.c (guile_func_kicked_socket, guile_func_handle_request)
	(guile_func_check_request_oob, guile_config_convert): Likewise.
	* guile.c (guile_intarray_to_guile, MAKE_INT_ACCESSOR): Likewise.

2011-03-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] Add funcs: gi_nstring2scm, gi_string2scm

	* gi.c: #include <string.h>.
	(mem2scm, mem02scm): New #define:s.
	(gi_nstring2scm, gi_string2scm): New funcs.
	* gi.h (gi_nstring2scm, gi_string2scm): New func decls.
	* guile-api.c (guile_svz_inet_ntoa, scm_return_rpcentry)
	(scm_portmap, guile_coserver_callback, guile_read_file):
	Use ‘gi_string2scm’.
	* guile-bin.c: #include "gi.h".
	(guile_bin_to_string): Use ‘gi_nstring2scm’.
	* guile-server.c: #include "gi.h".
	(guile_config_convert, guile_server_state_to_hash):
	Use ‘gi_string2scm’.
	* guile.c (guile_define_server, guile_strarray_to_guile)
	(guile_hash_to_guile, MAKE_STRING_ACCESSOR, guile_init): Likewise.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Drop vars: have-debug, have-floodprotect

	* guile.c (guile_init): Don't define
	Scheme vars ‘have-debug’, ‘have-floodprotect’.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use a symlink for src/serveez.cfg.

	* Makefile.am (serveez.cfg): Use $(LN_S), not ‘cp -p’.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Add proc: libserveez-features

	* guile.c: #include "gi.h".
	(libserveez_features): New static func.
	(guile_init): Define proc ‘libserveez-features’.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Drop var: guile-version

	* guile.c (guile_init): Don't define Scheme var ‘guile-version’.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[gi] New func: gi_symbol2scm

	* gi.c: New file.
	* gi.h: New file.
	* Makefile.am (serveez_SOURCES): Add gi.c, gi.h.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop var: svz_have_Win32

	* guile.c (guile_init): Don't define Scheme var ‘have-Win32’.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop var: svz_build

	* version.h.in (__serveez_timestamp): Delete #define.

2011-02-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[irc-server] For RPL_CREATED, use UTC stamp, minute resolution.

	* irc-server/Makefile.am (BUILT_SOURCES): New var.
	(timestamp.c): New target.
	* irc-server/irc-event-1.c: #include "timestamp.c".
	(irc_send_init_block): Use ‘created’, not ‘svz_build’.

2011-02-25  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Inline svzconfig.h into libserveez/defines.h on install.

	* Makefile.am (include_HEADERS): Remove svzconfig.h.
	(i): New var.
	(install-data-hook): New target.

2011-02-24  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Require type info in macro ‘svz_hash_foreach_value’.

	* ctrl-server/control-proto.c (ctrl_stat_all):
	Update call to ‘svz_hash_foreach_value’.
	* http-server/http-cache.c (http_cache_consistency): Likewise.

2011-02-23  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use ‘AC_USE_SYSTEM_EXTENSIONS’.

	* cfgfile.c: Remove #define:s
	‘_GNU_SOURCE’, ‘__EXTENSIONS__’, ‘_ALL_SOURCE’.
	* ctrl-server/control-proto.c: Likewise.
	* fakeident-server/ident-proto.c: Likewise.
	* foo-server/foo-proto.c: Likewise.
	* guile-api.c: Likewise.
	* guile-bin.c: Likewise.
	* guile-server.c: Likewise.
	* guile.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cache.h: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-cgi.h: Likewise.
	* http-server/http-core.c: Likewise.
	* http-server/http-core.h: Likewise.
	* http-server/http-dirlist.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* http-server/http-proto.h: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-config.c: Likewise.
	* irc-server/irc-config.h: Likewise.
	* irc-server/irc-crypt.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-event-2.c: Likewise.
	* irc-server/irc-event-3.c: Likewise.
	* irc-server/irc-event-4.c: Likewise.
	* irc-server/irc-event-5.c: Likewise.
	* irc-server/irc-event-6.c: Likewise.
	* irc-server/irc-event-7.c: Likewise.
	* irc-server/irc-event.h: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* irc-server/irc-proto.h: Likewise.
	* irc-server/irc-server.c: Likewise.
	* nut-server/gnutella.c: Likewise.
	* nut-server/gnutella.h: Likewise.
	* nut-server/nut-core.c: Likewise.
	* nut-server/nut-core.h: Likewise.
	* nut-server/nut-hostlist.c: Likewise.
	* nut-server/nut-request.c: Likewise.
	* nut-server/nut-route.c: Likewise.
	* nut-server/nut-transfer.c: Likewise.
	* nut-server/nut-transfer.h: Likewise.
	* option.c: Likewise.
	* option.h: Likewise.
	* prog-server/prog-server.c: Likewise.
	* serveez.c: Likewise.
	* sntp-server/sntp-proto.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-02-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Internalize debug support.

	* svzconfig.h.in (SVZ_ENABLE_DEBUG): Delete.
	* awcs-server/awcs-proto.c:
	Do ‘s/SVZ_ENABLE_DEBUG/ENABLE_DEBUG/g’.
	* ctrl-server/control-proto.c: Likewise.
	* guile-server.c: Likewise.
	* http-server/http-cache.c: Likewise.
	* http-server/http-cgi.c: Likewise.
	* http-server/http-core.c: Likewise.
	* http-server/http-proto.c: Likewise.
	* irc-core/irc-core.c: Likewise.
	* irc-server/irc-config.c: Likewise.
	* irc-server/irc-event-1.c: Likewise.
	* irc-server/irc-proto.c: Likewise.
	* serveez.c: Likewise.
	* timidity.h: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-02-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Centralize <assert.h> prep (i.e., NDEBUG) and #include.

	* timidity.h: New file.
	* Makefile.am (serveez_SOURCES): Add timidity.h.
	* http-server/http-cache.c: Do s/<assert.h>/"timidity.h"/.
	* http-server/http-proto.c: Likewise.
	* tunnel-server/tunnel.c: Likewise.

2011-02-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Move current allocation info behind functional interface.

	* ctrl-server/control-proto.c (ctrl_stat) [SVZ_ENABLE_DEBUG]:
	Use ‘svz_get_curalloc’ instead of direct var references.
	* serveez.c (guile_entry) [SVZ_ENABLE_DEBUG]: Likewise.

2011-02-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Look for <sys/sysinfo.h>; assume ‘sysget’.

	* ctrl-server/control-proto.c: #define HAVE_SYSGET here,
	if both <sys/sysget.h> and <sys/sysinfo.h> are available.

2011-02-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Look for <sys/pstat.h>; assume ‘pstat_getdynamic’.

	* ctrl-server/control-proto.c: #include <sys/param.h>
	if it and <sys/pstat.h> are available; #define HAVE_PSTAT here.

2011-02-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[ctrl-server int] Move ‘CPU_FORMAT’ from header to impl.

	* ctrl-server/control-proto.h (CPU_FORMAT): Move from here...
	* ctrl-server/control-proto.c (CPU_FORMAT): ...to here.

2011-02-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Internalize ‘crypt’ support.

	Here, "U" means "[HAVE_CRYPT_H]: #include <crypt.h>;
	do s/SVZ_ENABLE_CRYPT/defined HAVE_CRYPT/g".
	* ctrl-server/control-proto.c: U.
	* irc-server/irc-config.c: U.
	* irc-server/irc-event-1.c: U.
	* option.c: U.
	* svzconfig.h.in (SVZ_HAVE_CRYPT): Delete.

2011-02-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop $(bindir) program: mkpassword

	* Makefile.am (bin_PROGRAMS): Remove mkpassword.
	(mkpassword_SOURCES): Delete var.
	* mkpassword.ap: Delete file.
	* mkpassword.c: Delete file.

2011-02-19  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Include ‘svz_sock_flood_protect’ in API unconditionally.

	* svzconfig.h.in (SVZ_ENABLE_FLOOD_PROTECTION): Delete.
	* ctrl-server/control-proto.c (ctrl_stat_id, ctrl_stat):
	Use ‘ENABLE_FLOOD_PROTECTION’ for internal preproc cond expr.

2011-02-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Purge SVZ_HAVE_{SNPRINTF,VSNPRINTF} reference.

	Omission from 2011-02-16, "Drop ‘svz_snprintf’;
	use ‘vsnprintf’, ‘snprintf’ directly".

	* svzconfig.h.in (SVZ_HAVE_SNPRINTF, SVZ_HAVE_VSNPRINTF): Delete.

2011-02-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use ‘HAVE_VARARGS_H’ directly.

	* svzconfig.h.in (SVZ_HAVE_VARARGS_H): Delete.

2011-02-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use ‘signed’ directly.

	* guile-bin.c: Do ‘s/svz_c_signed/signed/g’.
	* svzconfig.h.in (svz_c_signed): Delete.

2011-02-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Move simple hash function out of libserveez.

	* le-u32-hash.h: New file.
	* Makefile.am (serveez_SOURCES): Add le-u32-hash.h.
	* awcs-server/awcs-proto.c: #include "le-u32-hash.h".
	(awcs_hash_code): Use ‘le_u32_hash’.

2011-02-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http-server int] Use ‘memcmp’ for eol detection.

	* http-server/http-core.h (CRLF, CRLF2): Delete #define:s.
	(STANDARD_EOL): New #define.
	(EOL1_P, EOL2_P): New macros.
	* http-server/http-core.c (http_parse_property): Use ‘EOL1_P’.
	* http-server/http-proto.c (http_handle_request): Likewise.
	(http_check_request): Use ‘EOL2_P’.

2011-02-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[ctrl-proto int] Ensure ‘atoi’ decl is available.

	* ctrl-server/control-proto.c: #include <stdlib.h>.

2011-02-16  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Drop ‘svz_snprintf’; use ‘vsnprintf’, ‘snprintf’ directly.

	Here, "N" means "don't include libserveez/snprintf.h";
	"V" means "use ‘vsnprintf’ directly"; "S" means "use
	‘snprintf’ directly"; and "A" means "#include <stdarg.h>".
	* ctrl-server/control-proto.c (ctrl_get_cpu_state, ctrl_idle): S.
	* guile-server.c: A.
	* guile.c: A.
	* http-server/http-core.c: A.
	(http_add_header): V.
	* http-server/http-dirlist.c (http_dirlist): S.
	* irc-server/irc-proto.c: A.
	(irc_printf): V.
	* irc-server/irc-server.c: A.
	* nut-server/nut-transfer.c (nut_read_database_r): S.
	* option.c: #include <stdlib.h>.
	* libserveez.h: Don't #include "libserveez/snprintf.h".

2011-02-16  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Decruft: Assume the compiler can cope w/ function prototypes.

	* http-server/http-core.h: Remove ‘__PARAMS’ from all func decls.
	* irc-server/irc-proto.h: Likewise.
	* irc-server/irc-server.h: Likewise.

2011-02-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘const’ directly.

	* svzconfig.h.in (svz_c_const): Delete.

2011-02-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[irc-server] Avoid latent buffer overflow in config parsing.

	* irc-server/irc-server.c (irc_parse_line): For format
	string frag "%s", consume 1st a ‘size_t avail’ arg, and 2nd
	the output string pointer arg; limit scanning to ‘avail - 1’.
	(irc_connect_servers): Update call to ‘irc_parse_line’.
	* irc-server/irc-config.c (irc_parse_config_lines): Likewise.
	* irc-server/irc-proto.c (MAX_TMP_STRLEN): New #define.
	(irc_init): Use ‘MAX_TMP_STRLEN’; update calls to ‘irc_parse_line’.

2011-02-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[C] Avoid naked "%s" in ‘sscanf’ format string.

	* cpp-tricks.h: New file.
	* Makefile.am (serveez_SOURCES): Add cpp-tricks.h.
	* http-server/http-core.c: #include "cpp-tricks.h".
	(MAX_WKDAY_SIZE): New #define.
	(http_parse_date): Use ‘MAX_WKDAY_SIZE’, ‘PERCENT_N_S’.

2011-02-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Use ‘size_t’ and ‘off_t’ directly.

	* svzconfig.h.in (svz_t_size, svz_t_off): Delete.

2011-02-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[lib] Purge ‘svz_t_retsig’ reference.

	Omission from 2011-02-04, "Assume signal handlers return ‘void’".

	* svzconfig.h.in (svz_t_retsig): Delete.

2011-02-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[boot int] Do more precise checks instead of ‘AC_EGREP_HEADER’.

	* guile-api.c: Use ‘HAVE_DECL_SETRPCENT’, ‘HAVE_DECL_ENDRPCENT’.
	* http-server/http-dirlist.c: Use ‘HAVE_DECL_ALPHASORT’.
	* option.h: Use ‘HAVE_DECL_GETOPT_LONG’.

2011-02-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Change package name to "GNU Serveez".

	* option.c (version): Display the package name, too.

2011-02-13  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Move config.h, version.h into src/.

	* version.h.in: New file.
	* Makefile.am (EXTRA_DIST): Add config.h.serveez,
	version.h.serveez.
	(config.h.serveez, version.h.serveez): New targets.

2011-02-10  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[boot int] Clean up Makefile.am files; segregate woe32.

	* Makefile.am (EXTRA_DIST): Remove svzconfig.h.in,
	serveez-config.in; move serveez.rc, serveez.dsp,
	svzconfig.h.serveez, serveez.ap, mkpassword.ap, mkpassword.dsp
	to a separate ‘EXTRA_DIST +=’; replace serveez.m4 and serveez.scm
	with $(aclocal_DATA) and $(pkgdata_DATA), respectively.
	(serveez_DEPENDENCIES): Move $(resource_OBJECTS)
	to a separate ‘serveez_DEPENDENCIES +=’.
	(CLEANFILES): Move *.ro to a separate ‘CLEANFILES +=’.
	(stems, woeap, woedsp): New vars.

2011-02-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Remove configure option ‘--with-guile-source’.

	* Makefile.am (serveez_DEPENDENCIES):
	Remove $(GUILE_DEPENDENCY).
	($(GUILE_RULE)): Delete target.

2011-02-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build guile] If no <guile/gh.h>, #include <libguile.h>.

	Here, "U" means "Replace ‘#if GUILE_SOURCE’ with
	‘#if !defined HAVE_GUILE_GH_H’; in that case, #include
	<libguile.h>, not <libguile/gh.h>".
	* guile-api.c: U.
	* guile-bin.c: U.
	* guile-server.c: U.
	* guile.c: U.
	* serveez.c: U.

2011-02-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Generate *.serveez files on "make dist".

	* svzconfig.h.serveez: Delete file.
	* Makefile.am (svzconfig.h.serveez): New target.

2011-02-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Centralize Makefile.am var ‘MAINTAINERCLEANFILES’.

	* Makefile.am (MAINTAINERCLEANFILES): Use ‘+=’; update.
	* awcs-server/Makefile.am (MAINTAINERCLEANFILES): Delete var.
	* ctrl-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* fakeident-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* foo-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* guile-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* http-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* irc-core/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* irc-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* nut-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* prog-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* sntp-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.
	* tunnel-server/Makefile.am (MAINTAINERCLEANFILES): Likewise.

2011-02-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[guile] Avoid deprecated var ‘scm_cur_inp’.

	* guile.c (guile_eval_file): Use ‘scm_current_input_port’.

2011-02-04  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Centralize Makefile.am var ‘CLEANFILES’.

	Here, "I" means "include common.mk";
	"D" means "(CLEANFILES): Delete var".
	* Makefile.am: U.
	* awcs-server/Makefile.am: D.
	* ctrl-server/Makefile.am: D.
	* foo-server/Makefile.am: D.
	* guile-server/Makefile.am: I; D.
	* http-server/Makefile.am: D.
	* irc-core/Makefile.am: D.
	* irc-server/Makefile.am: D.
	* nut-server/Makefile.am: D.
	* prog-server/Makefile.am: D.
	* sntp-server/Makefile.am: D.
	* tunnel-server/Makefile.am: D.

2011-02-03  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Centralize ‘AM_CPPFLAGS’; zonk obsolete ‘INCLUDES’.

	Here, every Makefile.am has implicit "include
	common.mk", and "(INCLUDES): Delete var".
	* Makefile.am (AM_CPPFLAGS): New augmenting (+=) var.
	* awcs-server/Makefile.am
	* ctrl-server/Makefile.am
	* fakeident-server/Makefile.am
	* foo-server/Makefile.am
	* http-server/Makefile.am
	* irc-core/Makefile.am
	* irc-server/Makefile.am
	* nut-server/Makefile.am
	* prog-server/Makefile.am
	* sntp-server/Makefile.am
	* tunnel-server/Makefile.am

2007-03-29  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cgi.c (http_cgi_exec): Fixed the same bug
	for making the input handle blocking.

2006-01-21  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cgi.c (http_cgi_exec): Fixed small bug in cgi
	execution.

2003-08-26  Stefan Jahn  <stefan@lkcc.org>

	* guile-bin.c (CTYPE_CHECK_RANGE): Correct usage of the
	svz_c_signed keyword.

2003-06-29  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c: Minor bug fix.

	* guile-server.c: Using svz_asprintf() instead of svz_snprintf()
	where appropriate.

2003-06-18  Stefan Jahn  <stefan@lkcc.org>

	* svzconfig.h.in: Removed all of the remaining #define's which
	are not prefixed by 'SVZ_' or 'svz_'.

2003-06-15  Stefan Jahn  <stefan@lkcc.org>

	* mkpassword.ap (DEFS): Changed the SVZ_HAVE_CRYPT #define
	appropriately.

2003-06-14  Stefan Jahn  <stefan@lkcc.org>

	* svzconfig.h.in: Updated to the new macro definitions
	made in the configure.in file.

	* serveez.m4: Modified to conform with Autoconf 2.57.

	* guile.c (guile_config_instantiate): Bug fixes.

2003-06-01  Stefan Jahn  <stefan@lkcc.org>

	* guile.c: Some major bug fixes which have been unrevealed
	by the new test file 'server-test.scm'.

2003-05-31  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_server_clients): New Guile procedure.

2003-05-26  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am: Removed the FIXME rule for MinGW32.  Works with
	libtool 1.5.

2003-04-06  Stefan Jahn  <stefan@lkcc.org>

	* guile.h, guile-api.h, guile-server.c: Finally removed
	every occurrence of the gh interface.

2003-03-24  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/icecast-server.scm: Added compatibility stuff
	for Guile 1.6.x versions and later.

2003-03-22  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c, guile-bin.c: Replaced scm_must_*() functions by
	scm_gc_*() where appropriate.

	* guile-api.h (guile_lookup): Bug fix.

2003-01-05  Andreas Rottmann  <a.rottmann@gmx.at>

	* guile.c, guile-api.h, guile-api.c, guile-server.c: Modified
	to work with Guile 1.7, too.
	* guile-server.c: Fixed invalid GUILE_CONCAT2 invocation.

2002-11-28  Andreas Rottmann  <a.rottmann@gmx.at>

	* fakeident-server/ident-proto.c (fakeident_server_definition):
	Use SVZ_DEFINE_CONFIG.

2002-11-27  Andreas Rottmann  <a.rottmann@gmx.at>

	* guile.c (guile_config_instantiate): New guile API function
	"instantiate-config-type!".
	(guile_define_server): Use guile_config_instantiate().

	* guile-server.c: Make it work with changed svz_servertype_t.

2002-10-01  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am (EXTRA_DIST): Added `mkpassword.dsp' and
	`mkpassword.ap'.

2002-07-31  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_get_cpu_state): Added
	support for MacOS cpu load via `host_statistics()'.

	* guile-server/*.scm: Replaced every occurrence of
	`primitive-load' by `serveez-load'.

	* guile-server.c (guile_server_state_set_x,
	guile_server_state_ref): Bugfix: Was not able to store `0'.

2002-07-29  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm (serveez-doc-add!): Add the documentation-files
	for each loadpath entry.

	* guile.c (guile_define_port, guile_define_server): Bugfix:
	Do not drop previously defined entities when detecting duplicate
	definitions.

	* guile-server.c (guile_define_servertype): Checking for
	duplicate servertype definitions.

	* Makefile.am (install-exec-hook): Workaround for mingw32 and
	cygwin host builds.

2002-07-27  Stefan Jahn  <stefan@lkcc.org>

	* guile.c (guile_serveez_load): New Guile procedure replacing
	`(primitive-load)'.  Also looks for files in the load path.

	* guile-bin.c: Numerous bug fixes.

2002-07-26  Stefan Jahn  <s.jahn@bit-side.com>

	* irc-server/irc-event-2.c (irc_join_callback): Fixed a bug
	occurring when a client tries to join an invalid channel name.
	Returning the correct error message (ERR_NOSUCHCHANNEL) now.

	* guile-bin.c (guile_string_to_bin, guile_bin_search): Handle
	empty strings correctly.

2002-07-26  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm (serveez-doc-add!): New procedure.  Adds the
	serveez documentation file to the help system of Guile.

2002-07-15  Stefan Jahn  <stefan@lkcc.org>

	* guile.c (guile_to_integer): Added FUNC_NAME macro.
	(guile_error): Fixed argument type.
	(guile_eval_file): Use `scm_primitive_eval_x()' instead of
	`scm_eval_x()' for future versions of Guile.

	* guile-server.c (guile_func_*): Added the FUNC_NAME macro
	to each	of the Guile procedure wrappers.

	* guile-bin.c: Bug fixes.

	* guile-api.h (SCM_VERSION_15X): Compatibility macros for
	Guile 1.5.6 added and tested.

2002-06-06  Stefan Jahn  <stefan@lkcc.org>

	* guile-bin.c (guile_bin_set_x): Fixed a bug in argument
	handling (forgot to differentiate between char and exact
	number).

	* guile-api.c (svz:sock:check-oob-request, svz:sock:send-oob):
	New Guile procedures.

2002-06-03  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/icecast-server.scm (icecast-id3-tag):
	Stripping ID3v1 tags from mp3 files.

2002-05-31  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/icecast-server.scm (icecast-dns): Demonstrating
	usage of coservers from Guile.

2002-05-29  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/icecast-server.scm: Recurses into sub
	directories while collecting mp3 files.

2002-05-24  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/icecast-server.scm (icecast-server): New
	icecast compatible guile server added.

	* guile-server.c (guile_func_trigger_cond,
	guile_func_trigger_func): New wrappers for the additional
	socket callbacks.

	* guile-bin.c (guile_garbage_to_bin): Converts data buffer
	allocated by scm_must_malloc() into a binary smob.

	* guile-api.c (svz:read-file, svz:sock:receive-buffer-size,
	svz:sock:send-buffer-size, svz:sock:trigger-condition,
	svz:sock:trigger): New Guile procedures.

2002-05-05  Stefan Jahn  <stefan@lkcc.org>

	* serveez.c (main): Close stdin, stdout, stderr if these are
	tty's only.

	* guile.c (guile_eval_file): Inhibit usage of the stdin file
	descriptor for configuration input if it is actually closed.

2002-03-27  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_sock_send_buffer): New Guile procedure
	returning the send buffer of the given socket structure as
	binary smob.

	* option.c (handle_options): New command line switch (-c and
	--stdin).  Forces standard input as configuration file.

	* guile.c (guile_eval_file): Use the standard input stream as
	configuration file when required and possible.

2002-03-22  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_sock_protocol): Returns the type of socket
	structure.

	* guile-bin.c (guile_bin_reverse_x, guile_bin_reverse): Two
	new convenience functions for Guile servers.

2002-03-01  Stefan Jahn  <stefan@lkcc.org>

	* guile.h (guile_to_string): This macro segfaulted when passing
	immediate values in Guile 1.3.4! Thanks for reporting this bug
	go to <bosnjak@iskratel.si>. Fixed.

	* guile-server.c (guile_define_servertype): Fixed memory leak
	occuring when servertype definition fails.

2002-02-15  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_sock_find, guile_sock_ident): New
	functions for the Guile frontend dealing with socket structure
	indentification.

2002-02-12  Stefan Jahn  <stefan@lkcc.org>

	* guile-bin.c (MAKE_BIN_SET): Fixed range checking.

2002-02-10  Stefan Jahn  <stefan@lkcc.org>

	* guile-bin.c (guile_bin_init): More converter functions for
	binary smobs for long, int, short and char access.

2002-02-05  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (scm_portmap_list): Now returns an empty list
	if there are no RPC port mappings or an error occurred.

	* guile-server/inetd.scm (check-rpc-portmapper): Applied
	Martin Grabmueller's proposal.  Thanks!

	* guile-api.c (guile_coserver_ident, guile_coserver_dns,
	guile_coserver_rdns): Three new functions being the Guile
	frontend to the internal coservers of Serveez.

2002-02-03  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_connect_host): Also parses
	Internet hostnames in the given `hosts' configuration item and
	passes these to the DNS coserver.
	(nut_config_prototype): Reintroduced `disable' configuration
	item.
	(nut_detect_proto): Consider the `disable' configuration item
	and do not let clients connect if set.

	* irc-server/irc-proto.c (irc_check_tcp_bindings): Checking
	for the TCP bindings of a server instance and comparison with
	the given `M-line'.

2002-02-01  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/inetd.scm (check-rpc-portmapper): Uses the
	below function (portmap-list) in order to check whether a
	certain RPC mapping is already registered or not.

	* guile-api.c (scm_portmap_list): New function.  Returns the
	current list of RPC port mappings.

2002-01-28  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm (bind-udp-port-range!): New function.

2002-01-20  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_get_response): Considers
	content range requests.  When the request is satisfiable the
	HTTP server sends partial content.

	* http-server/http-core.c (http_check_range): Validates
	content range specifier send in a HTTP header.
	(http_get_range): Parses a content range specifier.

2001-12-27  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.h: Added some more backward compatibility
	definitions.  Also defined a pre-ansi C string concatinator
	macro.

2001-12-22  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/nut-transfer.c, http-server/http-dirlist.c: Do
	not include <dirent.h> with <sys/dirent.h> together to inhibit
	redeclaration of `struct dirent'.

2001-12-15  Stefan Jahn  <stefan@lkcc.org>

	* prog-server/prog-server.c (prog_read_sock_drop): Dropping
	unread data on failed ICMP and UDP sockets.

	* guile.c (guile_define_port): Checking for network port
	range (0 .. 65535).

2001-12-13  Stefan Jahn  <stefan@lkcc.org>

	* irc-server/irc-server.h, http-server/http-core.h,
	irc-server/irc-proto.h: Renamed __P into __PARAMS because the
	use of __P conflicts with some g++ versions.

2001-12-12  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/inetd.scm (bind-rpc-service): RPC service
	capabilities added.  Ready for testing.

	* guile-api.c (guile_server_listeners): New Guile procedure
	returning a list of listening server sockets for a given
	server instance.
	(scm_portmap): RPC port mapper interface for Guile.

2001-12-07  Stefan Jahn  <stefan@lkcc.org>

	* guile.c (guile_define_port): Added `device' keyword for
	network	port configurations.

2001-12-04  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm: Added Scheme procedures using the below new
	Guile primitives.

	* guile-api.c (scm_getrpc, scm_setrpc): New Guile
	primitives.

2001-12-01  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/inetd.scm (lookup-service): Detect rpc services
	and drop a `no support' note.

2001-11-29  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/Makefile.am (pkgdata_DATA): Install
	all `*.scm' files.

	* Makefile.am (pkgdata_DATA): Install `serveez.scm'.

	* serveez.c (main): Setup command line verbosity also before
	evaluating the configuration file.

2001-11-27  Stefan Jahn  <stefan@lkcc.org>

	* sntp-server/sntp-proto.c: Made the server TCP/PIPE-able.

	* guile-server/inetd.scm (create-server): Setup the new
	`thread-frequency' option if possible.
	(translate-internal-server): Translates `internal' inetd
	services into Serveez server.

	* prog-server/prog-server.c: Added new configuration
	option `thread-frequency' determining the maximum number
	of programs to spawn within a minute.

	* guile-server/inetd.scm: Better error checking.

	* guile.c: New Guile procedure: `(serveez-servertype?)'.
	Checks whether the given string is a servertype's short
	name.

2001-11-25  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/inetd.scm: Inetd replacement script.  Reads a
	configuration file and instantiates `prog-server's.

2001-11-25  Stefan Jahn  <stefan@lkcc.org>

	* prog-server/prog-server.c: Also UDP and ICMP bindings
	supported.  Added `single-threaded' option.

2001-11-21  Stefan Jahn  <stefan@lkcc.org>

	* prog-server/prog-server.c (prog_connect_socket): Adapted
	to new functions in `passthrough.c'.

2001-11-20  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_func_kicked_socket): New kicked-
	socket wrapper.
	(guile_sock_boundary): More verbose documentation about this.

	* guile-api.c (guile_sock_connect): Also allow specifying
	hostnames to connect to.  These get automatically resolved.
	(svz:sock:kicked): New Guile procedure allowing to set the
	kicked-socket callback.
	(guile_api_init): Defined KICK_QUEUE and KICK_FLOOD.

2001-11-19  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.h: New file.  Contains compatibility code.

	* guile-server.c, guile-bin.c, serveez.c, guile-api.c,
	guile.c: Tried to drop most of the gh_*() functionality.  The
	Guile people are going to deprecate this interface.  That is
	why need to find proper replacements in the scm_*() interface.

2001-11-16  Stefan Jahn  <stefan@lkcc.org>

	* guile-bin.h (SCM_STRING_UCHARS, SCM_STRING_CHARS): Defined
	for Guile versions compatibility.  Changed all callers.

2001-11-12  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_sock_no_delay): New Guile procedure switching
	TCP Nagle algorithm on or off.

2001-11-11  Stefan Jahn  <stefan@lkcc.org>

	* guile-server/mandel-server.scm (mandel-palette): More
	flexible colour palette generator.  Can handle any colour
	depth.

2001-11-10  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_sock_final_print): New Guile procedure.

	* guile-server.c (guile_nuke_happened): New Guile procedure.

	* guile-server/mandel-server.scm: New server implementation.
	Completely in Guile.  Added the directory `guile-server' and put
	all existing servers there.

2001-11-09  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (guile_sock_server, guile_server_p): New
	Guile procedures known as `svz:server?' and `svz:sock:server'.

	* guile-server.c (guile_server_config_ref): Renamed
	`svz:server:config-get' into `svz:server:config-ref'.
	(guile_server_state_ref, guile_server_state_set_x): New Guile
	procedure known as `svz:server:state-ref' and
	`svz:server:state-set!'.  Both implementing server instance state
	savings for Guile servers.

2001-11-04  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (svz:sock:referrer, svz:sock:parent, svz:sock?):
	New Guile procedures.

2001-11-02  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (svz:inet-ntoa, svz:inet-aton, svz:htons,
	svz:ntohs, svz:htonl, svz:ntohl): New guile procedures.
	(guile_sock_receive_buffer_reduce): New guile procedure named
	`svz:sock:receive-buffer-reduce'.  Useful in check-request
	callbacks.
	(guile_sock_remote_address, guile_sock_local_address): New Guile
	procedures: `svz:sock:remote-address' and
	`svz:sock:local-address'.

2001-11-01  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c (svz:sock:disconnected): New callback setter/
	getter for Guile.

	* guile-server.c (MAKE_SOCK_CALLBACK): New macro defining a
	setter/getter function exported to Guile.  The resulting
	procedure is for modifying socket structure callbacks.

2001-10-31  Stefan Jahn  <stefan@lkcc.org>

	* guile-api.c: New file.  Provides additional Serveez API
	functionality for Guile.

	* guile-server.c (guile_sock_print): Check for protocol flag
	to differentiate TCP/UDP/ICMP/PIPE.

2001-10-26  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_stat): Appended the
	builtin program passthrough server to the feature list.

	* cfgfile.c (init_server_definitions): Added program
	passthrough server definition.

	* prog-server/prog-server.c: Framework for the upcoming
	program passthrough server added.

2001-10-25  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_sock_data): Protect associated guile
	object via scm_protect_object().  Unprotect these objects when
	replacing them and socket disconnection.  This makes the gc
	marker function for <svz-socket> unnecessary.
	(guile_sock_boundary): Fixed memory leak for packet boundaries
	set by guile.
	(guile_define_servertype): Protect servertype callbacks via
	scm_protect_object().  Now all gc marker functions for
	<svz-socket>, <svz-server> and <svz->servertype> are unnecessary.

	* irc-server/irc-proto.h (struct irc_configuration): Made
	the number of maximum channels per user configurable.

2001-10-07  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_access_exceptions): New guile procedure.
	Thus the user can determine the use of exception handlers as
	needed.

2001-09-22  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_svz_servertype_gc): Setup marker
	functions for the guile garbage collection. This is necessary
	if you are defining (lambda) expressions for callback functions.

2001-09-21  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_call): Wrapper function for `scm_apply()'
	catching exceptions within guile procedure calls if requested.
	This behaviour can be disabled by setting `guile_use_exceptions'
	to zero.

2001-09-20  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_sock_data): Setting up a garbage
	collector marking function while referring to the scheme
	object in `sock->data'.

	* guile-bin.c (guile_list_to_bin): Checking argument range of
	given list items.

	* guile-bin.c, guile.c, guile-server.c: Using `gh_eq_p()' and
	`!gh_eq_p()' instead of C operators `==' and `!=' when comparing
	scheme values wherever possible.

2001-09-13  Stefan Jahn  <stefan@lkcc.org>

	* svzconfig.h.in: Reintroduced definition of `off_t'.

2001-09-12  Stefan Jahn  <stefan@lkcc.org>

	* guile-bin.h (scm_wrong_type_arg_msg): Defined some
	backward compatibility macros with "Guile 1.3.4".

	* guile.c (guile_exception): Replace `scm_simple_format' by
	`scm_display_error_message'.
	(guile_get_current_load_port): Checking for SCM_BOOL_P before
	testing SCM_PORTP().

2001-09-10  Stefan Jahn  <stefan@lkcc.org>

	* svzconfig.h.in: Added `size_t'.

	* serveez-config.in: New file. Utility for compiling and linking
	a program with Serveez.

2001-09-08  Stefan Jahn  <stefan@lkcc.org>

	* libserveez.h: Including `array.h' explicitly.

2001-09-07  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_sock_floodprotect): New setter and getter
	for the flood protection bit accessible from guile scripts.

	* guile-bin.c, guile-server.c, guile.c: Changed predicate checking
	gh_number_p() into gh_exact_p() for integer values throughout
	these files.

2001-09-04  Stefan Jahn  <stefan@lkcc.org>

	* serveez.c (guile_entry): Detect operating system before running
	the configuration file.

2001-08-12  Stefan Jahn  <stefan@lkcc.org>

	* awcs-server/awcs-proto.c: Slightly modified the client id
	parsing everywhere in this file. The client id's are no more
	limited to four byte numbers with leading '0'. Client id's
	are by now simple numbers without specific size and without
	leading characters.

	* ctrl-server/control-proto.c (ctrl_idle): Print process state
	also if cpu state should not be available.

2001-08-03  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cgi.c (http_cgi_exec): Removed limit of
	directory name lengths.

	* http-server/http-core.c (http_absolute_file): Removed limit
	for directory lengths.

2001-07-31  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_stat_id): Output socket-
	type-specific information only.

2001-07-30  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cache.c (http_free_cache): Fixed segmentation
	fault due to pure dumbness of mine.

	* http-server/http-cgi.c (http_create_cgi_envp): Adapted
	the code to the new svz_envblock_*() functions of the core API.
	Thereby removed the restriction for the environment sizes of cgi
	scripts.

2001-07-28  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cache.c (http_urgent_cache): LRU detection
	algorithm has been changed: Using a double chained list for
	detecting the least recent cache file.

	* ctrl-server/control-proto.c (ctrl_stat_cache): Adapted
	routine to changes in the http cache.

	* eval-server.scm (prefix): Made prompt, quit command and
	greeting message configurable.

	* guile-bin.c (guile_bin_search): Returns #f on failure now.
	(guile_bin_set_x): Allow numbers as "value" argument.
	(guile_bin_concat): Renamed this procedure to "binary-concat!"
	because it has a side effect on the argument.
	(guile_bin_subset): Made the "end" argument optional. The
	procedure returns all data until the end of the smob if this
	argument is missing.

2001-07-20  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_sock_check_request): Setter for
	the check_request callback.
	(guile_server_config_get): Returns a scheme cell for a
	configuration item of a server.
	(guile_sock_receive_buffer): Getter for the receive buffer
	of a socket.
	(guile_sock_data): Associate any kind of data with a socket.

	* guile.c (guile_hash_to_guile): New function. Converts a
	string hash into a scheme alist.

	* guile-server.c (guile_sock_handle_request): New function for
	setting up the check_request member of a socket structure.

2001-07-18  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (guile_servertype_config): Manages the
	parsing of the configuration items for a servertype defined
	in Guile.
	(guile_servertype_config_default): Handles the definition of
	the default values of each item.

	* guile-bin.c: Implementation of a binary smob for passing
	data between C and Guile without copying it necessarily. It
	also provides procedure for converting the smobs into strings
	and lists.

2001-07-12  Stefan Jahn  <stefan@lkcc.org>

	* echo-server.scm (echo-handle-request): Implemented this
	function. Simply echos the input with a prefix and quits
	at a certain command.

	* guile-server.c: Some more work on guile servers completed.
	Echo server even does something now.

2001-07-07  Stefan Jahn  <stefan@lkcc.org>

	* guile-server.c (MAKE_SMOB_DEFINITION): Started to encapsulate
	some of the data structures of the core library into a guile
	representation called `smob' (small object).

2001-07-03  Stefan Jahn  <s.jahn@bit-side.com>

	* nut-server/nut-route.c (nut_route): Fixed memory leak.

	* nut-server/nut-transfer.c (nut_init_transfer): Bugfix:
	Corrected the test for valid file extensions.

2001-06-27  Stefan Jahn  <stefan@lkcc.org>

	* echo-server.scm: An example server in guile.

	* guile-server.c: New file containing some code for the full
	implementation of servers with guile. Yet very experimental.

2001-06-21  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm (create-tcp-port!, bind-tcp-port-range!):
	New functions. (by 'mgrabmue)

2001-06-19  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm (bind-servers!): New function. Thanks 'mgrabmue.

2001-06-13  Stefan Jahn  <stefan@lkcc.org>

	* serveez.scm: Put some convenience functions here.

	* guile.c (guile_bind_server): Check the argument type for port
	and server name.
	(guile_init): Now using the arguments of `gh_new_procedure()' in
	the right context (Guile can check number arguments).
	(guile_init): Two new functions exported: `serveez-port?' and
	`serveez-server?' which check its argument being a valid port or
	server.

2001-06-10  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am (aclocal_DATA): Added the `serveez.m4' autoconf
	script.

2001-06-04  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am ($(GUILE_RULE)): Now possible to create a static
	guile library and link against it. This is especially useful
	if a user wants to compile and run serveez without having a full
	guile installation on its system.

2001-05-18  Stefan Jahn  <stefan@lkcc.org>

	* svzconfig.h.in: New file.

	* Makefile.am (EXTRA_DIST): Added `svzconfig.h.in'.

2001-05-05  Stefan Jahn  <stefan@lkcc.org>

	* foo-server/foo-proto.c (foo_server_definition): Using new
	DEFINE_CONFIG() macro in the definition of the server type.

2001-05-04  Stefan Jahn  <stefan@lkcc.org>

	* guile.c (guile_define_server): Delete the server instance
	if the configuration failed and return SCM_BOOL_F.

	* ctrl-server/control-proto.c (ctrl_stat): Added "FOO" to the
	server compile features.
	(ctrl_stat): Corrected server name detection.

	* foo-server/foo-proto.c: Implemented full featured
	configuration the new style. All other servers wait for the
	same...

2001-05-02  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/nut-transfer.c (nut_send_push): Using `svz_portcfg()'
	for specifying push request.

	* nut-server/nut-request.c: Used `svz_portcfg()' where necessary.

	* nut-server/gnutella.c (nut_info_server): Printing
	server bindings here.

	* http-server/http-proto.c (http_info_server): Print server
	bindings instead of the tcp port only.
	(http_init): Resolve the ip address of the first server binding
	only and use it as server name if there no such configured.

2001-04-28  Stefan Jahn  <stefan@lkcc.org>

	* tunnel-server/tunnel.c: Made all necessary changes for using
	the new svz_portcfg_t... still some work needed.

	* tunnel-server/tunnel.h: Using svz_portcfg_t now instead
	of old portcfg_t.

	* sntp-server/sntp-proto.c: Dropped default network port
	configuration.

	* nut-server/gnutella.c: Dropped port configuration. Made
	all changes required by this. Added lots of "FIXME"s.

	* irc-server/irc-proto.c: Dropped port configuration.

	* irc-server/irc-config.c (irc_parse_config_lines): Changed
	data format of configuration lines (NULL terminated string
	arrays -> svz_array_t).

	* http-server/http-proto.c: Dropped network port
	configuration.
	(http_init): Added some "FIXME"s.

2001-04-27  Stefan Jahn  <stefan@lkcc.org>

	* foo-server/foo-proto.h: Dropped port configuration within
	the server instance configuration.

	* foo-server/foo-proto.c: Put all default values as needed
	by server instance configuration into the configuration. Dropped
	port configuration.
	(foo_global_init): Default value creation here.
	(foo_global_finalize): Default value destruction here.
	(foo_init): Dropped call of `server_bind()' since this is
	completely handled outside the actual server.

	* fakeident-server/ident-proto.c (fakeident_config): Dropped
	port configuration.

	* ctrl-server/control-proto.h: Dropped port configuration
	in the server instance configuration.

	* ctrl-server/control-proto.c (ctrl_config): No more
	port configuration in the server configuration.
	(ctrl_stat_id): Corrected listing of servers on each listening
	socket (is now a svz_array_t).

	* awcs-server/awcs-proto.h: Port configurations not in the
	server instance configuration anymore.

	* awcs-server/awcs-proto.c: Dropped definition of network
	and filesystem port configuration.
	(awcs_init): Dropped `server_bind()'.

	* serveez.c (guile_entry): Dropped call of `server_start()'
	and `sizzle_load_config()'. Variable modification from Guile
	not yet possible (svz_config.max_sockets).

	* guile.c (guile_init): Added definition of Guile variables
	which should be read out afterwards. How can we do this ?

	* cfgfile.c: Dropped sizzle part within this file.

	* Makefile.am (serveez_SOURCES): Dropped `sizzle.[ch]'.

2001-04-18  Stefan Jahn  <stefan@lkcc.org>

	* guile.c (define_port): Default for ICMP_TYPE is ICMP_SERVEEZ.
	Using string constants from `portcfg.h'.
	(guile_define_server): Basic server instantiating implemented.
	Try dynamically load the server type if there is no such static
	server type.

2001-04-08  Stefan Jahn  <stefan@lkcc.org>

	* option.c (getopt): Reimplemented this function. Now
	understands `optopt', `opterr' and `optind'.
	(handle_options): Moved this piece of code into `option.c'.

2001-04-01  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cache.c (http_cache_read): Using ReadFile()
	instead of read() for we are using CreateFile() in order to open
	a file in Win32 instead of open().

2001-03-04  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cgi.c (http_cgi_get_response): This piece
	of code has been part of the http_get_response() function.
	Moved it beneath the http_post_response() function.
	(http_cgi_exec): Piping stderr of cgi script to its output
	stream in the release target.

2001-02-28  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_get_response): Closing
	receiving end of a CGI pipe which got mistakenly inherited.

2001-01-21  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am (serveez_SOURCES): Added `dynload.c' and
	`dynload.h' files.

	* dynload.c (dyn_load): Start writing dynamic server loading
	capabilities. This function is a draft for loading a server
	definition from a shared library.

	* pipe-socket.c (pipe_listener): Check if the file descriptor
	gained from open() is a pipe descriptor via fstat().

2001-01-16  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am: Added rules for processing Windows resources
	with `windres'. The VC++ compiler can do that as well.

	* serveez.rc: File created. Defined both of the two icons
	for Serveez.

	* windoze.c (windoze_thread): Loading tiny taskbar icon from
	a builtin resource now.

2001-01-13  Stefan Jahn  <stefan@lkcc.org>

	* alist.c (alist_unset): Implemented this function which
	is the opposite of alist_set().

2001-01-08  Stefan Jahn  <stefan@lkcc.org>

	* server-socket.c (server_accept_pipe): Calling here the
	check_request() callback for greedy protocols on pipes.

2001-01-07  Stefan Jahn  <stefan@lkcc.org>

	* tunnel-server/tunnel.c (tnl_disconnect_target): Send
	a disconnection message if the source port is ICMP.

	* icmp-socket.c (icmp_send_control): This routine can send
	control packets without packet load in order to signal
	disconnects or connects on ICMP "connections".
	(icmp_connect): When "connecting" to a host using the ICMP
	protocol we send a special subcode in the header to signal
	a connect (thus we have something like TCP's accept() and
	shutdown() function).

	* server-socket.c (server_accept_socket): Created a workaround
	for so called "greedy" servers. These get their connection as
	soon as it has been accept()ed.

	* tunnel-server/tunnel.c (tnl_disconnect_target): Hopefully
	fixed the problem with disconnecting referring pipe or tcp
	connections.

2001-01-05  Stefan Jahn  <stefan@lkcc.org>

	* icmp-socket.c (icmp_request): Text definition of all known
	ICMP type codes. Printed when received.

2001-01-04  Raimund Jacob  <raimi@lkcc.org>

	* socket.c (sock_write): Prevent serveez from sending empty
	buffers.
	(default_write): When setting `SOCK_FLAG_FINAL_WRITE' before
	the final `sock_printf' or `sock_write' then the connection
	gets closed as soon the send buffer queue is empty.

	* fakeident-server/Makefile.am: New server.

2001-01-02  Raimund Jacob  <raimi@lkcc.org>

	* server.h (portcfg): Renamed 'local-ip' and friends to some
	generic name.

2000-12-31  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_config_prototype): `ident'
	is a new configuration item which enables the identfication
	lookup for each http request.
	(http_connect_socket): Here we invoke the identd request.
	(http_config): The default log format is CLF now.

	* http-server/http-core.c (http_identification): Added this
	routine for identd result handling.
	(http_clf_date): This routine produces a CLF date.

2000-12-30  Stefan Jahn  <stefan@lkcc.org>

	* irc-server/irc-proto.c (irc_init): Reviewed A-line and M-line
	configuration item handling. Eliminated clashes with other
	parameters.

2000-12-29  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/nut-transfer.c (nut_send_push): The keys in
	the push request hash table now correspond when received/sent.

	* nut-server/nut-transfer.c (nut_check_given): Fixed HTTP
	request header format.

	* nut-server/nut-transfer.c (nut_disconnect_transfer): Send
	a push request here if the connection process itself has
	been aborted (as is when connecting firewalls or gateways).

2000-12-18  Stefan Jahn  <stefan@lkcc.org>

	* irc-core/irc-core.c (irc_string_regex): Fixed spelling
	errors in documentation.

	* coserver/coserver.c: Made a lot of changes concerning the
	readability of the coserver code. Cleaned up the namespace.

2000-12-15  Stefan Jahn  <stefan@lkcc.org>

	* sntp-server/Makefile.am: Created this file for building
	the SNTP server library.

	* server.c (all_server_definitions): Added the SNTP server
	here and removed the Q3KEY license server.

	* sntp-server/sntp-proto.c (sntp_handle_request): Added
	a simple network time protocol packet processor which creates
	time stamps according to RFC 868.

2000-12-12  Stefan Jahn  <stefan@lkcc.org>

	* server-socket.c (server_create): Print some error message if
	IP_HDRINCL is not defined.

2000-12-09  Stefan Jahn  <stefan@lkcc.org>

	* pipe-socket.c (pipe_write): Using Overlapped I/O when writing
	data to a pipe.
	(pipe_connect): Initializing Overlapped structures here for
	client pipes.

	* util.h: Defined O_BINARY if not defined here.

	* coserver/coserver.c (coserver_destroy): When kill()ing
	coserver processes we are cleaning them up via waitpid().

	* serveez.c (main): Starting network API under Win32 before
	parsing the configuration file and server instantiating.

	* server.c (set_port): Using WSAStringToAddress() in the Win32
	port which is a full replacement of libiberty's inet_aton().

	* pipe-socket.c (pipe_listener): If mkfifo() is not available
	we are using mknod() in order to create a named pipe.

2000-12-02  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-core.c: Added http_add_header, http_set_header,
	http_send_header and http_reset_header for building a valid
	http header. These are currently used within the GET response
	routines.

2000-12-01  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_get_response): Checking for
	content range request. Not yet fulfilled...

	* http-server/http-core.c (http_get_range): New routine which
	parses a content range header line and saves its results in
	a given http socket structure.

2000-11-30  Stefan Jahn  <stefan@lkcc.org>

	* pipe-socket.c (pipe_listener): Added a routine for creating
	a pipe listener structure. Now we are even able to forward pipe
	connections.

	* tunnel-server/tunnel.c (tnl_disconnect_source): Separated
	source and target disconnection routine.
	Dismissed the usage of the referrer entry of the socket
	structure for enabling the pipe forwarder.

2000-11-28  Stefan Jahn  <stefan@lkcc.org>

	* tunnel-server/tunnel.c (tnl_create_socket): Added routines and
	definitions for the support of forwarding named pipes.

	* pipe-socket.c (pipe_connect): This routine connects to a pair
	of named pipes. It is the counterpart of the server_accept_pipe()
	function.

2000-11-26  Stefan Jahn  <stefan@lkcc.org>

	* server.h (PROTO_RAW): Added some definitions for latter support
	of raw sockets which will be able to sent the ip header in front
	of each packet. This is an extension to icmp sockets.

	* server-socket.c: Including <ws2tcpip.h> for the IP_HDRINCL
	on Win32 systems.
	(server_create): When PROTO_RAW is set an additional ip header
	will be sent through raw sockets.

	* raw-socket.c (raw_check_ip_header): Added the raw-socket.*
	files to the CVS. There we find additional routines for raw
	sockets.

2000-11-25  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cgi.c (http_cgi_exec): Enhanced the
	behaviour of fork(). Under heavy load the http server retries
	forking cgi scripts.
	(http_cgi_disconnect): Cleanup zombie processes with waitpid()
	if possible.

2000-11-23  Stefan Jahn  <stefan@lkcc.org>

	* icmp-socket.c (icmp_startup): This routine starts the ip
	services on Win32 systems. It loads the ICMP.DLL, obtains
	the appropriate functions and retrieves a single handle from
	this DLL.

2000-11-11  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-core.c (http_start_netapi): Here we load
	the netapi32.dll to get some functions for handling user
	account information on Windows NT systems. This is used within
	the http_userdir() routine for obtaining a user's home
	directory. Not yet tested...

	* windoze.c (windoze_asc2uni): Added two routines which convert
	unicode to ascii strings and the other way around.

	* tunnel-server/tunnel.c (tnl_disconnect): Fixed some of the
	segmentation fault candidates due to invalid socket referers.

2000-11-09  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_init): The user directory
	path is configurable via "userdir" in each http instance.

	* http-server/http-core.c (http_userdir): This routine checks
	if a given request URI is a "~user" request and tries to
	replace it with this user's home directory and appends a
	configurable path.
	(http_log): '%c' gets replaced by the response code and '%l'
	by the content length in the access logfile.

2000-11-08  Stefan Jahn  <stefan@lkcc.org>

	* alist.c (alist_insert): Fixed another bug causing an invalid
	array list length (off by one).

	* tunnel-server/tunnel.c (tnl_disconnect): When a TCP connection
	was invoked by an ICMP connection we send a disconnection subcode
	via the referring ICMP socket.

	* icmp-socket.c (icmp_check_packet): Using the subcode within
	the ICMP header in order to determine new and disconnected
	connections.
	(icmp_read_socket): If the icmp_check_packet() returns the
	disconnection subcode this function returns an error and causes
	this sockets shutdown.

	* alist.c (alist_delete): Fixed a bug in this function which
	caused invalid array list lengths and array chunk sizes.

2000-11-03  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-core.c (http_localhost): The local server
	name is resolved at server startup if necessary.
	(http_remotehost): When a new client connects to the http
	server its remote address gets resolved and put to the access
	logfile and cgi environment.

2000-11-02  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.h: The following configuration items
	have been added to the HTTP configuration:
	`admin'     - the administrators email address
	`host'      - the servers host name
	`logfile'   - location of access logfile
	`logformat' - format string for the access logfile lines

	* http-server/http-core.c (http_log): Added simple logging
	system. Each http request gets a line within a configurable
	access logfile.

2000-11-01  Stefan Jahn  <stefan@lkcc.org>

	* icmp-socket.c (icmp_ip_checksum): Fixed ip checksum
	generation algorithm due to RFC 1071 (Computing the Internet
	Checksum). Checking the IP header checksum still fails if
	the packet was fragmented and reassembled by the kernel.

	* alist.c (alist_delete_range): The implementation of this
	function is based on alist_delete with some additional
	previous checks. Now the array list functions are completed.

	* nut-server/nut-core.c (nut_parse_addr): If there is no
	port given in the form `ip:port' it defaults to NUT_PORT
	which is 6346.

2000-10-31  Stefan Jahn  <stefan@lkcc.org>

	* icmp-socket.c (icmp_put_ip_header): Put a given IP header
	structure into plain data. Could be used with IP_HDRINCL.

	* nut-server/nut-core.c (nut_canonize_file): This routine
	converts any filename to something printable.

2000-10-30  Stefan Jahn  <stefan@lkcc.org>

	* icmp-socket.c (icmp_connect): Each `connected' ICMP
	sockets gets a unique remote port for identifying data
	replies.

	* icmp-socket.h (icmp_header_t): This structure contains
	now an additional remote port information for filtering
	dedicated ICMP connections.

2000-10-28  Stefan Jahn  <stefan@lkcc.org>

	* tunnel-server/tunnel.c (tnl_init): Assigning either UDP or
	ICMP handle request routine to the server instance.

	* udp-socket.c (udp_write): Splitting large UDP messages if
	necessary.

2000-10-26  Stefan Jahn  <stefan@lkcc.org>

	* tunnel-server/tunnel.c: The port forwarder for UDP and TCP
	is fully implemented but must be tested yet.

	* tunnel-server/tunnel.c (tnl_handle_request_udp):
	Implemented port forwarder for TCP->UDP. Quake3 authorization
	via TCP possible.

	* socket.h (SOCK_FLAG_FIXED): This flag indicates the
	udp read- and write-callbacks to handle dedicated udp
	connections.

	* udp-socket.c (udp_write): Added this routine for sending
	whole buffers via UDP connection.

2000-10-23  Stefan Jahn  <stefan@lkcc.org>

	* alist.c (alist_delete): Optimized deletion and insertion
	of fill bits.

	* alist.h (struct array_chunk): Made the array list double
	chained. Thus accesses to specific elements can be optimized
	a bit.

2000-10-22  Stefan Jahn  <stefan@lkcc.org>

	* alist.c: Most of the array list functions have been
	implemented and tested. This implementation can be used for
	linear lists of values and prevents the processor from copying
	large arrays in memory.

2000-10-16  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/nut-transfer.c (nut_send_push): Checking
	if a push request has already been sent. Fixed memory leak.

	* alist.c: Defined all array list functions which need to
	be implemented sometime.

2000-10-13  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_stat): Stating
	server uptime.

	* socket.c (sock_error_info): This function prints a valid
	error message if a socket has gone into the exception set
	of poll() or select().

2000-10-12  Stefan Jahn  <stefan@lkcc.org>

	* tunnel-server/tunnel.c (tnl_server_definition): Started to
	setup a port forward server.
	(tnl_check_request_tcp): TCP ports can be forwarded now. The
	routine simply copies data from one connection to another.

2000-10-06  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-cache.c (http_cache_consistency): This
	function pedanticly checks the consistency of the http
	cache entries.

2000-10-05  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/nut-request.c: Moved all gnutella request handlers
	to this file. `gnutella.c' was going too big.

	* nut-server/nut-transfer.c (nut_check_given): This request
	checker evaluates the "GIV " line and assigns the appropriate
	download callbacks if possible. Everything untested, yet.

	* nut-server/gnutella.c (nut_detect_proto): Added detection
	of push request replies (GIV).

	* nut-server/nut-transfer.c (nut_send_push): This routine sends
	a push request to a given transfer connection. It is used when
	the download connection could not be established.

	* nut-server/nut-transfer.c (nut_init_transfer): Saving
	the push request data. This could be used if the connection
	failed.

	* http-server/http-proto.c (http_cgi_died): Additional check
	for cgi's been died via `waitpid'.

	* icmp-socket.c (icmp_printf): This function can be used to
	send a formatted string via icmp connection. Header creation
	inclusive.

	* http-server/http-cgi.c (http_cgi_read): Prevent receiving
	cgi pipes from shutting down the http connection if there
	is currently no data to receive (MinGW32 port).

	* server-loop.c (server_check_sockets_MinGW): Put read
	callback for pipes in front of any selection for writing.
	This is why pipes cannot be select()ed, but are non-blocking
	anyway (reading only).

	* nut-server/nut-core.c (nut_parse_addr): Prevent serveez from
	segfaulting if a given host string is empty.

2000-10-01  Stefan Jahn  <stefan@lkcc.org>

	* util.c: Modifications for compiling on AIX without unwanted
	warnings.

	* nut-server/gnutella.c (INADDR_NONE): Define this value if
	it is not within <netinet/in.h> (Solaris).

	* icmp-socket.c (icmp_read_socket): Started to implement
	a reader for icmp sockets. Not yet working...

2000-09-27  Stefan Jahn  <stefan@lkcc.org>

	* server.c (set_port): Prepared everything to support ICMP
	sockets in the port configuration.

	* http-server/http-cgi.c (http_cgi_exec): Find out the
	system's executable association. It is not used by default
	but could be put into the appropriate configuration hash
	"cgi-application".

	* server.c (hashtable_p): Added some #define's for backward
	compatibility with older versions of the sizzle core library.

	* http-server/http-cgi.c (http_cgi_exec): Fixed cgi execution
	bug previously described in BUGS. Even large cgi output can
	be passed on Win32 now.
	(http_cgi_exec): Respond with "Forbidden" if there is no
	cgi application association with the requested file extension.

	* http-server/http-proto.c (http_config_prototype): Added
	support for configurable cgi application associations.

2000-09-26  Stefan Jahn  <stefan@lkcc.org>

	* windoze.c: Moved some functions to this file. That is
	because there is now a lot of them in different source files.
	Here we want to place all kind of porting stuff for Win32.
	(windoze_set_taskbar): When the application gets invoked as
	daemon under Win32 it is put into the taskbar.

2000-09-24  Stefan Jahn  <stefan@lkcc.org>

	* serveez.c (main): Added new command line option `--daemon'
	which tells the program to fork() into background and close
	stdin/stdout/stderr.

	* irc-server/irc-event-5.c (irc_who_callback): Output of
	/WHO hash been fixed. Both the `irc_regex_channel' and
	`irc_regex_nick' were bogus.

	* irc-server/irc-event-1.c (irc_nick_callback): Fixed client
	hash inconsistency.

	* irc-server/irc-proto.c (irc_init): Both the client and
	channel hash are case insensitive now.

2000-09-22  Stefan Jahn  <stefan@lkcc.org>

	* serveez.c (main): Fixed arguments for getopt() and
	getopt_long().

	* http-server/http-cgi.c (http_cgi_read): Using PeekNamedPipe
	to check if there is data within the receiving cgi pipe and
	read via ReadFile as much bytes as stated.

2000-09-19  Stefan Jahn  <stefan@lkcc.org>

	* server-loop.c (server_check_sockets_MinGW): Now we have
	three different socket loops. poll(), select() and one
	for the native MinGW32 port.

	* pipe-socket.c (pipe_valid): Checking if a given socket
	structure is valid. Both of these routines are now
	extensively used.
	(pipe_disconnect): Because we have now a new code branch
	for the disconnection routine we use this function to
	disconnect pipes.

	* socket.c (sock_valid): Checking if a given socket structure
	is still valid.

	* server-core.c (sock_shutdown): Differentiating between
	pipe and socket disconnection routines.

	* nut-server/gnutella.c (nut_info_client): Displaying current
	up- and download rate. Fixed Division by zero bug.

2000-09-17  Stefan Jahn  <stefan@lkcc.org>

	* util.c (util_openfiles): Because Win9x and ME do have
	their maximum open connections (socket) system limit
	within the registry we try redefining them.

	* alloc.c (heap_add): If you defined `DEBUG_MEMORY_LEAKS'
	you will additionally get the caller address of unreleased
	heap blocks.

	* mkpassword.c (main): Made simple password generation
	program.

	* server-socket.c (server_accept_pipe): Setting unlimited
	umask permissions to allow any users to connect to named
	pipes.

	* nut-server/gnutella.c (nut_detect_connect): This routine
	detects the gnutella protocol for self connected sockets.
	(nut_config_prototype): The configuration item `net-url'
	is for the gnutella host list.

2000-09-14  Stefan Jahn  <stefan@lkcc.org>

	* server-socket.c (server_accept_pipe): Extra check if
	mkfifo() really produced a named pipe.

	* nut-server/gnutella.c (nut_query): Limiting the amount of
	search reply records with the parameter `search-limit'.

	* nut-server/nut-hostlist.c (nut_hosts_check): Moved
	all functions for the html host list to this file.

	* ctrl-server/control-proto.c (ctrl_stat): When giving a
	certain server's name we stat this server instance only.
	(ctrl_stat_coservers): Stating coserver instances here.
	The command `stat coserver' will show information on coserver
	instances only.

2000-09-12  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_stat_id): Indicating
	additional priority flag.

	* awcs-server/awcs-proto.c (awcs_connect_socket): Marked
	master server connection with priority flag.

	* server-core.c (rechain_socket_list): Added a new socket
	flag `SOCK_FLAG_PRIORITY'. Sockets marked with this flag
	will be enqueued right after listeners.

	* nut-server/gnutella.c (nut_hosts_check): Host list shows
	the age of valid gnutella clients.
	(nut_idle_searching): The `search property' is now a string
	array. Each item will be searched for.

	* awcs-server/awcs-proto.c (awcs_process_multicast): Modified
	hash key creation and comparison. Now the server checks the
	existence of aWCS clients everywhere.

	* http-server/http-cgi.c (http_check_cgi): Fixed realloc ()
	call. The result was omitted. Thus it was invalid afterwards.

	* pipe-socket.c (pipe_disconnected): All the routine was
	#undef'ed without ENABLE_DEBUG. Fixed.

	* socket.c (sock_disconnect): Pipe clients' descriptors are
	disconnected but not closed in Win32.

	* server-socket.c (server_accept_pipe): Tried to fix the pipe
	client connection detection.

2000-09-11  Stefan Jahn  <s.jahn@q-bus.de>

	* coserver/coserver.c (coserver_send_request): Fixed memory
	leak in the coserver hash when one of these died.

2000-09-11  Raimund Jacob  <raimi@lkcc.org>

	* nut-server/gnutella.c (nut_connect_socket): `max-connections'
	describes now how many overall connections we have (incoming
	and outgoing).

	* server-core.c (rechain_socket_list): Listeners are kept at
	the beginning of the socket chain. Hopefully fixes problem
	with very fast connects (backlog too small).

2000-09-10  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_push_request): When receiving
	a push request for ourselves we connect to the given host and
	send the initial `GIV' line.
	(nut_config_prototype): With the configuration item
	`max-uploads' you define the maximum number of concurrent
	file uploads.

	* nut-server/nut-transfer.c (nut_read_database_r): The share
	directory will be recursed now.
	(nut_file_write): The network transfer rate is throttled down
	to a configurable value.

	* nut-server/nut-core.c (nut_parse_property): Here we parse
	a given gnutella (HTTP) header for certain properties case
	insensitively.

	* ctrl-server/control-proto.c (ctrl_stat): This function
	show additionally the current heap allocator values.

2000-09-09  Stefan Jahn  <stefan@lkcc.org>

	* hash.c (hash_analyse): Changed name conventions. A
	`node' is now a `bucket'.

	* awcs-server/awcs-proto.h (AWCS_ID_SIZE): The aWCS servers
	id length and format string is variable by #define's.

	* http-server/http-proto.c (http_info_client): Fixed the
	usage of the http property fields in this callback. These
	can be empty sometimes.

	* nut-server/nut-core.c: When including <sys/socket.h>
	we also have to include <sys/types.h> previously.

2000-09-08  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_query): Fixed byte order of
	the port property of the push request and header.

	* nut-server/gnutella.c (nut_query): Theoretically the
	gnutella spider is able to respond to search queries within
	its own database. Cannot send files, yet.

	* nut-server/nut-transfer.c (nut_read_database): This function
	will re-read the share directory and create a new database.

	* cfgfile.c (load_config): Added `have_gnutella' variable to
	sizzle context.

2000-09-05  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_server_timer): Try to connect
	to as many gnutella hosts as necessary.

	* nut-server/nut-route.c (nut_canonize_query): Unpatient
	queries will be routed after a certain time only.

	* nut-server/gnutella.h (nut_client_t): Included statistics
	about each connections nodes, number and size of files.

2000-09-04  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_disconnect): Every
	connections `files' and `size' property will be subtracted
	from the overall values.

	* nut-server/nut-transfer.c (nut_disconnect_transfer): If
	the downloaded file is broken we remove it and could
	therefore try it again a bit later.

	* nut-server/nut-core.c (nut_print_guid): This routine
	delivers a text representation of a GUID.

	* nut-server/gnutella.c (nut_push_request): Routing push
	request correctly. Was: broadcast. Is: Sent to where the
	original query reply came from.
	(nut_reply): Saving replies for later push request routing.

2000-09-03  Stefan Jahn  <stefan@lkcc.org>

	* util.c (util_inet_ntoa): Using old function instead
	of `inet_ntoa' to get an ip address text representation.

	* interface.c (list_local_interfaces): The `inet_ntoa'
	network library functions seems to be broken on some systems.
	Thus we leave it out.

	* nut-server/gnutella.h: Gave up one byte memory alignment
	for the binary gnutella packets and wrote some functions
	which convert them to appropriate structures.

	* nut-server/Makefile.am (libnut_a_SOURCES): Added the
	file `nut-core.c' and `nut-core.h' to the gnutella source
	tree.

	* nut-server/nut-core.c (nut_get_header): Moved some
	gnutella core functions to this file.

	* nut-server/gnutella.h (__BSWAP_32): Added lots of conversion
	macros for dealing with little endian data in gnutella packets.

	* nut-server/gnutella.c (nut_server_timer): Removing old
	entries from the query hash.

	* nut-server/nut-route.c (nut_canonize_query): This
	function should save the gnutella network from unpatient
	users.

2000-09-02  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_host_catcher): Canonizing ip
	addresses and tcp ports for the host catcher.
	(nut_server_timer): Forget about self sent packets after a
	certain time.

	* util.c (util_tolower): This routine converts a given string
	to lower case.
	(util_time): In this function a given time is converted into
	its text representation without unwanted trailing characters.

	* nut-server/nut-transfer.c (nut_string_regex): Added routine
	to check search patterns against constant filenames.

	* nut-server/nut-route.c (nut_validate_packet): Message
	validation keeps the gnutella network clean and the client
	stable.

	* nut-server/gnutella.c (nut_info_client): Implemented
	gnutella client information callback.

	* nut-server/nut-route.c (nut_route): Moved all routing
	routines to this file.

	* nut-server/Makefile.am (libnut_a_SOURCES): Added
	`nut-route.c' and `nut-route.h' to the gnutella sources.

	* nut-server/gnutella.c (nut_connect_timeout): This routine
	returns an error if the connected socket has not been connected
	within a certain time interval.

2000-08-31  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.h (little2host): Defined some routines
	to convert the little endian values in Gnutella packet. Sigh.

	* nut-server/gnutella.c (nut_host_list): Check if the
	send buffer queue overruns while sending gnutella host
	catcher list.
	(nut_info_server): Gnutella server informations callback
	implemented. It simply states the current configurations
	and some network statistics.

	* alloc.h (__XALLOC_H__): Fixed #define clash with sizzle
	library.

2000-08-30  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_server_timer): Added routine for
	regularly reconnects.
	(nut_connect_host): Use this routine to connect to other
	gnutella hosts.
	(nut_config_prototype): Added new configurations item
	"connections" which is the number of connections you want
	to keep up to the gnutella network.
	(nut_config_prototype): New configuration item "force-ip"
	can be used to force outgoing ping replies carry this as the
	host ip.

	* ctrl-server/control-proto.c (ctrl_stat_id): Fixed the
	double call of `util_inet_ntoa'. It delivers a static string.
	Thus it showed the latter result only.

2000-08-29  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_calc_guid): Using original
	"CoCreateGuid" routine from ole32.dll if available in Win32.
	(nut_connect_socket): Disabling flood protection for
	gnutella clients.

	* nut-server/nut-transfer.c (nut_init_transfer): In the
	MinGW32 port we *NEED* O_BINARY when creating files.

	* nut-server/gnutella.c: Including <direct.h>.

	* nut-server/gnutella.h: record->file and reply->record
	are arrays of unknown size. Thus they get 1 as initial
	size.

	* nut-server/gnutella.c: Redefine mkdir() id necessary.

	* nut-server/nut-transfer.c (nut_init_transfer): Checking
	for certain file extensions.
	(nut_check_transfer): Comparing original file size and
	content length.

	* nut-server/gnutella.c (nut_host_list): Added this routine
	for nice HTML output of the current host catcher list.

2000-08-28  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c (nut_route): Prevent native
	packets from further routing.

	* http-server/http-proto.c (http_get_response): S_ISLNK
	is checked if defined only.

	* util.c: <sys/resource.h> only included if it is not a
	__MINGW32__ compiler.

	* nut-server/gnutella.c (nut_init_transfer): This routine
	will be called when invoking a new gnutella file transfer.

2000-08-27  Stefan Jahn  <stefan@lkcc.org>

	* nut-server/gnutella.c: Sparely documented the gnutella
	routines and data structures.
	(nut_config_prototype): Added `max-ttl' and `ttl' for the
	configuration file associations.
	(nut_route): Made up a separate routine for packet routing.
	(nut_ping_reply): Evaluating init responses.
	(nut_idle_searching): Gnutella net search queries for each
	connection is done separately.

2000-08-26  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am (SUBDIRS): Added the nut-server directory
	with the files gnutella.c, gnutella.h and a new
	Makefile.am file.

	* nut-server/gnutella.c: Basic gnutella spider specified.
	Not yet fully implemented and documented. For now it can
	connect to given servers, make regular search requests,
	accept server connections and route plain queries.

	* hash.c (hash_key_length): Added callback for the actual
	hash key length. Useful for non-string keys.

2000-08-25  Stefan Jahn  <stefan@lkcc.org>

	* server-core.c (rechain_socket_list): This routine cycles
	the current socket list. It prevents the end of this list to
	starve processing.

2000-08-20  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_connect_socket):
	Resizing send and receive buffer. Was a problem for
	the long list or `stat con'.

	* socket.c: `socket_version' is the version counter for
	socket structures. Thus we can validate socket structures
	if these have been reinitialized.

	* coserver/coserver.c (coserver_handle_request): The
	callback for coserver requests gets three arguments.
	First the actual result and then two optional arguments.

	* coserver/coserver.h: The coserver callbacks get one more
	argument. These are stored in the callback hash as an array.

	* socket.h (struct socket): Added `version', renamed
	`socket_id' to `id' and removed `ref'.

2000-08-19  Stefan Jahn  <stefan@lkcc.org>

	* util.c (util_openfiles): Display the current and maximum
	open file limit via getrlimit() and try setting it via
	setrlimit() if necessary and possible.

2000-08-18  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-dirlist.c (http_dirlist): Added ability
	to sort the directory listing by scandir() and alphasort().

	* q3key-server/q3key-proto.c (q3key_handle_request): Logfile
	for quake 3 keys implemented.
	(q3key_config_prototype): `logfile' is now configurable via
	configuration file.

2000-08-16  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-core.c (http_error_response): Added
	some routine which shows server and client errors as nice
	HTML document.

	* http-server/http-cgi.c (http_cgi_disconnect): Introduced
	this function as separate (extended) callback for http
	connections.

2000-08-15  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_tcp_cork): Setting and
	unsetting this socket option when using sendfile() to prevent
	the system to send partial tcp frames.

	* server-loop.c (check_sockets): Put this function into a
	separate file for later extensions by poll().
	(check_sockets_poll): Added this function using poll() instead
	of select(). Thus we beat the (g)libc's builtin file
	descriptor limit of select().

2000-07-31  Stefan Jahn  <stefan@lkcc.org>

	* udp-socket.c (udp_connect): This routine creates a new socket
	structure with a udp connection to some remote server.

	* q3key-server/q3key-proto.c (q3key_server_definition): Partly
	implemented the first udp server.

	* coserver/dns.c (handle_dns_lookup): `memcpy' the delivered
	inet address to the address field.

	* udp-socket.c (udp_check_request): The default `check_request'
	for udp servers calls all the `handle_request' callbacks of
	each server.
	(udp_printf): This function stores whole udp packets into the
	send_buffer of the server socket structure.

	* server-socket.c (server_create): Do listen only on TCP
	sockets, not on UDP sockets.

	* socket.h (struct socket): Tried to make all ip address
	representations `unsigned long'. Thus we might be able to
	switch to IPv6 somewhen easily.
	(struct socket): Finally determined that ip addresses and ports
	must be in network byte order everywhere.

	* server.h (server_t): Added `handle_request' callback to
	both the server definition and the server instance structures.
	Thus we can handle udp servers.

	* http-server/http-proto.c (http_info_server): Implemented
	the info callback for the http server. This is currently
	used to show the configuration representation. Dropped
	initial messages when instantiating.

	* ctrl-server/control-proto.c (ctrl_stat_id): Fixed
	differentiating between Co-Servers and unidentified pipe
	connections.

	* http-server/http-core.c (http_read_types): The content type
	hash is now extendible by the configuration file.

	* server.c (set_hash): Storing hash values of a newly created
	hash as normal xmalloc()ed. Thus you MUST xfree() both the
	values and the hash itself.
	(set_hash): Handle default hash value `NULL'.

	* foo-server/foo-proto.c (foo_info_server): Server info
	callback implemented. This shows the server configuration.
	(foo_finalize): Freeing hash values if necessary.

	* server.c (all_server_definitions): Placed
	"#if ENABLE_xxx_PROTO" around server definitions.
	(server_start): Using portcfg_equal to compare port
	configurations when binding server ports.

	* util.h: Included <assert.h> where necessary.

2000-07-28  Stefan Jahn  <stefan@lkcc.org>

	* socket.c (sock_disconnect): Added solid behaviour if
	a pipe server disconnects with having lingering children.

	* ctrl-server/control-proto.c (ctrl_stat_con): Co-Server
	identified by SOCK_FLAG_PIPE if there is no server for
	socket structure, else we simply state "None".

	* awcs-server/awcs-proto.c (awcs_connect_socket): Assign
	awcs_kicked_socket callback only to clients.

	* util.c (util_itoa): Optimized this function.

	* http-server/http-proto.c (http_get_response): Do not
	send irregular files like devices and pipes.

	* http-server/http-cache.c (http_cache_read): Checking for
	bogus files whose file size could not been read. Thus
	preventing a memory leak.

	* http-server/http-cache.c (http_cache_disconnect): First
	check if there is a cache entry.

	* server.c (server_instantiate): Copy example configuration
	definition to server instance config.

2000-07-26  Stefan Jahn  <stefan@lkcc.org>

	* udp-socket.c (udp_read_socket): Default reader for
	udp sockets.
	(udp_write_socket): Default writer for udp sockets.

	* util.c (util_hexdump): This hexdump function dumps any
	kind of memory to a given file stream. It replaces the
	for dump_request function.

2000-07-25  Stefan Jahn  <stefan@lkcc.org>

	* alloc.c (xheap): Made up some routines that save all
	xmalloc()ed pointers in a hash structure. Thus we can
	debug memory leaks except within the hash implementation.
	This is for development purposes only and can be switched
	by the definition of DEBUG_MEMORY_LEAKS.

	* http-server/http-cache.c (http_check_cache): Figured
	out the main reason for memory leaks within the http
	cache structures. This could happen because of not yet
	fully read cache entries which got simply overwritten
	and therefore lost.

	* http-server/http-core.c: Put some of the basic http
	function into this file to decrease the file sizes of
	the http server.

	* http-server/http-proto.c (http_info_client): Made up
	the http client info callback. Here we show all the
	information referring to a http client connection within
	the control protocol.

	* irc-server/irc-proto.c (irc_delete_client): Fixed irc
	client hash memory leak.

	* http-server/http-cache.c (http_free_cache): Fixed http
	cache memory leak.

	* http-server/http-dirlist.c (http_create_uri): Here we
	create URIs as converted in the below routine. When having
	special characters within file or directory names we have
	to convert them to %XX sequences.

	* http-server/http-proto.c (http_process_uri): Added URI
	convert routine to convert URIs with %XX within file
	requests.

	* server.c (set_port): Use either inet_aton() or inet_addr()
	for forming a valid Internet address.

2000-07-21  Stefan Jahn  <stefan@lkcc.org>

	* socket.c (default_flood_protect): This function should be
	called whenever you want to use flood protection within
	your read_socket callback. It is built in the default readers.

	* server.c (server_find): Find a server instance by a given
	server configuration structure. This routine is used by the
	control protocol to determine a client connections server.
	(server_run_timer): This routine is called by
	handle_periodic_tasks() in `server-core.c' for each server
	instance.

	* coserver/coserver.c (coserver_delete): Co-Server
	instantiating is now possible via the `int_coserver'
	array.

	* ctrl-server/control-proto.c (ctrl_stat_id): Made the
	client/server info available via new callbacks. Showing
	server instances on listening ports.
	(ctrl_stat_con): Dropped socket descriptor and added the
	server instance name if available for clients. Displaying
	"Listener" and "Co-Server" if so.
	(ctrl_stat_all): Here we show all the server and coserver
	instances and the information about them using the
	`server_info' callback and the instance arrays.
	(ctrl_info_client): First implemented `info_client' callback
	within serveez. Dummy implementation.
	(ctrl_info_server): Displaying the tcp port as `info_server'
	information, printed when listing the server instances.

	* server.h (server_t): Added `info_client', `info_server' and
	`timer' callback.

	* irc-server/irc-proto.h (struct irc_channel): All the
	IRC structures have now dynamic sizes.

	* irc-server/irc-proto.h (struct irc_client): This
	structure is now fully dynamic. Thus we save a lot of
	memory.

	* irc-server/irc-event-1.c (irc_oper_callback): Implemented
	/OPER command.

2000-07-19  Stefan Jahn  <stefan@lkcc.org>

	* irc-server/irc-event-3.c (irc_stats_callback): Added all
	the statistics referring ? lines.
	(irc_info_callback): Added the /INFO command replies.

	* irc-server/irc-config.c (irc_parse_config_lines): Added this
	file. This routine is taking all the X-lines and converts them
	into useful structures.
	(irc_client_valid): Started to implement something like a
	user authorization.

	* irc-server/irc-event-3.c (irc_stats_callback): One more
	/STATS command ('m') has now been implemented.

	* irc-server/irc-event-7.c (irc_users_callback): /USERS
	command fully implemented.

	* util.h (S_ISDIR): Definition of those S_-macros if
	necessary in the Win32 port.

	* http-server/http-cache.c: Everywhere we are using file
	I/O operations we #include <io.h> when building via
	__MINGW32__.

	* util.c (util_strcasecmp): Added both `util_strcasecmp' and
	`util_strncasecmp'. We are using either the libc version,
	Win32's str(n)icmp() implementation or a fallback.

2000-07-15  Stefan Jahn  <stefan@lkcc.org>

	* option.h: Declaring `optarg' if necessary.

	* util.h (getcwd): Using native GetCurrentDirectory in Win32.
	(chdir): Using native SetCurrentDirectory in Win32.
	Made all declarations with variable argument list (...)
	available for non-std-c compiler.

	* http-server/http-dirlist.c (http_dirlist): Replaced
	opendir, readdir and closedir by native functions
	FindFirstFile, FindNextFile and FindClose in Win32.

	* coserver/coserver.c (coserver_send_request): If you have
	more than one coserver of the same type instantiated the
	requests for these instance will be apportioned.

2000-07-09  Stefan Jahn  <stefan@lkcc.org>

	* connect.c (default_connect): Moved this function to the
	source file `connect.c'.

	* http-server/http-cache.c (http_cache_create_entry): The
	http file cache is now a hash using the stored files's names
	as key and the http_cache_entry_t structure as values.
	Maybe thus we speed up the cache lookup a bit.

2000-07-07  Stefan Jahn  <stefan@lkcc.org>

	* socket.c (default_connect): This function determines if
	a connection process is still in progress and sets up the
	socket structure if this has been completed.

	* connect.c (sock_connect): Made connection routine to other
	server non-blocking.

	* serveez.c (usage): Dropped -p (--port) option.

	* serveez.h (struct serveez_config): Dropped useless field
	"port". This is now defined by the integrated servers.

	* irc-server/irc-event.h: Went through all
	the IRC server and cleared up naming conventions.

	* socket.h (struct socket): Reference counter introduced.

	* server-core.c (shutdown_socket): Reference counter postpones
	socket shutdown. This is useful if a coserver is still having
	a socket structure in its callback hash.

2000-07-04  Stefan Jahn  <stefan@lkcc.org>

	* server.c (server_bind): Moved some of the server_* functions
	from "server-socket.c" to "server.c".

2000-07-04  Raimund Jacob  <raimi@lkcc.org>

	* interface.c (list_local_interfaces): made work partly under AIX.
	interfaces still get listed multiple times but they get listed.

	(list_local_interfaces): fixed multiple device listings. removed
	that ugly sa_data[] method of converting a sockaddr_in to the
	dotted decimal representation. the cast is even uglier :)

2000-07-01  Stefan Jahn  <stefan@lkcc.org>

	* coserver/coserver.c (coserver_init): This routine is
	instantiating all coservers now. Thus you do not need to create
	the coservers yourself.

	* coserver/coserver.h (struct int_coserver_type): Added two more
	fields to this structure. These are the amount of coserver
	instances you want to create and an optional initializer
	routine which will be invoked on coserver startup.

2000-06-30  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-dirlist.c (http_dirlist): BUGFIX:
	localtime() could deliver a NULL pointer. That's why we need
	to check for this. Occurred: stat()ing ".." when this refers
	to the root directory in Win95.
	(http_dirlist): BUGFIX: Off by one failure when resizing
	dirlist buffer (dirdata).

	* interface.c (list_local_interfaces): BUGFIX: Printing
	"NET_LIST_STRING" in front of network interface list when
	using the IP-Helper-API method.

2000-06-28  Stefan Jahn  <stefan@lkcc.org>

	* Makefile.am (EXTRA_DIST): Added the appropriate headers
	for the network interface listing in the "include" directory.

	* interface.c (list_local_interfaces): Included the the IP
	Helper API for getting interface information on WinNT4x and
	such.

2000-06-26  Stefan Jahn  <stefan@lkcc.org>

	* pipe-socket.c (pipe_disconnected): Differentiate shutdown
	of named pipe listeners in Win32: "CloseHandle" and Unices:
	"unlink".

2000-06-25  Stefan Jahn  <stefan@lkcc.org>

	* interface.c (list_local_interfaces): Made the list of
	local interface under Win9x available via WsControl.

	* Makefile.am (EXTRA_DIST): Added include headers for the
	undocumented WsControl function in Win32.
	(serveez_SOURCES): Added interface.h and interface.c for
	network interface list.

2000-06-23  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_config_prototype): The amount
	of cache entries can now be configured via "cache-entries"
	within the configuration hash of each http server. When
	defining various values the largest will win. This because
	the http cache is the same for all http servers, so we prevent
	double caching.

	* http-server/http-cache.c (http_alloc_cache): This function
	must be called to use the http cache. This is usually done
	within the global initializer of the http server. Now the
	amount of cache entries could be configurable.

2000-06-22  Raimund Jacob  <raimi@lkcc.org>

	* http-server/http-proto.c (http_send_file): Made it work with
	stefan on the phone. I typed what he said.

2000-06-22  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_server_definition): Ported
	control protocol to new server concept. This has been the last
	missing server so far... not yet working all right.

	* http-server/http-proto.c (http_get_response): Do not send
	"Content-Length:" header for zero sized files. Keep cache
	untouched for those kind of files.

	* socket.c (sock_disconnect): Now able to disconnect pipes also.
	This was not available under Win32 yet.

	* server-core.c (sock_enqueue): Both _enqueue and _dequeue are
	available under Win32 also. So we could use named pipes in Win32
	also.

	* server-socket.c (server_accept_pipe): CreateNamedPipe is now
	checked for invalid return values. Listener will be unqueued if
	it is not implemented (on Win95).

	* http-server/http-proto.h (struct http_socket): Added fileoffset
	to this structure for sendfile() parameter.

2000-06-21  Raimund Jacob  <raimi@lkcc.org>

	* Makefile.am ($(SIZZLERULE)): When building our own sizzle from
	source distribution the user doesn't need to make anymore. added
	a makefile target and configure.in stuff to do so.

2000-06-20  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_send_file): Added support
	for sendfile() for sending large http file requests.

	* server.c (set_port): Using inet_addr() instead of
	inet_aton in Win32, because it is not implemented there.

	* server-socket.c (server_create): Named pipes in Win32 are
	located in "\\.\pipe\". So we put the leading path to the
	actual pipe's name.
	(server_accept_pipe): Here we give ConnectNamedPipe a try
	to listen for connected clients at this pipe.

	* pipe-socket.c (pipe_create): Now we can also create pipe
	sockets in Win32. Non-blocking I/O will be realized via
	overlapped I/O.

2000-06-19  Stefan Jahn  <stefan@lkcc.org>

	* pipe-socket.c (pipe_write): Using overlapped I/O on Win32
	systems for pipe reading and writing.

	* coserver/coserver.c (start_internal_coserver): Do not set
	process priority class, but thread priority only.

	* socket.c (default_check_request_byte): Added a array and one
	byte packet delimiter check_request callback for optimizing
	speed.

	* server.c (set_port): When creating a inet address via
	inet_ntoa the whole structure seems to be destroyed except
	the address. That is why we put in all other information
	afterwards (port and address family).

	* server-socket.c (server_create): Made network server sockets
	do not route and bind to specific ip addresses via portcfg.

	* irc-server/irc-proto.c (irc_create_client): The miscellaneous
	field sock->data is now used for a irc client structure. Thus
	every socket knows about its associated irc client.
	Various changes within the irc server. Everything untested...

	* irc-server/irc-proto.h (struct irc_client): Channel and
	client lookup simplified.

2000-06-19  Raimund Jacob  <raimi@lkcc.org>

	* server.c (set_port): it's now possible to bind ip servers to
	specific local interfaces. pipes can be read from cfgfile now, too.
	the bad news is that it doesn't work and I don't know why...

2000-06-18  Stefan Jahn  <stefan@lkcc.org>

	* irc-server/irc-proto.c (irc_server_definition): IRC server
	is now fully instantiatable. But might not be working, yet...

	* irc-server/irc-server.c (irc_connect_server): IRC server
	connections now non-blocking (using DNS coserver).

	* serveez.c (main): Changed server/coserver initialization
	startup, to allow servers instances to use coserver requests
	within their initialization routines.

2000-06-18  Raimund Jacob  <raimi@lkcc.org>

	* http-server/http-dirlist.c (http_dirlist): changed display format
	of listing. looks a bit strange now due to the underlining of links.
	but is lynx-safe and loads faster because there are no tables in it
	anymore.

2000-06-17  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-dirlist.c (http_dirlist): Fixed the "Too many
	open files" bug for *many* http dirlists (missing closedir()).

2000-06-16  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_get_response): POST and GET method
	do work again. Whole http server is now quite ported to new server
	concept and can be instantiated.
	(http_free_socket): Made a cgi script die if the http connection is
	lost by user abort.

	* alloc.c (xmalloc): Made heap counters available on aligned
	machines.

	* socket.c (default_detect_proto): Fixed the detection fill problem.
	Now using just 16 byte maximum detection fill.

2000-06-15  Stefan Jahn  <stefan@lkcc.org>

	* http-server/http-proto.c (http_config): Freed most filed from
	ENABLE_HTTP_PROTO and put all http flags into sock->userflags.

	* socket.h (struct socket): Dropped sock->http, now using
	miscellaneous field `data' for http connections.

	* http-server/http-proto.c (http_server_definition): Started to
	rewrite http server to new concept. Not yet working...

2000-06-14  Stefan Jahn  <stefan@lkcc.org>

	* server-core.c (check_sockets): Depending on some new socket flags
	this routine, which might be the most important within serveez, has
	been fully rewritten. All this has been done to unify pipes, sockets
	and files (all fds).

	* socket.h (struct socket): Added sock->userflags for protocol
	specific flags which cannot be hold within the sock->cfg because
	they are also socket specific.

2000-06-13  Stefan Jahn  <stefan@lkcc.org>

	* awcs-server/awcs-proto.c: The ENABLE_AWCS_PROTO define is now in
	"awcs-server" directory only (except ctrl-server).
	(awcs_finalize): For now we delete newly created named pipes on
	the local file system by hand here (should be done in the
	disconnection routine of pipe servers).

	* server-core.c (check_sockets): Made it possible to listen on
	named pipes via flags and a sock->read_socket callback for
	these (see below).

	* server-socket.c (server_accept_pipe): Generic named pipe listener.
	(server_create): Added creation of pipe servers.

	* socket.c (sock_disconnect): When a pipe client which was created
	by a pipe server, this client resets the pipe server. When this
	client has been disconnected the server can start listening again.
	This is procedure indicated by the SOCK_FLAG_INITED flag of
	the server.

	* socket.h (struct socket): Dropped sflags, is now proto just as it
	comes from the server_t server definitions.
	(struct socket): Added "parent" for listening pipe servers.

	* pipe-socket.c: This file contains all pipe related functions.

	* socket.c (sock_unique_id): This function creates a unique id for
	a socket structure (checked via socket lookup table).

	* util.c (list_local_interfaces): Fixed the signed/unsigned
	comparison (always compare sizes unsigned) and free/close resources
	on return.

2000-06-13  Raimund Jacob  <raimi@lkcc.org>

	* util.c: Added a helper function that can list the local network
	interfaces. It's pretty useless but may help a user or two.
	Furthermore it is tested on Linux and Solaris only and I am not
	sure if all headers included are available on all systems.

	Completed the copyright-string review... hopefully

2000-06-12  Stefan Jahn  <stefan@lkcc.org>

	* socket.c (default_idle_func): Default idle function for not yet
	identified connections (pipes and sockets). After a certain time
	this socket structure gets discarded if not identifying.

	* server-core.c (pipe_disconnected): Some default disconnection
	routine for pipes.

	* coserver/coserver.c (coserver_init): Global initializer for all
	coservers.
	(coserver_finalize): Global finalizer for all coservers.
	(coserver_handle_request): Scanning coserver response ourselves
	without copying and using sscanf().
	(coserver_handle_request): When a callback gets a NULL for the
	second arg this indicates an error for the invoking coserver request.

	* socket.h (struct socket): Dropped 'ident_func' and
	'nslookup_func'.

	* coserver/dns.c (handle_dns_lookup): Dns coserver reviewed and
	adapted to new concept. Writing a new coserver is now extremely
	easy.

	* coserver/ident.c (handle_ident): Ident coserver reviewed and
	adapted to new concept.

	* coserver/reverse-dns.c (handle_nslookup): Reverse dns coserver
	reviewed and adapted to new concept.

	* coserver/coserver.c (coserver_send_request): This function got
	some wrappers for each coserver (coserver_???). You will not need
	to '#ifdef' them. Now you're able to call any function with one
	optional argument after getting any result from a coserver result.
	(coserver_handle_request): Get some callback plus an argument from
	some callback hash and call this when a coserver delivered some
	result.

2000-06-09  Stefan Jahn  <stefan@lkcc.org>

	* socket.c (default_check_packets): This routine is a helper for
	easy packet protocols. It is based on the socket's packet boundary
	and calls handle_request for each packet.

	* server-socket.c (server_create): Finally fixed the SO_REUSEADDR
	flag for server sockets. bind () will never ever return "address
	already in use", sigh.

2000-05-12  Stefan Jahn  <stefan@lkcc.org>

	* ctrl-server/control-proto.c (ctrl_idle): Fixed the NAN-error
	within the cpu/process load display. Do not use floating point
	arithmetics.

2000-05-12  Raimund Jacob  <raimi@lkcc.org>

	* Makefile.am: Program split into several parts: coservers and
	several server modules. ar is our friend.
	Need a good idea making server instances...

2000-05-11  Stefan Jahn  <stefan@lkcc.org>

	* util.c (util_hstrerror): Was: _hstrerror. On IRIX this is a
	libc symbol, thus we will not preempt it anymore.

	* awcs-proto.c (awcs_check_pipe): If serveez is able to open
	a special named pipe it connects the aWCS-Master through two of
	them.

2000-05-05  Stefan Jahn  <stefan@lkcc.org>

	* control-proto.c (get_cpu_state): Showing the serveez's process
	times via times() or clock().

	* control-proto.c (ctrl_kill_id): Killing specific socket ids via
	remote control protocol.
	(ctrl_stat_id): Statistics for given socket ids via control protocol.
	(ctrl_handle_request): The "/" just repeats the last given
	instruction. This might save some typing.

2000-05-01  Stefan Jahn  <stefan@lkcc.org>

	* http-proto.c (http_content): Fixed the problem with javascript
	file content. Unfortunately we did not noticed yet...

	* dns.c (handle_dns_lookup): Implemented the DNS lookup
	coserver.

	* http-proto.c (http_read_types): Read content type definitions
	from a given file (e.g. /etc/mime.types).

	* server.c (server_signal_handler): Displaying signal messages.

	* util.c (get_hstrerror): Some wrapper for h_errno error messages.

	* socket.c (default_check_request): Both the HTTP and IRC protocol
	can be instantiated via different configuration hashes.

	* http-proto.c (http_check_keepalive): Fixed the meaning of the
	"max=%d" value within the "Keep-Alive:" header information.
	(http_asc_date): Using RFC822 compliant timestamps in "Date:" and
	"Last-Modified:" header information fields.

	* http-proto.c (http_get_response): Keep-Alive header not exactly
	matched, but searched within "Connection:".

2000-04-22  Stefan Jahn  <stefan@lkcc.org>

	* option.c (getopt): Put all the getopt[_long]() functions and
	definitions into separate files.

	* util.c (get_version): Detecting Win2k and Win98.

2000-04-20  Stefan Jahn  <stefan@lkcc.org>

	* cfgfile.c (load_config): Integration of sizzle, the configuration
	file language.

	* alloc.c (xfree): The allocated_bytes are now implemented at the
	beginning of each alloc()ed block. So we save the last argument
	in xfree() and xrealloc().

	* serveez.c (main): Set maximum verbosity to LOG_DEBUG, not 3.
	(main): Error message if allocated_bytes left is not zero.

2000-04-12  Stefan Jahn  <stefan@lkcc.org>

	* http-cache.c (http_recent_cache): Hopefully fixed now the weird
	recent counter of the HTTP cache file entries.

	* http-cache.c (http_init_cache): The cache structures are now
	also filename length independent.

	* http-proto.c (http_check_keepalive): The HTTP 'Keep-Alive'
	connections are now limited to a configurable timeout and amount
	of successive requests.

	* http-proto.c (http_get_response): Parsing If-Modified-Since
	timestamp for network traffic savings.
	(http_handle_request): HTTP/0.9 simple GET implemented.

	* control-proto.c (ctrl_kill_cache): Killing all http cache entries
	via control protocol.

2000-04-07  Stefan Jahn  <stefan@lkcc.org>

	* http-proto.c (http_keep_alive): Implemented the HTTP/1.1 feature
	Connection: Keep-Alive. So HTTP/1.1 clients spare time for
	establishing new connections and get delivered even faster.

	* http-cgi.c (http_pre_exec): Dropped the length limitations of
	cgi script file names.

	* http-proto.c: Whenever using strcasecmp() and we have <strings.h>
	it is necessary to include this file.

	* http-cgi.c (http_cgi_exec): Fixed the problem with non-blocking
	cgi pipes -> cgi stdin/stdout MUST be blocking, they cannot handle
	the EAGAIN error.

	* http-proto.c (http_handle_request): No more limitations for
	file lengths and GET method cgi requests.
	(http_handle_request): Fixed the problem with spaces in file
	requests.

2000-04-02  Stefan Jahn  <stefan@lkcc.org>

	* http-proto.c (http_detect_proto): Call check_request here
	because HTTP requests are *very* short. The socket will not
	be selected() anymore. But thus there is no delay anymore,
	sigh.

	* http-cache.c: Set a limit for cache file sizes.

	* irc-server.c (irc_connect_server): Include TimeStamp extension
	for the IRC protocol.

	* serveez.c: Declaring getopt_long ourselves if the headers do
	not.

2000-03-25  Raimund Jacob  <raimi@lkcc.org>

	* http-dirlist.c (http_dirlist): Icons for dirs and files.

2000-03-19  Stefan Jahn  <stefan@lkcc.org>

	* util.c (snprintf): If the system you want to compile the
	serveez software does not implement this function this will
	handle it.

	* util.c (get_version): configure.in defines if the uname()
	function is implemented.

	* irc-proto.c (irc_detect_proto): Started the implementation
	of a real IRC server ...

2000-03-07  Stefan Jahn  <stefan@lkcc.org>

	* http-cache.c (http_check_cache): Implemented a http file cache
	for a maximum number of cache entries. It checks the last modification
	timestamp for the cache strategy.

	* control-proto.c (get_cpu_state): Depending on the host system
	this functions gets called to determine the current cpu load.

	* serveez.c (init_config): Now we have a real serveez
	configuration structure, where every configurable value
	can be stored.

	* control-proto.c (ctrl_detect_proto): Made up something
	like the control protocol implementation.

2000-02-29  Stefan Jahn  <stefan@lkcc.org>

	* http-proto.c (http_get_response): Relocation gets completed
	by the host http property if possible.

	* server.c (check_sockets): connected_sockets is now the
	counter of the real connected sockets.

	* util.h: Fixed the vsnprintf() and snprintf() problem under
	Win32.

2000-02-27  Raimund Jacob  <raimi@lkcc.org>

	* http-proto.c (http_get_response): Directory listing when
	accessing dirs without index.html. Redirects dirs without
	the trailing slash.

2000-02-22  Stefan Jahn  <stefan@lkcc.org>

	* http-cgi.c (insert_env): Made up a kind of wrapper for pasting
	environment strings in Unices and Win32.
	(http_cgi_exec): Give the current work directory parameter to
	CreateProcess.
	(http_cgi_exec): Finally we 'succeeded' in porting all the cgi
	stuff to Windows 95. The only limitation is that there is no
	non-blocking IO with pipes possible. That's why it might occur
	some strange things while executing cgi scripts.
	(http_cgi_exec): Set uid and gid of the cgi script's owner.

	* http-cgi.c (http_cgi_read): Dropped the idea to read or write
	non-blocking into pipes, because Win95 does not implement it.

2000-02-16  Stefan Jahn  <stefan@lkcc.org>

	* http-cgi.c (http_cgi_exec): Implemented the POST method of
	the cgi interface rudimentary.

	* http-proto.c (http_get_response): Detection of a CGI request
	via GET causes the execution of the script if possible.

	* server.c (check_sockets): Hmm.. why didn't we set the
	CLOSE-ON-EXEC-Flag explicitly ?

	* http-proto.c (http_post_response): This routine implements
	basically the post method the CGI gateway interface uses. We
	just wrote some routines which can react on a html form whose
	action method is "post". It forks the cgi script identified by
	a certain url which refers to some other path where all the
	scripts need to reside, gives the http socket to stdout,
	pipes the content of the document into the stdin and sets some
	useful environment variables. Much work still to do. That part was
	Unix, Windows follows soon...

2000-02-06  Raimund Jacob  <raimi@lkcc.org>

	* awcs-proto.c : Scheduled master for shutdown when master write
	error occurred (lead to infinite loop).

2000-02-04  Stefan Jahn  <stefan@lkcc.org>

	* coserver.c (send_coserver_request): Check if sending a
	request was successful, otherwise schedule the sock for
	shutdown.

	* awcs-proto.c (awcs_disconnect_clients): Whenever the master
	has been lost we call this method instead of abort().

	* server.c (sock_enqueue): Made up Raimi's request for better
	uniqueness of textSure IDs. Now we have forthcoming IDs for
	each connected socket.

	* socket.c (default_write): Resource temporarily unavailable
	implemented for both Unix and Win32.

	* coserver.c (check_internal_coservers): Finish when all
	responses have been processed.

	* ident.c (handle_ident): Check if it was a USERID response.

	* ident.c (handle_ident): Read socket as long as there is data
	in it.

	* http-proto.c (http_get_response): Added Last-Modified
	field to the HTTP header using the ancient ANSI C's asctime()
	format.

	* util.h : Introduced some wrapper #define's. These are
	WRITE_SOCKET, READ_SOCKET and CLOSE_SOCKET for the socket
	operation which differ in Unix and Win32 and SYS_ERROR and
	NET_ERROR.

	* util.c (GetWSAErrorMessage): This routine was introduced
	because there is nothing like strerror() for network errors
	in Win32.

	* Makefile (CFLAGS): -O3 -fomit-frame-pointer -fforce-addr
	-fstrength-reduce -fexpensive-optimizations -m486

	* socket.c (default_read): Detect receive buffer overflow
	properly.

	* server.c (check_sockets): Do not put a socket into the
	write FD_SET if it was unavailable.

2000-01-29  Stefan Jahn  <stefan@lkcc.org>

	* ident.c: Implemented ident requester as internal coserver.
	(ident_handle_request): Get a request from the coserver and
	call the appropriate ident_func.
	(handle_ident): Connect to the ident server, send a request and
	read out the response. Then return the user ident if successfully
	done.

	* coserver.c (coserver_check_request): This is the new frontend
	for the server to evaluate coserver responses. Detects line.
	(coserver_start): Write a line to one of the running coservers.
	(coserver_loop): This routine is the new frontend for ALL kinds
	of internal coservers in Win32 and Unix. It is the infinite loop
	which permanently reads requests (invoked by coserver_start),
	processed them (via the func) and return a line for the
	server (caught by coserver_check_request).

	* http-proto.c (get_content_type): Made up simplified content
	determination.
	(http_file_read): Set the flag SOCK_FLAG_HTTP_DONE if file has
	been fully read.
	(http_default_write): Shut down the socket if the above flag was set.
	(http_disconnect): Close the http file descriptor if an error
	occurred while sending the http file.
	(http_get_response): Use this routine for both HEAD and GET requests.
	This is controlled via the flag HTTP_FLAG_NOFILE.

2000-01-28  Stefan Jahn  <stefan@lkcc.org>

	* socket.h (struct socket): Defined the socket descriptor
	as SOCKET.

	* socket.c (default_check_request): Detection timeout and
	maximum detection receive buffer fill prevents invalid connects.

	* nslookup.c
 	ENABLE_REVERSE_LOOKUP - ifdefs accordingly set.
	(handle_nslookup): Return an error if the reverse nslookup
	failed by gethostbyaddr().

	* server.c
	(check_sockets): Put a http file descriptor into the read and
	except FD_SET (Non-Win32, but Unix).
	(server_signal_handler): Wait() for zombie'd coserver children
	prevents reentrant signal handler for SIGCHLD under IRIX 6.x
	Do not close() pipes previously fclose()d.
	(validate_socket_list): Only compile this if ENABLE_DEBUG is
	defined.

2000-01-20  Stefan Jahn  <stefan@lkcc.org>

	* awcs client-master detection only once
	* when master has been lost only the awcs clients are kicked
	* read() and write() from sockets and pipes only if select()ed
	* internal nslookup coserver implemented
	* coserver concept determined (different in Unix and Win32)
	* strerror replaced by FormatMessage in Win32 port
	* serveez ported to IRIX 6.x

1999-12-17  Raimund Jacob  <raimi@lkcc.org>

	* server.c (check_sockets): mmhh.. someone merged >= INVALID_SOCKET
	into the accept call where != INVALID_SOCKET was correct...

	* util.c (getopt): man... even this one can be implemented the
	wrong way... shoot me

	* serveez.c (main): Extra message removed, will be displayed later

	* socket.c (sock_from_fd): fnctl replaced by ioctlsocket for Win32
	(sock_from_pipe): null-function for win32... no pipe

	* server.c (sock_server_loop): Win32 knows SIGBREAK but not
	SIGHUP/SIGPIPE. Ifdefs set accordingly
	(check_sockets): F_SETFD disabled for Win32... no fork/pipe anyway

	* serveez.c / configure.in : HAVE_GETOPT_H split into HAVE_GETOPT and
	HAVE_GETOPT_LONG. Cygwin has the header but native compile doesn't
	have the function...

	* server.c (start_coserver): null-function in win32. just doesn't work

	* Makefile.am: client.c connect.* deleted won't be used anyway

1999-12-16  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* Makefile.am (EXTRA_DIST): Added echoserver, so that everyone can
	see how great Guile is.
	(bin_PROGRAMS): Added bla, which is a simple echo program which
	can be used for testing the coserver feature.

	* server.c, awcs-proto.c, awcs-proto.h, server.c, serveez.c,
	connect.c, socket.c, socket.h, util.c, util.h: Merged changes I
	made to 0.0.10 with the cygwin and solidifying stuff Stefan and
	Raimi did. ediff-merge-files-with-ancestor rules BIG time!

1999-12-03  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* server.c (start_coserver): New function. Starts a separate
	process connecting its stdin and stdout to a socket structure.

	* echoserver: New file.  This guile script simply echoes its
	standard input to standard output. It can be used as a co-server
	for serveez.

	* socket.c (sock_alloc): Only max_sockets - spare_sockets clients
	are allowed to connect from now on.
	(sock_write): Whenever a whole message fits into the send buffer
	it is copied using memmove(). This spare copying by bytes (thanks
	to stefan for suggesting).
	(sock_from_pipe): New function. Creates a socket from a pair of
	file descriptors.

	* awcs-proto.c (status_connected): Using pre-loaded values for
	remote address and port.
	(internal_check_request): Created from
	awcs_check_request. Function now takes an extra argument which
	specifies whether requests are handled or only removed from the
	queue.
	(handle_master_request): Do not accept the "6 \0" message anymore.
	(awcs_connect_socket): Send connected message for both client and
	master now. Remove request, do not handle it.

	* server.c (check_sockets): Do not write on sockets which have
	been scheduled for shutdown in their read handler (thanks to
	stefan).

	* Applied Raimis and Stefans patches.

	* server.c (sock_server_loop): Print out listening port number and
	max. file descriptor count on startup.

1999-11-18  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* server.c (check_sockets): Fixed a longstanding bug by passing
	the correct client address size to accept().

1999-11-16  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* awcs-proto.c (awcs_connect_socket): With last changes,
	connection messages for the master server got lost. Fixed.

	* serveez.c (main): Check the return value of sock_alloc().
	(usage): Added option -m, --max-sockets to the help output.

	* socket.c: Set max_sockets to the default value of 200.

1999-10-26  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* server.c, server.h, connect.c, connect.h: Created.  Put in there
	some functions from socket.{c,h} due to restructure.

	* socket.c (default_check_request): Added support for protocol
	detection.

	* awcs-proto.c: Added support for protocol detection.
	Added function documentation.

	* socket.c: Added a lot of comments and cleaned the code up a
	bit.

1999-10-21  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* socket.c (sock_server_loop, server_signal_handler): Handle
	SIGPIPE by printing a notice but otherwise ignore.

1999-10-03  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* serveez.c: File created.


Copyright (C) 2011-2013 Thien-Thi Nguyen
Copyright (C) 2000, 2001, 2002, 2006, 2007 Stefan Jahn
Copyright (C) 1999, 2000, 2001 Raimund Jacob
Copyright (C) 1999 Martin Grabmueller

Copying and distribution of this file, with or without modification,
are permitted provided the copyright notice and this notice are preserved.
