summaryrefslogtreecommitdiff
path: root/reqp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'reqp.cpp')
-rw-r--r--[-rwxr-xr-x]reqp.cpp199
1 files changed, 59 insertions, 140 deletions
diff --git a/reqp.cpp b/reqp.cpp
index 4730477..52de971 100755..100644
--- a/reqp.cpp
+++ b/reqp.cpp
@@ -4,46 +4,43 @@
#define REQP_CXX
#include "reqp.h"
-#include "s_chat.h"
-#include "s_html.h"
-#include "s_mutx.h"
-#include "s_sock.h"
-#include "s_tool.h"
+#include "CHAT.h"
+#include "HTML.h"
+#include "MUTX.h"
+
using namespace std;
// inititialization of static members.
string reqp::HTTP_CODEOK = "HTTP/1.1 200 OK\n";
string reqp::HTTP_SERVER = "Server: yChat (Unix)\n";
string reqp::HTTP_CONTAC = "Contact: www.yChat.org\n";
-string reqp::HTTP_CACHEC = "Cache-control: no-cache\n";
+string reqp::HTTP_CACHEC = "Cash-control: no-cache\n";
string reqp::HTTP_CONNEC = "Connection: keep-alive\n";
-string reqp::HTTP_COTYPE = "Content-Type: ";
+string reqp::HTTP_COTYPE = "Content-Type: text/html\n\n";
reqp::reqp( )
{
+#ifdef VERBOSE
+ cout << "reqp::reqp()" << endl;
+#endif
}
string
-reqp::get_url( thrd* p_thrd, string s_req, map_string &map_params )
+reqp::get_url( string s_req, map_string &map_params )
{
- auto unsigned int pos;
- string s_ret ( "" );
- string s_vars( "" );
- auto int i_request;
-
- i_request= ( s_req.find("GET",0) != string::npos ) ? RQ_GET : RQ_POST;
-
- pos = s_req.find( "HTTP", 0 );
+#ifdef VERBOSE_
+ pthread_mutex_lock ( &MUTX::get().mut_stdout );
+ cout << "reqp::get_url( s_req )" << endl;
+ pthread_mutex_unlock( &MUTX::get().mut_stdout );
+#endif
- if( i_request == RQ_GET )
- s_ret.append( s_req.substr( 5, pos-6 ) );
- else
- s_ret.append( s_req.substr( 6, pos-7 ) );
+ auto unsigned int pos = s_req.find( "HTTP", 0 );
+ string s_ret = s_req.substr( 5, pos-6 );
// remove ".." from the request.
do
{
- pos = s_ret.find( "../", 0 );
+ pos = s_ret.find( "..", 0 );
if ( pos == string::npos )
break;
@@ -53,57 +50,37 @@ reqp::get_url( thrd* p_thrd, string s_req, map_string &map_params )
while( true );
// do not add the string behind "?" tp s_ret and add all params behind "?" to map_params.
- if( i_request == RQ_GET )
- pos = s_ret.find( "?", 0 );
- else
- pos = s_req.find("\r\n\r\n", 0);
-
- auto string s_params( "" );
+ pos = s_ret.find( "?", 0 );
if ( pos != string::npos )
{
- if( i_request == RQ_GET )
- s_params.append( s_ret.substr( pos+1, s_ret.length() -pos-1 ) );
-
- else
- s_params = s_req.substr( pos+4, s_req.length() -pos-1 );
-
+ auto string s_params = s_ret.substr( pos+1, s_ret.length() -pos-1 );
s_ret = s_ret.substr( 0, pos );
- }
- if ( i_request == RQ_POST && s_params.empty() )
- {
- char c_req[READBUF];
- read ( p_thrd->get_sock() , c_req, READBUF );
- s_params = string( strstr( c_req, "event" ) );
- }
+ auto unsigned int pos2;
+ do
+ {
+ pos = s_params.find( "=", 0 );
+ if ( pos == string::npos )
+ break;
- auto unsigned int pos2;
- do
- {
- pos = s_params.find( "=", 0 );
- if ( pos == string::npos )
- break;
+ pos2 = s_params.find( "&", 0 );
+ if ( pos2 == string::npos )
+ {
+ map_params[ s_params.substr( 0, pos ) ] = s_params.substr( pos+1, s_params.length()-pos-1 );
+ break;
+ }
- pos2 = s_params.find( "&", 0 );
- if ( pos2 == string::npos )
- {
- auto string sValue( s_params.substr(pos+1, s_params.length()-pos-1) );
- auto string tmpstr( url_decode(sValue) );
- map_params[ s_params.substr( 0, pos ) ] = tmpstr;
- break;
+ map_params[ s_params.substr( 0, pos ) ] = s_params.substr( pos+1, pos2-pos-1 );
+ s_params = s_params.substr( pos2+1, s_params.length()-pos2-1 );
}
+ while( true );
- auto string s_temp= s_params.substr( pos+1, pos2-pos-1 );
- map_params[ s_params.substr( 0, pos ) ] = url_decode(s_temp);
-
- s_params = s_params.substr( pos2+1, s_params.length()-pos2-1 );
}
- while( true );
-#ifdef VERBOSE
- pthread_mutex_lock ( &s_mutx::get().mut_stdout );
+#ifdef _VERBOSE
+ pthread_mutex_lock ( &MUTX::get().mut_stdout );
cout << REQUEST << s_ret << endl;
- pthread_mutex_unlock( &s_mutx::get().mut_stdout );
+ pthread_mutex_unlock( &MUTX::get().mut_stdout );
#endif
map_params["request"] = s_ret;
@@ -112,67 +89,14 @@ reqp::get_url( thrd* p_thrd, string s_req, map_string &map_params )
}
string
-reqp::getContentType( string s_file )
-{
- string s_ext=s_tool::getExtension( s_file );
-
- if(s_ext=="")
- s_ext="DEFAULT";
-
- return s_conf::get().get_val( "CT_"+s_ext );
-}
-
-int
-reqp::htoi(string *s)
-{
- int value;
- int c;
-
- c=s->c_str()[0];
- if(isupper(c))
- c=tolower(c);
-
- value=(c>='0' && c<='9'?c-'0':c-'a'+10)*16;
-
- c=s->c_str()[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_str )
-{
- auto string sDest="";
- int len = s_str.size();
-
- for(int i=0;i<len;i++)
- {
- char ch = s_str.at(i);
- if(ch=='+')
- {
- sDest+=" ";
- }
- else if(ch=='%')
- {
- auto string sTmp=s_str.substr(i+1,2);
- ch=(char)htoi(&sTmp);
- sDest+=ch;
- i+=2;
-
- }
- else
-
- sDest+=ch;
- }
- return sDest;
-}
-
-string
reqp::get_from_header( string s_req, string s_hdr )
{
+#ifdef VERBOSE_
+ pthread_mutex_lock ( &MUTX::get().mut_stdout );
+ cout << "reqp::get_from_header( s_req, \"" << s_hdr << "\" )" << endl;
+ pthread_mutex_unlock( &MUTX::get().mut_stdout );
+#endif
+
auto unsigned int pos[2];
pos[0] = s_req.find( s_hdr, 0 );
pos[1] = s_req.find( "\n", pos[0] );
@@ -182,19 +106,22 @@ reqp::get_from_header( string s_req, string s_hdr )
}
string
-reqp::parse( thrd* p_thrd, string s_req, map_string &map_params )
+reqp::parse( string s_req, map_string &map_params )
{
-
- // store all request informations in map_params. store the url in
- // map_params["request"].
- get_url( p_thrd, s_req, map_params );
+#ifdef VERBOSE_
+ pthread_mutex_lock ( &MUTX::get().mut_stdout );
+ cout << "reqp::parse( s_req )" << endl;
+ pthread_mutex_unlock( &MUTX::get().mut_stdout );
+#endif
// create the http header.
string s_rep( HTTP_CODEOK ); s_rep.append( HTTP_SERVER );
s_rep.append( HTTP_CONTAC ); s_rep.append( HTTP_CACHEC );
s_rep.append( HTTP_CONNEC ); s_rep.append( HTTP_COTYPE );
- s_rep.append( getContentType( map_params["request"] ) ); s_rep.append("\n\n");
+ // store all request informations in map_params. store the url in
+ // map_params["request"].
+ get_url( s_req, map_params );
// check the event variable.
string s_event( map_params["event"] );
@@ -203,41 +130,33 @@ reqp::parse( thrd* p_thrd, string s_req, map_string &map_params )
// login procedure.
if ( s_event == "login" )
{
- s_chat::get().login( map_params );
+ CHAT::get().login( map_params );
}
else
{
bool b_found;
- user* p_user = s_chat::get().get_user( map_params["nick"], b_found );
+ user* u_user = CHAT::get().get_user( map_params["nick"], b_found );
if ( ! b_found )
{
map_params["INFO"] = E_NOTONL;
- map_params["request"] = s_conf::get().get_val( "STARTMPL" ); // redirect to the startpage.
+ map_params["request"] = CONF::get().get_val( "STARTMPL" ); // redirect to the startpage.
}
// if a message post.
else if ( s_event == "post" )
- s_chat::get().post( p_user, map_params );
-
- // if a chat stream
- else if ( s_event == "stream" )
- {
- string s_msg(s_html::get().parse( map_params ) );
- p_user->msg_post( &s_msg);
- s_sock::get().chat_stream( p_thrd->get_sock(), p_user, map_params );
- }
+ CHAT::get().post( u_user, map_params );
// if a request for the online list of the active room.
else if ( s_event == "online" )
- s_html::get().online_list( p_user, map_params );
+ HTML::get().online_list( u_user, map_params );
}
}
// parse and get the requested html-template and also use
// the values stored in map_params for %%KEY%% substituations.
- s_rep.append( s_html::get().parse( map_params ) );
+ s_rep.append( HTML::get().parse( map_params ) );
// return the parsed html-template.
return s_rep;