You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
395 lines
12 KiB
395 lines
12 KiB
15 years ago
|
#ifndef _IMAPCOMMAND_H
|
||
|
#define _IMAPCOMMAND_H
|
||
|
/**********************************************************************
|
||
|
*
|
||
|
* imapcommand.h - IMAP4rev1 command handler
|
||
|
* Copyright (C) 2000 Sven Carstens
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*
|
||
|
* Send comments and bug fixes to
|
||
|
*
|
||
|
*********************************************************************/
|
||
|
|
||
|
#include <qstringlist.h>
|
||
|
#include <qstring.h>
|
||
|
#include <qmap.h>
|
||
|
|
||
|
/**
|
||
|
* @brief encapulate a IMAP command
|
||
|
* @author Svenn Carstens
|
||
|
* @date 2000
|
||
|
* @todo fix the documentation
|
||
|
*/
|
||
|
|
||
|
class imapCommand
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
/**
|
||
|
* @brief Constructor
|
||
|
*/
|
||
|
imapCommand ();
|
||
|
/**
|
||
|
* @fn imapCommand (const QString & command, const QString & parameter);
|
||
|
* @brief Constructor
|
||
|
* @param command Imap command
|
||
|
* @param parameter Parameters to the command
|
||
|
* @return none
|
||
|
*/
|
||
|
imapCommand (const QString & command, const QString & parameter);
|
||
|
/**
|
||
|
* @fn bool isComplete ();
|
||
|
* @brief is it complete?
|
||
|
* @return whether the command is completed
|
||
|
*/
|
||
|
bool isComplete ();
|
||
|
/**
|
||
|
* @fn const QString & result ();
|
||
|
* @brief get the result of the command
|
||
|
* @return The result, i.e. first word of the result line, like OK
|
||
|
*/
|
||
|
const QString & result ();
|
||
|
/**
|
||
|
* @fn const QString & resultInfo ();
|
||
|
* @brief get information about the result
|
||
|
* @return Information about the result, i.e. the rest of the result line
|
||
|
*/
|
||
|
const QString & resultInfo ();
|
||
|
/**
|
||
|
* @fn const QString & parameter ();
|
||
|
* @brief get the parameter
|
||
|
* @return the parameter
|
||
|
*/
|
||
|
const QString & parameter ();
|
||
|
/**
|
||
|
* @fn const QString & command ();
|
||
|
* @brief get the command
|
||
|
* @return the command
|
||
|
*/
|
||
|
const QString & command ();
|
||
|
/**
|
||
|
* @fn const QString & id ();
|
||
|
* @brief get the id
|
||
|
* @return the id
|
||
|
*/
|
||
|
const QString & id ();
|
||
|
|
||
|
/**
|
||
|
* @fn void setId (const QString &);
|
||
|
* @brief set the id
|
||
|
* @param id the id used by the command
|
||
|
* @return none
|
||
|
*/
|
||
|
void setId (const QString &);
|
||
|
/**
|
||
|
* @fn void setComplete ();
|
||
|
* @brief set the completed state
|
||
|
* @return none
|
||
|
*/
|
||
|
void setComplete ();
|
||
|
/**
|
||
|
* @fn void setResult (const QString &);
|
||
|
* @brief set the completed state
|
||
|
* @param result the command result
|
||
|
* @return none
|
||
|
*/
|
||
|
void setResult (const QString &);
|
||
|
/**
|
||
|
* @fn void setResultInfo (const QString &);
|
||
|
* @brief set the completed state
|
||
|
* @param result the command result information
|
||
|
* @return none
|
||
|
*/
|
||
|
void setResultInfo (const QString &);
|
||
|
/**
|
||
|
* @fn void setCommand (const QString &);
|
||
|
* @brief set the command
|
||
|
* @param command the imap command
|
||
|
* @return none
|
||
|
*/
|
||
|
void setCommand (const QString &);
|
||
|
/**
|
||
|
* @fn void setParameter (const QString &);
|
||
|
* @brief set the command parameter(s)
|
||
|
* @param parameter the comand parameter(s)
|
||
|
* @return none
|
||
|
*/
|
||
|
void setParameter (const QString &);
|
||
|
/**
|
||
|
* @fn const QString getStr ();
|
||
|
* @brief returns the data to send to the server
|
||
|
* The function returns the complete data to be sent to
|
||
|
* the server (\<id\> \<command\> [\<parameter\>])
|
||
|
* @return the data to send to the server
|
||
|
* @todo possibly rename function to be clear of it's purpose
|
||
|
*/
|
||
|
const QString getStr ();
|
||
|
|
||
|
/**
|
||
|
* @fn static imapCommand *clientNoop ();
|
||
|
* @brief Create a NOOP command
|
||
|
* @return a NOOP imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientNoop ();
|
||
|
/**
|
||
|
* @fn static imapCommand *clientFetch (ulong uid, const QString & fields, bool nouid = false);
|
||
|
* @brief Create a FETCH command
|
||
|
* @param uid Uid of the message to fetch
|
||
|
* @param fields options to pass to the server
|
||
|
* @param nouid Perform a FETCH or UID FETCH command
|
||
|
* @return a FETCH imapCommand
|
||
|
* Fetch a single uid
|
||
|
*/
|
||
|
static imapCommand *clientFetch (ulong uid, const QString & fields,
|
||
|
bool nouid = false);
|
||
|
/**
|
||
|
* @fn static imapCommand *clientFetch (ulong fromUid, ulong toUid, const QString & fields, bool nouid = false);
|
||
|
* @brief Create a FETCH command
|
||
|
* @param fromUid start uid of the messages to fetch
|
||
|
* @param toUid last uid of the messages to fetch
|
||
|
* @param fields options to pass to the server
|
||
|
* @param nouid Perform a FETCH or UID FETCH command
|
||
|
* @return a FETCH imapCommand
|
||
|
* Fetch a range of uids
|
||
|
*/
|
||
|
static imapCommand *clientFetch (ulong fromUid, ulong toUid,
|
||
|
const QString & fields, bool nouid =
|
||
|
false);
|
||
|
/**
|
||
|
* @fn static imapCommand *clientFetch (const QString & sequence, const QString & fields, bool nouid = false);
|
||
|
* @brief Create a FETCH command
|
||
|
* @param sequence a IMAP FETCH sequence string
|
||
|
* @param fields options to pass to the server
|
||
|
* @param nouid Perform a FETCH or UID FETCH command
|
||
|
* @return a FETCH imapCommand
|
||
|
* Fetch a range of uids. The other clientFetch functions are just
|
||
|
* wrappers around this function.
|
||
|
*/
|
||
|
static imapCommand *clientFetch (const QString & sequence,
|
||
|
const QString & fields, bool nouid =
|
||
|
false);
|
||
|
/**
|
||
|
* @fn static imapCommand *clientList (const QString & reference, const QString & path, bool lsub = false);
|
||
|
* @brief Create a LIST command
|
||
|
* @param reference
|
||
|
* @param path The path to list
|
||
|
* @param lsub Perform a LIST or a LSUB command
|
||
|
* @return a LIST imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientList (const QString & reference,
|
||
|
const QString & path, bool lsub = false);
|
||
|
/**
|
||
|
* @fn static imapCommand *clientSelect (const QString & path, bool examine = false);
|
||
|
* @brief Create a SELECT command
|
||
|
* @param path The path to select
|
||
|
* @param lsub Perform a SELECT or a EXAMINE command
|
||
|
* @return a SELECT imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientSelect (const QString & path, bool examine =
|
||
|
false);
|
||
|
/**
|
||
|
* @fn static imapCommand *clientClose();
|
||
|
* @brief Create a CLOSE command
|
||
|
* @return a CLOSE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientClose();
|
||
|
/**
|
||
|
* @brief Create a STATUS command
|
||
|
* @param path
|
||
|
* @param parameters
|
||
|
* @return a STATUS imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientStatus (const QString & path,
|
||
|
const QString & parameters);
|
||
|
/**
|
||
|
* @brief Create a COPY command
|
||
|
* @param box
|
||
|
* @param sequence
|
||
|
* @param nouid Perform a COPY or UID COPY command
|
||
|
* @return a COPY imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientCopy (const QString & box,
|
||
|
const QString & sequence, bool nouid =
|
||
|
false);
|
||
|
/**
|
||
|
* @brief Create a APPEND command
|
||
|
* @param box
|
||
|
* @param flags
|
||
|
* @param size
|
||
|
* @return a APPEND imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientAppend (const QString & box,
|
||
|
const QString & flags, ulong size);
|
||
|
/**
|
||
|
* @brief Create a CREATE command
|
||
|
* @param path
|
||
|
* @return a CREATE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientCreate (const QString & path);
|
||
|
/**
|
||
|
* @brief Create a DELETE command
|
||
|
* @param path
|
||
|
* @return a DELETE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientDelete (const QString & path);
|
||
|
/**
|
||
|
* @brief Create a SUBSCRIBE command
|
||
|
* @param path
|
||
|
* @return a SUBSCRIBE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientSubscribe (const QString & path);
|
||
|
/**
|
||
|
* @brief Create a UNSUBSCRIBE command
|
||
|
* @param path
|
||
|
* @return a UNSUBSCRIBE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientUnsubscribe (const QString & path);
|
||
|
/**
|
||
|
* @brief Create a EXPUNGE command
|
||
|
* @return a EXPUNGE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientExpunge ();
|
||
|
/**
|
||
|
* @brief Create a RENAME command
|
||
|
* @param src Source
|
||
|
* @param dest Destination
|
||
|
* @return a RENAME imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientRename (const QString & src,
|
||
|
const QString & dest);
|
||
|
/**
|
||
|
* @brief Create a SEARCH command
|
||
|
* @param search
|
||
|
* @param nouid Perform a UID SEARCH or a SEARCH command
|
||
|
* @return a SEARCH imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientSearch (const QString & search, bool nouid =
|
||
|
false);
|
||
|
/**
|
||
|
* @brief Create a STORE command
|
||
|
* @param set
|
||
|
* @param item
|
||
|
* @param data
|
||
|
* @param nouid Perform a UID STORE or a STORE command
|
||
|
* @return a STORE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientStore (const QString & set, const QString & item,
|
||
|
const QString & data, bool nouid = false);
|
||
|
/**
|
||
|
* @brief Create a LOGOUT command
|
||
|
* @return a LOGOUT imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientLogout ();
|
||
|
/**
|
||
|
* @brief Create a STARTTLS command
|
||
|
* @return a STARTTLS imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientStartTLS ();
|
||
|
|
||
|
//////////// ACL support (RFC 2086) /////////////
|
||
|
/**
|
||
|
* @brief Create a SETACL command
|
||
|
* @param box mailbox name
|
||
|
* @param user authentication identifier
|
||
|
* @param acl access right modification (starting with optional +/-)
|
||
|
* @return a SETACL imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientSetACL ( const QString& box, const QString& user, const QString& acl );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a DELETEACL command
|
||
|
* @param box mailbox name
|
||
|
* @param user authentication identifier
|
||
|
* @return a DELETEACL imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientDeleteACL ( const QString& box, const QString& user );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a GETACL command
|
||
|
* @param box mailbox name
|
||
|
* @return a GETACL imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientGetACL ( const QString& box );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a LISTRIGHTS command
|
||
|
* @param box mailbox name
|
||
|
* @param user authentication identifier
|
||
|
* @return a LISTRIGHTS imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientListRights ( const QString& box, const QString& user );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a MYRIGHTS command
|
||
|
* @param box mailbox name
|
||
|
* @return a MYRIGHTS imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientMyRights ( const QString& box );
|
||
|
|
||
|
//////////// ANNOTATEMORE support /////////////
|
||
|
/**
|
||
|
* @brief Create a SETANNOTATION command
|
||
|
* @param box mailbox name
|
||
|
* @param entry entry specifier
|
||
|
* @param attributes map of attribute names + values
|
||
|
* @return a SETANNOTATION imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientSetAnnotation ( const QString& box, const QString& entry, const QMap<QString, QString>& attributes );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a GETANNOTATION command
|
||
|
* @param box mailbox name
|
||
|
* @param entry entry specifier
|
||
|
* @param attributeNames attribute specifier
|
||
|
* @return a GETANNOTATION imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientGetAnnotation ( const QString& box, const QString& entry, const QStringList& attributeNames );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a NAMESPACE command
|
||
|
* @return a NAMESPACE imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientNamespace ();
|
||
|
|
||
|
/**
|
||
|
* @brief Create a GETQUOTAROOT command
|
||
|
* @param box mailbox name
|
||
|
* @return a GETQUOTAROOT imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientGetQuotaroot ( const QString& box );
|
||
|
|
||
|
/**
|
||
|
* @brief Create a custom command
|
||
|
* @param command The custom command
|
||
|
* @param arguments The custom arguments
|
||
|
* @return a custom imapCommand
|
||
|
*/
|
||
|
static imapCommand *clientCustom ( const QString& command, const QString& arguments );
|
||
|
|
||
|
protected:
|
||
|
QString aCommand;
|
||
|
QString mId;
|
||
|
bool mComplete;
|
||
|
QString aParameter;
|
||
|
QString mResult;
|
||
|
QString mResultInfo;
|
||
|
|
||
|
private:
|
||
|
imapCommand & operator = (const imapCommand &);
|
||
|
};
|
||
|
|
||
|
#endif
|