author | Michael Krelin <hacker@klever.net> | 2005-10-24 21:13:21 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2005-10-24 21:13:21 (UTC) |
commit | 03b321d88a199c6390eb8ce51ac4b1a96b3535dd (patch) (side-by-side diff) | |
tree | db45823c37b204ec0d8028b26fede362b62cf4ac /src | |
parent | db69589bdc32c60b1fce6700a35d4126058bf7bc (diff) | |
download | kingate-03b321d88a199c6390eb8ce51ac4b1a96b3535dd.zip kingate-03b321d88a199c6390eb8ce51ac4b1a96b3535dd.tar.gz kingate-03b321d88a199c6390eb8ce51ac4b1a96b3535dd.tar.bz2 |
fixed compilation withouth mimetic support
-rw-r--r-- | src/cgi_gateway.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/cgi_gateway.cc b/src/cgi_gateway.cc index 1706679..a2681aa 100644 --- a/src/cgi_gateway.cc +++ b/src/cgi_gateway.cc @@ -1,112 +1,113 @@ #include <errno.h> #include <ctype.h> #include <sstream> #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 { - using mimetic::MimeEntity; #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) parse_request_body(); // Parse cookies try { cookies.parse_cookies(get_meta("HTTP_COOKIE")); }catch(exception_notfound& enf) { } } cgi_gateway::~cgi_gateway() throw() { for(files_t::iterator i=files.begin();i!=files.end();++i) delete i->second; files.clear(); } void cgi_gateway::parse_request_body() { if(b_parsed_content) throw konforka::exception(CODEPOINT,"request body is already parsed"); // Fetch POST content if(!strncasecmp( content_type().c_str(), "application/x-www-form-urlencoded", sizeof("application/x-www-form-urlencoded")-1) ) { unsigned long cl = content_length(); if(cl) { char * tmp = new char[cl]; iface.in().read(tmp,cl); string qs(tmp,cl); delete tmp; parse_query(qs,post); } b_parsed_content = true; } #ifdef HAVE_MIMETIC else if(!strncasecmp( content_type().c_str(), "multipart/form-data", sizeof("multipart/form-data")-1) ) { stringstream h; h << "Content-Type: " << content_type() << "\r\n" << "Content-Length: " << content_length() << "\r\n\n"; TornMimeEntity me; me.load(h,iface.in(),0); mimetic::MimeEntityList& parts = me.body().parts(); for(mimetic::MimeEntityList::iterator i=parts.begin();i!=parts.end();++i) { MimeEntity *p = *i; const mimetic::ContentDisposition& cd = p->header().contentDisposition(); |