/usr/lib/swipl/library/http/http_stream.pl
AllApplicationManualNameSummaryHelp

  • library
    • http
      • http_dispatch.pl -- Dispatch requests in the HTTP server
      • mimetype.pl -- Determine mime-type for a file
      • http_path.pl -- Abstract specification of HTTP server locations
      • http_host.pl -- Obtain public server location
      • thread_httpd.pl -- Threaded HTTP server
      • http_wrapper.pl -- Server processing of an HTTP request
      • http_header.pl -- Handling HTTP headers
      • html_write.pl -- Write HTML text
      • html_quasiquotations.pl -- HTML quasi quotations
      • http_exception.pl -- Map Prolog exceptions to HTTP errors
      • mimepack.pl -- Create a MIME message
      • http_stream.pl -- HTTP Streams
        • encoding_filter/3
        • current_transfer_encoding/1
        • encoding_filter/3
        • http_chunked_open/3
        • stream_range_open/3
        • multipart_open/3
        • multipart_open_next/1
        • cgi_open/4
        • cgi_property/2
        • cgi_set/2
        • cgi_discard/1
        • is_cgi_stream/1
        • cgi_statistics/1
      • http_parameters.pl -- Extract parameters (GET and POST) from HTTP requests
      • http_client.pl -- HTTP client library
      • http_open.pl -- HTTP client library
      • http_multipart_plugin.pl -- Multipart form-data plugin
      • http_hook.pl -- HTTP library hooks
      • http_json.pl -- HTTP JSON Plugin module
      • json.pl -- Reading and writing JSON serialization
      • http_cors.pl -- Enable CORS: Cross-Origin Resource Sharing
      • js_write.pl -- Utilities for including JavaScript
      • js_grammar.pl -- JavaScript grammar
      • http_ssl_plugin.pl -- SSL plugin for HTTP libraries
      • http_server_files.pl -- Serve files needed by modules from the server
      • hub.pl -- Manage a hub for websockets
      • websocket.pl -- WebSocket support
      • http_session.pl -- HTTP Session management
      • term_html.pl -- Represent Prolog terms as HTML
      • html_head.pl -- Automatic inclusion of CSS and scripts links
      • jquery.pl -- Provide JQuery
      • http_dyn_workers.pl -- Dynamically schedule HTTP workers.
      • http_authenticate.pl -- Authenticate HTTP connections using 401 headers
      • http_digest.pl -- HTTP Digest authentication
      • http_unix_daemon.pl -- Run SWI-Prolog HTTP server as a Unix system daemon
 cgi_open(+OutStream, -CGIStream, :Hook, +Options) is det
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.