diff -r 7d88c1eb7da3 -r 751cd8585b82 omadmadapters/email/inc/nsmldmemailadapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadmadapters/email/inc/nsmldmemailadapter.h Thu Jul 22 16:30:53 2010 +0100 @@ -0,0 +1,744 @@ +/* +* Copyright (c) 2004 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: DM Email Settings Adapter + * +*/ + + + + + +#ifndef __NSMLDMEMAILADAPTER_H__ +#define __NSMLDMEMAILADAPTER_H__ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include +#include +#include + +// ----------------------------------------------------------------------------- +// Class forwards +// ----------------------------------------------------------------------------- +class CImSmtpSettings; +class CImPop3Settings; +class CImImap4Settings; +class CImIAPPreferences; +class CMsvSession; +class CEmailAccounts; + + +// ----------------------------------------------------------------------------- +// Definitions +// ----------------------------------------------------------------------------- + +// the DDF version must be changed if any changes in DDF structure +// ( built in DDFStructureL() function ) +// +_LIT8( KNSmlDMEmailDDFVersion, "1.1" ); + +_LIT8( KNSmlDMEmailTextPlain, "text/plain" ); +_LIT8( KNSmlDMEmailNodeName, "Email" ); +_LIT8( KNSmlDMEmailDescription, "The interior object holds all email objects" ); +_LIT8( KNSmlDMDynamicNodeDescription, "Placeholder for one or more Email objects" ); +_LIT8( KNSmlDMNameDescription, "Displayable Account Name for the Email Settings" ); +_LIT8( KNSmlDMUIDDescription, "User ID for email account" ); +_LIT8( KNSmlDMPWDescription, "Password for email account " ); +_LIT8( KNSmlDMUAddrDescription, "User's email address" ); +_LIT8( KNSmlDMUNameDescription, "Displayable name for the user" ); +_LIT8( KNSmlDMMrcvDescription, "Host name of the receiving (IMAP/POP3) server" ); +_LIT8( KNSmlDMMsndDescription, "Host name of the SMTP server" ); +_LIT8( KNSmlDMMproDescription, "Remote mailbox protocol" ); +_LIT8( KNSmlDMUseSecConDescription, "Secure connection is used or not" ); +_LIT8( KNSmlDMUseSauthDescription, "SMTP authentication is used or not" ); +_LIT8( KNSmlDMSauthUIDDescription, "SMTP authenticatio user Id" ); +_LIT8( KNSmlDMSauthPWDescription, "SMTP authentication password" ); +_LIT8( KNSmlDMPtxtSAuthDescription, "Plain text SMTP authentication is allowed or not" ); +_LIT8( KNSmlDMDelFetDescription, "Defines whether to delete fetched mail from remote server" ); +_LIT8( KNSmlDMUseAPOPDescription, "Defines whether the APOP is used or not" ); +_LIT8( KNSmlDMRcvPortDescription, "Port for IMAP4 or POP3" ); +_LIT8( KNSmlDMSndPortDescription, "Port for SMTP" ); +_LIT8( KNSmlDMToNapIDDescription, "Link to connectivity information" ); + +_LIT8( KNSmlDMSToNapIDDescription, "Link to connectivity information for sending SMTP" ); +_LIT8( KNSmlDMSUseSecConDescription, "Defines whether SSL/TLS security is used in SMTP" ); +_LIT8( KNSmlDMUseStartTLSDescription, "Defines whether StartTLS is used in IMAP/POP" ); +_LIT8( KNSmlDMSUseStartTLSDescription, "Defines whether StartTLS is in SMTP" ); +_LIT8( KNSmlDMMrcvPortDescription, "Defines the port number of the IMAP/POP server" ); +_LIT8( KNSmlDMMsndPortDescription, "Defines the port number of the SMTP server" ); +_LIT8( KNSmlDMFolderPathDescription, "Defines the mailbox folder path" ); + +_LIT8( KNSmlDMEmailDynamicNode, "" ); +_LIT8( KNSmlDMEmailName, "Name" ); +_LIT8( KNSmlDMEmailUID, "UID" ); +_LIT8( KNSmlDMEmailPW, "PW" ); +_LIT8( KNSmlDMEmailUAddr, "UAddr" ); +_LIT8( KNSmlDMEmailUName, "UName" ); +_LIT8( KNSmlDMEmailMrcv, "Mrcv" ); +_LIT8( KNSmlDMEmailMsnd, "Msnd" ); +_LIT8( KNSmlDMEmailMpro, "Mpro" ); +_LIT8( KNSmlDMEmailUseAPOP, "UseAPOP" ); +_LIT8( KNSmlDMEmailUseSecCon, "UseSecCon" ); +_LIT8( KNSmlDMEmailUseSauth, "UseSauth" ); +_LIT8( KNSmlDMEmailSauthUID, "SauthUID" ); +_LIT8( KNSmlDMEmailSauthPW, "SauthPW" ); +_LIT8( KNSmlDMEmailPtxtSAuth, "PtxtSAuth" ); +//_LIT8( KNSmlDMEmailRcvPort, "RcvPort" ); +//_LIT8( KNSmlDMEmailSndPort, "SndPort" ); +_LIT8( KNSmlDMEmailToNapID, "ToNapID" ); +_LIT8( KNSmlDMEmailIAPUri, "AP" ); + +_LIT8( KNSmlDMEmailSToNapID, "SToNapID" ); +_LIT8( KNSmlDMEmailSUseSecCon, "SUseSecCon" ); +_LIT8( KNSmlDMEmailUseStartTLS, "UseStartTLS" ); +_LIT8( KNSmlDMEmailSUseStartTLS, "SUseStartTLS" ); +_LIT8( KNSmlDMEmailMrcvPort, "MrcvPort" ); +_LIT8( KNSmlDMEmailMsndPort, "MsndPort" ); +_LIT8( KNSmlDMEmailFolderPath, "FolderPath" ); + +_LIT8( KNSmlDMEmailMproPOP, "POP" ); +_LIT8( KNSmlDMEmailMproIMAP, "IMAP" ); +_LIT8( KNSmlDMEmailTrue, "True" ); +_LIT8( KNSmlDMEmailFalse, "False" ); + +_LIT8( KNSmlDMEmailListOfLeafs, "Name/UID/PW/UAddr/UName/Mrcv/Msnd/Mpro/UseSecCon/UseSauth/SauthUID/SauthPW/PtxtSAuth/ToNapID/SToNapID/SUseSecCon/UseStartTLS/SUseStartTLS/MrcvPort/MsndPort/UseAPOP/FolderPath" ); +_LIT8( KNSmlDMEmailSeparator8, "/" ); +_LIT8( KNSmlEmailUriDotSlash, "./"); + +const TInt KNSmlDmFatMinimumFileSize = 512; +const TInt KNSmlSmtpMessageTypeValue = 0x10001028; +const TInt KNSmlDefaultMaxLimit = 1024*10; //maximum message size (default) +const TInt KNSmlDmEmailGranularity = 4; +const TUint32 KNSmlDmEmailAlwaysAskIap = 0; + +const TInt KNSmlDMEmailNormalSmtpPort = 25; +const TInt KNSmlDMEmailSslSmtpPort = 465; +const TInt KNSmlDMEmailNormalImap4Port = 143; +const TInt KNSmlDMEmailNormalPop3Port = 110; +const TInt KNSmlDMEmailSslWrappedImap4Port = 993; +const TInt KNSmlDMEmailSslWrappedPop3Port = 995; +const TInt KNSmlDMEmailDefaultHeaderCount = 30; + +const TInt KNSmlDmEmailImapLuidLow = 50000; +const TInt KNSmlDmEmailImapLuidHigh = 100000; +const TInt KNSmlDmEmailPopLuidHigh = 150000; +const TUint32 KNSmlDMEmailMaxPortNbr = 0xffff; + +/** +* The main class of the SyncML DM Email adapter. +* +* @since +*/ +class CNSmlDmEmailAdapter : public CSmlDmAdapter, public MMsvSessionObserver + { +public: + /** + * The one phase constructor + * + */ + static CNSmlDmEmailAdapter* NewL(MSmlDmCallback* aDmCallback ); + + /** + * The destructor + * + */ + virtual ~CNSmlDmEmailAdapter(); + + // Adapter interface from CSmlDmAdapter + /** + * The function returns current version of the DDF. By asking + * current DDF versions from adapters DM Module can control * + * possible changes in the data structure and send the changed DDF + * description to a management server. This function is always + * called after DDFStructureL. + * @param aVersion DDF version of the + * adapter. (filled by the adapter) + * @publishedPartner + * @prototype + */ + + void DDFVersionL( CBufBase& aDDFVersion ); + /** + * The function for filling the DDF structure of the adapter + * This function is only called once, immediately after the adapter is created. + * @param aDDFObject Reference to root object. A DM adapter starts filling + * the data structure by calling AddChildObjectL to the root object and + * so describes the DDF of the adapter. + * @publishedPartner + * @prototype + */ + void DDFStructureL( MSmlDmDDFObject& aDDF ); + /** + * The function creates new leaf objects, or replaces data in existing leaf + * objects. The information about the success of the command should be + * returned by calling SetStatusL function of MSmlDmCallback callback + * interface. This makes it possible to buffer the commands. However, all + * the status codes for buffered commands must be returned at the latest when + * the adapter's CompleteOutstandingCmdsL() is called. + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter has earlier returned a + * LUID to the DM Module). For new objects, this is the LUID + * inherited through the parent node. + * @param aObject Data of the object. + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this command + * @publishedPartner + * @prototype + */ + void UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aObject, const TDesC8& aType, + TInt aStatusRef ); + /** + * The function deletes an object and its child objects. The SetStatusL + * should be used as described in UpdateLeafObjectL() + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter have earlier returned + * LUID to the DM Module). + * @param aStatusRef Reference to correct command, i.e. this reference must + * be used when calling the SetStatusL of this command. + * @publishedPartner + * @prototype + */ + void DeleteObjectL( const TDesC8& aURI, const TDesC8& aLUID, + const TInt aStatusRef ); + /** + * The function fetches data of a leaf object. The SetStatusL should be used + * as described in UpdateLeafObjectL(). The data is returned by using the + * SetResultsL function of MSmlCallback callback interface, and may be streamed. + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter have earlier + * returned LUID to the DM Module). + * @param aType MIME type of the object + * @param aResultsRef Reference to correct results, i.e. this reference + * must be used when returning the result by calling + * the SetResultsL. + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aType, const TInt aResultsRef, + const TInt aStatusRef ); + /** + * The function fetches URI list. An adapter returns the list of URI segments + * under the given URI be separated by slash ("/"). The URI segment names for + * new objects must be given by the adapter. + * The list is returned by calling the SetResultsL function of MSmlCallback + * callback interface. Results from this call MUST NOT be streamed. + * @param aParentURI URI of the parent object + * @param aParentLUID LUID of the parent object (if the + * adapter have earlier returned LUID to + * the DM Module). + * @param aPreviousURISegmentList URI list with mapping LUID information, + * which is known by DM engine. An adapter + * can use this information when verifying + * if old objects still exists. An adapter + * also knows what objects are new to DM + * engine and can provide LUID mapping for + * them. aPreviousURISegmentList parameter + * (see above) helps to recognise new + * objects. + * @param aResultsRef Reference to correct results, i.e. this + * reference must be used when returning + * the result by calling the SetResultsL. + * @param aStatusRef Reference to correct command, i.e. this + * reference must be used when calling the + * SetStatusL of this command. + * @publishedPartner + * @prototype + */ + void ChildURIListL( const TDesC8& aURI, + const TDesC8& aLUID, + const CArrayFix& aPreviousURISegmentList, + const TInt aResultsRef, const TInt aStatusRef ); + /** + * The function adds node object. In some cases an implementation of the + * function may be empty function, if the node object does not need concrete + * database update. Still this function may be helpful to an adapter, i.e. in + * passing mapping LUID of the node to DM Module. The SetStatusL should be + * used as described in UpdateLeafObjectL() + * @param aURI URI of the object + * @param aParentLUID LUID of the parent object (if the adapter have + * earlier returned LUID to the DM Module). + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void AddNodeObjectL( const TDesC8& aURI, const TDesC8& aParentLUID, + const TInt aStatusRef ); + /** + * The function creates new leaf objects, or replaces data in existing leaf + * objects, in the case where data is large enough to be streamed. The + * information about the success of the command should be returned by calling + * SetStatusL function of MSmlDmCallback callback interface. This makes it + * possible to buffer the commands. However, all the status codes for buffered + * commands must be returned at the latest when the CompleteOutstandingCmdsL() + * of adapter is called. + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter has earlier returned a + * LUID to the DM Module). For new objects, this is the LUID + * inherited through the parent node. + * @param aStream Data of the object. Adapter should create write stream + * and return, when data is written to stream by DM agent, + * StreamCommittedL() is called by DM engine + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, + RWriteStream*& aStream, const TDesC8& aType, + const TInt aStatusRef ); + /** + * The function fetches the size of the data of a leaf object. The size is + * in bytes, and must reflect the number of bytes that will be transferred + * when the framework calls FetchLeafObjectL. The SetStatusL should be used + * as described in FetchLeafObjectL(). The size value is returned by using + * the SetResultsL function of MSmlCallback callback interface, and must be + * a decimal integer expressed as a string, eg. "1234". + * Results from this call MUST NOT be streamed. + * @param aURI URI of the object + * @param aLUID LUID of the object (if the adapter have earlier + * returned LUID to the DM Module). + * @param aType MIME type of the object + * @param aResultsRef Reference to correct results, i.e. this reference + * must be used when returning the result by calling + * the SetResultsL. + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void FetchLeafObjectSizeL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aType, const TInt aResultsRef, + const TInt aStatusRef ); + /** + * The function implements execute command. The information about the success + * of the command should be returned by calling SetStatusL function of + * MSmlDmCallback callback interface. This makes it possible to buffer the + * commands. + * However, all the status codes for buffered commands must be returned at + * the latest when the CompleteOutstandingCmdsL() of adapter is called. + * @param aURI URI of the command + * @param aLUID LUID of the object (if the adapter have earlier + * returned LUID to the DM Module). + * @param aArgument Argument for the command + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID, + const TDesC8& aArgument, const TDesC8& aType, + const TInt aStatusRef ); + /** + * The function implements execute command. The information about the + * success of the command should be returned by calling SetStatusL function + * of MSmlDmCallback callback interface. This makes it possible to buffer the + * commands. + * However, all the status codes for buffered commands must be returned at + * the latest when the CompleteOutstandingCmdsL() of adapter is called. + * @param aURI URI of the command + * @param aLUID LUID of the object (if the adapter have earlier + * returned LUID to the DM Module). + * @param aStream Argument for the command. Adapter should create + * write stream and return, when data is written to + * stream by DM agent, StreamCommittedL() is called by + * DM engine + * @param aType MIME type of the object + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID, + RWriteStream*& aStream, const TDesC8& aType, + const TInt aStatusRef ); + /** + * The function implements copy command. The information about the success of + * the command should be returned by calling SetStatusL function of + * MSmlDmCallback callback interface. This makes it possible to buffer the + * commands. + * However, all the status codes for buffered commands must be returned at + * the latest when the CompleteOutstandingCmdsL() of adapter is called. + * @param aTargetURI Target URI for the command + * @param aSourceLUID LUID of the target object (if one exists, and if the adapter + * has earlier returned a LUID to the DM Module). + * @param aSourceURI Source URI for the command + * @param aSourceLUID LUID of the source object (if the adapter has + * earlier returned a LUID to the DM Module). + * @param aType MIME type of the objects + * @param aStatusRef Reference to correct command, i.e. this reference + * must be used when calling the SetStatusL of this + * command. + * @publishedPartner + * @prototype + */ + void CopyCommandL( const TDesC8& aTargetURI, const TDesC8& aTargetLUID, + const TDesC8& aSourceURI, const TDesC8& aSourceLUID, + const TDesC8& aType, TInt aStatusRef ); + /** + * The function indicates start of Atomic command. + * @publishedPartner + * @prototype + */ + void StartAtomicL(); + /** + * The function indicates successful end of Atomic command. The adapter + * should commit all changes issued between StartAtomicL() and + * CommitAtomicL() + * @publishedPartner + * @prototype + */ + void CommitAtomicL(); + /** + * The function indicates unsuccessful end of Atomic command. The adapter + * should rollback all changes issued between StartAtomicL() and + * RollbackAtomicL(). If rollback fails for a command, adapter should use + * SetStatusL() to indicate it. + * @publishedPartner + * @prototype + */ + void RollbackAtomicL(); + /** + * Returns ETrue if adapter supports streaming otherwise EFalse. + * @param aItemSize size limit for stream usage + * @return TBool ETrue for streaming support + * @publishedPartner + * @prototype + */ + TBool StreamingSupport( TInt& aItemSize ); + /** + * Called when stream returned from UpdateLeafObjectL or ExecuteCommandL has + * been written to and committed. Not called when fetching item. + * @publishedPartner + * @prototype + */ + void StreamCommittedL(); + /** + * The function tells the adapter that all the commands of the message that + * can be passed to the adapter have now been passed. This indciates that + * the adapter must supply status codes and results to any buffered commands. + * This must be done at latest by the time this function returns. + * This function is used at the end of SyncML messages, and during processing + * of Atomic. In the case of Atomic processing, the function will be + * followed by a call to CommitAtomicL or RollbackAtomicL. + * @publishedPartner + * @prototype + */ + void CompleteOutstandingCmdsL(); + +protected: + /** + * Inherited from MMsvSessionObserver + * Indicates an event has occurred. + * @param aEvent Indicates the event type. + * @param aArg1 Event type-specific argument value + * @param aArg2 Event type-specific argument value + * @param aArg3 Event type-specific argument value + */ + void HandleSessionEventL( TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, + TAny* aArg3 ); + +private: + +struct TNSmlEmailCommandElement + { + HBufC8* iLastUriSeg; + HBufC8* iData; + TInt iStatusRef; + TBool iLeaf; + CSmlDmAdapter::TError iStatus; + }; + +enum TNSmlEmailAccountType + { + EImap, + EPop, + EUnknown + }; + +enum TNSmlEmailSecuritySetting + { + EUseSecCon = 1, + EUseStartTls, + ESuseSecCon, + ESuseStartTls, + }; + +struct TNSmlEmailSettingsElement + { + CArrayFixFlat *iNodeBuf; + /* iMappingName = Email/xxxx */ + HBufC8* iMappingName; + HBufC* iName; + CImSmtpSettings* iSmtpSettings; + CImPop3Settings* iPop3Settings; + CImImap4Settings* iImap4Settings; + CImIAPPreferences* iIapPref; + CImIAPPreferences* iSmtpIapPref; + + TBool iExecuted; + TInt iLuid; + TBool iJustFetch; + CNSmlDmEmailAdapter::TNSmlEmailAccountType iAccType; + TInt iAccId; + TMsvId iServiceId; + }; + + /** + * C++ default constructor. + */ + void ConstructL(); + CNSmlDmEmailAdapter(); + CNSmlDmEmailAdapter( MSmlDmCallback* aDmCallback ); + + /** + * Initializes the buffer for leaf nodes. + * @param aURI URI of the object + * @param aObject The data to be updated + * @param aStatusRef The status reference + * @param aIndex The index to command buffer + * @return status of the operation + */ + TInt FirstAddLeafL(const TDesC8& aURI, + const TDesC8& aObject, + TInt aStatusRef, + TInt aIndex); + + /** + * Updates the value of leaf object + * @param aLastUriSeg URI of the object + * @param aObject The data to be updated + * @param aIndex The index to node buffer + * @param aCommand The index to command buffer + * @return status of the operation + */ + TInt DoAddLeafObjectL(const TDesC8& aLastUriSeg, + const TDesC8& aObject, + TInt aIndex, + TInt aCommand); + + /** + * Set the default values to email account + * @param aIndex The index to node buffer + * @return none + */ + void SetDefaultSettingsL(TInt aIndex); + + /** + * Converts 16bit descriptor to integer + * @param aLuid The descriptor to be converted + * @return Integer value of the descriptor + */ + TInt DesToInt(const TDesC& aLuid) const; + + /** + * Converts 8bit descriptor to integer + * @param aLuid The descriptor to be converted + * @return Integer value of the descriptor + */ + TInt DesToInt(const TDesC8& aLuid) const; + + /** + * Converts integer to 16bit descriptor + * @param aLuid The integer to be converted + * @return The Integer as a descriptor + */ + HBufC* IntToDesLC(const TInt aLuid) const; + + /** + * Converts integer to 8bit descriptor + * @param aLuid The integer to be converted + * @return The Integer as a descriptor + */ + HBufC8* IntToDes8LC(const TInt aLuid) const; + + /** + * Converts 16bit descriptor to 8bit descriptor + * @param aSource The descriptor to be converted + * @return The 8bit descriptor + */ + HBufC8* ConvertTo8LC( const TDesC& aSource ) const; + + /** + * Transfers the email settings from memory to phones permanent data store + * @param aIndex The index to command buffer + * @return Luid of the email account + */ + TInt ValidateAndStoreSettingsL(TInt aIndex); + + /** + * Restores the settings to the adapter from phones permanent data store + * @param aIndex The index to command buffer + * @return Status of the operation + */ + TInt DoRestoreSettingsL(TInt aIndex); + + /** + * Opens the CMsvSession if it is not open already + * @param none + * @return Status of the operation + */ + TInt OpenSessionL(); + + /** + * Parses the last URI segment from URI + * @param aURI The whole URI + * @return The last URI segment + */ + TPtrC8 LastURISeg(const TDesC8& aURI) const; + + /** + * Removes the last URI segment from URI + * @param aURI The whole URI + * @return The aURI without the last URI segment + */ + TPtrC8 RemoveLastURISeg(const TDesC8& aURI) const; + + /** + * Calculates the number of URI segments + * @param aURI The whole URI + * @return The number of URI segments + */ + TInt NumOfURISegs(const TDesC8& aURI) const; + + /** + * Fills the DDF node with desired properties + * @param aNode Reference to node or leaf which info to be filled. + * @param aAccTypes Access rights for a leaf / node. + * @param aOccurrence Occurance of the node / leaf. + * @param aScope Scope (dynamic / permanent) of the leaf / node. + * @param aFormat Data format of the leaf / node. + * @param aDescription Description of the node / leaf. + * @param aDefaultValue Default value for a leaf or node. + * @return none + */ + void FillNodeInfoL( MSmlDmDDFObject& aNode, + const TSmlDmAccessTypes& aAccTypes, + MSmlDmDDFObject::TOccurence aOccurrence, + MSmlDmDDFObject::TScope aScope, + MSmlDmDDFObject::TDFFormat aFormat, + const TDesC8& aDescription) const; + + /** + * Parses the dot and slash in start of URI away + * @param aURI The whole URI + * @return The URI without dot and slash in start + */ + TPtrC8 RemoveDotSlash(const TDesC8& aURI) const; + + /** + * Fetches the value of leaf node + * @param aURI The whole URI + * @param aLUID The LUID + * @param aObject The storage for the result + * @return Status of the operation + */ + CSmlDmAdapter::TError FetchObjectL(const TDesC8& aURI, + const TDesC8& aLUID, + CBufBase& aObject); + + /** + * Calculates correct account id from the LUID + * @param aAccType Account Type + * @param aAccId Account ID + * @param aLuid The LUID + * @return none + */ + void GetIdByLuid( TNSmlEmailAccountType& aAccType, + TInt& aAccId, const TInt aLuid ) const; + + /** + * Calculates LUID from the account id + * @param aAccType Account Type + * @param aAccId Account ID + * @param aLuid The LUID + * @return none + */ + void SetLuidById( const TNSmlEmailAccountType& aAccType, + const TInt& aAccId, TInt& aLuid ) const; + + /** + * Checks if the account with given id exists + * @param aAccs Pointer to CEmailAccount object + * @param aAccType Account Type + * @param aId Account ID + * @param aIndex The LUIDIndex to the command buffer + * @return True if the account exists + */ + TBool AccountExistsL( CEmailAccounts* aAccs, + const TNSmlEmailAccountType aAccType, + const TInt aId, + TInt aIndex ); + + /** + * Sets the parameters related to STARTTLS and SSL/TLS + * @param aObject The value(True/False) to be set + * @param aThisElem The element of which value is to be set. + * @param aSetting The setting which value is to be set + * @return none + */ + void SetDefaultSecurityL(const TDesC8& aObject, + const TNSmlEmailSettingsElement* aThisElem, + const TNSmlEmailSecuritySetting aSetting + ) const; + + /** + * Fetches the parameters related to STARTTLS and SSL/TLS + * @param aObject The storage for the value + * @param aElem The element of which value is fetched. + * @param aSetting The setting which value is fetched. + * @return Status of the operation + */ + CSmlDmAdapter::TError FetchSecurityValueL(CBufBase& aObject, + const TNSmlEmailSettingsElement* aElem, + const TNSmlEmailSecuritySetting aSetting ) const; + + /** + * Creates the mapping for the email account preset + * @param aURI The whole URI + * @return the luid of the email account specified im aURI, else -1 + */ + TInt ConstructTreeL(const TDesC8& aURI); + + /** + * The function extracts Email/x node from aURI + * @param aURI Email aURI. + * @return Email/x node. + */ + TPtrC8 GetDynamicEmailNodeUri( const TDesC8& aURI ); + +private: + // Pointer to CMsvSession + CMsvSession* iMsvSession; + // The buffer for received commands + CArrayFixFlat* iBuffer; + }; + +#endif // __NSMLDMEMAILADAPTER_H__ + +// End of File