#ifndef __SITECING_SITECING_INTERFACE_CGI_H #define __SITECING_SITECING_INTERFACE_CGI_H #include #include #include #include #include #include "sitecing/sitecing_interface.h" #include "sitecing/sitespace.h" /** * @file * @brief The sitecing_interface_cgi class declaration. */ namespace sitecing { using namespace std; /** * The interface to site-C-ing core for the CGI component. */ class sitecing_interface_cgi : public sitecing_interface { public: /** * Pointer to the CGI gateway interface. */ kingate::cgi_gateway* cgigw; /** * The list of headers to spit out. */ kingate::headers headers; /** * Here is where we prebuffer output. */ stringbuf prebuffer; /** * Output stream, initially going to prebuffer. */ ostream outs; /** * Have headers been sent yet? */ bool headers_flushed; /** * Pointer to the sitespace object. */ sitespace *ss; // XXX: or does it belong to the generic interface? or should this 'generic' interface exist at all? /** * @param s Pointer to the sitespace object. */ sitecing_interface_cgi(sitespace *s); /** * Set up interface for the (possibly, new) cgi gateway object, * reset headers, empty buffer, etc. */ void prepare(kingate::cgi_gateway *cg); /** * Flush output stream. */ void flush(bool keep_buffering=false); /** * Send headers to the output stream, if we haven't yet. */ void flush_headers(); /** * Are we buffering now? */ bool is_buffering(); /** * Control output buffering. */ void set_buffering(bool do_buffer); }; } #endif /* __SITECING_SITECING_INTERFACE_CGI_H */