--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/smtpservermtm/inc/smtpauthhelpers.h Thu Dec 17 08:44:11 2009 +0200
@@ -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 <imcvcodc.h>
+#include <smtpset.h>
+#include "csmtpsettings.h"
+#include <hash.h> //hashing functions for Cramm Md5
+#include <imcvcodc.h>
+#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<KImMailMaxBufferSize> 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