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

	Release: 2.39

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

	[int] Use ‘number->string’ more.

	* http.scm (msg-string-rcode!): ...here.

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

	[doc] Spell "compatibility" correctly!

	* http.scm (http:request): ...here, in doc comment.

2014-10-08  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Release: 2.38

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

	[cgi] Add option to do file-uploads entirely in "move u8" style.

	* cgi.scm:
	Autoload ‘(www mime-multipart)’ on trigger ‘parse-multipart’.
	(parse-form/move): New proc.
	(make-ccc alist<-qs): New proc.
	(make-ccc): If given option ‘move’,
	use ‘alist<-qs’, ‘parse-form/move’.
	(make-ccc init!): Use ‘alist<-qs’.
	(cgi:init): Document new options ‘move’, ‘move-simple-text/plain’.
	(cgi:uploads): Document behavior given new options.

2014-10-03  Josep Portella Florit  <jpf@primfilat.com>  (tiny change)

	[slog] Work around Guile 2.0.x ‘%default-port-encoding’ weirdness.

	This is probably related to Guile bug#18520:
	<http://lists.gnu.org/archive/html/bug-guile/2014-09/msg00017.html>,
	which indicates a need to revisit / review for Guile 2.2.x (sigh).

	* mime-multipart.scm (ignore-default-port-encoding): New macro.
	(parse-multipart): Use it around ‘make-soft-port’ call.

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

	[doc] Expand ‘url-coding:encode’ description.

	* url-coding.scm (url-coding:encode):
	Add "safe" charset list and example to doc-comment.

2014-01-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Invert order of ‘parse-multipart unflatten’ rv.

	This makes ‘p-ref’ happy.

	* mime-multipart.scm (parse-multipart unflatten): ...here.

2014-01-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstractions: P!, V!, U!, parse-form/squeeze-maybe

	* cgi.scm (parse-form/squeeze-maybe): New proc.
	(make-ccc! P!): Likewise.
	(make-ccc! V!): Likewise.
	(make-ccc! U!): Likewise.
	(make-ccc!): Use new procs.

2013-12-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Don't bother specifying " " for ‘string-join’ DELIM.

	* crlf.scm (read-headers): ...here.

2013-12-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use SRFI 13 ‘string-map!’ more.

	* cgi.scm: Import SRFI 13 ‘string-map!’, not ‘string-join’.
	(getenv/symbol): Rewrite.

2013-12-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Don't call ‘(... form-2-form) parse-form’ w/ string TYPE.

	* cgi.scm (make-ccc init!): ...here.
	Instead, pass the result of ‘parse-type’ directly.

2013-12-31  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Make ‘parse-form’ handle parsed TYPE.

	* server-utils/form-2-form.scm: Import ‘(www mime-headers) typed?’.
	(boundary<-): New proc.
	(parse-form): Rename 1st arg to ‘type’; if it is a string,
	convert it immediately to its parsed form.
	(parse-form determine-boundary): Delete proc.
	(parse-form level): Use ‘boundary<-’, ‘typed?’;
	for recursion and its check, use parsed form of type.

2013-12-30  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘(www mime-headers)’ more.

	* server-utils/form-2-form.scm: Import ‘(www mime-headers)’
	procs ‘p-ref’, ‘parse-parameters’, ‘parse-type’.
	(+boundary-rx+): Delete.
	(parse-form determine-boundary): Rewrite.

2013-12-30  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Export ‘(www mime-headers) parse-parameters’.

	* mime-headers.scm: Add ‘parse-parameters’ to the export list.
	(parse-parameters): Add pre-form doc comment.

2013-12-30  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Move local var init to ‘let’ bindings closer to usage.

	* cgi.scm (make-ccc): Move ‘pre-squeezed?’ binding/init to...
	(make-ccc init!): ...here, combined into a single expression.

2013-12-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[pre] Fix bug: Move ‘port-at-body’ to proper scope.

	Reported by Josep Portella Florit.

	* mime-multipart.scm
	(parse-multipart port-at-body): Move from here...
	(parse-multipart unflatten port-at-body): ...to here.

2013-12-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstraction: opt?

	* cgi.scm (make-ccc init! opt?): New proc.
	(make-ccc init!): Use ‘opt?’.

2013-12-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Make ‘alist<-query’ optionally return u8vectors.

	* server-utils/parse-request.scm (alist<-query):
	Take optional arg ‘u8’; pass it to ‘url-coding:decode’.

2013-12-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Make ‘url-coding:decode’ optionally return u8vector.

	* url-coding.scm: Import ‘(ice-9 optargs)’;
	import SRFI 4 ‘make-u8vector’, ‘u8vector-set!’.
	(url-coding:decode w/u8vector): New proc.
	(url-coding:decode): Take optional arg ‘u8’; if
	non-‘#f’, arrange to return a u8vector instead of string.

2013-12-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Rewrite ‘url-coding:decode’.

	* url-coding.scm: Import SRFI 11 ‘let*-values’.
	(make-bv, bv-set!, bv-ref): New aliases / procs.
	(PLUS/PERCENT, ZERO, SPACE): New data.
	(particulars, c-hex): New procs.
	(url-coding:decode): Rewrite.

2013-12-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[slog] Import SRFI 13 ‘string-titlecase’ for Guile pre-1.8.

	* http.scm: Import SRFI 13 ‘string-titlecase’.
	* mime-headers.scm: Likewise.
	* parse-request.scm: Likewise.

2013-12-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Drop internal module: (www mime)

	* mime.scm: Delete file.

2013-12-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] New internal module: (www mime-multipart)

	* mime-multipart.scm: New file, from mime.scm excerpts,
	and using ‘(www mime-headers)’ procs in various places.

2013-12-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Avoid strings for CGI MIME-type manipulation.

	* cgi.scm: Autoload (www mime-headers) on trigger ‘parse-type’;
	don't import SRFI 13 ‘string-prefix-ci?’.
	(make-ccc init!): Compute/match type symbolically.

2013-12-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add (www mime-headers) procs: typed?, top-typed?

	* mime-headers.scm (typed?, top-typed?): New procs, exported.

2013-12-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] New internal module: (www mime-headers)

	* mime-headers.scm: New file, made by excerpting
	from mime.scm, with only one small addition:
	(parse-headers): Also handle Content-Length, if available.

2013-12-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] New internal module: (www mime)

	* mime.scm: New file.

