summaryrefslogtreecommitdiffabout
path: root/src/cgi_gateway.cc
authorMichael Krelin <hacker@klever.net>2020-10-07 22:52:19 (UTC)
committer Michael Krelin <hacker@klever.net>2020-10-07 22:52:19 (UTC)
commitc561689bf162fb22997bd88f4392f222f151c950 (patch) (side-by-side diff)
treece4656e92c379f7089f4bb72a4b10d781b61211e /src/cgi_gateway.cc
parent3a4530372bc95d728dbddbac788f2c1f2d03a030 (diff)
downloadkingate-master.zip
kingate-master.tar.gz
kingate-master.tar.bz2
missing includesHEADmaster
Diffstat (limited to 'src/cgi_gateway.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--src/cgi_gateway.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/cgi_gateway.cc b/src/cgi_gateway.cc
index a2681aa..3763654 100644
--- a/src/cgi_gateway.cc
+++ b/src/cgi_gateway.cc
@@ -1,67 +1,68 @@
#include <errno.h>
#include <ctype.h>
#include <sstream>
+#include <cstring>
#include "kingate/cgi_gateway.h"
#include "kingate/util.h"
#include "kingate/exception.h"
#include "config.h"
#ifdef HAVE_MIMETIC
# include <mimetic/mimeentity.h>
# include <mimetic/parser/itparser.h>
#endif /* HAVE_MIMETIC */
namespace kingate {
#ifdef HAVE_MIMETIC
using mimetic::MimeEntity;
struct TornMimeEntity : public MimeEntity {
typedef istreambuf_iterator<char> it_type;
typedef it_type::iterator_category it_cat;
struct IParser : public mimetic::IteratorParser<it_type,it_cat> {
typedef mimetic::IteratorParser<it_type,it_cat> BT;
IParser(MimeEntity& me)
: BT::IteratorParser<it_type,it_cat>(me) { }
void loadHeader(it_type bit,it_type eit) {
m_bit = bit; m_eit = eit;
BT::loadHeader();
}
void loadBody(it_type bit,it_type eit) {
m_bit = bit; m_eit = eit;
BT::loadBody();
}
};
void load(istream& hs,istream& bs,int mask=0) {
IParser prs(*this);
prs.iMask(mask);
prs.loadHeader(it_type(hs),it_type());
prs.loadBody(it_type(bs),it_type());
}
};
#endif /* HAVE_MIMETIC */
static string empty_string;
cgi_gateway::basic_file_t::~basic_file_t() { }
class string_file_t : public cgi_gateway::basic_file_t {
public:
string _file_name;
string _content_type;
stringstream _content;
string_file_t(const string& fn,const string& ct,const string& s)
: _file_name(fn), _content_type(ct), _content(s,ios::in) { }
const string& filename() const { return _file_name; }
const string& content_type() const { return _content_type; }
istream& content() { return _content; }
};
cgi_gateway::cgi_gateway(cgi_interface& ci,bool parsebody)
: iface(ci), b_parsed_content(false) {
// Fetch GET content
try {
string qs = get_meta("QUERY_STRING");
parse_query(qs,get);
}catch(exception_notfound& enf) { }
if(parsebody)