--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/imapservermtm/inc/IMAPIO.H Mon May 03 12:29:07 2010 +0300
@@ -0,0 +1,272 @@
+// Copyright (c) 1998-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:
+// CImapIO header
+//
+//
+
+#if !defined(__IMAPIO_H__)
+#define __IMAPIO_H__
+
+#include <e32base.h>
+#include <e32cons.h>
+#include <mentact.h>
+#include <imsk.h>
+#include <iapprefs.h>
+
+// Receive buffer size (max to read in one go). Should really be MTU related,
+// as that's what we'll get in a chunk.
+const TInt KReceiveBuffer=2048;
+
+// Transmit buffer to keep data static when sending
+const TInt KTransmitBuffer=1024;
+
+// What we return with if we find an EOL and have been asked to do a partial
+// read
+const TInt KErrFoundEOL=1;
+
+// States of async machine
+/**
+@internalComponent
+@released
+*/
+enum TIOState
+ {
+ EIOStateDisconnected,
+ EIOStateConnectQueued,
+ EIOStateConnected,
+ EIOStateReadQueued,
+ EIOStateWriteQueued,
+ EIOStateDummyQueued
+ };
+
+// States of reply parser
+/**
+@internalComponent
+@released
+*/
+enum TIOParserState
+ {
+ EIOStateAtomWait,
+ EIOStateInAtom,
+ EIOStateWaitLF,
+ EIOStateLiteralLength,
+ EIOStateLiteralSkip,
+ EIOStateLiteralFetch
+ };
+
+class CImapAtom : public CBase
+/**
+@internalComponent
+@released
+*/
+ {
+public:
+ CImapAtom();
+ ~CImapAtom();
+
+ void Set(const TDesC8& aAtom);
+ void AddChild(CImapAtom *aNewChild);
+ void AddNext(CImapAtom *aNewNext);
+
+ // Get child/next pointers
+ CImapAtom* Child();
+ CImapAtom* Next();
+
+ // As above, but with leave if null
+ CImapAtom* ToChildL();
+ CImapAtom* ToNextL();
+
+ TPtrC8 Atom();
+ TBool Compare(const TDesC8& aValue);
+ TBool CompareTail(const TDesC8& aValue);
+ TInt Value(TUint& aValue);
+ TInt Value(TInt& aValue);
+ TInt Value(TInt32& aValue);
+ void FixupL(const HBufC8 *aNewBuffer, const TText8 *aOldBuffer);
+ TPtrC8 AtomNoAngleBrackets();
+
+private:
+ TPtrC8 iAtom;
+ CImapAtom* iChild;
+ CImapAtom* iNext;
+ };
+
+
+class CImapIO : public CMsgActive
+/**
+@internalComponent
+@released
+*/
+ {
+public:
+ ~CImapIO();
+
+ static CImapIO* NewLC(TInt aId);
+ static CImapIO* NewL(TInt aId);
+
+ // Queue a connect
+ void ConnectL(TRequestStatus& aStatus, const TDesC& aHost, const TUint aPort, const CImIAPPreferences& aPrefs, TBool aSSLWrappedSocket);
+
+ // Queue a line read
+ TInt GetReply(TRequestStatus& aStatus);
+ TInt GetReply(TRequestStatus& aStatus, const TInt aFetchSize, const TBool aPartialReturn);
+
+ // Queue a line write
+ TInt Send(TRequestStatus& aStatus, TRefByValue<const TDesC8> aFmt,...);
+ void SendL(TRequestStatus& aStatus, TRefByValue<const TDesC8> aFmt,...);
+ void SendWithTimeoutL(TRequestStatus& aStatus, TInt aTimeout, TRefByValue<const TDesC8> aFmt,...);
+
+ // Logging
+ void PerformLogging(TBool aLogging);
+
+ // Queue a dummy read for connection status notification
+ void QueueDummy(TRequestStatus& aStatus);
+
+ // Get the root atom of the parse tree
+ CImapAtom* RootAtom();
+
+ // Get bytes in/out totals
+ TInt RXbytes(const TBool aReset);
+ TInt TXbytes(const TBool aReset);
+
+ // Disconnect
+ void Disconnect();
+
+ // Security
+ void SetTLSResponseL();
+
+ // From IMSK
+ void LogText(const TDesC8& aString);
+ void LogText(TRefByValue<const TDesC8> aFmt,...);
+
+/**
+ @fn TInt GetIAPValue(TUint32& aIap)
+ Intended Usage : Gets the value of the currently connecting/connected IAP
+ @param aIap will be value of the currently connecting/connected IAP or KErrNotFound if an error occurs
+ @return KErrNone if succesful, KErrNotFound is the session does not exist or a system-wide error code.
+
+ */
+ TInt GetIAPValue(TUint32& aIap);
+
+/**
+ @fn GetRConnectionName()
+ Intended Usage : On return, the unique name of the RConnection.
+ @since 9.1
+ @return KErrNone if succesful, or another of the system-wide error codes.
+ */
+ TInt GetRConnectionName(TName &aName);
+
+/**
+ @fn GetLastSocketActivityTimeout(TUint32& aTimeout)
+ Intended Usage : Returns the last socket activity timeout value
+ @since 9.1
+ @param aTimeout is a return argument containing the timeout if it was found
+ @post aTimeout will be filled with the timeout value
+ @return Returns KErrNone, KErrNotFound or KErrBadHandle
+ */
+ TInt GetLastSocketActivityTimeout(TUint32& aTimeout);
+
+/**
+ @fn TInt GetConnectionStage()
+ Intended Usage : Gets the stage of the connection process as defined in nifvar.h and csdprog.h
+ @since 7.0s
+ @return The current connection stage, KErrNotFound is the session does not exist or a system-wide error code.
+
+ */
+ TInt GetConnectionStage();
+
+/**
+ @fn SetPrimaryTextServerSession(CImTextServerSession* aPrimaryTextServerSession)
+ Intended Usage : Sets the local primaryTextSeverSession from PrimarySession's TextServerSession.
+ Going to be use on the secondary session
+ @since 9.2
+ @param aPrimaryTextServerSession is to store the primary session's TextServerSession
+ */
+ void SetPrimaryTextServerSession(CImTextServerSession* aPrimaryTextServerSession);
+
+/**
+ @fn GetTextServerSession()
+ Intended Usage : Returns CImTextServerSession
+ @since 9.2
+ @return CImTextServerSession
+ */
+ CImTextServerSession* GetTextServerSession();
+
+private:
+ CImapIO(TInt aId);
+ void ConstructL();
+ void DoComplete(TInt& /*aStatus*/);
+ void DoRunL();
+ void DoCancel();
+ void ProcessBufferL();
+ void QueueRead();
+ void BufferAppendL(const TChar aChar);
+
+ void PushL(CImapAtom *aItem);
+ CImapAtom* PopL();
+
+ void AddAtomL();
+ void AddAtomL(const TInt);
+ TInt Send(TRequestStatus& aStatus, const TDesC8& aCommand);
+ TInt SendWithTimeout(TRequestStatus& aStatus, TInt aTimeout, const TDesC8& aCommand);
+
+private:
+ TIOState iState;
+ TIOParserState iParserState;
+ TBool iParserQuoted;
+ TBool iGotEscape;
+ TInt iLineStatus;
+ TInt iLiteralSkip;
+ TInt iLiteralLength;
+ TInt iBytesRead;
+ TInt iBytesToRead;
+ TBool iReturnPartialLine;
+
+ HBufC8* iBuffer;
+ TInt iBufferSize;
+ TBuf8<KReceiveBuffer> iReceive;
+ TBuf8<KTransmitBuffer> iTransmit;
+ TInt iLen;
+ TBuf8<1> iDummyBuffer;
+
+ CImapAtom* iRootAtom;
+ CImapAtom* iAtom;
+ TPtrC8 iCurrentAtom;
+ TInt iAtomStart;
+
+ CArrayPtrFlat<CImapAtom> iAtomStack;
+ TBool iNextIsChild;
+
+ // Byte I/O totals
+ TInt iTXbytes;
+ TInt iRXbytes;
+
+ // Actual connection
+ CImTextServerSession* iSession;
+
+ // Extra logging
+ CImLog* iImapLog;
+
+ // Atom array
+ RPointerArray<CImapAtom> iAtomArray;
+
+ TInt iID;
+
+ // Take ownership of primary session's Textserversession object
+ // Only going to be set on the secondary session
+ CImTextServerSession* iPrimaryTextServerSession;
+
+ };
+
+#endif