2013-12-18  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Make mid/low ‘put-bytevector’ rv compatible w/ Guile 2.

	* binary-ports.scm-low (put-bytevector): Return unspecified.
	* binary-ports.scm-mid (put-bytevector): Likewise.

2013-12-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] New (www binary-ports) proc: get-bytevector-n

	* binary-ports.scm-low: Import ‘(srfi srfi-4) make-u8vector’.
	(get-bytevector-n): New proc, exported.
	* binary-ports.scm-mid: Import ‘(srfi srfi-4) make-u8vector’.
	(get-bytevector-n): New proc, exported.

2013-12-15  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use ‘(... binary-ports) put-bytevector’ more.

	* crlf.scm (u8-write-all): Delete proc.
	(out! move!): Use ‘put-bytevector’.

2013-12-14  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Add binary-ports.scm-{low,mid}.

	* binary-ports.scm-low: New file.
	* binary-ports.scm-mid: New file.
	* Makefile.am (EXTRA_DIST): Add binary-ports.scm-low,
	binary-ports.scm-mid.
	(www_DATA) [NEED_BINPORTS]: Add binary-ports.
	(dist-hook): New target.
	* crlf.scm: From ‘(ice-9 binary-ports)’ select
	specifically ‘get-bytevector-n!’, ‘put-bytevector’.
	(u8-read!-all, u8-write-all): Rewrite.

2013-12-09  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add abstraction: weird!

	* crlf.scm (read-through-CRLF weird!): New proc.
	(read-through-CRLF): Use ‘weird!’.

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

	[crlf] Default ‘read-characters’ port.

	* crlf.scm (read-characters): Make 2nd arg PORT optional;
	if unspecified, take the port to be the current input port.
	* cgi.scm (make-ccc init!): Don't specify PORT to ‘read-characters’.

2013-12-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[cgi int] Use ‘(www crlf) read-characters’ directly.

	* cgi.scm: Don't autoload ‘(ice-9 rw)’;
	instead, autoload ‘(www crlf)’ on trigger ‘read-characters’.
	(make-ccc init!): Use ‘read-characters’ directly.

2013-12-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[cgi int] Specify bytes-to-read RAW-DATA for ‘parse-form’.

	* cgi.scm (make-ccc init!): ...here.

2013-12-06  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Make ‘parse-form’ handle bytes-to-read RAW-DATA.

	* server-utils/form-2-form.scm: Import ‘(www crlf) read-characters’.
	(parse-form): If RAW-DATA is not a string, take it as
	the number of bytes to read from the current input port.

2013-11-02  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Fix bug: Don't use ‘values’ as a container.

	Reported by Josep Portella Florit.

	* server-utils/form-2-form.scm (parse-form u!):
	Use ‘list’ instead of ‘values’.
	* cgi.scm (make-ccc init! mogrify handle): New proc.
	(make-ccc init! mogrify): Use ‘handle’.

2013-07-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Release: 2.37

2013-07-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop support for values in ‘receive-response’ spec.

	* http.scm (receive-response): Update doc comment.
	* crlf.scm (unravel): Delete proc.
	(get-body-proc motion): Call ‘custom’ thunk directly.

2013-07-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop two ‘(www http)’ procs.

	* http.scm (http:head, http:get): Delete procs.

2013-07-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop some ‘(... parse-request)’ procs.

	* server-utils/parse-request.scm: From ‘(www crlf)’, don't
	import ‘read-through-CRLF’, ‘read-headers’, ‘read-characters’;
	don't import SRFI 13 ‘string-upcase’.
	(read-first-line, read-headers, skip-headers)
	(read-body): Delete procs.

2013-07-28  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Avoid ‘(... parse-request) read-body’.

	* cgi.scm: Don't import ‘(... parse-request) read-body’;
	autoload (ice-9 rw) on trigger ‘read-string!/partial’.
	(read-body): New proc.

2013-07-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[url] Make ‘url:address’ and ‘url:unknown’ more strict.

	Here, "validate" means check and error out if not happy.
	* url.scm (url:address): Validate scheme is ‘mailto’.
	(url:unknown): Validate scheme is ‘unknown’.

