summaryrefslogtreecommitdiffabout
path: root/include/kingate/cgi_gateway.h
Side-by-side diff
Diffstat (limited to 'include/kingate/cgi_gateway.h') (more/less context) (ignore whitespace changes)
-rw-r--r--include/kingate/cgi_gateway.h57
1 files changed, 54 insertions, 3 deletions
diff --git a/include/kingate/cgi_gateway.h b/include/kingate/cgi_gateway.h
index f20d72b..a26b0ae 100644
--- a/include/kingate/cgi_gateway.h
+++ b/include/kingate/cgi_gateway.h
@@ -30,44 +30,81 @@ namespace kingate {
* 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;
/**
+ * Abstract base class for retrieving posted files.
+ */
+ class basic_file_t {
+ public:
+ /**
+ * Retrieve file name.
+ * @return filename
+ */
+ virtual const string& filename() const = 0;
+ /**
+ * Retrieve file content type.
+ * @return content type
+ */
+ virtual const string& content_type() const = 0;
+ /**
+ * Retrieve file contents.
+ * @return reference to the stream for accessing file content.
+ */
+ virtual istream& content() = 0;
+ virtual ~basic_file_t();
+ };
+ typedef basic_file_t *file_t;
+ /**
+ * The map holding information pertaining to files uploaded via post.
+ */
+ typedef multimap<string,file_t> files_t;
+ /**
+ * Files uploaded via post
+ */
+ files_t files;
+ /**
* Cookies passed.
*/
cookies_t cookies;
/**
* Was the stdin content parsed?
*/
bool b_parsed_content;
/**
* @param ci the interface to use.
*/
- cgi_gateway(cgi_interface& ci);
+ cgi_gateway(cgi_interface& ci,bool parsebody = true);
+ virtual ~cgi_gateway() throw();
+
+ /**
+ * Parse request body.
+ */
+ void parse_request_body();
/**
* 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()
@@ -123,36 +160,50 @@ namespace kingate {
* @param n the parameter name.
* @return the parameter contents.
* @see exception_notfound
*/
const 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.
+ * @return the parameter contents.
* @see exception_notfound.
*/
const string& get_param(const string& n) const;
+ /**
+ * Check to see whether the file was uploaded in the request body.
+ * @param n the parameter name.
+ * @return true if yes.
+ */
+ bool has_file(const string& n) const;
+ /**
+ * Retrieve the file uploaded in the request body.
+ * @param n the parameter name.
+ * @return the file.
+ * @see exception_notfound.
+ */
+ const file_t get_file(const string& n) const;
+ file_t get_file(const string& n);
/**
* Retrieve the POST content-type (as passed via CONTENT_TYPE
* environment variable).
* @return the content type.
*/
const string& __deprecated get_content_type() const;
/**
* Retrieve the POST content length (as passed via the
* CONTENT_LENGTH environment variable).
* @return the content length.
*/
unsigned long __deprecated get_content_length() const;
/**
* Check to see whether the content from stdin stream was parsed.
@@ -164,33 +215,33 @@ namespace kingate {
* Retrieve the HTTP header value from the HTTP_ meta-variable.
* (see RFC3875)
* @param hn header field name.
* @return the HTTP header value.
*/
const string& http_request_header(const string& hn) const;
/**
* Retrieve the AUTH_TYPE meta-variable (see RFC3875)
* @return authentication type.
*/
const string& auth_type() const;
/**
* Retrieve the CONTENT_LENGTH meta-variable (see RFC3875)
* @return size of the request message body.
*/
- unsigned long cgi_gateway::content_length() const;
+ unsigned long content_length() const;
/**
* Retrieve the CONTENT_TYPE meta-variable (see RFC3875)
* @return media type of the request message body.
*/
const string& content_type() const;
/**
* Retrieve the GATEWAY_INTERFACE meta-variable (see RFC3875)
* @return the gateway interface dialect.
*/
const string& gateway_interface() const;
/**
* Retrieve the PATH_INFO meta-variable (see RFC3875)
* @return path to be interpreted by the script.
*/
const string& path_info() const;
/**