/* libzzinet
 *
 * This program is distributed under the GNU General Public License, version 2.
 * A copy of this license is included with this source.
 *
 * Copyright 2000-2006, Toni Thomsson <toni@tonjac.org> 
*/

#ifdef _WIN32
#pragma warning(disable: 4786)
#endif

#ifndef zz_cgi_parameter_parser_h
#define zz_cgi_parameter_parser_h

#include <zz_string.h>
#include <map>
#include <zz_parameter_map.h>

/** Parameter lista */
typedef map<CzzString, CzzString > CzzCGIParameterMap;

/**
    Parses CGI-parameters from an URL-encoded string
    @author Toni Thomsson, toni@tonjac.org
*/
class ZZ_API CzzCGIParameterParser : public CzzParameterMap
{
public:

    // Construction
    CzzCGIParameterParser( void );
    virtual ~CzzCGIParameterParser();

    /**
        Get variabel

        @param  var Name
    */
    virtual CzzString operator[]( const CzzString& var );

    /** 
        URL Encode 
        
        @param parameters   Parameter URL
    */
    static CzzString encode( CzzString& parameters );
    
    /** 
        URL Decode 
    
        @param parameters   Parameter URL
    */
    static CzzString decode( CzzString& parameters );

     /** Parameter map */
    CzzCGIParameterMap& getParameterMap( void );

    void parse( const char* vars );

protected:
    CzzCGIParameterMap m_ParameterMap;

private:
    static CzzString encodeChar( CzzString& parameters, char sign );
    static CzzString decodeChar( CzzString& parameters, char sign );
    void split( CzzString s );
    char hex2Ascii( const CzzString& s );
    void decodeHex( CzzString& s );
    void decodeSpace( CzzString& s );
    void parseVars( const CzzString& s );
};

#endif // zz_cgi_parameter_parser_h