2013-07-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop module (www main).

	* main.scm: Delete file.

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

	Release: 2.36

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

	[mm slog] Support Guile 2.x bytevector i/o.

	* crlf.scm: Import ‘(ice-9 binary-ports)’.

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

	[int slog] Avoid passing ‘values’ as an arg.

	* crlf.scm (read-headers/get-body): If ‘request’
	is not a thunk, ignore it; update to call it, if a thunk.
	* http.scm (send-request): Don't pass values to
	‘read-headers/get-body’; instead, wrap them in a thunk.

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

	[crlf slog] Add abstractions: u8-read!-all, u8-write-all

	* crlf.scm (u8-read!-all, u8-write-all): New procs.
	(get-body-proc): Use ‘u8-read!-all’.
	(out!): Use ‘u8-write-all’.

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

	[int] Explicitly ‘#:select’ bindings.

	* cgi.scm: SRFI 13, SRFI 14.
	* http.scm: ‘(www url)’.
	* main.scm: ‘(www http)’, ‘(www url)’.
	* url.scm: ‘(ice-9 regex)’.
	* server-utils/big-dishing-loop.scm:
	‘(... parse-request)’, ‘(... answer)’.
	* server-utils/form-2-form.scm: SRFI 13, ‘(ice-9 regex)’.
	* server-utils/parse-request.scm: SRFI 9, SRFI 13, SRFI 14.

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

	[int] Don't bother autoloading ‘(... url-coding)’.

	* server-utils/parse-request.scm: ...here, via ‘#:use-modules’.

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

	[cgi int] Import ‘(... parse-request)’ w/o autoload.

	* cgi.scm: ...here, via ‘#:use-modules’.

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

	[int] Decruft: Don't import unused ‘(www url-coding)’.

	* server-utils/form-2-form.scm: ...here.

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

	[int] Decruft: Don't import unused SRFI 14.

	* server-utils/form-2-form.scm: ...here.

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

	[int] Decruft: Don't import unused ‘(ice-9 rw)’.

	* http.scm: ...here.
	* server-utils/answer.scm: Likewise.
	* server-utils/form-2-form.scm: Likewise.
	* server-utils/parse-request.scm: Likewise.

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

	[int] Import ‘and-let*’ from SRFI 2.

	* cgi.scm: Import ‘and-let*’ from SRFI 2
	instead of from ‘(ice-9 and-let-star)’.
	* server-utils/filesystem.scm: Likewise.
	* server-utils/form-2-form.scm: Likewise.
	* server-utils/parse-request.scm: Likewise.

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

	[build slog] Import some procs for poor old Guile 1.4.x.

	These are apparently built-in for Guile 1.8 and later.

	* crlf.scm: Import SRFI 13 ‘string-concatenate’,
	SRFI 14 ‘char-set-contains?’.
	* url-coding.scm: Import SRFI 13 ‘string-skip’.

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

	Release: 2.35

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

	[crlf slog] Avoid ‘(or (foo) ...)’ where ‘foo’ produces values.

	P ≡ "get-body-proc get-body".
	* crlf.scm (P try-chunked): Delete proc, splitting into...
	(P chunked?): ...this new proc.
	(P handle-chunked): ...and this one.
	(P try-known): Delete proc, splitting into...
	(P known?): ...this new proc.
	(P handle-known): ...and this one.
	(P): Use new procs w/ ‘cond’.

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

	[crlf slog] Allow thunk in ‘receive-response’ spec.

	* crlf.scm (unravel): New proc.
	(get-body-proc motion) <custom>: Use ‘unravel’.
	(get-body-proc motion) <u8>: Use thunk for internal ‘custom’ transform.
	* http.scm (receive-response): Update doc comment; nfc.

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

	[url-coding slog] Use ASCII subset of ‘char-set:letter+digit’.

	* url-coding.scm (url-coding:encode):
	Use only the ASCII subset of ‘char-set:letter+digit’.

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

	[int] Make ‘(www crlf) read-headers’ check for non-empty name.

	* crlf.scm: Import SRFI 13 ‘string-every’.
	(read-headers): If the header name is empty,
	throw ‘parse-error’ w/ sub-key ‘no-name’.

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

	[doc] Fix typo in ‘make-big-dishing-loop’ description.

	* server-utils/big-dishing-loop.scm (make-big-dishing-loop):
	Spell "boolean" correctly.

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

	Release: 2.34

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

	[cgi] Conditionalize cookie parsing and collation.

	We might as well take advantage of the fact
	that (... cookies) is autoloaded.

	* cgi.scm (make-ccc init!): Avoid calling ‘collate’
	and ‘simple-parse-cookies’ if there are none to parse.

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

	[cgi] Add ‘http-accept’; make ‘http-accept-types’ its alias.

	* cgi.scm (env-look): Handle ‘http-accept’ also.
	(cgi:getenv): Update doc comment.

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

	[cgi] Add ‘cgi:init’ option ‘cookies-split-on-semicolon’.

	* cgi.scm (make-ccc init!): Call ‘simple-parse-cookies’
	with sep char, depending on ‘cookies-split-on-semicolon’ presence.
	(cgi:init): Update doc comment.

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

	Drop "cookie2" support in CGI modules.

	This undoes the misfeatures added by 2012-03-22, "[cgi-prep]
	Handle also ‘http-cookie2’", and 2012-03-24, "[cgi] Provide
	access to ‘HTTP_COOKIE2’ via ‘http-cookie2’".

	* server-utils/cgi-prep.scm (*env-jamming-methods*):
	Don't accept ‘http-cookie2’; don't set env var ‘HTTP_COOKIE2’.
	(cgi-environment-manager): Update doc comment.
	* cgi.scm (env-extraction-methods):
	Drop access to ‘HTTP_COOKIE2’ via ‘http-cookie2’.
	(cgi:getenv): Update doc comment.

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

	[int] Use "~%" instead of "\n" in format strings.

	* server-utils/big-dishing-loop.scm:
	Use "~%" instead of "\n" in format strings.
	* server-utils/cookies.scm: Likewise.

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

	[int] Add abstraction: fs

	* server-utils/cookies.scm (fs): Move here from...
	(rfc2109-set-cookie-string fs): ...from here.
	(rfc2965-set-cookie2-tree pair<-): Use ‘fs’.
	(rfc2965-parse-cookie-header-value err!): Likewise.

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

	[cgi int] Decruft: Elide ‘ONE #:getenv’.

	* cgi.scm (make-ccc): Drop support for ‘#:getenv’.
	(cgi:getenv): Use ‘env-look’ directly.

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

	[cgi int] Use ‘getenv/symbol’ more.

	* cgi.scm (env-look server-sw-info): Use ‘getenv/symbol’.
	(env-look server-pr-info): Likewise.
	(env-look, make-ccc): Likewise.

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

	[cgi] Recognize some "idiomatic" env var names.

	* cgi.scm (env-look) <no fuss>: Add ‘server-name’,
	‘server-software’, ‘server-protocol’, ‘auth-type’.
	(cgi:getenv): Update doc comment.

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

	[cgi int] Add abstraction: split-on

	* cgi.scm (split-on): New proc.
	(ws/comma-split, getenv/symbol): Use ‘split-on’.

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

	[cgi int] Revamp env var lookup.

	* cgi.scm (getenv/symbol): New proc.
	(env-extraction-methods): Delete proc.
	(*env-extraction*): Delete hash table.
	(env-look): Rewrite.

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

	[cgi] Provide access to ‘HTTP_COOKIE2’ via ‘http-cookie2’.

	* cgi.scm (env-extraction-methods):
	Provide access to ‘HTTP_COOKIE2’ via ‘http-cookie2’.
	(cgi:getenv): Update doc comment.

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

	[cgi-prep] Handle also ‘http-cookie2’.

	* server-utils/cgi-prep.scm (*env-jamming-methods*):
	Accept ‘http-cookie2’; for that, set env var ‘HTTP_COOKIE2’.

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

	[cookies] Allow ‘simple-parse-cookies’ separation char override.

	* server-utils/cookie.scm (sep-cs): New proc.
	(NOT-COMMA): Delete character set.
	(simple-parse-cookies): Take optional arg ‘sep’; use ‘sep-cs’.

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

	[int] Use SRFI 13, 14 for ‘(... cookies) simple-parse-cookies’.

	* server-utils/cookies.scm: Import SRFI 13 ‘string-tokenize’,
	‘string-trim-both’, ‘string-take’, ‘string-drop’; SRFI 14
	‘char-set-complement’, ‘char-set’; don't import ‘(ice-9 regex)’.
	(NOT-COMMA): New character set.
	(+pair-exp+): Delete regexp.
	(simple-parse-cookies): Rewrite.

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

	[int] Handle ‘#f’ STYLE for ‘compose-response’.

	* server-utils/answer.scm (compose-response):
	If ‘style’ is #f, set it explicitly to ‘http-ish’.

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

	[int] Compact hgrok objects.

	* server-utils/modlisp.scm (modlisp-hgrok): Move 5th and 4th
	elems to 1st and 2nd positions, respectively; delete 3rd-5th elems.
	* server-utils/big-dishing-loop.scm (http-hgrok): Likewise.
	(make-big-dishing-loop good): Update style object ref accordingly.
	* server-utils/parse-request.scm (receive-request): Likewise.

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

	[int] Centralize ‘CRLF’.

	* crlf.scm (CRLF): Export.
	* server-utils/answer.scm: Import ‘CRLF’ as ‘the-actual-CRLF’.
	(CRLF): Use ‘the-actual-CRLF’.

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

	[int] Zonk now-obsoleted ‘http-hgrok’ elements.

	* server-utils/big-dishing-loop.scm
	(http-hgrok): Set first three elements to ‘#f’.

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

	[doc] Mention ‘compose-response’ in ‘modlisp-ish’ doc.

	Omission from 2012-03-16, "New (... answer) proc: compose-response".

	* server-utils/modlisp.scm (modlisp-ish):
	Add ‘compose-response’ to list of procedures that
	can accept ‘modlisp-ish’ as the STYLE argument.

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

	[int] Zonk now-unused ‘modlisp-hgrok’ elements.

	* server-utils/modlisp.scm (stashed): Delete object property.
	(read-headers, read-first-line): Delete procs.
	(modlisp-hgrok): Set first three elements to ‘#f’.

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

	[url-coding int] Use SRFI 13, 14 more.

	* url-coding.scm: Don't import (ice-9 regex);
	instead, import some procs from SRFI 13, 14.
	(url-coding:decode, url-coding:encode): Rewrite.

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

	[url-coding] Fix bug: Use two hex digits to encode octets 0-15.

	* url-coding.scm (url-coding:encode): If the integer
	value of the octet is less than 16, output an additional ‘#\0’.

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

	[http] Fix bug: Also reserve ‘#\&’ and ‘#\=’ when urlencoding.

	* post.scm (formatted-form-for-http:post-form urlenc):
	Also reserve ‘#\&’ and ‘#\=’.
	* http.scm (http:post-form): Update doc comment.

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

	[int] Move ‘http:post-form’ bulk to new internal module.

	* post.scm: New file.
	* http.scm: Autoload ‘(www post)’
	on trigger ‘formatted-form-for-http:post-form’.
	(http:post-form): Document Content-Type computation;
	use ‘formatted-form-for-http:post-form’.

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

	[crlf] Do more sanity checks for ‘out!’ BODY.

	* crlf.scm (out! move!): For u8 vector and string support,
	require all elements in the list to be of the supported type;
	if BODY does not qualify, throw ‘bad’, ‘body’ and BODY.

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

	[int] Use ‘receive-request’ in ‘make-big-dishing-loop’.

	* server-utils/big-dishing-loop.scm (make-big-dishing-loop):
	No longer use the first three elements of the ‘style’ object.
	(make-big-dishing-loop parse): New proc.
	(make-big-dishing-loop bdlcore): Use ‘parse’.
	(make-big-dishing-loop good): Rename from ‘handle-request’;
	take arg REQ instead of UPATH and METHOD; compute them from REQ;
	use ‘need-headers’ here, to enable processing.
	(make-big-dishing-loop child): Update call to ‘good’.

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

	New (... parse-request) proc: receive-request

	* server-utils/parse-request.scm: Import ‘read-headers/get-body’,
	‘(ice-9 regex) match:substring’, ‘(ice-9 optargs)’.
	(read-request): New var.
	(PV-RX): New regexp.
	(receive-request): New proc, exported.

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

	[int] Add 5th element to hgrok objects.

	* server-utils/big-dishing-loop.scm (http-hgrok): Add 5th element ‘#f’.
	* server-utils/modlisp.scm: Import ‘(www crlf) get-body-proc’;
	SRFI 1 ‘lset-difference’.
	(read-until-body): Take 2nd arg HSYM;
	normalize the header name with it.
	(read-headers): Update call to ‘read-until-body’.
	(read-request): New proc.
	(modlisp-hgrok): Add 5th element ‘read-request’.

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

	New (... parse-request) record type (plus procs): request

	* server-utils/parse-request.scm: Import SRFI 9.
	(request): New ‘define-record-type’.
	("request procs"): New named-text-block (comment).

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

	[int] Use ‘compose-response’ underneath ‘mouthpiece’.

	* server-utils/answer.scm (mouthpiece): Use ‘compose-response’.

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

	New (... answer) proc: compose-response

	* server-utils/answer.scm: Import ‘(www crlf) out!’; import
	‘(ice-9 q)’ procs ‘make-q’, ‘enq!’, ‘q-empty?’, ‘deq!’, ‘sync-q!’.
	(compose-response): New proc, exported.

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

	[int] Add (www crlf) abstraction: get-body-proc

	* crlf.scm: Import SRFI 13 ‘string-take’.
	(get-body-proc): New proc, exported.
	(read-headers/get-body): Use ‘get-body-proc’.

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

	[crlf] Fix bug: Include ‘case’ in ‘case’ expression!

	Omission from 2012-02-29, "Add some support procs to (www crlf)".
	Catching this kind of stupidity is why the test suite is necessary.

	* crlf.scm (x-move): Include ‘case’ in ‘case’ expression!

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

	[v int] Extend ‘.fake’ prereqs machinery to all source/ subdirs.

	* Makefile.am (witness): Delete var.
	($(witness), all-local): Delete targets.

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

	[url] Handle "user@" in ‘http’-specific ‘url:parse’.

	* url.scm: Import SRFI 13 ‘string-index’, ‘string-take’.
	(parse-http): Rewrite.

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

	[v int] Refine ‘.fake’ prereqs; elide "make clean" requirement.

	* Makefile.am (witness): New var.
	($(witness), all-local): New targets.

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

	[url int] Restructure ‘url:parse’.

	* url.scm: Import SRFI 13 ‘substring/shared’, ‘string-prefix?’.
	(parse-http, parse-ftp): New procs.
	(http-regexp, ftp-regexp, mailto-regexp): Delete regexp objects.
	(url:parse): Rewrite.

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

	[v] Move testing to dedicated dir; revamp to use Automake-fu.

	* Makefile.am (BUILT_SOURCES): Delete var.
	(all-modules.list): Delete target.
	(check_DATA): Delete var.
	(.fake, clean-local): Delete targets.
	(TESTS): Delete var.
	(EXTRA_DIST): Remove $(TESTS).
	* alive.test: Delete file.

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

	[int] Move ‘hqf<-upath’ char-set computation to load-time.

	* server-utils/parse-request.scm (hqf<-upath):
	Form the ‘#\?’ / ‘#\#’ character-set at load-time.

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

	[int] Use ‘fs’ more; add abstraction: fsp

	* server-utils/log.scm (log-http-response-proc): Use ‘fs’.
	(log-http-response-proc fsp): New proc.

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

	[log] New (www server-utils log) proc: string<-sockaddr

	* server-utils/log.scm (fs): New proc.
	(string<-sockaddr): New proc, exported.

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

	[int] Add abstraction: status-format-string

	* server-utils/answer.scm (status-format-string): New proc.

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

	[int] Rework ish fields; make eol and proto-v explicit.

	* server-utils/answer.scm (ish-eol, ish-proto-v): New procs.
	(ish-status): Reseat.
	(ish-kv-sep): New proc.
	(ish-h-k-end, ish-h-v-end): Delete procs.
	(ish-neck): Reseat.
	(http-ish): Update.
	(tree<-header-proc): Use ‘ish-kv-sep’ and ‘ish-eol’.
	(mouthpiece): Hardcode protocol version.
	(mouthpiece set-reply-status): Use ‘ish-proto-v’,
	‘protocol-version’, ‘ish-status’, ‘ish-eol’.
	* server-utils/modlisp.scm (modlisp-ish): Update.

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

	[int] Make ‘tree<-header-proc’ caching.

	* server-utils/answer.scm (tree<-header-proc):
	Maintain private cache; consult it preferentially.

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

	[int] Handle short-writes in ‘(www crlf) out!’.

	Sometimes ‘display’ stops prematurely.
	Anyway, better to be explicit.

	* crlf.scm: Import ‘(ice-9 rw) write-string/partial’.
	(out! string-out!): New proc.
	(out!): Use ‘string-out!’.

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

	[style] Use symbol for ‘#:add-header’ NAME arg.

	* server-utils/big-dishing-loop.scm (echo-upath):
	Call ‘M #:add-header’ with symbolic header name.

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

	[http-status] Futz w/ case of selected HTTP status text.

	* data/http-status.scm (*http-status*):
	Titlecase the text for 408, 416, 504, 505.

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

	[answer] Fix bug: Handle optional ‘status-box’ correctly.

	Regression introduced 2010-06-22, "Add EXPERIMENTAL modlisp support".
	The concomitant transition to use (ice-9 optargs) was incomplete.

	* server-utils/answer.scm (mouthpiece):
	Make ‘status-box’ default to ‘#f’; update ‘status-number!’
	and ‘status-content-length!’ to mutate the contents of
	‘status-box’ directly.

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

	[bdl slog] Handle ‘(sockaddr:path SOCK) => #f’.

	For Unix domain sockets, some Guile versions have ‘sockaddr:path’
	sometimes return the empty string, others ‘#f’.

	* server-utils/big-dishing-loop.scm
	(big-dishing-loop handle-request) <PF_UNIX>:
	Use "localhost" also for the case when ‘sockaddr:path’ returns ‘#f’.

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

	Fix bug: Remediate botched (ice-9 optargs) transition.

	Regression introduced 2012-02-24, "Use (ice-9 optargs) more".

	* server-utils/filesystem.scm (upath->filename-proc):
	Use correct local variable name.
	* server-utils/log.scm (log-http-response-proc):
	Likewise; drop obsoleted local variable ‘len’.

