email/pop3andsmtpmtm/popservermtm/inc/POPSOP.H
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/popservermtm/inc/POPSOP.H	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,292 @@
+// Copyright (c) 2008-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:
+// popservermtm module header
+// @internalComponent
+// @released
+// 
+//
+
+#if !defined(_IMPPOP_H__)
+#define _IMPPOP_H__
+
+#include <badesca.h>
+#include <e32std.h>
+#include <e32base.h>    // For CMsgActive, TFileName
+#include <imsk.h>		// ImSockets interface - For CImSocket() wrapper.
+#if (defined SYMBIAN_EMAIL_CAPABILITY_SUPPORT)
+#include "cpopsaslauthhelper.h"
+#endif
+
+class CImRecvConvert;
+
+//
+// CImPop3Operation
+//
+class CImPop3Operation : public CMsgActive
+	{
+public:
+	~CImPop3Operation();
+	virtual TBool SetMessage(TMsvId);
+	
+	TBool PopCommandAccepted();
+	// get necessary info from IMCV
+	TMsvId EntryId() { return iNewEntryId; };
+	TBool  EmptyHeaders() { return iEmptyHeaders; };
+	TPtrC8  ImMsgId();
+
+protected:
+	CImPop3Operation();
+	virtual void Construct(CImPop3Session*);
+	virtual void Construct(CImPop3Session*, CImRecvConvert*);
+
+	virtual void DoRunL();
+	virtual void DoCancel();
+	virtual void DoComplete(TInt&);
+
+	TInt MessageNo(TMsvId);
+	void QueueReadNext();
+	void RetrieveMessageL();
+	void CheckIfPending();
+	void RemoveFirstDot();
+
+protected:
+	CImTextServerSession*			iTextServer;
+	CImPop3Session*					iPopSession;
+
+	TImMailBuffer					iTextServerResponse;
+
+	TInt							iMessageNo;
+	TBufC8<3>						iFullStopTerminator;
+	TBool							iFirstLine;
+	TBool							iCommandAccepted;
+	CImRecvConvert*					iRecvConverter;
+
+	TMsvId							iNewEntryId;
+	TBool							iEmptyHeaders;
+	HBufC8*							iImId;
+	TBool							iParsedHeader;
+	};
+
+//
+// CImPop3Stat
+//
+// STAT command returns no of messages and total size of remote mailbox
+//
+class CImPop3Stat : public CImPop3Operation
+	{
+public:
+	static CImPop3Stat* NewL(CImPop3Session*);
+	void Start(TRequestStatus&, TUint&, TUint&);
+	
+private:
+	inline CImPop3Stat() {};
+	virtual void DoRunL();
+private:
+	TUint*		iNoMessages;
+	TUint*		iMailboxSize;
+	};
+
+//
+// CImPop3List
+//
+// list get size of a single message or all messages in remote mailbox
+//
+class CImPop3List : public CImPop3Operation
+	{
+public:
+	static CImPop3List* NewL(CImPop3Session*);
+	void Start(TRequestStatus&, TUint*);
+private:
+	inline	CImPop3List() {};
+	virtual void DoRunL();
+	TInt	GetIndexAndSize(TLex8*);
+private:
+	TUint*		iSize;
+	TUint		iArrayPos;
+	TInt 		iNoResponses;
+	};
+
+//
+// CImPop3Retr
+//
+// retrieve a specified message
+//
+class CImPop3Retr : public CImPop3Operation
+	{
+public:
+	static CImPop3Retr* NewL(CImPop3Session*, CImRecvConvert*, RFs&);
+	void StartL(TRequestStatus&);
+	void SetMessageIndex(TInt);
+	virtual TUint Progress();
+
+private:
+	inline CImPop3Retr(RFs& aFs) : iFs(aFs) {};
+	void ConstructL(CImPop3Session *aPopSession, CImRecvConvert* aRecvConverter);
+	void DoRunL();
+private:
+	TUint		iNoBytesRetrieved;
+	RFs&		iFs;
+	TInt		iCurrentDrive;
+	};
+
+//
+// CImPop3Dele
+//
+// delete a specified message
+//
+class CImPop3Dele : public CImPop3Operation
+	{
+public:
+	static CImPop3Dele* NewL(CImPop3Session*);
+	void Start(TRequestStatus&);
+private:
+	inline CImPop3Dele() {};
+	};
+
+//
+// CImPop3Noop
+//
+// carry out a no operation
+//
+class CImPop3Noop : public CImPop3Operation
+	{
+public:
+	static CImPop3Noop* NewL(CImPop3Session*);
+	void Start(TRequestStatus&);
+private:
+	inline CImPop3Noop() {};
+	};
+
+//
+// CImPop3Rset
+//
+// carry out RSET command
+//
+class CImPop3Rset : public CImPop3Operation
+	{
+public:
+	static CImPop3Rset* NewL(CImPop3Session*);
+	void Start(TRequestStatus&);
+private:
+	inline CImPop3Rset() {};
+	};
+
+//
+// CImPop3Top
+//
+// sends the TOP command to request email headers. 
+//
+class CImPop3Top : public CImPop3Operation
+	{
+public:
+	static CImPop3Top* NewL(CImPop3Session*, CImRecvConvert* ,TBool aHeaderOnly=ETrue);
+	void StartL(TRequestStatus&);
+	TBool SetMessageAndLines(TMsvId, TInt);
+	void SetMessageIndexAndLines(TInt, TInt);
+	void SetStartAndEndMessageIndex(TInt, TInt);
+	virtual TUint Progress();
+private:
+	inline CImPop3Top() {};
+
+	void DoRunL();
+	void ConstructL(CImPop3Session*, CImRecvConvert* ,TBool aHeaderOnly);
+
+
+	TInt		iNoLines;
+	TUint		iNoBytesRetrieved;
+	TBool		iHeadersOnly;
+	TInt		iStartMsg;
+	TInt		iLastMulti;
+	TBool 		iPipeliningSupported;
+	};
+
+
+// 
+// CImPop3UidlMap
+// 
+// return unique POP id of a specified message or ids of all the remote messages
+//
+class CImPop3UidlMap : public CBase
+	{
+public:
+	static CImPop3UidlMap* NewL(TInt aMsgCount);
+	~CImPop3UidlMap();
+
+	void BindL(TInt aMsgIx,const TDesC8& aUidl);
+	TInt MsgNo(const TDesC8& aUidl) const;
+	TPtrC8 At(TInt aMsgIx) const;
+	inline TPtrC8 operator[](TInt aMsgIx) const;
+	TInt MsgUidlNo(const TDesC8& aUidl,TInt& aPos) const;
+	TInt MsgIndex(TInt aPos) const;
+	TInt MsgCount() const;
+	TPtrC8 MsgUidl(TInt aPos) const;
+private:
+	CImPop3UidlMap(TInt aMsgCount);
+private:
+	CDesC8ArrayFlat iUid;
+	CArrayFixFlat<TInt> iMsgNo;
+	};
+
+inline TPtrC8 CImPop3UidlMap::operator[](TInt aMsgNo) const
+	{return At(aMsgNo);}
+
+//
+//  CImPop3Uidl
+//
+//
+class CImPop3Uidl : public CImPop3Operation
+	{
+public:
+	static CImPop3Uidl* NewL(CImPop3Session*);
+	void Start(TRequestStatus&, CImPop3UidlMap&);
+
+private:
+	inline CImPop3Uidl() {};
+	
+	void DoRunL();
+	void GetIndexAndUidL(TLex8*);
+private:
+	CImPop3UidlMap*		iMsgUid;
+	};
+	
+//
+// CImPop3Capa
+//
+// returns the list of capabilities supported by the server
+//
+class CImPop3Capa : public CImPop3Operation
+	{
+public:
+	static CImPop3Capa* NewL(CImPop3Session*);
+	void Start(TRequestStatus&);
+	TBool PipeliningSupport();
+	void ParseSASLCapabilitise(const TDesC8& aData);
+#if (defined SYMBIAN_EMAIL_CAPABILITY_SUPPORT)	
+	void SetSaslAuthExtensionFlag();
+	TUint SaslAuthExtensionFlag();
+#endif
+	
+private:
+	inline CImPop3Capa() {};
+	virtual void DoRunL();
+
+private:
+	TBool iPipeliningSupported;
+#if (defined SYMBIAN_EMAIL_CAPABILITY_SUPPORT)	
+	TUint iSupportedAuthProfiles; // for TPopAuthProfileFlags
+	CPopAuthMechanismHelper::TPopAuthProfileFlag iCurrentAuthProfile;
+#endif	
+	};
+
+#endif