diff -r 6a20128ce557 -r ebfee66fde93 email/pop3andsmtpmtm/smtpservermtm/inc/smtpauthhelpers.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/smtpservermtm/inc/smtpauthhelpers.h Fri Jun 04 10:25:39 2010 +0100 @@ -0,0 +1,131 @@ +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This file specifies the "helper" classes that generate the Client responses +// for a particular SMTP Auth mechanism. The last Server message is required +// to generate the Client response +// +// + + +#if !defined(_SMTPAUTHHELPERS_H__) +#define _SMTPAUTHHELPERS_H__ + +#include +#include +#include "csmtpsettings.h" +#include //hashing functions for Cramm Md5 +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include "timrfc822datefield.h" +#endif + +// Base class for SMTP Auth "helper" mechanism +class CSmtpAuthMechanismHelper : public CBase +/** +@internalComponent +@released +*/ + { +public: + enum TSmtpAuthProfileFlag + { + ENoProfile=0x00, + EPlain=0x01, + ELogin=0x02, + ECramMD5=0x04, + EUndefined=0x08, // must be last flag + }; +protected: + CSmtpAuthMechanismHelper(const CSmtpSettings& aSettings); +public: + virtual void GetNextClientMessageL(TDes8& aNextMessage)=0; + virtual void SetLastServerMessageL(const TDesC8& aLastMessage, TBool aIsMultiLineResponse)=0; +protected: + const CSmtpSettings& iSettings; + TPtrC8 iLastServerMessage; + TBuf8 iNextClientMessage; + }; + +// Smtp Auth 'PLAIN mechanism helper +class CSmtpAuthPlainMechanismHelper : public CSmtpAuthMechanismHelper +/** +@internalComponent +@released +*/ + { +public: + CSmtpAuthPlainMechanismHelper(const CSmtpSettings& aSettings); +public: + void GetNextClientMessageL(TDes8& aNextMessage); + void SetLastServerMessageL(const TDesC8& aLastMessage, TBool aIsMultiLineResponse); +private: + TImCodecB64 iEncoder; + }; + +// Smtp Auth 'LOGIN' mechanism helper +class CSmtpAuthLoginMechanismHelper : public CSmtpAuthMechanismHelper +/** +@internalComponent +@released +*/ + { +public: + static CSmtpAuthLoginMechanismHelper* NewL(const CSmtpSettings& aSettings); + ~CSmtpAuthLoginMechanismHelper(); +public: + void GetNextClientMessageL(TDes8& aNextMessage); + void SetLastServerMessageL(const TDesC8& aLastMessage, TBool aIsMultiLineResponse); +private: + CSmtpAuthLoginMechanismHelper(const CSmtpSettings& aSettings); + void ConstructL(); +private: + enum TLoginState + { + ESendingAuth=0, + ESendingLoginName, + ESendingPassword, + }; + TLoginState iState; + TImCodecB64 iEncoder; + HBufC8* iBase64LoginName; + HBufC8* iBase64Password; + }; + +// Smtp Auth 'CRAM-MD5' mechanism helper +class CSmtpAuthCramMd5MechanismHelper : public CSmtpAuthMechanismHelper +/** +@internalComponent +@released +*/ + { +public: + static CSmtpAuthCramMd5MechanismHelper* NewL(const CSmtpSettings& aSettings); + ~CSmtpAuthCramMd5MechanismHelper(); +public: + void GetNextClientMessageL(TDes8& aNextMessage); + void SetLastServerMessageL(const TDesC8& aLastMessage, TBool aIsMultiLineResponse); +private: + CSmtpAuthCramMd5MechanismHelper(const CSmtpSettings& aSettings); + void ConstructL(); +private: + TPtr8 FormSharedSecret(TPtr8 aPassword); +private: + TBool iInProgress; + TImCodecB64 iEncoder; + CMD5* iMd5Hash; + }; + +GLREF_C CSmtpAuthMechanismHelper* CreateSMTPAuthHelperL(CSmtpAuthMechanismHelper::TSmtpAuthProfileFlag aType, const CSmtpSettings& aSettings); //factory function + +#endif