Diffstat (limited to 'include/kingate/cgi_gateway.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | include/kingate/cgi_gateway.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/include/kingate/cgi_gateway.h b/include/kingate/cgi_gateway.h new file mode 100644 index 0000000..f683580 --- a/dev/null +++ b/include/kingate/cgi_gateway.h @@ -0,0 +1,164 @@ +#ifndef __KINGATE_CGI_GATEWAY_H +#define __KINGATE_CGI_GATEWAY_H + +#include <map> +#include "kingate/cgi_interface.h" + +/** + * @file + * @brief the cgi_gateway -- main interface to CGI. + */ + +namespace kingate { + using namespace std; + + /** + * The main class interfacing with the CGI environment. + */ + class cgi_gateway { + public: + /** + * The interface to CGI environment (e.g. fastcgi). + */ + cgi_interface& iface; + /** + * The type describing map holding parameters parsed from query string or input. + */ + typedef multimap<string,string> params_t; + /** + * The GET-passed parameters. + */ + params_t get; + /** + * The POST-passed parameters. + */ + params_t post; + /** + * Was the stdin content parsed? + */ + bool b_parsed_content; + + /** + * @param ci the interface to use. + */ + cgi_gateway(cgi_interface& ci); + + /** + * Check whether there is an 'environment' meta-variable with specific name + * passed to CGI. + * @param n variable name. + * @return true if yes. + * @see cgi_interface::has_meta() + * @see get_meta() + */ + bool has_meta(const string& n) const { return iface.has_meta(n); } + /** + * Retrieve the 'environment' meta-variable value. + * @param n variable name. + * @return variable contents. + * @see exception_notfound + * @see cgi_interface::get_meta() + */ + string get_meta(const string& n) const { return iface.get_meta(n); } + + /** + * fetch reference to the 'stdin' stream. + * @return the reference to the corresponding istream object. + * @see cgi_interface::in() + */ + istream& in() { return iface.in(); } + /** + * fetch reference to the 'stdout' stream. + * @return the reference to the corresponding ostream object. + * @see cgi_interface::out() + */ + ostream& out() { return iface.out(); } + /** + * fetch reference to the 'stderr' stream. + * @return the reference to the corresponding ostream object. + * @see cgi_interface::err() + */ + ostream& err() { return iface.err(); } + /** + * cast to the ostream -- fetches the reference to the 'stdout' + * stream. + * @see out() + */ + operator ostream& (void) { return out(); } + + /** + * Check to see whether the parameter was passed via GET. + * @param n the parameter name. + * @return true if yes. + */ + bool has_GET(const string& n) const; + /** + * Retrieve the parameter passed via GET. + * @param n the parameter name. + * @return the parameter contents. + * @see exception_notfound + */ + string get_GET(const string& n) const; + /** + * Check to see whether the parameter was passed via POST. + * @param n the parameter name. + * @return true if yes. + */ + bool has_POST(const string& n) const; + /** + * Retrieve the POST-parameter. + * @param n the parameter name. + * @return the parameter contents. + * @see exception_notfound + */ + string get_POST(const string& n) const; + /** + * Check to see whether the parameter was passed either via POST or + * GET. + * @param n the parameter name. + * @return true if yes. + */ + bool has_param(const string& n) const; + /** + * Retrieve the parameter passed either via POST or GET + * (GET-parameter takes precedence). + * @param n the parameter name. + * @return true if yes. + * @see exception_notfound. + */ + string get_param(const string& n) const; + + /** + * Retrieve the POST content-type (as passed via CONTENT_TYPE + * environment variable). + * @return the content type. + */ + const string& get_content_type() const; + /** + * Retrieve the POST content length (as passed via the + * CONTENT_LENGTH environment variable). + * @return the content length. + */ + unsigned long get_content_length() const; + + /** + * Check to see whether the content from stdin stream was parsed. + * @return true if yes. + */ + bool is_content_parsed() const { return b_parsed_content; } + private: + /** + * Parse the query string, putting the parameters into the map + * specified. + * @param q the query string. + * @param p destination parameters map. + */ + static void parse_query(string& q,params_t& p); + }; + +} + +#endif /* __KINGATE_CGI_GATEWAY_H */ +/* + * vim:set ft=cpp: + */ |