USING: accessors alien.enums alien.syntax combinators combinators.smart io io.directories io.encodings.binary io.files io.files.info.unix io.sockets kernel namespaces pack prettyprint ; IN: fastcgi SYMBOL: fcgi-server CONSTANT: socket-path "/chroot/web/var/run/factor.sock" TUPLE: fcgi-header version type request-id content-length padding-length reserved ; ENUM: fcgi-header-types { FCGI_BEGIN_REQUEST 1 } FCGI_ABORT_REQUEST FCGI_END_REQUEST FCGI_PARAMS FCGI_STDIN FCGI_STDOUT FCGI_STDERR FCGI_DATA FCGI_GET_VALUES FCGI_GET_VALUES_RESULT FCGI_UNKNOWN_TYPE { FCGI_MAXTYPE 11 } ; : allow-permissions ( -- ) socket-path OCT: 777 set-file-permissions ; : delete-if-exists ( file -- ) dup exists? [ delete-file ] [ drop ] if ; : make-socket ( -- ) socket-path [ delete-if-exists ] keep binary fcgi-server set allow-permissions ; : get-header ( stream -- header ) [ "CCSSCC" read-packed-be ] with-input-stream* [ fcgi-header boa ] input> { { FCGI_BEGIN_REQUEST enum>number [ process-begin-request ] } } case ; : get-request ( -- x ) fcgi-server get accept drop get-header ;