From fffd213c8cba2135afda493d797c41c10354770e Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Sat, 12 Apr 2008 11:38:42 +0000 Subject: big svn cleanup --- src/Sockets/HttpdForm.h | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/Sockets/HttpdForm.h (limited to 'src/Sockets/HttpdForm.h') diff --git a/src/Sockets/HttpdForm.h b/src/Sockets/HttpdForm.h new file mode 100644 index 0000000..962a753 --- /dev/null +++ b/src/Sockets/HttpdForm.h @@ -0,0 +1,118 @@ +/** \file HttpdForm.h - read stdin, parse cgi input + ** + ** Written: 1999-Feb-10 grymse@alhem.net + **/ + +/* +Copyright (C) 1999-2007 Anders Hedstrom + +This library is made available under the terms of the GNU GPL. + +If you would like to use this library in a closed-source application, +a separate license agreement is available. For information about +the closed-source license agreement for the C++ sockets library, +please visit http://www.alhem.net/Sockets/license.html and/or +email license@alhem.net. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#ifndef _SOCKETS_HttpdForm_H +#define _SOCKETS_HttpdForm_H + +#include "sockets-config.h" +#include +#include + +#ifdef SOCKETS_NAMESPACE +namespace SOCKETS_NAMESPACE { +#endif + + +class IFile; + +/** Parse/store a http query_string/form-data body. + \ingroup webserver */ +class HttpdForm +{ + /** + * Store the name/value pairs from a GET/POST operation. + * "name" does not have to be unique. + \ingroup webserver + */ + struct CGI + { + CGI(const std::string& n,const std::string& v) : name(n),value(v) {} + CGI(const std::string& n,const std::string& v,const std::string& p) : name(n),value(v),path(p) {} + std::string name; + std::string value; + std::string path; + }; + /** list of key/value pairs. */ + typedef std::list cgi_v; + +public: + /** + * Default constructor (used in POST operations). + * Input is read from stdin. Number of characters to read + * can be found in the environment variable CONTENT_LENGTH. + */ + HttpdForm(IFile *, const std::string& content_type, size_t content_length); + /** + * Another constructor (used in GET operations). + * Input is read from the environment variable QUERY_STRING. + * @param query_string The httpd server provided QUERY_STRING + * @param length Query string length. + */ + HttpdForm(const std::string& query_string,size_t length); + ~HttpdForm(); + + void EnableRaw(bool); + + /** Encode characters '<' '>' '&' as < > & */ + void strcpyval(std::string&,const char *) const; + + /* get names */ + bool getfirst(std::string& n) const; + bool getnext(std::string& n) const; + + /* get names and values */ + bool getfirst(std::string& n,std::string& v) const; + bool getnext(std::string& n,std::string& v) const; + + /* get value */ + int getvalue(const std::string& ,std::string& ) const; + std::string getvalue(const std::string& ) const; + size_t getlength(const std::string& ) const; + cgi_v& getbase(); + + const std::string& GetBoundary() const; + +private: + HttpdForm(const HttpdForm& ) {} + HttpdForm& operator=(const HttpdForm& ) { return *this; } + cgi_v m_cgi; + mutable cgi_v::const_iterator m_current; + std::string m_strBoundary; + bool raw; +}; + + +#ifdef SOCKETS_NAMESPACE +} +#endif + +#endif // _SOCKETS_HttpdForm_H + -- cgit v1.2.3