27 #include "imap4-config.h"
29 #include "imapcommand.h"
31 #include "mailheader.h"
33 #include <kio/authinfo.h>
34 #include <kio/slavebase.h>
38 #include <QStringList>
55 char operator[](
int i)
const {
return data.length() > (i + pos) ? data[i + pos] :
'\0'; }
56 bool isEmpty()
const {
return pos >= data.size(); }
57 QByteArray cstr()
const
59 if ( pos >= data.size() ) {
62 return QByteArray( data.data() + pos, data.size() - pos );
64 int find(
char c,
int index = 0)
const
66 int res = data.indexOf( c, index + pos );
67 return ( res == -1 ) ? res : ( res - pos );
70 void takeLeftNoResize(QByteArray& dest, uint len)
const
72 memmove( dest.data(), data.data() + pos, len );
75 void takeMidNoResize(QByteArray& dest, uint start, uint len)
const
77 memmove( dest.data(), data.data() + pos + start, len );
86 return data.size() - pos;
88 void fromString(
const QString &s)
126 void setSize (ulong inSize)
135 void setUid (ulong inUid)
144 void setFlags (ulong inFlags)
149 QByteArray getDate ()
153 void setDate (
const QByteArray & _str)
163 myDate = QByteArray();
191 virtual ~ imapParser ();
194 enum IMAP_STATE getState () {
return currentState; }
196 void setState(
enum IMAP_STATE state) { currentState = state; }
199 const QString getCurrentBox ()
201 return KIMAP::decodeImapFolderName( currentBox );
209 CommandPtr sendCommand (CommandPtr aCmd);
215 CommandPtr doCommand (CommandPtr aCmd);
225 bool clientLogin (
const QString & aUser,
const QString & aPass, QString & resultInfo);
235 bool clientAuthenticate (KIO::SlaveBase *slave, KIO::AuthInfo &ai,
const QString & aFQDN,
236 const QString & aAuth,
bool isSSL, QString & resultInfo);
251 void parseRecent (ulong value,
parseString & result);
253 void parseResult (QByteArray & result,
parseString & rest,
254 const QString & command = QString());
272 void parseExists (ulong value,
parseString & result);
274 void parseExpunge (ulong value,
parseString & result);
298 void parseFetch (ulong value,
parseString & inWords);
303 void parseAddressList (
parseString & inWords, QList<mailAddress *>& list);
305 const mailAddress& parseAddress (
parseString & inWords, mailAddress& buffer);
312 QString & section,
mimeHeader * inHeader = 0);
319 QHash< QByteArray, QString > parseParameters (
parseString & inWords);
325 QHash< QByteArray, QString > parseDisposition (
parseString & inWords);
330 virtual void parseRelay (
const QByteArray & buffer);
334 virtual void parseRelay (ulong);
337 virtual bool parseRead (QByteArray & buffer,
long len,
long relay = 0);
340 virtual bool parseReadLine (QByteArray & buffer,
long relay = 0);
343 virtual void parseWriteLine (
const QString &);
351 QByteArray parseLiteral(
parseString & inWords,
bool relay =
false,
352 bool stopAtBracket =
false);
357 static QByteArray parseOneWord (
parseString & inWords,
358 bool stopAtBracket =
false);
361 static bool parseOneNumber (
parseString & inWords, ulong & num);
364 static void parseURL (
const KUrl & _url, QString & _box, QString & _section,
365 QString & _type, QString & _uid, QString & _validity,
372 imapCache *getLastHandled ()
378 const QStringList & getResults ()
384 const imapInfo & getStatus ()
389 const imapInfo & getSelected ()
394 const QByteArray & getContinuation ()
400 bool hasCapability (
const QString &);
402 void removeCapability (
const QString & cap);
407 while ( !inWords.isEmpty() &&
408 ( ( c = inWords[0] ) ==
' ' || c ==
'\t' || c ==
'\r' || c ==
'\n' ) ) {
414 QString namespaceForBox(
const QString & box );
420 enum IMAP_STATE currentState;
432 QStringList imapCapabilities;
435 QList < imapList > listResponses;
438 QList <CommandPtr> sentQueue;
439 QList <CommandPtr> completeQueue;
444 QStringList unhandled;
447 QByteArray continuation;
451 imapCache *lastHandled;
453 ulong commandCounter;
456 QStringList lastResults;
462 QMap<QString, QString> namespaceToDelimiter;
468 QStringList imapNamespaces;
473 imapParser & operator = (
const imapParser &);
a string used during parsing the string allows you to move the effective start of the string using st...