/* 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_request_h
#define zz_http_request_h
#include <zz_socket.h>
#include <zz_buffer.h>
#include <zz_string.h>
#include <zz_mime_body.h>
#include <map>
#include <zz_export.h>
// Kodningstyper
typedef enum
{
ZZ_HTTP_ENCODE_TYPE_URLENCODED,
ZZ_HTTP_ENCODE_TYPE_MULTIPART,
ZZ_HTTP_ENCODE_TYPE_INVALID
} ZZ_HTTP_ENCODE_TYPE;
static char* zz_http_encode_type[] =
{
"application/x-www-form-urlencoded",
"multipart/form-data",
"<not supported>"
};
// HTTP kommandon
typedef enum
{
ZZ_HTTP_CMD_GET,
ZZ_HTTP_CMD_POST,
ZZ_HTTP_CMD_HEAD,
ZZ_HTTP_CMD_INVALID
} ZZ_HTTP_CMD;
static char* zz_http_command[] =
{
"GET",
"POST",
"HEAD",
"<not supported>"
};
typedef map<CzzString, CzzString > CzzHTTPHeaders;
/*
Description:
HTTP request
Author:
Toni Thomsson, toni@tonjac.org
Library:
libzzinet.a (HPUX) libzzinet.lib (win32)
Platform:
HPUX, win32
*/
class ZZ_API CzzHTTPRequest
{
public:
/*
Description: Skapar ett anrops objekt
*/
CzzHTTPRequest( CzzBuffer* buffer, CzzSocket* reqsock );
// Description: Destruktor
virtual ~CzzHTTPRequest();
// Description: Kommando
ZZ_HTTP_CMD getCommand( void );
// Description: URI
CzzString& getUri( void );
// Description: CGI parameter
CzzString getCGIParameter( const CzzString& name // IN, namn
);
// Description: Anropande hostname
CzzString& getHostName( void );
// Description: Lista med headers
CzzHTTPHeaders& getHeaders( void );
CzzMIMEBody* getMIMEBody( void );
// Description: Skriver uppladdat objekt till fil
void writeToFile( const CzzString& cgi_name, // IN, CGI parameternamn
const CzzString& local_path // IN, lokal sökväg
);
ZZ_HTTP_ENCODE_TYPE getType( void );
CzzString& getStringBuffer( void );
CzzBuffer* getBuffer( void );
CzzString getProtocol( void );
CzzString getUserAgent( void );
CzzString getReferer( void );
CzzString getUser( void );
unsigned __int64 getConnectionTime( void );
CzzSocket* getSocket( void );
private:
void parseBuffer( void );
CzzString copyReadFromStart( char* raw, long from, long to );
void checkCommand( CzzString& line );
int findAndParseHeaders( CzzString& type );
unsigned __int64 getTime( void );
CzzBuffer* m_Buffer;
CzzString m_StringBuffer;
CzzString m_HostName;
ZZ_HTTP_CMD m_Command;
ZZ_HTTP_ENCODE_TYPE m_Type;
CzzMIMEBody* m_MIME;
CzzString m_Uri;
CzzString m_Proto;
CzzHTTPHeaders m_Headers;
time_t m_ConnectionTime;
CzzSocket* m_RequestSocket;
};
#endif // zz_http_request_h