Process CGI output. OutStream is normally the socket returning
data to the HTTP client. CGIStream is the stream the (Prolog)
code writes to. The CGIStream provides the following functions:
- At the end of the header, it calls Hook using
call(Hook, header, Stream)
, where Stream is a stream holding
the buffered header.
- If the stream is closed, it calls Hook using
call(Hook, data, Stream)
, where Stream holds the buffered
data.
The stream calls Hook, adding the event and CGIStream to the
closure. Defined events are:
- header
- Called if the header is complete. Typically it uses
cgi_property/2 to extract the collected header and combines
these with the request and policies to decide on encoding,
transfer-encoding, connection parameters and the complete
header (as a Prolog term). Typically it uses cgi_set/2 to
associate these with the stream.
- send_header
- Called if the HTTP header must be sent. This is immediately
after setting the transfer encoding to
chunked
or when the
CGI stream is closed. Typically it requests the current
header, optionally the content-length and sends the header
to the original (client) stream.
- close
- Called from close/1 on the CGI stream after everything is
complete.
The predicates cgi_property/2 and cgi_set/2 can be used to
control the stream and store status info. Terms are stored as
Prolog records and can thus be transferred between threads.