summaryrefslogtreecommitdiff
path: root/yhttpd/src/reqp.cpp
diff options
context:
space:
mode:
authorPaul Buetow (mars.fritz.box) <paul@buetow.org>2013-12-15 11:49:02 +0100
committerPaul Buetow (mars.fritz.box) <paul@buetow.org>2013-12-15 11:49:02 +0100
commit3a96ab7e91145b367d05e98533b5f426f762f83f (patch)
treeac7758a706066e14b785ab6e5f7071a54baa856b /yhttpd/src/reqp.cpp
parent332d7b2107833018b3ef67b64ffe121bff1ef4fb (diff)
add packagespackages
Diffstat (limited to 'yhttpd/src/reqp.cpp')
-rw-r--r--yhttpd/src/reqp.cpp285
1 files changed, 0 insertions, 285 deletions
diff --git a/yhttpd/src/reqp.cpp b/yhttpd/src/reqp.cpp
deleted file mode 100644
index df9de5d..0000000
--- a/yhttpd/src/reqp.cpp
+++ /dev/null
@@ -1,285 +0,0 @@
-#ifndef REQP_CPP
-#define REQP_CPP
-
-#include "reqp.h"
-#include "tool/tool.h"
-
-using namespace std;
-
-#define HEADER HEADER1 HEADER2 HEADER3 HEADER4 HEADER9
-#define STREAM HEADER5 HEADER6
-
-const string reqp::s_http = HEADER;
-const string reqp::s_http_stream = STREAM;
-const string reqp::s_http_colength = HEADER7;
-const string reqp::s_http_cotype = HEADER8;
-const string reqp::s_http_cotype_add = HEADER8b;
-
-reqp::reqp( )
-{}
-
-void
-reqp::get_request_parameters( string s_parameters, map<string,string>& map_params )
-{
- string s_tmp;
- unsigned i_pos, i_pos2;
-
- while( (i_pos = s_parameters.find("&")) != string::npos )
- {
- s_tmp = s_parameters.substr(0, i_pos );
-
- if ( (i_pos2 = s_tmp.find("=")) != string::npos )
- map_params[ s_tmp.substr(0, i_pos2) ] = tool::replace( s_tmp.substr( i_pos2+1 ), "\\AND", "&");
-
- s_parameters = s_parameters.substr( i_pos + 1 );
- }
-
- // Get the last request parameter, which does not have a "&" on the end!
- if( (i_pos = s_parameters.find("=")) != string::npos )
- map_params[ s_parameters.substr(0, i_pos) ] = s_parameters.substr( i_pos+1 );
-
- //map<string,string>::iterator iter;
- //for ( iter = map_params.begin(); iter != map_params.end(); ++iter )
- //cout << ">>>" << iter->first << "=" << iter->second << endl;
-}
-
-string
-reqp::get_url( string s_req, map<string, string> &map_params, int& i_postpayloadoffset )
-{
- unsigned i_pos, i_pos2;
- string s_vars( "" );
- string s_ret;
- int i_req;
-
- // GET request
- if ( s_req.find("GET") != string::npos)
- {
- // Be sure that the GET request has minimum length
- if ( s_req.length() > 5 )
- {
- // Get rid of "GET /"
- if ( (i_pos = s_req.find("\n")) == string::npos )
- i_pos = s_req.length() - 1;
-
- s_req = s_req.substr(5, i_pos - 5);
-
- // Get HTML site to be displayed
- if ( (i_pos = s_req.find("?")) == string::npos )
- {
- if ( (i_pos2 = s_req.find(" HTTP")) != string::npos )
- s_ret = url_decode( s_req.substr(0, i_pos2));
- }
- else
- {
- s_ret = url_decode( s_req.substr(0, i_pos) );
-
- // Get request parameters:
- if ( (i_pos2 = s_req.find(" HTTP")) != string::npos )
- {
- s_req = url_decode( s_req.substr(i_pos + 1, i_pos2 - i_pos - 1) );
- get_request_parameters( s_req, map_params );
- }
- }
-
- }
- }
-
- // POST request
- else
- {
- if ( (i_pos2 = s_req.find("HTTP")) != string::npos )
- {
- if (i_pos2 > 13)
- {
- s_ret = url_decode( s_req.substr(6,i_pos2-7) );
-
- //wrap::system_message(s_req);
- //wrap::system_message(string("data offset=") + tool::int2string(i_postpayloadoffset));
- i_pos = s_req.find("event=",i_postpayloadoffset );
- if(i_pos != string::npos)
- {
- get_request_parameters( url_decode( s_req.substr(i_pos) ), map_params);
- }
- }
- }
-
- }
-
-#ifdef VERBOSE
- wrap::system_message( REQUEST + s_ret );
-#endif
-
- if ( s_ret.empty() )
- s_ret = wrap::CONF->get_elem( "httpd.startsite" );
-
- else
- s_ret = remove_dots(s_ret);
-
- map_params["request"] = s_ret;
-
- return s_ret;
-}
-
-string
-reqp::get_content_type(string &s_file)
-{
- string s_ext(tool::get_extension( s_file ));
-
- if( s_ext == "" )
- s_ext = "default";
-
- return wrap::CONF->get_elem( "httpd.contenttypes." + s_ext );
-}
-
-void
-reqp::parse_headers( string s_req, map<string,string> &map_params )
-{
- int pos = s_req.find("\n");
-
- if (pos != string::npos)
- {
- map_params["QUERY_STRING"] = tool::trim(s_req.substr(0,pos-1));
-
- int pos2;
- do
- {
- string s_line( s_req.substr(0, pos) );
- pos2 = s_line.find(":");
-
- if (pos2 != string::npos && s_line.length() > pos2+1)
- map_params[ tool::trim(s_line.substr(0, pos2)) ] = tool::trim(s_line.substr(pos2+1));
-
- s_req = s_req.substr( s_line.size() + 1 );
- pos = s_req.find("\n");
- }
- while( pos != string::npos);
- } // if
-}
-
-int
-reqp::htoi(string *p_str)
-{
- int value, c;
- c = p_str->at(0);
-
- if( isupper(c) )
- c = tolower(c);
-
- value = (c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16;
-
- c = p_str->at(1);
-
- if( isupper(c) )
- c = tolower(c);
-
- value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10;
-
- return value;
-}
-
-string
-reqp::url_decode( string s_url )
-{
- string s_dest = "";
- int i_len = s_url.size();
- int i_prv = i_len - 2;
-
- char c;
- for( int i = 0; i < i_len; ++i)
- {
- c = s_url.at(i);
- if( c == '+' )
- {
- s_dest += " ";
- }
- else if (c == '%' && i < i_prv)
- {
- string s_tmp = s_url.substr(i+1, 2);
- c = (char) htoi(&s_tmp);
- s_dest += c;
- i += 2;
- }
- else
- {
- s_dest += c;
- }
- }
-
- return s_dest;
-}
-
-string
-reqp::get_from_header( string s_req, string s_hdr )
-{
- unsigned i_pos[2];
- if ( (i_pos[0] = s_req.find( s_hdr, 0 )) == string::npos )
- return "";
-
- if ( (i_pos[1] = s_req.find( "\n", i_pos[0]) ) == string::npos )
- return "";
-
- unsigned i_len = s_hdr.length();
- return s_req.substr( i_pos[0] + i_len, i_pos[1] - i_pos[0] - i_len - 1 );
-}
-
-string
-reqp::parse( socketcontainer *p_sock, string s_req, map<string,string> &map_params, int &i_postpayloadoffset )
-{
-
- // store all request informations in map_params. store the url in
- // map_params["request"].
- get_url( s_req, map_params, i_postpayloadoffset );
-
- parse_headers( s_req, map_params );
- string s_event( map_params["event"] );
-
- map_params["content-type"] = get_content_type( map_params["request"] );
-
- string s_rep( "" );
-
-
- if ( wrap::CONF->get_elem("httpd.enablecgi").compare("true") == 0 &&
- string::npos != map_params["request"].find(".cgi") )
- {
- s_rep.append( tool::shell_command(
- wrap::CONF->get_elem("httpd.templatedir") + map_params["request"],
- METH_RETSTRING ) );
- }
- else
- {
- // parse and get the requested html-template and also use
- // the values stored in map_params for %%KEY%% substituations.
- s_rep.append( wrap::HTML->parse( map_params ) );
- }
-
- // create the http header.
-
- string s_resp(s_http);
- if ( s_event.compare("stream") == 0 )
- s_resp.append( s_http_stream );
-
- s_resp.append( s_http_colength + tool::int2string(s_rep.size()) + "\r\n" +
- s_http_cotype + map_params["content-type"] +
- s_http_cotype_add + "\r\n" );
-
- s_resp.append(s_rep);
-
-
- // return the parsed html-template.
- return s_resp;
-}
-
-
-string
-reqp::remove_dots( string s_ret )
-{
- // remove ".." from the request.
- unsigned i_pos;
-
- if ( (i_pos = s_ret.find( ".." )) != string::npos )
- return remove_dots(s_ret.substr(0, i_pos));
-
- return s_ret;
-}
-
-#endif