2012-02-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Release: 2.33

2012-02-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http int] Rewrite ‘http:request’.

	* http.scm: Don't import ‘read-headers’, ‘read-characters’.
	(msg-string-rcode!): New proc.
	(http:request): Rewrite, using ‘send-request’, ‘receive-response’.

2012-02-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Add (www http) procs: ‘send-request’, ‘receive-response’

	* http.scm: Import ‘hsym-proc’, ‘read-headers/get-body’, ‘out!’.
	(msg-headers!, msg-body!): New procs.
	(send-request, receive-response): New procs, exported.

2012-02-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http int] Decruft: Delete unused internal proc.

	Omission from 2012-02-21, "New internal module: (www crlf)".

	* http.scm: Don't import ‘(www crlf) read-through-CRLF’.
	(http:request through/discarding-CRLF): Delete proc.

2012-02-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Add some support procs to (www crlf).

	* crlf.scm: Import ‘(ice-9 optargs)’, SRFI 1 ‘append-map!’,
	SRFI 4 ‘u8vector?’, ‘u8vector-length’, ‘u8vector-ref’,
	‘u8vector-set!’, SRFI 11 ‘let-values’, SRFI 13 ‘string-suffix?’.
	(CRLF): New string.
	(hsym-proc, read-headers/get-body): New procs, exported.
	(FRONT-FORMAT): New string.
	(pop, x-move): New macros.
	(CHUNKS-DONE/FOOTER): New string.
	(out!): New proc, exported.

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

	[int] Add abstraction: CR

	* crlf.scm (CR): New string.
	(read-through-CRLF): Use ‘CR’.

