00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __KMIME_HEADER_PARSING_H__
00024 #define __KMIME_HEADER_PARSING_H__
00025
00026 #include <QtCore/QString>
00027 #include <QtCore/QPair>
00028
00029 #include <kdatetime.h>
00030
00031 #include "kmime_export.h"
00032
00033 template <typename K, typename V> class QMap;
00034 class QStringList;
00035
00036 namespace KMime {
00037
00038 namespace Headers {
00039 class Base;
00040 }
00041
00042 namespace Types {
00043
00044
00045 struct KMIME_EXPORT QStringOrQPair {
00046 QStringOrQPair() : qstring(), qpair( 0, 0 ) {}
00047 QString qstring;
00048 QPair<const char*,int> qpair;
00049 };
00050
00051 struct KMIME_EXPORT AddrSpec {
00052 QString asString() const;
00054 QString asPrettyString() const;
00055 bool isEmpty() const;
00056 QString localPart;
00057 QString domain;
00058 };
00059 typedef QList<AddrSpec> AddrSpecList;
00060
00065 class KMIME_EXPORT Mailbox
00066 {
00067 public:
00068 typedef QList<Mailbox> List;
00069
00074 QByteArray address() const;
00075
00076 AddrSpec addrSpec() const;
00077
00081 QString name() const;
00082
00086 void setAddress( const AddrSpec &addr );
00087
00091 void setAddress( const QByteArray &addr );
00092
00096 void setName( const QString &name );
00097
00101 void setNameFrom7Bit( const QByteArray &name,
00102 const QByteArray &defaultCharset = QByteArray() );
00103
00107 bool hasAddress() const;
00108
00112 bool hasName() const;
00113
00119 QString prettyAddress() const;
00120
00124 void fromUnicodeString( const QString &s );
00125
00129 void from7BitString( const QByteArray &s );
00130
00136 QByteArray as7BitString( const QByteArray &encCharset ) const;
00137
00138 private:
00139 QString mDisplayName;
00140 AddrSpec mAddrSpec;
00141 };
00142
00143 typedef QList<Mailbox> MailboxList;
00144
00145 struct KMIME_EXPORT Address {
00146 QString displayName;
00147 MailboxList mailboxList;
00148 };
00149 typedef QList<Address> AddressList;
00150
00151 }
00152
00153 namespace HeaderParsing {
00154
00170 KMIME_EXPORT bool parseEncodedWord( const char* &scursor,
00171 const char * const send,
00172 QString &result, QByteArray &language,
00173 QByteArray &usedCS, const QByteArray &defaultCS = QByteArray(),
00174 bool forceCS = false );
00175
00176
00177
00178
00179
00182 KMIME_EXPORT bool parseAtom( const char* &scursor, const char * const send,
00183 QString &result, bool allow8Bit=false );
00184
00185 KMIME_EXPORT bool parseAtom( const char* &scursor, const char * const send,
00186 QPair<const char*,int> &result,
00187 bool allow8Bit=false );
00188
00191 KMIME_EXPORT bool parseToken( const char* &scursor, const char * const send,
00192 QString &result, bool allow8Bit=false );
00193
00194 KMIME_EXPORT bool parseToken( const char* &scursor, const char * const send,
00195 QPair<const char*,int> &result,
00196 bool allow8Bit=false );
00197
00199 KMIME_EXPORT bool parseGenericQuotedString( const char* &scursor,
00200 const char* const send,
00201 QString &result, bool isCRLF,
00202 const char openChar='"',
00203 const char closeChar='"' );
00204
00206 KMIME_EXPORT bool parseComment( const char* &scursor, const char * const send,
00207 QString &result, bool isCRLF=false,
00208 bool reallySave=true );
00209
00225 KMIME_EXPORT bool parsePhrase( const char* &scursor, const char * const send,
00226 QString &result, bool isCRLF=false );
00227
00240 KMIME_EXPORT bool parseDotAtom( const char* &scursor, const char * const send,
00241 QString &result, bool isCRLF=false );
00242
00257 KMIME_EXPORT void eatCFWS( const char* &scursor, const char * const send,
00258 bool isCRLF );
00259
00260 KMIME_EXPORT bool parseDomain( const char* &scursor, const char * const send,
00261 QString &result, bool isCRLF=false );
00262
00263 KMIME_EXPORT bool parseObsRoute( const char* &scursor, const char * const send,
00264 QStringList &result, bool isCRLF=false,
00265 bool save=false );
00266
00267 KMIME_EXPORT bool parseAddrSpec( const char* &scursor, const char * const send,
00268 Types::AddrSpec &result, bool isCRLF=false );
00269
00270 KMIME_EXPORT bool parseAngleAddr( const char* &scursor, const char * const send,
00271 Types::AddrSpec &result, bool isCRLF=false );
00272
00289 KMIME_EXPORT bool parseMailbox( const char* &scursor, const char * const send,
00290 Types::Mailbox &result, bool isCRLF=false );
00291
00292 KMIME_EXPORT bool parseGroup( const char* &scursor, const char * const send,
00293 Types::Address &result, bool isCRLF=false );
00294
00295 KMIME_EXPORT bool parseAddress( const char* &scursor, const char * const send,
00296 Types::Address &result, bool isCRLF=false );
00297
00298 KMIME_EXPORT bool parseAddressList( const char* &scursor,
00299 const char * const send,
00300 Types::AddressList &result,
00301 bool isCRLF=false );
00302
00303 KMIME_EXPORT bool parseParameter( const char* &scursor, const char * const send,
00304 QPair<QString,Types::QStringOrQPair> &result,
00305 bool isCRLF=false );
00306
00307 KMIME_EXPORT bool parseParameterList( const char* &scursor,
00308 const char * const send,
00309 QMap<QString,QString> &result,
00310 bool isCRLF=false );
00311
00312 KMIME_EXPORT bool parseRawParameterList( const char* &scursor,
00313 const char * const send,
00314 QMap<QString,Types::QStringOrQPair> &result,
00315 bool isCRLF=false );
00316
00324 KMIME_EXPORT int parseDigits( const char* &scursor, const char* const send, int &result );
00325
00326 KMIME_EXPORT bool parseTime( const char* &scursor, const char * const send,
00327 int &hour, int &min, int &sec,
00328 long int &secsEastOfGMT,
00329 bool &timeZoneKnown, bool isCRLF=false );
00330
00331 KMIME_EXPORT bool parseDateTime( const char* &scursor, const char * const send,
00332 KDateTime &result, bool isCRLF=false );
00333
00340 KMIME_EXPORT KMime::Headers::Base *extractFirstHeader( QByteArray &head );
00341
00342 }
00343
00344 }
00345
00346 #endif // __KMIME_HEADER_PARSING_H__
00347