syncmlfw/common/syncagent/inc/NSmlAgentBase.h
changeset 0 b497e44ab2fc
child 25 b183ec05bd8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/common/syncagent/inc/NSmlAgentBase.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,474 @@
+/*
+* Copyright (c) 2005 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:  Base class in Commmon Agent
+*
+*/
+
+
+#ifndef __NSMLAGENTBASE_H__
+#define __NSMLAGENTBASE_H__
+
+#include <e32base.h>
+#include <SyncMLDef.h>
+#include "WBXMLSyncMLParser.h"
+#include "nsmlerror.h"
+#include "nsmlagenttestdefines.h"
+
+//Rnd_AutoRestart
+#include <ApEngineConsts.h>
+//Rnd_AutoRestart
+//DATA TYPES
+enum TNSmlSyncInitiation    
+	{		
+	EClientInitiated = 1,
+	EServerAlerted
+	};
+
+// FORWARD DECLARATIONS
+class CSyncMLHistoryJob;
+class CNSmlStatusContainer;
+class CNSmlResponseController;
+class CNSmlTransport;
+class CNSmlCmdsBase;
+class CNSmlURI;
+class CNSmlFutureReservation;
+
+// CLASS DECLARATION
+
+/**
+*  CNSmlAgentBase implements common parts (both for DS and DM)   
+*  
+*/
+class CNSmlAgentBase:public CActive, public MWBXMLSyncMLCallbacks
+	{
+	public: // enumerations 
+	enum TAuthenticationType
+		{
+		ENoAuth,
+		EBasic,
+		EMD5
+		};
+
+    public:  // Constructors and destructor
+    IMPORT_C CNSmlAgentBase();            
+    IMPORT_C virtual ~CNSmlAgentBase();
+
+    public: 
+	// New functions
+	virtual TAuthenticationType AuthTypeL() const = 0;
+	virtual void Interrupt( TInt aErrorCode, TBool aImmediatelyInterruption, TBool aStatusError ) = 0;
+	virtual void InterruptL( TInt appIndex, TInt aErrorCode, TBool aImmediatelyInterruption, TBool aStatusError ) = 0;
+	virtual void WriteWarningL( TNSmlError::TNSmlAgentErrorCode aWarningCode ) = 0;  
+	virtual void WriteWarningL( TInt appIndex, TNSmlError::TNSmlAgentErrorCode aWarningCode ) = 0;
+	virtual void WriteWarningL( TInt appIndex, TNSmlError::TNSmlSyncMLStatusCode aWarningCode ) = 0;
+	virtual void CheckServerStatusCodeL( TInt aEntryID ) = 0;
+	virtual TBool Interrupted() = 0;
+	TBool AlreadyAuthenticated() const;  
+	HBufC8* BasicCredentialL() const;
+	HBufC8* Md5CredentialL( TBool aServerAuth = EFalse ) const;
+	IMPORT_C virtual HBufC* ServerNonceAllocL() const;
+	IMPORT_C virtual void SetServerNonceL( const TDesC& aNonce ) const;
+	IMPORT_C void SetEndOfDataAlertRequest();
+    IMPORT_C CSyncMLHistoryJob* SyncLog();
+	IMPORT_C TBool CallbackCalled() const;
+	IMPORT_C void SetOffCallbackCalled();
+	IMPORT_C virtual void DoOutsideCancel();
+	//Rnd_AutoRestart
+	IMPORT_C virtual void LaunchAutoRestartL(TInt aError);
+	IMPORT_C TApBearerType CheckAPBearerTypeL( const TUint32 aIAPId );
+	void ReadAcessPointL();
+	//Rnd_AutoRestart
+	
+	//
+	// Profile ID getter
+	//
+	IMPORT_C TInt ProfileId() const;
+
+	IMPORT_C TRequestStatus& StatusReference();
+    
+	public:
+	// Functions from base classes
+	IMPORT_C void RunL();										   // from CActive       
+	IMPORT_C void DoCancel();									   // from CActive 
+    IMPORT_C Ret_t smlAddCmdFuncL( SmlAddPtr_t aContent );          // from MWBXMLSyncMLCallbacks
+   	IMPORT_C Ret_t smlCopyCmdFuncL( SmlCopyPtr_t aContent);         // from MWBXMLSyncMLCallbacks      
+	IMPORT_C Ret_t smlDeleteCmdFuncL( SmlDeletePtr_t aContent );    // from MWBXMLSyncMLCallbacks
+	IMPORT_C Ret_t smlExecCmdFuncL( SmlExecPtr_t aContent );        // from MWBXMLSyncMLCallbacks
+	IMPORT_C Ret_t smlMapCmdFuncL( SmlMapPtr_t aContent );          // from MWBXMLSyncMLCallbacks
+	IMPORT_C Ret_t smlReplaceCmdFuncL( SmlReplacePtr_t aContent );  // from MWBXMLSyncMLCallbacks
+	IMPORT_C Ret_t smlSearchCmdFuncL( SmlSearchPtr_t aContent );    // from MWBXMLSyncMLCallbacks
+	IMPORT_C Ret_t smlMoveCmdFuncL( SmlMovePtr_t aContent );		// from MWBXMLSyncMLCallbacks (1.2 changes)
+
+    protected: // enumerations
+	//
+    // State coding enumerations
+	//
+	//main level state coding
+	enum TMainState
+		{
+		EBeginning,			
+		EClientInitialisation,
+		EServerInitialisation,
+// <MAPINFO_RESEND_MOD_BEGIN>
+		EClientResendMapInfo,
+// <MAPINFO_RESEND_MOD_END>
+		EClientModifications,
+		EResultAlert,
+		EServerModifications,
+		EDataUpdateStatus,
+		EMapAcknowledge,
+		EFinishing,
+		EClientAlertNext,
+		EServerAlertNext,
+		ESending,
+		EReceiving,
+		EAlert,
+		EBusy
+		};
+		
+	//beginning level state coding
+	enum TBeginningState
+		{
+		EBegin,
+		EBeginConnectingToServer
+		};
+
+	//client initialisation level state coding
+	enum TClientInitState
+		{
+		EInitStartingMessage,
+		EInitMakingStatus,
+		EInitAlerting,
+		EInitDeviceInfo,
+		EInitAskingDeviceInfo,
+		EInitEndingMessage
+		};
+
+			
+	//server modifications level state coding
+	enum TServerModificationsState
+		{
+		EServerModWaitingStartMessage,
+		EServerModWaitingCommands,
+		EServerModWaitingUpdateCommands,
+		EServerModMessageReceived,
+		EServerModPackageReceived
+		};
+
+	//data update status level state coding
+	enum TDataUpdateStatusState
+		{
+		EStatusStartingMessage,
+		EStatusMakingAlert,
+		EStatusMakingStatus,
+		EStatusMakingMap,
+		EStatusMakingResults,
+		EStatusEndingMessage
+		};
+
+	//result alert from client level state coding
+	enum TResultAlertState
+		{
+		EResultAlertStartingMessage,
+		EResultAlertMakingAlert,
+		EResultAlertEndingMessage
+		};
+
+	// client alerting for next state coding	
+	enum TClientAlertNextState
+		{
+		EClientAlertNextStartingMessage,
+		EClientAlertNextMakingAlert,
+		EClientAlertNextMakingStatus,
+		EClientAlertNextMakingMap,
+		EClientAlertNextEndingMessage
+		};
+	// server alerting for next state coding	
+	enum TServerAlertNextState
+		{
+		EServerAlertNextWaitingStartMessage,
+		EServerAlertNextWaitingCommands,
+		EServerAlertNextMessageReceived
+		};
+		
+	protected:   //new functions
+	//
+	// Pure virtual state functions
+	//
+	virtual void NavigateMainStateL() = 0;
+	virtual void NextMainStateL() = 0;
+	virtual void InitialiseSubStates() = 0; 
+    virtual void BeginStateL() = 0;
+	virtual void InitStartingMessageStateL() = 0; 
+	virtual void InitAlertingStateL() = 0;
+	virtual void InitDeviceInfoStateL() = 0;
+	virtual void ServerModUpdatesStateL( const TDesC8& aCmd, SmlGenericCmd_t* aContent ) =0;
+	virtual void DataUpdateStatusStartingMessageStateL() = 0;
+	//
+	// Pure virtual Nonce read/update functions
+	//
+	virtual HBufC* NonceL() const = 0;
+	virtual void SetNonceL( const TDesC& aNonce ) const = 0;
+	//
+	// Pure virtual Sync Log functions
+	//
+	virtual void FinalizeSyncLog() = 0;
+	//
+	virtual void CheckCommandsAreReceivedL() = 0;
+	//
+	// Pure virtual authentication type update
+	//
+	virtual void SetAuthTypeL( TAuthenticationType aAuthType ) const = 0;
+	//
+	// Pure virtual Resource Freeing 
+	//
+	virtual void FreeResources() = 0;
+	//
+	// Pure virtual Error Handling functions
+	//
+	virtual void FinaliseWhenErrorL() = 0;
+	//
+	//
+	IMPORT_C void ConstructL();
+	//
+	// Beginning state functions 
+	//
+	IMPORT_C void BeginningStateL();
+	//			
+	// Client Initialisation state functions 
+	//
+	IMPORT_C void ClientInitialisationStateL();
+	IMPORT_C void InitStartingMessageStateBaseL();
+	IMPORT_C virtual void InitAskingDeviceInfoStateL();
+	//
+	// Server Modifications state functions 
+	//
+	IMPORT_C void ServerModStartMessageStateL( SmlSyncHdr_t* aSyncHdr );
+	IMPORT_C void ServerModStatusCmdStateL( SmlStatus_t* aStatus );
+	IMPORT_C void ServerModAlertCmdStateL( SmlAlert_t* aAlert );
+	IMPORT_C void ServerModEndMessageStateL( TBool aFinal );
+	//
+	// Data Update Status state functions
+	//
+	IMPORT_C void DataUpdateStatusStateL();
+	IMPORT_C void DataUpdateStatusStartingMessageStateBaseL();
+	IMPORT_C virtual void DataUpdateStatusMakingMapStateL();
+	IMPORT_C virtual void DataUpdateStatusMakingResultsStateL();
+	//
+	// Result Alert state functions 
+	//
+	IMPORT_C void ResultAlertStateL();
+	//
+	// Client Alert For Next state functions 
+	//
+	IMPORT_C void ClientAlertNextStateL();
+	IMPORT_C virtual void ClientAlertNextMakingMapStateL();
+	//
+	// Server Alert For Next state functions 
+	//
+	IMPORT_C void ServerAlertNextStateL();
+	IMPORT_C void ServerAlertNextStartMessageStateL( SmlSyncHdr_t* aSyncHdr );
+	IMPORT_C void ServerAlertNextStatusCmdStateL( SmlStatus_t* aStatus );
+	IMPORT_C void ServerAlertNextAlertCmdStateL( SmlAlert_t* aAlert );
+	IMPORT_C void ServerAlertNextEndMessageStateL( TBool aFinal );
+	//
+	// Sending state functions 
+	//
+	IMPORT_C void SendingStateL();
+	//
+	// Receiving state functions 
+	//
+	IMPORT_C  void ReceivingStateL();
+	//
+	// Status code check				
+	//
+	IMPORT_C TBool CheckStatusCodesAreReceivedL( TBool aFinal = ETrue );
+	//
+	// Authentication functions
+	//
+	IMPORT_C void SaveIfNonceL( const CNSmlResponseController& aResponseController, TInt aEntryID ) const;
+	IMPORT_C TBool AuthenticationRequirementL( const CNSmlResponseController& aResponseController, TInt aEntryID );
+	IMPORT_C virtual TPtrC ServerUserName() const;
+	IMPORT_C virtual TPtrC ServerPassword() const;
+
+	//
+	// Free resources
+	//
+	IMPORT_C void FreeBaseResources();
+	
+	//
+	private: //functions
+		
+	CNSmlAgentBase( const CNSmlAgentBase& aOther );
+	CNSmlAgentBase& operator=( const CNSmlAgentBase& aOther );
+    //
+	// Beginning state functions 
+	//
+	void BeginConnectingStateL();  
+    //			
+	// Client Initialisation state functions 
+	//
+    void InitMakingStatusStateL(); 
+	void InitEndingMessageStateL(); 
+    //
+	// Data Update Status state functions
+	//
+	void DataUpdateStatusMakingAlertStateL();  
+	void DataUpdateStatusMakingStatusStateL(); 
+	void DataUpdateStatusEndingMessageStateL(); 
+	//
+	// Result Alert state functions 
+	//
+	void ResultAlertStartingMessageStateL();  
+	void ResultAlertAlertingStateL();          
+	void ResultAlertEndingMessageStateL();      
+	//
+	// Client Alert For Next state functions 
+	//
+	void ClientAlertNextStartingMessageStateL();  
+	void ClientAlertNextAlertingStateL();         
+	void ClientAlertNextMakingStatusStateL();     
+	void ClientAlertNextEndingMessageStateL();    
+	//
+	// Transport functions
+	//
+	void ConnectIssueL();		
+	void ConnectDoneL();		
+	void SendDataIssueL();
+	void SendDataDoneL();
+	void ReceiveDataIssueL();
+	void ReceiveDataDoneL();
+	void Disconnect();
+	//
+	// Error Handling functions
+	//
+	void ErrorHandling( TInt aErrorCode );  
+	
+	public:     // Data
+	
+	//Rnd_AutoRestart
+	TBool iPacketDataUnAvailable;
+	TUint32 iNetmonAPId;
+	TApBearerType iNetmonAPBearerType;
+	//Rnd_AutoRestart
+	
+    protected:    // Data	
+		
+	//
+    // State codes
+	//
+	TMainState iCurrMainState;
+	TMainState iPrevSyncState;
+	TBeginningState iCurrBeginningState;
+	TClientInitState iCurrClientInitState;
+	TServerModificationsState iCurrServerModState;
+	TDataUpdateStatusState iCurrDataUpdateStatusState;
+	TResultAlertState iCurrResultAlertState;
+	TClientAlertNextState iCurrClientAlertNextState;
+	TServerAlertNextState iCurrServerAlertNextState;
+	//
+	TRequestStatus* iCallerStatus;
+	//	
+	// IMEI code
+	HBufC* iImeiCode;
+	// Switch for autenthication
+	TBool iAlreadyAuthenticated;
+	// Switch for challenge request 
+	TBool iChallengeRequest;
+	// Switch for MD5 challenge request 
+	TBool iMD5AlreadyRequested;
+	// switch for asynchronous issues
+	TBool iCommandIssued;
+	// switch for checking SyncML version
+	TBool iVersionIsChecked;
+	// MaxMsgSize in a server 
+	TInt iMaxMsgSizeInServer;
+	// switch for Busy Status
+	TBool iBusyStatusReceived;
+	// switch for Result Alert
+	TBool iResultAlertIssued;
+	// switch for full workspace buffer
+	TBool iBufferFull;
+	// switch for final
+	TBool iFinalMessageFromClient;
+	// switch for Data Update Status package;
+	TBool iStatusPackage;
+	// switchs for end 
+	TBool iEnd;
+	TBool iCancelForced;
+	
+	// Common settings data
+	TSmlProfileId iProfileID;
+	HBufC* iSyncMLUserName;
+	HBufC* iSyncMLPassword;
+
+	HBufC* iSyncHTTPAuthUserName;	
+	HBufC* iSyncHTTPAuthPassword;	
+	TInt iSyncHTTPAuthUsed;			
+
+	CNSmlURI* iSyncServer;
+	TUid iMediumType;
+	TInt iIAPId;
+    CArrayFixFlat<TUint32>* iIAPIdArray;
+
+	// Sync Initiation 
+	TNSmlSyncInitiation iSyncInitiation;
+	// SyncML MIME type;
+	HBufC8* iSyncMLMIMEType;
+	// Result Alert code
+	HBufC8* iResultAlertCode;
+	// End of Data Alert code
+	HBufC8* iEndOfDataAlertCode;
+    // Session Abort Alert code (DM Only)
+	HBufC8* iSessionAbortAlertCode;
+	// Next Message Alert code
+	HBufC8* iNextMessageCode;
+	// Switch for end of data alert
+	TBool iEndOfDataAlertRequest;
+	// Switch for session abort alert (DM Only)
+	TBool iSessionAbortAlertRequest; 
+	// Counter for nested Atomics
+	TInt iNestedAtomicsCount;
+    // 
+	TBool iCallbackCalled;
+	//
+	// Used classes
+	//
+	CSyncMLHistoryJob* iSyncLog;
+	//
+	// Owned classes
+	//
+	CNSmlCmdsBase* iSyncMLCmds;
+	TNSmlError* iError;
+	//
+	// Owned classes
+	//
+	CNSmlTransport* iTransport; 
+
+	private:    // Data
+	// Reserved to maintain binary compability
+	CNSmlFutureReservation* iReserved;
+
+	TPtr8 iBufferArea;
+	
+	TInt iSendRetries;
+	// for module test
+#ifdef __NOTRANSPORT
+	TInt iTestCounter;
+#endif
+	};
+
+#endif // __NSMLAGENTBASE_H__
+            
+// End of File