email/pop3andsmtpmtm/smtpservermtm/inc/smtpauthhelpers.h
changeset 0 72b543305e3a
--- /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