Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

imapresponse.h

Go to the documentation of this file.
00001 #ifndef IMAPRESPONSE_H
00002 #define IMAPRESPONSE_H
00003 
00004 #include <qobject.h>
00005 
00006 #define MAX_BODYPARTS           50
00007 
00008 class IMAPHandler;
00009 
00010 class IMAPResponseEnums
00011 {
00012 public:
00013         enum IMAPResponseStatus {
00014                 OK, NO, BAD, PREAUTH, BYE, UnknownStatus = 0
00015         };
00016 
00017         enum IMAPResponseFlags {
00018                 Seen, Answered, Flagged, Deleted, Draft, Recent,
00019                 Noinferiors, Noselect, Marked, Unmarked, UnknownFlag = 0
00020         };
00021 
00022         enum IMAPResponseCode {
00023                 ALERT, NEWNAME, PARSE, PERMANENTFLAGS, READONLY, READWRITE,
00024                 TRYCREATE, UIDVALIDITY, UNSEEN, NoCode, UnknownCode = 0
00025         };
00026 
00027 };
00028 
00029 class IMAPResponseAddress
00030 {
00031 public:
00032         IMAPResponseAddress(QString name = 0, QString adl = 0, QString mailbox = 0, QString host = 0)
00033         {
00034                 _name = name;
00035                 _adl = adl;
00036                 _mailbox = mailbox;
00037                 _host = host;
00038         }
00039 
00040         void setName(QString name) { _name = name; }
00041         QString name() { return _name; }
00042         void setAdl(QString adl) { _adl = adl; }
00043         QString adl() { return _adl; }
00044         void setMailbox(QString mailbox) { _mailbox = mailbox; }
00045         QString mailbox() { return _mailbox; }
00046         void setHost(QString host) { _host = host; }
00047         QString host() { return _host; }
00048 
00049         QString toString() 
00050         {
00051                 if (_name.isNull() && _mailbox.isNull() && _host.isNull())
00052                         return QString(0);
00053                 if (_name != _mailbox + "@" + _host) 
00054                         return _name + " <" + _mailbox + "@" + _host + ">";
00055                 else
00056                         return _name;
00057         }
00058 
00059         QString email() 
00060         {
00061                 if (_host.isEmpty()) return _mailbox;
00062                 else return _mailbox + "@" + _host;
00063         }
00064 
00065 private:
00066         QString _name, _adl, _mailbox, _host;
00067 
00068 };
00069 
00070 class IMAPResponseAddressList : public QValueList<IMAPResponseAddress>
00071 {
00072 public:
00073         IMAPResponseAddressList()
00074                 : QValueList<IMAPResponseAddress>()
00075         {
00076 
00077         }
00078 
00079         QString toString()
00080         {
00081                 QString string;
00082                 IMAPResponseAddressList::Iterator it;
00083                 for (it = this->begin(); it != this->end(); it++) {
00084                         QString tmp = (*it).toString();
00085                         if (!tmp.isNull() && string.isEmpty()) string = tmp;
00086                         else if (!tmp.isNull()) string += ", " + tmp;
00087                 }
00088                 return string;
00089         }
00090 
00091 };
00092 
00093 class IMAPResponseBody
00094 {
00095 public:
00096         void setData(QString data) { _data = data; }
00097         QString data() { return _data; }
00098 
00099 private:
00100         QString _data;
00101 
00102 };
00103 
00104 class IMAPResponseBodyPart : public IMAPResponseBody
00105 {
00106 public:
00107         void setPart(QString part) { _part = part; }
00108         QString part() { return _part; }
00109 
00110 private:
00111         QString _part;
00112 
00113 };
00114 
00115 class IMAPResponseEnvelope
00116 {
00117 public:
00118         void setMailDate(QString date) { _date = date; }
00119         QString mailDate() { return _date; }
00120         void setSubject(QString subject) { _subject = subject; }
00121         QString subject() { return _subject; }
00122         void addFrom(IMAPResponseAddress from) { _from.append(from); }
00123         IMAPResponseAddressList from() { return _from; }
00124         void addSender(IMAPResponseAddress sender) { _sender.append(sender); }
00125         IMAPResponseAddressList sender() { return _sender; }
00126         void addReplyTo(IMAPResponseAddress replyTo) { _replyTo.append(replyTo); }
00127         IMAPResponseAddressList replyTo() { return _replyTo; }
00128         void addTo(IMAPResponseAddress to) { _to.append(to); }
00129         IMAPResponseAddressList to() { return _to; }
00130         void addCc(IMAPResponseAddress cc) { _cc.append(cc); }
00131         IMAPResponseAddressList cc() { return _cc; }
00132         void addBcc(IMAPResponseAddress bcc) { _bcc.append(bcc); }
00133         IMAPResponseAddressList bcc() { return _bcc; }
00134         void setInReplyTo(QString inReplyTo) { _inReplyTo = inReplyTo; }
00135         QString inReplyTo() { return _inReplyTo; }
00136         void setMessageId(QString messageId) { _messageId = messageId; }
00137         QString messageId() { return _messageId; }
00138 
00139 private:
00140         QString _date, _subject, _inReplyTo, _messageId;
00141         IMAPResponseAddressList _from, _sender, _replyTo, _to, _cc, _bcc;
00142 
00143 };
00144 
00145 class IMAPResponseStatusResponse : public IMAPResponseEnums
00146 {
00147 public:
00148         IMAPResponseStatusResponse(IMAPResponseStatus status = (IMAPResponseStatus)0, QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
00149         {
00150                 _status = status;
00151                 _comment = comment;
00152                 _code = code;
00153         }
00154 
00155         void setStatus(IMAPResponseStatus status) { _status = status; }
00156         IMAPResponseStatus status() { return _status; }
00157         void setComment(QString comment) { _comment = comment; }
00158         QString comment() { return _comment; }
00159         void setResponseCode(IMAPResponseCode code) { _code = code; }
00160         IMAPResponseCode responseCode() { return _code; }
00161 
00162         void setExitedUnexpected(bool exitu) { _exitu = exitu; }
00163         bool exitedUnexpected() { return _exitu; }
00164 
00165 private:
00166         IMAPResponseStatus _status;
00167         QString _comment;
00168         IMAPResponseCode _code;
00169         bool _exitu;
00170 
00171 };
00172 
00173 class IMAPResponseOK : public IMAPResponseEnums
00174 {
00175 public:
00176         IMAPResponseOK(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
00177         {
00178                 _comment = comment;
00179                 _code = code;
00180         }
00181 
00182         void setComment(QString comment) { _comment = comment; }
00183         QString comment() { return _comment; }
00184         void setResponseCode(IMAPResponseCode code) { _code = code; }
00185         IMAPResponseCode responseCode() { return _code; }
00186 
00187 private:
00188         QString _comment;
00189         IMAPResponseCode _code;
00190 
00191 };
00192 
00193 class IMAPResponseNO : public IMAPResponseEnums
00194 {
00195 public:
00196         IMAPResponseNO(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
00197         {
00198                 _comment = comment;
00199                 _code = code;
00200         }
00201 
00202         void setComment(QString comment) { _comment = comment; }
00203         QString comment() { return _comment; }
00204         void setResponseCode(IMAPResponseCode code) { _code = code; }
00205         IMAPResponseCode responseCode() { return _code; }
00206 
00207 private:
00208         QString _comment;
00209         IMAPResponseCode _code;
00210 
00211 };
00212 
00213 class IMAPResponseBAD : public IMAPResponseEnums
00214 {
00215 public:
00216         IMAPResponseBAD(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0)
00217         {
00218                 _comment = comment;
00219                 _code = code;
00220         }
00221 
00222         void setComment(QString comment) { _comment = comment; }
00223         QString comment() { return _comment; }
00224         void setResponseCode(IMAPResponseCode code) { _code = code; }
00225         IMAPResponseCode responseCode() { return _code; }
00226 
00227 private:
00228         QString _comment;
00229         IMAPResponseCode _code;
00230 
00231 };
00232 
00233 class IMAPResponseCAPABILITY
00234 {
00235 public:
00236         IMAPResponseCAPABILITY(QStringList capabilities = 0)
00237         {
00238                 _capabilities = capabilities;
00239         }
00240 
00241         void setCapabilities(QStringList capabilities) { _capabilities = capabilities; }
00242         QStringList capabilities() { return _capabilities; }
00243 
00244 private:
00245         QStringList _capabilities;
00246 
00247 };
00248 
00249 class IMAPResponseLIST : public IMAPResponseEnums
00250 {
00251 public:
00252         IMAPResponseLIST(QValueList<IMAPResponseFlags> flags = QValueList<IMAPResponseFlags>(), QString folderSeparator = 0, QString folder = 0)
00253         {
00254                 _flags = flags;
00255                 _folderSeparator = folderSeparator;
00256                 _folder = folder;
00257         }
00258 
00259         void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
00260         QValueList<IMAPResponseFlags> flags() { return _flags; }
00261         void setFolderSeparator(QString folderSeparator) { _folderSeparator = folderSeparator; }
00262         QString folderSeparator() { return _folderSeparator; }
00263         void setFolder(QString folder) { _folder = folder; }
00264         QString folder() { return _folder; }
00265 
00266 private:
00267         QValueList<IMAPResponseFlags> _flags;
00268         QString _folderSeparator, _folder;
00269 
00270 };
00271 
00272 class IMAPResponseLSUB : public IMAPResponseEnums
00273 {
00274 public:
00275         IMAPResponseLSUB(QValueList<IMAPResponseFlags> flags = QValueList<IMAPResponseFlags>(), QString folderSeperator = 0, QString folder = 0)
00276         {
00277                 _flags = flags;
00278                 _folderSeperator = folderSeperator;
00279                 _folder = folder;
00280         }
00281 
00282         void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
00283         QValueList<IMAPResponseFlags> flags() { return _flags; }
00284         void setFolderSeperator(QString folderSeperator) { _folderSeperator = folderSeperator; }
00285         QString folderSeperator() { return _folderSeperator; }
00286         void setFolder(QString folder) { _folder = folder; }
00287         QString folder() { return _folder; }
00288 
00289 private:
00290         QValueList<IMAPResponseFlags> _flags;
00291         QString _folderSeperator, _folder;
00292 
00293 };
00294 
00295 class IMAPResponseSTATUS
00296 {
00297 public:
00298         IMAPResponseSTATUS(QString mailbox = 0, QString messages = 0, QString recent = 0, QString uidnext = 0, QString uidvalidity = 0, QString unseen = 0)
00299         {
00300                 _mailbox = mailbox;
00301                 _messages = messages;
00302                 _recent = recent;
00303                 _uidnext = uidnext;
00304                 _uidvalidity = uidvalidity;
00305                 _unseen = unseen;
00306         }
00307 
00308         void setMailbox(QString &mailbox) { _mailbox = mailbox; }
00309         QString mailbox() { return _mailbox; }
00310         void setMessages(QString &messages) { _messages = messages; }
00311         QString messages() { return _messages; }
00312         void setRecent(QString &recent) { _recent = recent; }
00313         QString recent() { return _recent; }
00314         void setUidnext(QString &uidnext) { _uidnext = uidnext; }
00315         QString uidnext() { return _uidnext; }
00316         void setUidvalidity(QString &uidvalidity) { _uidvalidity = uidvalidity; }
00317         QString uidvalidity() { return _uidvalidity; }
00318         void setUnseen(QString &unseen) { _unseen = unseen; }
00319         QString unseen() { return _unseen; }
00320 
00321 private:
00322         QString _mailbox, _messages, _recent, _uidnext, _uidvalidity, _unseen;
00323 
00324 };
00325 
00326 class IMAPResponseSEARCH
00327 {
00328 public:
00329         IMAPResponseSEARCH(QStringList mails = 0)
00330         {
00331                 _mails = mails;
00332         }
00333 
00334         void setMails(QStringList mails) { _mails = mails; }
00335         QStringList mails() { return _mails; }
00336 
00337 private:
00338         QStringList _mails;
00339 
00340 };
00341 
00342 class IMAPResponseFLAGS : public IMAPResponseEnums
00343 {
00344 public:
00345         IMAPResponseFLAGS(QValueList<IMAPResponseFlags> flags = QValueList<IMAPResponseFlags>())
00346         {
00347                 _flags = flags;
00348         }
00349 
00350         void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
00351         QValueList<IMAPResponseFlags> flags() { return _flags; }
00352 
00353 private:
00354         QValueList<IMAPResponseFlags> _flags;
00355 
00356 };
00357 
00358 class IMAPResponseEXISTS
00359 {
00360 public:
00361         IMAPResponseEXISTS(QString mails = 0)
00362         {
00363                 _mails = mails;
00364         }
00365 
00366         void setMails(QString mails) { _mails = mails; }
00367         QString mails() { return _mails; }
00368 
00369 private:
00370         QString _mails;
00371 
00372 };
00373 
00374 class IMAPResponseRECENT
00375 {
00376 public:
00377         IMAPResponseRECENT(QString mails = 0)
00378         {
00379                 _mails = mails;
00380         }
00381 
00382         void setMails(QString mails) { _mails = mails; }
00383         QString mails() { return _mails; }
00384 
00385 private:
00386         QString _mails;
00387 
00388 };
00389 
00390 class IMAPResponseEXPUNGE 
00391 {
00392 public:
00393         IMAPResponseEXPUNGE(QString mails = 0)
00394         {
00395                 _mails = mails;
00396         }
00397 
00398         void setMails(QString mails) { _mails = mails; }
00399         QString mails() { return _mails; }
00400 
00401 private:
00402         QString _mails;
00403 
00404 };
00405 
00406 class IMAPResponseFETCH : public IMAPResponseEnums
00407 {
00408 public:
00409         void setEnvelope(IMAPResponseEnvelope envelope) { _envelope = envelope; }
00410         IMAPResponseEnvelope envelope() { return _envelope; }
00411         void setFlags(QValueList<IMAPResponseFlags> flags) { _flags = flags; }
00412         QValueList<IMAPResponseFlags> flags() { return _flags; }
00413         void setInternalDate(QString idate) { _idate = idate; }
00414         QString internalDate() { return _idate; }
00415         void setRFC822Size(QString rfc822size) { _rfc822size = rfc822size; }
00416         QString RFC822Size() { return _rfc822size; }
00417         void setUid(QString uid) { _uid = uid; }
00418         QString uid() { return _uid; }
00419 
00420         void setBody(QString body) { _body = body; }
00421         QString body() { return _body; }
00422         void addBodyPart(IMAPResponseBodyPart part) { _bodyParts.append(part); }
00423         void setBodyParts(QValueList<IMAPResponseBodyPart> parts) { _bodyParts = parts; }
00424         QValueList<IMAPResponseBodyPart> bodyParts() { return _bodyParts; }
00425         IMAPResponseBodyPart bodyPart(int part) { return _bodyParts[part]; }
00426         void setRfc822(QString rfc822) { _rfc822 = rfc822; }
00427         QString rfc822() { return _rfc822; }
00428         void setRfc822Header(QString rfc822Header) { _rfc822Header = rfc822Header; }
00429         QString rfc822Header() { return _rfc822Header; }
00430         void setRfc822Text(QString rfc822Text) { _rfc822Text = rfc822Text; }
00431         QString rfc822Text() { return _rfc822Text; }
00432 
00433 private:
00434         IMAPResponseEnvelope _envelope;
00435         QValueList<IMAPResponseFlags> _flags;
00436         QString _idate, _rfc822size, _uid, _body, _rfc822, _rfc822Header, _rfc822Text;
00437         QValueList<IMAPResponseBodyPart> _bodyParts;
00438 
00439 };
00440 
00441 class IMAPResponse : public IMAPResponseEnums
00442 {
00443 public:
00444         void setTag(QString tag) { _tag = tag; }
00445         QString tag() { return _tag; }
00446 
00447         void setImapHandler(IMAPHandler *handler) { _handler = handler; }
00448         IMAPHandler *imapHandler() { return _handler; }
00449 
00450         void setStatusResponse(IMAPResponseStatusResponse response) { _response = response; }
00451         IMAPResponseStatusResponse statusResponse() { return _response; }
00452 
00453         void addOK(IMAPResponseOK ok) { _okl.append(ok); }
00454         void addNO(IMAPResponseNO no) { _nol.append(no); }
00455         void addBAD(IMAPResponseBAD bad) { _badl.append(bad); }
00456         void addCAPABILITY(IMAPResponseCAPABILITY capability) { _capabilityl.append(capability); }
00457         void addLIST(IMAPResponseLIST list) { _listl.append(list); }
00458         void addLSUB(IMAPResponseLSUB lsub) { _lsubl.append(lsub); }
00459         void addSTATUS(IMAPResponseSTATUS status) { _statusl.append(status); }
00460         void addSEARCH(IMAPResponseSEARCH search) { _searchl.append(search); }
00461         void addFLAGS(IMAPResponseFLAGS flags) { _flagsl.append(flags); }
00462         void addEXISTS(IMAPResponseEXISTS exists) { _existsl.append(exists); }
00463         void addRECENT(IMAPResponseRECENT recent) { _recentl.append(recent); }
00464         void addEXPUNGE(IMAPResponseEXPUNGE expunge) { _expungel.append(expunge); }
00465         void addFETCH(IMAPResponseFETCH fetch) { _fetchl.append(fetch); }
00466 
00467         QValueList<IMAPResponseOK> OK() { return _okl; }
00468         QValueList<IMAPResponseNO> NO() { return _nol; }
00469         QValueList<IMAPResponseBAD> BAD() { return _badl; }
00470         QValueList<IMAPResponseCAPABILITY> CAPABILITY() { return _capabilityl; }
00471         QValueList<IMAPResponseLIST> LIST() { return _listl; }
00472         QValueList<IMAPResponseLSUB> LSUB() { return _lsubl; }
00473         QValueList<IMAPResponseSTATUS> STATUS() { return _statusl; }
00474         QValueList<IMAPResponseSEARCH> SEARCH() { return _searchl; }
00475         QValueList<IMAPResponseFLAGS> FLAGS() { return _flagsl; }
00476         QValueList<IMAPResponseEXISTS> EXISTS() { return _existsl; }
00477         QValueList<IMAPResponseRECENT> RECENT() { return _recentl; }
00478         QValueList<IMAPResponseEXPUNGE> EXPUNGE() { return _expungel; }
00479         QValueList<IMAPResponseFETCH> FETCH() { return _fetchl; }
00480 
00481 private:
00482         QString _tag;
00483         IMAPResponseStatusResponse _response;
00484 
00485         IMAPHandler *_handler;
00486 
00487         QValueList<IMAPResponseOK> _okl;
00488         QValueList<IMAPResponseNO> _nol;
00489         QValueList<IMAPResponseBAD> _badl;
00490         QValueList<IMAPResponseCAPABILITY> _capabilityl;
00491         QValueList<IMAPResponseLIST> _listl;
00492         QValueList<IMAPResponseLSUB> _lsubl;
00493         QValueList<IMAPResponseSTATUS> _statusl;
00494         QValueList<IMAPResponseSEARCH> _searchl;
00495         QValueList<IMAPResponseFLAGS> _flagsl;
00496         QValueList<IMAPResponseEXISTS> _existsl;
00497         QValueList<IMAPResponseRECENT> _recentl;
00498         QValueList<IMAPResponseEXPUNGE> _expungel;
00499         QValueList<IMAPResponseFETCH> _fetchl;
00500 
00501 };
00502 
00503 class IMAPResponseParser : public QObject, public IMAPResponseEnums 
00504 {
00505         Q_OBJECT
00506 
00507 public:
00508         IMAPResponseParser();
00509         void parse ( const QString &data);
00510 
00511         IMAPResponse response();
00512 
00513 signals:
00514         void needMoreData(QString &data);
00515 
00516 protected:
00517         void parseResponse(const QString &data, bool tagged = false);
00518 
00519         QStringList splitData(const QString &data, bool withBrackets);
00520         void parseParenthesizedList(const QString &data, QStringList &parsed);
00521         void splitTagData(const QString &line, QString &tag, QString &data);
00522         QString removeLimiters(QString &string, const QChar &sl = '"', const QChar &el = '"');
00523         IMAPResponseCode getResponseCode(const QString &line);
00524         QValueList<IMAPResponseFlags> parseFlagList(const QStringList &flags);
00525 
00526 private:
00527         IMAPResponse _iresponse;
00528 
00529 };
00530 
00531 #endif
00532 

Generated on Sat Nov 5 16:18:07 2005 for OPIE by  doxygen 1.4.2