/* 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_h
#define zz_http_h
#include <zz_socket.h>
#include <zz_mime_body.h>
#include <map>
#include <zz_export.h>
#ifdef _WIN32
using namespace std;
#pragma warning(disable: 4786)
#endif
// Svars headers
typedef map<short, CzzString > CzzResponseHeaders;
/*
Description:
HTTP 1.0 protokoll (user-agent)
Author:
Toni Thomsson, toni@tonjac.org
Library:
libzzinet.a (HPUX) libzzinet.lib (win32)
Platform:
HPUX, win32
*/
class ZZ_API CzzHTTP
{
public:
/*
Description:
Skapa ett user-agent objekt (HTTP-klient)
Throws:
CzzException
*/
CzzHTTP( const char* host, // IN, dator
const char* port, // IN, port
const char* user_agent, // IN, klient namn
unsigned short s_timeout, // IN, send-timeout i sekunder
unsigned short r_timeout ); // IN, recieve-timeout i sekunder
// Description: Destruktor
virtual ~CzzHTTP();
/*
Description:
GET anrop
Throws:
CzzException
*/
void get( const char* uri, // IN, sökväg (Unified resource identifier)
const char* response_file // IN, svarsfil
);
/*
Description:
POST anrop
Remarks:
Innehållstyp: application/x-www-form-urlencoded
Throws:
CzzException
*/
void post( const char* uri, // IN, sökväg (Unified resource identifier)
const char* query, // IN, fråga
const char* response_file // IN, svarsfil
);
// Remarks: innehållstyp: multipart/form-data
void post( const char* uri, // IN, sökväg (Unified resource identifier)
CzzMIMEBody& body, // IN, MIME body
const char* response_file // IN, svarsfil
);
/*
Description:
HEAD anrop
Throws:
CzzException
*/
void head( const char* uri // IN, sökväg (Unified resource identifier)
);
/*
Description:
PUT anrop
Throws:
CzzException
*/
void put( const char* uri, // IN, sökväg (Unified resource identifier)
const char* data, // IN, data buffert
unsigned long size // IN, storlek på data
);
/*
Description:
DELETE anrop
Throws:
CzzException
*/
void del( const char* uri // IN, sökväg (Unified resource identifier)
);
/*
Description:
Svars header lista
*/
CzzResponseHeaders& getResponseHeaders( void ) { return m_ResponseHeaders; };
// Description: Filstorlek (svar) i bytes
unsigned long getFileSize( void ) { return m_FileSize; };
// Description: Hämta svar
// Returns: storlek på svar
long reply( void );
protected:
// Description: Skicka anrop
// Remarks: protected
void send( void );
// Description: Parsa svar
// Remarks: protected
void parseReply( unsigned long size // storlek
);
// Description: Skriv svar till fil
// Remarks: Överlagra om svaret inte skall skrivas till fil
virtual void writeToFile( long from, // IN, position i m_ReplyBuffer
long size // IN, antal bytes som skall skrivas
);
// Description: Lägg till anrop till anrops buffert
// Remarks: protected
void addRequest( const char* method, // IN, anropsmetod
const char* uri // IN, sökväg
);
// Description: Lägg till header till anrops buffert
// Remarks: protected
void addHeader( const char* format_header, // IN, format, se printf()
... // IN, parametrar
);
// Description: Lägg till objekt till anrops buffert
// Remarks: protected
void addEntityData( const char* data, // IN, data buffert
unsigned long size // IN, storlek på data
);
// Description: Lägg till slutmakering till anrops buffert
// Remarks: protected
void addEndMarker( void );
unsigned long m_FileSize;
CzzBuffer* m_SendBuffer;
char* m_ReplyBuffer;
CzzString m_Host;
CzzString m_LocalHost;
CzzString m_Port;
CzzString m_UserAgent;
CzzString m_ResponseFile;
CzzSocket* m_Socket;
unsigned short m_SendTimeout;
unsigned short m_RecTimeout;
CzzResponseHeaders m_ResponseHeaders;
private:
CzzString copyReadFromStart( long from, long to );
};
#endif // zz_http_h