From 7f2eef29708380844922f34f59ba4e9beefbf7c3 Mon Sep 17 00:00:00 2001 From: conber Date: Sat, 15 Jun 2002 09:46:14 +0000 Subject: initial checkin --- (limited to 'noncore/unsupported/mail2/libmail/imapresponse.h') diff --git a/noncore/unsupported/mail2/libmail/imapresponse.h b/noncore/unsupported/mail2/libmail/imapresponse.h new file mode 100644 index 0000000..73435ee --- a/dev/null +++ b/noncore/unsupported/mail2/libmail/imapresponse.h @@ -0,0 +1,531 @@ +#ifndef IMAPRESPONSE_H +#define IMAPRESPONSE_H + +#include + +#define MAX_BODYPARTS 50 + +class IMAPHandler; + +class IMAPResponseEnums +{ +public: + enum IMAPResponseStatus { + OK, NO, BAD, PREAUTH, BYE, UnknownStatus = 0 + }; + + enum IMAPResponseFlags { + Seen, Answered, Flagged, Deleted, Draft, Recent, + Noinferiors, Noselect, Marked, Unmarked, UnknownFlag = 0 + }; + + enum IMAPResponseCode { + ALERT, NEWNAME, PARSE, PERMANENTFLAGS, READONLY, READWRITE, + TRYCREATE, UIDVALIDITY, UNSEEN, NoCode, UnknownCode = 0 + }; + +}; + +class IMAPResponseAddress +{ +public: + IMAPResponseAddress(QString name = 0, QString adl = 0, QString mailbox = 0, QString host = 0) + { + _name = name; + _adl = adl; + _mailbox = mailbox; + _host = host; + } + + void setName(QString name) { _name = name; } + QString name() { return _name; } + void setAdl(QString adl) { _adl = adl; } + QString adl() { return _adl; } + void setMailbox(QString mailbox) { _mailbox = mailbox; } + QString mailbox() { return _mailbox; } + void setHost(QString host) { _host = host; } + QString host() { return _host; } + + QString toString() + { + if (_name.isNull() && _mailbox.isNull() && _host.isNull()) + return QString(0); + if (_name != _mailbox + "@" + _host) + return _name + " <" + _mailbox + "@" + _host + ">"; + else + return _name; + } + + QString email() + { + if (_host.isEmpty()) return _mailbox; + else return _mailbox + "@" + _host; + } + +private: + QString _name, _adl, _mailbox, _host; + +}; + +class IMAPResponseAddressList : public QValueList +{ +public: + IMAPResponseAddressList() + : QValueList() + { + + } + + QString toString() + { + QString string; + IMAPResponseAddressList::Iterator it; + for (it = this->begin(); it != this->end(); it++) { + QString tmp = (*it).toString(); + if (!tmp.isNull() && string.isEmpty()) string = tmp; + else if (!tmp.isNull()) string += ", " + tmp; + } + return string; + } + +}; + +class IMAPResponseBody +{ +public: + void setData(QString data) { _data = data; } + QString data() { return _data; } + +private: + QString _data; + +}; + +class IMAPResponseBodyPart : public IMAPResponseBody +{ +public: + void setPart(QString part) { _part = part; } + QString part() { return _part; } + +private: + QString _part; + +}; + +class IMAPResponseEnvelope +{ +public: + void setMailDate(QString date) { _date = date; } + QString mailDate() { return _date; } + void setSubject(QString subject) { _subject = subject; } + QString subject() { return _subject; } + void addFrom(IMAPResponseAddress from) { _from.append(from); } + IMAPResponseAddressList from() { return _from; } + void addSender(IMAPResponseAddress sender) { _sender.append(sender); } + IMAPResponseAddressList sender() { return _sender; } + void addReplyTo(IMAPResponseAddress replyTo) { _replyTo.append(replyTo); } + IMAPResponseAddressList replyTo() { return _replyTo; } + void addTo(IMAPResponseAddress to) { _to.append(to); } + IMAPResponseAddressList to() { return _to; } + void addCc(IMAPResponseAddress cc) { _cc.append(cc); } + IMAPResponseAddressList cc() { return _cc; } + void addBcc(IMAPResponseAddress bcc) { _bcc.append(bcc); } + IMAPResponseAddressList bcc() { return _bcc; } + void setInReplyTo(QString inReplyTo) { _inReplyTo = inReplyTo; } + QString inReplyTo() { return _inReplyTo; } + void setMessageId(QString messageId) { _messageId = messageId; } + QString messageId() { return _messageId; } + +private: + QString _date, _subject, _inReplyTo, _messageId; + IMAPResponseAddressList _from, _sender, _replyTo, _to, _cc, _bcc; + +}; + +class IMAPResponseStatusResponse : public IMAPResponseEnums +{ +public: + IMAPResponseStatusResponse(IMAPResponseStatus status = (IMAPResponseStatus)0, QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0) + { + _status = status; + _comment = comment; + _code = code; + } + + void setStatus(IMAPResponseStatus status) { _status = status; } + IMAPResponseStatus status() { return _status; } + void setComment(QString comment) { _comment = comment; } + QString comment() { return _comment; } + void setResponseCode(IMAPResponseCode code) { _code = code; } + IMAPResponseCode responseCode() { return _code; } + + void setExitedUnexpected(bool exitu) { _exitu = exitu; } + bool exitedUnexpected() { return _exitu; } + +private: + IMAPResponseStatus _status; + QString _comment; + IMAPResponseCode _code; + bool _exitu; + +}; + +class IMAPResponseOK : public IMAPResponseEnums +{ +public: + IMAPResponseOK(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0) + { + _comment = comment; + _code = code; + } + + void setComment(QString comment) { _comment = comment; } + QString comment() { return _comment; } + void setResponseCode(IMAPResponseCode code) { _code = code; } + IMAPResponseCode responseCode() { return _code; } + +private: + QString _comment; + IMAPResponseCode _code; + +}; + +class IMAPResponseNO : public IMAPResponseEnums +{ +public: + IMAPResponseNO(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0) + { + _comment = comment; + _code = code; + } + + void setComment(QString comment) { _comment = comment; } + QString comment() { return _comment; } + void setResponseCode(IMAPResponseCode code) { _code = code; } + IMAPResponseCode responseCode() { return _code; } + +private: + QString _comment; + IMAPResponseCode _code; + +}; + +class IMAPResponseBAD : public IMAPResponseEnums +{ +public: + IMAPResponseBAD(QString comment = 0, IMAPResponseCode code = (IMAPResponseCode)0) + { + _comment = comment; + _code = code; + } + + void setComment(QString comment) { _comment = comment; } + QString comment() { return _comment; } + void setResponseCode(IMAPResponseCode code) { _code = code; } + IMAPResponseCode responseCode() { return _code; } + +private: + QString _comment; + IMAPResponseCode _code; + +}; + +class IMAPResponseCAPABILITY +{ +public: + IMAPResponseCAPABILITY(QStringList capabilities = 0) + { + _capabilities = capabilities; + } + + void setCapabilities(QStringList capabilities) { _capabilities = capabilities; } + QStringList capabilities() { return _capabilities; } + +private: + QStringList _capabilities; + +}; + +class IMAPResponseLIST : public IMAPResponseEnums +{ +public: + IMAPResponseLIST(QValueList flags = QValueList(), QString folderSeparator = 0, QString folder = 0) + { + _flags = flags; + _folderSeparator = folderSeparator; + _folder = folder; + } + + void setFlags(QValueList flags) { _flags = flags; } + QValueList flags() { return _flags; } + void setFolderSeparator(QString folderSeparator) { _folderSeparator = folderSeparator; } + QString folderSeparator() { return _folderSeparator; } + void setFolder(QString folder) { _folder = folder; } + QString folder() { return _folder; } + +private: + QValueList _flags; + QString _folderSeparator, _folder; + +}; + +class IMAPResponseLSUB : public IMAPResponseEnums +{ +public: + IMAPResponseLSUB(QValueList flags = QValueList(), QString folderSeperator = 0, QString folder = 0) + { + _flags = flags; + _folderSeperator = folderSeperator; + _folder = folder; + } + + void setFlags(QValueList flags) { _flags = flags; } + QValueList flags() { return _flags; } + void setFolderSeperator(QString folderSeperator) { _folderSeperator = folderSeperator; } + QString folderSeperator() { return _folderSeperator; } + void setFolder(QString folder) { _folder = folder; } + QString folder() { return _folder; } + +private: + QValueList _flags; + QString _folderSeperator, _folder; + +}; + +class IMAPResponseSTATUS +{ +public: + IMAPResponseSTATUS(QString mailbox = 0, QString messages = 0, QString recent = 0, QString uidnext = 0, QString uidvalidity = 0, QString unseen = 0) + { + _mailbox = mailbox; + _messages = messages; + _recent = recent; + _uidnext = uidnext; + _uidvalidity = uidvalidity; + _unseen = unseen; + } + + void setMailbox(QString &mailbox) { _mailbox = mailbox; } + QString mailbox() { return _mailbox; } + void setMessages(QString &messages) { _messages = messages; } + QString messages() { return _messages; } + void setRecent(QString &recent) { _recent = recent; } + QString recent() { return _recent; } + void setUidnext(QString &uidnext) { _uidnext = uidnext; } + QString uidnext() { return _uidnext; } + void setUidvalidity(QString &uidvalidity) { _uidvalidity = uidvalidity; } + QString uidvalidity() { return _uidvalidity; } + void setUnseen(QString &unseen) { _unseen = unseen; } + QString unseen() { return _unseen; } + +private: + QString _mailbox, _messages, _recent, _uidnext, _uidvalidity, _unseen; + +}; + +class IMAPResponseSEARCH +{ +public: + IMAPResponseSEARCH(QStringList mails = 0) + { + _mails = mails; + } + + void setMails(QStringList mails) { _mails = mails; } + QStringList mails() { return _mails; } + +private: + QStringList _mails; + +}; + +class IMAPResponseFLAGS : public IMAPResponseEnums +{ +public: + IMAPResponseFLAGS(QValueList flags = QValueList()) + { + _flags = flags; + } + + void setFlags(QValueList flags) { _flags = flags; } + QValueList flags() { return _flags; } + +private: + QValueList _flags; + +}; + +class IMAPResponseEXISTS +{ +public: + IMAPResponseEXISTS(QString mails = 0) + { + _mails = mails; + } + + void setMails(QString mails) { _mails = mails; } + QString mails() { return _mails; } + +private: + QString _mails; + +}; + +class IMAPResponseRECENT +{ +public: + IMAPResponseRECENT(QString mails = 0) + { + _mails = mails; + } + + void setMails(QString mails) { _mails = mails; } + QString mails() { return _mails; } + +private: + QString _mails; + +}; + +class IMAPResponseEXPUNGE +{ +public: + IMAPResponseEXPUNGE(QString mails = 0) + { + _mails = mails; + } + + void setMails(QString mails) { _mails = mails; } + QString mails() { return _mails; } + +private: + QString _mails; + +}; + +class IMAPResponseFETCH : public IMAPResponseEnums +{ +public: + void setEnvelope(IMAPResponseEnvelope envelope) { _envelope = envelope; } + IMAPResponseEnvelope envelope() { return _envelope; } + void setFlags(QValueList flags) { _flags = flags; } + QValueList flags() { return _flags; } + void setInternalDate(QString idate) { _idate = idate; } + QString internalDate() { return _idate; } + void setRFC822Size(QString rfc822size) { _rfc822size = rfc822size; } + QString RFC822Size() { return _rfc822size; } + void setUid(QString uid) { _uid = uid; } + QString uid() { return _uid; } + + void setBody(QString body) { _body = body; } + QString body() { return _body; } + void addBodyPart(IMAPResponseBodyPart part) { _bodyParts.append(part); } + void setBodyParts(QValueList parts) { _bodyParts = parts; } + QValueList bodyParts() { return _bodyParts; } + IMAPResponseBodyPart bodyPart(int part) { return _bodyParts[part]; } + void setRfc822(QString rfc822) { _rfc822 = rfc822; } + QString rfc822() { return _rfc822; } + void setRfc822Header(QString rfc822Header) { _rfc822Header = rfc822Header; } + QString rfc822Header() { return _rfc822Header; } + void setRfc822Text(QString rfc822Text) { _rfc822Text = rfc822Text; } + QString rfc822Text() { return _rfc822Text; } + +private: + IMAPResponseEnvelope _envelope; + QValueList _flags; + QString _idate, _rfc822size, _uid, _body, _rfc822, _rfc822Header, _rfc822Text; + QValueList _bodyParts; + +}; + +class IMAPResponse : public IMAPResponseEnums +{ +public: + void setTag(QString tag) { _tag = tag; } + QString tag() { return _tag; } + + void setImapHandler(IMAPHandler *handler) { _handler = handler; } + IMAPHandler *imapHandler() { return _handler; } + + void setStatusResponse(IMAPResponseStatusResponse response) { _response = response; } + IMAPResponseStatusResponse statusResponse() { return _response; } + + void addOK(IMAPResponseOK ok) { _okl.append(ok); } + void addNO(IMAPResponseNO no) { _nol.append(no); } + void addBAD(IMAPResponseBAD bad) { _badl.append(bad); } + void addCAPABILITY(IMAPResponseCAPABILITY capability) { _capabilityl.append(capability); } + void addLIST(IMAPResponseLIST list) { _listl.append(list); } + void addLSUB(IMAPResponseLSUB lsub) { _lsubl.append(lsub); } + void addSTATUS(IMAPResponseSTATUS status) { _statusl.append(status); } + void addSEARCH(IMAPResponseSEARCH search) { _searchl.append(search); } + void addFLAGS(IMAPResponseFLAGS flags) { _flagsl.append(flags); } + void addEXISTS(IMAPResponseEXISTS exists) { _existsl.append(exists); } + void addRECENT(IMAPResponseRECENT recent) { _recentl.append(recent); } + void addEXPUNGE(IMAPResponseEXPUNGE expunge) { _expungel.append(expunge); } + void addFETCH(IMAPResponseFETCH fetch) { _fetchl.append(fetch); } + + QValueList OK() { return _okl; } + QValueList NO() { return _nol; } + QValueList BAD() { return _badl; } + QValueList CAPABILITY() { return _capabilityl; } + QValueList LIST() { return _listl; } + QValueList LSUB() { return _lsubl; } + QValueList STATUS() { return _statusl; } + QValueList SEARCH() { return _searchl; } + QValueList FLAGS() { return _flagsl; } + QValueList EXISTS() { return _existsl; } + QValueList RECENT() { return _recentl; } + QValueList EXPUNGE() { return _expungel; } + QValueList FETCH() { return _fetchl; } + +private: + QString _tag; + IMAPResponseStatusResponse _response; + + IMAPHandler *_handler; + + QValueList _okl; + QValueList _nol; + QValueList _badl; + QValueList _capabilityl; + QValueList _listl; + QValueList _lsubl; + QValueList _statusl; + QValueList _searchl; + QValueList _flagsl; + QValueList _existsl; + QValueList _recentl; + QValueList _expungel; + QValueList _fetchl; + +}; + +class IMAPResponseParser : public QObject, public IMAPResponseEnums +{ + Q_OBJECT + +public: + IMAPResponseParser(const QString &data); + + IMAPResponse response(); + +signals: + void needMoreData(const QString &comment); + +protected: + void parseResponse(const QString &data, bool tagged = false); + + QStringList splitData(const QString &data, bool withBrackets); + void parseParenthesizedList(const QString &data, QStringList &parsed); + void splitTagData(const QString &line, QString &tag, QString &data); + QString removeLimiters(QString &string, const QChar &sl = '"', const QChar &el = '"'); + IMAPResponseCode getResponseCode(const QString &line); + QValueList parseFlagList(const QStringList &flags); + +private: + IMAPResponse _iresponse; + +}; + +#endif + -- cgit v0.9.0.2