/* 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_mime_body_h
#define zz_mime_body_h
#include <zz_buffer.h>
#include <zz_string.h>
#include <map>
#include <zz_export.h>
#include <zz_log.h>
// Block storlek för MIME buffert
#define ZZ_MIME_WBLOCK_SIZE 10240
// Vagnretur + radbrytning
#define CRLF char(13), char(10)
/*
Description:
MIME body, parsning/skrivning
Author:
Toni Thomsson, toni@tonjac.org
Library:
libzzinet.a (HPUX) libzzinet.lib (win32)
Platform:
HPUX, win32
*/
class ZZ_API CzzMIMEBody
{
public:
/*
Description: Skapar ett MIME-body objekt
Remarks:
Skapa MIME body för skrivning
*/
CzzMIMEBody();
/*
Description: Skapar ett MIME-body objekt
Remarks:
Skapa MIME body för parsning
*/
CzzMIMEBody( char* body, // IN, bodybuffert
long size, // IN, storlek på body
const char* type // IN, innehålls typ
);
// Description: Destruktor
virtual ~CzzMIMEBody();
// Description: Läs boundary från body
static CzzString parseBoundary( const char* body // IN, body
);
/*
Description:
Sökväg till uppladdad fil
See Also:
CzzCGI::getFile
Throws:
CzzException
*/
CzzString getFile( const CzzString& name // IN, variabel namn
);
/*
Description:
Läs variabel
See Also:
CzzCGI::operator[]
Throws:
CzzException
*/
CzzString operator[]( const CzzString& var // IN, variabel namn
);
// Description: Lägg till header till body-buffert
void addHeader( const char* name, // IN, variabelnamn
const char* value // IN, värde
);
// Description: Lägg till fil-header till body-buffert
void addFileHeader( const char* name, // IN, variabelnamn
const char* file // IN, sökväg
);
// Description: Lägg till slutmarkering till body-buffert
void addEndMarker( void );
// Description: Läs boundary
CzzString& getBoundary( void ) { return m_Boundary; }
// Description: Pekare till skrivbuffert
const char* getData( void ) { return m_Buffer.getData(); };
// Description: Storlek på skrivbuffert
long getSize( void ) { return m_Buffer.getSize(); };
char* getRawBody( void );
long getRawSize( void );
protected:
// Description: Parsar MIME body
void parseMe( void );
// Description: Genererar en unik boundary nyckel
void genBoundary( void );
CzzString m_Boundary;
CzzString m_LastFileElement;
char* m_RawBody;
long m_RawSize;
map<CzzString, CzzString > m_ElementMap;
map<CzzString, CzzString > m_FileMap;
CzzBuffer m_Buffer;
private:
CzzString copyReadFromStart( long from, long to );
long parseElementName( long pos, const CzzString& elem );
long writeToFile( long pos );
CzzLog m_Log;
};
#endif // zz_mime_body_h