2012-02-27  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[http] New (www http) fluid: protocol-version

	* http.scm: Import ‘(srfi srfi-1) car+cdr’.
	(http:version): Delete var.
	(protocol-version): New fluid, init to ‘(1 . 0)’.
	(http:request): Use ‘protocol-version’.

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

	[http] Make ‘http:status-ok?’ accept also integer.

	* http.scm (http:status-ok?): Rewrite to test
	numerically; if arg is a string, convert to number first.

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

	[int] Rename internal proc w/o "http:" prefix.

	* http.scm (make-message): Rename from ‘http:make-message’.

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

	[int] Decruft: Drop ‘http:fetch-header’.

	* http.scm (http:message-header): Use ‘assq-ref’ directly.
	(http:fetch-header): Delete proc.
	(http:request): Use ‘assq-ref’ directly.

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

	[int] Use (ice-9 optargs) more.

	Implicit ∀ files: "Use module ‘(ice-9 optargs)’".
	* http.scm (http:post-form c-type, http:post-form c-disp)
	(http:open, http:request): Use ‘define*’.
	* main.scm (www:http-head-get): Likewise.
	* server-utils/answer.scm (mouthpiece send-reply): Likewise.
	* server-utils/filesystem.scm (upath->filename-proc)
	(filename->content-type): Likewise.
	* server-utils/log.scm (log-http-response-proc): Likewise.

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

	[int] Make ‘(www crlf) read-headers’ handle name normalization.

	* crlf.scm (read-headers): Take arg NORM; call it
	on each header name string to compute result alist keys.
	* http.scm (http:request): Update call to ‘read-headers’.
	* server-utils/parse-request.scm (read-headers):
	Update call to ‘crlf:read-headers’.

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

	[http] Accept symbolic METHOD for ‘http:request’.

	* http.scm (http:head, http:get, http:post-form):
	Use symbolic method for ‘http:request’ call.
	(http:request): If ‘method’ is a string, convert to symbol;
	‘error’ if neither string nor symbol; handle symbol internally.

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

	[int] New (www crlf) proc: read-characters

	* crlf.scm (read-characters): New proc, exported.
	* http.scm: Import ‘(www crlf) read-characters’.
	(http:request): Use ‘read-characters’.
	(read-n-chars): Delete proc.
	* server-utils/parse-request.scm: Import ‘(www crlf) read-characters’.
	(read-body): Use ‘read-characters’.

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

	Zonk ‘(www server-utils answer) string<-header-components’.

	Announced in Guile-WWW 2.28 (2010-06-22).

	* server-utils/answer.scm (string<-header-components): Delete proc.

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

	[http] Fix bug: Don't send CRLF for message body.

	Regression introduced in 2.x series and clumsily backstepped by
	2004-01-22 "(form-hack-regex): New var".  See top-level ChangeLog.

	* http.scm (form-hack-regex): Delete var.
	(http:request): Output body body strings w/o trailing CRLF;
	update ‘Content-Length’ computation accordingly.

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

	[http int] Incorporate ‘display-with-crlf’ into unique caller.

	* http.scm (http:request display/crlf): New proc.
	(http:request): Use ‘display/crlf’.
	(display-with-crlf): Delete proc.

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

	[int] New internal module: (www crlf)

	* crlf.scm: New file.
	* http.scm: Don't use modules ‘(srfi srfi-13)’, ‘(ice-9 rdelim)’,
	‘(ice-9 regex)’; use modules ‘(www crlf)’ and ‘(srfi srfi-11)’.
	(header-regex): Delete regexp.
	(http:header-parse, parse-status-line): Delete procs.
	(http:request through/discarding-CRLF): Use ‘read-through-CRLF’.
	(http:request): Use ‘read-three-part-line’, ‘read-headers’.
	(sans-trailing-whitespace): Delete proc.
	* server-utils/parse-request.scm: Don't use module
	‘(ice-9 rdelim)’; use modules ‘(www crlf)’ and ‘(srfi srfi-11)’.
	(read-line/CRLF): Delete proc.
	(false-if-eof): New macro.
	(read-first-line): Use ‘false-if-eof’, ‘read-three-part-line’.
	(read-headers): Use ‘crlf:read-headers’.
	(skip-headers): Use ‘false-if-eof’, ‘read-through-CRLF’.

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

	[int] Add abstraction: through/discarding-CRLF

	* http.scm (http:request through/discarding-CRLF): New proc.
	(http:request): Use ‘through/discarding-CRLF’.

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

	[int] Import ‘(ice-9 rdelim) read-line’ explicitly.

	* http.scm: Import ‘(ice-9 rdelim) read-line’;
	remove conditional ‘use-modules’ form.

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

	[inst] Fix bug: Make sure alive.test knows about ‘exec_prefix’.

	Omission from 2011-09-28, "Install under $(GUILE_LIBSITE)".

	* alive.test (exec_prefix): Mine this var from Makefile, too.

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

	[inst] Install under $(GUILE_LIBSITE).

	* Makefile.am (wwwdir): Use $(GUILE_LIBSITE).
	(update-site-module-catalog): Likewise.
	* alive.test: Do ‘s/GUILE_SITE/GUILE_LIBSITE/g’.
	* data/Makefile.am (wwwdir): Use $(GUILE_LIBSITE).
	* server-utils/Makefile.am (wwwdir): Likewise.

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

	[cgi] Relax ‘application/x-www-form-urlencoded’ recognition.

	Apparently, under HTTP 1.1 the server can include more than
	a simple MIME type in the ‘Content-Type’ header.  Good slack!
	Reported by Simon Haines.

	* cgi.scm (make-ccc init!): Use ‘string-prefix-ci?’
	for ‘application/x-www-form-urlencoded’, ‘multipart/form-data’.

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

	Release: 2.32

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

	[cgi] Fix bug: Handle query-string (e.g., for GET request method).

	Regression introduced 2009-05-26, "Fix bug:
	For (www cgi), don't mix query string and form data".
	Reported by gregory benison.

	This is a regression because we DO want to mix query-string
	and form-data.  Previous to the 2009-05-26, the query-string
	clobbered the form-data.  Still to figure out is whether or
	not it is better to prefix or suffix the query-string pairs.

	* cgi.scm (make-ccc): If ‘QUERY_STRING’ is non-empty,
	parse it and prefix the resulting form variables to the others.

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

	Release: 2.31

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

	[v] Do partial install; point %load-path there.

	* Makefile.am (check_DATA): New var.
	(.fake, clean-local): New targets.
	* alive.test: Don't create symlink; don't use ‘-L .’;
	instead, mine ‘GUILE_SITE’ out of ./Makefile and use
	‘-L ${GUILE_SITE}’; also, report its value if ‘$debug’.

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

	[uninstall] Fix bug: Do complete "make uninstall".

	* Makefile.am (update-site-module-catalog): New target.
	(install-data-hook): Remove surrounding ‘HAVE_MKPIMMC’;
	do "make update-site-module-catalog" instead.
	(uninstall-hook): New target.

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

	[build] Move module-catalog facilities check to configure time.

	* Makefile.am [HAVE_MKPIMMC] (install-data-hook): New target.

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

	[v] Refine preload: Prioritize "" instead of deleting ".scm".

	The 2011-04-28 change goes too far; it impedes
	loading system modules used by Guile-WWW modules.
	Reported by (Savannah user) vonbecmann:
	<https://savannah.nongnu.org/bugs/?33175>.

	* alive.test: Don't delete ".scm" from ‘%load-extensions’;
	instead, ensure only that "" is at the beginning of the list.

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

	[v] Make alive.test avoid (mis-)loading the .scm files, if possible.

	Reported by Bernardo Ezequiel Contreras:
	<https://savannah.nongnu.org/bugs/?33175>

	* alive.test: If guile has ‘%load-extensions’, create a
	preload file that removes ".scm" from it; use that file for
	all invocations; and delete it when done.  If in debug mode,
	display ponderings, as well as ‘guile --version’ output.

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

	Release: 2.29

