--- /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