email/pop3andsmtpmtm/servermtmutils/inc/IMSK.H
changeset 0 72b543305e3a
equal deleted inserted replaced
-1:000000000000 0:72b543305e3a
       
     1 // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // This file contains the API definition for the class CImTextServerSession.
       
    15 // This class creates sockets and is responsible for transmitting data between client and the server 
       
    16 // 
       
    17 //
       
    18 
       
    19 /**
       
    20  @file
       
    21  @publishedAll
       
    22  @released
       
    23 */
       
    24 #ifndef __IMSK_H__
       
    25 #define __IMSK_H__
       
    26 
       
    27 #include <e32base.h>
       
    28 #include <es_sock.h>
       
    29 #include <in_sock.h>
       
    30 #include <f32file.h>
       
    31 #include <mentact.h>
       
    32 #include <miutlog.h>
       
    33 #include <miut_err.h>
       
    34 #include <miuthdr.h>
       
    35 
       
    36 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS  
       
    37 #include "timrfc822datefield.h"				
       
    38 #endif
       
    39 
       
    40 #ifdef _DEBUG
       
    41 #define __IMSK_SIMULATION
       
    42 #endif
       
    43 
       
    44 // Enable Scripting in Debug Builds only
       
    45 #ifdef _DEBUG
       
    46 #define __IMSK_SCRIPTING
       
    47 #endif
       
    48 
       
    49 /** 
       
    50 @publishedAll
       
    51 @released
       
    52 */
       
    53 const TInt EActivePriorityHigh = 1;
       
    54 /** 
       
    55 @publishedAll
       
    56 @released
       
    57 */
       
    58 const TInt KCarriageLineFeedLength=2;
       
    59 /** Max numeric IP address len = "0:0:0:0:0:0:194.217.242.23" = 45 chars 
       
    60 @publishedAll
       
    61 @released
       
    62 */
       
    63 const TInt KImskIPAddressLen=45;				// Max numeric IP address len = "255.255.255.255" = 15 chars
       
    64 
       
    65 /** Maximum buffer size of the received data 
       
    66 @publishedAll
       
    67 @released
       
    68 */
       
    69 typedef TBuf8<KImMailMaxBufferSize> TImMailBuffer;
       
    70 
       
    71 /** received buffer data line type
       
    72 @publishedAll
       
    73 @released
       
    74 */
       
    75 enum TImLineType
       
    76 	{ 
       
    77 	ECRLFTerminated, 
       
    78 	EBufferTooSmall, 
       
    79 	EReceiveBufferFull,
       
    80 	EReceiveBufferEmpty
       
    81 	};
       
    82 
       
    83 
       
    84 class CImLog;
       
    85 class CImTextServerScript;
       
    86 class CImIAPPreferences;
       
    87 class CImConnect;
       
    88 class CSecureSocket;
       
    89 class CImSocketIdleTimer;
       
    90 
       
    91 /**
       
    92 Creates/opens socket and sends and receives data.
       
    93 
       
    94 @publishedAll
       
    95 @released	
       
    96 */
       
    97 class CImTextServerSession : public CMsgActive
       
    98 	{
       
    99 public:
       
   100 	enum TImOperationMode{
       
   101 		EImServerMode,
       
   102 		EImClientMode
       
   103 		};
       
   104 
       
   105 /**
       
   106 	//cat				Construction
       
   107 	@fn				NewL()
       
   108 	Intended Usage	:	Static factory constructor. Uses two phase construction and 
       
   109 						leaves nothing on the CleanupStack.
       
   110 	@since			6.0
       
   111 	@leave			KErrNoMemory.
       
   112 	@return			A pointer to the newly created CImTextServerSession object. 
       
   113 	@pre 			None
       
   114 	@post			A fully constructed and initialised CImTextServerSession object.
       
   115 	
       
   116  */
       
   117 	IMPORT_C static CImTextServerSession *NewL();
       
   118 
       
   119 	/**
       
   120 	@publishedAll
       
   121 	@released
       
   122 	*/
       
   123 	IMPORT_C static CImTextServerSession* NewL(RSocketServ& aSocketServ, CImConnect& aConnect);
       
   124 
       
   125 /**
       
   126 	//cat				Construction
       
   127 	@fn				NewL(TInt aSendIdleTime, TInt aReceiveIdleTime)
       
   128 	Intended Usage	:	Static factory constructor. Uses two phase construction and 
       
   129 						leaves nothing on the CleanupStack.
       
   130 	@since			7.0s
       
   131 	@param			aSendIdleTime is the time for which the idle timer runs (for a send)
       
   132 	@param			aReceiveIdleTime is the time for which the idle timer runs (for a recieve)
       
   133 	@leave			KErrNoMemory.
       
   134 	@return			A pointer to the newly created CImTextServerSession object. 
       
   135 	@pre 				None
       
   136 	@post				A fully constructed and initialised CImTextServerSession object.
       
   137  */
       
   138 	IMPORT_C static CImTextServerSession* NewL(TInt aSendIdleTime, TInt aReceiveIdleTime);
       
   139 
       
   140 	/**
       
   141 	@publishedAll
       
   142 	@released
       
   143 	*/
       
   144 	IMPORT_C static CImTextServerSession* NewL(TInt aSendIdleTime, TInt aReceiveIdleTime, RSocketServ& aSocketServ, CImConnect& aConnect);
       
   145 
       
   146 /**
       
   147 	//cat				Destruction
       
   148 	@fn				~CImTextServerSession()
       
   149 	Intended Usage	:	Destructor.
       
   150 	@since			6.0	
       
   151  */
       
   152 	~CImTextServerSession();
       
   153 
       
   154 /**
       
   155 	@fn				QueueConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, TBool aEnableTimeout = ETrue)
       
   156 	Intended Usage	:	Queue a connect assuming the socket is successfully opened.
       
   157 	Error Condition	:	KErrNoMemory
       
   158 	@since			6.0
       
   159 	@param			aStatus	Asynchronous completion status
       
   160 	@param			anAddressDesc is the IP address		
       
   161 	@param			aIAPPreferences is the IAP connection preference to be used		
       
   162 	@param			aPortNum is the port number eg. 143, 25, 110.
       
   163 	@param			aEnableTimeout Not used		
       
   164 	@pre 			None
       
   165 	@post			connection is ready to send and receive data.
       
   166  */
       
   167 	IMPORT_C void QueueConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, TBool aEnableTimeout = ETrue);
       
   168 
       
   169 	IMPORT_C void QueueConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, const TDesC8& aSSLDomainName);
       
   170 
       
   171 /**
       
   172 	@fn				SSLQueueConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, TBool aEnableTimeout = ETrue)
       
   173 	Intended Usage	:	Queue a wrapped SSL connect on an socket assuming the socket is successfully opened.
       
   174 	Error Condition	:	KErrNoMemory, EImskSocketOpen
       
   175 	@since			7.0s
       
   176 	@param			aStatus	Asynchronous completion status
       
   177 	@param			anAddressDesc is the IP address		
       
   178 	@param			aIAPPreferences is the IAP connection preference to be used		
       
   179 	@param			aPortNum is the port number eg. 993, 465, 995.
       
   180 	@param			aEnableTimeout Not used		
       
   181 	@pre 			None
       
   182 	@post			connection is ready to send and receive data.
       
   183  */
       
   184 	IMPORT_C void SSLQueueConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, TBool aEnableTimeout = ETrue);
       
   185 
       
   186 	IMPORT_C void SSLQueueConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, const TDesC8& aSSLDomainName);
       
   187 
       
   188 /**
       
   189 	@fn				Disconnect()
       
   190 	Intended Usage	:	To disconnect and close socket connection.
       
   191 	Error Condition	:	None
       
   192 	@since			6.0
       
   193 	@pre 			None
       
   194 	@post			connection is closed.
       
   195   */
       
   196 	IMPORT_C void Disconnect();
       
   197 	IMPORT_C void Disconnect(TRequestStatus &aStatus);
       
   198 	void TimeOut();
       
   199 
       
   200 
       
   201 	IMPORT_C const TDesC& LocalName();
       
   202 /**
       
   203 	This method should be called before Send/SendQueueReceive() 
       
   204 	TLS command is sent.
       
   205 	@fn				SetSSLTLSResponseL(const TDesC8& aDesc)
       
   206 	Intended Usage	:	To use for secure connection.
       
   207 	Error Condition	:	KErrNoMemory
       
   208 	@since			6.2
       
   209 	@param			aDesc is the positive response the MTM expects from the connected
       
   210 					server for TLS command. e.g.  OK, +OK, 220 etc..		
       
   211 	@pre 			aDesc cannot be zero length
       
   212 	@leave			EImskNoTLSResponseString
       
   213 	@post			iTLSResponse is filled with aDesc contents
       
   214 
       
   215   */
       
   216 	IMPORT_C void SetSSLTLSResponseL(const TDesC8& aDesc);
       
   217 
       
   218 /**
       
   219 	@fn				Send(TRequestStatus &aStatus, const TDesC8& aDesc)
       
   220 	Intended Usage	:	To send data.
       
   221 	Error Condition	:	None
       
   222 	@since			6.0
       
   223 	@param			aStatus	Asynchronous completion status
       
   224 	@param			aDesc is the aData to be sent
       
   225 	@post			None
       
   226 
       
   227   */
       
   228 
       
   229 	//sends
       
   230 	IMPORT_C void Send(TRequestStatus &aStatus, const TDesC8& aDesc);
       
   231 	IMPORT_C void SendWithTimeout(TRequestStatus& aStatus, TInt aIdleTime, const TDesC8& aDesc); 
       
   232 	IMPORT_C void SendQueueReceiveWithTimeout(TRequestStatus& aStatus, TInt aIdleTime, const TDesC8& aDesc); 
       
   233 	IMPORT_C void Send(TRequestStatus &aStatus, TRefByValue<const TDesC8> aFmt,...);
       
   234 /**
       
   235 	@fn				SendQueueReceive(TRequestStatus &aStatus, const TDesC8& aDesc)
       
   236 	Intended Usage	:	To send data and queue a receive.
       
   237 	Error Condition	:	None
       
   238 	@since			6.0
       
   239 	@param			aStatus	Asynchronous completion status	
       
   240 	@param			aDesc is the aData to be sent
       
   241 	@post			Sends the data and queues a receive.
       
   242 	GetCurrentTextLine should be called after this method to read received data
       
   243 	*/
       
   244 	IMPORT_C void SendQueueReceive(TRequestStatus &aStatus, const TDesC8& aDesc);
       
   245 	IMPORT_C void SendQueueReceive(TRequestStatus &aStatus, TRefByValue<const TDesC8> aFmt,...);
       
   246 
       
   247     //receives
       
   248 /**
       
   249 	Returns first full line of data received from socket to user
       
   250 	@fn				GetCurrentTextLine(TDes8& aDesc)
       
   251 	Intended Usage	:	To return received data.
       
   252 	Error Condition	:	None
       
   253 	@since			6.0
       
   254 	@param			aDesc will be filled with received buffer
       
   255 	@post			returns the received buffer in the form of aDesc
       
   256 	@return			EReceiveBufferEmpty when received data is empty
       
   257 					EBufferTooSmall when aDesc length is smaller than received data
       
   258 					ECRLFTerminated when received data is complete (full line)
       
   259 					EReceiveBufferFull when received data length is more than aDesc length
       
   260 	GetCurrentTextLine should be called after Send methods
       
   261 	*/
       
   262 	IMPORT_C TImLineType GetCurrentTextLine(TDes8& aDesc);
       
   263 /**
       
   264 	User queues a new request from the socket (unless there's a full line of data in buffer
       
   265 	then signal user and there's no need to make a receive request)
       
   266 	@fn				QueueReceiveNextTextLine(TRequestStatus &aStatus)
       
   267 	Intended Usage	:	User queues a new request from the socket.
       
   268 	Error Condition	:	None
       
   269 	@since			6.0
       
   270 	@param			aStatus for asynchronous request
       
   271 	
       
   272 	*/
       
   273 	IMPORT_C void QueueReceiveNextTextLine(TRequestStatus &aStatus);
       
   274 /**
       
   275 	@fn				ReceiveBinaryData(TRequestStatus &aStatus, TDes8& aDes,TInt aLen)
       
   276 	Intended Usage	:	Users queue a request for received data
       
   277 	Error Condition	:	None
       
   278 	@since			6.0
       
   279 	@param			aStatus	Asynchronous completion status	
       
   280 	@param			aDes is the aData to be received
       
   281 	@param			aLen is the length of the data the user wants to read
       
   282 	@post			aDes will be filled with received data of aLen.
       
   283 	ReceiveBinaryData should be called after Send.
       
   284 	*/
       
   285 	IMPORT_C void ReceiveBinaryData(TRequestStatus &aStatus, TDes8& aDes,TInt aLen);
       
   286 
       
   287 	IMPORT_C void LogText(const TDesC8& aString);						// write string into log file
       
   288 	IMPORT_C void LogError(const TDesC8& aString,const TInt aError);		// write string and integer into log file
       
   289 
       
   290 /**
       
   291 	@fn				GetIAPValue(TUint32 &aIAP)
       
   292 	Intended Usage	:	Returns the IAP we are connecting/connected with in aIAP or returns an error code
       
   293 	@since			6.0
       
   294 	@param			aIAP will be the current IAP 
       
   295 	@post			aIAP will be filled with current IAP connected.
       
   296 	@return			will return genconn errors if any
       
   297 	*/
       
   298 
       
   299 	IMPORT_C TInt GetIAPValue(TUint32 &aIAP);
       
   300 /**
       
   301 	@fn				GetRConnectionName(TName &aName)
       
   302 	Intended Usage	:	Returns the name of the RConnection.
       
   303 	@since			9.1
       
   304 	@param			aName Buffer in which the name is returned. 
       
   305 	@post			aName will be filled with current name of the RConnection.
       
   306 	@return			KErrNone if successful, or another of the system-wide error codes.
       
   307 	*/
       
   308 
       
   309 	IMPORT_C TInt GetRConnectionName(TName &aName);
       
   310 
       
   311 /** Returns the bearer type we are connected to with in aBearer or returns an error code */
       
   312 	IMPORT_C TInt GetIAPBearer(TUint32 &aBearer);
       
   313 
       
   314 /**
       
   315 	@publishedAll
       
   316 
       
   317 	@fn				GetLastSocketActivityTimeout(TUint32& aTimeout)
       
   318 	Intended Usage	:	Returns the last socket activity timeout value
       
   319 	@since			9.1
       
   320 	@param			aTimeout is a return argument containing the timeout if it was found
       
   321 	@post				aTimeout will be filled with the timeout value
       
   322 	@return			Returns KErrNone, KErrNotFound or KErrBadHandle
       
   323 	*/
       
   324 	IMPORT_C TInt GetLastSocketActivityTimeout(TUint32& aTimeout);
       
   325 
       
   326 /**
       
   327 	@fn				GetSocketServ()
       
   328 	Intended Usage	:	Returns the Socket Server
       
   329 	@since			8.0
       
   330 	@return			Socket Server
       
   331 	*/
       
   332 	RSocketServ& GetSocketServ();
       
   333 
       
   334 /**
       
   335 	@fn				GetConnectionStage()
       
   336 	Intended Usage	:	Gets the stage of the connection process obtained from RConnection
       
   337 	@since			7.0s
       
   338 	@return			The current connection stage from RConnection or a system-wide error code.
       
   339 
       
   340 	*/
       
   341 	IMPORT_C TInt GetConnectionStage();
       
   342 
       
   343 /**
       
   344 	@fn				SocketIdle()
       
   345 	Intended Usage	:	disconnects the socket and notifies the observer when the socket has been idle
       
   346 						for some time
       
   347 	@since			7.0s
       
   348  */
       
   349 	void SocketIdle();
       
   350 
       
   351 /**
       
   352 	@fn				SetPrimaryTextServerSession(CImTextServerSession& aPrimaryTextServerSession)
       
   353 	Intended Usage	:	Users set only on the secondary session 
       
   354 	@since			9.2
       
   355 	@param			aPrimaryTextServerSession is PrimarySession's TextServerSession
       
   356 	@pre 			None
       
   357 	@post			Going to be use on the secondary session
       
   358 */
       
   359 	IMPORT_C void SetPrimaryTextServerSession(CImTextServerSession* aPrimaryTextServerSession);
       
   360 
       
   361 /**
       
   362 	@fn				GetCImConnect()
       
   363 	Intended Usage	:	Returns the CImConnect object
       
   364 	@since			9.2
       
   365 	@return			CImConnect 
       
   366 	@post			Going to be use on the secondary session
       
   367     */
       
   368 	CImConnect* GetCImConnect();
       
   369 	
       
   370 // Depreciated functions - do not use.
       
   371 	IMPORT_C void QueueConnect(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, TBool aEnableTimeout = ETrue);
       
   372 	IMPORT_C void QueueConnect(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, TInt aType, TBool aEnableTimeout = ETrue);
       
   373 	IMPORT_C void QueueConnect(TRequestStatus& aStatus,const TDesC& anAddressDesc, TInt aPortNum, TCallBack aDisconnectFunction,const TUint32 aIntraddress,TInt aType, TBool aEnableTimeout = ETrue);
       
   374 	IMPORT_C void QueueConnect(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum,const TUint32 aIAPaddress, TInt aType, TBool aEnableTimeout = ETrue);
       
   375 	IMPORT_C void QueueConnect(TRequestStatus& aStatus,const TDesC& anAddressDesc, TInt aPortNum, TCallBack aDisconnectFunction, TBool aEnableTimeout = ETrue);
       
   376 	IMPORT_C void QueueConnect(TRequestStatus& aStatus,const TDesC& anAddressDesc, TInt aPortNum, TCallBack aDisconnectFunction, const CImIAPPreferences& aIAPPreferences,TInt aType, TBool aEnableTimeout = ETrue);
       
   377 	IMPORT_C TInt Send(const TDesC8& aDesc);
       
   378 	IMPORT_C TInt Send(TRefByValue<const TDesC8> aFmt,...);
       
   379 	IMPORT_C TInt SendReceive(const TDesC8& aDesc);
       
   380 	IMPORT_C TInt Receive(TDes8& rDes);
       
   381 	IMPORT_C void Receive(TRequestStatus &aStatus, TDes8& rDes);
       
   382 	IMPORT_C static CImTextServerSession *NewLC (TImOperationMode aMode, RSocketServ &aServerServ);
       
   383 	IMPORT_C static CImTextServerSession *NewL(RSocketServ &aServerServ);
       
   384 	//Do not call SetSecurity.  Call SetSSLTLSResponseL
       
   385 	IMPORT_C TInt SetSecurity(TBool aSecurityOn, TBool aUnattendedMode = FALSE);
       
   386 	IMPORT_C void PerformLogging(TBool aLogging);
       
   387 
       
   388 private:
       
   389 /**
       
   390 	//cat			Construction and Destruction
       
   391 	@fn				CImTextServerSession()
       
   392 	Intended Usage	:	Constructor. First phase of two-phase construction method. Does 
       
   393 						non-allocating construction.
       
   394 	@since			6.0
       
   395 	
       
   396  */
       
   397 	CImTextServerSession();
       
   398 
       
   399 	CImTextServerSession(RSocketServ& aSocketServ, CImConnect& aConnect);
       
   400 /**
       
   401 	//cat				Construction
       
   402 	@fn				CImTextServerSession(TInt aSendIdleTime, TInt aReceiveIdleTime)
       
   403 	Intended Usage	:	Constructor. First phase of two-phase construction method. Does 
       
   404 						non-allocating construction.
       
   405 	@since			7.0s
       
   406 	@param			aSendIdleTime is the time for which the idle timer runs (for a send)
       
   407 	@param			aReceiveIdleTime  is the time for which the idle timer runs (for a receive)
       
   408  */
       
   409 	CImTextServerSession(TInt aSendIdleTime, TInt aReceiveIdleTime);
       
   410 
       
   411 	CImTextServerSession(TInt aSendIdleTime, TInt aReceiveIdleTime, RSocketServ& aSocketServ, CImConnect& aConnect);
       
   412 
       
   413 /**
       
   414 	//cat			Construction and Destruction.
       
   415 	@fn				ConstructL()
       
   416 	Intended Usage	:	Second phase of two-phase construction method. Does any 
       
   417 						allocations required to fully construct the object.
       
   418 	@since			6.0
       
   419 	@leave			KErrNoMemory.
       
   420 	@pre 			First phase of construction is complete
       
   421 	@post			The object is fully constructed and initialised.	
       
   422  */
       
   423 	void ConstructL();
       
   424 
       
   425 	TInt Open();
       
   426 	void Close();
       
   427 
       
   428 	void CreateLogFile(TInt aPortNum);
       
   429 	void OpenScriptFile(TInt aPortNum);
       
   430 
       
   431 	void DoRunL();
       
   432 	void DoComplete(TInt& aStatusValue);						// Cleanup code
       
   433 	void DoCancel();
       
   434 
       
   435 	// these called from DoRunL;
       
   436 	void SocketConnect();
       
   437 	void DoConnectedToSocketL();
       
   438 	void DoQueueConnect();
       
   439 
       
   440 	void RealReceive(TDes8& aDesc);
       
   441 	void RealSend(const TDesC8& aDesc);
       
   442 /** 
       
   443 	@fn				ParseSSLTLSResponseL()
       
   444 	Intended Usage	:	session will compare the response(for TLS command)
       
   445 						with the MTMs response 						
       
   446 	@since			6.2
       
   447 	@leave			KImskSSLTLSNegotiateFailed if the response doesn't match 
       
   448 	@post			CSecureSocket object is created
       
   449 	*/
       
   450 	void ParseSSLTLSResponseL();
       
   451 
       
   452 /** 
       
   453 	@fn				CreateSecureSocketL()
       
   454 	Intended Usage	:	to use secure socket connection 						
       
   455 	@since			6.2
       
   456 	@leave			None 
       
   457 	@post			CSecureSocket object is created and iSecurityState is set to EImSecurityStateOn;
       
   458 	*/
       
   459 	void CreateSecureSocketL();
       
   460 
       
   461 /**
       
   462 	@fn				QueueGenericConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, TBool aEnableTimeout = ETrue)
       
   463 	Intended Usage	:	Queue a standard or wrapped SSL connect on an socket assuming the socket is successfully opened.  Called by SSLQueueConnectL and QueueConnectL
       
   464 	Error Condition	:	KErrNoMemory, EImskSocketOpen
       
   465 	@since			7.0s
       
   466 	@param			aStatus	Asynchronous completion status	
       
   467 	@param			anAddressDesc is the IP address		
       
   468 	@param			aIAPPreferences is the IAP connection preference to be used		
       
   469 	@param			aPortNum is the port number eg. 143, 993
       
   470 	@param			aSSLDomainName SSL domain name to use for secure sockets
       
   471 	@pre 			None
       
   472 	@post			connection is ready to send and receive data.
       
   473  */
       
   474 	void QueueGenericConnectL(TRequestStatus &aStatus,const TDesC& anAddressDesc, TInt aPortNum, const CImIAPPreferences& aIAPPreferences, const TDesC8& aSSLDomainName);
       
   475 
       
   476 #if defined(__IMSK_SIMULATION)
       
   477 	void ReadNextPeriod();
       
   478 	TUint32 GetTokenValue(TInt aTokenLen, const TPtrC8& aBuffer);
       
   479 	TBool IsSuspended();	
       
   480 	TBool SuspendPeriodSet();
       
   481 	void ResetSuspendPeriod();
       
   482 	void SetAfterTimer();
       
   483 	TInt ReadConfigNum(const TDesC& aName);
       
   484 #endif
       
   485 
       
   486 	enum TImSocketState
       
   487 		{
       
   488 		EImClosed, 
       
   489 		EImResolve, 
       
   490 		EImConnect,   
       
   491 		EImSendReceive,
       
   492 		EImDialUsingOverride,
       
   493 		EImTLSHandShakeStarted,
       
   494 		EImSendReceiveTimedOut
       
   495 		};
       
   496 
       
   497 	enum TImSendReceiveState
       
   498 		{ 
       
   499 		EImInactive, 
       
   500 		EImSending,
       
   501 		EImReceiving, 
       
   502 		EImReceivingBinaryData,
       
   503 		EImSendingQueueReceive,
       
   504 		EImSuspended,          //used when we are in a simulated GPRS suspend.
       
   505 		};
       
   506 
       
   507 	enum TImSecurityState
       
   508 		{
       
   509 		EImSecurityStateOff,
       
   510 		EImSecurityStateOn,
       
   511 		EImSecurityStateFailed
       
   512 		};
       
   513 private:
       
   514 	/** handle to the socket */
       
   515 	RSocket							iSocket;
       
   516 	/** handle to RSocketServ */
       
   517 	RSocketServ						iServ;
       
   518 	/** handle to Hostresolver */
       
   519 	RHostResolver					iHostResolver;
       
   520 	/** handle to secure socket for SSL/TLS connection */
       
   521 	CSecureSocket*					iSecureSocket;
       
   522 
       
   523 	TUint32 iCurrentIAPcache;
       
   524 	/** Used to find if IAP is cached */
       
   525 	TBool							iIAPCached;  // true if the above value can be used.
       
   526 	/** result of the host resolver */
       
   527 	TNameEntry						iHostent;
       
   528 	/** port number e.g. 25 for SMTP, 143 for IMAP and 110 for POP */
       
   529 	TInt							iPortNum;
       
   530 	/**  server address */
       
   531 	TPtrC							iAddressDesc;
       
   532 	/** data returned by the socket */
       
   533 	TImMailBuffer					iReceive;
       
   534 	TSockXfrLength					iLen;
       
   535 	TImSocketState					iState;
       
   536 	TImSendReceiveState				iSendReceive;
       
   537 
       
   538 	HBufC8*							iBuffer;
       
   539 	TImLineType						iCurrentLineType;
       
   540 
       
   541 	/** to log connection data  */
       
   542 	CImLog*							iLog;
       
   543 	/** IP address name */
       
   544 	TBuf<KImskIPAddressLen>			iLocalName;
       
   545 	/** secure state i.e to use Secure socket */
       
   546 
       
   547 	TImSecurityState				iSecurityState;
       
   548 	const CImIAPPreferences*		iIAPPreferences;
       
   549 
       
   550 	CImConnect*						iConnect;
       
   551 
       
   552 	TDes8*							iReceiveData; // buffer we just recieved data into
       
   553 
       
   554 
       
   555 	HBufC8*							iSentData;
       
   556 	/** response for different mail protocols like 220,+OK, OK, BAD */
       
   557 	HBufC8*							iTLSResponse; //response for different mail protocols like 220,+OK, OK, BAD
       
   558 	/** internal flag to read tls response */
       
   559 	TBool							iReadTLSResponse;
       
   560 	TBool							iPerformLogging;
       
   561 	TBool							iWrappedSocket;
       
   562 
       
   563 	CImSocketIdleTimer*				iSocketIdleTimer;
       
   564 	TTimeIntervalMicroSeconds32		iSendIdleTime;
       
   565 	TTimeIntervalMicroSeconds32		iReceiveIdleTime;
       
   566 
       
   567 	/** A shorter idle timeout, used when a fast response is expected */
       
   568 	TTimeIntervalMicroSeconds32		iSendShortIdleTime;
       
   569 	TTimeIntervalMicroSeconds32		iReceiveShortIdleTime;
       
   570 
       
   571 
       
   572 #ifdef __IMSK_SCRIPTING
       
   573 	CImTextServerScript*			iScript;
       
   574 #endif
       
   575 
       
   576 #if defined(__IMSK_SIMULATION)
       
   577 
       
   578 	RFs								iFs;
       
   579 
       
   580 
       
   581 	TUint32							iScriptedIAP; // value to return for iap when scripting
       
   582 	TUint32							iBearerIAP; // value to return for bearer when scripting
       
   583 
       
   584 
       
   585 	TImSendReceiveState             iSuspendedState;
       
   586 	
       
   587 	RTimer							iSuspendTimer;
       
   588 
       
   589 	RFile							iGprsFile;
       
   590 
       
   591 	TBool							iGprsConfigExists;
       
   592 
       
   593 	TInt							iCfgFilePos;	
       
   594 
       
   595 	TTime							iLastSuspend;	// time last suspension took place
       
   596 													// in universal time
       
   597 
       
   598 	TTimeIntervalSeconds 			iStart;		// number of seconds since last delay
       
   599 												// before the following delay occurs.
       
   600 												// if 0 no suspend is required.
       
   601 	TTimeIntervalSeconds 			iDuration;	// how long to delay. If 0 no suspend is
       
   602 												// required
       
   603 	TBool							iRepeat;	// repeat the above delay for an 
       
   604 												// infinite period
       
   605 
       
   606 	HBufC8*							iSendData; // suspended data 
       
   607 #endif // __IMSK_SIMULATION
       
   608 	
       
   609 	CImTextServerSession*			iPrimaryTextServerSession; //Only going to be set on the secondary session
       
   610 	
       
   611 	TBool iClientOwnsConnection;
       
   612 
       
   613 	/** SSL domain name for secure sockets */
       
   614 	HBufC8* iSSLDomainName;
       
   615 	TBool							iSocketIdleTimeSet;          // iSocketIdleTimeSet=ETrue, if smtp server did not responds within 10 seconds after sending "."
       
   616 	};
       
   617 
       
   618 #endif