2011-01-24  Neil Jerram  <neil@ossau.uklinux.net>

	Allow big-dishing-loop to set modlisp-ish reply style.

	* server-utils/modlisp.scm (modlisp-hgrok):
	Move definition after ‘modlisp-ish’; include ‘modlisp-ish’.
	* server-utils/big-dishing-loop.scm (http-hgrok):
	Add fourth vector element for congruence with ‘modlisp-hgrok’.
	(make-big-dishing-loop handle-request):
	Specify status-box STYLE in ‘mouthpiece’ construction.

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

	[portability] Fix bug: Don't assume ‘(set! (P OBJ) VAL)’ returns VAL.

	Reported by Neil Jerram.

	* server-utils/answer.scm (tree-flat-length!):
	Ensure that call-time computation of length returns it.
	* server-utils/modlisp.scm (read-headers):
	Ensure return value after ‘set!’.

2010-09-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Decruft: Remove obsoleted autoload.

	* server-utils/filesystem.scm: Remove unused
	autoload of module (www data content-type).

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

	Use module (ice-9 curried-definitions), but conditionally.

	* server-utils/answer.scm: Use (ice-9 curried-definitions).
	* server-utils/form-2-form.scm: Likewise.

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

	Make alive.test sensitive to env var ‘GUILE’.

	* alive.test (guile): Init var using env var ‘GUILE’ if set.

