--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/omadmadapters/syncmldm12/src/NSmlDmSettingsAdapter12.cpp Tue Jul 13 03:48:30 2010 +0530
@@ -0,0 +1,4002 @@
+/*
+* Copyright (c) 2007 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-settings adapter
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "NSmlDMSettingsAdapter12.h"
+#include "nsmldebug.h"
+#include "nsmlconstants.h"
+#include "nsmldmconstants.h"
+#include "nsmldmiapmatcher.h"
+#include "nsmldmauthinfo.h"
+#include <featmgr.h>
+#include <implementationproxy.h>
+#include <SyncMLClientDM.h>
+#include <SyncMLTransportProperties.h>
+#include <e32base.h>
+#include <DevManInternalCRKeys.h>
+#include <centralrepository.h>
+#ifndef __WINS__
+// This lowers the unnecessary compiler warning (armv5) to remark.
+// "Warning: #174-D: expression has no effect..." is caused by
+// DBG_ARGS8 macro in no-debug builds.
+#pragma diag_remark 174
+#endif
+
+const TUint KNSmlDMSettingsAdapterImplUid = 0x10282CE8;
+
+const TInt KBufSize32 = 32;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+CNSmlDMSettingsAdapter12* CNSmlDMSettingsAdapter12::NewL( MSmlDmCallback* aDmCallback )
+ {
+ _DBG_FILE("CNSmlDMSettingsAdapter12::NewL(): begin");
+
+ CNSmlDMSettingsAdapter12* self = NewLC( aDmCallback );
+ CleanupStack::Pop();
+
+ _DBG_FILE("CNSmlDMSettingsAdapter12::NewL(): end");
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::NewLC( )
+// Loads the CNSmlDMSettingsAdapter12 class and pushes it to clenupstack.
+// -----------------------------------------------------------------------------
+CNSmlDMSettingsAdapter12* CNSmlDMSettingsAdapter12::NewLC( MSmlDmCallback* aDmCallback )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::NewLC(): begin" );
+ CNSmlDMSettingsAdapter12* self = new ( ELeave ) CNSmlDMSettingsAdapter12( aDmCallback );
+ CleanupStack::PushL( self );
+ self->iCallBack = aDmCallback;
+ self->ConstructL();
+ self->iLeafType = EDMUnset;
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::NewLC(): end" );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::CNSmlDMSettingsAdapter()
+// Default constructor.
+// -----------------------------------------------------------------------------
+CNSmlDMSettingsAdapter12::CNSmlDMSettingsAdapter12( TAny* aEcomArguments) :
+ CSmlDmAdapter(aEcomArguments )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::CNSmlDMSettingsAdapter(): begin" );
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::CNSmlDMSettingsAdapter(): end" );
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::~CNSmlDMSettingsAdapter()
+// Destructor.
+// -----------------------------------------------------------------------------
+CNSmlDMSettingsAdapter12::~CNSmlDMSettingsAdapter12()
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::~CNSmlDMSettingsAdapter(): begin" );
+
+ delete iField;
+ delete iURIField;
+ // Client API Session & Profile
+ iProfile.Close();
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ // In Case the Buffer isnt cleared
+ if ( iBuffer)
+ {
+ for (TInt val =0; val<iBuffer->Count ();val++)
+ {
+ delete iBuffer->At(val).iMappingName;
+
+ ClearBuffer ( iBuffer->At(val).iLeafBuf);
+ delete iBuffer->At(val).iLeafBuf;
+ }
+
+ iBuffer->Reset ();
+ delete iBuffer;
+ }
+ delete iPortNbr;
+ iPortBuffer.Reset();
+ iPortBuffer.Close();
+ iProfileLockBuffer.Reset();
+ iProfileLockBuffer.Close();
+
+ iPrivateApi.Close();
+
+ iCallBack = 0;
+ FeatureManager::UnInitializeLib();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::~CNSmlDMSettingsAdapter(): end" );
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ConstructL()
+// Second phase constructor.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::ConstructL()
+ {
+ iField = HBufC8::NewL( KNSmlMaxURLLength );
+ iURIField = NULL;
+ iSyncSessionOpen = EFalse;
+ FeatureManager::InitializeLibL();
+ // variables used for Buffering
+ iBufOn = EFalse;
+ iComplete = EFalse;
+ iExecutionIndex = -1;
+ iNewProfile = EFalse;
+ // initialising iBuffer
+ iBuffer = new (ELeave) CArrayFixFlat <TNSmlDMBufferElement> (KNSmlDMGranularity);
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::DDFVersionL()
+// Returns the DDF version number.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::DDFVersionL( CBufBase& aVersion )
+ {
+ _DBG_FILE(
+ "CNSmlDMSettingsAdapter12::DDFVersionL(CBufBase& aDDFVersion): begin" );
+ aVersion.InsertL( 0, KVersion );
+ _DBG_FILE(
+ "CNSmlDMSettingsAdapter12::DDFVersionL(CBufBase& aDDFVersion): end" );
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::DDFStructureL()
+// Fills the DDF structure of the adapter.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::DDFStructureL( MSmlDmDDFObject& aDDF )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DDFStructureL(): begin" );
+
+ //Making DMAcc as root
+
+ MSmlDmDDFObject* ddfRoot = &aDDF;
+ MSmlDmDDFObject& nDmDDF = ddfRoot->AddChildObjectL( KNSmlDefDMAcc );
+
+ TSmlDmAccessTypes *aclTypes = new ( ELeave ) TSmlDmAccessTypes();
+ CleanupStack::PushL( aclTypes );
+
+ // Set Get as acceptable operations
+ aclTypes->SetGet();
+
+ nDmDDF.SetDFTitleL( KNSmlDMadapterTitle );
+
+ FillNodeInfoL( nDmDDF, *aclTypes, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::ENode,
+ KNullDesC8, KNullDesC8, KNullDesC8 );
+
+ aclTypes->SetAdd();
+ // Set rest acceptable operations for data itself
+ aclTypes->SetReplace();
+ aclTypes->SetDelete();
+
+ TSmlDmAccessTypes aclTypesNoGet;
+ aclTypesNoGet.SetReplace();
+ aclTypesNoGet.SetAdd();
+ aclTypesNoGet.SetDelete();
+
+ TSmlDmAccessTypes aclTypesAR;
+ aclTypesAR.SetReplace();
+ aclTypesAR.SetAdd();
+
+ TSmlDmAccessTypes aclTypesARG;
+ aclTypesARG.SetReplace();
+ aclTypesARG.SetAdd();
+ aclTypesARG.SetGet();
+
+ TSmlDmAccessTypes aclTypesG;
+ aclTypesG.SetGet();
+
+ TSmlDmAccessTypes aclTypesAG;
+ aclTypesAG.SetGet();
+ aclTypesAG.SetAdd();
+
+ TSmlDmAccessTypes aclTypesAGD;
+ aclTypesAGD.SetGet();
+ aclTypesAGD.SetAdd();
+ aclTypesAGD.SetDelete();
+
+
+ MSmlDmDDFObject& nProDDF = nDmDDF.AddChildObjectGroupL();
+ FillNodeInfoL( nProDDF, *aclTypes, MSmlDmDDFObject::EZeroOrMore,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNullDesC8, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nAppIdDDF = nProDDF.AddChildObjectL( KNSmlDdfAppId ); // Addr
+ FillNodeInfoL( nAppIdDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAppIdDescription, KNullDesC8, KMimeType );
+
+ //PrefConRef
+ MSmlDmDDFObject& nPrefConRefDDF = nProDDF.AddChildObjectL( KNSmlDdfPrefConRef ); // PrefConRef
+ FillNodeInfoL( nPrefConRefDDF, aclTypesARG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfConRefDescription, KNullDesC8, KMimeType );
+
+
+
+ // App Address nodes
+ MSmlDmDDFObject& nAppAddrDDF = nProDDF.AddChildObjectL( KNSmlDdfAppAddr ); // AppAddr
+ FillNodeInfoL( nAppAddrDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNSmlDdfAddrDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& rtToAppAddrRef = nAppAddrDDF.AddChildObjectGroupL(); //AppAddr/<X>
+ FillNodeInfoL(rtToAppAddrRef,aclTypesG,MSmlDmDDFObject::EOneOrMore,
+ MSmlDmDDFObject::EDynamic,MSmlDmDDFObject::ENode,
+ KNSmlDdfAddrDescription,KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nAddrForAppAddrDDF = rtToAppAddrRef.AddChildObjectL( KNSmlDdfAddr ); // Addr
+ FillNodeInfoL( nAddrForAppAddrDDF, aclTypesARG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAddrDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nAddrTypeForAppAddrDDF = rtToAppAddrRef.AddChildObjectL( KNSmlDdfAddrType ); // AddrType
+ FillNodeInfoL( nAddrTypeForAppAddrDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAddrTypeDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nPortForAppAddrDDF = rtToAppAddrRef.AddChildObjectL( KNSmlDdfPort ); // PortNbr
+ FillNodeInfoL( nPortForAppAddrDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNSmlDdfPortNbrDescription, KNullDesC8, KMimeType );
+
+ //Runtime port address
+ MSmlDmDDFObject& nrtToPortDDF = nPortForAppAddrDDF.AddChildObjectGroupL(); // PortNbr
+ FillNodeInfoL( nrtToPortDDF, aclTypesG, MSmlDmDDFObject::EOneOrMore,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNSmlDdfPortNbrDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nPortNbrToPortDDF = nrtToPortDDF.AddChildObjectL( KNSmlDdfPortNbr ); // PortNbr
+ FillNodeInfoL( nPortNbrToPortDDF, aclTypesARG, MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EInt,
+ KNSmlDdfPortNbrDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nAuthSchemeDDF = nProDDF.AddChildObjectL( KNSmlDdfAuthScheme ); // AuthPref
+ FillNodeInfoL( nAuthSchemeDDF, aclTypesARG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAuthSchemeDescription, KNullDesC8, KMimeType );
+ //APPAUthNodes
+
+ MSmlDmDDFObject& nAppAuthDDF = nProDDF.AddChildObjectL( KNSmlDdfAppAuth ); // AppAuth
+ FillNodeInfoL( nAppAuthDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNSmlDdfAuthSchemeDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nrtToAppAuthDDF = nAppAuthDDF.AddChildObjectGroupL(); // appauth/<x>
+ FillNodeInfoL( nrtToAppAuthDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNSmlDdfAuthSchemeDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nAauthLevelDDF = nrtToAppAuthDDF.AddChildObjectL( KNSmlDdfAAuthLevel ); // AAuthLevel
+ FillNodeInfoL( nAauthLevelDDF, aclTypesARG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAuthLevelDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nAauthtypeDDF = nrtToAppAuthDDF.AddChildObjectL( KNSmlDdfAAuthType ); // AAuthType
+ FillNodeInfoL( nAauthtypeDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAddrTypeDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nAauthNameDDF = nrtToAppAuthDDF.AddChildObjectL( KNSmlDdfAAuthName ); // AddrType
+ FillNodeInfoL( nAauthNameDDF, aclTypesARG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAuthNameDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nAauthSecretDDF = nrtToAppAuthDDF.AddChildObjectL( KNSmlDdfAAuthSecret ); // AddrType
+ FillNodeInfoL( nAauthSecretDDF, aclTypesAR, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAuthSecretDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nAauthDataDDF = nrtToAppAuthDDF.AddChildObjectL( KNSmlDdfAAuthData ); // AddrType
+ FillNodeInfoL( nAauthDataDDF, aclTypesAR, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfAuthDataDescription, KNullDesC8, KMimeType );
+
+
+ MSmlDmDDFObject& nNameDDF = nProDDF.AddChildObjectL( KNSmlDdfName ); // Name
+ FillNodeInfoL( nNameDDF, aclTypesARG, MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfNameDescription, KNullDesC8, KMimeType );
+
+
+
+ MSmlDmDDFObject& nServerIdDDF = nProDDF.AddChildObjectL( KNSmlDdfServerId ); // ServerId
+ FillNodeInfoL( nServerIdDDF, aclTypesAG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfServerIdDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nextDDF = nProDDF.AddChildObjectL( KNSmlDdfExt ); // Ext
+ FillNodeInfoL( nextDDF, aclTypesG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode,
+ KNSmlDdfServerIdDescription, KNullDesC8, KMimeType );
+
+ MSmlDmDDFObject& nlockedDDF = nextDDF.AddChildObjectL( KNSmlDdfLocked ); // locked
+ FillNodeInfoL( nlockedDDF, aclTypesARG, MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr,
+ KNSmlDdfServerIdDescription, KNullDesC8, KMimeType );
+
+ CleanupStack::PopAndDestroy(); //aclTypes
+
+ _DBG_FILE("CNSmlDMSettingsAdapter12::DDFStructureL(): end");
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::UpdateLeafObjectL
+// Updates profile leaf object data based on URI.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::UpdateLeafObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aObject,
+ const TDesC8& /*aType*/,
+ const TInt aStatusRef )
+ {
+ _DBG_FILE("CNSmlDMSettingsAdapter12::UpdateLeafObjectL(): begin");
+ TInt index = -1;
+ if ( !iBufOn)
+ {
+ for (TInt val = 0; val<iBuffer->Count (); val++)
+ {
+ TPtrC8 firstUri = ParentURI (aURI);
+ if ( iBuffer->At(val).iMappingName->Compare (firstUri)== 0)
+ {
+ index = iExecutionIndex = val;
+ break;
+ }
+ }
+ }
+ if ( index >= 0)
+ AddLeafBufferL (aURI, aObject, aStatusRef);
+ else
+ {
+ TInt parentLUID = GetIntObject( aLUID );
+ if( parentLUID < 0 )
+ {
+ if( IsDMAccUriFormatMatchPredefined(aURI) )
+ {
+ parentLUID = ConstructTreeL(aURI);
+ }
+ }
+ if( parentLUID < 0 )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::UpdateLeafObjectL( ): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+
+ if( parentLUID != iParentLUID )
+ {
+ if( FindProfileIdL( parentLUID ) != EFalse )
+ {
+ iParentLUID = parentLUID;
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ }
+ SetField( aURI );
+ SetURIInProcessL( aURI);
+ if( !AcceptDMField() )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafObjectL(): KErr field end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+ return;
+ }
+
+ // Get Database field type
+ TNSmlDMFieldType fType = GetDMFieldType();
+ if ( fType == EWrong )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafObjectL(): EError end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+
+ TNSmlDMProfileData fData = GetDMField();
+ if( fData == ESyncAccepted )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafObjectL(): EError end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+ if( NotValidStrLenght( fData, aObject ) )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafObjectL(): KErr length end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject );
+ return;
+ }
+ //Authentication data leafs to be handled
+ if ( fData == EAuthenticationRequired || fData == EClientNonce
+ || fData == EServerNonce )
+ {
+ //Check if replace command and replace data as defined
+
+ TInt replaceStatus = KErrGeneral;
+ SetAuthInfoL( iParentLUID + KMaxDataSyncID, fData, aObject, replaceStatus );
+ if ( replaceStatus == KErrNone )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ }
+ else if ( replaceStatus == KErrNotFound )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ }
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::UpdateLeafObjectL():end" );
+ return;
+ }
+
+ TInt rValue = SetDMFieldDataL( iParentLUID, aObject, fData );
+ if ( fData == EProfilePort )
+ {
+ // in case port is updated, save status ref to be used in
+ // CompleteOutstandingCmdsL
+ if(rValue==KErrNone)
+ {
+ iPortBuffer[iPortBuffer.Count()-1].iPortBufStatusRef = aStatusRef;
+ }
+ else if( rValue == KErrOverflow)
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject );
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ }
+ }
+ else if ( fData == EProfileLock && iNewProfile )
+ {
+ if(rValue == KErrNone)
+ iProfileLockBuffer[iProfileLockBuffer.Count()-1].iProfileLockStatusRef = aStatusRef;
+ else
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotAllowed);
+ }
+ else
+ {
+ if( rValue != KErrNone )
+ {
+ if( rValue == KErrNotFound )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ }
+ else if( rValue == KErrInUse )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EObjectInUse );
+ }
+ else if( rValue == KErrNoMemory )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENoMemory );
+ }
+ else if(rValue == KErrAccessDenied)
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotAllowed);
+
+ }
+ else if ( rValue == KErrArgument)
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject);
+
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ }
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ }
+ }
+ }
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::UpdateLeafObjectL():end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::DeleteObjectL
+// Deletes whole profile or leaf object data acording to aURI.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::DeleteObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TInt aStatusRef )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteObjectL( ): begin" );
+
+ if( aURI.Find( KNSmlDdfConRef ) != KErrNotFound )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteObjectL(): NOT ALLOWED end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+ iLUID = IntLUID( aLUID );
+ if(IsProfileLockedL(iLUID))
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteObjectL(): NOT ALLOWED end" );
+
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotAllowed );
+ return;
+ }
+
+
+ // Check which field going to be handled
+ SetField( aURI );
+ SetURIInProcessL(aURI);
+
+ // Check if valid field
+ if( !AcceptDMField() )
+ {
+
+ // Delete whole profile if aURI called for node
+ TInt last = aURI.LocateReverse( '/' );
+ TInt pos = aURI.Find( KNSmlDefDMAcc );
+ if( last - 5 == pos )
+ {
+
+ // If called for node means that profile will deleted from database
+ iLUID = IntLUID( aLUID );
+ DBG_ARGS8( _S8("DeleteObjectL: URI %S LUID = %d"), &aURI, iLUID );
+
+ if( FindProfileIdL( iLUID ) == EFalse )
+ {
+ _DBG_FILE(
+ "CNSmlDMSettingsAdapter12::DeleteObjectL( ): notfound end");
+
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ else
+ {
+ TInt sRet = DeleteProfileL( iLUID + KMaxDataSyncID );
+ if ( sRet != KErrNone )
+ {
+ if( sRet == KErrNotFound )
+ {
+ iCallBack->SetStatusL( aStatusRef,
+ CSmlDmAdapter::ENotFound );
+ }
+ else if( sRet == KErrInUse )
+ {
+ iCallBack->SetStatusL( aStatusRef,
+ CSmlDmAdapter::EObjectInUse );
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef,
+ CSmlDmAdapter::EError );
+ }
+ return;
+ }
+ else
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteObjectL( ): EOk end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ return;
+ }
+ }
+ }
+ else
+ {
+ _DBG_FILE(
+ "CNSmlDMSettingsAdapter12::DeleteObjectL( ): EInvalidObject end" );
+ iCallBack->SetStatusL( aStatusRef,CSmlDmAdapter::EInvalidObject );
+ return;
+ }
+ }//Delete whole Profile
+
+ iLUID = IntLUID( aLUID );
+ if ( iLUID != iParentLUID )
+ {
+ if( FindProfileIdL( iLUID ) == EFalse )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteObjectL( ): end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ iParentLUID = iLUID;
+ }
+
+ if ( iField->Compare( KNSmlDdfAuthScheme ) == 0 )
+ {
+ DeleteDMAuthInfoL( iLUID, EAuthenticationRequired );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ return;
+ }
+ else if( iField->Compare( KNSmlDdfClientNonce ) == 0 )
+ {
+ DeleteDMAuthInfoL( iLUID, EClientNonce );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ return;
+ }
+ else if( iField->Compare(KNSmlDdfServerNonce) == 0 )
+ {
+ DeleteDMAuthInfoL( iLUID, EServerNonce );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ return;
+ }
+
+ // Sets default value if not null field
+ HBufC8* dataObject = HBufC8::NewLC( 15 );
+ dataObject->Des().Format( KNullDesC8 );
+
+ _LIT8(aType, "text/plain");
+ iLeafType = EDMDelete;
+ UpdateLeafObjectL( aURI, aLUID, *dataObject, aType, aStatusRef );
+ CleanupStack::PopAndDestroy(); //dataObject
+ iLeafType = EDMUnset;
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteObjectL( ): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::FetchLeafObjectL
+// Fetches profile leaf object data acordint to aURI.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::FetchLeafObjectL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aType,
+ const TInt aResultsRef,
+ const TInt aStatusRef )
+ {
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): begin" );
+ DBG_ARGS(_S16( "DM:Fetch aURI - %S - %S"), &aURI, &aLUID );
+
+ iLUID = IntLUID( aLUID );
+ if ( iLUID >= 0 )
+ {
+ if( FindProfileIdL( iLUID ) == EFalse )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ }
+ else
+ {
+
+ // Static node feature start
+ iLUID = -1;
+ if( IsDMAccUriFormatMatchPredefined(aURI) )
+ {
+ iLUID = ConstructTreeL(aURI);
+ }
+
+ if (iLUID == -1)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter::FetchLeafObjectL(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ // Static node feature end
+ }
+
+ // Check which field going to be handled
+ SetField(aURI);
+ SetURIInProcessL(aURI);
+
+ // Check if valid field
+ if( !AcceptDMField() )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): EInvalidObject end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+ return;
+ }
+ /*if(iField->Compare(KNSmlDdfExt) == 0)
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ CBufBase* extNode = CBufFlat::NewL(128);
+ CleanupStack::PushL(extNode);
+ iCallBack->SetResultsL( aResultsRef, *extNode, KNullDesC8 );
+ CleanupStack::PopAndDestroy(extNode);
+ return;
+ }*/
+
+ // Get Database field type
+ TInt fType = GetDMFieldType();
+ if ( fType == EWrong )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): EError end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+
+ TNSmlDMProfileData fieldId = GetDMField();
+ if( fieldId == ESyncAccepted )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafObjectL(): EError end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+ CBufBase *lObject = CBufFlat::NewL( 128 );
+ CleanupStack::PushL( lObject );
+ lObject->Reset();
+
+ CSmlDmAdapter::TError status;
+
+ if ( fType == EStr || fType == EInt || fType == EBin )
+ {
+ // Check for APPId and return w7
+ TInt rValue = KErrNone;
+ /* if( iField->Compare(KNSmlDdfAppId ) ==0 )
+ {
+ status = CSmlDmAdapter::EOk;
+ lObject->InsertL(lObject->Size(),KNSmlDdfAppIdValue);
+
+ }*/
+
+ rValue = GetObjectL( iLUID, fieldId, *lObject );
+ if( rValue != KErrNone )
+ {
+ if( rValue == KErrNotFound )
+ {
+ status = CSmlDmAdapter::ENotFound;
+ }
+ else if( rValue == KErrInUse )
+ {
+ status = CSmlDmAdapter::EObjectInUse;
+ }
+ else if( rValue == KErrNoMemory )
+ {
+ status = CSmlDmAdapter::ENoMemory;
+ }
+ else
+ {
+ status = CSmlDmAdapter::EError;
+ }
+ }
+ else
+ {
+ status = CSmlDmAdapter::EOk;
+ }
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(); //lObject
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ iProfile.Close();
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ return;
+ }
+ iCallBack->SetStatusL( aStatusRef, status );
+
+ if(status==CSmlDmAdapter::EOk)
+ {
+ iCallBack->SetResultsL( aResultsRef, *lObject, aType );
+ }
+
+ CleanupStack::PopAndDestroy(); //lObject
+ iProfile.Close();
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CSmlDmSettingsAdapter::ChildURIListL
+// Function returns the list of profiles or leafs of the profile
+// acording to aURI.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::ChildURIListL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+ const TInt aResultsRef,
+ const TInt aStatusRef )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ChildURIListL(): begin" );
+ CBufBase *currentURISegmentList = CBufFlat::NewL( 128 );
+ CleanupStack::PushL( currentURISegmentList );
+
+ if(( aURI.Match( KDmAccMatch ) != KErrNotFound ) &&
+ (aURI.Match( KDmAccMatch3 ) == KErrNotFound ))
+ {
+ // Check if Profile exists
+ TInt checkLUID = GetIntObject( aLUID );
+ if( FindProfileIdL( checkLUID ) )
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAcc );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+ }
+ else
+ {
+ // Static node feature start
+ checkLUID = -1;
+ if( IsDMAccUriFormatMatchPredefined(aURI) )
+ {
+ checkLUID = ConstructTreeL(aURI);
+ }
+
+ if (checkLUID == -1)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter::childURI(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ CleanupStack::PopAndDestroy( ); // currentURISegmentList
+ _DBG_FILE( "CNSmlDMSettingsAdapter::ChildURIListL(): end" );
+ return;
+ }
+ else
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAcc );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+
+ }
+
+
+ // iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ // Static node feature start end
+ }
+
+ CleanupStack::PopAndDestroy( ); // currentURISegmentList
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ChildURIListL(): end" );
+ return;
+ }
+ else if(( aURI.Match( KDmAccMatch2 ) != KErrNotFound ) &&
+ (aURI.Match( KDmAccMatch ) == KErrNotFound ))
+ {
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+ RArray<TSmlProfileId> profileIdArray;
+ CleanupClosePushL( profileIdArray );
+ TSmlUsageType usageType = ESmlDevMan;
+ iSyncSession.ListProfilesL( profileIdArray, usageType );
+
+ for( TInt p = 0; p < profileIdArray.Count(); p++ )
+ {
+ TBool notInList = ETrue;
+ TInt newline = 0;
+ TInt ddId = profileIdArray[p] - KMaxDataSyncID;
+
+ while( notInList && newline < aPreviousURISegmentList.Count() )
+ {
+ TInt ppId = GetIntObject( aPreviousURISegmentList.At(newline).iURISegLUID );
+ if( ppId == ddId )
+ {
+ notInList = EFalse;
+ break;
+ }
+ newline++;
+ }
+ if( notInList )
+ {
+ _LIT8( Kprev, "DMId" );
+ TBuf8<7> addNAME(Kprev); // DMIdnnn , nnn = profileid
+ TInt fixedProfId = profileIdArray[p] - KMaxDataSyncID; //fit to 3 decimal
+ addNAME.AppendNumFixedWidth( fixedProfId, EDecimal, 3 );
+
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), addNAME );
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSmlDmSlash );
+ DBG_ARGS8( _S8("notInList: Id = %d Name %S"), p, &addNAME );
+
+ // KNSmlDMStart includes start text for URISeg
+ TBuf8<20> addURI; // SyncML/DMAcc/DMIdnnn , nnn = profileid
+ addURI.Append( KNSmlDMStart );
+ addURI.AppendNumFixedWidth( fixedProfId, EDecimal, 3 );
+
+ TBuf8<3> addLUID;
+ addLUID.Num( fixedProfId );
+
+ // Also added to mapping
+ iCallBack->SetMappingL( addURI, addLUID );
+ }
+ else
+ { // Add those in PreviousList which are on database
+ currentURISegmentList->InsertL( currentURISegmentList->Size(),
+ aPreviousURISegmentList.At(newline).iURISeg );
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSmlDmSlash );
+// DBG_ARGS8( _S8("InList: Id = %d Name %S"), newline,
+// aPreviousURISegmentList.At(newline).iURISeg );
+ }
+ }
+ CleanupStack::PopAndDestroy( 1 );//profileIdArray
+ }
+
+ // AppAddr subtree
+ else if( ( aURI.Match( KDmAccAppAddrMatch ) != KErrNotFound ) && (aURI.Match( KDmAccPortMatch ) == KErrNotFound ) && (aURI.Match( KDmAccPortFullMatch ) == KErrNotFound ))
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KDmAccAppAddrId );
+ }
+ else if(( aURI.Match( KDmAccAppAddrFullMatch ) != KErrNotFound ) && (aURI.Match( KDmAccPortMatch ) == KErrNotFound ) && (aURI.Match( KDmAccPortFullMatch ) == KErrNotFound ))
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAccAppAddr );
+ }
+ else if(( aURI.Match( KDmAccPortMatch ) != KErrNotFound ) && (aURI.Match( KDmAccPortFullMatch ) == KErrNotFound ))
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAccPortRT );
+ }
+ else if( aURI.Match( KDmAccPortFullMatch ) != KErrNotFound )
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAccport );
+ }
+
+ else if(( aURI.Match( KDmAccAppAuthMatch ) != KErrNotFound ) && (aURI.Match( KDmAccAppAuthFullMatch ) == KErrNotFound ))
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KDmAccAppAuthNodes );
+ }
+ else if((aURI.Match(KDmAccAppAuthSrvMatch) != KErrNotFound) || (aURI.Match(KDmAccAppAuthCliMatch) != KErrNotFound) || (aURI.Match(KDmAccAppAuthTransMatch) != KErrNotFound)) //|| (aURI.Match(KDmAccAppAuthObexMatch) != KErrNotFound) || (aURI.Match(KDmAccAppAuthHttpMatch) != KErrNotFound))
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAccAppAuth );
+ }
+ else if(( aURI.Match( KDmAccAppAuthFullMatch ) != KErrNotFound ) && (aURI.Find( KDmAccAppAuthNodes ) != KErrNotFound))
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAccAppAuth );
+ }
+
+ else if( aURI.Match( KDmAccExtMatch ) != KErrNotFound )
+ {
+ currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDMAccLocked );
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+ CleanupStack::PopAndDestroy( 1 ); // currentURISegmentList
+ return;
+ }
+
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+ iCallBack->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+ CleanupStack::PopAndDestroy(); // currentURISegmentList
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ChildURIListL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::AddNodeObjectL
+// Adds new DM-settings profile to database
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::AddNodeObjectL( const TDesC8& aURI,
+ const TDesC8& aParentLUID,
+ const TInt aStatusRef )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddNodeObjectL(): begin" );
+
+ if( aParentLUID.Length() > 0 )
+ {
+ iParentLUID = GetIntObject( aParentLUID );
+ if( FindProfileIdL( iParentLUID ) != EFalse )// iProfile != NULL)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddNodeObjectL(): EAlreadyExists end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+ return;
+ }
+ else
+ {
+ TInt ret = iCallBack->RemoveMappingL(KNSmlDMSettingsAdapterImplUid,
+ GetDynamicDMNodeUri( aURI ), ETrue );
+ if(ret != KErrNone)
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+ }
+ }
+ iNewProfile = ETrue;
+ AddNodeBufferL (aURI, aStatusRef);
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddNodeObjectL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::UpdateLeafObjectL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::UpdateLeafObjectL( const TDesC8&, const TDesC8&,
+ RWriteStream*&, const TDesC8&,
+ const TInt )
+ {
+ //Not supported because data streaming is not supported by this adapter.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::FetchLeafObjectSizeL
+// This function fetches leaf object and returns its size.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::FetchLeafObjectSizeL( const TDesC8& aURI,
+ const TDesC8& aLUID,
+ const TDesC8& aType,
+ const TInt aResultsRef,
+ const TInt aStatusRef )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectSizeL() : begin" );
+ DBG_ARGS( _S16("DM:Fetch aURI - %S - %S"), &aURI, &aLUID );
+
+ iLUID = IntLUID( aLUID );
+ if ( iLUID >= 0 )
+ {
+ if( FindProfileIdL( iLUID ) == EFalse )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ }
+ else
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+
+ // Check which field going to be handled
+ SetField( aURI );
+ SetURIInProcessL (aURI);
+
+ // Check if valid field
+ if( !AcceptDMField() )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): EInvalidObject end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+ return;
+ }
+ /*if(aURI.Find( KNSmlDdfExt ) != KErrNotFound)
+ {
+ return;
+ }*/
+
+ // Get Database field type
+ TInt fType = GetDMFieldType();
+ if ( fType == EWrong )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): EError end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ return;
+ }
+
+ CBufBase *lObject = CBufFlat::NewL( 128 );
+ CleanupStack::PushL( lObject );
+ lObject->Reset();
+
+ if ( fType == EStr || fType == EInt || fType == EBin )
+ {
+ TInt rValue = GetObjectL( iLUID, GetDMField(), *lObject );
+ if( lObject->Size() == 0 || rValue != KErrNone )
+ {
+ if( rValue == KErrNotFound )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ }
+ else if( rValue == KErrInUse )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EObjectInUse );
+ }
+ else if( rValue == KErrNoMemory )
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENoMemory );
+ }
+ else
+ {
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+ }
+ }
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy();//lObject
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectL(): ENotFound end" );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+ return;
+ }
+ TInt objSizeInBytes = lObject->Size();
+ TBuf8<16> stringObjSizeInBytes;
+ stringObjSizeInBytes.Num( objSizeInBytes );
+
+ lObject->Reset();
+ lObject->InsertL( 0, stringObjSizeInBytes );
+ iCallBack->SetResultsL( aResultsRef, *lObject, aType );
+ iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk);
+
+ CleanupStack::PopAndDestroy( 1 ); //lObject
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FetchLeafObjectSizeL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ExecuteCommandL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::ExecuteCommandL( const TDesC8&, const TDesC8&,
+ const TDesC8&, const TDesC8&,
+ const TInt )
+ {
+ //Not supported. Command execution via DM settings adapter not possible.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ExecuteCommandL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::ExecuteCommandL( const TDesC8&, const TDesC8&,
+ RWriteStream*&, const TDesC8&,
+ const TInt )
+ {
+ //Not supported. Command execution via DM settings adapter not possible.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::CopyCommandL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::CopyCommandL( const TDesC8&, const TDesC8&,
+ const TDesC8&, const TDesC8&,
+ const TDesC8&, TInt )
+ {
+ //Not supported.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::StartAtomicL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::StartAtomicL()
+ {
+ //Not supported. Handling Atomic command cycles not supported by the adapter.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::CommitAtomicL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::CommitAtomicL()
+ {
+ //Not supported. Handling Atomic command cycles not supported by the adapter.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::RollbackAtomicL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::RollbackAtomicL()
+ {
+ //Not supported. Handling Atomic command cycles not supported by the adapter.
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::StreamingSupport()
+// Indicates if streaming is supported.
+// -----------------------------------------------------------------------------
+TBool CNSmlDMSettingsAdapter12::StreamingSupport( TInt& /*aItemSize*/ )
+ {
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::StreamCommittedL()
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::StreamCommittedL()
+ {
+ //Not supported. Streaming not supported by the DM settings adapter.
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::CompleteOutstandingCmdsL()
+// If buffering used, commands must be executed before returning this function.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::CompleteOutstandingCmdsL()
+ {
+ // Check if Buffered
+ for (int val=0; val<iBuffer->Count ();val++)
+ {
+ if ( !iBuffer->At(val).iExecuted)
+ {
+ TInt count = iBuffer->At(val).iLeafBuf->Count ()-1;
+ iExecutionIndex = val;
+ iComplete = ETrue;
+ ExecuteBufferL ();
+ }
+ }
+ for (TInt i = 0;i<iProfileLockBuffer.Count(); i++)
+ {
+ TInt err = SetProfileLockL(iProfileLockBuffer[i].iProfileLockLUID, iProfileLockBuffer[i].iProfileLock) ;
+
+ }
+
+ // if port was updated, set it
+ for (TInt i = 0;i<iPortBuffer.Count(); i++)
+ {
+ TInt err = SetProfileConnectionPortNrL( iPortBuffer[i].iPortBufLUID, iPortBuffer[i].iPortBuf );
+
+ // set status
+ if ( err != KErrNone )
+ {
+ iCallBack->SetStatusL( iPortBuffer[i].iPortBufStatusRef, CSmlDmAdapter::EError );
+ }
+ else
+ {
+ iCallBack->SetStatusL( iPortBuffer[i].iPortBufStatusRef, CSmlDmAdapter::EOk );
+ }
+
+ }
+ iPortBuffer.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::AcceptDMField
+// This function checks if field to be handled is valid.
+// -----------------------------------------------------------------------------
+TBool CNSmlDMSettingsAdapter12::AcceptDMField()
+ {
+ _DBG_FILE("CNSmlDMSettingsAdapter12::AcceptDMField(): begin");
+
+ if ( iField->Compare( KNSmlDdfAddrType ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfAddr ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfPortNbr ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfAuthScheme ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfServerId ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfServerPW ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfServerNonce ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfClientUserName ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfClientPW ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfClientNonce ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare( KNSmlDdfName ) == 0 )
+ {
+ return ETrue;
+ }
+
+ else if ( iField->Compare( KNSmlDdfId ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare(KNSmlDdfAppId) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( iField->Compare(KNSmlDdfPrefConRef) == 0 )
+ {
+ return ETrue;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthLevel) == 0 )
+ {
+ return ETrue;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthType) == 0 )
+ {
+ return ETrue;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthName) == 0 )
+ {
+ return ETrue;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthSecret) == 0 )
+ {
+ return ETrue;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthData) == 0 )
+ {
+ return ETrue;
+ }
+ else if (iField->Compare(KNSmlDdfLocked) == 0 )
+ {
+ return ETrue;
+ }
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AcceptDMField(): end" );
+ return EFalse; // Not a valid Type
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetDMField
+// Matches URI fieldname to DM-database.
+// -----------------------------------------------------------------------------
+TNSmlDMProfileData CNSmlDMSettingsAdapter12::GetDMField()
+ {
+
+ if ( iField->Compare( KNSmlDdfAddrType ) == 0 )
+ {
+
+ return EProfileAddrType;
+
+ }
+ else if ( iField->Compare( KNSmlDdfAddr ) == 0 )
+ {
+ return EProfileURL;
+ }
+ else if ( iField->Compare( KNSmlDdfPortNbr ) == 0 )
+ {
+ return EProfilePort;
+ }
+ else if ( iField->Compare( KNSmlDdfAuthScheme ) == 0 )
+ {
+ return EAuthenticationRequired;
+ }
+ else if ( iField->Compare( KNSmlDdfServerId ) == 0 )
+ {
+ return EServerId;
+ }
+ else if ( iField->Compare( KNSmlDdfServerPW ) == 0 )
+ {
+ return ESharedSecret;
+ }
+ else if ( iField->Compare( KNSmlDdfServerNonce ) == 0 )
+ {
+ return EServerNonce;
+ }
+ else if ( iField->Compare( KNSmlDdfClientUserName ) == 0 )
+ {
+ return EProfileDMServerUsername;
+ }
+ else if ( iField->Compare( KNSmlDdfClientPW ) == 0 )
+ {
+ return EProfileDMServerPassword;
+ }
+ else if ( iField->Compare( KNSmlDdfClientNonce ) == 0 )
+ {
+ return EClientNonce;
+ }
+ else if ( iField->Compare( KNSmlDdfName ) == 0 )
+ {
+ return EProfileName;
+ }
+ else if ( iField->Compare( KNSmlDdfId ) == 0 )
+ {
+ return EProfileId;
+ }
+
+ else if ( iField->Compare( KNSmlDdfPrefConRef ) == 0 )
+ {
+ return EProfileIAPId;
+ }
+
+ else if ( iField->Compare( KNSmlDdfAppId ) == 0 )
+ {
+ return EProfileIAPId;
+ }
+ else if ( iField->Compare( KNSmlDdfLocked) == 0 )
+ {
+ return EProfileLock;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthLevel) == 0 )
+ {
+ if(iURIField->Find(KDmAccAppAuthDyn1) != KErrNotFound)
+ return EPRofileServerCred;
+ else if (iURIField->Find(KDmAccAppAuthDyn2)!= KErrNotFound)
+ return EPRofileClientCred;
+ else if (iURIField->Find(KDmAccAppAuthTransport)!= KErrNotFound)
+ return EProfileTransport;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthType) == 0 )
+ {
+ return EProfileAAuthType;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthName) == 0 )
+ {
+ if(iURIField->Find(KDmAccAppAuthDyn1) != KErrNotFound)
+ return EProfileName;
+ else if (iURIField->Find(KDmAccAppAuthDyn2)!= KErrNotFound)
+ return EProfileDMServerUsername;
+ else if (iURIField->Find(KDmAccAppAuthTransport)!= KErrNotFound)
+ {
+ return ETransportAuthName;
+ }
+
+ // return ETrue;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthSecret) == 0 )
+ {
+ if(iURIField->Find(KDmAccAppAuthDyn1) != KErrNotFound)
+ return ESharedSecret;
+ else if (iURIField->Find(KDmAccAppAuthDyn2)!= KErrNotFound)
+ return EProfileDMServerPassword;
+ else if (iURIField->Find(KDmAccAppAuthTransport)!= KErrNotFound)
+ {
+ return EProfileTransportPassword;
+ }
+ }
+ else if (iField->Compare(KNSmlDdfAAuthData) == 0 )
+ {
+ if(iURIField->Find(KDmAccAppAuthDyn1) != KErrNotFound)
+ return EServerNonce;
+ else if (iURIField->Find(KDmAccAppAuthDyn2)!= KErrNotFound)
+ return EClientNonce;
+ else if (iURIField->Find(KDmAccAppAuthTransport)!= KErrNotFound)
+ return EProfileTransportAuthData;
+ }
+
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetDMField(): Error" );
+ return ESyncAccepted;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetDMFieldType
+// Gets field data type.
+// -----------------------------------------------------------------------------
+TNSmlDMFieldType CNSmlDMSettingsAdapter12::GetDMFieldType() const
+ {
+ if ( iField->Compare( KNSmlDdfAddrType ) == 0 )
+ {
+ return EInt;
+ }
+ else if ( iField->Compare( KNSmlDdfAddr ) == 0 )
+ {
+ return EStr;
+ }
+ else if ( iField->Compare( KNSmlDdfPortNbr ) == 0 )
+ {
+ return EInt;
+ }
+ else if ( iField->Compare( KNSmlDdfAuthScheme ) == 0 )
+ {
+ return EInt;
+ }
+ else if ( iField->Compare( KNSmlDdfServerId ) == 0 )
+ {
+ return EStr;
+ }
+ else if ( iField->Compare( KNSmlDdfServerPW ) == 0 )
+ {
+ return EStr;
+ }
+ else if ( iField->Compare( KNSmlDdfServerNonce ) == 0 )
+ {
+ return EBin;
+ }
+ else if ( iField->Compare( KNSmlDdfClientUserName ) == 0 )
+ {
+ return EStr;
+ }
+ else if ( iField->Compare( KNSmlDdfClientPW ) == 0 )
+ {
+ return EStr;
+ }
+ else if (iField->Compare(KNSmlDdfClientNonce) == 0)
+ {
+ return EBin;
+ }
+ else if ( iField->Compare( KNSmlDdfName ) == 0 )
+ {
+ return EStr;
+ }
+
+ else if ( iField->Compare( KNSmlDdfId ) == 0 )
+ {
+ return EInt;
+ }
+ else if( iField->Compare(KNSmlDdfAppId ) ==0 )
+ {
+ return EStr;
+ }
+ else if ( iField->Compare( KNSmlDdfPrefConRef ) == 0 )
+ {
+ return EInt;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthLevel) == 0 )
+ {
+ return EStr;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthType) == 0 )
+ {
+ return EStr;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthName) == 0 )
+ {
+ return EStr;
+ }
+
+ else if (iField->Compare(KNSmlDdfAAuthSecret) == 0 )
+ {
+ return EStr;
+ }
+ else if (iField->Compare(KNSmlDdfAAuthData) == 0 )
+ {
+ return EBin;
+ }
+
+ else if(iField->Compare(KNSmlDdfLocked)==0)
+ {
+ return EStr;
+ }
+
+
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetDMFieldType(): Error" );
+ return EWrong;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::IntLUID
+// Returns integer value for a profile LUID.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::IntLUID( const TDesC8& aLUID )
+ {
+ TLex8 lLex( aLUID );
+
+ if( lLex.Val( iLUID ) == KErrNone )
+ {
+ return iLUID;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetIntObject
+// Returns integer value for a aObject.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetIntObject( const TDesC8& aObject )
+ {
+ TLex8 lLex( aObject );
+
+ TInt value = 0;
+
+ if( lLex.Val( value ) != KErrNone )
+ {
+ return KErrNotFound;
+ }
+ else
+ {
+ return value;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetIntObject16()
+// Returns Integer Value for a 16 bit data object.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetIntObject16( const TDesC& aObject )
+ {
+ TLex16 lLex( aObject );
+
+ TInt value = 0;
+
+ if( lLex.Val( value ) == KErrNone )
+ {
+ return value;
+ }
+ else
+ {
+ return value;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetIntObjectLC
+// Converts integer to HBufC8 type buffer and returns reference to it.
+// -----------------------------------------------------------------------------
+TDesC8& CNSmlDMSettingsAdapter12::SetIntObjectLC( const TInt& aObject )
+ {
+ HBufC8* buf = HBufC8::NewLC( 8 );
+ TPtr8 ptrBuf = buf->Des();
+
+ ptrBuf.Num( aObject );
+ return *buf;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::NotValidStrLenght
+// Checks if data length is valid.
+// -----------------------------------------------------------------------------
+TBool CNSmlDMSettingsAdapter12::NotValidStrLenght( const TNSmlDMProfileData& aProfileItem,
+ const TDesC8& aSource )
+ {
+ TInt lLen = aSource.Length();
+ TBool lBool = EFalse;
+
+ switch ( aProfileItem )
+ {
+ case ( EProfileName ) :
+ {
+ if( lLen > KNSmlMaxProfileNameLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EProfileDMServerUsername ) :
+ {
+ if( lLen > KNSmlMaxUsernameLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EProfileHttpUsername ) :
+ case (ETransportAuthName):
+ {
+ if( lLen > KNSmlDmMaxHttpAuthUsernameLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+ case ( EProfileHttpPassword ) :
+ case (EProfileTransportPassword):
+ {
+ if( lLen > KNSmlDmMaxHttpAuthPasswordLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+ case ( EProfileDMServerPassword ) :
+ {
+ if( lLen > KNSmlMaxPasswordLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( ESharedSecret ) :
+ {
+ if( lLen > KNSmlDmSharedSecretMaxLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EProfileURL ) :
+ {
+ if( lLen > KNSmlMaxURLLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EServerId ) :
+ {
+ if( lLen > KNSmlDmServerIdMaxLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EProfileIAPId ) :
+ {
+ if( lLen > KNSmlMaxURLLength )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EAuthenticationRequired ) :
+ case ( EProfileAAuthType ) :
+ {
+ if( lLen > 20 )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EProfileId ) :
+ case ( EProfilePort ) :
+ case ( EProfileMediumType ) :
+ case ( EProfileAddrType ) :
+
+ {
+ if( lLen > 8 )
+ {
+ lBool = ETrue;
+ }
+ }
+ break;
+
+ case ( EServerNonce ) :
+ case ( EClientNonce ) :
+ case (EProfileTransportAuthData):
+ {
+ lBool = EFalse;
+ }
+ break;
+ case ( EProfileTransport ):
+ {
+ lBool = EFalse;
+ }
+ break;
+ case EProfileLock :
+ {
+ if(lLen > 6 )
+ {
+ lBool = ETrue;
+ }
+
+ }
+ break;
+ default:
+ {
+ lBool = ETrue;
+ }
+ }
+
+ return lBool;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetField
+// Last element of the URI (after last '/') is returned.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetField( const TDesC8& aSource )
+ {
+ if ( aSource.LocateReverse( KNSmlDMUriSeparator ) == KErrNotFound )
+ {
+ iField->Des().Format( aSource );
+ }
+ else
+ {
+ iField->Des().Format( aSource.Mid( aSource.LocateReverse( KNSmlDMUriSeparator ) + 1 ) );
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetField
+// Last element of the URI (after last '/') is returned.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetURIInProcessL( const TDesC8& aSource )
+ {
+
+ if( iURIField )
+ {
+ delete iURIField;
+ iURIField = NULL;
+ }
+ iURIField = HBufC8::NewL( aSource.Length() );
+ TPtr8 newPortNbr = iURIField->Des();
+ newPortNbr.Append( aSource );
+
+ return KErrNone;
+ }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ConvertTo8LC
+// Converts string value to 8-bit and returns reference.
+// -----------------------------------------------------------------------------
+TDesC8& CNSmlDMSettingsAdapter12::ConvertTo8LC( const TDesC& aSource )
+ {
+ HBufC8* buf = HBufC8::NewLC( aSource.Length() * 2 );
+ TPtr8 bufPtr = buf->Des();
+ CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource );
+
+ return *buf;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ConvertTo16LC
+// Converts string value to 16-bit and returns reference.
+// -----------------------------------------------------------------------------
+TDesC16& CNSmlDMSettingsAdapter12::ConvertTo16LC( const TDesC8& aSource)
+ {
+ HBufC16* buf16 = HBufC16::NewLC( aSource.Length() );
+ TPtr16 bufPtr16 = buf16->Des();
+
+ CnvUtfConverter::ConvertToUnicodeFromUtf8( bufPtr16, aSource );
+
+ return *buf16;
+ }
+
+// -------------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetConRefL
+// Gets the URI for given aObject (IAP ID).
+// -------------------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetConRefL( CBufBase& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetConRefL() : begin" );
+ TInt profIAPid = -1;
+ TInt apIdResponse = GetProfileIAPIdL( profIAPid );
+ if( profIAPid < 0 )
+ {
+ return KErrNone;
+ }
+ if( apIdResponse != KErrNone )
+ {
+ return KErrNotFound;
+ }
+ CNSmlDMIAPMatcher* apmatch = CNSmlDMIAPMatcher::NewL( iCallBack );
+ CleanupStack::PushL( apmatch );
+ HBufC8* uri8 = apmatch->URIFromIAPIdL( profIAPid );
+ if( uri8 )
+ {
+ CleanupStack::PushL( uri8 );
+ aObject.InsertL( aObject.Size(), uri8->Des() );
+ CleanupStack::PopAndDestroy(); // uri8
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(); // apMatch
+ return KErrGeneral;
+ }
+ CleanupStack::PopAndDestroy(); // iapMatch
+ _DBG_FILE( "CNSmlDSSettingsAdapter::GetToNAPIDL() : end" );
+ return KErrNone;
+ }
+
+// -------------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetConRefL()
+// Set the profile IAP Id value according to given URI.
+// -------------------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetConRefL( const TInt aLUID, const TDesC8& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetConRefL() : begin" );
+ CNSmlDMIAPMatcher* apmatch = CNSmlDMIAPMatcher::NewL( iCallBack );
+ CleanupStack::PushL( apmatch );
+ TInt lIAPid = apmatch->IAPIdFromURIL( aObject );
+ CleanupStack::PopAndDestroy(); // iapmatch
+ if(aObject.Length() >0 && lIAPid == KErrNotFound)
+ {
+ return KErrGeneral;
+ }
+ TInt apIdResponse = SetProfileConnectionPropertyL( aLUID, lIAPid );
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetConRefL() : end" );
+ return apIdResponse;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ParseUri
+// Resolves portnbr (separated with ':') as integer from Uri.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::ParseUri( const TDesC8& aRealURI, TInt& aPort )
+ {
+ TInt offset=0;
+ //http:
+ if( aRealURI.Find( KNSmlDMSettingsHTTP )==0 )//http:
+ {
+ offset = KNSmlDMSettingsHTTP().Length();
+ }
+ else if( aRealURI.Find( KNSmlDMSettingsHTTPS )==0 )//https:
+ {
+ offset = KNSmlDMSettingsHTTPS().Length();
+ }
+
+ TBool portFound=EFalse;
+ ////123.234.345.456:80/syncml
+ for( TInt i = offset; i < aRealURI.Length(); i++ )
+ {
+ if( aRealURI[i] == KNSmlDMColon )// ':'
+ {
+ portFound = ETrue;
+ offset=i;
+ }
+ if( portFound && aRealURI[i] == KNSmlDMUriSeparator ) // '/'
+ {
+ aPort = GetIntObject( aRealURI.Mid( (offset + 1), (i - offset-1) ) );
+ }
+ else if ( portFound && i == aRealURI.Length() - 1 ) // last char
+ {
+ // port is from offset to the end
+ aPort = GetIntObject( aRealURI.Right( aRealURI.Length() - offset - 1 ) );
+ }
+ }
+
+ if( aPort != 0 )
+ {
+ return KErrNone;
+ }
+ else
+ {
+ return KErrNotFound;
+ }
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::OpenSyncSessionAndDSProfileL
+// The function opens the server session and DM profile.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::OpenSyncSessionAndProfileL( const TInt aIntLUID,
+ TSmlOpenMode aMode )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::OpenSyncSessionAndProfileL(): begin" );
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+ TInt trueLuid = aIntLUID + KMaxDataSyncID;
+ TInt rValue(KErrNone);
+
+ if(trueLuid!=iCurrentProfile)
+ {
+ RArray<TSmlProfileId> profileIdArray;
+ CleanupClosePushL( profileIdArray );
+ TSmlUsageType usageType = ESmlDevMan;
+ iSyncSession.ListProfilesL( profileIdArray, usageType );
+ TInt index = profileIdArray.Find( trueLuid );
+ CleanupStack::PopAndDestroy(); //profileIdArray
+ if( index == KErrNotFound )
+ {
+ return KErrNotFound;
+ }
+ TRAP( rValue, iProfile.OpenL( iSyncSession, trueLuid, aMode ) );
+ iCurrentProfile = trueLuid;
+ if( rValue != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ }
+ }
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::OpenSyncSessionAndProfileL(): end" );
+ return rValue;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::FindProfileId
+// Function checks if profile can be found.
+// -----------------------------------------------------------------------------
+TBool CNSmlDMSettingsAdapter12::FindProfileIdL( const TInt aIntLUID )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FindProfileIdL(): begin" );
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+
+ RArray <TSmlProfileId> profileList;
+ CleanupClosePushL( profileList );
+ TSmlUsageType usageType = ESmlDevMan;
+ iSyncSession.ListProfilesL( profileList, usageType );
+ if( profileList.Count() == 0 )
+ {
+ CleanupStack::PopAndDestroy(); //profileList
+ return EFalse;
+ }
+ TInt item = profileList.Find( aIntLUID + KMaxDataSyncID );
+ CleanupStack::PopAndDestroy(); //profileList
+ if( item != KErrNotFound )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FindProfileIdL(): end" );
+ return ETrue;
+ }
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::FindProfileIdL(): end" );
+ return EFalse;
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::IsServerIDExistL
+// Function checks if serverid exist.
+// -----------------------------------------------------------------------------
+TBool CNSmlDMSettingsAdapter12::IsServerIDExistL( const TDesC8& aServerid )
+{
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::IsServerIDExistL(): begin" );
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+ TBool ret(EFalse);
+ RArray <TSmlProfileId> profileList;
+ CleanupClosePushL( profileList );
+ TSmlUsageType usageType = ESmlDevMan;
+ iSyncSession.ListProfilesL( profileList, usageType );
+ TInt count = profileList.Count();
+ if( count > 0 )
+ {
+ for(TInt i =0; i< count; i++)
+ {
+ TInt pid = i + KMaxDataSyncID;
+ TInt index = profileList.Find(pid );
+ if( index >= i )
+ {
+ TInt rValue(KErrNone);
+ RSyncMLDevManProfile profile;
+ TRAP( rValue, profile.OpenL( iSyncSession, pid, ESmlOpenRead ) );
+ if( rValue == KErrNone )
+ {
+ CleanupClosePushL(profile);
+ if(((aServerid.Compare(profile.ServerId())) == 0) &&
+ ((profile.ServerId()).Length() == aServerid.Length()))
+ {
+ ret = ETrue;
+ CleanupStack::PopAndDestroy(&profile);//profile
+ break;
+ }
+ CleanupStack::PopAndDestroy(&profile);//profile
+ }
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(); //profileList
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::IsServerIDExistL(): end" );
+ return ret;
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::CreateNewProfileL
+// The function creates new DM profile via client API.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::CreateNewProfileL( TInt& aPID )
+ {
+ _DBG_FILE("CNSmlDMSettingsAdapter12::CreateNewProfileL(): begin");
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+ TRAPD( value1, iProfile.CreateL( iSyncSession ) );
+ if( value1 != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ return value1;
+ }
+
+ TRAPD( value2, iProfile.UpdateL() );
+ if( value2 != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ return value2;
+ }
+
+ aPID = iProfile.Identifier();
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::CreateNewProfileL(): end" );
+ return KErrNone;
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileServerURIL()
+// The function sets the server URL for a profile.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileServerURIL( const TInt aPID,
+ const TDesC8& aObj )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileServerURIL(): begin" );
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+ RArray<TSmlTransportId> transportIdArray;
+ CleanupClosePushL( transportIdArray );
+ iProfile.ListConnectionsL( transportIdArray );
+ if( transportIdArray.Count() == 0 )
+ {
+ CleanupStack::PopAndDestroy();//transportIdArray
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+
+ TInt newPort(0);
+
+ RSyncMLConnection conn;
+ CleanupClosePushL( conn );
+ conn.OpenL( iProfile, transportIdArray[0] );
+
+ if(ParseUri(aObj,newPort)==KErrNotFound)
+ {
+ TInt port = 0;
+ ParseUri(conn.ServerURI(),port);
+ if(port==0)
+ {
+ port = 80;
+ }
+
+ TBuf8<5> buf;
+ buf.Num( port );
+
+ TInt totalSize = aObj.Length() + buf.Length() + 1;
+ HBufC8* newServerURI = HBufC8::NewLC( totalSize );
+ SetPortNrToAddrStr( aObj, newServerURI, buf );
+ conn.SetServerURIL( *newServerURI );
+ conn.UpdateL();
+ CleanupStack::PopAndDestroy( newServerURI );
+ }
+ else
+ {
+ conn.SetServerURIL( aObj );
+ conn.UpdateL();
+ }
+
+
+ iProfile.UpdateL();
+
+ CleanupStack::PopAndDestroy( 2 ); //transportIdArray, conn
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileServerURIL(): end" );
+ return KErrNone;
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileDisplayNameL()
+// The function sets the display name for a profile.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileDisplayNameL( const TInt aPID,
+ const TDesC8& aObj )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileDisplayNameL(): begin" );
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+ iProfile.SetDisplayNameL( ConvertTo16LC( aObj ) );
+ iProfile.UpdateL();
+ CleanupStack::PopAndDestroy(); //ConvertTo16LC
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileDisplayNameL(): end" );
+ return KErrNone;
+ }
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::IsProfileLockedL()
+// The function to tell whether the profile is locked
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::IsProfileLockedL(const TInt aPID)
+{
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileDisplayNameL(): begin" );
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenRead );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+
+ retVal=iProfile.ProfileLocked(EFalse, EFalse);
+ iCurrentProfile = 0;
+ iProfile.Close();
+ if(retVal)
+ {
+ /* CRepository* centrep = NULL;
+ TRAPD( err, centrep = CRepository::NewL( KCRUidDeviceManagementInternalKeys) );
+ TInt IsPrfoileEditable = 0;
+ if(!err)
+ centrep->Get( KDevOverrideProfileLock, IsPrfoileEditable );
+ delete centrep;
+ if (!IsPrfoileEditable)
+ retVal= KErrAccessDenied;
+ else
+ retVal= KErrNone;*/
+ retVal= KErrAccessDenied;
+ }
+
+
+
+ return retVal;
+
+}
+
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileLockL()
+// The function to setor reset the profile lock.
+// -----------------------------------------------------------------------------
+
+TInt CNSmlDMSettingsAdapter12::SetProfileLockL( const TInt aPID, TInt aLockValue)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileLockL(): begin" );
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+
+ iProfile.ProfileLocked(ETrue, aLockValue );
+ iProfile.UpdateL();
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileLockL(): end" );
+ return KErrNone;
+ }
+
+
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileHttpUserNameL
+// The function sets the profile http/network name.
+// -----------------------------------------------------------------------------
+
+TInt CNSmlDMSettingsAdapter12::SetProfileHttpUserNameL( const TInt aPID, const TDesC8& aObj )
+{
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+
+ RSyncMLConnection connection;
+ TBuf8<KBufSize32> key;
+ RArray<TSmlTransportId> connIdArray;
+ CleanupClosePushL( connIdArray );
+ iProfile.ListConnectionsL( connIdArray );
+ if( connIdArray.Count() == 1 )
+ {
+
+ connection.OpenL( iProfile, KUidNSmlMediumTypeInternet.iUid );
+ CleanupClosePushL( connection );
+
+ connection.SetPropertyL( KNSmlHTTPAuth, KNSmlTrueVal );
+ connection.SetPropertyL( KNSmlHTTPUsername, aObj );
+ connection.UpdateL();
+ CleanupStack::PopAndDestroy( );
+ }
+ else
+ {
+ connection.SetPropertyL( KNSmlHTTPAuth, KNSmlFalseVal );
+ connection.UpdateL();
+ }
+
+
+ CleanupStack::PopAndDestroy( );
+
+ return retVal;
+
+}
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileUserNameL
+// The function sets the profile user name.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileUserNameL( const TInt aPID,
+ const TDesC8& aObj )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileUserNameL(): begin" );
+ TInt retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+ iProfile.SetUserNameL( aObj );
+ iProfile.UpdateL();
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileUserNameL(): end" );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileProtocolVersionL
+// The function sets the protocol version to be supported.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileProtocolVersionL( const TInt aPID,
+ const TDesC8& )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileProtocolVersionL(): begin" );
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+ //The syncSession to Sync server is open.
+ TSmlProtocolVersion protocol = ESmlVersion1_2;
+ iProfile.SetProtocolVersionL( protocol );
+ TRAPD( iError, iProfile.UpdateL() );
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileProtocolVersionL(): begin" );
+ return iError;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileServerIdL
+// The function sets the profile ServerId value.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileServerIdL( const TInt aPID,
+ const TDesC8& aObj )
+ {
+ _DBG_FILE("CNSmlDMSettingsAdapter12::SetProfileServerIdL(): begin");
+ TInt retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+ iProfile.SetServerIdL( aObj );
+ TRAP(retVal,iProfile.UpdateL() );
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileServerIdL(): end" );
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileServerPasswordL
+// The function sets the profile server password.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileServerPasswordL( const TInt aPID,
+ const TDesC8& aObj )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileServerPasswordL(): begin" );
+ TInt retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+ iProfile.SetServerPasswordL( aObj );
+ iProfile.UpdateL();
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileServerPasswordL(): end" );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileHttpPasswordL
+// The function sets the profile network/http password.
+// -----------------------------------------------------------------------------
+
+
+ TInt CNSmlDMSettingsAdapter12::SetProfileHttpPasswordL( const TInt aPID, const TDesC8& aObj )
+ {
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+
+ RSyncMLConnection connection;
+ TBuf8<KBufSize32> key;
+ RArray<TSmlTransportId> connIdArray;
+ CleanupClosePushL( connIdArray );
+ iProfile.ListConnectionsL( connIdArray );
+ if( connIdArray.Count() == 1 )
+ {
+
+ connection.OpenL( iProfile, KUidNSmlMediumTypeInternet.iUid );
+ CleanupClosePushL( connection );
+
+ connection.SetPropertyL( KNSmlHTTPAuth, KNSmlTrueVal );
+ connection.SetPropertyL( KNSmlHTTPPassword, aObj );
+ connection.UpdateL();
+ CleanupStack::PopAndDestroy( );
+ }
+ else
+ {
+ // connection.SetPropertyL( KNSmlHTTPAuth, KNSmlFalseVal );
+ connection.UpdateL();
+ }
+
+
+ CleanupStack::PopAndDestroy( );
+
+ return retVal;
+
+
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfilePasswordL
+// The function sets the profile password.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfilePasswordL( const TInt aPID,
+ const TDesC8& aObj )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfilePasswordL(): begin" );
+ TInt retVal = KErrNone;
+ retVal = OpenSyncSessionAndProfileL( aPID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+ iProfile.SetPasswordL( aObj );
+ iProfile.UpdateL();
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfilePasswordL(): begin" );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileConnectionPropertyL
+// This function sets the profile IAP id.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileConnectionPropertyL( const TInt aLUID,
+ const TInt aIAPid )
+ {
+ TInt retVal = OpenSyncSessionAndProfileL( aLUID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+ RArray<TSmlTransportId> connIdArray;
+ CleanupClosePushL( connIdArray );
+ iProfile.ListConnectionsL( connIdArray );
+ if( connIdArray.Count() == 1 )
+ {
+ RSyncMLTransport transport;
+ CleanupClosePushL( transport );
+ transport.OpenL( iSyncSession, connIdArray[0] );
+ const CSyncMLTransportPropertiesArray& props = transport.Properties();
+ TInt index = props.Find( KNSmlIAPId );
+ if( index > 0 )
+ {
+ RSyncMLConnection conn;
+ CleanupClosePushL( conn );
+ conn.OpenL( iProfile, connIdArray[0] );
+ HBufC8* apIdBuffer = HBufC8::NewLC( 4 );
+ TPtr8 ptrIapIdBuf = apIdBuffer->Des();
+ ptrIapIdBuf.Num( aIAPid );
+ conn.SetPropertyL( KNSmlIAPId, ptrIapIdBuf );
+ conn.UpdateL();
+ CleanupStack::PopAndDestroy( 2 ); //conn, apIdBuffer
+ retVal = KErrNone;
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+ CleanupStack::PopAndDestroy( 1 ); //transport
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+ iCurrentProfile = 0;
+ iProfile.Close();
+ CleanupStack::PopAndDestroy(); //connIdArray
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::DeleteProfileL
+// The function deleted the profile from DM database.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::DeleteProfileL( const TInt aPID )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteProfileL(): begin" );
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+
+ RArray<TSmlProfileId> profileIdArray;
+ CleanupClosePushL( profileIdArray );
+ TSmlUsageType usageType = ESmlDevMan;
+ iSyncSession.ListProfilesL( profileIdArray, usageType );
+ TInt index = profileIdArray.Find( aPID );
+ if ( index == KErrNotFound )
+ {
+ //No match
+ CleanupStack::PopAndDestroy();//profileIdArray
+ return KErrNotFound;
+ }
+ iSyncSession.DeleteProfileL( aPID );
+ iSyncSession.Close();
+ iSyncSessionOpen = EFalse;
+ CleanupStack::PopAndDestroy();//profileIdArray
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteProfileL(): end" );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetObjectL
+// The function checks which leaf data to be fetched.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetObjectL( TInt aLUID, TNSmlDMProfileData aDMField,
+ CBufBase& aObject )
+ {
+ TInt retVal = KErrNone;
+ if( iField->Compare(KNSmlDdfAppId ) ==0 )
+ {
+ aObject.InsertL(aObject.Size(),KNSmlDdfAppIdValue);
+ return retVal;
+
+ }
+
+ retVal = OpenSyncSessionAndProfileL( aLUID, ESmlOpenRead );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+ switch ( aDMField )
+ {
+ case ( EProfileName ) :
+ {
+ GetProfileNameL( aObject );
+ }
+ break;
+
+ case ( EProfileDMServerUsername ) :
+ {
+ GetProfileUserNameL( aObject );
+ }
+ break;
+
+ case ( EProfileURL ) :
+ {
+ GetProfileServerURLL( aObject );
+ TInt port(0);
+ if(ParseUri(aObject.Ptr(0),port)==KErrNone)
+ {
+ HBufC8* addr = aObject.Ptr(0).AllocLC();
+ aObject.Reset();
+ TInt portStart = addr->LocateReverse(KNSmlDMColon);
+ aObject.InsertL(aObject.Size(),addr->Left(portStart));
+
+ TInt portLen=addr->Mid(portStart).Locate(KNSmlDMUriSeparator);
+ if(portLen!=KErrNotFound)
+ {
+ aObject.InsertL(aObject.Size(),addr->Mid(portStart+portLen));
+ }
+
+ CleanupStack::PopAndDestroy(); //addr
+ }
+ }
+ break;
+
+ case ( EServerId ) :
+ {
+ GetServerIdL( aObject );
+ }
+ break;
+
+ case ( EProfileIAPId ) :
+ {
+ retVal = GetConRefL( aObject );
+ }
+ break;
+
+ case ( EProfilePort ) :
+ {
+ GetProfileServerURLL( aObject );
+ if ( aObject.Size() == 0 )
+ {
+ retVal = KErrNone;
+ break;
+ }
+ GetProfilePortNumberL ( aObject );
+ }
+ break;
+
+ case ( EProfileDMServerPassword ) :
+ {
+ retVal = EInvalidObject;
+ }
+ break;
+
+ case ( ESharedSecret ) :
+ {//ServerPW
+ retVal = EInvalidObject;
+ }
+ break;
+ case ( EProfileId ) :
+ break;
+ case ( EProfileAddrType ) :
+ {
+ aObject.InsertL(aObject.Size(),KNSmlAddrtype);
+ }
+ break;
+ case (EProfileHttpUsername ):
+ {
+ retVal = GetHttpUsernameL(aObject);
+ }
+ break;
+ case (EPRofileServerCred) :
+ {
+ aObject.InsertL(aObject.Size(),KDmAccAppAuthLevelSrv);
+
+ }
+ break;
+ case (EPRofileClientCred) :
+ {
+ aObject.InsertL(aObject.Size(),KDmAccAppAuthLevelCli);
+ }
+ break;
+
+ case (ETransportAuthName) :
+ {
+ TInt mediumType= ENone;
+ GetProfileConnectiontypeL( mediumType );
+ if( mediumType == EHttp)
+ {
+ retVal = GetHttpUsernameL(aObject);
+ }
+ else if(mediumType == EObex)
+ {
+ aObject.InsertL(aObject.Size(),KNSmlDMNullDesc8);
+ }
+
+ }
+ break;
+
+
+ case (EProfileTransport) :
+ {
+ TInt mediumType= ENone;
+ GetProfileConnectiontypeL( mediumType );
+ if( mediumType == EHttp)
+ {
+ aObject.InsertL(aObject.Size(),KDmAccAppAuthLevelHttp);
+ }
+ else if(mediumType == EObex)
+ {
+ aObject.InsertL(aObject.Size(),KDmAccAppAuthLevelObx);
+ }
+
+ }
+
+ break;
+ case ( EAuthenticationRequired ) :
+ case ( EProfileAAuthType ):
+ case ( EServerNonce ) :
+ case ( EClientNonce ) :
+ {
+ retVal = GetDMAuthInfoL( aLUID, aDMField, aObject );
+ }
+ break;
+
+ case EProfileLock :
+ {
+
+ TBool isProfileLocked = iProfile.ProfileLocked(EFalse, EFalse);
+ if(isProfileLocked)
+ {
+ aObject.InsertL(aObject.Size(),KDmProfileLocked);
+ }
+ else
+ {
+ aObject.InsertL(aObject.Size(),KDmProfileUnLocked);
+ }
+
+ }
+ break;
+ default:
+ {
+ User::Panic( KNSmlIndexOutOfBoundStr, KNSmlPanicIndexOutOfBound );
+ }
+ }
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileConnectionPortNrL()
+// The function sets the profile port number.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileConnectionPortNrL( const TInt aLUID,
+ const TDesC8& aPort )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileConnectionPortNrL(): begin" );
+ TInt retVal = KErrNone;
+
+ if( iPortNbr )
+ {
+ delete iPortNbr;
+ iPortNbr = NULL;
+ }
+ iPortNbr = HBufC8::NewL( aPort.Length() );
+ TPtr8 newPortNbr = iPortNbr->Des();
+ newPortNbr.Append( aPort );
+
+ retVal = OpenSyncSessionAndProfileL( aLUID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileConnectionPortNrL(): end" );
+ return retVal;
+ }
+
+ RArray<TSmlTransportId> transportIdArray;
+ CleanupClosePushL( transportIdArray );
+ iProfile.ListConnectionsL( transportIdArray );
+
+ RSyncMLConnection conn;
+ CleanupClosePushL( conn );
+ conn.OpenL( iProfile, transportIdArray[0] );
+
+ HBufC8* serverURI = conn.ServerURI().AllocLC();
+ if( serverURI->Length() == 0 )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ CleanupStack::PopAndDestroy( 3 ); //transportIdArray, conn, serverURI
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileConnectionPortNrL(): end" );
+ return retVal;
+ }
+ TInt totalSize = serverURI->Size() + newPortNbr.Size() + 1;
+ HBufC8* newServerURI = HBufC8::NewL( totalSize );
+ CleanupStack::PushL( newServerURI );
+ SetPortNrToAddrStr( *serverURI, newServerURI, newPortNbr );
+
+ conn.SetServerURIL( *newServerURI );
+ conn.UpdateL();
+
+ CleanupStack::PopAndDestroy( 4 ); //transportIdArray, conn, serverURI, newServerURI
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileConnectionPortNrL(): end" );
+ return retVal;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetPortNrToAddrStr
+// Sets a portnbr (separated with ':') to profile server URI.
+// ------------------------------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::SetPortNrToAddrStr( const TDesC8& aSrvURI, HBufC8* aNewURI,
+ const TDesC8& aPort )
+ {
+ TInt offset=0;
+ if( aSrvURI.Find( KNSmlDMSettingsHTTP ) == 0 )//http://
+ {
+ offset = KNSmlDMSettingsHTTP().Length();
+ }
+ else if( aSrvURI.Find( KNSmlDMSettingsHTTPS ) == 0 )//https://
+ {
+ offset = KNSmlDMSettingsHTTPS().Length();
+ }
+ TInt portStart = -1;
+ TInt separatorPos = aSrvURI.Length();
+ TInt i = 0;
+ for( i = offset; i < aSrvURI.Length(); i++ )
+ {
+ if( aSrvURI[i] == KNSmlDMColon )// ':'
+ {
+ portStart = i;
+ }
+ if( aSrvURI[i] == KNSmlDMUriSeparator )// '/'
+ {
+ separatorPos = i;
+ break;
+ }
+ }
+
+ TPtr8 ptrNewSrvURI = aNewURI->Des();
+ if( portStart < 0 && separatorPos > 0 && iLeafType != EDMDelete )
+ {
+ ptrNewSrvURI.Append( aSrvURI.Left( separatorPos ) );//http://123.234.345.456
+ ptrNewSrvURI.Append( KNSmlDMColon );
+ ptrNewSrvURI.Append( aPort );
+ ptrNewSrvURI.Append( aSrvURI.Right( aSrvURI.Length() - separatorPos ) );
+ }
+ else if ( portStart > 0 && separatorPos > 0 && iLeafType != EDMDelete )
+ {
+ ptrNewSrvURI.Append( aSrvURI.Left( portStart + 1 ) );//123.234.345.456:
+ ptrNewSrvURI.Append( aPort );//123.234.345.456:xx(x)
+ ptrNewSrvURI.Append( aSrvURI.Right( aSrvURI.Length() - separatorPos ) );
+ }
+ else if ( portStart > 0 && iLeafType == EDMDelete ) //delete port number from uri
+ {
+ ptrNewSrvURI.Append( aSrvURI.Left( portStart ) );//123.234.345.456
+ ptrNewSrvURI.Append( aSrvURI.Right( aSrvURI.Length() - separatorPos ) );
+ }
+ else
+ {
+ ptrNewSrvURI.Append( aSrvURI );
+ }
+ return;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetDMFieldDataL
+// Selects and Sets value to a field based on field id got from URI.
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetDMFieldDataL( const TInt aLUID, const TDesC8& aObject,
+ const TNSmlDMProfileData aField )
+ {
+ TInt rValue = KErrGeneral;
+ TInt lockvalue =0;
+ if(aField != EProfileLock)
+ {
+ rValue=IsProfileLockedL(aLUID);
+ if (rValue!= KErrNone)
+ {
+ return rValue;
+ }
+
+ }
+ else if (aField == EProfileLock)
+ {
+ if (! iNewProfile)
+ {
+ lockvalue =0;
+ if(aObject.Length()> 1)
+ {
+ rValue = KErrArgument;
+ return rValue;
+ }
+ lockvalue = GetIntObject(aObject);
+ if(lockvalue != 0 && lockvalue != 1)
+ {
+ //lockvalue = 0;
+ rValue = KErrArgument;
+ return rValue;
+ }
+ rValue = SetProfileLockL(aLUID , lockvalue);
+ return rValue;
+ }
+
+ }
+
+ switch ( aField )
+ {
+ case ( EProfileURL ) :
+ {
+ rValue = SetProfileServerURIL( aLUID, aObject );
+ }
+ break;
+ case ( EServerId ) :
+ {
+ rValue = SetProfileServerIdL( aLUID, aObject );
+ }
+ break;
+ case ( ESharedSecret ) :
+ {
+ rValue = SetProfileServerPasswordL( aLUID, aObject );
+ }
+ break;
+ case ( EProfileDMServerUsername ) :
+ {
+ rValue = SetProfileUserNameL( aLUID, aObject );
+ }
+ break;
+ case ( EProfileDMServerPassword ) :
+ {
+ rValue = SetProfilePasswordL( aLUID, aObject );
+ }
+ break;
+ case ( EProfileName ) :
+ {
+ rValue = SetProfileDisplayNameL( aLUID, aObject );
+ }
+ break;
+ case ( EProfileIAPId ) :
+ {
+ rValue = SetConRefL( aLUID, aObject );
+ }
+ break;
+ case ( ETransportAuthName ):
+ {
+ OpenSyncSessionAndProfileL( aLUID, ESmlOpenReadWrite );
+ TInt mediumType = ENone;
+ GetProfileConnectiontypeL( mediumType );
+ if( mediumType == EHttp)
+ {
+ rValue = SetProfileHttpUserNameL ( aLUID, aObject );
+ }
+ else if(mediumType == EObex)
+ {
+ rValue = KErrNone;
+
+ }
+
+
+ //break;
+ }
+ break;
+ case ( EProfileTransportPassword ):
+ {
+ TInt mediumType = ENone;
+ OpenSyncSessionAndProfileL( aLUID, ESmlOpenReadWrite );
+ GetProfileConnectiontypeL( mediumType );
+ if( mediumType == EHttp)
+ {
+ rValue = SetProfileHttpPasswordL ( aLUID, aObject );
+ }
+ else if(mediumType == EObex)
+ {
+ rValue = KErrNone;
+
+ }
+ }
+ break;
+ case (EProfileTransportAuthData) :
+ {
+ rValue = KErrNone;
+ }
+ break;
+
+ case ( EProfileHttpUsername ) :
+ {
+ rValue = SetProfileHttpUserNameL ( aLUID, aObject );
+ }
+ break;
+ case ( EProfileHttpPassword ) :
+ {
+ rValue = SetProfileHttpPasswordL ( aLUID, aObject );
+ }
+ break;
+ case ( EProfileId ) :
+ {
+ }
+ break;
+ case ( EProfilePort ) :
+ {
+ if(aObject.Size()<=5)
+ {
+ TInt port = GetIntObject(aObject);
+ if( port > KPortMinSize && port < KPortMaxSize )
+ {
+ TPortBuffer element;
+ element.iPortBuf=aObject;
+ element.iPortBufLUID = aLUID;
+ iPortBuffer.Append(element);
+ rValue=KErrNone;
+ }
+ else
+ {
+ if (port <= KPortMinSize )
+ rValue = KErrUnderflow;
+ else
+ rValue=KErrOverflow;
+ }
+ }
+ else
+ {
+ rValue=KErrOverflow;
+ }
+ // save information of the port
+ }
+ break;
+
+ case ( EProfileAddrType ) :
+ {
+ if (aObject.Match(KNSmlAddrtype)!=KErrNotFound)
+ rValue=KErrNone;
+
+ }
+ break;
+
+
+ case ( EProfileMediumType ) :
+ {
+ if ( iLeafType == EDMDelete )
+ {
+ return KErrNone;
+ }
+ iObject = GetIntObject( aObject );
+ if(iObject<0)
+ {
+ iObject = EHttp;
+ }
+ rValue = SetProfileAddrTypeL( aLUID, iObject );
+ }
+ break;
+ case ( EProfileTransport) :
+ {
+ if (aObject.Match(KDmAccAppAuthLevelHttp)!=KErrNotFound)
+ {
+ iObject = EHttp;
+ }
+ else if (aObject.Match(KDmAccAppAuthLevelObx)!=KErrNotFound)
+ {
+ iObject = EObex;
+ }
+ rValue = SetProfileAddrTypeL( aLUID, iObject );
+ }
+ break;
+ case ( EAuthenticationRequired ) :
+ case ( EClientNonce ) :
+ case ( EServerNonce ) :
+ break;
+ case ( EProfileLock ) :
+ lockvalue =0;
+ lockvalue = GetIntObject(aObject);
+ if(lockvalue != 0 && lockvalue != 1)
+ lockvalue = 0;
+
+ TLockBuffer element;
+ element.iProfileLock=lockvalue;
+ element.iProfileLockLUID = aLUID;
+ iProfileLockBuffer.Append(element);
+ rValue=KErrNone;
+
+
+ // rValue = SetProfileLock(aLUID , lockvalue);
+ break;
+ default:
+ rValue = KErrNotSupported;
+ }
+ return rValue;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::FillNodeInfoL
+// The function fills the node or leaf information.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::FillNodeInfoL( MSmlDmDDFObject& aNode,
+ TSmlDmAccessTypes aAccTypes,
+ MSmlDmDDFObject::TOccurence aOccurrence,
+ MSmlDmDDFObject::TScope aScope,
+ MSmlDmDDFObject::TDFFormat aFormat,
+ const TDesC8& aDescription,
+ const TDesC8& aDefaultValue,
+ const TDesC8& aMimeType )
+ {
+ aNode.AddDFTypeMimeTypeL( aMimeType );
+ aNode.SetAccessTypesL( aAccTypes );
+ aNode.SetDescriptionL( aDescription );
+ aNode.SetOccurenceL( aOccurrence );
+ aNode.SetDefaultValueL( aDefaultValue );
+ aNode.SetScopeL( aScope );
+ aNode.SetDFFormatL( aFormat );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetDMAuthInfoL
+// This function gets authentication data from private API.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetDMAuthInfoL( const TInt aLUID,
+ const TNSmlDMProfileData aField,
+ CBufBase& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetDMAuthInfoL(): begin" );
+
+ CNSmlDMAuthInfo* authInfo = new (ELeave) CNSmlDMAuthInfo;
+ CleanupStack::PushL( authInfo );
+
+ authInfo->iProfileId = aLUID + KMaxDataSyncID;
+ iPrivateApi.OpenL();
+ TInt ret = KErrNone;
+
+ TRAPD(err,iPrivateApi.GetDMAuthInfoL( *authInfo ));
+
+ if(err==KErrNone)
+ {
+ if ( aField == EServerNonce )
+ {
+ aObject.InsertL( aObject.Size(), *authInfo->iServerNonce );
+ }
+ else if ( aField == EClientNonce )
+ {
+ aObject.InsertL( aObject.Size(), *authInfo->iClientNonce );
+ }
+ else if (( aField == EAuthenticationRequired ) || (aField == EProfileAAuthType))
+ {
+ TUint authPref = authInfo->iAuthPref;
+ /*if( authPref == ENoAuth )
+ {
+ aObject.InsertL( aObject.Size(), KNSmlDMAuthPrefNoAuth );
+ }*/
+ if( authPref == EBasic )
+ {
+ if(aField == EAuthenticationRequired)
+ {
+ aObject.InsertL( aObject.Size(), KNSmlDMAuthPrefBasic );
+ }
+ else
+ {
+ aObject.InsertL( aObject.Size(), KNSmlDMAuthTypeBasic );
+ }
+
+ }
+ else if( authPref == EMD5 )
+ {
+ if(aField == EAuthenticationRequired)
+ {
+ aObject.InsertL( aObject.Size(), KNSmlDMAuthPrefMD5 );
+ }
+ else
+ {
+ aObject.InsertL( aObject.Size(), KNSmlDMAuthTypeMD5 );
+ }
+
+ }
+ else
+ {
+ aObject.InsertL( aObject.Size(), KNullDesC8 );
+ }
+ }
+ }
+ iPrivateApi.Close();
+ CleanupStack::PopAndDestroy(authInfo);
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetDMAuthInfoL(): end" );
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::DeleteDMAuthInfoL
+// This function resets the authentication data.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::DeleteDMAuthInfoL( const TInt aLUID,
+ const TNSmlDMProfileData aField )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteDMAuthInfoL(): begin" );
+ CNSmlDMAuthInfo* authInfo = new (ELeave) CNSmlDMAuthInfo;;
+ CleanupStack::PushL( authInfo );
+ authInfo->iProfileId = aLUID;
+ iPrivateApi.OpenL();
+ iPrivateApi.GetDMAuthInfoL( *authInfo );
+ if( aField == EServerNonce )
+ {
+ authInfo->iServerNonce->Des().Delete( 0, authInfo->iServerNonce->Des().Size() );
+ authInfo->iServerNonce->Des().Insert( 0, KNullDesC8 );
+ }
+ else if( aField == EClientNonce )
+ {
+ authInfo->iClientNonce->Des().Delete( 0, authInfo->iClientNonce->Des().Size() );
+ authInfo->iClientNonce->Des().Insert( 0, KNullDesC8 );
+ }
+ else if( aField == EAuthenticationRequired )
+ {
+ authInfo->iAuthPref = 0;
+ }
+ iPrivateApi.SetDMAuthInfoL( *authInfo );
+ iPrivateApi.Close();
+ CleanupStack::PopAndDestroy(authInfo);
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::DeleteDMAuthInfoL(): end" );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetProfileAddrTypeL
+// This function sets the AddrType value.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::SetProfileAddrTypeL( const TInt aLUID,
+ const TInt aIntObj )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileAddrTypeL(): begin" );
+ TInt retVal = OpenSyncSessionAndProfileL( aLUID, ESmlOpenReadWrite );
+ if( retVal != KErrNone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileAddrTypeL(): end" );
+ return retVal;
+ }
+ TInt mediumType = ENone;
+ GetMediumTypeL( aIntObj, mediumType );
+ if( mediumType == ENone )
+ {
+ iCurrentProfile = 0;
+ iProfile.Close();
+ return KErrGeneral;
+ }
+ RArray<TSmlTransportId> transportIdArray;
+ CleanupClosePushL( transportIdArray );
+ iProfile.ListConnectionsL( transportIdArray );
+ RSyncMLConnection conn;
+ CleanupClosePushL( conn );
+ conn.OpenL( iProfile, transportIdArray[0] );
+ HBufC8* sURI = conn.ServerURI().AllocLC();
+ if(mediumType!=transportIdArray[0])
+ {
+ if ( !FeatureManager::FeatureSupported( KFeatureIdSyncMlDmObex ) )
+ {
+ CleanupStack::PopAndDestroy( 3 );//transportIdArray, conn, sURI
+ return EInvalidObject;
+ }
+ else
+ {
+ conn.CreateL(iProfile,mediumType);
+ }
+ }
+ conn.SetServerURIL( *sURI );
+ conn.UpdateL();
+ CleanupStack::PopAndDestroy( 3 );//transportIdArray, conn, sURI
+ iCurrentProfile = 0;
+ iProfile.Close();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetProfileAddrTypeL(): end" );
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetHttpUsernameL
+// This function gets the httpuser value.
+// -----------------------------------------------------------------------------
+
+
+TInt CNSmlDMSettingsAdapter12::GetHttpUsernameL( CBufBase& aObject )
+ {
+
+ TInt retVal = KErrNone;
+ TBuf8<KBufSize32> key;
+ TInt intValue;
+
+ RArray<TSmlTransportId> connIdArray;
+ CleanupClosePushL( connIdArray );
+ iProfile.ListConnectionsL( connIdArray );
+ if( connIdArray.Count() == 1 )
+ {
+ RSyncMLTransport transport;
+ CleanupClosePushL( transport );
+ transport.OpenL( iSyncSession, connIdArray[0] );
+ const CSyncMLTransportPropertiesArray& arr = transport.Properties();
+ const TSyncMLTransportPropertyInfo& info = arr.At( EPropertyHttpUsed );
+ key = info.iName;
+ RSyncMLConnection conn;
+ CleanupClosePushL( conn );
+ conn.OpenL( iProfile, connIdArray[0] );
+ HBufC8* value = conn.GetPropertyL( key ).AllocLC();
+ intValue = GetIntObject( *value );
+ CleanupStack::PopAndDestroy( ); //value
+ if ( intValue == 1 )
+ {
+ retVal = KErrNone;
+ const TSyncMLTransportPropertyInfo& info2 = arr.At( EPropertyHttpUserName );
+ key= info2.iName;
+ HBufC8* value = conn.GetPropertyL( key ).AllocLC();
+ aObject.InsertL(aObject.Size(),value->Des());
+ CleanupStack::PopAndDestroy( ); //value
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+ CleanupStack::PopAndDestroy( 2 ); // conn, transport
+ }
+ CleanupStack::PopAndDestroy( ); //connIdArray
+
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetProfileConnectiontypeL
+// The function gets the profile medium type.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetProfileConnectiontypeL( TInt& aMediumTYpe )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileConnectiontypeL(): begin" );
+ RArray<TSmlTransportId> transportIdArray;
+ CleanupClosePushL( transportIdArray );
+ iProfile.ListConnectionsL( transportIdArray );
+ TInt transportItems = transportIdArray.Count();
+ if( transportItems == 0 )
+ {
+ //No matching items
+ CleanupStack::PopAndDestroy(); //transportIdArray
+ return KErrGeneral;
+ }
+ else if( transportItems > 1 )
+ {
+ //Error case : against specification
+ CleanupStack::PopAndDestroy(); //transportIdArray
+ return KErrGeneral;
+ }
+ aMediumTYpe = 0;
+ if ( transportIdArray[0] == KUidNSmlMediumTypeInternet.iUid )
+ {
+ aMediumTYpe = 1; //EHttp;
+ }
+ else if ( transportIdArray[0] == KUidNSmlMediumTypeBluetooth.iUid ||
+ transportIdArray[0] == KUidNSmlMediumTypeUSB.iUid ||
+ transportIdArray[0] == KUidNSmlMediumTypeIrDA.iUid )
+ {
+ aMediumTYpe = 3; //EObex;
+ }
+ CleanupStack::PopAndDestroy( 1 ); //transportIdArray, SetIntObjectLC
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetProfileIAPIdL
+// The function gets the profile IAP Id.
+// -----------------------------------------------------------------------------
+TInt CNSmlDMSettingsAdapter12::GetProfileIAPIdL( TInt& aIAPid )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileIAPIdL(): begin" );
+ TInt retVal = KErrGeneral;
+ aIAPid = -1;
+ RArray<TSmlTransportId> connIdArray;
+ CleanupClosePushL( connIdArray );
+ iProfile.ListConnectionsL( connIdArray );
+ if( connIdArray.Count() == 1 )
+ {
+ RSyncMLTransport transport;
+ CleanupClosePushL( transport );
+ transport.OpenL( iSyncSession, connIdArray[0] );
+ const CSyncMLTransportPropertiesArray& props = transport.Properties();
+ TInt index = props.Find( KNSmlIAPId );
+ if( index > 0 )
+ {
+ RSyncMLConnection conn;
+ CleanupClosePushL( conn );
+ conn.OpenL( iProfile, connIdArray[0] );
+ HBufC8* apId = conn.GetPropertyL( KNSmlIAPId ).AllocLC();
+ aIAPid = GetIntObject( *apId );
+ CleanupStack::PopAndDestroy( 2 ); //conn, apId
+ retVal = KErrNone;
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+ CleanupStack::PopAndDestroy( 1 ); //transport
+ iCurrentProfile = 0;
+ iProfile.Close();
+ }
+ else
+ {
+ retVal = KErrNotFound;
+ }
+ CleanupStack::PopAndDestroy(); //connIdArray
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileIAPIdL(): end" );
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetProfileServerURLL
+// The function gets the profile Server URI.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::GetProfileServerURLL( CBufBase& aURL )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileServerURLL(): begin" );
+ RArray<TSmlTransportId> transportIdArray;
+ CleanupClosePushL( transportIdArray );
+ iProfile.ListConnectionsL( transportIdArray );
+ if( transportIdArray.Count() > 0 )
+ {
+ RSyncMLConnection profConn;
+ CleanupClosePushL( profConn );
+ profConn.OpenL( iProfile, transportIdArray[0] );
+ HBufC8* sURI = profConn.ServerURI().AllocL();
+ CleanupStack::PushL( sURI );
+ TPtr8 uriPtr = sURI->Des();
+ if( uriPtr.Length() > 0 )
+ {
+ aURL.InsertL( aURL.Size(),uriPtr );
+ }
+ else
+ {
+ aURL.InsertL( aURL.Size(), KNullDesC8 );
+ }
+ CleanupStack::PopAndDestroy( 2 );//profConn, sURI
+ }
+ CleanupStack::PopAndDestroy(); //transportIdArray
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileServerURLL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetMediumTypeL
+// Checks the requested medium type.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::GetMediumTypeL( const TInt aIntObj,
+ TInt& aMediumType )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetMediumTypeL(): begin" );
+ if( aIntObj == EHttp || aIntObj == EWsp )
+ {
+ aMediumType = KUidNSmlMediumTypeInternet.iUid;
+ return;
+ }
+ RArray<TSmlTransportId> transportIdArray;
+ CleanupClosePushL( transportIdArray );
+ iSyncSession.ListTransportsL( transportIdArray );
+
+ if ( transportIdArray.Find( KUidNSmlMediumTypeBluetooth.iUid ) != KErrNotFound )
+ {
+ aMediumType = KUidNSmlMediumTypeBluetooth.iUid;
+ }
+ else if ( transportIdArray.Find( KUidNSmlMediumTypeUSB.iUid ) != KErrNotFound )
+ {
+ aMediumType = KUidNSmlMediumTypeUSB.iUid;
+ }
+ else if ( transportIdArray.Find( KUidNSmlMediumTypeIrDA.iUid ) != KErrNotFound )
+ {
+ aMediumType = KUidNSmlMediumTypeIrDA.iUid;
+ }
+ CleanupStack::PopAndDestroy(); //transportIdArray
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetMediumTypeL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetServerIdL
+// Gets the server id value.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::GetServerIdL( CBufBase& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetServerIdL(): begin" );
+ HBufC8* serverId = iProfile.ServerId().AllocL();
+ CleanupStack::PushL( serverId );
+ aObject.InsertL( aObject.Size(), *serverId );
+ CleanupStack::PopAndDestroy( 1 ); //serverId
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetServerIdL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetProfileNameL
+// Gets the display name value.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::GetProfileNameL( CBufBase& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileNameL(): begin" );
+ HBufC16* dataBuf = iProfile.DisplayName().AllocL();
+ CleanupStack::PushL( dataBuf );
+ TPtr16 ptrDisplayName = dataBuf->Des();
+ HBufC8* dataBuf8 = HBufC8::NewL( ptrDisplayName.Length() * 2 );
+ CleanupStack::PushL( dataBuf8 );
+
+ TPtr8 ptrDisplayName8 = dataBuf8->Des();
+ ptrDisplayName8 = ConvertTo8LC( ptrDisplayName );
+ aObject.InsertL( aObject.Size(), ptrDisplayName8 );
+ CleanupStack::PopAndDestroy( 3 );//dataBuf, ConvertTo8LC
+ _DBG_FILE("CNSmlDMSettingsAdapter12::GetProfileNameL(): end");
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetProfileUserNameL
+// Gets the profile user name value.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::GetProfileUserNameL( CBufBase& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileUserNameL(): begin" );
+ HBufC8* dataBuf = iProfile.UserName().AllocL();
+ CleanupStack::PushL( dataBuf );
+ TPtr8 ptrUserName = dataBuf->Des();
+ aObject.InsertL( aObject.Size(), ptrUserName );
+ CleanupStack::PopAndDestroy();//dataBuf
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfileUserNameL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::GetProfilePortNumberL
+// Gets the port number value.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::GetProfilePortNumberL( CBufBase& aObject )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfilePortNumberL(): begin" );
+ TInt bSize = aObject.Size();
+ TInt portNum = 0;
+ HBufC8* bufStorage = HBufC8::NewLC( bSize );
+ TPtr8 bufStoragePtr = bufStorage->Des();
+ aObject.Read( 0, bufStoragePtr, aObject.Size() );
+ aObject.Reset();
+
+ //find out the port number
+ ParseUri( *bufStorage, portNum );
+ aObject.InsertL( aObject.Size(), SetIntObjectLC( portNum ) );
+
+ CleanupStack::PopAndDestroy( 2 ); //bufStorage, SetIntObjectLC()
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::GetProfilePortNumberL(): end" );
+ return;
+ }
+
+// -----------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::SetAuthInfoL
+// The function checks if authinfo already exits. If exits command is replace.
+// -----------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::SetAuthInfoL( const TInt aLUID,
+ const TNSmlDMProfileData aField,
+ const TDesC8& aObject, TInt& aStatus )
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetAuthInfoL(): begin" );
+
+ CNSmlDMAuthInfo* authInfo = new (ELeave) CNSmlDMAuthInfo();
+ CleanupStack::PushL( authInfo );
+ authInfo->iProfileId = aLUID;
+
+ iPrivateApi.OpenL();
+ TRAPD( err, iPrivateApi.GetDMAuthInfoL( *authInfo ) );
+
+ if ( err )
+ {
+ CleanupStack::PopAndDestroy( authInfo );
+ iPrivateApi.Close();
+ aStatus = err;
+ return;
+ }
+
+ CNSmlDMAuthInfo* newAuthInfo = new (ELeave) CNSmlDMAuthInfo();
+ CleanupStack::PushL( newAuthInfo );
+ newAuthInfo->iProfileId = aLUID;
+
+ if ( aField == EServerNonce )
+ {
+ newAuthInfo->iServerNonce = aObject.Alloc();
+ newAuthInfo->iClientNonce = authInfo->iClientNonce->Des().Alloc();
+ newAuthInfo->iAuthPref = authInfo->iAuthPref;
+
+ iPrivateApi.SetDMAuthInfoL( *newAuthInfo );
+ }
+ else if ( aField == EClientNonce )
+ {
+ newAuthInfo->iServerNonce = authInfo->iServerNonce->Des().Alloc();
+ newAuthInfo->iClientNonce = aObject.Alloc();
+ newAuthInfo->iAuthPref = authInfo->iAuthPref;
+
+ iPrivateApi.SetDMAuthInfoL( *newAuthInfo );
+ }
+ else if ( aField == EAuthenticationRequired )
+ {
+ if ( aObject.Match( KNSmlDMAuthPrefNoAuth ) != KErrNotFound )
+ {
+ newAuthInfo->iAuthPref = ENoAuth;
+ }
+ else if ( aObject.Match( KNSmlDMAuthPrefBasic ) != KErrNotFound )
+ {
+ newAuthInfo->iAuthPref = EBasic;
+ }
+ else if ( aObject.Match( KNSmlDMAuthPrefMD5 ) != KErrNotFound )
+ {
+ newAuthInfo->iAuthPref = EMD5;
+ }
+ newAuthInfo->iServerNonce = authInfo->iServerNonce->Des().Alloc();
+ newAuthInfo->iClientNonce = authInfo->iClientNonce->Des().Alloc();
+
+ iPrivateApi.SetDMAuthInfoL( *newAuthInfo );
+ }
+
+ CleanupStack::PopAndDestroy( newAuthInfo );
+ CleanupStack::PopAndDestroy( authInfo );
+
+ iPrivateApi.Close();
+ aStatus = KErrNone;
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::SetAuthInfoL(): end" );
+ return;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::AddNodeBufferL()
+// Buffers Node Object
+//------------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::AddNodeBufferL( const TDesC8& aURI,
+ const TInt aStatusRef)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddNodeBufferL(): begin" );
+ TInt index = -1;
+
+ for (TInt i = 0; i<iBuffer->Count (); i++)
+ {
+ if ( iBuffer->At(i).iMappingName->Compare (aURI)== 0)
+ {
+ index = i;
+ //CallBack for duplicate
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddNodeBufferL(): EAlreadyExists end" );
+ iCallBack->SetStatusL ( aStatusRef, CSmlDmAdapter::EAlreadyExists);
+ break;
+ }
+ }
+
+ if ( index<0)
+ {
+ TNSmlDMBufferElement newNode;
+ newNode.iMappingName = aURI.AllocLC ();
+ newNode.iLeafBuf = new (ELeave) CArrayFixFlat <TNSmlDMLeafElement> (4);
+ newNode.iExecuted = EFalse;
+ newNode.iDMBuffStatusref = aStatusRef;
+ newNode.iAddr = EFalse;
+ newNode.iServerId = EFalse;
+ newNode.iUName = EFalse;
+ newNode.iServerName = EFalse;
+
+ iBuffer->AppendL (newNode);
+ //newNode.iMappingName
+ CleanupStack::Pop ();
+ }
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddNodeBufferL(): end" );
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::AddLeafBufferL()
+// Buffers Leaf Obj & checks for Mandatory fields
+//------------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::AddLeafBufferL( const TDesC8& aURI,
+ const TDesC8& aObject, const TInt aStatusRef)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafBufferL(): begin" );
+ TNSmlDMLeafElement newCommand;
+
+ newCommand.iUri = aURI.AllocLC ();
+ newCommand.iData = aObject.AllocLC ();
+ newCommand.iLuid = HBufC8::NewLC (8); //Allocate Mem. for iLUID
+ newCommand.iStatusRef = aStatusRef;
+ //Add Leaf to the index updated by UpdateLeafObj
+ iBuffer->At(iExecutionIndex).iLeafBuf->AppendL (newCommand);
+ // iUri, iData, ILuid
+ CleanupStack::Pop (3);
+ SetField ( aURI);
+ SetURIInProcessL ( aURI);
+ if ( iField->Compare (KNSmlDdfAddr)== 0)
+ {
+ iBuffer->At(iExecutionIndex).iAddr = ETrue;
+ }
+ else
+ if ( iField->Compare (KNSmlDdfServerId)== 0)
+ {
+ if(!IsServerIDExistL(aObject))
+ iBuffer->At(iExecutionIndex).iServerId = ETrue;
+ }
+ else
+ if ( iField->Compare (KNSmlDdfAAuthName)== 0)
+ {
+ //AAuthName under AppAuthCli
+ if ( iURIField->Find (KDmAccAppAuthDyn2)!= KErrNotFound)
+ iBuffer->At(iExecutionIndex).iUName = ETrue;
+ }
+ else
+ if ( iField->Compare (KNSmlDdfName)== 0)
+ {
+ iBuffer->At(iExecutionIndex).iServerName = ETrue;
+ }
+
+ // If Address,ServerId,ServerName,UserName then Add
+
+ if ( iBuffer->At(iExecutionIndex).iAddr && iBuffer->At(iExecutionIndex).iServerId &&iBuffer->At(iExecutionIndex).iUName && iBuffer->At(iExecutionIndex).iServerName)
+ {
+ ExecuteBufferL ();
+ iExecutionIndex = -1;
+ }
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::AddLeafBufferL(): end" );
+ return;
+ }
+
+//------------------------------------------------------------------------------
+// CNSmlDMSettingsAdapter12::ExecuteBufferL()
+// Adds the Node/Leaf obj to the db
+//------------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::ExecuteBufferL()
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ExecuteBufferL(): begin" );
+ TBuf8<8> newLUID;
+ TInt rValue;
+ //Buffer is being Executed
+ iBufOn = ETrue;
+
+ // Robustness check for Execution Index
+ if ( iExecutionIndex<0)
+ {
+ return;
+ }
+
+ //Execute BufferL is called from CompleteOutstandingCmdsL only when -
+ //mandatory fields are not set. Dont update Node/Leaf to the db, return a failure
+
+ if ( !iComplete)
+ rValue = CreateNewProfileL (iLUID);
+ else
+ rValue = CSmlDmAdapter::EError;
+
+ iBuffer->At(iExecutionIndex).iExecuted = ETrue;
+
+ if ( rValue != KErrNone)
+ {
+ if ( rValue == KErrNoMemory)
+ {
+ iCallBack->SetStatusL ( iBuffer->At(iExecutionIndex).iDMBuffStatusref, CSmlDmAdapter::ENoMemory);
+ }
+ else
+ if ( rValue == KErrNotSupported)
+ {
+ iCallBack->SetStatusL ( iBuffer->At(iExecutionIndex).iDMBuffStatusref,
+ CSmlDmAdapter::EInvalidObject);
+ }
+ else
+ if ( rValue == KErrInUse)
+ {
+ iCallBack->SetStatusL ( iBuffer->At(iExecutionIndex).iDMBuffStatusref,
+ CSmlDmAdapter::EObjectInUse);
+ }
+ else
+ if ( rValue == KErrDiskFull)
+ {
+ iCallBack->SetStatusL ( iBuffer->At(iExecutionIndex).iDMBuffStatusref,
+ CSmlDmAdapter::EDiskFull);
+ }
+ else
+ {
+ iCallBack->SetStatusL ( iBuffer->At(iExecutionIndex).iDMBuffStatusref,
+ CSmlDmAdapter::EError);
+ }
+ // dont return, UpdateLeafObjectL will update the callback status for leaf Nodes
+ }
+ else
+ {
+ if ( iLUID >= KMaxDataSyncID)
+ {
+ newLUID.Num ( iLUID - KMaxDataSyncID);
+ }
+ else
+ {
+ newLUID.Num ( iLUID);
+ }
+
+ iCallBack->SetMappingL ( *iBuffer->At(iExecutionIndex).iMappingName, newLUID);
+
+ iCallBack->SetStatusL (iBuffer->At(iExecutionIndex).iDMBuffStatusref, CSmlDmAdapter::EOk);
+ }
+
+ for (TInt val= 0; val < iBuffer->At(iExecutionIndex).iLeafBuf->Count ();val++)
+ {
+ //Update the LUID data in the Leaf structure with the Profile LUID before calling UpdateLeafObj
+ TPtr8 tempLUID(iBuffer->At(iExecutionIndex).iLeafBuf->At(val).iLuid->Des ());
+ tempLUID.Append (newLUID);
+ UpdateLeafObjectL (*iBuffer->At(iExecutionIndex).iLeafBuf->At(val).iUri, *iBuffer->At(iExecutionIndex).iLeafBuf->At(val).iLuid, *iBuffer->At(iExecutionIndex).iLeafBuf->At(val).iData, *iBuffer->At(iExecutionIndex).iMappingName, iBuffer->At(iExecutionIndex).iLeafBuf->At(val).iStatusRef);
+
+ }
+
+ // Delete the dynamically allocated buffers (Node/Leaf obj)
+
+ ClearBuffer ( iBuffer->At(iExecutionIndex).iLeafBuf);
+
+ delete iBuffer->At(iExecutionIndex).iLeafBuf;
+
+ if ( iBuffer->At(iExecutionIndex).iMappingName)
+ {
+ delete iBuffer->At(iExecutionIndex).iMappingName;
+ iBuffer->At(iExecutionIndex).iMappingName = NULL;
+ }
+
+ iBuffer->Delete (iExecutionIndex);
+ iBuffer->Compress ();
+ //Buffer Execution Complete
+ iBufOn = EFalse;
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ExecuteBufferL(): end" );
+ }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CNSmlDMSettingsAdapter12::ParentURI(const TDesC8& aURI)
+// returns parent uri
+// Searches till the 2nd "/" is reached
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlDMSettingsAdapter12::ParentURI(const TDesC8& aURI)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ParentURI(): begin" );
+ TInt count;
+ TInt flag = 0;
+ for (count=0; count<=aURI.Length ()-1;count++)
+ {
+
+ if ( aURI[count]=='/')
+ {
+ flag++;
+ if ( flag == KDynNodePosn) // KDynNodePosn =2 --> DMAcc/DMIDxxx
+ break;
+ }
+ }
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ParentURI(): end" );
+ return aURI.Left (count);
+ }
+
+//-----------------------------------------------------------------------------------------
+// Clears the elements of the passed in LeafElement Structure
+//-----------------------------------------------------------------------------------------
+void CNSmlDMSettingsAdapter12::ClearBuffer(
+ CArrayFixFlat<TNSmlDMLeafElement>* aBuffer)
+ {
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ClearBuffer(): begin" );
+ for (TInt i = 0; i < aBuffer->Count (); i++)
+ {
+ delete aBuffer->At(i).iUri;
+ aBuffer->At(i).iUri = NULL;
+
+ delete aBuffer->At(i).iData;
+ aBuffer->At(i).iData = NULL;
+
+ delete aBuffer->At(i).iLuid;
+ aBuffer->At(i).iLuid = NULL;
+ }
+
+ aBuffer->Reset ();
+ _DBG_FILE( "CNSmlDMSettingsAdapter12::ClearBuffer(): end" );
+ }
+
+//--------------------------------------------------------------------
+//TInt CNSmlDMSettingsAdapter::IsDMAccUriFormatMatchPredefined(const TDesC8 & aURI)
+//
+//-------------------------------------------------------------------
+
+
+TBool CNSmlDMSettingsAdapter12::IsDMAccUriFormatMatchPredefined(const TDesC8 & aURI)
+{
+
+ // include strings for tree for Bearer , DNS related Dynamic nodes .
+
+ if(aURI.Match(_L8("DMAcc/DMId*")) != KErrNotFound )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+
+
+}
+
+//--------------------------------------------------------------------
+//TInt CNSmlDMSettingsAdapter::ConstructTreeL(const TDesC8& aURI)
+//
+//-------------------------------------------------------------------
+
+TInt CNSmlDMSettingsAdapter12::ConstructTreeL(const TDesC8& aURI)
+{
+ TInt profileID = KErrNotFound;
+ _LIT8( KNSmlDMIdZero, "DMAcc/DMId000" );
+ TBuf8<20> zeroURI; // DMAcc/DMIdnnn , nnn = profileid
+ zeroURI.Append( KNSmlDMIdZero );
+ HBufC8* ismapInfo = iCallBack->GetLuidAllocL(zeroURI);
+ if (ismapInfo->Length() != 0) // Tree is already constructrd, no need to proceed.
+ {
+ delete ismapInfo;
+ return profileID;
+ }
+ if( iSyncSessionOpen == EFalse )
+ {
+ iSyncSession.OpenL();
+ iSyncSessionOpen = ETrue;
+ }
+ RArray<TSmlProfileId> profileIdArray;
+ CleanupClosePushL( profileIdArray );
+ TSmlUsageType usageType = ESmlDevMan;
+ iSyncSession.ListProfilesL( profileIdArray, usageType );
+
+ for( TInt p = 0; p < profileIdArray.Count(); p++ )
+ {
+ TInt ddId = profileIdArray[p] - KMaxDataSyncID;
+
+ _LIT8( Kprev, "DMId" );
+ TBuf8<7> addNAME(Kprev); // DMIdnnn , nnn = profileid
+ TInt fixedProfId = profileIdArray[p] - KMaxDataSyncID; //fit to 3 decimal
+ addNAME.AppendNumFixedWidth( fixedProfId, EDecimal, 3 );
+ DBG_ARGS8( _S8("notInList: Id = %d Name %S"), p, &addNAME );
+ // KNSmlDMStart includes start text for URISeg
+ TBuf8<20> addURI; // DMAcc/DMIdnnn , nnn = profileid
+ addURI.Append( KNSmlDMStart );
+ addURI.AppendNumFixedWidth( fixedProfId, EDecimal, 3 );
+ TBuf8<3> addLUID;
+ addLUID.Num( fixedProfId );
+
+ HBufC8* mapInfo = iCallBack->GetLuidAllocL(addURI);
+
+ if (mapInfo->Length() == 0)
+ {
+ iCallBack->SetMappingL(addURI,addLUID);
+ if( aURI.Find(addURI) >= 0 )
+ {
+ profileID = fixedProfId;
+ }
+ }
+ else
+ {
+ delete mapInfo;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( 1 );//profileIdArray
+ return profileID;
+}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+#ifndef IMPLEMENTATION_PROXY_ENTRY
+#define IMPLEMENTATION_PROXY_ENTRY(aUid, aFuncPtr) {{aUid},(aFuncPtr)}
+#endif
+
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( KNSmlDMSettingsAdapterImplUid, CNSmlDMSettingsAdapter12::NewL )
+ };
+
+
+// -----------------------------------------------------------------------------
+// TImplementationProxy* ImplementationGroupProxy()
+// -----------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+ {
+ _DBG_FILE( "ImplementationGroupProxy() for CNSmlDMSettingsAdapter: begin" );
+
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+ _DBG_FILE( "ImplementationGroupProxy() for CNSmlDMSettingsAdapter: end" );
+ return ImplementationTable;
+ }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CNSmlDMSettingsAdapter12::GetDynamicDMNodeUri( const TDesC8& aURI )
+// returns DM/xxx URI
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlDMSettingsAdapter12::GetDynamicDMNodeUri(const TDesC8& aURI)
+ {
+ TInt i= 0;
+ TBuf8<50> DmAccRoot(KNSmlDefDMAcc);
+ for ( i = aURI.Find( KNSmlDefDMAcc ) + DmAccRoot.Length() + 1; i < aURI.Length(); i++ )
+ {
+ if( aURI[i] == '/' )
+ {
+ break;
+ }
+ }
+
+ return aURI.Left( i );
+ }
+// End of File
+