/* 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_req_h
#define zz_http_req_h

#include "zz_http_session.h"
#include <zz_log.h>
#include <zz_buffer.h>

#include <config.h>
#include <ne_session.h>
#include <ne_request.h>

#define CRLF char(13), char(10)

/**
    HTTP request, wrapper for NEON

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

    //* Construction
    CzzHttpRequest( CzzHttpSession* session, const char* method, const char* uri );
    virtual ~CzzHttpRequest();

    virtual int onBlockRead( const char *buf, size_t len );
    virtual int onAccept( int status );

    void addBody( const char *buf, size_t count );
    void addRequestHeader( const char* name, const char* value );
    void execute( void );

    CzzString getResponseHeader( const char* name );
    CzzBuffer* getReply( void );

private:

    CzzLog m_Log;
    CzzBuffer m_Buffer;
    ne_request* m_Handle;
    CzzHttpSession* m_Session;

    static int reader( void *userdata, const char *buf, size_t len );
    static int accept( void *userdata, ne_request *req, const ne_status *st );
};

#endif // zz_http_req_h