2010-08-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Add "make check" support.

	* alive.test: New file.
	* Makefile.am (BUILT_SOURCES): New var.
	(all-modules.list): New target.
	(TESTS): New var.
	(EXTRA_DIST): Add $(TESTS).

2010-08-17  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use Guile-BAUX for doc maintenance, module munging.

	CC means: "Don't include $(top_srcdir)/build-aux/common.mk;
	instead, include $(top_srcdir)/build-aux/comp.mk";
	SA means: "Replace ‘sig’ option in doc comment ‘args’ option";
	NS means: "Delete ‘sig’ option from doc comment".
	* Makefile.am: CC.
	(www_DATA): Use $(top_leaves).
	* http.scm (http:open, http:request): SA.
	* main.scm (www:http-head-get): SA.

	* data/Makefile.am: CC.
	(www_DATA): Use $(data_leaves).

	* server-utils/Makefile.am: CC.
	* server-utils/answer.scm (CRLF, flat-length): Add doc comment.
	(string<-headers, mouthpiece): NS.
	* server-utils/big-dishing-loop.scm (named-socket):
	Don't list keywords in doc comment; also, NS.
	(make-big-dishing-loop): Use @t for keyword
	args table; add @findex for ‘need-input-port’; NS.
	* server-utils/cookies.scm (rfc2109-set-cookie-string): NS.
	* server-utils/filesystem.scm (upath->filename-proc): SA.
	(filename->content-type): SA.
	* server-utils/log.scm (log-http-response-proc):
	Use more succint meta-variable names; SA.
	* server-utils/modlisp.scm (modlisp-hgrok, modlisp-ish):
	Add doc comment.

2010-06-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Release: 2.28

2010-06-22  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Add EXPERIMENTAL modlisp support.

	* server-utils/answer.scm: Use module (ice-9 optargs);
	don't use module (ice-9 q).
	(ish-ref, ish-status, ish-h-k-end, ish-h-v-end, ish-neck): New procs.
	(http-ish): New vector.
	(tree<-header-proc): New proc.
	(tree<-header-components): Delete proc.
	(string<-headers): Take optional arg ‘style’; use ‘tree<-header-proc’.
	(string<-header-components): Use ‘string<-headers’.
	(mouthpiece): Take optional arg ‘style’; coerce #f ‘status-box’ to '();
	use ‘tree<-header-proc’ to compute local ‘tree<-header’ proc.
	(mouthpiece set-reply-status): Use ‘ish-status’.
	(mouthpiece add-header): Use ‘tree<-header’.
	(mouthpiece send-reply): Use ‘ish-neck’.
	* server-utils/big-dishing-loop.scm (http-hgrok): New vector.
	(make-big-dishing-loop): Take keyword arg #:style;
	use it to compute local procs ‘hgrok-first-line’, ‘hgrok’.
	(make-big-dishing-loop bdlcore): Use ‘hgrok-first-line’.
	(make-big-dishing-loop handle-request): Use ‘hgrok’.
	* server-utils/modlisp.scm: New file.
	* server-utils/Makefile.am (www_DATA): Add modlisp.
	Suggested by Neil Jerram.

2010-06-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Mark ‘(... answer) string<-header-components’ for removal.

	* server-utils/answer.scm (string<-header-components):
	Add "will be removed" notice to pre-form doc-comment.

2010-06-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	New (... answer) procs: string<-tree, string<-headers

	* server-utils/answer.scm (string<-tree): New proc, exported.
	(string<-headers): Likewise.
	(string<-header-components): Use ‘string<-tree’.

2010-06-21  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build] Use (ice-9 optargs); invert sense of ‘optargs-kw’ kludge.

	* server-utils/big-dishing-loop.scm:
	Use (ice-9 optargs); don't use (ice-9 optargs-kw).
	* server-utils/cookies.scm: Likewise.

2010-06-20  Thien-Thi Nguyen  <ttn@gnuvola.org>

	New (... answer) procs: flat-length, tree-flat-length!

	* server-utils/answer.scm: Use module (ice-9 q).
	(flat-length): New object property, exported.
	(tree-flat-length!): New proc, exported.
	(length/tree<-header-components): Delete proc.
	(tree<-header-components): New proc.
	(string<-header-components): Use ‘tree<-header-components’.
	(mouthpiece add-header): Likewise; use ‘tree-flat-length!’.
	(mouthpiece add-content): Use ‘tree-flat-length!’.

2010-06-19  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[int] Use internal abstraction more.

	* server-utils/answer.scm (mouthpiece set-reply-status:success):
	Use internal proc ‘set-reply-status!’ directly.

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

	Release: 2.27

2010-01-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop `make-big-dishing-loop' keyword arg `#:GET-upath'.

	* server-utils/big-dishing-loop.scm
	(make-big-dishing-loop): No longer take #:GET-upath.

2010-01-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop (www data http-status) exports `*http-status*', `*http-status*-META'.

	* data/http-status.scm (*http-status*-META): Delete.
	(*http-status*): No longer export.

