/* 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> 
*/

#ifndef zz_http_session_h
#define zz_http_session_h

#include <config.h>
#include <ne_ssl.h> 
#include <ne_session.h>
#include <ne_request.h>
#include <ne_basic.h>
#include <ne_uri.h>
#include <ne_socket.h>
#include <ne_utils.h> 

#include <zz_log.h>

typedef CzzString (*ZZ_PROMPT_FOR_PASSWORD)(void); 

/**
    HTTP session

    Toni Thomsson, toni@tonjac.org
*/
class ZZ_API CzzHttpSession
{
public:

    //* Construction
    CzzHttpSession( const char* proto, const char* host, int port, 
                                const char* proxy, int proxy_port );
    virtual ~CzzHttpSession();

    CzzString getHostName( void );
    ne_session* getHandle( void );

    virtual int onValidateCertificate( int fs, const ne_ssl_certificate *cert ); 

    void setClientCertificate( const char* path, ZZ_PROMPT_FOR_PASSWORD pwdfn );
    static CzzString promptForPassword( void );

protected:
    static int validate( void *userdata, int fs, const ne_ssl_certificate *cert ); 
    
private:
    ne_session* m_Handle;
    CzzString m_HostName;
    CzzLog m_Log;
};

#endif // zz_http_session_h