/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2011, Tomasz Sowa * All rights reserved. * */ #ifndef headerfile_winix_core_postparser #define headerfile_winix_core_postparser #include #include #include "httpsimpleparser.h" #include "requesttypes.h" #include "misc.h" #include "utf8.h" #include "log.h" #include "config.h" class PostParser : public HttpSimpleParser { FCGX_Stream * in; PostTab * post_tab; std::wstring temp_name, temp_value; bool input_as_utf8; size_t log_value_size; protected: virtual int GetChar() { return FCGX_GetChar(in); } void CreateLog(bool param_added) { log << log2 << "Method POST, name: \"" << temp_name << "\""; if( log_value_size > 0 && !IsSubStringNoCase(L"pass", temp_name.c_str()) ) { log << ", value: "; if( temp_value.size() > log_value_size ) log << "(first " << log_value_size << " characters) "; log << "\""; log.LogString(temp_value, log_value_size); log << "\" (size: " << temp_value.size() << ")"; } if( param_added == false ) log << log2 << " (skipped)"; log << log2 << logend; } virtual void Parameter(std::string & name, std::string & value) { if( input_as_utf8 ) { Ezc::UTF8ToWide(name, temp_name); Ezc::UTF8ToWide(value, temp_value); } else { AssignString(name, temp_name); AssignString(value, temp_value); } std::pair res = post_tab->insert( std::make_pair(temp_name, temp_value) ); CreateLog(res.second); } public: PostParser() { input_as_utf8 = false; log_value_size = 0; } void UTF8(bool utf) { input_as_utf8 = utf; } void LogValueSize(size_t s) { log_value_size = s; } void Parse(FCGX_Stream * in_, PostTab & post_tab_) { in = in_; post_tab = &post_tab_; HttpSimpleParser::Parse(); } }; #endif