2010-01-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Drop module (www data content-type).

	* server-utils/filesystem.scm: Update autoload trigger
	for module (www data mime-types) to be `mime-types<-extension'.
	(filename->content-type): No longer seed table on first call.
	(TABLE-OK?): Delete boolean.
	* data/Makefile.am (www_DATA): Remove content-type.
	(install-data-hook): New target.
	* data/content-type.scm: Delete file.

2010-01-11  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Don't use `return-it'.

	* server-utils/big-dishing-loop.scm
	(make-big-dishing-loop child): Don't use `return-it'.

2009-06-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Release: 2.26

2009-06-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	[build int] Specify Automake options in configure.in, not Makefile.am.

	* Makefile.am (AUTOMAKE_OPTIONS): Delete var.
	* data/Makefile.am (AUTOMAKE_OPTIONS): Likewise.
	* server-utils/Makefile.am (AUTOMAKE_OPTIONS): Likewise.

2009-06-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Use SRFI-13 `substring/shared', not `make-shared-substring'.

	* http.scm: Use module (srfi srfi-13).
	(subs): Delete proc alias.
	* server-utils/cookies.scm: Likewise.
	* server-utils/filesystem.scm: From module (srfi srfi-13),
	select also `substring/shared', renaming to `subs'.
	(subs): Delete proc alias.

2009-06-29  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Make `cleanup-filename' handle edge cases more consistently.

	* server-utils/filesystem.scm: Don't use module (ice-9 regex);
	from module (srifi srfi-13), also select `string=', `string-suffix?',
	`string-tokenize', `string-join'; use module (srfi srfi-14).
	(clean-parent-rx): Delete regexp.
	(clean-dot-rx, clean-double-slash-rx): Likewise.
	(+not-slash+): New data structure (charset).
	(cleanup-filename): Rewrite.

2009-06-26  Thien-Thi Nguyen  <ttn@gnuvola.org>

	Fix bug: Make `access-forbidden?-proc' allow "filename is docroot".

	* server-utils/filesystem.scm: Use module (srfi srfi-13).
	(access-forbidden?-proc): Fix OBOE: Don't fail
	if the filename is exactly the same as the docroot.

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

	[int] Consolidate some ChangeLog files.

	* ChangeLog-data: Rename from data/ChangeLog.
	* ChangeLog-server-utils: Rename from server-utils/ChangeLog.
	* Makefile.am (EXTRA_DIST): Also distribute the ChangeLog-foo files.

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

	Release: 2.25

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

	[int] Use (srfi srf-13) more.

	* cgi.scm (subs): Delete proc alias.
	(env-extraction-methods): Use `substring/shared' directly.
	(make-ccc): Likewise.  Also, use `string-ci='.

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

	Make `cgi:init' handle optional arg for specifying `uploads-lazy'.

	* cgi.scm: Don't use module (ice-9 regex);
	autoload module (www server-utils form-2-form).
	(fs, updated-alist, parse-form-multipart): Delete procs.
	(make-ccc init!): Keep track of "pre-squeezed" upload file contents
	option; if pre-squeezed, construct backward compatible string w/
	object properties for the uploads collation.
	(make-ccc): For #:init pass args to `init!'.
	(cgi:init): Accept rest-arg `opt'; pass it to `ONE #:init!'.
	(cgi:uploads): Update pre-form doc comment; nfc.

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

	[int] Make (www cgi) use (www server-utils parse-request).

	* cgi.scm: Autoload module (www server-utils parse-request);
	don't use modules (www url-coding), (ice-9 rw).
	(collate, ws/comma-split): New procs.
	(read-n-bytes, split): Delete procs.
	(env-extraction-methods): Use `ws/comma-split'.
	(parse-form): Delete proc.
	(make-ccc init!): Use `read-body', `alist<-query', `collate'.

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

	Fix bug: For (www cgi), don't mix query string and form data.

	This regression was introduced in Guile-WWW 2.1.

	* cgi.scm (make-ccc init!): Ignore query-string.

2009-05-24  Thien-Thi Nguyen  <ttn@gnuvola.org>

	New (www server-utils cookies) proc: simple-parse-cookies

	* cgi.scm: Autoload (www server-utils cookies).
	(get-cookies): Delete proc.
	(make-ccc init!): Use `simple-parse-cookies'.

2009-05-24  Thien-Thi Nguyen  <ttn@gnuvola.org>

	New (www cgi) proc: cgi:cookie-names

	* cgi.scm (cgi:cookie-names): New proc, exported.

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

	Use `(ice-9 and-let-star) and-let*'.

	* cgi.scm: Use module (ice-9 and-let-star).
	(updated-alist): Use `and-let*'.
	(env-extraction-methods server-sw-info): Likewise.
	(env-extraction-methods server-pr-info): Likewise.
	(parse-form-multipart get-pair): Likewise.
	(make-ccc init!): Likewise.
	(make-ccc uploads): Likewise.

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

	Use `string-null?'.

	* http.scm (http:request): Use `string-null?'.

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

	Use `zero?'.

	* cgi.scm (make-ccc init!): Use `zero?'.
	* http.scm (http:request): Likewise.

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

	New (www http) proc: http:connect.

	* http.scm (connection-table): Delete data structure.
	(add-open-connection!, get-open-connection): Delete procs.
	(http:connect): New proc, exported.
	(http:open): Use `http:connect'.

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

	Clean up `socket' calls.

	* http.scm (http:open): Use `protoent:proto',
	`hostent:addr-list' and `PF_INET'.

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

	Fix bug introduced in 2.22, change:
	Move scheme files under source/:
	For doc extraction, don't search for module commentary.

	* utcsec.scm: Move commentary to ../doc/guile-info.twerp.

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

	Move scheme files under source/.

	Here, $(prev)/foo stands for ../foo.
	* Makefile.am: New file.
	* cgi.scm: Rename from $(prev)/cgi.scm.
	* http.scm: Rename from $(prev)/http.scm.
	* https.scm: Rename from $(prev)/https.scm.
	* main.scm: Rename from $(prev)/main.scm.
	* url-coding.scm: Rename from $(prev)/url-coding.scm.
	* url.scm: Rename from $(prev)/url.scm.
	* utcsec.scm: Rename from $(prev)/utcsec.scm.


Copyright (C) 2010, 2011, 2012, 2013, 2014 Thien-Thi Nguyen

Copying and distribution of this file, with or without modification,
are permitted provided the copyright notice and this notice are preserved.
