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

  • library
    • http
      • http_unix_daemon.pl
      • thread_httpd.pl
      • http_wrapper.pl -- Server processing of an HTTP request
      • http_header.pl -- Handling HTTP headers
      • http_stream.pl -- HTTP Streams
        • encoding_filter/3
        • http_chunked_open/3
        • http_is_chunked/1
        • http_chunked_flush/2
        • http_chunked_add_trailer/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
      • http_exception.pl -- Map Prolog exceptions to HTTP errors
      • http_path.pl
      • http_dispatch.pl
      • http_host.pl
      • http_ssl_plugin.pl
      • http_json.pl -- HTTP JSON Plugin module
      • http_client.pl -- HTTP client library
      • json.pl -- Reading and writing JSON serialization
      • http_open.pl -- HTTP client library
      • http_parameters.pl -- Extract parameters (GET and POST) from HTTP requests
      • http_multipart_plugin.pl -- Multipart form-data plugin
      • http_hook.pl -- HTTP library hooks
      • html_write.pl -- Write HTML text
      • html_quasiquotations.pl -- HTML quasi quotations
      • js_write.pl -- Utilities for including JavaScript
      • js_grammar.pl -- JavaScript grammar
      • 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
      • mimetype.pl -- Determine mime-type for a file
      • http_cors.pl -- Enable CORS: Cross-Origin Resource Sharing
      • html_head.pl -- Automatic inclusion of CSS and scripts links
      • jquery.pl -- Provide JQuery
      • term_html.pl -- Represent Prolog terms as HTML
      • http_dyn_workers.pl -- Dynamically schedule HTTP workers.
      • http_files.pl -- Serve plain files from a hierarchy
      • http_dirindex.pl -- HTTP directory listings
 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.