diff options
Diffstat (limited to 'kioslave/smtp/transactionstate.h')
-rw-r--r-- | kioslave/smtp/transactionstate.h | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/kioslave/smtp/transactionstate.h b/kioslave/smtp/transactionstate.h deleted file mode 100644 index d2f9ef797..000000000 --- a/kioslave/smtp/transactionstate.h +++ /dev/null @@ -1,185 +0,0 @@ -/* -*- c++ -*- - transactionstate.h - - This file is part of kio_smtp, the KDE SMTP kioslave. - Copyright (c) 2003 Marc Mutz <[email protected]> - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License, version 2, as - published by the Free Software Foundation. - - 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 - - In addition, as a special exception, the copyright holders give - permission to link the code of this program with any edition of - the Qt library by Trolltech AS, Norway (or with modified versions - of Qt that use the same license as Qt), and distribute linked - combinations including the two. You must obey the GNU General - Public License in all respects for all of the code used other than - Qt. If you modify this file, you may extend this exception to - your version of the file, but you are not obligated to do so. If - you do not wish to do so, delete this exception statement from - your version. -*/ - -#ifndef __KIOSMTP_TRANSACTIONSTATE_H__ -#define __KIOSMTP_TRANSACTIONSTATE_H__ - -#include "response.h" - -#include <tqstring.h> -#include <tqvaluelist.h> - -namespace KioSMTP { - - /** - @short A class modelling an SMTP transaction's state - - This class models SMTP transaction state, ie. the collective - result of the MAIL FROM:, RCPT TO: and DATA commands. This is - needed since e.g. a single failed RCPT TO: command does not - neccessarily fail the whole transaction (servers are free to - accept delivery for some recipients, but not for others). - - The class can operate in two modes, which differ in the way - failed recipients are handled. If @p rcptToDenyIsFailure is true - (the default), then any failing RCPT TO: will cause the - transaction to fail. Since at the point of RCPT TO: failure - detection, the DATA command may have already been sent - (pipelining), the only way to cancel the transaction is to take - down the connection hard (ie. without proper quit). - - Since that is not very nice behaviour, a second mode that is more - to the spirit of SMTP is provided that can cope with partially - failed RCPT TO: commands. - */ - class TransactionState { - public: - struct RecipientRejection { - RecipientRejection( const TQString & who=TQString::null, - const TQString & why=TQString::null ) - : recipient( who ), reason( why ) {} - TQString recipient; - TQString reason; -#ifdef KIOSMTP_COMPARATORS - bool operator==( const RecipientRejection & other ) const { - return recipient == other.recipient && reason == other.reason; - } -#endif - }; - typedef TQValueList<RecipientRejection> RejectedRecipientList; - - TransactionState( bool rcptToDenyIsFailure=true ) - : mErrorCode( 0 ), - mRcptToDenyIsFailure( rcptToDenyIsFailure ), - mAtLeastOneRecipientWasAccepted( false ), - mDataCommandIssued( false ), - mDataCommandSucceeded( false ), - mFailed( false ), - mFailedFatally( false ), - mComplete( false ) {} - - /** @return whether the transaction failed (e.g. the server - rejected all recipients. Graceful failure is handled after - transaction ends. */ - bool failed() const { return mFailed || mFailedFatally; } - void setFailed() { mFailed = true; } - - /** @return whether the failure was so grave that an immediate - untidy connection shutdown is in order (ie. @ref - smtp_close(false)). Fatal failure is handled immediately */ - bool failedFatally() const { return mFailedFatally; } - void setFailedFatally( int code=0, const TQString & msg=TQString::null ); - - /** @return whether the transaction was completed successfully */ - bool complete() const { return mComplete; } - void setComplete() { mComplete = true; } - - /** @return an appropriate KIO error code in case the transaction - failed, or 0 otherwise */ - int errorCode() const; - /** @return an appropriate error message in case the transaction - failed or TQString::null otherwise */ - TQString errorMessage() const; - - void setMailFromFailed( const TQString & addr, const Response & r ); - - bool dataCommandIssued() const { return mDataCommandIssued; } - void setDataCommandIssued( bool issued ) { mDataCommandIssued = issued; } - - bool dataCommandSucceeded() const { - return mDataCommandIssued && mDataCommandSucceeded; - } - void setDataCommandSucceeded( bool succeeded, const Response & r ); - - Response dataResponse() const { - return mDataResponse; - } - - bool atLeastOneRecipientWasAccepted() const { - return mAtLeastOneRecipientWasAccepted; - } - void setRecipientAccepted() { - mAtLeastOneRecipientWasAccepted = true; - } - - bool haveRejectedRecipients() const { - return !mRejectedRecipients.empty(); - } - RejectedRecipientList rejectedRecipients() const { - return mRejectedRecipients; - } - void addRejectedRecipient( const RecipientRejection & r ); - void addRejectedRecipient( const TQString & who, const TQString & why ) { - addRejectedRecipient( RecipientRejection( who, why ) ); - } - - void clear() { - mRejectedRecipients.clear(); - mDataResponse.clear(); - mAtLeastOneRecipientWasAccepted - = mDataCommandIssued - = mDataCommandSucceeded - = mFailed = mFailedFatally - = mComplete = false; - } - -#ifdef KIOSMTP_COMPARATORS - bool operator==( const TransactionState & other ) const { - return - mAtLeastOneRecipientWasAccepted == other.mAtLeastOneRecipientWasAccepted && - mDataCommandIssued == other.mDataCommandIssued && - mDataCommandSucceeded == other.mDataCommandSucceeded && - mFailed == other.mFailed && - mFailedFatally == other.mFailedFatally && - mComplete == other.mComplete && - mDataResponse.code() == other.mDataResponse.code() && - mRejectedRecipients == other.mRejectedRecipients; - } -#endif - - - private: - RejectedRecipientList mRejectedRecipients; - Response mDataResponse; - TQString mErrorMessage; - int mErrorCode; - bool mRcptToDenyIsFailure; - bool mAtLeastOneRecipientWasAccepted; - bool mDataCommandIssued; - bool mDataCommandSucceeded; - bool mFailed; - bool mFailedFatally; - bool mComplete; - }; - -} // namespace KioSMTP - -#endif // __KIOSMTP_TRANSACTIONSTATE_H__ |