Revision: 200951
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 07 Jan 2010 12:39:15 +0200
changeset 1 4490afcb47b1
parent 0 3ce708148e4d
child 2 a5fecba4b1e4
Revision: 200951 Kit: 201001
omadm/omadmappui/inc/NSmlDMSyncPrivateCRKeys.h
omadm/omadmappui/src/NSmlDMProfilesContainer.cpp
omadm/omadmextensions/adapters/bld/bld.inf
omadm/omadmextensions/adapters/connmoadapter/group/bld.inf
omadm/omadmextensions/adapters/connmoadapter/group/connmoadapter.mmp
omadm/omadmextensions/adapters/connmoadapter/inc/AddBuffer.h
omadm/omadmextensions/adapters/connmoadapter/inc/BranchBase.h
omadm/omadmextensions/adapters/connmoadapter/inc/ConnMoAdapter.h
omadm/omadmextensions/adapters/connmoadapter/inc/NapBranch.h
omadm/omadmextensions/adapters/connmoadapter/inc/ProxyBranch.h
omadm/omadmextensions/adapters/connmoadapter/inc/Utils.h
omadm/omadmextensions/adapters/connmoadapter/rom/connmoadapter.iby
omadm/omadmextensions/adapters/connmoadapter/src/AddBuffer.cpp
omadm/omadmextensions/adapters/connmoadapter/src/BranchBase.cpp
omadm/omadmextensions/adapters/connmoadapter/src/ConnMoAdapter.cpp
omadm/omadmextensions/adapters/connmoadapter/src/ConnMoAdapter.rss
omadm/omadmextensions/adapters/connmoadapter/src/Luid.cpp
omadm/omadmextensions/adapters/connmoadapter/src/NapBranch.cpp
omadm/omadmextensions/adapters/connmoadapter/src/ProxyBranch.cpp
omadm/omadmextensions/adapters/connmoadapter/src/Utils.cpp
omadm/omadmextensions/adapters/connmoadapter/traces/OstTraceDefinitions.h
omadm/omadmextensions/adapters/connmoadapter/traces/fixed_id.definitions
omadm/omadmextensions/adapters/connmoadapter/traces/trace.properties
omadm/omadmextensions/adapters/globalwlansettings/group/bld.inf
omadm/omadmextensions/adapters/globalwlansettings/group/globalwlanadapter.mmp
omadm/omadmextensions/adapters/globalwlansettings/inc/globalwlanadapter.h
omadm/omadmextensions/adapters/globalwlansettings/rom/globalwlanadapter.iby
omadm/omadmextensions/adapters/globalwlansettings/src/globalwlanadapter.cpp
omadm/omadmextensions/adapters/globalwlansettings/src/globalwlanadapter.rss
omadm/omadmextensions/adapters/nsmldinternet/group/bld.inf
omadm/omadmextensions/adapters/nsmldinternet/group/nsmlinternetadapter.mmp
omadm/omadmextensions/adapters/nsmldinternet/inc/NSmlInternetAdapter.h
omadm/omadmextensions/adapters/nsmldinternet/inc/NSmlWLanAdapter.h
omadm/omadmextensions/adapters/nsmldinternet/inc/NSmlWlanSettings.h
omadm/omadmextensions/adapters/nsmldinternet/rom/nsmlinternetadapter.iby
omadm/omadmextensions/adapters/nsmldinternet/src/NSmlInternetAdapter.cpp
omadm/omadmextensions/adapters/nsmldinternet/src/NSmlInternetAdapter.rss
omadm/omadmextensions/adapters/nsmldinternet/src/NSmlWLanAdapter.cpp
omadm/omadmextensions/adapters/nsmldinternet/src/NSmlWlanSettings.cpp
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/group/bld.inf
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/group/nsmldmalwaysonadapter.mmp
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/logger.h
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonadapter.h
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonadapter.inl
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonsettingstore.h
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/rom/nsmldmalwaysonadapter.iby
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/src/nsmldmalwaysonadapter.cpp
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/src/nsmldmalwaysonadapter.rss
omadm/omadmextensions/adapters/nsmldmalwaysonadapter/src/nsmldmalwaysonsettingstore.cpp
omadm/omadmextensions/adapters/nsmldmbmadapter/group/bld.inf
omadm/omadmextensions/adapters/nsmldmbmadapter/group/nsmldmbmadapter.mmp
omadm/omadmextensions/adapters/nsmldmbmadapter/inc/bmadapterlogger.h
omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmadapter.h
omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmadapter.inl
omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmsettingstore.h
omadm/omadmextensions/adapters/nsmldmbmadapter/rom/nsmldmbmadapter.iby
omadm/omadmextensions/adapters/nsmldmbmadapter/src/nsmldmbmadapter.cpp
omadm/omadmextensions/adapters/nsmldmbmadapter/src/nsmldmbmadapter.rss
omadm/omadmextensions/adapters/nsmldmbmadapter/src/nsmldmbmsettingstore.cpp
omadm/omadmextensions/adapters/wlanctrldcmoadapter/data/wlanctrldcmoadapter.rss
omadm/omadmextensions/adapters/wlanctrldcmoadapter/group/bld.inf
omadm/omadmextensions/adapters/wlanctrldcmoadapter/group/wlanctrldcmoadapter.mmp
omadm/omadmextensions/adapters/wlanctrldcmoadapter/inc/wlanctrldcmoadapter.h
omadm/omadmextensions/adapters/wlanctrldcmoadapter/rom/wlanctrldcmoadapter.iby
omadm/omadmextensions/adapters/wlanctrldcmoadapter/src/wlanctrldcmoadapter.cpp
omadm/omadmextensions/adapters/wlanctrldcmoadapter/src/wlanctrldcmoadapterproxy.cpp
--- a/omadm/omadmappui/inc/NSmlDMSyncPrivateCRKeys.h	Thu Dec 17 08:40:12 2009 +0200
+++ b/omadm/omadmappui/inc/NSmlDMSyncPrivateCRKeys.h	Thu Jan 07 12:39:15 2010 +0200
@@ -26,7 +26,7 @@
 //browser uid 
 const TUid browseruid = {0x10008d39}; 
 //java uid 
-const TUid  javauid =   {0x1028289E};
+const TUid  javauid =   {0x2001FD68};
 //flash uid 
 const TUid  flashuid = {0x101FD693}; 
 
--- a/omadm/omadmappui/src/NSmlDMProfilesContainer.cpp	Thu Dec 17 08:40:12 2009 +0200
+++ b/omadm/omadmappui/src/NSmlDMProfilesContainer.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -345,7 +345,6 @@
                                                  TListBoxEvent aEventType )
 	{
 	FLOG( "[OMADM] CNSmlDMProfilesContainer::HandleListBoxEventL()" );	
-	iProfilesListBox->SetCurrentItemIndexAndDraw( aListBox->CurrentItemIndex() );	
 	iDocument->SetCurrentIndex( aListBox->CurrentItemIndex() ); 
 	if ( aEventType == MEikListBoxObserver::EEventItemSingleClicked )
 	    {
--- a/omadm/omadmextensions/adapters/bld/bld.inf	Thu Dec 17 08:40:12 2009 +0200
+++ b/omadm/omadmextensions/adapters/bld/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -27,6 +27,13 @@
 #include "../browseradapter/bld/bld.inf"
 #include "../streamingadapter/bld/bld.inf"
 
+#include "../globalwlansettings/group/bld.inf"
+#include "../nsmldinternet/group/bld.inf"
+#include "../nsmldmalwaysonadapter/group/bld.inf"
+#include "../nsmldmbmadapter/group/bld.inf"
+#include "../wlanctrldcmoadapter/group/bld.inf"
+#include "../connmoadapter/group/bld.inf"
+
 #ifdef __SYNCML_DM_DS
 #include "../syncmlds/bld/bld.inf"
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/group/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+*
+* ============================================================================
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+connmoadapter.mmp
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/group/connmoadapter.mmp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,44 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+* ==============================================================================
+*/
+
+#include  <platform_paths.hrh>
+
+CAPABILITY      CAP_ECOM_PLUGIN
+TARGET	      	connmoadapter.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x2001FE5E
+VENDORID        VID_DEFAULT
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+
+SOURCEPATH      ../src
+USERINCLUDE     ../inc
+USERINCLUDE     ../traces
+
+START RESOURCE ConnMoAdapter.rss
+END
+
+LANG	sc
+
+LIBRARY		charconv.lib ecom.lib euser.lib
+LIBRARY		sysutil.lib
+LIBRARY 	cmmanager.lib
+
+SOURCE ConnMoAdapter.cpp BranchBase.cpp NapBranch.cpp ProxyBranch.cpp AddBuffer.cpp Utils.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/inc/AddBuffer.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,145 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+*
+* ==============================================================================
+*/
+
+#ifndef ADDBUFFER_H_
+#define ADDBUFFER_H_
+
+TInt const KMaxFieldLength = 128;
+
+/**
+* CConnMoNodeElement is array element for ConnMo node objects.  
+*/
+class CConnMoNodeElement : public CBase
+    {
+public:
+    CConnMoNodeElement();
+    ~CConnMoNodeElement();
+    
+    /** Node address */
+    TBuf8<KMaxFieldLength>  iUri;
+    /** Unique identifier of the parent node */
+    TBuf8<KMaxFieldLength>  iParentLUID;
+    /** Leaf object's data */
+    TBuf8<KMaxFieldLength>  iObject;
+    /** Refenrence for giving commands return value to framework */
+    TInt  iStatusRef;
+    /** Information whether adapter has processed the node or not */
+    TBool iProcessed;
+    /** Specifies if the node leaf or not */
+    TBool iLeaf;
+private:
+    };
+
+/**
+* CAddBuffer is array for ConnMo nodes to be added in .
+* 
+* CConnMoAdapter uses this class to buffer node and leaf data 
+* addition DM commands. 
+*/
+class CAddBuffer : public CBase
+    {
+public:
+    
+    /**
+     * Creates new instance of CAddBuffer
+     */
+    static CAddBuffer* NewL();
+    
+    /**
+     * Adds node to buffer
+     * 
+     * @param aUri target node URI
+     * @param aParentLUID refrence to parent node
+     * @param aStatusRef Status reference
+     */
+    void AddNodeToBufferL( const TDesC8& aUri, 
+                           const TDesC8& aParentLUID, 
+                           const TInt    aStatusRef );
+    
+    /**
+     * Adds leaf node to buffer
+     * 
+     * @param aUri target node URI
+     * @param aParentLUID refrence to parent node
+     * @param aObject Leaf object data
+     * @param aStatusRef Status reference
+     */
+    void AddNodeToBufferL( const TDesC8& aUri, 
+                           const TDesC8& aLUID, 
+                           const TDesC8& aObject,
+                           const TInt    aStatusRef );
+    
+    /**
+     * Searches buffer for given dynamic node
+     * 
+     * @param aUri target node URI
+     */
+    CConnMoNodeElement* FindDynamicNode( const TDesC8& aUri );
+    
+    /**
+     * Gets all unprocessed nodes associated to given root node
+     * 
+     * Function searches buffer for all unprocessed nodes that 
+     * belong to given group and are under same dynamic node 
+     * 
+     * @param aRoot target group
+     * @param aGroup Array for result nodes
+     */
+    TInt GetGroup( const TDesC8& aRoot, RPointerArray<CConnMoNodeElement>* aGroup );
+    
+    /**
+     * Searches buffer for givennode
+     * 
+     * @param aUri target node URI
+     */
+    CConnMoNodeElement* CacheFind( const TDesC8& aUri );
+    
+    /**
+     * Searches buffer for given dynamic node
+     * 
+     * @param aUri target node URI
+     */
+    CConnMoNodeElement* CacheFindDynamicNode( const TDesC8& aUri );
+    
+    /**
+     * Empties buffer and frees all allocated memory
+     */
+    void Reset();
+
+    virtual ~CAddBuffer(); 
+    
+private:
+    
+    //-----------------------------------------------------------------------------
+    // Private functions
+    //-----------------------------------------------------------------------------
+    void ConstructL();
+    CAddBuffer();
+          
+    //-----------------------------------------------------------------------------
+    // Private member variables
+    //-----------------------------------------------------------------------------
+    /** Contains all nodes to be added */
+    RPointerArray<CConnMoNodeElement> iBuffer;
+    /** Contains group of nodes that user has previously asked */
+    RPointerArray<CConnMoNodeElement> iCache;
+        
+    };
+
+#endif /* ADDBUFFER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/inc/BranchBase.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+*
+* ==============================================================================
+*/
+
+#ifndef BRANCHBASE_H_
+#define BRANCHBASE_H_
+
+#include <cmmanagerext.h> 
+#include "smldmadapter.h"
+
+// ------------------------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------------------------
+#define KConnMoAdapterUid 0x2001FE5F
+
+/**
+ * Abstract base class for all ConnMO branches.
+ */
+class CBranchBase : public CBase
+    {
+public:
+
+    /**
+     * Builds DDF structure of DM settings it governs.
+     * 
+     * Implementations should build their structure using given node 
+     * as the root node.
+     * 
+     * @param aDDF Root node
+     */
+    virtual void DDFStructureL( MSmlDmDDFObject& aDDF ) = 0;
+    
+    /**
+     * Updates leaf node data.
+     * 
+     * @param aURI Root node
+     * @param aLUID refrence to branch LUID
+     * @param aObject Leaf object data
+     * @param aType Type of the node
+     * @param aStatusRef Status reference
+     */
+    virtual void UpdateLeafObjectL( const TDesC8& aURI, 
+                                    const TDesC8& aLUID,
+                                    const TDesC8& aObject, 
+                                    const TDesC8& aType,
+                                    TInt aStatusRef ) = 0;
+    /**
+     * Deletes object pointed by aURI.
+     * 
+     * @param aURI Root node
+     * @param aLUID refrence to branch LUID
+     * @param aStatusRef Status reference
+     */    
+    virtual void DeleteObjectL( const TDesC8& aURI, 
+                                const TDesC8& aLUID,
+                                TInt aStatusRef ) = 0;
+        
+    /**
+     * Gets node data for leaf nodes and child list for parent nodes.
+     * 
+     * @param aURI Root node
+     * @param aLUID refrence to branch LUID
+     * @param aObject Leaf object data
+     * @param aType Type of the node
+     * @param aResultsRef Result reference
+     * @param aStatusRef Status reference
+     */
+    virtual void FetchLeafObjectL( const TDesC8& aURI, 
+                                   const TDesC8& aLUID,
+                                   const TDesC8& aType, 
+                                   TInt aResultsRef,
+                                   TInt aStatusRef ) = 0;
+        
+    /**
+     * Gets the size of the data in leaf node.
+     */
+    virtual void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                                       const TDesC8& aLUID,
+                                       const TDesC8& aType, 
+                                       TInt aResultsRef,
+                                       TInt aStatusRef) = 0;
+
+    /**
+     * Gets all childs of the given node.
+     */
+    virtual void ChildURIListL( const TDesC8& aURI, 
+                                const TDesC8& aLUID,
+                                const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                TInt aResultsRef, 
+                                TInt aStatusRef ) = 0;
+        
+    /**
+     * Adds node to DM tree.
+     */
+    virtual void AddNodeObjectL( const TDesC8& aURI, 
+                                 const TDesC8& aParentLUID,
+                                 TInt aStatusRef )=0;
+
+        
+    virtual ~CBranchBase();
+
+protected:
+    
+    CBranchBase();
+    
+    CBranchBase( MSmlDmCallback* aDmCallback );
+            
+    /**
+     * This function gives all Connection Methods from Connection Method Manager.
+     * 
+     * @param aCmArray Result Array.
+     * @param aCmManager CM Manager.
+     */
+    void GetAllConnectionMethodsL( RArray<TUint32>& aCmArray,
+                                   RCmManagerExt& aCmManager );
+    
+    /**
+     * This function checks if given CM ID is found from given URI segmentlist.
+     * 
+     * @param aPreviousURISegmentList Array where to search.
+     * @param aCmId CM ID to be searched.
+     * @param aURISeg If match is found, the URI segment matching the CM ID is copied here.
+     * @return TBool ETrue if CM ID is found from array.
+     */
+    TBool CheckPreviousURIList( const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                const TUint32 aCmId,
+                                TDes8& aURISeg );
+    
+    /**
+     * This function gets list of dynamic nodes for the specified URI
+     * 
+     * @param aURI which to get the list for
+     * @param aLuid refrence to branch LUID
+     * @param aPreviousURISegmentList previous URI segment list
+     * @param aResultRef result reference
+     * @param aStatusRef status reference
+     * @param aCmManagerExt CM Manager reference
+     * @param aCurrentURISegmentList current URI segment list
+     * @param aField branch name
+     * @param aNodeCount number of dynamic nodes
+     * @aCallback pointer to DM callback
+     */
+    void GetAllDynamicNodesL( const TDesC8& aURI, 
+                              const TDesC8& aLUID,
+                              const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                              TInt aResultsRef,
+                              TInt aStatusRef,
+                              RCmManagerExt& aCmManagerExt,
+                              CBufBase& aCurrentURISegmentList,
+                              const TDesC8& aField,
+                              const TInt aNodeCount,
+                              MSmlDmCallback* aCallback );
+    
+    /**
+     * This function gets connection method
+     * 
+     * @param aCmManagerExt CM Manager
+     * @param aCm CM Manager
+     * @param aCmId CM ID
+     * @return TBool ETrue if connection method found
+     */
+    TBool GetConnectionMethodLC( RCmManagerExt& aCmManagerExt,
+                                 RCmConnectionMethodExt& aCm,
+                                 TUint32 aCmId );
+    
+private:
+    MSmlDmCallback* iCallback;
+    
+    };
+
+#endif /* BRANCHBASE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/inc/ConnMoAdapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,155 @@
+/*
+* ==============================================================================
+*  Name        : ConnMoAdapter.h
+*  Part of     : ConnMoAdapter
+*  Interface   : ecom / ConnMOAdapter
+*  Description : Connection Management Object
+*  Version     : $Revision: 61 $ $Modtime: 29.09.05 8:17 $
+*
+* Copyright (c) 2009 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:
+*
+* ==============================================================================
+*/
+
+#ifndef CONNMOADAPTER_H_
+#define CONNMOADAPTER_H_
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <smldmadapter.h>
+#include <cmmanagerext.h>
+
+class CNapBranch;
+class CProxyBranch;
+class CAddBuffer;
+class CBranchBase;
+
+_LIT8( KCMDdfNAP,                   "NAP" );
+_LIT8( KCMDdfProxy,                 "Proxy" );
+
+/**
+ * Implements ConnMO partition of the DM tree
+ */
+class CConnMoAdapter : public CSmlDmAdapter
+    {
+public:
+
+    static CConnMoAdapter* NewL(MSmlDmCallback* aDmCallback );
+    static CConnMoAdapter* NewLC(MSmlDmCallback* aDmCallback );
+
+    virtual ~CConnMoAdapter(); 
+    
+    // Adapter Interface inherited from CSmlDmAdapter
+    void DDFVersionL( CBufBase& aVersion );
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+    
+    void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            const TDesC8& aObject, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+    
+    void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            RWriteStream*& aStream, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+    
+    void DeleteObjectL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        TInt aStatusRef );
+    
+    void FetchLeafObjectL( const TDesC8& aURI, 
+                           const TDesC8& aLUID,
+                           const TDesC8& aType, 
+                           TInt aResultsRef,
+                           TInt aStatusRef );
+    
+    void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                               const TDesC8& aLUID,
+                               const TDesC8& aType, 
+                               TInt aResultsRef,
+                               TInt aStatusRef );
+    
+    void ChildURIListL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                        TInt aResultsRef, TInt aStatusRef );
+    
+    void AddNodeObjectL( const TDesC8& aURI, 
+                         const TDesC8& aParentLUID,
+                         TInt aStatusRef );
+
+    void ExecuteCommandL( const TDesC8& aURI, 
+                          const TDesC8& aLUID,
+                          const TDesC8& aArgument, 
+                          const TDesC8& aType,
+                          TInt aStatusRef );
+
+    void ExecuteCommandL( const TDesC8& aURI, 
+                          const TDesC8& aLUID,
+                          RWriteStream*& aStream, 
+                          const TDesC8& aType,
+                          TInt aStatusRef );
+
+    void CopyCommandL( const TDesC8& aTargetURI, 
+                       const TDesC8& aTargetLUID,
+                       const TDesC8& aSourceURI, 
+                       const TDesC8& aSourceLUID,
+                       const TDesC8& aType, 
+                       TInt aStatusRef );
+
+    void StartAtomicL(); 
+    void CommitAtomicL();
+    void RollbackAtomicL();
+    TBool StreamingSupport( TInt& aItemSize );
+    void StreamCommittedL();
+    void CompleteOutstandingCmdsL();
+    
+private:
+    
+    //-----------------------------------------------------------------------------
+    // Private functions
+    //-----------------------------------------------------------------------------
+    void ConstructL();
+    CConnMoAdapter( TAny* aEcomArguments );
+    
+    CBranchBase* GetBranch( const TDesC8& aUri );
+    
+    MSmlDmDDFObject& AddBaseUriL( MSmlDmDDFObject& aRootDDF);
+    
+    MSmlDmDDFObject& AddBranchL( MSmlDmDDFObject& aRootDDF, 
+                                const TDesC8& aNodeName);
+    
+    //-----------------------------------------------------------------------------
+    // Private member variables
+    //-----------------------------------------------------------------------------
+    /** Callback to framework */
+    MSmlDmCallback*     iCallBack;
+    
+    /** branches of ConnMo structure */
+    CNapBranch*         iNapBranch;
+    CProxyBranch*       iProxyBranch;
+    
+    /** Buffer for node addition */
+    CAddBuffer*         iBuffer;
+    
+    /** CmMager for manipulating CM settings */
+    RCmManagerExt       iCmManager;
+    };
+
+
+#endif /* CONNMOADAPTER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/inc/NapBranch.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,151 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+*
+* ==============================================================================
+*/
+
+
+#ifndef NAPBRANCH_H_
+#define NAPBRANCH_H_
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <cmmanagerext.h> 
+#include <smldmadapter.h>
+#include "BranchBase.h"
+#include "AddBuffer.h"
+
+/**
+ * Class for handling Network Access Point (NAP) settings in ConnMo DM tree
+ */
+class CNapBranch : public CBranchBase
+    {
+public:
+
+    static CNapBranch* NewL(MSmlDmCallback* aDmCallback, 
+                            CAddBuffer* aBuffer,
+                            RCmManagerExt* aCmManagerExt );
+    
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+    
+    void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            const TDesC8& aObject, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+    
+    void DeleteObjectL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        TInt aStatusRef );
+    
+    void FetchLeafObjectL( const TDesC8& aURI, 
+                           const TDesC8& aLUID,
+                           const TDesC8& aType, 
+                           TInt aResultsRef,
+                           TInt aStatusRef );
+    
+
+    void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                               const TDesC8& aLUID,
+                               const TDesC8& aType, 
+                               TInt aResultsRef,
+                               TInt aStatusRef );
+
+    void ChildURIListL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                        TInt aResultsRef, 
+                        TInt aStatusRef );
+    
+    void AddNodeObjectL( const TDesC8& aURI, 
+                         const TDesC8& aParentLUID,
+                         TInt aStatusRef);
+    
+    /**
+     * Processes all Proxy related nodes from buffer
+     */
+    void ProcessBufferL();
+
+    virtual ~CNapBranch(); 
+    
+private:
+    
+    //-----------------------------------------------------------------------------
+    // Private functions
+    //-----------------------------------------------------------------------------
+    void ConstructL( CAddBuffer* aBuffer, RCmManagerExt* aCmManagerExt );
+    CNapBranch( MSmlDmCallback* aDmCallback );
+    
+    CSmlDmAdapter::TError GetUnmodifiableFieldValueL(const TDesC8& aUri,
+                                                    CBufBase* aResult );
+    
+    CSmlDmAdapter::TError GetLeafDataL(const TDesC8& aURI,
+                                       RCmConnectionMethodExt& aCm,
+                                       CBufBase* aResult );
+    
+    CSmlDmAdapter::TError GetUnmodifiableFieldAddResult( const TDesC8& aUri, 
+                                                         const TDesC8& aObject );
+    
+    TUint32 MapUriToCmAttribute( const TDesC8& aUri );
+    
+    void SetLeafDataL( const TDesC8& aURI, 
+                       const TDesC8& aObject, 
+                       TInt aStatusRef, 
+                       RCmConnectionMethodExt& aCm);
+    
+    void SetNodeDataL( CConnMoNodeElement* aNode, 
+                       RCmConnectionMethodExt& aCm );
+    
+    TBool FindNewCmType( TUint32& aBearerType );
+    
+    TBool AllMandatoryNapFieldsFound();
+    
+    void NapChildURIListL( const TDesC8& aURI,
+                           const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                           TInt aResultsRef, 
+                           TInt aStatusRef,
+                           CBufBase& aCurrentURISegmentList );
+   
+    void GetAllDynamicNapNodesL( const TDesC8& aURI, 
+                                 const TDesC8& aLUID,
+                                 const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                 TInt aResultsRef,
+                                 TInt aStatusRef,
+                                 CBufBase& aCurrentURISegmentList,
+                                 const TDesC8& aField );
+								 
+    void IpBranchDDFStructureL( MSmlDmDDFObject& aIPDDF );
+    
+    CSmlDmAdapter::TError DeleteObjectL( const TDesC8& aURI, 
+                                         const TDesC8& aLUID );
+    
+    TPtrC8 GetDynamicNAPNodeUri( const TDesC8& aURI );
+    
+    TBool IsNAPUriFormatMatchPredefined(const TDesC8 & aURI);
+    
+    TInt GetCmIdFromURIL(const TDesC8& aURI);
+    //-----------------------------------------------------------------------------
+    // Private member variables
+    //-----------------------------------------------------------------------------
+    CAddBuffer* iBuffer;
+    MSmlDmCallback* iCallback;
+    RCmManagerExt* iCmManager;
+    };
+    
+    
+    
+#endif /* NAPBRANCH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/inc/ProxyBranch.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+*
+* ==============================================================================
+*/
+
+#ifndef PROXYBRANCH_H_
+#define PROXYBRANCH_H_
+
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <smldmadapter.h>
+#include "BranchBase.h"
+#include "cmmanagerext.h"
+#include "AddBuffer.h"
+
+/**
+ * Class for handling Proxy settings in ConnMo DM tree
+ */
+class CProxyBranch : public CBranchBase
+    {
+public:
+
+    static CProxyBranch* NewL(MSmlDmCallback* aDmCallback, 
+                              CAddBuffer* aBuffer,
+                              RCmManagerExt* aCmManagerExt );
+    
+    // Adapter branch interface from CProxyBranch
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+
+    void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            const TDesC8& aObject, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+    
+    void DeleteObjectL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        TInt aStatusRef );
+    
+    void FetchLeafObjectL( const TDesC8& aURI, 
+                           const TDesC8& aLUID,
+                           const TDesC8& aType, 
+                           TInt aResultsRef,
+                           TInt aStatusRef );
+    
+
+    void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                               const TDesC8& aLUID,
+                               const TDesC8& aType, 
+                               TInt aResultsRef,
+                               TInt aStatusRef);
+
+    void ChildURIListL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                        TInt aResultsRef, 
+                        TInt aStatusRef );
+    
+    void AddNodeObjectL( const TDesC8& aURI, 
+                         const TDesC8& aParentLUID,
+                         TInt aStatusRef );
+    
+    /**
+     * The function processes all proxy nodes from add buffer.
+     * @param aCmManagerExt Reference to CmManager session. 
+     */
+    void ProcessBufferL();
+    
+    virtual ~CProxyBranch(); 
+    
+private:
+    
+    //-----------------------------------------------------------------------------
+    // Private functions
+    //-----------------------------------------------------------------------------
+    CProxyBranch(MSmlDmCallback* aDmCallback, 
+                 CAddBuffer* aBuffer, 
+                 RCmManagerExt* aCmManagerExt );
+        
+    /**
+     * The function returns URI list of dynamic Proxy nodes. The list is returned by 
+     * calling the SetResultsL function of MSmlCallback callback interface.
+     * @param aURI URI of the parent object.
+     * @param aPreviousURISegmentList URI list with mapping LUID information.
+     * @param aResultsRef Reference to correct results.
+     * @param aStatusRef  Reference to correct command.
+     * @param aCmManagerExt Reference to CmManager session. 
+     */
+    void GetAllDynamicProxyNodesL( const TDesC8& aURI,
+                                   const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                   TInt aResultsRef, 
+                                   TInt aStatusRef,
+                                   CBufBase& aCurrentURISegmentList );
+    
+    /**
+     * The function returns URI list of requested dynamic Proxy node.
+     * @param aLUID LUID of the parent object.
+     * @param aResultsRef Reference to correct results.
+     * @param aStatusRef  Reference to correct command.
+     * @param aCmManagerExt Reference to CmManager session. 
+     */
+    void GetURIListForProxyNodeL( const TDesC8& aLUID,
+                                  TInt aResultsRef, 
+                                  TInt aStatusRef );
+    
+    /**
+     * The function adjust DM operation return values for hardcoded fields.
+     * @param aURI URI of the object.
+     * @return CSmlDmAdapter::TError Status value for DM operation.
+     */
+    CSmlDmAdapter::TError CheckForUnmodifiableField( const TDesC8& aUri );
+    
+    /**
+     * The function returns CMManager's attribute enum that corresponds to uri.
+     * @param aURI URI of the object.
+     * @return TUint32 Attribute enum for CM.
+     */
+    TUint32 MapUriToCmAttribute( const TDesC8& aUri );
+    
+    /**
+     * The function searches for connection method that is referenced from proxy buffered
+     * in the addbuffer.
+     * @param aCmManagerExt Reference to CmManager session. 
+     * @return TUint32 CM ID.
+     */
+    TInt32 FindConnectionMethodL();
+    
+    /**
+     * The function checs that the addbuffer contains all necessary fields 
+     * to create new proxy entry.
+     * @return TBool True if all mandatory fields found.
+     */
+    TBool AllMandatoryProxyFieldsFound();
+    
+    /**
+     * The function writes information from the addbuffer to connection method.
+     * @param aURI URI of the object.
+     * @param aLUID Local UID of the leaf.
+     * @param aObject objecto to be written in CM.
+     * @param aStatusRef  Reference to correct command.
+     * @param aCm Reference to Connection Method. 
+     */
+    void SetLeafDataL( const TDesC8& aURI, 
+                       const TDesC8& aLUID,
+                       const TDesC8& aObject, 
+                       TInt aStatusRef, 
+                       RCmConnectionMethodExt& aCm);
+    
+    /**
+     * The function informs framework about new nodes.
+     * @param aNode Node to be saved.
+     * @param aCm Reference to Connection Method.
+     */
+    void SetNodeDataL( CConnMoNodeElement* aNode, RCmConnectionMethodExt& aCm );
+    
+    /**
+     * Fethces leaf object data from connection settings
+     * @param aURI Target node
+     * @param aLuid Local UID for target node
+     * @param buffer for returning object data
+     * @return CSmlDmAdapter::TError Return value informs completion status of the operation
+     */
+    CSmlDmAdapter::TError FetchLeafObjectL( const TDesC8& aURI,
+                                            const TDesC8& aLUID,
+                                            CBufBase& aLeafObject );
+    
+    TPtrC8 GetDynamicProxyNodeUri( const TDesC8& aURI );
+    
+    TBool IsProxyUriFormatMatchPredefined(const TDesC8 & aURI);
+ 
+    TInt GetCmIdFromURIL(const TDesC8& aURI);
+    
+    //-----------------------------------------------------------------------------
+    // Private member variables
+    //-----------------------------------------------------------------------------
+    MSmlDmCallback* iCallback;
+    CAddBuffer* iBuffer;
+    RCmManagerExt* iCmManager;
+    };
+    
+#endif /* PROXYBRANCH_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/inc/Utils.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,156 @@
+/*
+* ==============================================================================
+* Copyright (c) 2009 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:
+*
+* ==============================================================================
+*/
+
+#ifndef UTILS_H_
+#define UTILS_H_
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include "ConnMoAdapter.h"
+
+class TLuid;
+
+/**
+ * Utilities class for ConnMo adapter needs
+ * 
+ * Class contains useful helper functions etc. for parsing URI and TLuid
+ */
+class CUtils : public CBase
+    {
+public:
+    
+    virtual ~CUtils();
+    
+    /**
+     * Returns first segment of URI.
+     * 
+     * @param aUri URI to be searched.
+     * @return First segment of URI.
+     */
+    static TPtrC8 GetFirstURISeg( const TDesC8& aURI );
+    
+    /**
+     * Returns second segment of URI.
+     * 
+     * @param aUri URI to be searched.
+     * @return Second segment of URI.
+     */
+    static TPtrC8 GetSecondURISeg( const TDesC8& aURI );
+    
+    /**
+     * Returns last segment of URI.
+     * 
+     * @param aUri URI to be searched.
+     * @return Last segment of URI.
+     */
+    static TPtrC8 GetLastURISeg( const TDesC8& aURI );
+    
+    /**
+     * Returns the end of URI starting from passed segment.
+     * 
+     * @param aUri URI to be parsed.
+     * @param aName Segment to start.
+     * @return End of URI starting from aName.
+     */
+    static TPtrC8 GetEndOfURIFromSeg( const TDesC8& aURI, const TDesC8& aName );
+    
+    /**
+     * This function converts string value to 8-bit value.
+     * 
+     * @param aSource String to convert.
+     * @return Pointer to 8-bit value.
+     */
+    static TDesC8& ConvertTo8LC( const TDesC& aSource );
+    
+    /**
+     * This function converts string value to 16-bit value.
+     * 
+     * @param aSource String to convert.
+     * @return Pointer to 16-bit value.
+     */
+    static TDesC16& ConvertTo16LC( const TDesC8& aSource );
+    
+    /**
+     * This function sets given information to given node.
+     * 
+     * @param aNode Target node.
+     * @param aAccTypes Node's access types.
+     * @param aOccurrence Amount of possible nodes of same type.
+     * @param aScope Describes if node is static or dynamic.
+     * @param aFormat Node's format.
+     * @param aDescription String containing description of the node.
+     * @return Pointer integer value.
+     */
+    static void FillNodeInfoL( MSmlDmDDFObject& aNode,
+                               TSmlDmAccessTypes aAccTypes,
+                               MSmlDmDDFObject::TOccurence aOccurrence, 
+                               MSmlDmDDFObject::TScope aScope, 
+                               MSmlDmDDFObject::TDFFormat aFormat,
+                               const TDesC8& aDescription);
+        
+    /**
+     * This function removes characters that are not allowed in URI from given descriptor.
+     * 
+     * @param aString String to be modified.
+     */
+    static void RemoveIllegalCharsFromURI( TDes8& aString );
+        
+    /**
+     * This function returns string as bool value.
+     * 
+     * @param aSource String to convert.
+     * @param aBool conversion result.
+     * @return TInt32 KErrNone if succesful conversion.
+     */
+    static TInt32 DesToBool( const TDesC8& aString, TBool& aBool );
+    
+    /**
+     * This function convert integer value to string presentation.
+     * 
+     * @param aObject Int value to convert.
+     * @return TDesC8& Int as string.
+     */
+    static TDesC8& IntToCharL( const TInt& aObject );
+    
+    /**
+     * This function takes first segment from uri and adds it to target
+     * 
+     * @param aURI Contains source uri.
+     * @param aTarget Target string.
+     * @return TInt Index of first uri delimiter.
+     */
+    static TInt AppendFirstURISeg( TDes8& aURI, TDes8& aTarget );
+    
+    static TInt IntLUID(const TDesC8& aLUID);
+    
+private:
+    
+    //-----------------------------------------------------------------------------
+    // Private functions
+    //-----------------------------------------------------------------------------
+    CUtils();
+              
+    //-----------------------------------------------------------------------------
+    // Private member variables
+    //-----------------------------------------------------------------------------
+       
+    };
+
+#endif /* UTILS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/rom/connmoadapter.iby	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,34 @@
+/*
+* ============================================================================
+* Copyright (c) 2009 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:
+*
+* ============================================================================
+*/
+
+#include <bldvariant.hrh>
+
+#ifndef __CONNMOADAPTER_IBY__
+#define __CONNMOADAPTER_IBY__
+
+#ifdef __SYNCML_DM // nothing should be installed from this .iby file if __SYNCML_DM feature is not selected
+#ifdef FF_DM_CONNMO_ADAPTER // nothing should be installed from this .iby file if this flag is not specified.
+														 // old internet adapter is used in that case for access point provisioning.
+
+ECOM_PLUGIN(connmoadapter.dll,connmoadapter.rsc)
+
+#endif FF_DM_CONNMO_ADAPTER 
+#endif // __SYNCML_DM_WLAN 
+
+#endif //__CONNMOADAPTER_IBY__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/AddBuffer.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,298 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <e32base.h>
+
+#include "AddBuffer.h"
+#include "Utils.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "AddBufferTraces.h"
+#endif
+
+_LIT8( KChildNodeWildCardPattern, "/*" );
+_LIT8( KNodeSeparator, "/" );
+
+// ======== LOCAL FUNCTIONS =========
+
+// ======== MEMBER FUNCTIONS ========
+//------------------------------------------------------------------------------
+// CConnMoNodeElement::CConnMoNodeElement()
+//------------------------------------------------------------------------------
+CConnMoNodeElement::CConnMoNodeElement() 
+    {
+    OstTraceFunctionEntry0( CCONNMONODEELEMENT_CCONNMONODEELEMENT_ENTRY );
+    
+    OstTraceFunctionExit0( CCONNMONODEELEMENT_CCONNMONODEELEMENT_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::~CAddBuffer()
+//------------------------------------------------------------------------------
+CConnMoNodeElement::~CConnMoNodeElement()
+    {
+    OstTraceFunctionEntry0( CCONNMONODEELEMENT_DELETE_ENTRY );
+    
+    OstTraceFunctionExit0( CCONNMONODEELEMENT_DELETE_EXIT );
+    }
+
+//-----------------------------------------------------------------------------
+// CAddBuffer* CAddBuffer::NewL( )
+//-----------------------------------------------------------------------------
+CAddBuffer* CAddBuffer::NewL()
+    {
+    OstTraceFunctionEntry0( CADDBUFFER_NEWL_ENTRY );
+    
+    CAddBuffer* self = new ( ELeave ) CAddBuffer();
+    CleanupStack::PushL( self );
+    
+    self->ConstructL();
+    
+    CleanupStack::Pop( self );
+
+    OstTraceFunctionExit1( CADDBUFFER_NEWL_EXIT, ( TUint )( self ) );
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::CAddBuffer()
+//------------------------------------------------------------------------------
+CAddBuffer::CAddBuffer() 
+    {
+    OstTraceFunctionEntry0( CADDBUFFER_CADDBUFFER_ENTRY );
+    
+    OstTraceFunctionExit0( CADDBUFFER_CADDBUFFER_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::~CAddBuffer()
+//------------------------------------------------------------------------------
+CAddBuffer::~CAddBuffer()
+    {
+    OstTraceFunctionEntry0( CADDBUFFER_DELETE_ENTRY );
+    
+    iBuffer.ResetAndDestroy();
+    
+    OstTraceFunctionExit0( CADDBUFFER_DELETE_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::CAddBuffer()
+//------------------------------------------------------------------------------
+void CAddBuffer::ConstructL() 
+    {
+    OstTraceFunctionEntry0( CADDBUFFER_CONSTRUCTL_ENTRY );
+    
+    OstTraceFunctionExit0( CADDBUFFER_CONSTRUCTL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::AddNodeToBuffer()
+//------------------------------------------------------------------------------
+void CAddBuffer::AddNodeToBufferL( const TDesC8& aUri, 
+                                   const TDesC8& aParentLUID,
+                                   const TInt    aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_ENTRY, "ENTRY: CAddBuffer::AddNodeToBufferL;aUri=%s", aUri );
+    
+    CConnMoNodeElement* newNode = new (ELeave) CConnMoNodeElement();
+    
+    newNode->iUri.Copy( aUri );
+    newNode->iParentLUID.Copy( aParentLUID );
+    newNode->iStatusRef = aStatusRef;
+    newNode->iProcessed = EFalse;
+    newNode->iLeaf = EFalse;
+    
+    iBuffer.AppendL( newNode );
+    OstTrace0( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_EXIT, "EXIT: CAddBuffer::AddNodeToBufferL");
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::AddNodeToBuffer()
+//------------------------------------------------------------------------------
+void CAddBuffer::AddNodeToBufferL( const TDesC8& aUri, 
+                                   const TDesC8& aLUID,
+                                   const TDesC8& aObject,
+                                   const TInt    aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_LEAF_ENTRY, "ENTRY: CAddBuffer::AddNodeToBufferL;aUri=%s", aUri );
+    
+    CConnMoNodeElement* newNode = new (ELeave) CConnMoNodeElement();
+    
+    newNode->iUri.Copy( aUri );
+    newNode->iParentLUID.Copy( aLUID );
+    newNode->iObject.Copy( aObject );
+    newNode->iStatusRef = aStatusRef;
+    newNode->iProcessed = EFalse;
+    newNode->iLeaf = ETrue;
+    
+    iBuffer.AppendL( newNode );
+    OstTrace0( TRACE_NORMAL, CADDBUFFER_ADDNODETOBUFFERL_LEAF_EXIT, "EXIT: CAddBuffer::AddNodeToBufferL");
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::FindDynamicNode
+//------------------------------------------------------------------------------
+CConnMoNodeElement* CAddBuffer::FindDynamicNode( const TDesC8& aUri )
+    {
+    OstTraceExt1( TRACE_NORMAL, CADDBUFFER_FINDDYNAMICNODE_ENTRY, "ENTRY: CAddBuffer::FindDynamicNode;aUri=%s", aUri );
+
+    CConnMoNodeElement* resultNode = NULL;
+
+    for ( TInt i = 0; i < iBuffer.Count(); ++i )
+        {
+        if ( iBuffer[i]->iUri.Match(aUri) != KErrNotFound )
+            {
+            // 
+            TBuf8<KMaxFieldLength> dynamicNodeChildUri(aUri);
+            dynamicNodeChildUri.Append( KChildNodeWildCardPattern );
+            
+            if ( iBuffer[i]->iUri.Match( dynamicNodeChildUri ) == KErrNotFound )
+                {
+                // Correct dynamic node found.
+                OstTrace0( TRACE_NORMAL, 
+                           CADDBUFFER_FINDDYNAMICNODE_MATCH_FOUND, 
+                           "CAddBuffer::FindDynamicNode;Matching node found.");
+                resultNode = iBuffer[i];
+                break;
+                }
+            }
+        }
+    OstTraceExt1( TRACE_NORMAL, 
+                  CADDBUFFER_FINDDYNAMICNODE_EXIT, 
+                  "EXIT: CAddBuffer::FindDynamicNode;resultNode=%s", 
+                  resultNode->iUri );
+    
+    return resultNode;
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::Find
+//------------------------------------------------------------------------------
+CConnMoNodeElement* CAddBuffer::CacheFind( const TDesC8& aUri )
+    {
+    OstTraceExt1( TRACE_NORMAL, CADDBUFFER_CACHEFIND_ENTRY, "ENTRY: CAddBuffer::CacheFind;aUri=%s", aUri );
+    
+    CConnMoNodeElement* resultNode = NULL;
+
+    for ( TInt i = 0; i < iCache.Count(); ++i )
+        {
+        if ( iCache[i]->iUri.Match( aUri ) != KErrNotFound )
+            {
+            OstTrace0( TRACE_NORMAL, CADDBUFFER_CACHEFIND_MATCH_FOUND, "CAddBuffer::CacheFind; Matching URI found.");
+            resultNode = iCache[i];
+            
+            OstTraceExt1( TRACE_NORMAL, 
+                          CADDBUFFER_CACHEFIND_RESULT_NODE, 
+                          "CAddBuffer::CacheFind; resultNode=%s", 
+                          resultNode->iUri );
+            break;
+            }
+        }
+    
+    OstTrace0( TRACE_NORMAL, CADDBUFFER_CACHEFIND_EXIT, "EXIT: CAddBuffer::CacheFind");
+    return resultNode;
+    }
+
+//------------------------------------------------------------------------------
+// CAddBuffer::FindDynamicNode
+//------------------------------------------------------------------------------
+CConnMoNodeElement* CAddBuffer::CacheFindDynamicNode( const TDesC8& aUri )
+    {
+    OstTraceExt1( TRACE_NORMAL, CADDBUFFER_CACHEFINDDYNAMICNODE_ENTRY, "ENTRY: CAddBuffer::CacheFindDynamicNode;aUri=%s", aUri );
+    
+    CConnMoNodeElement* resultNode = NULL;
+
+    for ( TInt i = 0; i < iCache.Count(); ++i )
+        {
+        if ( iCache[i]->iUri.Match( aUri ) != KErrNotFound )
+            {
+            // 
+            TBuf8<KMaxFieldLength> dynamicNodeChildUri( aUri );
+            dynamicNodeChildUri.Append( KChildNodeWildCardPattern );
+            
+            if ( iCache[i]->iUri.Match(dynamicNodeChildUri) == KErrNotFound )
+                {
+                // Correct dynamic node found.
+                OstTrace0( TRACE_NORMAL, 
+                           CADDBUFFER_CACHEFINDDYNAMICNODE_MATCH_FOUND, 
+                           "CAddBuffer::CacheFindDynamicNode; Matching node found.");
+                          
+                resultNode = iCache[i];
+                break;
+                }
+            }
+        }
+    if ( resultNode != NULL )
+        {
+        OstTraceExt1( TRACE_NORMAL, 
+                  CADDBUFFER_CACHEFINDDYNAMICNODE_EXIT, 
+                  "EXIT: CAddBuffer::CacheFindDynamicNode;resultNode=%s", 
+                  resultNode->iUri );
+        }
+    
+    return resultNode;
+    }
+//------------------------------------------------------------------------------
+// CAddBuffer::AddNodeToBuffer()
+//------------------------------------------------------------------------------
+TInt CAddBuffer::GetGroup( const TDesC8& aRoot, RPointerArray<CConnMoNodeElement>* aGroup )
+    {
+    OstTraceExt1( TRACE_NORMAL, CADDBUFFER_GETGROUP_ENTRY, "ENTRY: CAddBuffer::GetGroup;aRoot=%s", aRoot );
+
+    iCache.Reset();
+    TInt retval( KErrNotFound );
+    TBool first = ETrue;
+    TBuf8<KSmlMaxURISegLen> groupTag;
+    groupTag.Copy( aRoot );
+    groupTag.Append( KChildNodeWildCardPattern );
+
+    for ( TInt i = 0; i < iBuffer.Count(); ++i )
+        {
+        if ( iBuffer[i]->iUri.Match( groupTag ) != KErrNotFound
+             && !iBuffer[i]->iProcessed )
+            {
+            if ( first )
+                {
+                groupTag.Insert( aRoot.Length(), KNodeSeparator );
+                groupTag.Insert( aRoot.Length() + 1, CUtils::GetSecondURISeg( iBuffer[i]->iUri ) );
+                first = EFalse;
+                retval = 0;
+                }
+            aGroup->Append(iBuffer[i]);
+            iCache.Append(iBuffer[i]);
+            retval++;
+            }
+        }
+    OstTrace1( TRACE_NORMAL, CADDBUFFER_GETGROUP_EXIT, "EXIT: CAddBuffer::GetGroup;retval=%d", retval );
+
+    return retval;
+    }
+//------------------------------------------------------------------------------
+// CAddBuffer::~CAddBuffer()
+//------------------------------------------------------------------------------
+void CAddBuffer::Reset()
+    {
+    OstTraceFunctionEntry0( CADDBUFFER_Reset_ENTRY );
+    
+    iBuffer.ResetAndDestroy();
+    
+    OstTraceFunctionExit0( CADDBUFFER_Reset_EXIT );
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/BranchBase.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,220 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <smldmadapter.h>
+#include <cdbcols.h>
+#include <cmpluginpacketdatadef.h>
+#include "BranchBase.h"
+
+#include "Utils.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "BranchBaseTraces.h"
+#endif
+
+_LIT8( KCMProxyNodeSeparator,   "/" );
+
+
+
+// ======== LOCAL FUNCTIONS =========
+
+// ======== MEMBER FUNCTIONS ========
+// -------------------------------------------------------------------------------------
+// CBranchBase::CBranchBase()
+// -------------------------------------------------------------------------------------
+CBranchBase::CBranchBase()
+    {
+    OstTraceFunctionEntry0( CBRANCHBASE_CBRANCHBASE_ENTRY );
+    
+    OstTraceFunctionExit0( CBRANCHBASE_CBRANCHBASE_EXIT );
+    }
+// -------------------------------------------------------------------------------------
+// CBranchBase::CBranchBase
+// -------------------------------------------------------------------------------------
+CBranchBase::CBranchBase( MSmlDmCallback* aDmCallback )
+
+    {
+    OstTraceFunctionEntry0( CBRANCHBASE_CBRANCHBASE_2_ENTRY );
+    iCallback = aDmCallback;
+    OstTraceFunctionExit0( DUP1_CBRANCHBASE_CBRANCHBASE_2_EXIT );
+    }
+// -------------------------------------------------------------------------------------
+// CBranchBase::~CBranchBase()
+// -------------------------------------------------------------------------------------
+CBranchBase::~CBranchBase()
+    {
+    OstTraceFunctionEntry0( CBRANCHBASE_DELETE_ENTRY );
+    
+    OstTraceFunctionExit0( CBRANCHBASE_DELETE_EXIT );
+    }
+
+// -------------------------------------------------------------------------------------
+// CBranchBase::GetAllConnectionMethodsL()
+// Returns all connection methods
+// -------------------------------------------------------------------------------------
+void CBranchBase::GetAllConnectionMethodsL( RArray<TUint32>& aCmArray,
+                                           RCmManagerExt& aCmManager )
+    {
+    OstTraceFunctionEntry0( CBRANCHBASE_GETALLCONNECTIONMETHODSL_ENTRY );
+    
+    // Get all connection methods
+    TBool supportedBearersOnly = EFalse;
+    TBool legacyCmsOnly = EFalse;
+    TBool includeEasyWlan = EFalse;
+        
+    aCmManager.ConnectionMethodL( aCmArray, 
+                                 supportedBearersOnly,
+                                 legacyCmsOnly,
+                                 includeEasyWlan );
+    
+    RCmConnectionMethodExt cm;
+    
+    // Loop all connection methods and filter away everything else besides packet data.
+    // Other bearer types are not supported
+    for( TInt i = 0; i < aCmArray.Count(); i++ )
+        {
+        if ( GetConnectionMethodLC( aCmManager, cm, aCmArray[i] ) )
+            {
+            TUint bearerType = cm.GetIntAttributeL( CMManager::ECmBearerType );                      
+            
+            if( bearerType != KUidPacketDataBearerType )
+                {
+                // Non supported bearer type. Remove
+                aCmArray.Remove( i );
+                i--;              
+                }            
+            }        
+        CleanupStack::PopAndDestroy( &cm );
+        }
+    OstTrace1( TRACE_NORMAL, CBRANCHBASE_GETALLCONNECTIONMETHODSL_COUNT, "CBranchBase::GetAllConnectionMethodsL; Found %u connection methods.", aCmArray.Count() );
+    
+    OstTraceFunctionExit0( CBRANCHBASE_GETALLCONNECTIONMETHODSL_EXIT );
+    }
+
+//-----------------------------------------------------------------------------
+// TBool CBranchBase::CheckPreviousURIList()
+//-----------------------------------------------------------------------------
+TBool CBranchBase::CheckPreviousURIList( const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                         const TUint32 aCmId,
+                                         TDes8& aURISeg )
+    {
+    OstTraceExt2( TRACE_NORMAL, CBRANCHBASE_CHECKPREVIOUSURILIST_ENTRY, "ENTRY: CBranchBase::CheckPreviousURIList;aURISeg=%s;aCmId=%u", aURISeg, aCmId );
+    
+    TBool retval = EFalse;
+    
+    for ( TInt i = 0; i < aPreviousURISegmentList.Count(); i++ )
+        {        
+        if ( CUtils::IntLUID( aPreviousURISegmentList.At(i).iURISegLUID ) == aCmId )
+            {
+            aURISeg.Copy( aPreviousURISegmentList.At(i).iURISeg );
+            retval = ETrue;
+            break;
+            }
+        }
+    OstTrace1( TRACE_NORMAL, CBRANCHBASE_CHECKPREVIOUSURILIST_EXIT, "EXIT: CBranchBase::CheckPreviousURIList;retval=%d", retval );
+    
+    return retval;
+    }
+
+
+//-----------------------------------------------------------------------------
+// CBranchBase::GetAllDynamicNodesL
+//-----------------------------------------------------------------------------
+void CBranchBase::GetAllDynamicNodesL( const TDesC8& aURI, 
+                                       const TDesC8& /*aLUID*/,
+                                       const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                       TInt aResultsRef,
+                                       TInt aStatusRef,
+                                       RCmManagerExt& /*aCmManagerExt*/,
+                                       CBufBase& aCurrentURISegmentList,
+                                       const TDesC8& aField,
+                                       const TInt aNodeCount,
+                                       MSmlDmCallback* aCallback )
+    {
+    OstTraceExt3( TRACE_NORMAL, 
+                  CBRANCHBASE_GETALLDYNAMICNODESL_ENTRY, 
+                  "ENTRY: CBranchBase::GetAllDynamicNodesL;aURI=%s;aField=%s;aNodeCount=%d", 
+                  aURI, 
+                  aField, 
+                  aNodeCount );
+    
+    if ( aPreviousURISegmentList.Count() > 0 ) // Already mapped
+        {
+        for ( TInt i = 0; i < aPreviousURISegmentList.Count(); i++ )
+            {
+            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), 
+                                            aPreviousURISegmentList.At(i).iURISeg );
+            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), 
+                                            KCMProxyNodeSeparator );                
+            }
+        }
+    else
+        {
+        TBuf8<KSmlMaxURISegLen> addNodeName;
+   
+        // Generate as many nodes as defined
+        for ( TInt i = 1; i <= aNodeCount; i++ )
+            {
+            addNodeName.Format( _L8( "%s%d" ), aField.Ptr(), i );
+            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), addNodeName );
+            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), 
+                                            KCMProxyNodeSeparator );
+            }            
+       }
+    
+    aCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+    aCallback->SetResultsL( aResultsRef, aCurrentURISegmentList, KNullDesC8);
+    
+    OstTrace0( TRACE_NORMAL, 
+               CBRANCHBASE_GETALLDYNAMICNODESL_EXIT, 
+               "EXIT: CBranchBase::GetAllDynamicNodesL" );
+       
+    }
+
+//------------------------------------------------------------------------------
+//  TBool CBranchBase::GetConnectionMethodLC()
+//------------------------------------------------------------------------------ 
+TBool CBranchBase::GetConnectionMethodLC( RCmManagerExt& aCmManagerExt,
+                                          RCmConnectionMethodExt& aCm,
+                                          TUint32 aCmId )
+    {
+    OstTrace1( TRACE_NORMAL, CBRANCHBASE_GETCONNECTIONMETHODLC_ENTRY, "ENTRY: CBranchBase::GetConnectionMethodLC;aCmId=%d", aCmId );
+    TInt error( KErrNone );
+    
+    TRAP( error, aCm = aCmManagerExt.ConnectionMethodL( aCmId ) );
+    
+    CleanupClosePushL( aCm );
+    
+    if ( error != KErrNone )
+        {
+        OstTrace0( TRACE_NORMAL, 
+                   CBRANCHBASE_GETCONNECTIONMETHODLC_EXIT_NOT_FOUND, 
+                   "EXIT: CBranchBase::GetConnectionMethodLC;Connection Method NOT found: EFalse." );
+        return EFalse;
+        }
+    
+    OstTrace0( TRACE_NORMAL, 
+               CBRANCHBASE_GETCONNECTIONMETHODLC_EXIT_FOUND, 
+               "EXIT: CBranchBase::GetConnectionMethodLC;Connection Method FOUND: ETrue." );
+    
+    return ETrue;
+    }
+
+// ======== GLOBAL FUNCTIONS ========
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/ConnMoAdapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,571 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <e32base.h>
+#include <implementationproxy.h> // For TImplementationProxy definition
+#include <cmmanagerext.h> 
+
+#include "nsmldebug.h"
+#include "ConnMoAdapter.h"
+#include "Utils.h"
+#include "BranchBase.h"
+#include "NapBranch.h" 
+#include "ProxyBranch.h"
+#include "AddBuffer.h" 
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ConnMoAdapterTraces.h"
+#endif
+
+// ------------------------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------------------------
+// DDF version number
+_LIT8( KConnMoAdapterDDFversion,    "1.0");
+
+// URI base for ConnMo Nodes
+_LIT8( KConnMoBase,                 "");
+
+// ======== LOCAL FUNCTIONS =========
+
+CBranchBase* CConnMoAdapter::GetBranch( const TDesC8& aUri )
+    {
+    TDesC8 connMoBase( KConnMoBase );
+    CBranchBase* retval = NULL;
+        
+    TPtrC8 connMoTree = 
+        ( CUtils::GetEndOfURIFromSeg( aUri, KConnMoBase )).Mid( connMoBase.Size() );
+        
+    if ( CUtils::GetFirstURISeg( connMoTree ).Match( KCMDdfNAP )!= KErrNotFound )
+        {
+        retval = iNapBranch;
+        }
+    else if ( CUtils::GetFirstURISeg( connMoTree ).Match( KCMDdfProxy )!= KErrNotFound )
+        {
+        retval = iProxyBranch;
+        }
+    return retval;
+    }
+
+// -------------------------------------------------------------------------------------
+// CConnMoAdapter::AddBaseUriL( )
+// Handles addition of possible base URI to ConnMO DDF structure
+// -------------------------------------------------------------------------------------
+MSmlDmDDFObject& CConnMoAdapter::AddBaseUriL( MSmlDmDDFObject& aRootDDF )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_ADDBASEURIL_ENTRY );
+    
+    TDesC8 base(KConnMoBase);
+    
+    if ( base.Size() > 0)
+        {
+    
+        // Set rest acceptable operations for data itself     
+        TSmlDmAccessTypes aclTypesOnlyGet;
+        aclTypesOnlyGet.SetGet();
+        
+        MSmlDmDDFObject& ddf = aRootDDF.AddChildObjectL( KConnMoBase ); // CMO
+
+        _LIT8( KDescription, "ConnMo DDF description" );
+        _LIT8( KDFTitle, "ConnMo Settings Base Node" );
+    
+        CUtils::FillNodeInfoL( ddf, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EPermanent, 
+                   MSmlDmDDFObject::ENode, 
+                   KDescription );
+                   
+        ddf.SetDFTitleL( KDFTitle );
+        ddf.SetDefaultValueL( KNullDesC8 );
+        OstTraceFunctionExit0( CCONNMOADAPTER_ADDBASEURIL_EXIT );
+        return ddf;
+        }
+    else
+        {
+        OstTraceFunctionExit0( CCONNMOADAPTER_ADDBASEURIL_EXIT_2 );
+        return aRootDDF;
+        }    
+    
+    }
+// -------------------------------------------------------------------------------------
+// CConnMoAdapter::AddBranchL( )
+// Adds dynamic branch to given root node with given name
+// -------------------------------------------------------------------------------------
+MSmlDmDDFObject& CConnMoAdapter::AddBranchL( MSmlDmDDFObject& aRootDDF, 
+                                            const TDesC8& aNodeName )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_ADDBRANCHL_ENTRY, "ENTRY: CConnMoAdapter::AddBranchL;aNodeName=%s", aNodeName );
+    
+    // Set rest acceptable operations for data itself     
+    TSmlDmAccessTypes aclTypesOnlyGet;
+    aclTypesOnlyGet.SetGet();
+
+    TSmlDmAccessTypes aclTypesAll;
+    aclTypesAll.SetGet();
+    aclTypesAll.SetReplace();
+    aclTypesAll.SetAdd();
+    aclTypesAll.SetDelete();
+    
+    TSmlDmAccessTypes aclTypesNoDelete;
+    aclTypesNoDelete.SetGet();
+    aclTypesNoDelete.SetReplace();
+    aclTypesNoDelete.SetAdd();
+    
+    MSmlDmDDFObject& nChildRootDdf = aRootDDF.AddChildObjectL( aNodeName ); // Node
+    CUtils::FillNodeInfoL( nChildRootDdf, 
+                           aclTypesOnlyGet, 
+                           MSmlDmDDFObject::EOne,
+                           MSmlDmDDFObject::EPermanent, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );
+    
+    MSmlDmDDFObject& nChildDdf = nChildRootDdf.AddChildObjectGroupL();  // Node/<X>  
+    if ( aNodeName == KCMDdfNAP )
+        {      
+        CUtils::FillNodeInfoL( nChildDdf, 
+                               aclTypesAll, 
+                               MSmlDmDDFObject::EZeroOrMore, 
+                               MSmlDmDDFObject::EDynamic, 
+                               MSmlDmDDFObject::ENode, 
+                               KNullDesC8 );
+        }
+    else
+        {  
+        CUtils::FillNodeInfoL( nChildDdf, 
+                               aclTypesNoDelete, 
+                               MSmlDmDDFObject::EZeroOrMore, 
+                               MSmlDmDDFObject::EDynamic, 
+                               MSmlDmDDFObject::ENode, 
+                               KNullDesC8 );
+        }
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_ADDBRANCHL_EXIT, "EXIT: CConnMoAdapter::AddBranchL" );
+    return nChildDdf;
+    }
+
+// ======== MEMBER FUNCTIONS ========
+//-----------------------------------------------------------------------------
+// CConnMoAdapter* CConnMoAdapter::NewL( )
+//-----------------------------------------------------------------------------
+CConnMoAdapter* CConnMoAdapter::NewL( MSmlDmCallback* aDmCallback )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_NEWL_ENTRY );
+
+    CConnMoAdapter* self = CConnMoAdapter::NewLC( aDmCallback );
+    CleanupStack::Pop();
+
+    OstTraceFunctionExit1( CCONNMOADAPTER_NEWL_EXIT, ( TUint )( self ) );
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+// CConnMoAdapter* CConnMoAdapter::NewLC( )
+//-----------------------------------------------------------------------------
+CConnMoAdapter* CConnMoAdapter::NewLC( MSmlDmCallback* aDmCallback )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_NEWLC_ENTRY );
+       
+    CConnMoAdapter* self = new ( ELeave ) CConnMoAdapter( aDmCallback );
+    CleanupStack::PushL( self );
+
+    self->iCallBack = aDmCallback;
+    self->ConstructL();
+
+    OstTraceFunctionExit1( CCONNMOADAPTER_NEWLC_EXIT, ( TUint )( self ) );
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::CConnMoAdapter()
+//------------------------------------------------------------------------------
+CConnMoAdapter::CConnMoAdapter( TAny* aEcomArguments ) 
+    : CSmlDmAdapter( aEcomArguments )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_CCONNMOADAPTER_ENTRY );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_CCONNMOADAPTER_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::~CConnMoAdapter()
+//------------------------------------------------------------------------------
+CConnMoAdapter::~CConnMoAdapter()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_DELETE_ENTRY );
+    
+    delete iBuffer;
+    delete iNapBranch;
+    delete iProxyBranch;
+    iCmManager.Close();
+
+    OstTraceFunctionExit0( CCONNMOADAPTER_DELETE_EXIT );
+    }
+
+//=============================================
+//      CConnMoAdapter::ConstructL()
+//      Second phase constructor.
+//=============================================
+void CConnMoAdapter::ConstructL()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_CONSTRUCTL_ENTRY );  
+    
+    iCmManager.OpenL();
+       
+    iBuffer = CAddBuffer::NewL();
+    iNapBranch = CNapBranch::NewL( iCallBack, iBuffer, &iCmManager );
+    iProxyBranch = CProxyBranch::NewL( iCallBack, iBuffer, &iCmManager );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_CONSTRUCTL_EXIT );
+    }
+
+void CConnMoAdapter::DDFVersionL( CBufBase& aDDFVersion )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_DDFVERSIONL_ENTRY );
+    
+    aDDFVersion.InsertL( 0, KConnMoAdapterDDFversion );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_DDFVERSIONL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+//  void CConnMoAdapter::DDFStructureL()
+//------------------------------------------------------------------------------
+void CConnMoAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_DDFSTRUCTUREL_ENTRY );
+    
+    // Insert Base URI in the beginning of the tree
+    MSmlDmDDFObject& ddf = AddBaseUriL( aDDF);
+    
+    // NAP Branch
+    MSmlDmDDFObject& nNapDdf = AddBranchL( ddf, KCMDdfNAP );
+    iNapBranch->DDFStructureL( nNapDdf );
+    
+    // Proxy Branch
+    MSmlDmDDFObject& nProxyDdf = AddBranchL( ddf, KCMDdfProxy );
+    iProxyBranch->DDFStructureL( nProxyDdf );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_DDFSTRUCTUREL_EXIT );
+    }
+    
+void CConnMoAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+                                        const TDesC8& aLUID,
+                                        const TDesC8& aObject, 
+                                        const TDesC8& aType,
+                                        TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_UPDATELEAFOBJECTL_ENTRY, "ENTRY: CConnMoAdapter::UpdateLeafObjectL;aURI=%s", aURI );
+    
+    CBranchBase* implementation = GetBranch( aURI ); 
+    
+    implementation->UpdateLeafObjectL( aURI, aLUID, aObject, aType, aStatusRef );
+
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_UPDATELEAFOBJECTL_EXIT, "EXIT: CConnMoAdapter::UpdateLeafObjectL" );
+    }
+
+//------------------------------------------------------------------------------
+// void CConnMoAdapter::UpdateLeafObjectL
+//------------------------------------------------------------------------------
+void CConnMoAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, 
+                                        const TDesC8& /*aLUID*/,
+                                        RWriteStream*& /*aStream*/, 
+                                        const TDesC8& /*aType*/,
+                                        TInt aStatusRef )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_ENTRY );
+    
+    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::UpdateLeafObjectL;Unsupported method call. CSmlDmAdapter::EError." );
+   
+    OstTraceFunctionExit0( CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// void CConnMoAdapter::DeleteObjectL
+//------------------------------------------------------------------------------
+void CConnMoAdapter::DeleteObjectL( const TDesC8& aURI, 
+                                    const TDesC8& aLUID,
+                                    TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_DELETEOBJECTL_ENTRY, "ENTRY: CConnMoAdapter::DeleteObjectL;aURI=%s", aURI );
+
+    CBranchBase* implementation = GetBranch( aURI ); 
+    
+    implementation->DeleteObjectL( aURI, aLUID, aStatusRef );
+    
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_DELETEOBJECTL_EXIT, "EXIT: CConnMoAdapter::DeleteObjectL" );
+    }
+
+//------------------------------------------------------------------------------
+// void CConnMoAdapter::FetchLeafObjectL
+//------------------------------------------------------------------------------
+void CConnMoAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+                                       const TDesC8& aLUID,
+                                       const TDesC8& aType, 
+                                       TInt aResultsRef,
+                                       TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_FETCHLEAFOBJECTL_ENTRY, "ENTRY: CConnMoAdapter::FetchLeafObjectL;aURI=%s", aURI );
+    
+    CBranchBase* implementation = GetBranch( aURI ); 
+    
+    implementation->FetchLeafObjectL( aURI, aLUID, aType, aResultsRef, aStatusRef );
+       
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_FETCHLEAFOBJECTL_EXIT, "EXIT: CConnMoAdapter::FetchLeafObjectL" );
+    }
+
+//------------------------------------------------------------------------------
+// void CConnMoAdapter::FetchLeafObjectSizeL
+//------------------------------------------------------------------------------
+void CConnMoAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
+                                           const TDesC8& aLUID,
+                                           const TDesC8& aType, 
+                                           TInt aResultsRef,
+                                           TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_ENTRY, "ENTRY: CConnMoAdapter::FetchLeafObjectSizeL;aURI=%s", aURI );
+    
+    CBranchBase* implementation = GetBranch( aURI ); 
+    
+    implementation->FetchLeafObjectSizeL( aURI, 
+                                          aLUID, 
+                                          aType, 
+                                          aResultsRef, 
+                                          aStatusRef );
+    
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_EXIT, "EXIT: CConnMoAdapter::FetchLeafObjectSizeL" );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::ChildURIListL
+// Return childs of the requested node.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::ChildURIListL( const TDesC8& aURI, 
+                        const TDesC8& aLUID,
+                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                        TInt aResultsRef,
+						TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_CHILDURILISTL_ENTRY, "ENTRY: CConnMoAdapter::ChildURIListL;aURI=%s", aURI );
+    
+    CBranchBase* implementation = GetBranch( aURI ); 
+    
+    implementation->ChildURIListL( aURI, aLUID, aPreviousURISegmentList, 
+                                   aResultsRef, aStatusRef );
+
+    
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_CHILDURILISTL_EXIT, "EXIT: CConnMoAdapter::ChildURIListL" );
+    }
+    
+//------------------------------------------------------------------------------
+// CConnMoAdapter::AddNodeObjectL
+//------------------------------------------------------------------------------
+void CConnMoAdapter::AddNodeObjectL( const TDesC8& aURI, 
+                                     const TDesC8& aParentLUID,
+                                     TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CCONNMOADAPTER_ADDNODEOBJECTL_ENTRY, "ENTRY: CConnMoAdapter::AddNodeObjectL;aURI=%s", aURI );
+    
+    CBranchBase* implementation = GetBranch( aURI ); 
+    
+    implementation->AddNodeObjectL( aURI, aParentLUID, aStatusRef );
+
+    OstTrace0( TRACE_NORMAL, CCONNMOADAPTER_ADDNODEOBJECTL_EXIT, "EXIT: CConnMoAdapter::AddNodeObjectL" );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::ExecuteCommandL
+// Not supported. Returns EError.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                                      const TDesC8& /*aLUID*/,
+                                      const TDesC8& /*aArgument*/, 
+                                      const TDesC8& /*aType*/,
+                                      TInt aStatusRef )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_EXECUTECOMMANDL_ENTRY );
+    
+    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_EXECUTECOMMANDL_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::ExecuteCommandL;Unsupported method call. CSmlDmAdapter::EError." );
+
+    OstTraceFunctionExit0( CCONNMOADAPTER_EXECUTECOMMANDL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::ExecuteCommandL
+// Not supported. Returns EError.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                                      const TDesC8& /*aLUID*/,
+                                      RWriteStream*& /*aStream*/, 
+                                      const TDesC8& /*aType*/,
+                                      TInt aStatusRef )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_ENTRY );
+    
+    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+    
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::ExecuteCommandL;Unsupported method call. CSmlDmAdapter::EError." );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::CopyCommandL
+// Not supported. Returns EError.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, 
+                                   const TDesC8& /*aTargetLUID*/,
+                                   const TDesC8& /*aSourceURI*/, 
+                                   const TDesC8& /*aSourceLUID*/,
+                                   const TDesC8& /*aType*/, 
+                                   TInt aStatusRef )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_COPYCOMMANDL_ENTRY );
+    
+    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_COPYCOMMANDL_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::CopyCommandL;Unsupported method call. CSmlDmAdapter::EError." );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_COPYCOMMANDL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::StartAtomicL
+// Not supported.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::StartAtomicL()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_STARTATOMICL_ENTRY );
+    
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_STARTATOMICL_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::StartAtomicL;Unsupported method call." );
+
+    OstTraceFunctionExit0( CCONNMOADAPTER_STARTATOMICL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::CommitAtomicL
+// Not supported.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::CommitAtomicL()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_COMMITATOMICL_ENTRY );
+
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_COMMITATOMICL_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::CommitAtomicL;Unsupported method call." );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_COMMITATOMICL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::RollbackAtomicL
+// Not supported.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::RollbackAtomicL()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_ROLLBACKATOMICL_ENTRY );
+
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_ROLLBACKATOMICL_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::RollbackAtomicL;Unsupported method call." );
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_ROLLBACKATOMICL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::StreamingSupport
+// Not supported. Returns EFalse.
+//------------------------------------------------------------------------------
+TBool CConnMoAdapter::StreamingSupport( TInt& /*aItemSize*/ )
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_STREAMINGSUPPORT_ENTRY );
+
+    
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_STREAMINGSUPPORT_NOT_SUPPORTED, 
+               "CConnMoAdapter::StreamingSupport;Not supported." );
+    
+    OstTraceFunctionExitExt( CCONNMOADAPTER_STREAMINGSUPPORT_EXIT, this, EFalse );
+    return EFalse;
+    }
+
+//------------------------------------------------------------------------------
+// CConnMoAdapter::StreamCommittedL
+// Not supported. Returns EError.
+//------------------------------------------------------------------------------
+void CConnMoAdapter::StreamCommittedL()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_STREAMCOMMITTEDL_ENTRY);
+    
+    OstTrace0( TRACE_NORMAL, 
+               CCONNMOADAPTER_STREAMCOMMMITTEDL_UNSUPPORTED_METHOD_CALL, 
+               "CConnMoAdapter::StreamCommittedL;Unsupported method call." );
+
+    OstTraceFunctionExit0( CCONNMOADAPTER_STREAMCOMMITTEDL_EXIT );
+    }
+
+void CConnMoAdapter::CompleteOutstandingCmdsL()
+    {
+    OstTraceFunctionEntry0( CCONNMOADAPTER_COMPLETEOUTSTANDINGCMDSL_ENTRY );
+    
+    iNapBranch->ProcessBufferL();
+    iProxyBranch->ProcessBufferL();
+    
+    iBuffer->Reset();
+    
+    OstTraceFunctionExit0( CCONNMOADAPTER_COMPLETEOUTSTANDINGCMDSL_EXIT );
+    }
+
+// ======== GLOBAL FUNCTIONS ========
+//------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------
+#ifndef IMPLEMENTATION_PROXY_ENTRY
+#define IMPLEMENTATION_PROXY_ENTRY( aUid, aFuncPtr )  {{aUid},(aFuncPtr)}
+#endif
+
+const TImplementationProxy ImplementationTable[] = 
+    {
+    IMPLEMENTATION_PROXY_ENTRY(KConnMoAdapterUid, CConnMoAdapter::NewL)
+    };
+
+//------------------------------------------------------------------------------
+// TImplementationProxy* ImplementationGroupProxy()
+//------------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    OstTraceFunctionEntry1( CONNMOADAPTER_IMPLEMENTATIONGROUPPROXY_ENTRY, aTableCount );
+
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    OstTraceFunctionExit0( CONNMOADAPTER_IMPLEMENTATIONGROUPPROXY_EXIT );
+    return ImplementationTable;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/ConnMoAdapter.rss	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,42 @@
+/** @file
+* Copyright (c) 2009 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:  ConnMO resources
+*
+*/
+
+#include <registryinfo.rh>
+#include "nsmldmconstants.h"
+
+RESOURCE REGISTRY_INFO theRegistryInfo
+  {
+  dll_uid = 0x2001FE5E; //The DLL's 3rd UID.
+  interfaces = 
+      {
+      INTERFACE_INFO
+          {
+          interface_uid = KNSmlDMInterfaceUid; // DM interface UID
+          implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x2001FE5F; // DM ConnMO Adapter
+                version_no = 1; 
+                display_name = "";
+                default_data = "";
+                opaque_data = "";
+                }
+            };
+          }
+      };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/Luid.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,78 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include "Luid.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "LuidTraces.h"
+#endif
+
+
+// ======== LOCAL FUNCTIONS =========
+
+// ======== MEMBER FUNCTIONS ========
+
+//------------------------------------------------------------------------------
+// TLuid::TLuid()
+//------------------------------------------------------------------------------
+TLuid::TLuid() 
+    {
+
+    }
+
+//------------------------------------------------------------------------------
+// TLuid::TLuid()
+//------------------------------------------------------------------------------
+TLuid::TLuid( const TDesC8& aName, const TUint32 aCmId ) 
+    {
+    OstTraceExt2( TRACE_NORMAL, TLUID_TLUID, "ENTRY: TLuid::TLuid;aName=%s;aCmId=%u", aName, aCmId );
+    
+    iName = aName;
+    iCmId = aCmId;
+    }
+
+//------------------------------------------------------------------------------
+// TLuid::Equals()
+//------------------------------------------------------------------------------
+TBool TLuid::Equals( TUint32 aId ) const
+    {
+    OstTraceFunctionEntry1( TLUID_EQUALS_ENTRY, this );
+    if ( aId == iCmId)
+        {
+        OstTraceFunctionExitExt( TLUID_EQUALS_EXIT, this, ETrue );
+        return ETrue;
+        }
+    else
+        {
+        OstTraceFunctionExitExt( DUP1_TLUID_EQUALS_EXIT, this, EFalse );
+        return EFalse;
+        }
+    }
+
+//------------------------------------------------------------------------------
+// TLuid::GetCmId()
+//------------------------------------------------------------------------------
+TUint32 TLuid::GetCmId()
+    {
+    OstTrace1( TRACE_NORMAL, TLUID_GETCMID, "TLuid::GetCmId;iCmId=%u", iCmId );
+    
+    return iCmId;
+    }
+
+// ======== GLOBAL FUNCTIONS ========  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/NapBranch.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,1337 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+#include <featmgr.h>
+#include <cmmanagerext.h> 
+#include <cmpluginpacketdatadef.h>
+#include <cmpluginwlandef.h>
+#include <cmconnectionmethoddef.h>
+#include <nsmldmtreedbclient.h>
+#include "NapBranch.h"
+#include "Utils.h"
+#include "AddBuffer.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "NapBranchTraces.h"
+#endif
+// ------------------------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------------------------
+// NAP Branch
+_LIT8( KCMDdfID, "ID" );
+_LIT8( KCMDdfName, "Name" );
+_LIT8( KCMDdfAddrType, "AddrType" );
+_LIT8( KCMDdfAddr, "Addr" );
+_LIT8( KCMDdfIP, "IP" );
+_LIT8( KCMDdfAuthInfo, "AuthInfo" );
+_LIT8( KCMDdfAuthType, "AuthType" );
+_LIT8( KCMDdfBearerType, "BearerType" );
+_LIT8( KCMDdfBearerParams, "BearerParams" );
+_LIT8( KCMDdfIPv4, "IPv4" );
+_LIT8( KCMDdfAutoConfig, "AutoConfig" );
+_LIT8( KCMDdfIPAddr, "IPAddr" );
+_LIT8( KCMDdfNetMask, "NetMask" );
+_LIT8( KCMDdfGateway, "Gateway" );
+_LIT8( KCMDdfAutoDNS, "AutoDNS" );
+_LIT8( KCMDdfDNS, "DNS" );
+_LIT8( KCMDdfServers, "Servers" );
+_LIT8( KCMDdfServer, "Server" );
+_LIT8( KCMDdfAuthName, "AuthName" );
+_LIT8( KCMDdfAuthSecret, "AuthSecret" );
+// NAP Child URI List
+_LIT8( KCMNapFields, "ID/Name/AddrType/Addr/IP/AuthInfo/BearerType" );
+_LIT8( KCMNIPFields, "IPv4" );
+_LIT8( KCMNIPv4Fields, "AutoConfig/IPAddr/NetMask/Gateway/AutoDNS/DNS" );
+_LIT8( KCMNDNSFields, "Servers" );
+_LIT8( KCMNAuthInfoFields, "AuthType/AuthName/AuthSecret" );
+_LIT8( KCMNDNSServersFields, "Addr");
+_LIT8( KSlash, "/" );
+_LIT8( KDynamicNapNode, "NAP/*" );
+_LIT8( KDynamicNapNodeChildUri, "NAP/*/*" );
+_LIT8( KDynamicIPNode, "NAP/*/IP" );
+_LIT8( KDynamicIPNodeChildUri, "NAP/*/IP/*" );
+_LIT8( KDynamicIPv4Node, "NAP/*/IP/IPv4" );
+_LIT8( KDynamicIPv4NodeChildUri, "NAP/*/IP/IPv4/*" );
+_LIT8( KDynamicIPv4DnsNode, "NAP/*/IP/IPv4/DNS" );
+_LIT8( KDynamicIPv4DnsNodeChildUri, "NAP/*/IP/IPv4/DNS/*" );
+_LIT8( KDynamicIPv4DnsServersNode, "NAP/*/IP/IPv4/DNS/Servers" );
+_LIT8( KDynamicIPv4DnsServersNodeChildUri, "NAP/*/IP/IPv4/DNS/Servers/*" );
+_LIT8( KDynamicIPv4DnsServersNodeChildUriNodes, "NAP/*/IP/IPv4/DNS/Servers/*/*");
+_LIT8( KDynamicAuthInfoNode, "NAP/*/AuthInfo");
+_LIT8( KDynamicAuthInfoNodeChildUri, "NAP/*/AuthInfo/*");
+_LIT8( KNapBearerTypeUri, "NAP/*/BearerType");
+_LIT8( KNapAddrUri, "NAP/*/Addr");
+_LIT8( KNapDNSAddr1Uri, "NAP/*/Server1/Addr");
+_LIT8( KNapDNSAddr2Uri, "NAP/*/Server2/Addr");
+_LIT8( KNapIPv4AddrUri, "NAP/*/IPv4/*Addr");
+_LIT8( KPacketDataBearerType, "3GPPPS");
+_LIT8( KGPRSAddrType, "APN");
+_LIT8( KGPRSAuthType, "PAP");
+
+
+TInt const KInvalidBearerType = 0;
+TInt const KBufferExpandSize = 128;
+TInt const KNumOfNAPNodes = 8;
+TInt const KMaxResultSize = 64;
+TInt const KMaxDnsAddr = 2;
+_LIT8( KFalse, "False");
+_LIT8( KTrue, "True");
+
+_LIT8( KDynamicNodePrefix, "NAPId" );
+
+// ======== LOCAL FUNCTIONS =========
+//-----------------------------------------------------------------------------
+// TUint32 CNapBranch::CheckForUnmodifiableFieldL()
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CNapBranch::GetUnmodifiableFieldValueL(
+        const TDesC8& aUri, CBufBase* aResult)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_GETUNMODIFIABLEFIELDVALUEL_ENTRY,
+            "ENTRY: CNapBranch::GetUnmodifiableFieldValueL;aUri=%s", aUri );
+
+    CSmlDmAdapter::TError retval( CSmlDmAdapter::ENotFound );
+    TPtrC8 nodeName = CUtils::GetLastURISeg( aUri );
+
+    if ( nodeName.Match( KCMDdfAddrType ) != KErrNotFound )
+        {
+        aResult->InsertL( 0, KGPRSAddrType );
+        retval = CSmlDmAdapter::EOk;
+        }
+    else if ( nodeName.Match( KCMDdfBearerType ) != KErrNotFound )
+        {
+        aResult->InsertL( 0, KPacketDataBearerType );
+        retval = CSmlDmAdapter::EOk;
+        }
+    else if ( nodeName.Match( KCMDdfAuthType ) != KErrNotFound )
+        {
+        aResult->InsertL( 0, KGPRSAuthType );
+        retval = CSmlDmAdapter::EOk;
+        }
+    else if ( nodeName.Match( KCMDdfID ) != KErrNotFound )
+        {
+        TPtrC8 dynamicNode = GetDynamicNAPNodeUri( aUri );
+        aResult->InsertL( 0, dynamicNode );
+        retval = CSmlDmAdapter::EOk;
+        }
+
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_GETUNMODIFIABLEFIELDVALUEL_EXIT,
+            "EXIT: CNapBranch::GetUnmodifiableFieldValueL;retval=%{TError}", retval );
+
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// CSmlDmAdapter::TErrorCNapBranch::GetLeafData()
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CNapBranch::GetLeafDataL(const TDesC8& aURI,
+        RCmConnectionMethodExt& aCm, CBufBase* aResult)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_GETLEAFDATAL_ENTRY,
+            "ENTRY: CNapBranch::GetLeafDataL;aURI=%s", aURI );
+
+    TUint32 attributeRef( 0 );
+    CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+    HBufC16* resultTmp;
+
+    attributeRef = MapUriToCmAttribute( aURI );
+    switch ( attributeRef )
+        {
+        case CMManager::ECmName:
+        case CMManager::EPacketDataIPNameServer1:
+        case CMManager::EPacketDataIPNameServer2:
+        case CMManager::EPacketDataAPName:
+        case CMManager::EPacketDataIFAuthName:
+        case CMManager::EPacketDataIPAddr:
+        case CMManager::EPacketDataIPNetmask:
+        case CMManager::EPacketDataIPGateway:
+        resultTmp = aCm.GetStringAttributeL( attributeRef );
+        CleanupStack::PushL( resultTmp );
+        aResult->InsertL( 0, CUtils::ConvertTo8LC( *resultTmp ) );
+        CleanupStack::PopAndDestroy(); // ConvertTo8LC
+        CleanupStack::PopAndDestroy( resultTmp );
+        break;
+        case CMManager::EPacketDataIPAddrFromServer:
+        case CMManager::EPacketDataIPDNSAddrFromServer:
+        if ( aCm.GetBoolAttributeL( attributeRef ) )
+            {
+            aResult->InsertL( 0, KTrue );
+            }
+        else
+            {
+            aResult->InsertL( 0, KFalse );
+            }
+
+        break;
+        default:
+        status = GetUnmodifiableFieldValueL( aURI, aResult );
+        break;
+        }
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_GETLEAFDATAL_EXIT,
+            "EXIT: CNapBranch::GetLeafDataL;status=%{TError}", status );
+
+    return status;
+    }
+
+//-----------------------------------------------------------------------------
+// CNapBranch::GetUnmodifiableFieldAddResult()
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CNapBranch::GetUnmodifiableFieldAddResult(
+        const TDesC8& aUri, const TDesC8& aObject)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_GETUNMODIFIABLEFIELDADDRESULT_ENTRY,
+            "ENTRY: CNapBranch::GetUnmodifiableFieldAddResult;aUri=%s", aUri );
+
+    CSmlDmAdapter::TError retval( CSmlDmAdapter::ENotFound );
+    TPtrC8 nodeName = CUtils::GetLastURISeg( aUri );
+
+    if ( nodeName.Match( KCMDdfAddrType ) != KErrNotFound )
+        {
+        if ( aObject.Match( KGPRSAddrType ) != KErrNotFound )
+            {
+            retval = CSmlDmAdapter::EOk;
+            }
+        else
+            {
+            retval = CSmlDmAdapter::EInvalidObject;
+            }
+        }
+    else if ( nodeName.Match( KCMDdfAuthType ) != KErrNotFound )
+        {
+        if ( aObject.Match( KGPRSAuthType ) != KErrNotFound )
+            {
+            retval = CSmlDmAdapter::EOk;
+            }
+        else
+            {
+            retval = CSmlDmAdapter::EInvalidObject;
+            }
+        }
+
+    OstTrace1( TRACE_NORMAL, DUP1_CNAPBRANCH_GETUNMODIFIABLEFIELDADDRESULT_EXIT,
+            "EXIT: CNapBranch::GetUnmodifiableFieldAddResult;retval=%{TError}", retval );
+
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// CNapBranch::MapUriToCmAttribute(()
+//-----------------------------------------------------------------------------
+TUint32 CNapBranch::MapUriToCmAttribute(const TDesC8& aUri)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_MAPURITOCMATTRIBUTE_ENTRY,
+            "ENTRY: CNapBranch::MapUriToCmAttribute;aUri=%s", aUri );
+
+    TUint32 retval( 0 );
+
+    TPtrC8 nodeName = CUtils::GetLastURISeg( aUri );
+
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_MAPURITOCMATTRIBUTE_GET_NODE,
+            "CNapBranch::MapUriToCmAttribute;nodeName=%s", nodeName );
+
+    if ( nodeName.Match( KCMDdfName ) != KErrNotFound )
+        {
+        retval = CMManager::ECmName;
+        }
+    else if ( nodeName.Match( KCMDdfAddr ) != KErrNotFound )
+        {
+        // IP branch and NAP branch have both "Addr" leaf. Select between them.
+        if ( aUri.Match( KNapAddrUri ) != KErrNotFound &&
+                aUri.Match( KNapIPv4AddrUri ) == KErrNotFound )
+            {
+            retval = CMManager::EPacketDataAPName;
+            }
+        else if ( aUri.Match( KNapDNSAddr1Uri ) != KErrNotFound )
+            {
+            retval = CMManager::EPacketDataIPNameServer1;
+            }
+        else if ( aUri.Match( KNapDNSAddr2Uri ) != KErrNotFound )
+            {
+            retval = CMManager::EPacketDataIPNameServer2;
+            }
+        }
+    else if ( nodeName.Match( KCMDdfBearerType ) != KErrNotFound )
+        {
+        retval = CMManager::ECmBearerType;
+        }
+    else if ( nodeName.Match( KCMDdfAuthName ) != KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIFAuthName;
+        }
+    else if ( nodeName.Match( KCMDdfAuthSecret ) != KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIFAuthPass;
+        }
+    else if ( nodeName.Match( KCMDdfAutoConfig ) != KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIPAddrFromServer;
+        }
+    else if ( nodeName.Match( KCMDdfIPAddr ) != KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIPAddr;
+        }
+    else if ( nodeName.Match( KCMDdfNetMask ) != KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIPNetmask;
+        }
+    else if ( nodeName.Match( KCMDdfGateway ) != KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIPGateway;
+        }
+    else if ( nodeName.Match( KCMDdfAutoDNS )!= KErrNotFound )
+        {
+        retval = CMManager::EPacketDataIPDNSAddrFromServer;
+        }
+
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_MAPURITOCMATTRIBUTE_EXIT,
+            "EXIT: CNapBranch::MapUriToCmAttribute;retval=%{TError}", retval );
+
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// void CNapBranch::SetLeafData()
+//-----------------------------------------------------------------------------
+void CNapBranch::SetLeafDataL(const TDesC8& aURI, const TDesC8& aObject,
+        TInt aStatusRef, RCmConnectionMethodExt& aCm)
+    {
+    OstTraceExt1( TRACE_FLOW, CNAPBRANCH_SETLEAFDATAL_ENTRY,
+            "ENTRY: CNapBranch::SetLeafDataL;aURI=%s", aURI );
+
+    TUint32 attributeRef( 0 );
+    TBool tmpBool = EFalse;
+    CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+    attributeRef = MapUriToCmAttribute( aURI );
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_SETLEAFDATAL_GET_CMATTRIB,
+            "CNapBranch::SetLeafDataL;CM Attribute:;attributeRef=%{TConnectionMethodCommonAttributes}",
+            attributeRef );
+
+    switch ( attributeRef )
+        {
+        case CMManager::ECmName:
+        case CMManager::EPacketDataIPNameServer1:
+        case CMManager::EPacketDataIPNameServer2:
+        case CMManager::EPacketDataAPName:
+        case CMManager::EPacketDataIFAuthName:
+        case CMManager::EPacketDataIFAuthPass:
+        case CMManager::EPacketDataIPAddr:
+        case CMManager::EPacketDataIPNetmask:
+        case CMManager::EPacketDataIPGateway:
+        aCm.SetStringAttributeL( attributeRef, CUtils::ConvertTo16LC( aObject ) );
+        CleanupStack::PopAndDestroy(); // ConvertTo16LC
+        break;
+        case CMManager::EPacketDataIPAddrFromServer:
+        case CMManager::EPacketDataIPDNSAddrFromServer:
+        if ( CUtils::DesToBool( aObject, tmpBool ) == KErrNone )
+            {
+            aCm.SetBoolAttributeL( attributeRef, tmpBool );
+            }
+        else
+            {
+            status = CSmlDmAdapter::EInvalidObject;
+            }
+        break;
+        case CMManager::ECmBearerType:
+        // BearerType is already set when CM was created.
+        break;
+        default:
+        // Attribute field was not from CM. Check if value is hard coded to CM.
+        status = GetUnmodifiableFieldAddResult( aURI, aObject );
+        break;
+        }
+    iCallback->SetStatusL( aStatusRef, status );
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_SETLEAFDATAL_EXIT,
+            "EXIT: CNapBranch::SetLeafDataL;status=%{TError}", status );
+    }
+
+//-----------------------------------------------------------------------------
+// TBool CNapBranch::SetNodeData()
+//-----------------------------------------------------------------------------
+void CNapBranch::SetNodeDataL(CConnMoNodeElement* aNode,
+        RCmConnectionMethodExt& aCm)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_SETNODEDATAL_ENTRY,
+            "ENTRY: CNapBranch::SetNodeDataL;aNode->iUri=%s", aNode->iUri );
+
+    if ( aNode->iParentLUID.Length() == 0 )
+        {
+        TBuf8<16> addLUID;
+        _LIT8( KFormat, "%d" );    
+        addLUID.Format( KFormat, aCm.GetIntAttributeL( CMManager::ECmId ) );
+        
+        iCallback->SetMappingL( aNode->iUri, addLUID );
+        iCallback->SetStatusL( aNode->iStatusRef, CSmlDmAdapter::EOk );
+
+        OstTrace0( TRACE_NORMAL, CNAPBRANCH_SETNODEDATAL_OK,
+                "CNapBranch::SetNodeDataL; CSmlDmAdapter::EOk" );
+        }
+    else
+        {
+        iCallback->SetStatusL( aNode->iStatusRef, CSmlDmAdapter::EAlreadyExists );
+        OstTrace0( TRACE_NORMAL, CNAPBRANCH_SETNODEDATAL_EXISTS,
+                "CNapBranch::SetNodeDataL; CSmlDmAdapter::EAlreadyExists" );
+        }
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_SETNODEDATAL_EXIT,
+            "EXIT: CNapBranch::SetNodeDataL" );
+    }
+
+//-----------------------------------------------------------------------------
+// TBool CNapBranch::FindNewCmType
+//-----------------------------------------------------------------------------
+TBool CNapBranch::FindNewCmType(TUint32& aBearerType)
+    {
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_FINDNEWCMTYPE_ENTRY, "ENTRY: CNapBranch::FindNewCmType" );
+
+    TBool retval = EFalse;
+    // Find bearer type for creating a connection methdod
+    CConnMoNodeElement* processNode = iBuffer->CacheFind( KNapBearerTypeUri );
+    if ( processNode )
+        {
+        if ( processNode->iObject.Match( KPacketDataBearerType ) != KErrNotFound )
+            {
+            OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_FINDNEWCMTYPE_3GPP,
+                    "CNapBranch::FindNewCmType;Bearer Type: %s", KPacketDataBearerType );
+
+            aBearerType = KUidPacketDataBearerType;
+            retval = ETrue;
+            }
+        else
+            {
+            aBearerType = KInvalidBearerType;
+            }
+        }
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_FINDNEWCMTYPE_EXIT,
+            "EXIT: CNapBranch::FindNewCmType;retval=%d", retval );
+
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// TBool CNapBranch::AllMandatoryNapFieldsFound()
+//-----------------------------------------------------------------------------
+TBool CNapBranch::AllMandatoryNapFieldsFound()
+    {
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_ALLMANDATORYNAPFIELDSFOUND_ENTRY,
+            "ENTRY: CNapBranch::AllMandatoryNapFieldsFound" );
+
+    TBool retval = ETrue;
+
+    // Check that NAP Address addition is found
+    if ( !iBuffer->CacheFind( KNapAddrUri ) )
+        {
+        retval = EFalse;
+        }
+    // Check that dynamic nap node addition is found
+    if ( !iBuffer->CacheFindDynamicNode( KDynamicNapNode ) )
+        {
+        retval = EFalse;
+        }
+
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_ALLMANDATORYNAPFIELDSFOUND_EXIT,
+            "EXIT: CNapBranch::AllMandatoryNapFieldsFound;retval=%d", retval );
+
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// TBool CNapBranch::NapChildURIListL
+// TBool CNapBranch::NapChildURIList( )
+//-----------------------------------------------------------------------------
+void CNapBranch::NapChildURIListL(const TDesC8& aURI, const CArrayFix<
+        TSmlDmMappingInfo>& aPreviousURISegmentList, TInt aResultsRef,
+        TInt aStatusRef, CBufBase& aCurrentURISegmentList)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_NAPCHILDURILISTL_ENTRY,
+            "ENTRY: CNapBranch::NapChildURIListL;aURI=%s", aURI );
+
+    RArray<TUint32> CmArray;
+    CleanupClosePushL( CmArray );
+
+    TPtrC8 napTree = CUtils::GetEndOfURIFromSeg( aURI, KCMDdfNAP );
+
+    GetAllConnectionMethodsL( CmArray, *iCmManager );
+
+    for (TInt i = 0; i < CmArray.Count(); i++ )
+        {
+        TBuf8<KBufferExpandSize> addURISeg;
+        if ( !CheckPreviousURIList( aPreviousURISegmentList, CmArray[i], addURISeg ) )
+            {
+            // Connection Method not found in previous URI list                        
+            addURISeg.Append( aURI );
+            addURISeg.Append( KSlash );
+            addURISeg.Append( KDynamicNodePrefix );
+
+            addURISeg.AppendNumFixedWidth( CmArray[i], EDecimal, 3);
+
+            TBuf8<16> addLUID;
+            _LIT8( KFormat, "%d" );    
+            addLUID.Format( KFormat, CmArray[i] );
+
+            OstTraceExt1( TRACE_NORMAL,
+                    CNAPBRANCH_NAPCHILDURILISTL_ADDED_TO_LIST,
+                    "CNapBranch::NapChildURIListL;Added to list: URI=%s", addURISeg );
+
+            iCallback->SetMappingL( addURISeg, addLUID );
+            }
+
+        // Child is the last segment in uri
+        aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(),
+                CUtils::GetLastURISeg(addURISeg) );
+        aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), KSlash );
+        }
+    iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+    iCallback->SetResultsL( aResultsRef, aCurrentURISegmentList, KNullDesC8 );
+
+    CleanupStack::PopAndDestroy( &CmArray );
+
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_NAPCHILDURILISTL_EXIT,
+            "EXIT: CNapBranch::NapChildURIListL" );
+    }
+//-----------------------------------------------------------------------------
+// CSmlDmAdapter::TError CNapBranch::DeleteObjectL
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CNapBranch::DeleteObjectL(const TDesC8& aURI,
+        const TDesC8& aLUID)
+    {
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_DELETEOBJECTL_PRIVATE_ENTRY,
+            "ENTRY: CNapBranch::DeleteObjectL" );
+
+    CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound;
+
+    // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+    TInt cmId = GetCmIdFromURIL( aURI );
+    
+    RCmConnectionMethodExt cm;
+    
+    if( aLUID.Length() > 0 )
+        {       
+        cmId = CUtils::IntLUID( aLUID );
+        }
+
+    // Check, if referred connection method exists           
+    if ( GetConnectionMethodLC( *iCmManager, cm, cmId ) )
+        {
+        cm.DeleteL();
+        status = CSmlDmAdapter::EOk;
+        OstTrace1( TRACE_NORMAL, CNAPBRANCH_DELETEOBJECTL_PRIVATE_DELETE,
+                "CNapBranch::DeleteObjectL; Connection Method=%u deleted.", cmId );
+        }
+
+    CleanupStack::PopAndDestroy( &cm );
+
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_DELETEOBJECTL_PRIVATE_EXIT,
+            "EXIT: CNapBranch::DeleteObjectL;status=%{TError}", status );
+
+    return status;
+    }
+
+// ======== MEMBER FUNCTIONS ========
+//-----------------------------------------------------------------------------
+// CNapBranch* CNapBranch::NewL( )
+//-----------------------------------------------------------------------------
+CNapBranch* CNapBranch::NewL(MSmlDmCallback* aDmCallback,
+        CAddBuffer* aBuffer, RCmManagerExt* aCmManagerExt)
+    {
+    OstTraceFunctionEntry1( CNAPBRANCH_NEWL_ENTRY, ( TUint )( aDmCallback ) );
+
+    CNapBranch* self = new (ELeave) CNapBranch( aDmCallback );
+    CleanupStack::PushL(self);
+
+    self->ConstructL( aBuffer, aCmManagerExt );
+
+    CleanupStack::Pop(self);
+
+    OstTraceFunctionExit1( CNAPBRANCH_NEWL_EXIT, ( TUint )( self ) );
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+// CNapBranch::CNapBranch()
+//------------------------------------------------------------------------------
+CNapBranch::CNapBranch(MSmlDmCallback* aDmCallback) :
+    CBranchBase(aDmCallback)
+    {
+    OstTraceFunctionEntry1( CNAPBRANCH_CONSTRUCTOR_ENTRY, this );
+
+    iCallback = aDmCallback;
+
+    OstTraceFunctionExit1( CNAPBRANCH_CONSTRUCTOR_EXIT, this );
+    }
+
+//------------------------------------------------------------------------------
+// CNapBranch::~CNapBranch()
+//------------------------------------------------------------------------------
+CNapBranch::~CNapBranch()
+    {
+    OstTraceFunctionEntry1( CNAPBRANCH_DESTRUCTOR_ENTRY, this );
+
+    OstTraceFunctionExit1( CNAPBRANCH_DESTRUCTOR_EXIT, this );
+    }
+
+//=============================================
+//      CNapBranch::ConstructL()
+//      Second phase constructor.
+//=============================================
+void CNapBranch::ConstructL(CAddBuffer* aBuffer, RCmManagerExt* aCmManagerExt)
+    {
+    OstTraceFunctionEntry1( CNAPBRANCH_CONSTRUCTL_ENTRY, this );
+
+    iBuffer = aBuffer;
+    iCmManager = aCmManagerExt;
+
+    OstTraceFunctionExit1( CNAPBRANCH_CONSTRUCTL_EXIT, this );
+    }
+
+//------------------------------------------------------------------------------
+//  void CNapBranch::DDFStructureL()
+//------------------------------------------------------------------------------
+void CNapBranch::DDFStructureL(MSmlDmDDFObject& aDDF)
+    {
+    OstTraceFunctionEntry0( CNAPBRANCH_DDFSTRUCTUREL_ENTRY );
+
+    //
+    // Set rest acceptable operations for data itself
+    //
+    TSmlDmAccessTypes aclTypesNoDelete;
+    aclTypesNoDelete.SetGet();
+    aclTypesNoDelete.SetReplace();
+    aclTypesNoDelete.SetAdd();
+
+    TSmlDmAccessTypes aclTypesNoGet;
+    aclTypesNoGet.SetReplace();
+    aclTypesNoGet.SetAdd();
+    aclTypesNoGet.SetDelete();
+
+    TSmlDmAccessTypes aclTypesOnlyGet;
+    aclTypesOnlyGet.SetGet();
+
+    MSmlDmDDFObject& nIDDDF = aDDF.AddChildObjectL( KCMDdfID ); // ID
+    CUtils::FillNodeInfoL( nIDDDF,
+            aclTypesOnlyGet,
+            MSmlDmDDFObject::EOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nNameDDF = aDDF.AddChildObjectL( KCMDdfName ); // Name
+    CUtils::FillNodeInfoL( nNameDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAddrTypeDDF = aDDF.AddChildObjectL( KCMDdfAddrType ); // AddrType
+    CUtils::FillNodeInfoL( nAddrTypeDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAddrDDF = aDDF.AddChildObjectL( KCMDdfAddr ); // Addr
+    CUtils::FillNodeInfoL( nAddrDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nIPDDF = aDDF.AddChildObjectL( KCMDdfIP ); // IP
+    CUtils::FillNodeInfoL( nIPDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nIPv4DDF = nIPDDF.AddChildObjectL( KCMDdfIPv4 ); // IPv4
+    CUtils::FillNodeInfoL( nIPv4DDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+    IpBranchDDFStructureL( nIPv4DDF );
+
+    MSmlDmDDFObject& nAuthInfoDDF = aDDF.AddChildObjectL( KCMDdfAuthInfo ); // AuthInfo
+    CUtils::FillNodeInfoL( nAuthInfoDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAuthNameDDF = nAuthInfoDDF.AddChildObjectL( KCMDdfAuthName ); // AuthName
+    CUtils::FillNodeInfoL( nAuthNameDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAuthTypeDDF = nAuthInfoDDF.AddChildObjectL( KCMDdfAuthType ); // AuthType
+    CUtils::FillNodeInfoL( nAuthTypeDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAuthSecretDDF = nAuthInfoDDF.AddChildObjectL( KCMDdfAuthSecret ); // AuthSecret
+    CUtils::FillNodeInfoL( nAuthSecretDDF,
+            aclTypesNoGet,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nBearerTypeDDF = aDDF.AddChildObjectL( KCMDdfBearerType ); // BearerType
+    CUtils::FillNodeInfoL( nBearerTypeDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nBearerParamsDDF = aDDF.AddChildObjectL( KCMDdfBearerParams ); // BearerParams
+    CUtils::FillNodeInfoL( nBearerParamsDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+
+    OstTraceFunctionExit0( CNAPBRANCH_DDFSTRUCTUREL_EXIT );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::IpBranchDDFStructureL
+// -------------------------------------------------------------------------------------
+void CNapBranch::IpBranchDDFStructureL(MSmlDmDDFObject& nIPvXDDF)
+    {
+    OstTraceFunctionEntry0( CNAPBRANCH_IPBRANCHDDFSTRUCTUREL_ENTRY );
+
+    //
+    // Set rest acceptable operations for data itself
+    //
+    TSmlDmAccessTypes aclTypesNoDelete;
+    aclTypesNoDelete.SetGet();
+    aclTypesNoDelete.SetReplace();
+    aclTypesNoDelete.SetAdd();
+
+    MSmlDmDDFObject& nAutoConfigDDF = nIPvXDDF.AddChildObjectL( KCMDdfAutoConfig ); // AutoConfig
+    CUtils::FillNodeInfoL( nAutoConfigDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nIPAddrDDF = nIPvXDDF.AddChildObjectL( KCMDdfIPAddr ); // IPAddr
+    CUtils::FillNodeInfoL( nIPAddrDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nNetMaskDDF = nIPvXDDF.AddChildObjectL( KCMDdfNetMask ); // NetMask
+    CUtils::FillNodeInfoL( nNetMaskDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nGatewayDDF = nIPvXDDF.AddChildObjectL( KCMDdfGateway ); // Gateway
+    CUtils::FillNodeInfoL( nGatewayDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAutoDNSDDF = nIPvXDDF.AddChildObjectL( KCMDdfAutoDNS ); // AutoDNS
+    CUtils::FillNodeInfoL( nAutoDNSDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EBool,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nDNSDDF = nIPvXDDF.AddChildObjectL( KCMDdfDNS ); // DNS
+    CUtils::FillNodeInfoL( nDNSDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nServersDDF = nDNSDDF.AddChildObjectL( KCMDdfServers ); // Servers
+    CUtils::FillNodeInfoL( nServersDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EZeroOrOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nServersRootDDF = nServersDDF.AddChildObjectGroupL(); // Servers/<x>
+    CUtils::FillNodeInfoL( nServersRootDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EOneOrMore,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::ENode,
+            KNullDesC8 );
+
+    MSmlDmDDFObject& nAddrDDF = nServersRootDDF.AddChildObjectL( KCMDdfAddr ); // Addr
+    CUtils::FillNodeInfoL( nAddrDDF,
+            aclTypesNoDelete,
+            MSmlDmDDFObject::EOne,
+            MSmlDmDDFObject::EDynamic,
+            MSmlDmDDFObject::EChr,
+            KNullDesC8 );
+
+    OstTraceFunctionExit0( CNAPBRANCH_IPBRANCHDDFSTRUCTUREL_EXIT );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::UpdateLeafObjectL
+// -------------------------------------------------------------------------------------
+void CNapBranch::UpdateLeafObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+        const TDesC8& aObject, const TDesC8& /*aType*/, TInt aStatusRef)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_UPDATELEAFOBJECTL_ENTRY,
+            "ENTRY: CNapBranch::UpdateLeafObjectL;aURI=%s", aURI );
+
+    // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+    TInt cmId = GetCmIdFromURIL( aURI );
+    
+    if ( aLUID.Length() == 0 && cmId == KErrNotFound )
+        {
+            // New node, add to buffer
+            iBuffer->AddNodeToBufferL( aURI, aLUID, aObject, aStatusRef );    
+        }  
+    else
+        {
+        // Existing node, update data immediately
+        TInt err( KErrNone );
+        RCmConnectionMethodExt cm;
+        if ( cmId == KErrNotFound )
+            {
+            cmId = CUtils::IntLUID( aLUID );
+            }
+            
+        TRAP( err, cm = iCmManager->ConnectionMethodL( cmId ) );
+        CleanupClosePushL( cm );
+
+        if ( !err )
+            {
+            OstTrace0( TRACE_NORMAL, CNAPBRANCH_UPDATELEAFOBJECTL, "CNapBranch::UpdateLeafObjectL; Update existing node data immediately." );
+            SetLeafDataL( aURI, aObject, aStatusRef, cm );
+            cm.UpdateL();
+            }
+        else
+            {
+            OstTrace0( TRACE_NORMAL, DUP1_CNAPBRANCH_UPDATELEAFOBJECTL, "CNapBranch::UpdateLeafObjectL; Stale LUID - Buffer setting." );
+            iBuffer->AddNodeToBufferL( aURI, KNullDesC8, aObject, aStatusRef );
+            }
+
+        CleanupStack::PopAndDestroy( &cm );
+        }
+
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_UPDATELEAFOBJECTL_EXIT,
+            "EXIT: CNapBranch::UpdateLeafObjectL" );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::DeleteObjectL
+// -------------------------------------------------------------------------------------
+void CNapBranch::DeleteObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+        TInt aStatusRef)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_DELETEOBJECTL_ENTRY,
+            "ENTRY: CNapBranch::DeleteObjectL;aURI=%s", aURI );
+
+    CSmlDmAdapter::TError status = CSmlDmAdapter::EError;
+
+    TPtrC8 napTree = CUtils::GetEndOfURIFromSeg( aURI, KCMDdfNAP );
+
+    if ( napTree.Match( KDynamicNapNode ) != KErrNotFound &&
+            napTree.Match( KDynamicNapNodeChildUri ) == KErrNotFound )
+        {
+
+        status = DeleteObjectL( aURI, aLUID );
+
+        }
+
+    iCallback->SetStatusL( aStatusRef, status );
+
+    OstTrace1( TRACE_NORMAL, CNAPBRANCH_DELETEOBJECTL_EXIT,
+            "EXIT: CNapBranch::DeleteObjectL;status=%{TError}", status );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::FetchLeafObjectL
+// -------------------------------------------------------------------------------------
+void CNapBranch::FetchLeafObjectL(const TDesC8& aURI, const TDesC8& aLUID,
+        const TDesC8& aType, TInt aResultsRef, TInt aStatusRef)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTL_ENTRY,
+            "ENTRY: CNapBranch::FetchLeafObjectL;aURI=%s", aURI );
+    TInt cmId( KErrNotFound );
+    if ( aLUID.Length() > 0 )
+         {
+         cmId = CUtils::IntLUID( aLUID );      
+         }
+     else
+         {
+         // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+         cmId = GetCmIdFromURIL( aURI );
+         }
+    if ( cmId != KErrNotFound )
+        {
+        CBufBase* result = CBufFlat::NewL( KBufferExpandSize );
+        CleanupStack::PushL( result );
+
+        // Open connection method.
+        RCmConnectionMethodExt cm;
+        TRAPD(err, cm = iCmManager->ConnectionMethodL( cmId ) );
+        if (err != KErrNone )
+            {
+            CleanupStack::PopAndDestroy( result );
+            iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            OstTrace0( TRACE_NORMAL, CNAPBRANCH_DUP_FETCHLEAFOBJECTL_NOT_FOUND, "CSmlDmAdapter::ENotFound" );
+            return;
+            }
+        CleanupClosePushL( cm );
+
+        // Find data from CM
+        CSmlDmAdapter::TError status = GetLeafDataL( aURI,
+                cm,
+                result );
+
+        OstTrace1( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTL_STATUS,
+                "CNapBranch::FetchLeafObjectL;status=%{TError}", status );
+
+        if ( status == CSmlDmAdapter::EOk )
+            {
+            iCallback->SetResultsL( aResultsRef, *result, aType );
+            }
+        iCallback->SetStatusL( aStatusRef, status );
+
+        CleanupStack::PopAndDestroy( &cm );
+        CleanupStack::PopAndDestroy( result );
+        }
+    else
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        OstTrace0( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTL_NOT_FOUND, "CSmlDmAdapter::ENotFound" );
+        }
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTL_EXIT, "EXIT: CNapBranch::FetchLeafObjectL" );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::FetchLeafObjectSizeL
+// -------------------------------------------------------------------------------------
+void CNapBranch::FetchLeafObjectSizeL(const TDesC8& aURI,
+        const TDesC8& aLUID, const TDesC8& aType, TInt aResultsRef,
+        TInt aStatusRef)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY,
+            "ENTRY: CNapBranch::FetchLeafObjectSizeL;aURI=%s", aURI );
+    TInt cmId( KErrNotFound );
+    if ( aLUID.Length() > 0 )
+         {
+         cmId = CUtils::IntLUID( aLUID );        
+         }
+     else
+         {
+         // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+         cmId = GetCmIdFromURIL( aURI );
+         }
+    if ( cmId != KErrNotFound )
+        {
+        CBufBase* result = CBufFlat::NewL( KBufferExpandSize );
+        CleanupStack::PushL(result);
+
+        // Open connection method.
+        RCmConnectionMethodExt cm;
+        TRAPD(err, cm = iCmManager->ConnectionMethodL( cmId ) );
+        if (err != KErrNone )
+            {
+            CleanupStack::PopAndDestroy( result );
+            iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            OstTrace0( TRACE_NORMAL, CNAPBRANCH_DUP1_FETCHLEAFOBJECTL_NOT_FOUND, "CSmlDmAdapter::ENotFound" );
+            return;
+            }
+        CleanupClosePushL( cm );
+
+        // Find data from CM
+        CSmlDmAdapter::TError status = GetLeafDataL( aURI,
+                cm,
+                result );
+
+        OstTrace1( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTSIZEL_STATUS,
+                "CNapBranch::FetchLeafObjectSizeL;status=%{TError}", status );
+
+        if ( status == CSmlDmAdapter::EOk )
+            {
+            TInt size = result->Size();
+            TBuf8<KMaxResultSize> sizeStr;
+            sizeStr.AppendNum( size );
+
+            result->Reset();
+            result->InsertL( 0, sizeStr );
+
+            iCallback->SetResultsL( aResultsRef, *result, aType);
+            }
+        iCallback->SetStatusL( aStatusRef, status );
+
+        CleanupStack::PopAndDestroy( &cm );
+        CleanupStack::PopAndDestroy( result );
+        }
+    else
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        OstTrace0( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTSIZEL_NOT_FOUND,
+                "CNapBranch::FetchLeafObjectSizeL;CSmlDmAdapter::ENotFound" );
+        }
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_FETCHLEAFOBJECTSIZEL_EXIT,
+            "EXIT: CNapBranch::FetchLeafObjectSizeL" );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::ChildURIListL
+// -------------------------------------------------------------------------------------
+void CNapBranch::ChildURIListL(const TDesC8& aURI, const TDesC8& aLUID,
+        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+        TInt aResultsRef, TInt aStatusRef)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_CHILDURILISTL_ENTRY,
+            "ENTRY: CNapBranch::ChildURIListL;aURI=%s", aURI );
+    
+       
+    TPtrC8 napTree = CUtils::GetEndOfURIFromSeg( aURI,KCMDdfNAP );
+
+    CBufBase* currentURISegmentList = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( currentURISegmentList );    
+    
+    // First handle ./NAP as a special case
+    if ( napTree.Match( KCMDdfNAP ) != KErrNotFound )
+        {
+        NapChildURIListL( aURI,
+                aPreviousURISegmentList,
+                aResultsRef,
+                aStatusRef,
+                *currentURISegmentList );
+        CleanupStack::PopAndDestroy( currentURISegmentList );
+        return;
+        }
+
+    // Then check if the CM exists. Use LUID or predefined ID    
+    TInt cmId( KErrNotFound );
+    if ( aLUID.Length() > 0 )
+        {
+        cmId = CUtils::IntLUID( aLUID );
+        }
+    else
+        {
+        // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+        cmId = GetCmIdFromURIL( aURI );
+        }
+    // If after this cmId is still not found then the branch does not exist
+    if ( cmId == KErrNotFound )
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        CleanupStack::PopAndDestroy( currentURISegmentList );
+        OstTrace0( TRACE_NORMAL, DUP1_CNAPBRANCH_CHILDURILISTL, "CNapBranch::ChildURIListL; CSmlDmAdapter::ENotFound" );
+        return;
+        }
+    
+    RCmConnectionMethodExt cm;
+    // Check it the method actually can be found      
+    if ( !GetConnectionMethodLC( *iCmManager, cm, cmId ) )       
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        CleanupStack::PopAndDestroy( &cm );
+        CleanupStack::PopAndDestroy( currentURISegmentList );        
+        OstTrace0( TRACE_NORMAL, DUP2_CNAPBRANCH_CHILDURILISTL, "CNapBranch::ChildURIListL; CSmlDmAdapter::ENotFound" );
+        return;
+        }            
+    CleanupStack::PopAndDestroy( &cm );    
+            
+    if ( napTree.Match( KDynamicNapNode ) != KErrNotFound &&
+            napTree.Match( KDynamicNapNodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMNapFields ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );        
+        }
+    // ./NAP/*/IP
+
+    else if ( napTree.Match( KDynamicIPNode ) != KErrNotFound &&
+            napTree.Match( KDynamicIPNodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMNIPFields );
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+        }
+    // ./NAP/*/IP/IPv4
+
+    else if ( napTree.Match( KDynamicIPv4Node ) != KErrNotFound &&
+            napTree.Match( KDynamicIPv4NodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMNIPv4Fields );
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+        }
+    // ./NAP/*/IP/IPv4/DNS
+
+    else if ( napTree.Match( KDynamicIPv4DnsNode ) != KErrNotFound &&
+            napTree.Match( KDynamicIPv4DnsNodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMNDNSFields );
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+        }
+    // ./NAP/*/IP/IPv4/DNS/Servers
+
+    else if ( napTree.Match( KDynamicIPv4DnsServersNode ) != KErrNotFound )
+        {
+        GetAllDynamicNodesL( aURI,
+                aLUID,
+                aPreviousURISegmentList,
+                aResultsRef,
+                aStatusRef,
+                *iCmManager,
+                *currentURISegmentList,
+                KCMDdfServer,
+                KMaxDnsAddr,
+                iCallback );
+        }
+    // ./NAP/*/IP/IPv4/DNS/Servers*
+
+    else if ( napTree.Match( KDynamicIPv4DnsServersNodeChildUri ) != KErrNotFound &&
+            napTree.Match( KDynamicIPv4DnsServersNodeChildUriNodes ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMNDNSServersFields ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+        }
+    // ./NAP/*/AuthInfo
+
+    else if ( napTree.Match( KDynamicAuthInfoNode ) != KErrNotFound &&
+            napTree.Match( KDynamicAuthInfoNodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMNAuthInfoFields );
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+        }
+    else
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        OstTrace0( TRACE_NORMAL, CNAPBRANCH_CHILDURILISTL,
+                "CNapBranch::ChildURIListL; CSmlDmAdapter::ENotFound" );
+        }
+
+    CleanupStack::PopAndDestroy( currentURISegmentList );
+
+    OstTrace0( TRACE_NORMAL, DUP1_CNAPBRANCH_CHILDURILISTL_EXIT,
+            "EXIT: CNapBranch::ChildURIListL" );
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::AddNodeObjectL
+// -------------------------------------------------------------------------------------
+void CNapBranch::AddNodeObjectL(const TDesC8& aURI,
+        const TDesC8& aParentLUID, TInt aStatusRef)
+    {
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_ADDNODEOBJECTL_ENTRY,
+            "ENTRY: CNapBranch::AddNodeObjectL;aURI=%s", aURI );
+
+    if ( aParentLUID.Length() == 0 )
+        {        
+        // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+        TInt cmId = GetCmIdFromURIL( aURI );
+        RCmConnectionMethodExt cm;
+        // Check if CM exists
+        if ( cmId != KErrNotFound && GetConnectionMethodLC( *iCmManager, cm, cmId ) )
+            {
+            CleanupStack::PopAndDestroy( &cm );
+            // Pre-defined CM already exists for this ID.
+            // NAPs must be added in one message. If luid is given add is done to existing AP or node
+            iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+            OstTrace0( TRACE_NORMAL, CNAPBRANCH_ADDNODEOBJECTL, 
+                    "CNapBranch::AddNodeObjectL; CSmlDmAdapter::EAlreadyExists because tried to add in predefined node format that exists" );
+            return;
+            }                          
+        if ( cmId != KErrNotFound )
+            {
+            CleanupStack::PopAndDestroy( &cm );
+            }
+
+        // New node, add to buffer
+        iBuffer->AddNodeToBufferL( aURI, aParentLUID, aStatusRef );
+        //iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        OstTrace0( TRACE_NORMAL, CNAPBRANCH_ADDNODEOBJECTL_NEW_NODE,
+                "CNapBranch::AddNodeObjectL;New node -> Add to buffer." );
+        }
+    else
+        {
+        // Sanity check: If the dynamic name of the NAP node has is the same as deleted previously and
+        // DM Framework hasn't updated the tree, it will give the LUID when calling this method. Thus,
+        // it's needed to check that the connection method really exists.
+        RCmConnectionMethodExt cm;        
+
+        if ( !GetConnectionMethodLC( *iCmManager, cm,  CUtils::IntLUID( aParentLUID) ) )
+            {
+            // New node, add to buffer
+            iBuffer->AddNodeToBufferL( aURI, KNullDesC8, aStatusRef );
+            OstTrace0( TRACE_NORMAL, CNAPBRANCH_ADDNODEOBJECTL_NEW_NODE2,
+                    "CNapBranch::AddNodeObjectL;New node -> Add to buffer." );
+            }
+        else
+            {
+            // NAPs must be added in one message. If luid is given add is done to existing AP or node
+            iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+            OstTrace0( TRACE_NORMAL, CNAPBRANCH_ADDNODEOBJECTL_ALLREADY_EXISTS,
+                    "CNapBranch::AddNodeObjectL; CSmlDmAdapter::EAlreadyExists" );
+            }
+
+        CleanupStack::PopAndDestroy( &cm );
+        }
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_ADDNODEOBJECTL_EXIT, "EXIT: CNapBranch::AddNodeObjectL" );
+
+    }
+
+// -------------------------------------------------------------------------------------
+// CNapBranch::ProcessNodeBufferL()
+// -------------------------------------------------------------------------------------
+void CNapBranch::ProcessBufferL()
+    {
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_PROCESSBUFFERL_ENTRY, "ENTRY: CNapBranch::ProcessBufferL" );
+
+    TUint32 bearerType;
+
+    RPointerArray<CConnMoNodeElement> napNodes( KNumOfNAPNodes );
+    CleanupClosePushL( napNodes );
+
+    while ( iBuffer->GetGroup( KCMDdfNAP, &napNodes ) != KErrNotFound )
+        {
+
+        if ( FindNewCmType( bearerType ) && AllMandatoryNapFieldsFound() )
+            {
+            // Create new connection method and update nodes
+            RCmConnectionMethodExt cm = iCmManager->CreateConnectionMethodL( bearerType );
+            CleanupClosePushL( cm );
+            cm.UpdateL();
+
+            for ( TInt i = 0; i < napNodes.Count(); ++i )
+                {
+                if ( napNodes[i]->iLeaf )
+                    {
+                    // Leaf data found
+                    SetLeafDataL( napNodes[i]->iUri,
+                            napNodes[i]->iObject,
+                            napNodes[i]->iStatusRef, cm );
+                    napNodes[i]->iProcessed = ETrue;
+                    }
+                else
+                    {
+                    // Node has no leaf data
+                    SetNodeDataL( napNodes[i], cm);
+                    napNodes[i]->iProcessed = ETrue;
+                    }
+                }
+            cm.UpdateL();
+            CleanupStack::PopAndDestroy( &cm );
+            }
+        else
+            {
+            for ( TInt i = 0; i < napNodes.Count(); ++i )
+                {
+                iCallback->SetStatusL( napNodes[i]->iStatusRef, CSmlDmAdapter::EError );
+                napNodes[i]->iProcessed = ETrue;
+                }
+            }
+        napNodes.Reset();
+        }
+    CleanupStack::Pop( &napNodes );
+    napNodes.Close();
+
+    OstTrace0( TRACE_NORMAL, CNAPBRANCH_PROCESSBUFFERL_EXIT, "EXIT: CNapBranch::ProcessBufferL" );
+
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::GetDynamicAPNodeUri( const TDesC8& aURI )
+// returns NAP/xxx URI
+//------------------------------------------------------------------------------
+TPtrC8 CNapBranch::GetDynamicNAPNodeUri(const TDesC8& aURI)
+    {
+
+    OstTraceExt1( TRACE_NORMAL, CNAPBRANCH_GETDYNAMICNAPNODEURI, "CNapBranch::GetDynamicNAPNodeUri;aURI=%s", aURI );
+
+    TInt i= 0;
+    for ( i = aURI.Find( KCMDdfNAP ) + 4; i < aURI.Length(); i++ )
+        {
+        if( aURI[i] == '/' )
+            {
+            break;
+            }
+        }
+    OstTraceExt1( TRACE_NORMAL, DUP1_CNAPBRANCH_GETDYNAMICNAPNODEURI, "CNapBranch::GetDynamicNAPNodeUri;return URI=%s", aURI.Left( i ) );
+
+    return aURI.Left( i );
+    }
+
+//--------------------------------------------------------------------
+//TInt CNapBranch::IsNAPUriFormatMatchPredefined(const TDesC8 & aURI)
+//
+//-------------------------------------------------------------------
+
+
+TBool CNapBranch::IsNAPUriFormatMatchPredefined(const TDesC8 & aURI)
+{
+    if( aURI.Match( _L8( "NAP/NAPId*" ) ) != KErrNotFound )
+    {
+        return ETrue;
+    }
+    else
+    {
+        return EFalse;
+    }
+}
+//------------------------------------------------------------------------------
+// TUint32 CNapBranch::GetAPIdFromURIL(const TDesC8& aURI)
+//         Get NAP id for given aURI
+//------------------------------------------------------------------------------
+TInt CNapBranch::GetCmIdFromURIL(const TDesC8& aURI)
+    {
+    TInt ret(KErrNotFound);
+    
+    if( !IsNAPUriFormatMatchPredefined( aURI ) )
+        {
+        // Cannot get CmIds from any other format URIs than predefined
+        return ret;
+        }
+   
+    TLex8 lex;
+    //  Find xxx from ./NAP/NAPIdxxx/...    
+    TInt start = aURI.Find( KDynamicNodePrefix ) + KDynamicNodePrefix().Length();
+    lex = aURI.Mid( start, 3 );
+    lex.Val( ret );
+    
+    return ret;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/ProxyBranch.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,1112 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <e32base.h>
+#include <cmconnectionmethoddef.h>
+#include <nsmldmtreedbclient.h>
+
+#include "ProxyBranch.h"
+#include "Utils.h"
+
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ProxyBranchTraces.h"
+#endif
+
+// ------------------------------------------------------------------------------------------------
+// Constants
+// ------------------------------------------------------------------------------------------------
+_LIT8( KCMProxyDdf,             "Proxy" );
+_LIT8( KCMProxyDdfProxyId,      "ProxyId" );
+_LIT8( KCMProxyDdfName,         "Name" );
+_LIT8( KCMProxyDdfAddr,         "Addr" );
+_LIT8( KCMProxyDdfToConRef,     "ToConRef" );
+_LIT8( KCMProxyDdfConRef,       "ConRef" );
+_LIT8( KCMProxyDdfPorts,        "Ports" );
+_LIT8( KCMProxyDdfPortNbr,      "PortNbr" );
+_LIT8( KCMProxyDdfProxyParams,  "ProxyParams" );
+_LIT8( KCMProxyDdfProxyType,    "ProxyType" );
+_LIT8( KCMProxyDdfWap,          "WAP" );
+_LIT8( KCMProxyDdfStartpg,      "Startpg" );
+
+_LIT8( KCMProxyFields,          "ProxyId/Addr/ToConRef/Ports/ProxyType/ProxyParams" );
+_LIT8( KCMProxyParamsFields,    "WAP" );
+_LIT8( KCMProxyWapFields,       "Startpg" );
+_LIT8( KCMProxyNodeSeparator,   "/" );
+
+_LIT8( KDynamicProxyNodePattern,            "Proxy/*" );
+_LIT8( KDynamicProxyNodeChildUri,           "Proxy/*/*" );
+_LIT8( KDynamicToConrefNode,                "Proxy/*/ToConRef" ); 
+_LIT8( KDynamicToConrefNodeChildUri,        "Proxy/*/ToConRef/*" ); 
+_LIT8( KDynamicToConrefNodeChildUriNodes,   "Proxy/*/ToConRef/*/*" );
+_LIT8( KDynamicPortsNode,                   "Proxy/*/Ports" );
+_LIT8( KDynamicPortsNodeChildUri,           "Proxy/*/Ports/*" );
+_LIT8( KDynamicPortsNodeChildUriNodes,      "Proxy/*/Ports/*/*" );
+_LIT8( KDynamicProxyParamsNode,             "Proxy/*/ProxyParams" );
+_LIT8( KDynamicProxyParamsNodeChildUri,     "Proxy/*/ProxyParams/*" );
+_LIT8( KDynamicProxyParamsWapNode,          "Proxy/*/ProxyParams/WAP" );
+
+_LIT8( KProxyAddrUri,                     "Proxy/*/Addr");
+_LIT8( KProxyConrefUri,                   "Proxy/*/ConRef");
+
+_LIT8( KRoot,                             "./");
+
+TInt const KBufferExpandSize = 128;
+TInt const KNumOfProxyNodes = 8;
+
+_LIT8( KDynamicNodePrefix,                  "ProxyId");
+
+// ======== LOCAL FUNCTIONS =========
+
+//-----------------------------------------------------------------------------
+// CSmlDmAdapter::TError CProxyBranch::FetchLeafObjectL()
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CProxyBranch::FetchLeafObjectL( const TDesC8& aURI,
+                                                      const TDesC8& aLUID,
+                                                      CBufBase& aLeafObject )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTL_ENTRY, 
+                  "ENTRY: CProxyBranch::FetchLeafObjectL;aURI=%s", aURI );
+    
+    RCmConnectionMethodExt cm;    
+    CSmlDmAdapter::TError status = CSmlDmAdapter::ENotAllowed;
+    TPtrC8 leafNode = CUtils::GetLastURISeg( aURI );
+    TInt cmId( KErrNotFound );
+    if ( aLUID.Length() > 0 )
+         {
+         cmId = CUtils::IntLUID( aLUID );         
+         }
+     else
+         {
+         // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+         cmId = GetCmIdFromURIL( aURI );
+         }
+    
+    if ( cmId == KErrNotFound || !GetConnectionMethodLC( *iCmManager, cm, cmId ) || 
+            !cm.GetBoolAttributeL(CMManager::ECmProxyUsageEnabled) )
+        {
+        if ( cmId != KErrNotFound )
+            {
+            CleanupStack::PopAndDestroy( &cm );
+            }
+        status = CSmlDmAdapter::ENotFound;
+        
+        OstTrace1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTL_NOT_FOUND, 
+                   "CProxyBranch::FetchLeafObjectL;status=%{TError}", status );
+        
+        return status;
+        }
+    
+    if ( leafNode.Compare( KCMProxyDdfAddr ) == 0 )
+        {
+        HBufC* serverName = cm.GetStringAttributeL( CMManager::ECmProxyServerName );
+        
+        CleanupStack::PushL( serverName );
+        aLeafObject.InsertL( 0, CUtils::ConvertTo8LC( *serverName ) );
+        
+        CleanupStack::PopAndDestroy(); // CUtils::ConvertTo8LC
+        CleanupStack::PopAndDestroy( serverName );
+        
+        status = CSmlDmAdapter::EOk;
+        }
+    else if ( leafNode.Compare( KCMProxyDdfConRef ) == 0 )
+        {
+        TBuf8<KBufferExpandSize> conRef;
+        TBuf8<KBufferExpandSize> napChildList;
+        CBufBase* napChildListBuf = CBufFlat::NewL( KSmlMaxURISegLen );
+        CleanupStack::PushL( napChildListBuf );      
+        
+        // Get all NAP node childs
+        iCallback->FetchLinkL( _L8("./NAP"), *napChildListBuf,  status );
+        napChildListBuf->Read( 0, napChildList, napChildListBuf->Size() );
+        
+        if ( status == CSmlDmAdapter::EOk)
+            {
+            // Reset operation end status 
+            status = CSmlDmAdapter::EError;
+            
+            // Find correct Uri
+            while ( napChildList.Length() > 0 && status != CSmlDmAdapter::EOk )
+                {
+                conRef.Append( _L("NAP/") );
+                CUtils::AppendFirstURISeg( napChildList, conRef );
+                HBufC8* napLuid = iCallback->GetLuidAllocL( conRef );
+                if ( cmId == CUtils::IntLUID( *napLuid ) )
+                    {
+                    status = CSmlDmAdapter::EOk;
+                    aLeafObject.InsertL( 0, conRef );
+                    }
+                delete napLuid;
+                conRef.Delete( 0, conRef.Length() );
+                }
+            }
+        
+        CleanupStack::PopAndDestroy( napChildListBuf );
+        }
+    else if ( leafNode.Compare( KCMProxyDdfPortNbr ) == 0 )
+        {
+        TInt proxyPort = cm.GetIntAttributeL( CMManager::ECmProxyPortNumber );
+                        
+        aLeafObject.InsertL( 0, CUtils::IntToCharL( proxyPort ) );
+        CleanupStack::PopAndDestroy();
+                
+        status = CSmlDmAdapter::EOk;
+        }
+    else if ( leafNode.Compare( KCMProxyDdfStartpg ) == 0 )
+        {
+        HBufC* startPage = cm.GetStringAttributeL( CMManager::ECmStartPage );
+        
+        CleanupStack::PushL( startPage );
+        aLeafObject.InsertL( 0, CUtils::ConvertTo8LC( *startPage ) );
+        
+        CleanupStack::PopAndDestroy(); // CUtils::ConvertTo8LC
+        CleanupStack::PopAndDestroy( startPage );
+        
+        status = CSmlDmAdapter::EOk;
+        }
+    else if ( leafNode.Compare( KCMProxyDdfProxyType ) == 0 )
+        {
+        HBufC* protocolName = cm.GetStringAttributeL( CMManager::ECmProxyProtocolName );
+        
+        CleanupStack::PushL( protocolName );
+        aLeafObject.InsertL( 0, CUtils::ConvertTo8LC( *protocolName ) );
+        
+        CleanupStack::PopAndDestroy(); // CUtils::ConvertTo8LC
+        CleanupStack::PopAndDestroy( protocolName );
+        
+        status = CSmlDmAdapter::EOk;
+        }
+    else if ( leafNode.Compare( KCMProxyDdfProxyId ) == 0 )
+        {
+        TPtrC8 dynamicNode = GetDynamicProxyNodeUri( aURI );
+        aLeafObject.InsertL( 0, dynamicNode );
+        status = CSmlDmAdapter::EOk;
+        }
+
+    CleanupStack::PopAndDestroy( &cm );
+    
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTL_EXIT, 
+               "EXIT: CProxyBranch::FetchLeafObjectL;status=%{TError}", status );
+    return status;
+    }
+
+//-----------------------------------------------------------------------------
+// TUint32 CProxyBranch::CheckForUnmodifiableField()
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CProxyBranch::CheckForUnmodifiableField(const TDesC8& aUri)
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_CHECKFORUNMODIFIABLEFIELD_ENTRY, 
+                  "ENTRY: CProxyBranch::CheckForUnmodifiableField;aUri=%s", aUri );
+    
+    CSmlDmAdapter::TError retval(CSmlDmAdapter::ENotFound);
+    TPtrC8 nodeName = CUtils::GetLastURISeg(aUri);
+       
+    if ( nodeName.Match(KCMProxyDdfName) != KErrNotFound ||
+         nodeName.Match(KCMProxyDdfConRef) != KErrNotFound  )
+        {
+        retval = CSmlDmAdapter::EOk;
+        }
+    
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_CHECKFORUNMODIFIABLEFIELD_EXIT, 
+               "EXIT: CProxyBranch::CheckForUnmodifiableField;retval=%{TError}", retval );
+    
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// TBool CProxyBranch::MapUriToCmAttribute()
+//-----------------------------------------------------------------------------
+TUint32 CProxyBranch::MapUriToCmAttribute( const TDesC8& aUri )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_MAPURITOCMATTRIBUTE_ENTRY, 
+                  "ENTRY: CProxyBranch::MapUriToCmAttribute;aUri=%s", aUri );
+    
+    TUint32 retval(0);
+    
+    TPtrC8 nodeName = CUtils::GetLastURISeg( aUri );
+    
+    if ( nodeName.Match( KCMProxyDdfAddr )!= KErrNotFound )
+        {
+        retval = CMManager::ECmProxyServerName;
+        }
+    else if ( nodeName.Match( KCMProxyDdfPortNbr ) != KErrNotFound )
+        {
+        retval = CMManager::ECmProxyPortNumber; 
+        }
+    else if ( nodeName.Match( KCMProxyDdfStartpg ) != KErrNotFound )
+        {
+        retval = CMManager::ECmStartPage;
+        }
+    else if ( nodeName.Match( KCMProxyDdfProxyType ) != KErrNotFound )
+            {
+            retval = CMManager::ECmProxyProtocolName;
+            }
+    
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_MAPURITOCMATTRIBUTE_EXIT, 
+               "EXIT: CProxyBranch::MapUriToCmAttribute;retval=%{TConnectionMethodCommonAttributes}", 
+               retval );
+    
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// TInt32 CProxyBranch::FindConnectionMethodL()
+//-----------------------------------------------------------------------------
+TInt32 CProxyBranch::FindConnectionMethodL()
+    {
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_FINDCONNECTIONMETHODL_ENTRY, 
+               "ENTRY: CProxyBranch::FindConnectionMethod" );
+    
+    TInt32 retval = KErrNotFound;
+    
+    CConnMoNodeElement* processNode = iBuffer->CacheFind( KProxyConrefUri );
+    
+    if ( processNode )
+        {
+        
+        HBufC8* luid;
+        
+        // Ignore root part ("./") of the URI if present in the beginning
+        if ( processNode->iObject.Mid( 0, 2 ).Match( KRoot ) != KErrNotFound )
+            {
+            luid = iCallback->GetLuidAllocL( processNode->iObject.Mid( 2 ) );
+            }
+        else
+            {
+            luid = iCallback->GetLuidAllocL( processNode->iObject );
+            }
+        
+        retval = CUtils::IntLUID( *luid );
+        
+        delete luid;
+        
+        }
+    
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_FINDCONNECTIONMETHODL_EXIT, 
+               "EXIT: CProxyBranch::FindConnectionMethod;CmId=%d", retval );
+    
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// TBool CProxyBranch::AllMandatoryProxyFieldsFound()
+//-----------------------------------------------------------------------------
+TBool CProxyBranch::AllMandatoryProxyFieldsFound()
+    {
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_ALLMANDATORYPROXYFIELDSFOUND_ENTRY, 
+               "ENTRY: CProxyBranch::AllMandatoryProxyFieldsFound" );
+    
+    TBool retval = ETrue;
+
+    // Check that NAP Address addition is found
+    if ( !iBuffer->CacheFind(KProxyAddrUri) )
+        {
+        retval = EFalse;
+        }
+    if ( !iBuffer->CacheFind(KProxyConrefUri) )
+        {
+        retval = EFalse;
+        }
+    // Check that dynamic nap node addition is found
+    if ( !iBuffer->CacheFindDynamicNode(KDynamicProxyNodePattern) )
+        {
+        retval = EFalse;
+        }
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_ALLMANDATORYPROXYFIELDSFOUND_EXIT, 
+               "EXIT: CProxyBranch::AllMandatoryProxyFieldsFound;retval=%d", retval );
+    
+    return retval;
+    }
+//-----------------------------------------------------------------------------
+// TBool CProxyBranch::SetLeafData()
+//-----------------------------------------------------------------------------
+void CProxyBranch::SetLeafDataL(const TDesC8& aURI, 
+                                const TDesC8& /*aLUID*/,
+                                const TDesC8& aObject, 
+                                 TInt aStatusRef, 
+                                 RCmConnectionMethodExt& aCm)
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_SETLEAFDATAL_ENTRY, 
+                  "ENTRY: CProxyBranch::SetLeafDataL;aURI=%s", aURI );
+    
+    TUint32 attributeRef = ( 0 );
+    TLex8 lex( aObject );
+    TInt value = 0;
+    CSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
+
+    attributeRef = MapUriToCmAttribute( aURI );
+    
+    switch ( attributeRef )
+        {
+        case CMManager::ECmProxyServerName:
+        case CMManager::ECmStartPage:
+        case CMManager::ECmProxyProtocolName:
+            aCm.SetStringAttributeL( attributeRef, CUtils::ConvertTo16LC( aObject ) );
+            CleanupStack::PopAndDestroy(); // CUtils::ConvertTo16LC
+            break;
+        case CMManager::ECmProxyPortNumber:        
+            if ( lex.Val( value ) == KErrNone )
+                {
+                aCm.SetIntAttributeL( attributeRef, value );
+                }
+            else
+                {
+                status = CSmlDmAdapter::EInvalidObject;
+                }
+            break;
+        default:
+            status = CheckForUnmodifiableField( aURI );
+            break;
+        }
+    iCallback->SetStatusL( aStatusRef, status );
+    
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_SETLEAFDATAL_EXIT, 
+               "EXIT: CProxyBranch::SetLeafDataL;status=%{TError}", status );
+    }
+//-----------------------------------------------------------------------------
+// TBool CProxyBranch::SetNodeData()
+//-----------------------------------------------------------------------------
+void CProxyBranch::SetNodeDataL(CConnMoNodeElement* aNode, RCmConnectionMethodExt& aCm)
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_SETNODEDATAL_ENTRY, "ENTRY: CProxyBranch::SetNodeDataL;aNode->iUri=%s", aNode->iUri );
+    
+    if ( aNode->iParentLUID.Length() == 0 )
+        {
+        TBuf8<16> addLUID;
+        _LIT8( KFormat, "%d" );    
+        addLUID.Format( KFormat, aCm.GetIntAttributeL( CMManager::ECmId ) );
+        
+        iCallback->SetMappingL( aNode->iUri, addLUID );
+        iCallback->SetStatusL( aNode->iStatusRef, CSmlDmAdapter::EOk );
+        }
+    else
+        {
+        iCallback->SetStatusL( aNode->iStatusRef, CSmlDmAdapter::EAlreadyExists );
+        }
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_SETNODEDATAL_EXIT, "EXIT: CProxyBranch::SetNodeDataL" );
+    
+    }
+//------------------------------------------------------------------------------
+//  void CProxyBranch::GetAllDynamicProxyNodes()
+//------------------------------------------------------------------------------
+void CProxyBranch::GetAllDynamicProxyNodesL( const TDesC8& aURI,
+                                             const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                             TInt aResultsRef, 
+                                             TInt aStatusRef,
+                                             CBufBase& aCurrentURISegmentList )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_GETALLDYNAMICPROXYNODESL_ENTRY, 
+                  "ENTRY: CProxyBranch::GetAllDynamicProxyNodesL;aURI=%s", aURI );
+    
+    // Array for connection methods
+    RArray <TUint32> cmArray;
+    
+    CleanupClosePushL( cmArray );
+    cmArray.Reset();
+    
+    GetAllConnectionMethodsL( cmArray, *iCmManager );
+    
+    // Loop through all connection methods
+    for ( TInt i = 0; i < cmArray.Count(); i++ )
+        {
+        RCmConnectionMethodExt cm = iCmManager->ConnectionMethodL( cmArray[i] );
+        CleanupClosePushL( cm );
+        
+        // If proxy is enabled for connection method
+        if ( cm.GetBoolAttributeL( CMManager::ECmProxyUsageEnabled ) )
+            {
+            OstTrace1( TRACE_NORMAL, CPROXYBRANCH_GETALLDYNAMICPROXYNODESL_PROXY, 
+                        "CProxyBranch::GetAllDynamicProxyNodesL;Proxy enabled for Cm Id=%u", 
+                        cmArray[i] );
+            
+            TBuf8<KSmlMaxURISegLen>addCmName;
+            // Check if node exists in aPreviousURISegmentList
+            if ( !CheckPreviousURIList( aPreviousURISegmentList, cmArray[i], addCmName ) )
+                {
+                // Connection Method not found in previous URI list                        
+                addCmName.Append( aURI );
+                addCmName.Append( KCMProxyNodeSeparator );
+                addCmName.Append( KDynamicNodePrefix );
+                
+                addCmName.AppendNumFixedWidth( cmArray[i], EDecimal, 3); 
+                
+                TBuf8<16> addLUID;
+                _LIT8( KFormat, "%d" );    
+                addLUID.Format( KFormat, cmArray[i] );
+                
+                OstTraceExt1( TRACE_NORMAL, 
+                           CPROXYBRANCH_GETALLDYNAMICPROXYNODES_ADDED_TO_LIST, 
+                           "CProxyBranch::GetAllDynamicProxyNodesL;Added to list: URI=%s", addCmName );
+                                             
+                iCallback->SetMappingL( addCmName, addLUID );
+                }
+            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), CUtils::GetLastURISeg( addCmName ) );
+            aCurrentURISegmentList.InsertL( aCurrentURISegmentList.Size(), KCMProxyNodeSeparator );
+            }
+        CleanupStack::PopAndDestroy( &cm );
+        }
+    
+    iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+    iCallback->SetResultsL( aResultsRef, aCurrentURISegmentList, KNullDesC8 );
+
+    CleanupStack::PopAndDestroy( &cmArray );
+    
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_GETALLDYNAMICPROXYNODESL_EXIT, 
+               "EXI: CProxyBranch::GetAllDynamicProxyNodesLT" );  
+    }
+
+// ======== MEMBER FUNCTIONS ========
+//-----------------------------------------------------------------------------
+// CProxyBranch* CProxyBranch::NewL( )
+//-----------------------------------------------------------------------------
+CProxyBranch* CProxyBranch::NewL(MSmlDmCallback* aDmCallback, 
+                                 CAddBuffer* aBuffer, 
+                                 RCmManagerExt* aCmManagerExt  )
+    {
+    OstTraceFunctionEntry1( CPROXYBRANCH_NEWL_ENTRY, ( TUint )( aDmCallback ) );
+
+    CProxyBranch* self = new (ELeave) CProxyBranch(aDmCallback, aBuffer, aCmManagerExt );
+
+    OstTraceFunctionExit1( CPROXYBRANCH_NEWL_EXIT, ( TUint )( self ) );
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+// CProxyBranch::CProxyBranch()
+//------------------------------------------------------------------------------
+CProxyBranch::CProxyBranch(MSmlDmCallback* aDmCallback, 
+                           CAddBuffer* aBuffer,
+                           RCmManagerExt* aCmManagerExt )
+    : CBranchBase( aDmCallback )
+    {
+    OstTraceFunctionEntry1( CPROXYBRANCH_CONSTRUCTOR_ENTRY, this );
+    
+    iCallback = aDmCallback;
+    iBuffer = aBuffer;
+    iCmManager = aCmManagerExt;
+    
+    OstTraceFunctionExit1( CPROXYBRANCH_CONSTRUCTOR_EXIT, this );
+    }
+
+//------------------------------------------------------------------------------
+// CProxyBranch::~CProxyBranch()
+//------------------------------------------------------------------------------
+CProxyBranch::~CProxyBranch()
+    {
+    OstTraceFunctionEntry1( CPROXYBRANCH_DESTRUCTOR_ENTRY, this );
+
+    OstTraceFunctionExit1( CPROXYBRANCH_DESTRUCTOR_EXIT, this );
+    }
+
+//------------------------------------------------------------------------------
+//  void CProxyBranch::DDFStructureL()
+//------------------------------------------------------------------------------
+void CProxyBranch::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    OstTraceFunctionEntry0( CPROXYBRANCH_DDFSTRUCTUREL_ENTRY );
+        
+    //
+    // Set rest acceptable operations for data itself
+    //
+    TSmlDmAccessTypes aclTypesNoDelete;
+    aclTypesNoDelete.SetGet();
+    aclTypesNoDelete.SetReplace();
+    aclTypesNoDelete.SetAdd();
+
+    TSmlDmAccessTypes aclTypesAddGet;
+    aclTypesAddGet.SetGet();
+    aclTypesAddGet.SetAdd();
+    
+    TSmlDmAccessTypes aclTypesOnlyGet;
+    aclTypesOnlyGet.SetGet();
+
+    MSmlDmDDFObject& nProxyIdDDF = aDDF.AddChildObjectL( KCMProxyDdfProxyId );        // ProxyId
+    CUtils::FillNodeInfoL( nProxyIdDDF, 
+                           aclTypesOnlyGet, 
+                           MSmlDmDDFObject::EOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::EChr, 
+                           KNullDesC8 );
+    
+    MSmlDmDDFObject& nAddrDDF = aDDF.AddChildObjectL( KCMProxyDdfAddr );     // Addr
+    CUtils::FillNodeInfoL( nAddrDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::EChr, 
+                           KNullDesC8 ); 
+    
+    MSmlDmDDFObject& nToConRefDDF = aDDF.AddChildObjectL( KCMProxyDdfToConRef );     // ToConRef
+    CUtils::FillNodeInfoL( nToConRefDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EZeroOrOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );
+    
+    MSmlDmDDFObject& nToConRefRootDDF = nToConRefDDF.AddChildObjectGroupL();     // ToConRef/<x>
+    CUtils::FillNodeInfoL( nToConRefRootDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EOneOrMore, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );
+    
+    MSmlDmDDFObject& nConRefDDF = nToConRefRootDDF.AddChildObjectL( KCMProxyDdfConRef ); // ToConRef/<x>/ConRef
+    CUtils::FillNodeInfoL( nConRefDDF, 
+                           aclTypesAddGet, 
+                           MSmlDmDDFObject::EOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::EChr, 
+                           KNullDesC8 );    
+       
+    MSmlDmDDFObject& nPortsDDF = aDDF.AddChildObjectL( KCMProxyDdfPorts );     // Ports
+    CUtils::FillNodeInfoL( nPortsDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EZeroOrOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );
+
+    MSmlDmDDFObject& nPortsRootDDF = nPortsDDF.AddChildObjectGroupL();     // Ports/<x>
+    CUtils::FillNodeInfoL( nPortsRootDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EOneOrMore, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );    
+          
+    MSmlDmDDFObject& nPortNbrDDF = nPortsRootDDF.AddChildObjectL( KCMProxyDdfPortNbr );  // Ports/<x>/PortNbr
+    CUtils::FillNodeInfoL( nPortNbrDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::EInt, 
+                           KNullDesC8 );
+
+    MSmlDmDDFObject& nProxyParamsDDF = aDDF.AddChildObjectL( KCMProxyDdfProxyParams ); // ProxyParams
+    CUtils::FillNodeInfoL( nProxyParamsDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EZeroOrOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );
+
+    MSmlDmDDFObject& nProxyTypeDDF = aDDF.AddChildObjectL( KCMProxyDdfProxyType ); // ProxyType
+    CUtils::FillNodeInfoL( nProxyTypeDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EZeroOrOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::EChr, 
+                           KNullDesC8 );
+
+    
+    MSmlDmDDFObject& nWapDDF = nProxyParamsDDF.AddChildObjectL( KCMProxyDdfWap ); // WAP
+    CUtils::FillNodeInfoL( nWapDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EZeroOrOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::ENode, 
+                           KNullDesC8 );
+
+    MSmlDmDDFObject& nStartpgDDF = nWapDDF.AddChildObjectL( KCMProxyDdfStartpg ); // Startpg
+    CUtils::FillNodeInfoL( nStartpgDDF, 
+                           aclTypesNoDelete, 
+                           MSmlDmDDFObject::EZeroOrOne, 
+                           MSmlDmDDFObject::EDynamic, 
+                           MSmlDmDDFObject::EChr, 
+                           KNullDesC8 );
+    
+    OstTraceFunctionEntry0( CPROXYBRANCH_DDFSTRUCTUREL_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+//  void CProxyBranch::UpdateLeafObjectL()
+//------------------------------------------------------------------------------
+void CProxyBranch::UpdateLeafObjectL( const TDesC8& aURI, 
+                                      const TDesC8& aLUID,
+                                      const TDesC8& aObject, 
+                                      const TDesC8& /*aType*/,
+                                      TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_UPDATELEAFOBJECTL_ENTRY, 
+                  "ENTRY: CProxyBranch::UpdateLeafObjectL;aURI=%s", aURI );        
+    
+    // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+    TInt cmId = GetCmIdFromURIL( aURI );
+
+    if ( aLUID.Length() == 0 && cmId == KErrNotFound )
+        {
+        // New node, add to buffer
+        iBuffer->AddNodeToBufferL( aURI, aLUID, aObject, aStatusRef);
+        }
+    else
+        {
+        // Existing node, update data immediately
+        TInt err( KErrNone );
+        RCmConnectionMethodExt cm;
+        if ( cmId == KErrNotFound )
+            {
+            cmId = CUtils::IntLUID( aLUID );
+            }
+            
+        TRAP( err, cm = iCmManager->ConnectionMethodL( cmId ) );
+        CleanupClosePushL( cm );
+                
+        if ( !err )
+            {
+            OstTrace0( TRACE_NORMAL, DUP1_CPROXYBRANCH_UPDATELEAFOBJECTL, "CProxyBranch::UpdateLeafObjectL; Existing connection method - write value immediately." );            
+            SetLeafDataL( aURI, aLUID, aObject, aStatusRef, cm );
+            cm.UpdateL();
+            }
+        else
+            {
+            //iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            OstTrace0( TRACE_NORMAL, CPROXYBRANCH_UPDATELEAFOBJECTL, "CProxyBranch::UpdateLeafObjectL; Stale LUID - buffer setting." );            
+            iBuffer->AddNodeToBufferL(aURI,KNullDesC8,aObject,aStatusRef);
+            }
+
+        CleanupStack::PopAndDestroy( &cm );
+        }
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_UPDATELEAFOBJECTL_EXIT, 
+               "EXIT: CProxyBranch::UpdateLeafObjectL" );
+    
+    }
+    
+//------------------------------------------------------------------------------
+//  void CProxyBranch::DeleteObjectL()
+//------------------------------------------------------------------------------
+void CProxyBranch::DeleteObjectL( const TDesC8& /*aURI*/, 
+                                  const TDesC8& /*aLUID*/,
+                                  TInt /*aStatusRef*/ )
+    {
+ 
+    }
+    
+//------------------------------------------------------------------------------
+//  void CProxyBranch::FetchLeafObjectL()
+//------------------------------------------------------------------------------
+void CProxyBranch::FetchLeafObjectL( const TDesC8& aURI, 
+                                     const TDesC8& aLUID,
+                                     const TDesC8& aType, 
+                                     TInt aResultsRef,
+                                     TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTL_PUPLIC_ENTRY, 
+                  "ENTRY: CProxyBranch::FetchLeafObjectL;aURI=%s", aURI );
+    
+    CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound;
+    
+    CBufBase *leafObject = CBufFlat::NewL( KBufferExpandSize );
+    CleanupStack::PushL( leafObject );
+    leafObject->Reset();
+   
+    status = FetchLeafObjectL( aURI, aLUID, *leafObject );
+    
+    if ( status == CSmlDmAdapter::EOk )
+        {
+        iCallback->SetResultsL( aResultsRef, *leafObject, aType );
+        OstTrace0( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECT_OK, 
+                   "CProxyBranch::FetchLeafObjectL; EOk" );
+        }
+    
+    CleanupStack::PopAndDestroy( leafObject );   
+
+    iCallback->SetStatusL( aStatusRef, status );
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTL_PUPLIC_EXIT, 
+               "EXIT: CProxyBranch::FetchLeafObjectL;status=%{TError}", status );
+    
+    }
+    
+//------------------------------------------------------------------------------
+//  void CProxyBranch::FetchLeafObjectSizeL()
+//------------------------------------------------------------------------------
+void CProxyBranch::FetchLeafObjectSizeL( const TDesC8& aURI, 
+                                         const TDesC8& aLUID,
+                                         const TDesC8& aType, 
+                                         TInt aResultsRef,
+                                         TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY, 
+                  "ENTRY: CProxyBranch::FetchLeafObjectSizeL;aURI=%s", aURI );
+    
+    CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound;
+ 
+    CBufBase *leafObject = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( leafObject );
+    leafObject->Reset();
+
+    status = FetchLeafObjectL( aURI, aLUID, *leafObject );
+
+    if ( status == CSmlDmAdapter::EOk )
+        {
+        leafObject->Compress();
+        TBuf8<8> size;
+        size.Num( leafObject->Size() );
+        leafObject->Reset();
+        leafObject->InsertL(0, size );
+        iCallback->SetResultsL( aResultsRef, *leafObject, aType );
+        }
+    
+    CleanupStack::PopAndDestroy( leafObject );
+
+    iCallback->SetStatusL( aStatusRef, status );
+    OstTrace1( TRACE_NORMAL, CPROXYBRANCH_FETCHLEAFOBJECTSIZEL_EXIT, 
+               "EXIT: CProxyBranch::FetchLeafObjectSizeL;status=%{TError}", status );
+    
+    }
+
+//------------------------------------------------------------------------------
+//  void CProxyBranch::ChildURIListL()
+//------------------------------------------------------------------------------
+void CProxyBranch::ChildURIListL( const TDesC8& aURI, 
+                                  const TDesC8& aLUID,
+                                  const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                                  TInt aResultsRef,
+                                  TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_CHILDURILISTL_ENTRY, 
+                  "ENTRY: CProxyBranch::ChildURIListL;aURI=%s", aURI );
+        
+    TPtrC8 proxyDdfTree = CUtils::GetEndOfURIFromSeg( aURI, KCMProxyDdf );
+    
+    CBufBase* currentURISegmentList = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( currentURISegmentList );
+    
+    // Proxy (handle as special case)   
+    if ( proxyDdfTree.Match( KCMProxyDdf ) != KErrNotFound )
+        {
+        GetAllDynamicProxyNodesL( aURI,
+                                  aPreviousURISegmentList,
+                                  aResultsRef, 
+                                  aStatusRef,
+                                  *currentURISegmentList );
+        CleanupStack::PopAndDestroy( currentURISegmentList );
+        return;
+        }
+    // Then check if the CM exists. Use LUID or predefined ID    
+    TInt cmId( KErrNotFound );
+    if ( aLUID.Length() > 0 )
+        {
+        cmId = CUtils::IntLUID( aLUID );
+        }
+    else
+        {
+        // If this is for pre-defined node then get CM id xxx from URI (NAP/NAPIdxxx)
+        cmId = GetCmIdFromURIL( aURI );
+        }
+    // If after this cmId is still not found then the branch does not exist
+    if ( cmId == KErrNotFound )
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        CleanupStack::PopAndDestroy( currentURISegmentList );
+        OstTrace0( TRACE_NORMAL, DUP1_CPROXYBRANCH_CHILDURILISTL, "CNapBranch::ChildURIListL; CSmlDmAdapter::ENotFound" );
+        return;
+        }
+    
+    RCmConnectionMethodExt cm;
+    // Check it the method actually can be found      
+    if ( !GetConnectionMethodLC( *iCmManager, cm, cmId ) || !cm.GetBoolAttributeL(CMManager::ECmProxyUsageEnabled ) )       
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        CleanupStack::PopAndDestroy( &cm );
+        CleanupStack::PopAndDestroy( currentURISegmentList );        
+        OstTrace0( TRACE_NORMAL, DUP2_CPROXYBRANCH_CHILDURILISTL, "CNapBranch::ChildURIListL; CSmlDmAdapter::ENotFound" );
+        return;
+        }            
+    CleanupStack::PopAndDestroy( &cm );    
+    
+    
+    // Proxy/<x>
+    if ( proxyDdfTree.Match( KDynamicProxyNodePattern ) != KErrNotFound &&
+              proxyDdfTree.Match( KDynamicProxyNodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMProxyFields ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );        
+        }
+    
+    // Proxy/<x>/ToConRef/<x>
+    else if ( proxyDdfTree.Match( KDynamicToConrefNodeChildUri ) != KErrNotFound &&
+              proxyDdfTree.Match( KDynamicToConrefNodeChildUriNodes ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMProxyDdfConRef ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
+        }
+    
+    // Proxy/<x>/ToConRef
+    else if ( proxyDdfTree.Match( KDynamicToConrefNode ) != KErrNotFound )
+        {        
+        GetAllDynamicNodesL( aURI,
+                             aLUID,
+                             aPreviousURISegmentList,
+                             aResultsRef, 
+                             aStatusRef,
+                             *iCmManager,
+                             *currentURISegmentList,
+                             KCMProxyDdfToConRef,
+                             1,
+                             iCallback );
+        }
+    
+    // Proxy/<x>/Ports/<x>
+    else if ( proxyDdfTree.Match( KDynamicPortsNodeChildUri ) != KErrNotFound &&
+              proxyDdfTree.Match( KDynamicPortsNodeChildUriNodes ) == KErrNotFound )
+        {      
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMProxyDdfPortNbr ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );        
+        }
+    
+    // Proxy/<x>/Ports
+    else if ( proxyDdfTree.Match( KDynamicPortsNode ) != KErrNotFound )
+        {
+        GetAllDynamicNodesL( aURI, 
+                             aLUID,
+                             aPreviousURISegmentList,
+                             aResultsRef, 
+                             aStatusRef,
+                             *iCmManager,
+                             *currentURISegmentList,
+                             KCMProxyDdfPorts,
+                             1,
+                             iCallback );      
+        }
+    
+    // Proxy/<x>/ProxyParams
+    else if ( proxyDdfTree.Match( KDynamicProxyParamsNode ) != KErrNotFound &&
+              proxyDdfTree.Match( KDynamicProxyParamsNodeChildUri ) == KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMProxyParamsFields ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );        
+        }
+    
+    // Proxy/<x>/ProxyParams/WAP
+    else if ( proxyDdfTree.Match( KDynamicProxyParamsWapNode ) != KErrNotFound )
+        {
+        currentURISegmentList->InsertL( currentURISegmentList->Size(), KCMProxyWapFields ); 
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallback->SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );  
+        }
+    
+    // Not found
+    else
+        {
+        iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        OstTrace0( TRACE_NORMAL, CPROXYBRANCH_CHILDURILISTL_NOT_FOUND, 
+                   "CProxyBranch::ChildURIListL;CSmlDmAdapter::ENotFound" );
+        
+        }
+    
+    CleanupStack::PopAndDestroy( currentURISegmentList );
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_CHILDURILISTL_EXIT, 
+               "EXIT: CProxyBranch::ChildURIListL" );
+        
+    }
+
+//------------------------------------------------------------------------------
+//  void CProxyBranch::AddNodeObjectL()
+//------------------------------------------------------------------------------    
+void CProxyBranch::AddNodeObjectL( const TDesC8& aURI, 
+                                   const TDesC8& aParentLUID,
+                                   TInt aStatusRef )
+    {
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_ADDNODEOBJECTL_ENTRY, 
+                  "ENTRY: CProxyBranch::AddNodeObjectL;aURI=%s", aURI );
+    
+    if ( aParentLUID.Length() == 0 )
+        {
+        // If this is for pre-defined node then get CM id xxx from URI (Proxy/ProxyIdxxx)
+        TInt cmId = GetCmIdFromURIL( aURI );
+        RCmConnectionMethodExt cm;
+        // Check if CM exists
+        if ( cmId != KErrNotFound && GetConnectionMethodLC( *iCmManager, cm, cmId ) 
+             && cm.GetBoolAttributeL(CMManager::ECmProxyUsageEnabled))
+            {
+            CleanupStack::PopAndDestroy( &cm );
+            // Pre-defined CM already exists for this ID.            
+            iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+            return;
+            }
+        if ( cmId != KErrNotFound )
+            {
+            CleanupStack::PopAndDestroy( &cm );
+            }
+        // New node, add to buffer
+        iBuffer->AddNodeToBufferL( aURI, aParentLUID, aStatusRef );
+        OstTrace0( TRACE_NORMAL, CPROXYBRANCH_ADDNODEOBJECTL_NEW_NODE, 
+                   "CProxyBranch::AddNodeObjectL;New node -> Add to buffer." );
+        }
+    else
+        {
+        // Sanity check: If the dynamic name of the Proxy node has is the same as deleted previously and
+        // DM Framework hasn't updated the tree, it will give the LUID when calling this method. Thus,
+        // it's needed to check that the connection method really exists.
+        RCmConnectionMethodExt cm;
+    
+        
+        if ( !GetConnectionMethodLC( *iCmManager, cm, CUtils::IntLUID( aParentLUID ) ) )
+            {
+            // New node, add to buffer
+            iBuffer->AddNodeToBufferL( aURI, KNullDesC8, aStatusRef );
+            OstTrace0( TRACE_NORMAL, CPROXYBRANCH_ADDNODEOBJECTL_NEW_NODE2, 
+                       "CProxyBranch::AddNodeObjectL;New node -> Add to buffer." );
+            }
+        else
+            {
+            // Proxies must be added in one message. If luid is given add is done to existing AP or node
+            iCallback->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+            OstTrace0( TRACE_NORMAL, CPROXYBRANCH_ADDNODEOBJECTL_ALREADY_EXISTS, 
+                       "CProxyBranch::AddNodeObjectL;CSmlDmAdapter::EAlreadyExists" );
+            } 
+       
+        CleanupStack::PopAndDestroy( &cm );
+        }
+        
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_ADDNODEOBJECTL_EXIT, "EXIT: CProxyBranch::AddNodeObjectL" );   
+    }
+
+// -------------------------------------------------------------------------------------
+// CProxyBranch::ProcessNodeBufferL()
+// -------------------------------------------------------------------------------------
+void CProxyBranch::ProcessBufferL()
+    {
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_PROCESSBUFFERL_ENTRY, "ENTRY: CProxyBranch::ProcessBufferL" );
+    
+    RPointerArray<CConnMoNodeElement> proxyNodes( KNumOfProxyNodes );
+    CleanupClosePushL( proxyNodes );
+    while ( iBuffer->GetGroup( KCMDdfProxy, &proxyNodes ) != KErrNotFound )
+        {
+        TInt32 cmId = FindConnectionMethodL();
+    
+        if ( AllMandatoryProxyFieldsFound() && cmId != KErrNotFound )
+            {
+            // Open connection method, enable proxy and update nodes
+            RCmConnectionMethodExt cm;
+            TRAPD( err, cm = iCmManager->ConnectionMethodL( cmId ) );
+            CleanupClosePushL( cm );
+            
+            if ( !err )
+                {
+                cm.SetBoolAttributeL( CMManager::ECmProxyUsageEnabled, ETrue );
+        
+                for ( TInt i = 0; i < proxyNodes.Count(); ++i )
+                    {
+                    if ( proxyNodes[i]->iLeaf  )
+                        {
+                    // Leaf data found
+                    SetLeafDataL( proxyNodes[i]->iUri, 
+                                  proxyNodes[i]->iParentLUID, 
+                                  proxyNodes[i]->iObject, 
+                                  proxyNodes[i]->iStatusRef, cm );
+                    proxyNodes[i]->iProcessed = ETrue;
+                        }
+                    else
+                        {
+                        // Node has no leaf data
+                        SetNodeDataL( proxyNodes[i], cm );
+                        proxyNodes[i]->iProcessed = ETrue;
+                        }
+                    }
+                cm.UpdateL();
+                }
+            else
+                {
+                for ( TInt i = 0; i < proxyNodes.Count(); ++i )
+                    {
+                    iCallback->SetStatusL( proxyNodes[i]->iStatusRef, CSmlDmAdapter::EError );
+                    proxyNodes[i]->iProcessed = ETrue;
+                    }
+                }
+            CleanupStack::PopAndDestroy( &cm );
+            }
+        else
+            {
+            for ( TInt i = 0; i < proxyNodes.Count(); ++i )
+                {
+                iCallback->SetStatusL( proxyNodes[i]->iStatusRef, CSmlDmAdapter::EError );
+                proxyNodes[i]->iProcessed = ETrue;
+                }
+            }
+        proxyNodes.Reset();
+        }
+    CleanupStack::Pop( &proxyNodes );
+    proxyNodes.Close();
+ 
+    OstTrace0( TRACE_NORMAL, CPROXYBRANCH_PROCESSBUFFERL_EXIT, "EXIT: CProxyBranch::ProcessBufferL" );  
+    }
+
+
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::GetDynamicAPNodeUri( const TDesC8& aURI )
+// returns NAP/xxx URI
+//------------------------------------------------------------------------------
+TPtrC8 CProxyBranch::GetDynamicProxyNodeUri( const TDesC8& aURI )
+    {    
+    OstTraceExt1( TRACE_NORMAL, CPROXYBRANCH_GETDYNAMICPROXYNODEURI, "CProxyBranch::GetDynamicProxyNodeUri;aURI=%s", aURI );
+    TInt i= 0;
+    for ( i = aURI.Find( KCMDdfProxy ) + 6; i < aURI.Length(); i++ )
+        {
+        if( aURI[i] == '/' )
+            {
+            break;
+            }
+        }           
+    OstTraceExt1( TRACE_NORMAL, DUP1_CPROXYRANCH_GETDYNAMICPROXYNODEURI, "CProxyBranch::GetDynamicProxyNodeUri;return URI=%s", aURI.Left( i ) );
+    return aURI.Left( i );
+    }
+
+//--------------------------------------------------------------------
+//TInt CProxyBranch::IsNAPUriFormatMatchPredefined(const TDesC8 & aURI)
+//
+//-------------------------------------------------------------------
+
+
+TBool CProxyBranch::IsProxyUriFormatMatchPredefined(const TDesC8 & aURI)
+{
+    if( aURI.Match( _L8( "Proxy/ProxyId*" ) ) != KErrNotFound )
+    {
+        return ETrue;
+    }
+    else
+    {
+        return EFalse;
+    }
+}
+//------------------------------------------------------------------------------
+// TUint32 CProxyBranch::GetAPIdFromURIL(const TDesC8& aURI)
+//         Get NAP id for given aURI
+//------------------------------------------------------------------------------
+TInt CProxyBranch::GetCmIdFromURIL(const TDesC8& aURI)
+    {
+    TInt ret(KErrNotFound);
+    
+    if( !IsProxyUriFormatMatchPredefined( aURI ) )
+        {
+        // Cannot get CmIds from any other format URIs than predefined
+        return ret;
+        }
+   
+    TLex8 lex;
+    //  Find xxx from ./Proxy/ProxyIdxxx/...    
+    TInt start = aURI.Find( KDynamicNodePrefix ) + KDynamicNodePrefix().Length();
+    lex = aURI.Mid( start, 3 );
+    lex.Val( ret );
+    
+    return ret;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/src/Utils.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,312 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <e32base.h>
+#include <utf.h>
+#include <cmpluginpacketdatadef.h>
+
+#include "Utils.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "UtilsTraces.h"
+#endif
+
+// ======== LOCAL CONSTANTS =========
+
+_LIT8( KFalse,               "False" );
+_LIT8( KTrue,                "True" );
+_LIT8( KWhiteSpace,          " " );
+
+// ======== LOCAL FUNCTIONS =========
+
+// ======== MEMBER FUNCTIONS ========   
+//------------------------------------------------------------------------------
+// CUtils::CUtils()
+//------------------------------------------------------------------------------
+CUtils::CUtils() 
+    {
+    OstTraceFunctionEntry0( CUTILS_CUTILS_ENTRY );
+    OstTraceFunctionExit0( CUTILS_CUTILS_EXIT );
+    }
+
+//------------------------------------------------------------------------------
+// CUtils::~CUtils()
+//------------------------------------------------------------------------------
+CUtils::~CUtils()
+    {
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::GetFirstURISeg(const TDesC8& aURI)
+//------------------------------------------------------------------------------
+TPtrC8 CUtils::GetFirstURISeg( const TDesC8& aURI )
+    {
+    OstTraceExt1( TRACE_NORMAL, CUTILS_GETFIRSTURISEG_ENTRY, 
+                  "ENTRY: CUtils::GetFirstURISeg;aURI=%s", aURI );
+    
+    TInt i = 0;
+    TInt j = 0;
+    
+    for( i  =0; i <= aURI.Length()-1; i++ )
+        {
+        if( aURI[i] == '/' )
+            {
+            if ( i == 0 )
+                {
+                // Skip first slash
+                j = 1;
+                continue;
+                }
+            break;
+            }
+        }
+    OstTraceExt1( TRACE_NORMAL, CUTILS_GETFIRSTURISEG_EXIT, 
+                  "EXIT: CUtils::GetFirstURISeg;retval=%s", aURI.Mid( j,i-j ) );
+    
+    return aURI.Mid( j,i-j );
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::GetSecondURISeg(const TDesC8& aURI)
+//------------------------------------------------------------------------------
+TPtrC8 CUtils::GetSecondURISeg( const TDesC8& aURI )
+    {
+    OstTraceExt1( TRACE_NORMAL, CUTILS_GETSECONDURISEG_ENTRY, 
+                  "ENTRY: CUtils::GetSecondURISeg;aURI=%s", aURI );
+    
+    TInt j = 0;
+    TInt i = 0;
+    
+    for( i = 0; i <= aURI.Length() - 1; i++ )
+        {
+        if( aURI[i] == '/' )
+            {
+            for( j = i + 1; j <= aURI.Length() - 1; j++ )
+                {
+                if( aURI[j] == '/' ) // Second slash => AP/xxxx
+                    {
+                    break;
+                    }
+                }
+            break;
+            }
+        }
+    OstTraceExt1( TRACE_NORMAL, CUTILS_GETSECONDTURISEG_EXIT, 
+                  "EXIT: CUtils::GetSecondURISeg;retval=%s", aURI.Mid( i+1, j-1-i ) );
+    
+    return aURI.Mid( i+1, j-1-i );
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::GetLastURISeg(const TDesC8& aURI)
+// Returns only the last uri segment
+//------------------------------------------------------------------------------
+TPtrC8 CUtils::GetLastURISeg( const TDesC8& aURI )
+    {
+    OstTraceExt1( TRACE_NORMAL, CUTILS_GETLASTURISEG_ENTRY, 
+                  "ENTRY: CUtils::GetLastURISeg;aURI=%s", aURI );
+    
+    TInt i;
+    
+    for( i = aURI.Length() - 1 ; i >= 0; i-- )
+        {
+        if( aURI[i] == '/' )
+            {
+            break;
+            }
+        }
+    if( i == 0 )
+        {
+        OstTraceExt1( TRACE_NORMAL, CUTILS_GETLASTURISEG_EXIT, 
+                      "EXIT: CUtils::GetLastURISeg;retval=%s", aURI );
+        return aURI;
+        }
+    else
+        {
+        OstTraceExt1( TRACE_NORMAL, CUTILS_GETLASTURISEG_EXIT2, 
+                      "EXIT: CUtils::GetLastURISeg;retval=%s", aURI.Mid( i+1 ) );
+        return aURI.Mid( i+1 );
+        }
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::GetEndOfURIFromSeg(const TDesC8& aURI,const TDesC8 aName)
+// Returns the end of aURI starting from aName
+//------------------------------------------------------------------------------
+TPtrC8 CUtils::GetEndOfURIFromSeg( const TDesC8& aURI, const TDesC8& aName )
+    {
+    OstTraceExt2( TRACE_NORMAL, CUTILS_GETENDOFURIFROMSEG_ENTRY, 
+                  "ENTRY: CUtils::GetEndOfURIFromSeg;aURI=%s;aName=%s", aURI, aName );
+    
+    TInt begin = aURI.Find( aName );
+    
+    if ( begin == KErrNotFound )
+        {
+        OstTrace1( TRACE_NORMAL, CUTILS_GETENDOFURIFROMSEG_EXIT, 
+                   "EXIT: CUtils::GetEndOfURIFromSeg;%d", KErrNotFound );
+        return aURI;
+        }
+    OstTraceExt1( TRACE_NORMAL, CUTILS_GETENDOFURIFROMSEG_EXIT2, 
+                  "EXIT: CUtils::GetEndOfURIFromSeg;%s", aURI.Mid(begin) );    
+    return aURI.Mid(begin);
+    }
+
+//------------------------------------------------------------------------------
+// CUtils::ConvertTo8LC()
+// Converts string value to 8-bit
+//------------------------------------------------------------------------------
+TDesC8& CUtils::ConvertTo8LC( const TDesC& aSource )
+    {
+    HBufC8* buf = HBufC8::NewLC( aSource.Length() * 2 );
+    TPtr8 bufPtr = buf->Des();
+    CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource );
+
+    return *buf;
+    }
+
+//------------------------------------------------------------------------------
+// CUtils::ConvertTo16LC()
+// Converts string value to 16-bit      
+//------------------------------------------------------------------------------
+TDesC16& CUtils::ConvertTo16LC( const TDesC8& aSource )
+    {
+    HBufC16* buf16 = HBufC16::NewLC( aSource.Length() );
+    TPtr bufPtr16 = buf16->Des();
+
+    CnvUtfConverter::ConvertToUnicodeFromUtf8( bufPtr16, aSource );
+
+    return *buf16;
+    }
+
+// -------------------------------------------------------------------------------------
+// CUtils::FillNodeInfoL()
+// Fills the node info in ddf structure
+// -------------------------------------------------------------------------------------
+void CUtils::FillNodeInfoL( MSmlDmDDFObject& aNode,
+                            TSmlDmAccessTypes aAccTypes,
+                            MSmlDmDDFObject::TOccurence aOccurrence, 
+                            MSmlDmDDFObject::TScope aScope, 
+                            MSmlDmDDFObject::TDFFormat aFormat,
+                            const TDesC8& aDescription )
+                                          
+    {
+    aNode.SetAccessTypesL( aAccTypes );
+    aNode.SetOccurenceL( aOccurrence );
+    aNode.SetScopeL( aScope );
+    aNode.SetDFFormatL( aFormat );
+    if( aFormat != MSmlDmDDFObject::ENode )
+        {
+        // aNode.AddDFTypeMimeTypeL(KNSmlMimeType);
+        }
+    if ( aDescription != KNullDesC8 )
+        {
+        aNode.SetDescriptionL( aDescription );
+        }
+    }
+
+// -------------------------------------------------------------------------------------
+// CUtils::StripWhiteSpaces()
+// Removes all white spaces from a string
+// -------------------------------------------------------------------------------------
+void CUtils::RemoveIllegalCharsFromURI( TDes8& aString )
+    {
+    TInt delPos;
+    TInt delLen = 1;
+    
+    aString.TrimAll();
+    delPos = aString.Find( KWhiteSpace );
+    while ( delPos != KErrNotFound )
+        {
+        aString.Delete( delPos,delLen );
+        delPos = aString.Find( KWhiteSpace );
+        }
+    }
+
+// -------------------------------------------------------------------------------------
+// TInt CUtils::DesCToBool
+// -------------------------------------------------------------------------------------
+TInt32 CUtils::DesToBool( const TDesC8& aSource, TBool& aBool )
+    {
+    TInt retval( KErrNone );
+    
+    if ( aSource.Match( KTrue ) != KErrNotFound )
+        {
+        aBool = ETrue;
+        }
+    else if ( aSource.Match( KFalse ) != KErrNotFound )
+        {
+        aBool = EFalse;
+        }
+    else
+        {
+        retval = KErrGeneral;
+        }
+        
+    return retval;
+    }
+
+// -------------------------------------------------------------------------------------
+// CUtils::IntToCharL()
+// -------------------------------------------------------------------------------------
+TDesC8& CUtils::IntToCharL( const TInt& aObject )
+    {
+    HBufC8* buf = HBufC8::NewLC( 8 );
+    TPtr8 ptrBuf = buf->Des();
+
+    ptrBuf.Num( aObject );
+
+    return *buf;
+    }
+//------------------------------------------------------------------------------
+// TPtrC8 CUtils::AppendFirstURISeg( TDes8& aURI, TDes8& aTarget )
+//------------------------------------------------------------------------------
+TInt CUtils::AppendFirstURISeg( TDes8& aURI, TDes8& aTarget )
+    {
+    
+    TInt i = aURI.FindC(_L8("/"));
+    
+    if ( i != KErrNotFound )
+        {
+        aTarget.Append( aURI.Left( i ) );
+        aURI.Copy( aURI.Right( aURI.Length() - i - 1 ) );
+        }
+    else
+        {
+        aTarget.Copy( aURI );
+        aURI.Copy( aURI.Right( 0 ) );
+        }
+    
+    return i;
+    }
+
+//=============================================
+//      CUtils::IntLUID()
+//      Returns IntValue for aLUID
+//=============================================
+TInt CUtils::IntLUID(const TDesC8& aLUID)
+    {
+    TInt ret(0);
+
+    TLex8 lex(aLUID);
+    
+    lex.Val( ret );
+    
+    return ret;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/traces/OstTraceDefinitions.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: 
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/traces/fixed_id.definitions	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,586 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x7
+[GROUP]TRACE_NORMAL=0x3
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CADDBUFFER_ENTRY=0x1ef
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CADDBUFFER_EXIT=0x1f0
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CONSTRUCTL_ENTRY=0x1f3
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CONSTRUCTL_EXIT=0x1f4
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_DELETE_ENTRY=0x1f7
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_DELETE_EXIT=0x1f8
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_NEWL_ENTRY=0x1ad
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_NEWL_EXIT=0x1ae
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_Reset_ENTRY=0x27b
+[TRACE]TRACE_FLOW[0x7]_CADDBUFFER_Reset_EXIT=0x27c
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_CBRANCHBASE_2_ENTRY=0x209
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_CBRANCHBASE_ENTRY=0x207
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_CBRANCHBASE_EXIT=0x208
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_DELETE_ENTRY=0x20b
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_DELETE_EXIT=0x20c
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_GETALLCONNECTIONMETHODSL_ENTRY=0x277
+[TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_GETALLCONNECTIONMETHODSL_EXIT=0x278
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBASEURIL_ENTRY=0x274
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBASEURIL_EXIT=0x275
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBASEURIL_EXIT_2=0x276
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CCONNMOADAPTER_ENTRY=0x24f
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CCONNMOADAPTER_EXIT=0x250
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMMITATOMICL_ENTRY=0x263
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMMITATOMICL_EXIT=0x264
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMPLETEOUTSTANDINGCMDSL_ENTRY=0x26b
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMPLETEOUTSTANDINGCMDSL_EXIT=0x26c
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CONSTRUCTL_ENTRY=0x253
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CONSTRUCTL_EXIT=0x254
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COPYCOMMANDL_ENTRY=0x25f
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COPYCOMMANDL_EXIT=0x260
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFSTRUCTUREL_ENTRY=0x257
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFSTRUCTUREL_EXIT=0x258
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFVERSIONL_ENTRY=0x255
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFVERSIONL_EXIT=0x256
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DELETE_ENTRY=0x251
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DELETE_EXIT=0x252
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_ENTRY=0x25b
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_EXIT=0x25c
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_ENTRY=0x25d
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_EXIT=0x25e
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWLC_ENTRY=0x24d
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWLC_EXIT=0x24e
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWL_ENTRY=0x24b
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWL_EXIT=0x24c
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ROLLBACKATOMICL_ENTRY=0x265
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ROLLBACKATOMICL_EXIT=0x266
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STARTATOMICL_ENTRY=0x261
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STARTATOMICL_EXIT=0x262
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMCOMMITTEDL_ENTRY=0x269
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMCOMMITTEDL_EXIT=0x26a
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMINGSUPPORT_ENTRY=0x267
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMINGSUPPORT_EXIT=0x268
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_ENTRY=0x259
+[TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_EXIT=0x25a
+[TRACE]TRACE_FLOW[0x7]_CCONNMONODEELEMENT_CCONNMONODEELEMENT_ENTRY=0x1eb
+[TRACE]TRACE_FLOW[0x7]_CCONNMONODEELEMENT_CCONNMONODEELEMENT_EXIT=0x1ec
+[TRACE]TRACE_FLOW[0x7]_CCONNMONODEELEMENT_DELETE_ENTRY=0x1f5
+[TRACE]TRACE_FLOW[0x7]_CCONNMONODEELEMENT_DELETE_EXIT=0x1f6
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CONSTRUCTL_ENTRY=0x7d
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CONSTRUCTL_EXIT=0x7e
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CONSTRUCTOR_ENTRY=0x79
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CONSTRUCTOR_EXIT=0x7a
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_DDFSTRUCTUREL_ENTRY=0x7f
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_DDFSTRUCTUREL_EXIT=0x80
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_DESTRUCTOR_ENTRY=0x7b
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_DESTRUCTOR_EXIT=0x7c
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_IPBRANCHDDFSTRUCTUREL_ENTRY=0x279
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_IPBRANCHDDFSTRUCTUREL_EXIT=0x27a
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_NEWL_ENTRY=0x77
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_NEWL_EXIT=0x78
+[TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_SETLEAFDATAL_ENTRY=0x247
+[TRACE]TRACE_FLOW[0x7]_CONNMOADAPTER_IMPLEMENTATIONGROUPPROXY_ENTRY=0x26d
+[TRACE]TRACE_FLOW[0x7]_CONNMOADAPTER_IMPLEMENTATIONGROUPPROXY_EXIT=0x26e
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_CONSTRUCTOR_ENTRY=0x8d
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_CONSTRUCTOR_EXIT=0x8e
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_DDFSTRUCTUREL_ENTRY=0x91
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_DDFSTRUCTUREL_EXIT=0x92
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_DESTRUCTOR_ENTRY=0x8f
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_DESTRUCTOR_EXIT=0x90
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_NEWL_ENTRY=0x8b
+[TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_NEWL_EXIT=0x8c
+[TRACE]TRACE_FLOW[0x7]_CUTILS_CUTILS_ENTRY=0xe4
+[TRACE]TRACE_FLOW[0x7]_CUTILS_CUTILS_EXIT=0xe5
+[TRACE]TRACE_FLOW[0x7]_DUP1_CBRANCHBASE_CBRANCHBASE_2_EXIT=0x20a
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_ADDNODETOBUFFERL_ENTRY=0x1b
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_ADDNODETOBUFFERL_EXIT=0x1c
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_ADDNODETOBUFFERL_LEAF_ENTRY=0x1d
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_ADDNODETOBUFFERL_LEAF_EXIT=0x1e
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFINDDYNAMICNODE_ENTRY=0x49
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFINDDYNAMICNODE_EXIT=0x4b
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFINDDYNAMICNODE_MATCH_FOUND=0x4a
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFIND_ENTRY=0x148
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFIND_EXIT=0x48
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFIND_MATCH_FOUND=0x47
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFIND_RESULT_NODE=0x147
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_FINDDYNAMICNODE_ENTRY=0x43
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_FINDDYNAMICNODE_EXIT=0x45
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_FINDDYNAMICNODE_MATCH_FOUND=0x44
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_GETGROUP_ENTRY=0x4c
+[TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_GETGROUP_EXIT=0x4d
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_CHECKPREVIOUSURILIST_ENTRY=0x61
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_CHECKPREVIOUSURILIST_EXIT=0x9d
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETALLCONNECTIONMETHODSL_COUNT=0x16e
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETALLDYNAMICNODESL_ENTRY=0x65
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETALLDYNAMICNODESL_EXIT=0x67
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETCONNECTIONMETHODLC_ENTRY=0x173
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETCONNECTIONMETHODLC_EXIT_FOUND=0x175
+[TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETCONNECTIONMETHODLC_EXIT_NOT_FOUND=0x174
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDBRANCHL_ENTRY=0x16c
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDBRANCHL_EXIT=0x16d
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDNODEOBJECTL_ENTRY=0x157
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDNODEOBJECTL_EXIT=0x158
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_CHILDURILISTL_ENTRY=0x155
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_CHILDURILISTL_EXIT=0x156
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_COMMITATOMICL_UNSUPPORTED_METHOD_CALL=0x15d
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_COPYCOMMANDL_UNSUPPORTED_METHOD_CALL=0x15b
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_DELETEOBJECTL_ENTRY=0x14f
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_DELETEOBJECTL_EXIT=0x150
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_UNSUPPORTED_METHOD_CALL=0x15a
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_EXECUTECOMMANDL_UNSUPPORTED_METHOD_CALL=0x159
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTL_ENTRY=0x151
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTL_EXIT=0x152
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_ENTRY=0x153
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_EXIT=0x154
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ROLLBACKATOMICL_UNSUPPORTED_METHOD_CALL=0x15e
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_STARTATOMICL_UNSUPPORTED_METHOD_CALL=0x15c
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_STREAMCOMMMITTEDL_UNSUPPORTED_METHOD_CALL=0x160
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_STREAMINGSUPPORT_NOT_SUPPORTED=0x15f
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_UPDATELEAFOBJECTL_ENTRY=0x14c
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_UPDATELEAFOBJECTL_EXIT=0x14d
+[TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_UNSUPPORTED_METHOD_CALL=0x14e
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL=0x18a
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL_ALLREADY_EXISTS=0x181
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL_ENTRY=0xdc
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL_EXIT=0xdd
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL_NEW_NODE=0x165
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL_NEW_NODE2=0x169
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ALLMANDATORYNAPFIELDSFOUND_ENTRY=0xb8
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ALLMANDATORYNAPFIELDSFOUND_EXIT=0xb9
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_CHILDURILISTL=0x6
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_CHILDURILISTL_ENTRY=0xd8
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_ENTRY=0xcb
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_EXIT=0xcc
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_PRIVATE_DELETE=0x166
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_PRIVATE_ENTRY=0xc7
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_PRIVATE_EXIT=0xc8
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DUP1_FETCHLEAFOBJECTL_NOT_FOUND=0x189
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DUP_FETCHLEAFOBJECTL_NOT_FOUND=0x188
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTL_ENTRY=0xcf
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTL_EXIT=0xd3
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTL_NOT_FOUND=0xd2
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTL_STATUS=0xd0
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY=0xd4
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTSIZEL_EXIT=0xd7
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTSIZEL_NOT_FOUND=0xd6
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FETCHLEAFOBJECTSIZEL_STATUS=0xd5
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FINDNEWCMTYPE_3GPP=0xb4
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FINDNEWCMTYPE_ENTRY=0xb2
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FINDNEWCMTYPE_EXIT=0xb3
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETDYNAMICNAPNODEURI=0x17a
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETLEAFDATAL_ENTRY=0xa3
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETLEAFDATAL_EXIT=0x9a
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETUNMODIFIABLEFIELDADDRESULT_ENTRY=0xa4
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETUNMODIFIABLEFIELDVALUEL_ENTRY=0x16f
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETUNMODIFIABLEFIELDVALUEL_EXIT=0x170
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_MAPURITOCMATTRIBUTE_ENTRY=0xac
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_MAPURITOCMATTRIBUTE_EXIT=0xa8
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_MAPURITOCMATTRIBUTE_GET_NODE=0xa7
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_NAPCHILDURILISTL_ADDED_TO_LIST=0xc1
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_NAPCHILDURILISTL_ENTRY=0xc0
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_NAPCHILDURILISTL_EXIT=0xc2
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_PROCESSBUFFERL_ENTRY=0xdf
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_PROCESSBUFFERL_EXIT=0xe0
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_SETLEAFDATAL_EXIT=0xae
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_SETLEAFDATAL_GET_CMATTRIB=0xad
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_SETNODEDATAL_ENTRY=0xaf
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_SETNODEDATAL_EXISTS=0x163
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_SETNODEDATAL_EXIT=0x161
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_SETNODEDATAL_OK=0x162
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_UPDATELEAFOBJECTL=0x176
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_UPDATELEAFOBJECTL_ENTRY=0xc5
+[TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_UPDATELEAFOBJECTL_EXIT=0xc6
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ADDNODEOBJECTL_ALREADY_EXISTS=0x10b
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ADDNODEOBJECTL_ENTRY=0x109
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ADDNODEOBJECTL_EXIT=0x10c
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ADDNODEOBJECTL_NEW_NODE=0x167
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ADDNODEOBJECTL_NEW_NODE2=0x168
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ALLMANDATORYPROXYFIELDSFOUND_ENTRY=0xf2
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ALLMANDATORYPROXYFIELDSFOUND_EXIT=0xf3
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_CHECKFORUNMODIFIABLEFIELD_ENTRY=0xe6
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_CHECKFORUNMODIFIABLEFIELD_EXIT=0xe7
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_CHILDURILISTL_ENTRY=0x106
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_CHILDURILISTL_EXIT=0x108
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_CHILDURILISTL_NOT_FOUND=0x107
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTL_ENTRY=0xe3
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTL_EXIT=0xe5
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTL_NOT_FOUND=0xe4
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTL_PUPLIC_ENTRY=0x102
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTL_PUPLIC_EXIT=0x103
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY=0x104
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTSIZEL_EXIT=0x105
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECT_OK=0x18
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FINDCONNECTIONMETHODL_ENTRY=0x171
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FINDCONNECTIONMETHODL_EXIT=0x172
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_GETALLDYNAMICPROXYNODESL_ENTRY=0xf8
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_GETALLDYNAMICPROXYNODESL_EXIT=0xfa
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_GETALLDYNAMICPROXYNODESL_PROXY=0xfb
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_GETALLDYNAMICPROXYNODES_ADDED_TO_LIST=0x1
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_GETDYNAMICPROXYNODEURI=0x17e
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_MAPURITOCMATTRIBUTE_ENTRY=0xea
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_MAPURITOCMATTRIBUTE_EXIT=0xeb
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_PROCESSBUFFERL_ENTRY=0x10d
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_PROCESSBUFFERL_EXIT=0x10f
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_SETLEAFDATAL_ENTRY=0xf4
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_SETLEAFDATAL_EXIT=0xf5
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_SETNODEDATAL_ENTRY=0xf6
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_SETNODEDATAL_EXIT=0xf7
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_UPDATELEAFOBJECTL=0x179
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_UPDATELEAFOBJECTL_ENTRY=0xfe
+[TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_UPDATELEAFOBJECTL_EXIT=0xff
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETENDOFURIFROMSEG_ENTRY=0x13b
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETENDOFURIFROMSEG_EXIT=0x13c
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETENDOFURIFROMSEG_EXIT2=0x13f
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETFIRSTURISEG_ENTRY=0x110
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETFIRSTURISEG_EXIT=0x13d
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETLASTURISEG_ENTRY=0x123
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETLASTURISEG_EXIT=0x124
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETLASTURISEG_EXIT2=0x141
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSECONDTURISEG_EXIT=0x140
+[TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSECONDURISEG_ENTRY=0x112
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CNAPBRANCH_CHILDURILISTL=0x182
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CNAPBRANCH_CHILDURILISTL_EXIT=0xd9
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CNAPBRANCH_GETDYNAMICNAPNODEURI=0x17b
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CNAPBRANCH_GETUNMODIFIABLEFIELDADDRESULT_EXIT=0xa5
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CNAPBRANCH_UPDATELEAFOBJECTL=0x177
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CPROXYBRANCH_CHILDURILISTL=0x186
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CPROXYBRANCH_UPDATELEAFOBJECTL=0x178
+[TRACE]TRACE_NORMAL[0x3]_DUP1_CPROXYRANCH_GETDYNAMICPROXYNODEURI=0x17f
+[TRACE]TRACE_NORMAL[0x3]_DUP2_CNAPBRANCH_CHILDURILISTL=0x183
+[TRACE]TRACE_NORMAL[0x3]_DUP2_CPROXYBRANCH_CHILDURILISTL=0x187
+[[OBSOLETE]][TRACE]TRACE_DEBUG[0x9]_CUTILS_GETSEGPOSITIONFROMURI=0x1
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_AddNodeToBufferL_ENTRY=0x1b3
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_AddNodeToBufferL_EXIT=0x1b4
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_AddNodeToBufferL__leaf_EXIT=0x1b6
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_AddNodeToBufferL_leaf_ENTRY=0x1b5
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CONSTRUCTOR_ENTRY=0x1af
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CONSTRUCTOR_EXIT=0x1b0
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CacheFindDynamicNode_ENTRY=0x1c5
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CacheFindDynamicNode_EXIT=0x1c6
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CacheFind_ENTRY=0x1c3
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_CacheFind_EXIT=0x1c4
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_DESTRUCTOR_ENTRY=0x1b1
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_DESTRUCTOR_EXIT=0x1b2
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_FindDynamicNode_ENTRY=0x1b9
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_FindDynamicNode_EXIT=0x1ba
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_Find_ENTRY=0x1b7
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_Find_EXIT=0x1b8
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_GetGroup_ENTRY=0x1bb
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_GetGroup_EXIT=0x1bc
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_NEWLC_ENTRY=0x9d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_NEWLC_EXIT=0x9e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_NEWL_ENTRY=0x9b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CADDBUFFER_NEWL_EXIT=0x9c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_CALLBACK_ENTRY=0x20d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_CALLBACK_EXIT=0x20e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_GETALLCONNECTIONMETHODS_ENTRY=0x20f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CBRANCHBASE_GETALLCONNECTIONMETHODS_EXIT=0x210
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBASEURI_ENTRY=0x248
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBASEURI_EXIT=0x249
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBASEURI_EXIT_2=0x24a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBRANCH_ENTRY=0x165
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDBRANCH_EXIT=0x166
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDNODEOBJECTL_ENTRY=0x181
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ADDNODEOBJECTL_EXIT=0x182
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CCONNMOADAPTER_ENTRY=0x214
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CCONNMOADAPTER_EXIT=0x215
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CHILDURILISTL_ENTRY=0x17f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CHILDURILISTL_EXIT=0x180
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMMITATOMICL_ENTRY=0x18b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMMITATOMICL_EXIT=0x18c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMPLETEOUTSTANDINGCMDSL_ENTRY=0x193
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COMPLETEOUTSTANDINGCMDSL_EXIT=0x194
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CONSTRUCTL_ENTRY=0x16f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CONSTRUCTL_EXIT=0x170
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CONSTRUCTOR_ENTRY=0x16b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_CONSTRUCTOR_EXIT=0x16c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COPYCOMMANDL_ENTRY=0x228
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_COPYCOMMANDL_EXIT=0x229
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFSTRUCTUREL_ENTRY=0x173
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFSTRUCTUREL_EXIT=0x174
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFVERSIONL_ENTRY=0x171
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DDFVERSIONL_EXIT=0x172
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DELETEOBJECTL_ENTRY=0x179
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DELETEOBJECTL_EXIT=0x17a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DELETE_ENTRY=0x218
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DELETE_EXIT=0x219
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DESTRUCTOR_ENTRY=0x16d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_DESTRUCTOR_EXIT=0x16e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_ENTRY=0x224
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_EXIT=0x225
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_ENTRY=0x226
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_EXIT=0x227
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_FETCHLEAFOBJECTL_ENTRY=0x17b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_FETCHLEAFOBJECTL_EXIT=0x17c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_ENTRY=0x17d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_EXIT=0x17e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWLC_ENTRY=0x169
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWLC_EXIT=0x16a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWL_ENTRY=0x167
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_NEWL_EXIT=0x168
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ROLLBACKATOMICL_ENTRY=0x18d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_ROLLBACKATOMICL_EXIT=0x18e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STARTATOMICL_ENTRY=0x189
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STARTATOMICL_EXIT=0x18a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMCOMMITTEDL_ENTRY=0x191
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMCOMMITTEDL_EXIT=0x192
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMINGSUPPORT_ENTRY=0x18f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_STREAMINGSUPPORT_EXIT=0x190
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_UPDATELEAFOBJECTL_ENTRY=0x175
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_UPDATELEAFOBJECTL_EXIT=0x176
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_ENTRY=0x22a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_EXIT=0x237
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_ADDNODEOBJECTL_ENTRY=0x1ab
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_ADDNODEOBJECTL_EXIT=0x1ac
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_CHILDURILISTL_ENTRY=0x1a9
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_CHILDURILISTL_EXIT=0x1aa
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_CONSTRUCTOR_ENTRY=0x233
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_CONSTRUCTOR_EXIT=0x234
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_DDFSTRUCTUREL_ENTRY=0x19d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_DDFSTRUCTUREL_EXIT=0x19e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_DELETEOBJECTL_ENTRY=0x1a3
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_DELETEOBJECTL_EXIT=0x1a4
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_DESTRUCTOR_ENTRY=0x235
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_DESTRUCTOR_EXIT=0x236
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_FETCHLEAFOBJECTL_ENTRY=0x1a5
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_FETCHLEAFOBJECTL_EXIT=0x1a6
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY=0x1a7
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_FETCHLEAFOBJECTSIZEL_EXIT=0x1a8
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_NEWL_ENTRY=0x232
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_NEWL_EXIT=0x22d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_UPDATELEAFOBJECTL_ENTRY=0x19f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CEAPBRANCH_UPDATELEAFOBJECTL_EXIT=0x1a0
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_ADDNODEOBJECTL_ENTRY=0xc2
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_ADDNODEOBJECTL_EXIT=0xc3
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_AllMandatoryNapFieldsFound_ENTRY=0x14b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_AllMandatoryNapFieldsFound_EXIT=0x14c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CHECKPREVIOUSURILIST_ENTRY=0xe8
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CHECKPREVIOUSURILIST_EXIT=0xe9
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CHILDURILISTL_ENTRY=0xc0
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CHILDURILISTL_EXIT=0xc1
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CheckForUnmodifiableField_ENTRY=0x141
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_CheckForUnmodifiableField_EXIT=0x142
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_DELETEOBJECTL_ENTRY=0xba
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_DELETEOBJECTL_EXIT=0xbb
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_FETCHLEAFOBJECTL_ENTRY=0xbc
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_FETCHLEAFOBJECTL_EXIT=0xbd
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY=0xbe
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_FETCHLEAFOBJECTSIZEL_EXIT=0xbf
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_FindNewCmType_ENTRY=0x149
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_FindNewCmType_EXIT=0x14a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_GETURILISTFORNAPNODEL_ENTRY=0x127
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_GETURILISTFORNAPNODEL_EXIT=0x128
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_GetLeafDataL_ENTRY=0x1c1
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_GetLeafDataL_EXIT=0x1c2
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_GetUnmodifiableFieldValue_ENTRY=0x1bf
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_GetUnmodifiableFieldValue_EXIT=0x1c0
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_IPBRANCHDDFSTRUCTURE_ENTRY=0x81
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_IPBRANCHDDFSTRUCTURE_EXIT=0x82
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_MapUriToCmAttribute_ENTRY=0x143
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_MapUriToCmAttribute_EXIT=0x144
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_NAPCHILDURILISTL_ENTRY=0x105
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_NAPCHILDURILISTL_EXIT=0x106
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_ProcessBufferL_ENTRY=0x14d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_ProcessBufferL_EXIT=0x14e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_SetLeafDataL_ENTRY=0x145
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_SetLeafDataL_EXIT=0x146
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_SetNodeDataL_ENTRY=0x147
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_SetNodeDataL_EXIT=0x148
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_UPDATELEAFOBJECTL_ENTRY=0xb6
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_UPDATELEAFOBJECTL_EXIT=0xb7
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_UPDATELEAFOBJECTL_STREAM_ENTRY=0xb8
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CNAPBRANCH_UPDATELEAFOBJECTL_STREAM_EXIT=0xb9
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CONNMOADAPTER_IMPLEMENTATIONGROUPPROXY_ENTRY=0x195
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CONNMOADAPTER_IMPLEMENTATIONGROUPPROXY_EXIT=0x196
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_ADDNODEOBJECTL_ENTRY=0x121
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_ADDNODEOBJECTL_EXIT=0x122
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_AllMandatoryProxyFieldsFound_ENTRY=0x135
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_AllMandatoryProxyFieldsFound_EXIT=0x136
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_CHILDURILISTL_ENTRY=0x11f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_CHILDURILISTL_EXIT=0x120
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_CheckForUnmodifiableField_ENTRY=0x12f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_CheckForUnmodifiableField_EXIT=0x130
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_DELETEOBJECTL_ENTRY=0x119
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_DELETEOBJECTL_EXIT=0x11a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_FETCHLEAFOBJECTL_ENTRY=0x11b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_FETCHLEAFOBJECTL_EXIT=0x11c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY=0x11d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_FETCHLEAFOBJECTSIZEL_EXIT=0x11e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_FindConnectionMethod_ENTRY=0x133
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_FindConnectionMethod_EXIT=0x134
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETALLDYNAMICPROXYNODES_ENTRY=0x113
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETALLDYNAMICPROXYNODES_EXIT=0x114
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETCONNECTIONMETHOD_ENTRY=0x110
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETCONNECTIONMETHOD_EXIT=0x111
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETDYNAMICNODESFORPROXYFIELDL_ENTRY=0x125
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETDYNAMICNODESFORPROXYFIELDL_EXIT=0x126
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETURILISTFORPROXYNODEL_ENTRY=0x123
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_GETURILISTFORPROXYNODEL_EXIT=0x124
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_MapUriToCmAttribute_ENTRY=0x131
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_MapUriToCmAttribute_EXIT=0x132
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_ProcessBufferL_ENTRY=0x13b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_ProcessBufferL_EXIT=0x13c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_SetLeafDataL_ENTRY=0x137
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_SetLeafDataL_EXIT=0x138
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_SetNodeDataL_ENTRY=0x139
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_SetNodeDataL_EXIT=0x13a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_UPDATELEAFOBJECTL_ENTRY=0x115
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_UPDATELEAFOBJECTL_EXIT=0x116
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_UPDATELEAFOBJECTL_STREAM_ENTRY=0x117
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CPROXYBRANCH_UPDATELEAFOBJECTL_STREAM_EXIT=0x118
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CONSTRUCTL_ENTRY=0x26
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CONSTRUCTL_EXIT=0x27
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CONVERTTO16LC_ENTRY=0x1a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CONVERTTO16LC_EXIT=0x1b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CONVERTTO8LC_ENTRY=0x18
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CONVERTTO8LC_EXIT=0x19
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CUTILS_ENTRY=0x22
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_CUTILS_EXIT=0x23
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_DESTOINT_ENTRY=0x1c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_DESTOINT_EXIT=0x1d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_DesToBool_ENTRY=0x13d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_DesToBool_EXIT=0x13e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_ExtractCmId_ENTRY=0x13f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_ExtractCmId_EXIT=0x140
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETALLDYNAMICNODESL_ENTRY=0x1bd
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETALLDYNAMICNODESL_EXIT=0x1be
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETENDOFURIFROMSEG_ENTRY=0x3f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETENDOFURIFROMSEG_EXIT=0x41
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETFIRSTURISEG_ENTRY=0xea
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETFIRSTURISEG_EXIT=0x104
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETLASTURISEG_ENTRY=0x33
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETLASTURISEG_EXIT=0x36
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETLASTURISEG_EXIT2=0x37
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETSECONDTURISEG_EXIT=0xec
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETSECONDURISEG_ENTRY=0xeb
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETSEGFROMURI_ENTRY=0x3c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETSEGFROMURI_EXIT=0x3d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETSEGPOSITIONFROMURI_ENTRY=0x49
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETSEGPOSITIONFROMURI_EXIT=0x4a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETURILISTFORNODEL_ENTRY=0x12d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_GETURILISTFORNODEL_EXIT=0x12e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NEWLC_ENTRY=0xe2
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NEWLC_EXIT=0xe3
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NEWL_ENTRY=0xe0
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NEWL_EXIT=0xe1
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NUMOFURISEGS_ENTRY=0x39
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NUMOFURISEGS_ENTRY_EXIT=0x3b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NUMOFURISEGS_EXIT=0xf
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CUTILS_NUMOFURISEG_ENTRY=0x38
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_ADDNODEOBJECTL_ENTRY=0x163
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_ADDNODEOBJECTL_EXIT=0x164
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_CHILDURILISTL_ENTRY=0x161
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_CHILDURILISTL_EXIT=0x162
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_CONSTRUCTOR_ENTRY=0x151
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_CONSTRUCTOR_EXIT=0x152
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_DDFSTRUCTUREL_ENTRY=0x155
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_DDFSTRUCTUREL_EXIT=0x156
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_DELETEOBJECTL_ENTRY=0x15b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_DELETEOBJECTL_EXIT=0x15c
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_DESTRUCTOR_ENTRY=0x153
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_DESTRUCTOR_EXIT=0x154
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_FETCHLEAFOBJECTL_ENTRY=0x15d
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_FETCHLEAFOBJECTL_EXIT=0x15e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_FETCHLEAFOBJECTSIZEL_ENTRY=0x15f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_FETCHLEAFOBJECTSIZEL_EXIT=0x160
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_NEWL_ENTRY=0x14f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_NEWL_EXIT=0x150
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_UPDATELEAFOBJECTL_ENTRY=0x157
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_UPDATELEAFOBJECTL_EXIT=0x158
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_UPDATELEAFOBJECTL_STREAM_ENTRY=0x159
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_CWLANBRANCH_UPDATELEAFOBJECTL_STREAM_EXIT=0x15a
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CEAPBRANCH_UPDATELEAFOBJECTL_ENTRY=0x1a1
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CEAPBRANCH_UPDATELEAFOBJECTL_EXIT=0x1a2
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CPROXYBRANCH_GETCONNECTIONMETHOD_EXIT=0x112
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CUTILS_CUTILS_ENTRY=0x24
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CUTILS_CUTILS_EXIT=0x25
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CUTILS_GETENDOFURIFROMSEG_EXIT=0x40
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CUTILS_GETSEGFROMURI_EXIT=0x3e
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_CUTILS_GETSEGPOSITIONFROMURI_EXIT=0x4b
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP1_TLUID_EQUALS_EXIT=0x273
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_DUP2_CUTILS_GETSEGFROMURI_EXIT=0x42
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_TLUID_DELETE_ENTRY=0x26f
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_TLUID_DELETE_EXIT=0x270
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_TLUID_EQUALS_ENTRY=0x271
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_TLUID_EQUALS_EXIT=0x272
+[[OBSOLETE]][TRACE]TRACE_FLOW[0x7]_TLUID_GETCMID_EXIT=0x246
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_COMMITATOMICL_UNSUPPORTED_METHOD_CALL=0xe
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_COPYCOMMANDL_UNSUPPORTED_METHOD_CALL=0xc
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_UNSUPPORTED_METHOD_CALL=0xb
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_EXECUTECOMMANDL_UNSUPPORTED_METHOD_CALL=0xa
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_ROLLBACKATOMICL_UNSUPPORTED_METHOD_CALL=0xf
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_STARTATOMICL_UNSUPPORTED_METHOD_CALL=0xd
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_STREAMCOMMMITTEDL_UNSUPPORTED_METHOD_CALL=0x10
+[[OBSOLETE]][TRACE]TRACE_IMPORTANT[0x2]_CCONNMOADAPTER_UPDATELEAFOBJECTL_UNSUPPORTED_METHOD_CALL=0x9
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_CACHEFIND_ENTRY=0x46
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_FIND_ENTRY=0x1f
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_FIND_EXIT=0x20
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CADDBUFFER_FIND_MATCH_FOUND=0x42
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_CHECKPREVIOUSURILIST_EXIT=0x62
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETALLCONNECTIONMETHODS_COUNT=0xf9
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETALLDYNAMICNODESL_ADDED_TO_LIST=0x17
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETALLDYNAMICNODESL_NOTFOUND=0x66
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETCONNECTIONMETHODL_ENTRY=0x68
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETCONNECTIONMETHODL_EXIT_FOUND=0x6a
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETCONNECTIONMETHODL_EXIT_NOT_FOUND=0x69
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETURILISTFORNODEL_ENTRY=0x63
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETURILISTFORNODEL_EXIT=0x185
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETURILISTFORNODEL_NOTFOUND=0x184
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CBRANCHBASE_GETURILISTFORNODEL_OK=0x14
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDBRANCH_ENTRY=0x149
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDBRANCH_EXIT=0x14a
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDNODEOBJECTL_ENTRY=0x7b
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ADDNODEOBJECTL_EXIT=0x7c
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_CHILDURILISTL_ENTRY=0x85
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_CHILDURILISTL_EXIT=0x86
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_COMMITATOMICL_UNSUPPORTED_METHOD_CALL=0x81
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_COPYCOMMANDL_UNSUPPORTED_METHOD_CALL=0x7f
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_DDFVERSIONL_VERSION=0x14b
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_DELETEOBJECTL_ENTRY=0x8b
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_DELETEOBJECTL_EXIT=0x8c
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_EXECUTECOMMANDL_STREAM_UNSUPPORTED_METHOD_CALL=0x7e
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_EXECUTECOMMANDL_UNSUPPORTED_METHOD_CALL=0x7d
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTL_ENTRY=0x89
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTL_EXIT=0x8a
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_ENTRY=0x87
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_FETCHLEAFOBJECTSIZEL_EXIT=0x88
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_ROLLBACKATOMICL_UNSUPPORTED_METHOD_CALL=0x82
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_STARTATOMICL_UNSUPPORTED_METHOD_CALL=0x80
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_STREAMCOMMMITTEDL_UNSUPPORTED_METHOD_CALL=0x84
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_STREAMINGSUPPORT_NOT_SUPPORTED=0x83
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_UPDATELEAFOBJECTL_ENTRY=0x8e
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_UPDATELEAFOBJECTL_EXIT=0x8f
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMOADAPTER_UPDATELEAFOBJECTL_STREAM_UNSUPPORTED_METHOD_CALL=0x8d
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMONODEELEMENT_CCONNMONODEELEMENT_ENTRY_2=0x40
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CCONNMONODEELEMENT_CCONNMONODEELEMENT_EXIT_2=0x41
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL=0x180
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_ADDNODEOBJECTL_ALLREADY_EXISTS=0xde
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_PUBLIC_ENTRY=0xc3
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_DELETEOBJECTL_PUBLIC_EXIT=0xc4
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_FINDNEWCMTYPE_WLAN=0xb5
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETLEAFDATAL=0x99
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETUNMODIFIABLEFIELDVALUE=0x98
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETUNMODIFIABLEFIELDVALUE_ENTRY=0x97
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETUNMODIFIABLEFIELDVALUE_EXIT=0xa2
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETURILISTFORNAPNODEL=0x7
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETURILISTFORNAPNODEL_NOTFOUND=0xf
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CNAPBRANCH_GETURILISTFORNAPNODEL_OK=0xe
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_ADDNODEOBJECTL_NEW_NODE=0x164
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_CHILDURILISTL3=0x4
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FETCHLEAFOBJECTSIZE_OK=0x19
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FINDCONNECTIONMETHOD_ENTRY=0xee
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_FINDCONNECTIONMETHOD_EXIT=0x10e
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CPROXYBRANCH_GETDYNAMICNODESFORPROXYFIELDL_ADDED_TO_LIST=0x5
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETALLDYNAMICNODESL_ADDED_TO_LIST=0x1a
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGFROMURI_ENTRY=0x133
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGFROMURI_EXIT=0x136
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGFROMURI_EXIT2=0x139
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGFROMURI_EXIT3=0x142
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGPOSITIONFROMURI_ENTRY=0x143
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGPOSITIONFROMURI_EXIT=0x144
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETSEGPOSITIONFROMURI_EXIT2=0x145
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETURILISTFORNODEL_NOTFOUND=0x13
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_GETURILISTFORNODEL_OK=0x16
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_NUMOFURISEGS_ENTRY_EXIT=0x146
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_CUTILS_NUMOFURISEG_ENTRY=0x131
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_DUP2_CPROXYBRANCH_UPDATELEAFOBJECTL=0x17d
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_DUP3_CNAPBRANCH_UPDATELEAFOBJECTL=0x17c
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_GetUriListForProxyNodeL=0x2
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_GetUriListForProxyNodeL2=0x3
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_TLUID_GETCMID=0x16b
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_TLUID_TLUID=0x16a
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_TLUID_TLUID_ID=0x91
+[[OBSOLETE]][TRACE]TRACE_NORMAL[0x3]_TLUID_TLUID_NAME=0x90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/connmoadapter/traces/trace.properties	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<trace_properties>
+<enum name="TError">
+<value id="0">EOk</value>
+<value id="1">ENotFound</value>
+<value id="2">EInvalidObject</value>
+<value id="3">EAlreadyExists</value>
+<value id="4">ETooLargeObject</value>
+<value id="5">EDiskFull</value>
+<value id="6">EError</value>
+<value id="7">ERollbackFailed</value>
+<value id="8">EObjectInUse</value>
+<value id="9">ENoMemory</value>
+<value id="10">ECommitOK</value>
+<value id="11">ERollbackOK</value>
+<value id="12">ECommitFailed</value>
+<value id="13">ENotAllowed</value>
+</enum>
+<enum name="TConnectionMethodCommonAttributes">
+<value id="0">ECmCoverage</value>
+<value id="1">ECmDefaultPriority</value>
+<value id="2">ECmDestination</value>
+<value id="3">ECmBearerHasUi</value>
+<value id="4">ECmIPv6Supported</value>
+<value id="5">ECmDefaultUiPriority</value>
+<value id="100">ECmBearerIcon</value>
+<value id="101">ECmBearerAvailableIcon</value>
+<value id="200">ECmBearerAvailableName</value>
+<value id="201">ECmBearerSupportedName</value>
+<value id="202">ECmBearerAvailableText</value>
+<value id="203">ECmBearerNamePopupNote</value>
+<value id="204">ECmCommsDBBearerType</value>
+<value id="205">ECmBearerSettingName</value>
+<value id="206">ECmVirtual</value>
+<value id="400">ECmInvalidAttribute</value>
+<value id="401">ECmAddToAvailableList</value>
+<value id="402">ECmLoadResult</value>
+<value id="500">ECmBearerType</value>
+<value id="501">ECmName</value>
+<value id="502">ECmIapId</value>
+<value id="503">ECmStartPage</value>
+<value id="504">ECmHidden</value>
+<value id="505">ECmProtected</value>
+<value id="506">ECmNamingMethod</value>
+<value id="507">ECmSeamlessnessLevel</value>
+<value id="508">ECmElementID</value>
+<value id="509">ECmNetworkId</value>
+<value id="510">ECmConnected</value>
+<value id="511">ECmId</value>
+<value id="512">ECmWapId</value>
+<value id="513">ECmIapServiceId</value>
+<value id="600">ECmMetaHighlight</value>
+<value id="601">ECmMetaHiddenAgent</value>
+<value id="602">ECmNextLayerIapId</value>
+<value id="603">ECmNextLayerSNAPId</value>
+<value id="1000">ECmProxyUsageEnabled</value>
+<value id="1001">ECmProxyServerName</value>
+<value id="1002">ECmProxyProtocolName</value>
+<value id="1003">ECmProxyPortNumber</value>
+<value id="1004">ECmProxyExceptions</value>
+<value id="1999">ECmProxyRangeMax</value>
+<value id="2000">ECmChargeCardUsageEnabled</value>
+<value id="2001">ECmChargeCardAccountNumber</value>
+<value id="2002">ECmChargeCardPIN</value>
+<value id="2003">ECmChargeCardLocalRule</value>
+<value id="2004">ECmChargeCardNatRule</value>
+<value id="2005">ECmChargeCardIntlRule</value>
+<value id="2999">ECmChargeCardRangeMax</value>
+<value id="3000">ECmLocationUsageEnabled</value>
+<value id="3001">ECmLocationIntlPrefixCode</value>
+<value id="3002">ECmLocationNatPrefixCode</value>
+<value id="3003">ECmLocationNatCode</value>
+<value id="3004">ECmLocationAreaCode</value>
+<value id="3005">ECmLocationDialOutCode</value>
+<value id="3006">ECmLocationDisableCallWaitingCode</value>
+<value id="3007">ECmLocationMobile</value>
+<value id="3008">ECmLocationUsePulseDial</value>
+<value id="3009">ECmLocationWaitForDialTone</value>
+<value id="3010">ECmLocationPauseAfterDialOut</value>
+<value id="3999">ECmLocationRangeMax</value>
+<value id="4000">ECmWapIPGatewayAddress</value>
+<value id="4001">ECmWapIPWSPOption</value>
+<value id="4002">ECmWapIPSecurity</value>
+<value id="4003">ECmWapIPProxyPort</value>
+<value id="4004">ECmWapIPProxyLoginName</value>
+<value id="4005">ECmWapIPProxyLoginPass</value>
+<value id="4099">ECmWapRangeMax</value>
+<value id="5000">ECmCommonAttributesStart</value>
+<value id="5001">ECmIFName</value>
+<value id="5002">ECmIFParams</value>
+<value id="5003">ECmIFNetworks</value>
+<value id="5004">ECmIFPromptForAuth</value>
+<value id="5005">ECmIFAuthName</value>
+<value id="5006">ECmIFAuthPass</value>
+<value id="5007">ECmIFAuthRetries</value>
+<value id="5050">ECmIPNetmask</value>
+<value id="5051">ECmIPGateway</value>
+<value id="5052">ECmIPAddFromServer</value>
+<value id="5053">ECmIPAddress</value>
+<value id="5054">ECmIPDNSAddrFromServer</value>
+<value id="5055">ECmIPNameServer1</value>
+<value id="5056">ECmIPNameServer2</value>
+<value id="5057">ECmIP6DNSAddrFromServer</value>
+<value id="5058">ECmIP6NameServer1</value>
+<value id="5059">ECmIP6NameServer2</value>
+<value id="5060">ECmIPAddrLeaseValidFrom</value>
+<value id="5061">ECmIPAddrLeaseValidTo</value>
+<value id="5100">ECmConfigDaemonManagerName</value>
+<value id="5101">ECmConfigDaemonName</value>
+<value id="5110">ECmEnableLPCExtension</value>
+<value id="5111">ECmDisablePlainTextAuth</value>
+<value id="5999">ECmCommonAttributesEnd</value>
+<value id="6000">ECmSpecialAttributes</value>
+<value id="6001">ECmIsLinked</value>
+<value id="8999">ECmSpecialAttributesEnd</value>
+</enum>
+</trace_properties>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/globalwlansettings/group/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2008 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:   build info file for globalwlanadapter
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+./globalwlanadapter.mmp
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/globalwlansettings/group/globalwlanadapter.mmp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2008 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:   Project definition file for project globalwlanadapter 
+*
+*/
+
+
+
+#include  <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+CAPABILITY      CAP_ECOM_PLUGIN
+TARGET	      	globalwlanadapter.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x1315DBD
+VENDORID        VID_DEFAULT
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+
+USERINCLUDE     ../inc
+
+START RESOURCE	../src/globalwlanadapter.rss
+END
+
+SOURCEPATH ../src
+SOURCE globalwlanadapter.cpp
+
+LIBRARY		charconv.lib commdb.lib efsrv.lib ecom.lib euser.lib  
+LIBRARY		nsmldebug.lib sysutil.lib
+LIBRARY		inetprotutil.lib
+LIBRARY 	centralrepository.lib bafl.lib estor.lib edbms.lib FeatMgr.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/globalwlansettings/inc/globalwlanadapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,392 @@
+/*
+* Copyright (c) 2008 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:   Global WLAN settings adapter
+*
+*/
+
+
+
+#ifndef __GLOBALWLANADAPTER_H__
+#define __GLOBALWLANADAPTER_H__
+
+
+// -----------------------------------------------------------------------------------------------
+// Includes
+// -----------------------------------------------------------------------------------------------
+#include <utf.h>
+#include <commdb.h>
+#include <EapSettings.h>
+#include <internetconnectivitycrkeys.h>
+#include <smldmadapter.h>
+
+
+// -----------------------------------------------------------------------------------------------
+// Constants
+// -----------------------------------------------------------------------------------------------
+
+// The nodes of the DDF structure
+_LIT8( KNSmlWLan, "WLAN" );
+_LIT8( KNSmlWLanInternetConnectivityTest, "InternetConnectivityTest" );
+_LIT8( KNSmlWLanUseDefaultSettings, "UseDefaultSettings" );
+_LIT8( KNSmlWLanLongRetryLimit, "LongRetryLimit" );
+_LIT8( KNSmlWLanShortRetryLimit, "ShortRetryLimit" );
+_LIT8( KNSmlWLanRTSThreshold, "RTSThreshold" );
+_LIT8( KNSmlWLanTXPowerLevel, "TXPowerLevel" );
+_LIT8( KNSmlWLanPowerSaving, "PowerSaving" );
+_LIT8( KNSmlWLanBackgroundScanInterval, "BackgroundScanInterval" );
+_LIT8( KNSmlWLanScanRate, "ScanRate" );
+_LIT8( KNSmlWLanRCPITrigger, "RCPITrigger" );
+_LIT8( KNSmlWLanMinActiveChannelTime, "MinActiveChannelTime" );
+_LIT8( KNSmlWLanMaxActiveChannelTime, "MaxActiveChannelTime" );
+_LIT8( KNSmlWLanMaxTxMSDULifeTime, "MaxTxMSDULifeTime" );
+_LIT8( KNSmlWLanScanExpirationTimer, "ScanExpirationTimer" );
+_LIT8( KNSmlWLanUnloadDriverTimer, "UnloadDriverTimer" );
+_LIT8( KNSmlWLanRoamTimer, "RoamTimer" );
+_LIT8( KNSmlWLanRCPIDifference, "RCPIDifference" );
+_LIT8( KNSmlWLanConnRegainTimer, "ConnRegainTimer" );
+_LIT8( KNSmlWLanMaxTriesToFindNw, "MaxTriesToFindNw" );
+_LIT8( KNSmlWLanDelayBetweenFindNw, "DelayBetweenFindNw" );
+_LIT8( KNSmlWLanAllowRadioMeasurements, "AllowRadioMeasurements" );
+_LIT8( KNSmlWLanMinPassiveChannelTime, "MinPassiveChannelTime" );
+_LIT8( KNSmlWLanMaxPassiveChannelTime, "MaxPassiveChannelTime" );
+_LIT8( KNSmlWLanMaxApFailureCount, "MaxApFailureCount" );
+_LIT8( KNSmlWLanLongBeaconFindCount, "LongBeaconFindCount" );
+_LIT8( KNSmlWLanQosNullFrameInterval, "QosNullFrameInterval" );
+_LIT8( KNSmlWLanQosNullFrameTimeout, "QosNullFrameTimeout" );
+_LIT8( KNSmlWLanMTU, "MTU" );
+_LIT8( KNSmlWLanNode, "InternetConnectivityTest/UseDefaultSettings/LongRetryLimit/ShortRetryLimit/RTSThreshold/TXPowerLevel/PowerSaving/BackgroundScanInterval/ScanRate/RCPITrigger/MinActiveChannelTime/MaxActiveChannelTime/MaxTxMSDULifeTime/ScanExpirationTimer/UnloadDriverTimer/RoamTimer/RCPIDifference/ConnRegainTimer/MaxTriesToFindNw/DelayBetweenFindNw/AllowRadioMeasurements/MinPassiveChannelTime/MaxApFailureCount/LongBeaconFindCount/QosNullFrameInterval/QosNullFrameTimeout" );
+
+//DDF version number
+_LIT8( KNSmGlobalWlanAdapterDDFversion, "1.0");
+_LIT8( KNSmlMimeType, "text/plain" );
+_LIT8( KNSmlEmpty, "");
+
+
+const TInt KUriSegListLength = 128;
+// Maximum input size for nodes
+const TInt KInputMaxLength = 50;
+// Max lenght of the DDF type
+const TInt KTypeMaxLength = 40;
+// Repository id
+const TUid KCRUidWlanDeviceSettingsRegistryId = {0x101f8e44};
+
+
+// WLan engine central repository parameters
+const TUint32 KWlanScanRate =                            0x00000004;
+const TUint32 KWlanRcpiTrigger =                         0x00000005;
+const TUint32 KWlanMinActiveChannelTime =                0x00000006;
+const TUint32 KWlanMaxActiveChannelTime =                0x00000007;
+const TUint32 KWlanMaxTxMSDULifeTime =                   0x00000008;
+const TUint32 KWlanScanExpirationTimer =                 0x00000009;
+const TUint32 KWlanUnloadDriverTimer =                   0x0000000A;
+const TUint32 KWlanRoamTimer =                           0x0000000B;
+const TUint32 KWlanRcpiDifference =                      0x0000000C;
+const TUint32 KWlanConnRegainTimer =                     0x0000000D;
+const TUint32 KWlanMaxTriesToFindNw =                    0x0000000E;
+const TUint32 KWlanDelayBetweenFindNw =                  0x0000000F;
+const TUint32 KWlanMTU =								 0x00000010;
+const TUint32 KWlanMinPassiveChannelTime =               0x00000011;
+const TUint32 KWlanMaxPassiveChannelTime =               0x00000012;
+const TUint32 KWlanMaxApFailureCount =                   0x00000013;
+const TUint32 KWlanLongBeaconFindCount =                 0x00000014;
+const TUint32 KWlanQosNullFrameInterval =                0x00000015;
+const TUint32 KWlanQosNullFrameTimeout =                 0x00000016;
+
+// -----------------------------------------------------------------------------------------------
+// Structures
+// -----------------------------------------------------------------------------------------------
+
+// Structure for storing the settings to be stored into cenrep and commsdb
+struct TGlobalSettings
+{
+	TUint32 internetConnectivityTest;
+	TBool internetConnectivityTestPresent;
+	TBool useDefaultSettings;
+	TBool useDefaultSettingsPresent;
+	TUint32 longRetryLimit;
+	TBool longRetryLimitPresent;
+	TUint32 shortRetryLimit;
+	TBool shortRetryLimitPresent;
+	TUint32 RTSThreshold;
+	TBool RTSThresholdPresent;
+	TUint32 TXPowerLevel;
+	TBool TXPowerLevelPresent;
+	TBool powerSaving;
+	TBool powerSavingPresent;
+	TUint32 backgroundScanInterval;
+	TBool backgroundScanIntervalPresent;
+	TUint32 scanRate;
+	TBool scanRatePresent;
+	TUint32 RCPITrigger;
+	TBool RCPITriggerPresent;
+	TUint32 minActiveChannelTime;
+	TBool minActiveChannelTimePresent;
+	TUint32 maxActiveChannelTime;
+	TBool maxActiveChannelTimePresent;
+	TUint32 maxTxMSDULifeTime;
+	TBool maxTxMSDULifeTimePresent;
+	TUint32 scanExpirationTimer;
+	TBool scanExpirationTimerPresent;
+	TUint32 unloadDriverTimer;
+	TBool unloadDriverTimerPresent;
+	TUint32 roamTimer;
+	TBool roamTimerPresent;
+	TUint32 RCPIDifference;
+	TBool RCPIDifferencePresent;
+	TUint32 connRegainTimer;
+	TBool connRegainTimerPresent;
+	TUint32 maxTriesToFindNw;
+	TBool maxTriesToFindNwPresent;
+	TUint32 delayBetweenFindNw;
+	TBool delayBetweenFindNwPresent;
+	TBool allowRadioMeasurements;
+	TBool allowRadioMeasurementsPresent;
+	TUint32 minPassiveChannelTime;
+	TBool minPassiveChannelTimePresent;
+	TUint32 maxPassiveChannelTime;
+	TBool maxPassiveChannelTimePresent;
+	TUint32 maxApFailureCount;
+	TBool maxApFailureCountPresent;
+	TUint32 longBeaconFindCount;
+	TBool longBeaconFindCountPresent;
+	TUint32 qosNullFrameInterval;
+	TBool qosNullFrameIntervalPresent;
+	TUint32 qosNullFrameTimeout;
+	TBool qosNullFrameTimeoutPresent;
+	TUint32 MTU;
+	TBool MTUPresent;
+};
+
+// Structure for storing the result and status variables from every addition/fetch command
+struct TStatusResult
+{
+	TInt internetConnectivityTestStatus;
+	TInt internetConnectivityTestResult;
+	TInt useDefaultSettingsStatus;
+	TInt useDefaultSettingsResult;
+	TInt longRetryLimitStatus;
+	TInt longRetryLimitResult;
+	TInt shortRetryLimitStatus;
+	TInt shortRetryLimitResult;
+	TInt RTSThresholdStatus;
+	TInt RTSThresholdResult;
+	TInt TXPowerLevelStatus;
+	TInt TXPowerLevelResult;
+	TInt powerSavingStatus;
+	TInt powerSavingResult;
+	TInt backgroundScanIntervalStatus;
+	TInt backgroundScanIntervalResult;
+	TInt scanRateStatus;
+	TInt scanRateResult;
+	TInt RCPITriggerStatus;
+	TInt RCPITriggerResult;
+	TInt minActiveChannelTimeStatus;
+	TInt minActiveChannelTimeResult;
+	TInt maxActiveChannelTimeStatus;
+	TInt maxActiveChannelTimeResult;
+	TInt maxTxMSDULifeTimeStatus;
+	TInt maxTxMSDULifeTimeResult;
+	TInt scanExpirationTimerStatus;
+	TInt scanExpirationTimerResult;
+	TInt unloadDriverTimerStatus;
+	TInt unloadDriverTimerResult;
+	TInt roamTimerStatus;
+	TInt roamTimerResult;
+	TInt RCPIDifferenceStatus;
+	TInt RCPIDifferenceResult;
+	TInt connRegainTimerStatus;
+	TInt connRegainTimerResult;
+	TInt maxTriesToFindNwStatus;
+	TInt maxTriesToFindNwResult;
+	TInt delayBetweenFindNwStatus;
+	TInt delayBetweenFindNwResult;
+	TInt allowRadioMeasurementsStatus;
+	TInt allowRadioMeasurementsResult;
+	TInt minPassiveChannelTimeStatus;
+	TInt minPassiveChannelTimeResult;
+	TInt maxPassiveChannelTimeStatus;
+	TInt maxPassiveChannelTimeResult;
+	TInt maxApFailureCountStatus;
+	TInt maxApFailureCountResult;
+	TInt longBeaconFindCountStatus;
+	TInt longBeaconFindCountResult;
+	TInt qosNullFrameIntervalStatus;
+	TInt qosNullFrameIntervalResult;
+	TInt qosNullFrameTimeoutStatus;
+	TInt qosNullFrameTimeoutResult;
+	TInt MTUStatus;
+	TInt MTUResult;
+};
+
+
+// -----------------------------------------------------------------------------------------------
+// Enumerations
+// -----------------------------------------------------------------------------------------------
+        
+   
+// ------------------------------------------------------------------------------------------------
+// CGlobalWLanAdapter 
+// ------------------------------------------------------------------------------------------------
+class CGlobalWLANAdapter : public CSmlDmAdapter
+        {
+public:
+        static CGlobalWLANAdapter* NewL( MSmlDmCallback* aDmCallback );
+        static CGlobalWLANAdapter* NewLC( MSmlDmCallback* aDmCallback );
+        void ConstructL( );
+        virtual ~CGlobalWLANAdapter();
+
+// Adapter interface
+        void DDFVersionL( CBufBase& aDDFVersion );
+        void DDFStructureL( MSmlDmDDFObject& aDDF );
+        void AddLeafObjectL( const TDesC8& aURI,
+                             const TDesC8& aParentLUID, 
+                             const TDesC8& aObject, 
+                             const TDesC8& aType, 
+                             const TInt aStatusRef );  
+        void UpdateLeafObjectL( const TDesC8& aURI, 
+                                const TDesC8& aLUID, 
+                            const TDesC8& aObject, 
+                            const TDesC8& aType, 
+                            const TInt aStatusRef );
+       void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            RWriteStream*& aStream, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+        void DeleteObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID, 
+                            const TInt aStatusRef ); 
+        void FetchLeafObjectL( const TDesC8& aURI, 
+                               const TDesC8& aLUID, 
+                               const TDesC8& aType, 
+                               const TInt aResultsRef, 
+                               const TInt aStatusRef ); 
+        void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                               const TDesC8& aLUID,
+                               const TDesC8& aType, 
+                               TInt aResultsRef,
+                               TInt aStatusRef );
+        void ChildURIListL( const TDesC8& aURI, 
+                            const TDesC8& aLUID, 
+                            const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
+                            const TInt aResultsRef, 
+                            const TInt aStatusRef ); 
+        void AddNodeObjectL( const TDesC8& aURI, 
+                             const TDesC8& aParentLUID, 
+                             const TInt aStatusRef );
+        void ExecuteCommandL( const TDesC8& aURI, 
+                              const TDesC8& aLUID,
+                              const TDesC8& aArgument, 
+                              const TDesC8& aType,
+                              TInt aStatusRef );
+        void ExecuteCommandL( const TDesC8& aURI, 
+                              const TDesC8& aLUID,
+                              RWriteStream*& aStream, 
+                              const TDesC8& aType,
+                              TInt aStatusRef );
+        void CopyCommandL( const TDesC8& aTargetURI, 
+                           const TDesC8& aTargetLUID, 
+                           const TDesC8& aSourceURI,
+                           const TDesC8& aSourceLUID, 
+                           const TDesC8& aType,
+                           TInt aStatusRef );
+        void StartAtomicL();
+        void CommitAtomicL();
+        void RollbackAtomicL();
+        TBool StreamingSupport( TInt& aItemSize );
+        void StreamCommittedL();
+        void CompleteOutstandingCmdsL();
+
+
+private:
+        CGlobalWLANAdapter(TAny* aEcomArguments);
+        void FillNodeInfoL( MSmlDmDDFObject& aNode,
+                            TSmlDmAccessTypes aAccTypes,
+                            MSmlDmDDFObject::TOccurence aOccurrence, 
+                            MSmlDmDDFObject::TScope aScope, 
+                            MSmlDmDDFObject::TDFFormat aFormat,
+                            const TDesC8& aDescription );
+        void ExecuteBufferL( TBool aFinal = EFalse ); 
+        
+        /**
+     	* Stores the central repository parameters
+     	*
+     	* @return 
+     	*/
+        void StoreCenRepParamsL();
+        
+        /**
+     	* Stores the CommsDB parameters
+     	*
+     	* @return 
+     	*/
+  		void StoreCommsDBParamsL();
+  			
+  		/**
+     	* Reads the central repository parameters
+     	*
+     	* @return 
+     	*/
+        void ReadCenRepParamsL();
+        
+        /**
+     	* Returns the central repository parameters and updates statuses
+     	*
+     	* @return 
+     	*/
+        void UpdateStatusAndResultL( TInt aResult, TInt aStatus, TDesC8& aValue, TDesC8& aType, TInt aStoreErr );
+        
+        /**
+     	* Reads the CommsDB parameters
+     	*
+     	* @return 
+     	*/
+  		void ReadCommsDBParamsL();
+                          
+        /**
+     	* Gets the number of uri segments in the URI
+     	*
+     	* @since S60 ?S60_version
+     	* @param aUri The URI whose segments are counted
+     	* @return The amount of segments
+     	*/
+        TInt NumOfUriSegs( const TDesC8& aUri );
+        
+        /**
+     	* Gets the last uri segment
+     	*
+     	* @since S60 ?S60_version
+     	* @param aUri The URI whose segments are counted
+     	* @return The last segment
+     	*/        
+        TPtrC8 GetLastUriSeg(const TDesC8& aURI);
+        
+        TInt DesToInt( const TDesC8& aLuid );
+        void InitMemberVariables();
+
+        MSmlDmCallback* iCallBack;
+        
+        // Variable to store the received parameters
+        TGlobalSettings* iWriteSettings;
+        // Variable to store whick parameters are to be fetched
+        TGlobalSettings* iReadSettings;
+        // Status and result information related to fetches and additions
+        TStatusResult* iReadStatuses;
+        TStatusResult* iWriteStatuses;
+        
+        TBool iWlanSupported;
+
+        };
+
+#endif __GLOBALWLANADAPTER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/globalwlansettings/rom/globalwlanadapter.iby	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2008 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:   Image description file for project GlobalWLANAdapter
+*
+*/
+
+
+
+REM SyncML Device Management internet adapter
+
+#include <bldvariant.hrh>
+
+#ifndef __GLOBALWLANADAPTER_IBY__
+#define __GLOBALWLANADAPTER_IBY__
+
+#ifdef __SYNCML_DM // nothing should be installed from this .iby file if __SYNCML_DM feature is not selected
+
+#ifdef __SYNCML_DM_WLAN 
+ECOM_PLUGIN(globalwlanadapter.dll,globalwlanadapter.rsc)
+#endif // __SYNCML_DM_WLAN
+
+#endif //__SYNCML_DM
+
+#endif //__GLOBALWLANADAPTER_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/globalwlansettings/src/globalwlanadapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,2998 @@
+/*
+* Copyright (c) 2008 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:   Global WLAN settings Adapter
+*
+*/
+
+
+
+#include "globalwlanadapter.h"
+#include "nsmldebug.h"
+#include <implementationproxy.h> // For TImplementationProxy definition
+#include <commdb.h>
+#include <WlanCdbCols.h>
+#include <utf.h>
+#include <cdbstore.h>
+#include <cdbcols.h>
+#include <f32file.h>
+#include <e32const.h>
+#include <s32strm.h>
+#include <e32base.h>
+#include <sysutil.h>
+#include <e32cmn.h>
+#include <featmgr.h>
+
+#include <centralrepository.h>
+#include <commsdattypesv1_1.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 TImplementationProxy ImplementationTable[] = 
+    {
+    IMPLEMENTATION_PROXY_ENTRY(0x1315DBE, CGlobalWLANAdapter::NewL)
+    };
+
+//------------------------------------------------------------------------------
+// TImplementationProxy* ImplementationGroupProxy()
+//------------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    _DBG_FILE("ImplementationGroupProxy() for CGlobalWLANAdapter: begin");
+
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    _DBG_FILE("ImplementationGroupProxy() for CGlobalWLANAdapter: end");
+    return ImplementationTable;
+    }
+
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::NewL( )
+//-----------------------------------------------------------------------------
+CGlobalWLANAdapter* CGlobalWLANAdapter::NewL( MSmlDmCallback* aDmCallback )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::NewL(): begin");
+
+    CGlobalWLANAdapter* self = NewLC( aDmCallback );
+    CleanupStack::Pop( self );
+
+    _DBG_FILE("CGlobalWLANAdapter::NewL(): end");
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::NewLC( )
+//-----------------------------------------------------------------------------
+CGlobalWLANAdapter* CGlobalWLANAdapter::NewLC( MSmlDmCallback* aDmCallback )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::NewLC(): begin");
+    
+    CGlobalWLANAdapter* self = new(ELeave) CGlobalWLANAdapter(aDmCallback);
+    CleanupStack::PushL( self );
+
+    self->iCallBack = aDmCallback;
+    _DBG_FILE("CGlobalWLANAdapter::NewLC(): call constructL");
+    self->ConstructL( );
+
+    _DBG_FILE("CGlobalWLANAdapter::NewLC(): end");
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+// void CGlobalWLAdapter::ConstructL( )
+// Second phase constructor
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::ConstructL(  )
+	{
+    _DBG_FILE("CGlobalWLANAdapter::ConstructL(): begin");
+    
+    // checks if Wlan feature is supported
+    FeatureManager::InitializeLibL();
+    iWlanSupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
+    FeatureManager::UnInitializeLib();
+    
+    iWriteSettings = new(ELeave) TGlobalSettings;
+    iReadSettings = new(ELeave) TGlobalSettings;
+    iReadStatuses = new(ELeave) TStatusResult;
+    iWriteStatuses = new(ELeave) TStatusResult;
+    
+    // set "present" variables to false, since symbian inits thems as true
+    InitMemberVariables();
+     
+    _DBG_FILE("CGlobalWLANAdapter::ConstructL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter::CGlobalWLANAdapter( )
+// Constructor
+//-----------------------------------------------------------------------------
+CGlobalWLANAdapter::CGlobalWLANAdapter( TAny* aEcomArguments )
+    : CSmlDmAdapter(aEcomArguments)
+    {
+    _DBG_FILE("CGlobalWLANAdapter::CGlobalWLANAdapter(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::CGlobalWLANAdapter(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter::~CGlobalWLANAdapter( )
+// Destructor
+//-----------------------------------------------------------------------------
+CGlobalWLANAdapter::~CGlobalWLANAdapter( )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::~CGlobalWLANAdapter(): begin");
+    
+    delete iWriteSettings;
+    delete iReadSettings;
+    delete iReadStatuses;
+    delete iWriteStatuses;
+    
+    _DBG_FILE("CGlobalWLANAdapter::~CGlobalWLANAdapter(): end");
+    }
+
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::DDFVersionL( CBufBase& aDDFVersion )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::DDFVersionL( CBufBase& aDDFVersion )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::DDFVersionL(): begin");
+    
+    aDDFVersion.InsertL( 0, KNSmGlobalWlanAdapterDDFversion );
+    
+    _DBG_FILE("CGlobalWLANAdapter::DDFVersionL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::DDFStructureL(): begin");
+    if( !iWlanSupported )
+        {
+        _DBG_FILE("CGlobalWLANAdapter::DDFStructureL(): WLAN not supported.");
+        return;
+        }  
+//
+// Set Get, add and replace as acceptable operations
+//
+
+    TSmlDmAccessTypes accessTypesGetAddReplace;     
+    accessTypesGetAddReplace.SetAdd();
+    accessTypesGetAddReplace.SetGet();
+    accessTypesGetAddReplace.SetReplace();
+    
+    //WLAN
+    MSmlDmDDFObject& rootWLan = aDDF.AddChildObjectL( KNSmlWLan );
+    FillNodeInfoL( rootWLan,
+               	accessTypesGetAddReplace,
+               	MSmlDmDDFObject::EZeroOrOne,
+               	MSmlDmDDFObject::EDynamic,
+               	MSmlDmDDFObject::ENode,
+               	KNSmlEmpty );
+
+    //WLAN/InternetConnectivityTest
+    MSmlDmDDFObject& internetConnectivityTest = rootWLan.AddChildObjectL( KNSmlWLanInternetConnectivityTest );
+    FillNodeInfoL( internetConnectivityTest,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    
+    //WLAN/UseDefaultSettings
+    MSmlDmDDFObject& useDefaultSettings = rootWLan.AddChildObjectL( KNSmlWLanUseDefaultSettings );
+    FillNodeInfoL( useDefaultSettings,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EBool,
+    			KNSmlEmpty );
+
+     //WLAN/LongRetryLimit
+    MSmlDmDDFObject& longRetryLimit = rootWLan.AddChildObjectL( KNSmlWLanLongRetryLimit );
+    FillNodeInfoL( longRetryLimit,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/ShortRetryLimit
+    MSmlDmDDFObject& shortRetryLimit = rootWLan.AddChildObjectL( KNSmlWLanShortRetryLimit );
+    FillNodeInfoL( shortRetryLimit,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    			
+    //WLAN/RTSThreshold
+    MSmlDmDDFObject& RTSThreshold = rootWLan.AddChildObjectL( KNSmlWLanRTSThreshold );
+    FillNodeInfoL( RTSThreshold,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/TXPowerLevel
+    MSmlDmDDFObject& TXPowerLevel = rootWLan.AddChildObjectL( KNSmlWLanTXPowerLevel );
+    FillNodeInfoL( TXPowerLevel,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/PowerSaving
+    MSmlDmDDFObject& powerSaving = rootWLan.AddChildObjectL( KNSmlWLanPowerSaving );
+    FillNodeInfoL( powerSaving,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EBool,
+    			KNSmlEmpty );
+    			
+    //WLAN/BackgroundScanInterval
+    MSmlDmDDFObject& backgroundScanInterval = rootWLan.AddChildObjectL( KNSmlWLanBackgroundScanInterval );
+    FillNodeInfoL( backgroundScanInterval,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/ScanRate
+    MSmlDmDDFObject& scanRate = rootWLan.AddChildObjectL( KNSmlWLanScanRate );
+    FillNodeInfoL( scanRate,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/RCPITrigger
+    MSmlDmDDFObject& RCPITrigger = rootWLan.AddChildObjectL( KNSmlWLanRCPITrigger );
+    FillNodeInfoL( RCPITrigger,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/MinActiveChannelTime
+    MSmlDmDDFObject& minActiveChannelTime = rootWLan.AddChildObjectL( KNSmlWLanMinActiveChannelTime );
+    FillNodeInfoL( minActiveChannelTime,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+     //WLAN/MaxActiveChannelTime
+    MSmlDmDDFObject& maxActiveChannelTime = rootWLan.AddChildObjectL( KNSmlWLanMaxActiveChannelTime );
+    FillNodeInfoL( maxActiveChannelTime,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+     //WLAN/MaxTxMSDULifeTime
+    MSmlDmDDFObject& maxTxMSDULifeTime = rootWLan.AddChildObjectL( KNSmlWLanMaxTxMSDULifeTime );
+    FillNodeInfoL( maxTxMSDULifeTime,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/ScanExpirationTimer
+    MSmlDmDDFObject& scanExpirationTimer = rootWLan.AddChildObjectL( KNSmlWLanScanExpirationTimer );
+    FillNodeInfoL( scanExpirationTimer,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/UnloadDriverTimer
+    MSmlDmDDFObject& unloadDriverTimer = rootWLan.AddChildObjectL( KNSmlWLanUnloadDriverTimer );
+    FillNodeInfoL( unloadDriverTimer,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/RoamTimer
+    MSmlDmDDFObject& roamTimer = rootWLan.AddChildObjectL( KNSmlWLanRoamTimer );
+    FillNodeInfoL( roamTimer,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/KNSmlWLanRCPIDifference
+    MSmlDmDDFObject& RCPIDifference = rootWLan.AddChildObjectL( KNSmlWLanRCPIDifference );
+    FillNodeInfoL( RCPIDifference,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/ConnRegainTimer
+    MSmlDmDDFObject& connRegainTimer = rootWLan.AddChildObjectL( KNSmlWLanConnRegainTimer );
+    FillNodeInfoL( connRegainTimer,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/MaxTriesToFindNw
+    MSmlDmDDFObject& maxTriesToFindNw = rootWLan.AddChildObjectL( KNSmlWLanMaxTriesToFindNw );
+    FillNodeInfoL( maxTriesToFindNw,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/DelayBetweenFindNw
+    MSmlDmDDFObject& delayBetweenFindNw = rootWLan.AddChildObjectL( KNSmlWLanDelayBetweenFindNw );
+    FillNodeInfoL( delayBetweenFindNw,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/AllowRadioMeasurements
+    MSmlDmDDFObject& allowRadioMeasurements = rootWLan.AddChildObjectL( KNSmlWLanAllowRadioMeasurements );
+    FillNodeInfoL( allowRadioMeasurements,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EBool,
+    			KNSmlEmpty );
+
+    //WLAN/MinPassiveChannelTime
+    MSmlDmDDFObject& minPassiveChannelTime = rootWLan.AddChildObjectL( KNSmlWLanMinPassiveChannelTime );
+    FillNodeInfoL( minPassiveChannelTime,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/MaxPassiveChannelTime
+    MSmlDmDDFObject& maxPassiveChannelTime = rootWLan.AddChildObjectL( KNSmlWLanMaxPassiveChannelTime );
+    FillNodeInfoL( maxPassiveChannelTime,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/MaxApFailureCount
+    MSmlDmDDFObject& maxApFailureCount = rootWLan.AddChildObjectL( KNSmlWLanMaxApFailureCount );
+    FillNodeInfoL( maxApFailureCount,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/LongBeaconFindCount
+    MSmlDmDDFObject& longBeaconFindCount = rootWLan.AddChildObjectL( KNSmlWLanLongBeaconFindCount );
+    FillNodeInfoL( longBeaconFindCount,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+    			
+    //WLAN/QosNullFrameInterval
+    MSmlDmDDFObject& qosNullFrameInterval = rootWLan.AddChildObjectL( KNSmlWLanQosNullFrameInterval );
+    FillNodeInfoL( qosNullFrameInterval,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/QosNullFrameTimeout
+    MSmlDmDDFObject& qosNullFrameTimeout = rootWLan.AddChildObjectL( KNSmlWLanQosNullFrameTimeout );
+    FillNodeInfoL( qosNullFrameTimeout,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+    //WLAN/MTU
+    MSmlDmDDFObject& MTU = rootWLan.AddChildObjectL( KNSmlWLanMTU );
+    FillNodeInfoL( MTU,
+    			accessTypesGetAddReplace,
+    			MSmlDmDDFObject::EZeroOrOne,
+    			MSmlDmDDFObject::EDynamic,
+    			MSmlDmDDFObject::EInt,
+    			KNSmlEmpty );
+
+
+    _DBG_FILE("CGlobalWLANAdapter::DDFStructureL(): end");
+    }
+    
+      
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::AddLeafObjectL( const TDesC& aURI,const 
+// TDesC& aParentLUID, const TDesC8& aObject, const TDesC& aType, 
+// const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::AddLeafObjectL( const TDesC8& aURI,
+                                       const TDesC8& aParentLUID, 
+                                       const TDesC8& aObject, 
+                                       const TDesC8& /*aType*/, 
+                                       const TInt aStatusRef )
+    {
+    DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL - <%S> <%S>"), &aURI, &aParentLUID );
+
+    // Get the last uri segment and the number of uri items in the input
+    TInt uriSegs = NumOfUriSegs( aURI );
+    TInt err(KErrNone);
+    TPtrC8 lastUriSeg = GetLastUriSeg( aURI );
+    
+    //**************************************************************************
+    // Check which leaf is in question
+    //**************************************************************************
+    if( aURI.Match( _L8("WLAN/*" ) ) != KErrNotFound && uriSegs==2 )
+    	{  
+      	// *****************************************************************
+      	if( lastUriSeg.Match( KNSmlWLanInternetConnectivityTest ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      	    	//store the parameter
+      	    	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->internetConnectivityTest = err;
+      	    		iWriteSettings->internetConnectivityTestPresent = ETrue;
+      	    		iWriteStatuses->internetConnectivityTestStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanUseDefaultSettings ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		    //store the parameter 
+      		    if( aObject.MatchF( _L8("True")) != KErrNotFound ||
+      		    	aObject.MatchF( _L8("true")) != KErrNotFound )
+                	{
+                	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+                	iWriteSettings->useDefaultSettings = ETrue;
+                	iWriteSettings->useDefaultSettingsPresent = ETrue;
+                	iWriteStatuses->useDefaultSettingsStatus = aStatusRef;
+                	}
+            	else if ( aObject.MatchF( _L8("False")) != KErrNotFound ||
+            			  aObject.MatchF( _L8("false")) != KErrNotFound )
+                	{
+                	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+                	iWriteSettings->useDefaultSettings = EFalse;
+                	iWriteSettings->useDefaultSettingsPresent = ETrue;
+                	iWriteStatuses->useDefaultSettingsStatus = aStatusRef;
+                	}
+              	else 
+              		{
+              		err = KErrArgument;
+              		}
+            	}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanLongRetryLimit ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      	    	//store the parameter
+      	    	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->longRetryLimit = err;
+      	    		iWriteSettings->longRetryLimitPresent = ETrue;
+      	    		iWriteStatuses->longRetryLimitStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanShortRetryLimit ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+				//store the parameter
+				DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->shortRetryLimit = err;
+      	    		iWriteSettings->shortRetryLimitPresent = ETrue;
+      	    		iWriteStatuses->shortRetryLimitStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRTSThreshold ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      			DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->RTSThreshold = err;
+      	    		iWriteSettings->RTSThresholdPresent = ETrue;
+      	    		iWriteStatuses->RTSThresholdStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanTXPowerLevel ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      			DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      		  	//store the parameter
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0)
+      	    		{
+      	    		iWriteSettings->TXPowerLevel = err;
+      	    		iWriteSettings->TXPowerLevelPresent = ETrue;
+      	    		iWriteStatuses->TXPowerLevelStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+       	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanPowerSaving ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter 
+      		  	if( aObject.MatchF( _L8("True")) != KErrNotFound ||
+      		  		aObject.MatchF( _L8("true")) != KErrNotFound )
+              		{
+              		DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+              		iWriteSettings->powerSaving = ETrue;
+              		iWriteSettings->powerSavingPresent = ETrue;
+              		iWriteStatuses->powerSavingStatus = aStatusRef;
+              		}
+           		else if ( aObject.MatchF( _L8("False")) != KErrNotFound ||
+           				  aObject.MatchF( _L8("false")) != KErrNotFound )
+              		{
+              		DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+              		iWriteSettings->powerSaving = EFalse;
+              		iWriteSettings->powerSavingPresent = ETrue;
+              		iWriteStatuses->powerSavingStatus = aStatusRef;
+              		}
+            	else
+            		{
+            		err = KErrArgument;
+            		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanBackgroundScanInterval ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+				//store the parameter
+				DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->backgroundScanInterval = err;
+      	    		iWriteSettings->backgroundScanIntervalPresent = ETrue;
+      	    		iWriteStatuses->backgroundScanIntervalStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanScanRate ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      			//store the parameter
+      			DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->scanRate = err;
+      	    		iWriteSettings->scanRatePresent = ETrue;
+      	    		iWriteStatuses->scanRateStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRCPITrigger ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0)
+      	    		{
+      	    		iWriteSettings->RCPITrigger = err;
+      	    		iWriteSettings->RCPITriggerPresent = ETrue;
+      	    		iWriteStatuses->RCPITriggerStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMinActiveChannelTime ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->minActiveChannelTime = err;
+      	    		iWriteSettings->minActiveChannelTimePresent = ETrue;
+      	    		iWriteStatuses->minActiveChannelTimeStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxActiveChannelTime ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0)
+      	    		{
+      	    		iWriteSettings->maxActiveChannelTime = err;
+      	    		iWriteSettings->maxActiveChannelTimePresent = ETrue;
+      	    		iWriteStatuses->maxActiveChannelTimeStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxTxMSDULifeTime ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->maxTxMSDULifeTime = err;
+      	    		iWriteSettings->maxTxMSDULifeTimePresent = ETrue;
+      	    		iWriteStatuses->maxTxMSDULifeTimeStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanScanExpirationTimer ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      			DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->scanExpirationTimer = err;
+      	    		iWriteSettings->scanExpirationTimerPresent = ETrue;
+      	    		iWriteStatuses->scanExpirationTimerStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanUnloadDriverTimer ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->unloadDriverTimer = err;
+      	    		iWriteSettings->unloadDriverTimerPresent = ETrue;
+      	    		iWriteStatuses->unloadDriverTimerStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRoamTimer ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->roamTimer = err;
+      	    		iWriteSettings->roamTimerPresent = ETrue;
+      	    		iWriteStatuses->roamTimerStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+       	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRCPIDifference ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->RCPIDifference = err;
+      	    		iWriteSettings->RCPIDifferencePresent = ETrue;
+      	    		iWriteStatuses->RCPIDifferenceStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanConnRegainTimer ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->connRegainTimer = err;
+      	    		iWriteSettings->connRegainTimerPresent = ETrue;
+      	    		iWriteStatuses->connRegainTimerStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxTriesToFindNw ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0)
+      	    		{
+      	    		iWriteSettings->maxTriesToFindNw = err;
+      	    		iWriteSettings->maxTriesToFindNwPresent = ETrue;
+      	    		iWriteStatuses->maxTriesToFindNwStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanDelayBetweenFindNw ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->delayBetweenFindNw = err;
+      	    		iWriteSettings->delayBetweenFindNwPresent = ETrue;
+      	    		iWriteStatuses->delayBetweenFindNwStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanAllowRadioMeasurements ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	if( aObject.MatchF( _L8("True")) != KErrNotFound ||
+      		  		aObject.MatchF( _L8("true")) != KErrNotFound )
+              		{
+              		DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+              		iWriteSettings->allowRadioMeasurements = ETrue;
+              		iWriteSettings->allowRadioMeasurementsPresent = ETrue;
+              		iWriteStatuses->allowRadioMeasurementsStatus = aStatusRef;
+              		}
+           		else if ( aObject.MatchF( _L8("False")) != KErrNotFound ||
+           			      aObject.MatchF( _L8("false")) != KErrNotFound )
+              		{
+              		DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+              		iWriteSettings->allowRadioMeasurements = EFalse;
+              		iWriteSettings->allowRadioMeasurementsPresent = ETrue;
+              		iWriteStatuses->allowRadioMeasurementsStatus = aStatusRef;
+              		}
+           		else
+           			{
+           			err = KErrArgument;
+      				}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMinPassiveChannelTime ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->minPassiveChannelTime = err;
+      	    		iWriteSettings->minPassiveChannelTimePresent = ETrue;
+      	    		iWriteStatuses->minPassiveChannelTimeStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxPassiveChannelTime ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->maxPassiveChannelTime = err;
+      	    		iWriteSettings->maxPassiveChannelTimePresent = ETrue;
+      	    		iWriteStatuses->maxPassiveChannelTimeStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxApFailureCount ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->maxApFailureCount = err;
+      	    		iWriteSettings->maxApFailureCountPresent = ETrue;
+      	    		iWriteStatuses->maxApFailureCountStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanLongBeaconFindCount ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->longBeaconFindCount = err;
+      	    		iWriteSettings->longBeaconFindCountPresent = ETrue;
+      	    		iWriteStatuses->longBeaconFindCountStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanQosNullFrameInterval ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->qosNullFrameInterval = err;
+      	    		iWriteSettings->qosNullFrameIntervalPresent = ETrue;
+      	    		iWriteStatuses->qosNullFrameIntervalStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanQosNullFrameTimeout ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->qosNullFrameTimeout = err;
+      	    		iWriteSettings->qosNullFrameTimeoutPresent = ETrue;
+      	    		iWriteStatuses->qosNullFrameTimeoutStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMTU ) != KErrNotFound )
+      		{
+      		// check whether input is of legal size
+      		if ( aObject.Size() <= KInputMaxLength )
+      			{
+      		  	//store the parameter
+      		  	DBG_ARGS8(_S8("CGlobalWLANAdapter::AddLeafObjectL, add leaf - <%S>"), &aURI );
+      	    	err = DesToInt( aObject );
+      	    	if ( err >= 0 )
+      	    		{
+      	    		iWriteSettings->MTU = err;
+      	    		iWriteSettings->MTUPresent = ETrue;
+      	    		iWriteStatuses->MTUStatus = aStatusRef;
+      	    		err = KErrNone;
+      	    		}
+      			}
+      		else
+      			{
+      			err = KErrTooBig;
+      			}
+      		}
+      	// *****************************************************************
+     	// The given leaf was not found
+	  	else
+  			{
+			err = KErrNotFound;
+  			}
+    	}
+	else
+    	{
+        // Something went wrong
+    	_DBG_FILE("CGlobalWLANAdapter::AddLeafObjectL(): Leaf addition failed");
+        err = KErrGeneral;
+    	}   	
+
+    // Update the possible failure to the status, success is updated when the 
+    // actual writing to db is done
+    switch ( err )
+    	{
+    	case KErrTooBig:
+    		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject );
+    		break;	
+    		
+    	case KErrNotFound:
+    		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+    		break;
+    		
+    	case KErrGeneral:
+    		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+    		break;
+    		
+    	case KErrArgument:
+			iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+			break;
+			
+    	case KErrOverflow:
+    		iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+    		break;
+    	}
+
+    _DBG_FILE("CGlobalWLANAdapter::AddLeafObjectL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::UpdateLeafObjectL( const TDesC& aURI, 
+//    const TDesC& aLUID, const TDesC8& aObject, const TDesC& aType, 
+//    const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+                                          const TDesC8& aLUID, 
+                                          const TDesC8& aObject, 
+                                          const TDesC8& aType, 
+                                          const TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::UpdateLeafObjectL(): begin");
+    DBG_ARGS8(_S8("CGlobalWLANAdapter::UpdateLeafObjectL - <%S> <%S>"), &aURI, &aLUID );
+    
+    AddLeafObjectL( aURI, aLUID, aObject, aType, aStatusRef );
+
+    _DBG_FILE("CGlobalWLANAdapter::UpdateLeafObjectL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+// const TDesC8& aLUID, const TDesC8& aObject, const TDesC8& aType )
+// Not supported
+//------------------------------------------------------------------------------
+
+void CGlobalWLANAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, 
+                                          const TDesC8& /*aLUID*/,
+                                          RWriteStream*& /*aStream*/, 
+                                          const TDesC8& /*aType*/,
+                                          TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::UpdateLeafObjectL(): streaming: begin");
+    
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    
+    _DBG_FILE("CGlobalWLANAdapter::UpdateLeafObjectL() streaming: end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::DeleteObjectL( const TDesC8& aURI, 
+// const TDesC8& aLUID, const TInt aStatusRef )
+// Not supported
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::DeleteObjectL( const TDesC8& /*aURI*/, 
+                                      const TDesC8& /*aLUID*/, 
+                                      const TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::DeleteObjectL(): begin");
+    
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError); 
+       
+    _DBG_FILE("CGlobalWLANAdapter::DeleteObjectL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
+//                     const TDesC8& aLUID, const TDesC8& aType, 
+//                     const TInt aResultsRef, const TInt aStatusRef )
+// not supported
+//-----------------------------------------------------------------------------
+
+void CGlobalWLANAdapter::FetchLeafObjectSizeL( const TDesC8& /*aURI*/, 
+                                                 const TDesC8& /*aLUID*/,
+                                                 const TDesC8& /*aType*/, 
+                                                 TInt /*aResultsRef*/,
+                                                 TInt /*aStatusRef*/ )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectSizeL(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectSizeL(): end");
+    return;
+    }                                                
+
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+//                     const TDesC8& aLUID, const TDesC8& aType, 
+//                     const TInt aResultsRef, const TInt aStatusRef )
+// 
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+                                        const TDesC8& aLUID, 
+                                        const TDesC8& /*aType*/, 
+                                        const TInt aResultsRef, 
+                                        const TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): begin");
+    DBG_ARGS8(_S8("Fetch aURI - %S - %S"), &aURI, &aLUID);
+    
+    // Store the required parameters into the struct. Actual reading will be done in
+    // when CompleteOutstandingCommands is called
+    
+    // Get the last uri segment
+    TPtrC8 lastUriSeg = GetLastUriSeg( aURI );
+    DBG_ARGS8(_S8("Fetch leaf, lasturiseg - %S"), &lastUriSeg);
+    
+    //**************************************************************************
+    // Check which leaf is in question
+    //**************************************************************************
+    if( aURI.Match( _L8("WLAN/*" ) ) != KErrNotFound )
+    	{
+        _DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): WLAN/* found in uri");
+      	// *****************************************************************
+      	if( lastUriSeg.Match( KNSmlWLanInternetConnectivityTest ) != KErrNotFound )
+      		{	
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->internetConnectivityTestPresent = ETrue;
+      	   	iReadStatuses->internetConnectivityTestResult = aResultsRef;
+      	   	iReadStatuses->internetConnectivityTestStatus = aStatusRef;
+      		}
+      	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanUseDefaultSettings ) != KErrNotFound )
+      		{	
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+            iReadSettings->useDefaultSettingsPresent = ETrue;  
+            iReadStatuses->useDefaultSettingsResult = aResultsRef;
+            iReadStatuses->useDefaultSettingsStatus = aStatusRef;
+            }
+	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanLongRetryLimit ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	    iReadSettings->longRetryLimitPresent = ETrue;
+      	    iReadStatuses->longRetryLimitResult = aResultsRef;
+      	    iReadStatuses->longRetryLimitStatus = aStatusRef;
+      		}
+
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanShortRetryLimit ) != KErrNotFound )
+      		{	
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	    iReadSettings->shortRetryLimitPresent = ETrue;
+      	    iReadStatuses->shortRetryLimitResult = aResultsRef;
+      	    iReadStatuses->shortRetryLimitStatus = aStatusRef;
+      		}
+	
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRTSThreshold ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	    iReadSettings->RTSThresholdPresent = ETrue;
+      	    iReadStatuses->RTSThresholdResult = aResultsRef;
+      	    iReadStatuses->RTSThresholdStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanTXPowerLevel ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->TXPowerLevelPresent = ETrue;
+      	   	iReadStatuses->TXPowerLevelResult = aResultsRef;
+      	   	iReadStatuses->TXPowerLevelStatus = aStatusRef;
+      		}
+      		
+       	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanPowerSaving ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+            iReadSettings->powerSavingPresent = ETrue;
+            iReadStatuses->powerSavingResult = aResultsRef;
+            iReadStatuses->powerSavingStatus = aStatusRef;
+      		}
+      			
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanBackgroundScanInterval ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->backgroundScanIntervalPresent = ETrue;
+      	   	iReadStatuses->backgroundScanIntervalResult = aResultsRef;
+      	   	iReadStatuses->backgroundScanIntervalStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanScanRate ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->scanRatePresent = ETrue;
+      	   	iReadStatuses->scanRateResult = aResultsRef;
+      	   	iReadStatuses->scanRateStatus = aStatusRef;
+      		}
+      			
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRCPITrigger ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->RCPITriggerPresent = ETrue;
+      	   	iReadStatuses->RCPITriggerResult = aResultsRef;
+      	   	iReadStatuses->RCPITriggerStatus = aStatusRef;
+      		}
+      			
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMinActiveChannelTime ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->minActiveChannelTimePresent = ETrue;
+      	   	iReadStatuses->minActiveChannelTimeResult = aResultsRef;
+      	   	iReadStatuses->minActiveChannelTimeStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxActiveChannelTime ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->maxActiveChannelTimePresent = ETrue;
+      	   	iReadStatuses->maxActiveChannelTimeResult = aResultsRef;
+      	   	iReadStatuses->maxActiveChannelTimeStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxTxMSDULifeTime ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->maxTxMSDULifeTimePresent = ETrue;
+      	   	iReadStatuses->maxTxMSDULifeTimeResult = aResultsRef;
+      	   	iReadStatuses->maxTxMSDULifeTimeStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanScanExpirationTimer ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->scanExpirationTimerPresent = ETrue;
+      	   	iReadStatuses->scanExpirationTimerResult = aResultsRef;
+      	   	iReadStatuses->scanExpirationTimerStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanUnloadDriverTimer ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->unloadDriverTimerPresent = ETrue;
+      	   	iReadStatuses->unloadDriverTimerResult = aResultsRef;
+      	   	iReadStatuses->unloadDriverTimerStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRoamTimer ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->roamTimerPresent = ETrue;
+      	   	iReadStatuses->roamTimerResult = aResultsRef;
+      	   	iReadStatuses->roamTimerStatus = aStatusRef;
+      		}
+      		
+       	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanRCPIDifference ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->RCPIDifferencePresent = ETrue;
+      	   	iReadStatuses->RCPIDifferenceResult = aResultsRef;
+      	   	iReadStatuses->RCPIDifferenceStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanConnRegainTimer ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->connRegainTimerPresent = ETrue;
+      	   	iReadStatuses->connRegainTimerResult = aResultsRef;
+      	   	iReadStatuses->connRegainTimerStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxTriesToFindNw ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->maxTriesToFindNwPresent = ETrue;
+      	   	iReadStatuses->maxTriesToFindNwResult = aResultsRef;
+      	   	iReadStatuses->maxTriesToFindNwStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanDelayBetweenFindNw ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->delayBetweenFindNwPresent = ETrue;
+      	   	iReadStatuses->delayBetweenFindNwResult = aResultsRef;
+      	   	iReadStatuses->delayBetweenFindNwStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanAllowRadioMeasurements ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+            iReadSettings->allowRadioMeasurementsPresent = ETrue;
+           	iReadStatuses->allowRadioMeasurementsResult = aResultsRef;
+      	   	iReadStatuses->allowRadioMeasurementsStatus = aStatusRef;
+            }
+              
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMinPassiveChannelTime ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->minPassiveChannelTimePresent = ETrue;
+      	   	iReadStatuses->minPassiveChannelTimeResult = aResultsRef;
+      	   	iReadStatuses->minPassiveChannelTimeStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxPassiveChannelTime ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->maxPassiveChannelTimePresent = ETrue;
+      	   	iReadStatuses->maxPassiveChannelTimeResult = aResultsRef;
+      	   	iReadStatuses->maxPassiveChannelTimeStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMaxApFailureCount ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->maxApFailureCountPresent = ETrue;
+      	   	iReadStatuses->maxApFailureCountResult = aResultsRef;
+      	   	iReadStatuses->maxApFailureCountStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanLongBeaconFindCount ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->longBeaconFindCountPresent = ETrue;
+      	   	iReadStatuses->longBeaconFindCountResult = aResultsRef;
+      	   	iReadStatuses->longBeaconFindCountStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanQosNullFrameInterval ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->qosNullFrameIntervalPresent = ETrue;
+      	   	iReadStatuses->qosNullFrameIntervalResult = aResultsRef;
+      	   	iReadStatuses->qosNullFrameIntervalStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanQosNullFrameTimeout ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->qosNullFrameTimeoutPresent = ETrue;
+      	   	iReadStatuses->qosNullFrameTimeoutResult = aResultsRef;
+      	   	iReadStatuses->qosNullFrameTimeoutStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+      	else if( lastUriSeg.Match( KNSmlWLanMTU ) != KErrNotFound )
+      		{
+      		_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): leaf"); 
+      	   	iReadSettings->MTUPresent = ETrue;
+      	   	iReadStatuses->MTUResult = aResultsRef;
+      	   	iReadStatuses->MTUStatus = aStatusRef;
+      		}
+      		
+      	// *****************************************************************
+   		// The given leaf was not found
+	  	else
+  			{
+  			_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): No matchin leaf was found");
+			iCallBack->SetStatusL(aStatusRef, ENotFound);
+  			}
+    	}
+	else
+    	{
+        // Something went wrong
+    	_DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): No matchin node was found");
+        iCallBack->SetStatusL(aStatusRef, EInvalidObject);
+    	}   
+
+    _DBG_FILE("CGlobalWLANAdapter::FetchLeafObjectL(): end");
+
+    }
+    
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::ChildURIListL( const TDesC& aURI, 
+// const TDesC& aLUID, const CArrayFix<TNSmlDmMappingInfo>& aPreviousURISegmentList, 
+// const TInt aResultsRef, const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::ChildURIListL( const TDesC8& aURI, 
+                                      const TDesC8& /*aLUID*/, 
+                                      const CArrayFix<TSmlDmMappingInfo>& /*aPreviousURISegmentList*/, 
+                                      const TInt aResultsRef, 
+                                      const TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::ChildURIListL(): begin");
+    DBG_ARGS8(_S8("globalwlanadapter::ChildUriList - <%S>"), &aURI );
+ 
+    CBufBase* currentUriSegmentList = CBufFlat::NewL( KUriSegListLength );
+    CleanupStack::PushL( currentUriSegmentList );
+   	TEntry currentEntry;
+   	TInt uriSegs = NumOfUriSegs( aURI );
+    
+    // Check whether WLAN node in question	
+    if ( aURI.Match(_L8("WLAN"  ))!= KErrNotFound && uriSegs == 1 )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter::ChildURIListL(): WLAN");
+    	currentUriSegmentList->InsertL( 0, KNSmlWLanNode );
+      	iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+    	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+    	_DBG_FILE("CGlobalWLANAdapter::ChildURIListL(): WLAN leafs returned");
+    	}
+    
+    // Some illegal node/leaf in question
+    else
+    	{
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ENotFound end");
+    	}
+    
+    // delete the list
+    CleanupStack::PopAndDestroy( currentUriSegmentList );
+    _DBG_FILE("CGlobalWLANAdapter::ChildURIListL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// void CGlobalWLANAdapter::AddNodeObjectL( const TDesC& aURI, const TDesC& aParentLUID, 
+// const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::AddNodeObjectL( const TDesC8& aURI, 
+                                       const TDesC8& aParentLUID, 
+                                       const TInt aStatusRef )
+    {
+ 
+    DBG_ARGS8(_S8("CGlobalWLANAdapter::AddNodeObjectL - uri: <%S> to aParentLuid: <%S>"), 
+                &aURI, &aParentLUID ); 
+                
+    TInt uriSegs = NumOfUriSegs( aURI );
+                
+    // The only node is WLAN, lets check if that is in question
+    if( aURI.Match( _L8("WLAN" ) ) != KErrNotFound && uriSegs==1 )
+    	{
+    	// No actions needed, the table is created and filled in the
+    	// Execution function.
+    	iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EOk);
+    	}
+    else
+    	{
+    	iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    	}
+
+    _DBG_FILE("CGlobalWLANAdapter::AddNodeObjectL(): end");
+    }
+    
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::ExecuteCommandL
+// not supported
+//------------------------------------------------------------------------------
+void CGlobalWLANAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                              const TDesC8& /*aLUID*/,
+                              const TDesC8& /*aArgument*/, 
+                              const TDesC8& /*aType*/,
+                              TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::ExecuteCommandL(): begin");
+    
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    
+    _DBG_FILE("CGlobalWLANAdapter::ExecuteCommandL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::ExecuteCommandL ( .. RWriteStream ..)
+// not supported
+//------------------------------------------------------------------------------
+void CGlobalWLANAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                              const TDesC8& /*aLUID*/,
+                              RWriteStream*& /*aStream*/, 
+                              const TDesC8& /*aType*/,
+                              TInt aStatusref )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::ExecuteCommandL(): begin");
+     
+   	iCallBack->SetStatusL( aStatusref, CSmlDmAdapter::EError );
+   	
+    _DBG_FILE("CGlobalWLANAdapter::ExecuteCommandL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::CopyCommandL
+// not supported
+//------------------------------------------------------------------------------
+void CGlobalWLANAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/,
+                                     const TDesC8& /*aTargetLUID*/,
+                                     const TDesC8& /* aSourceURI*/,
+                                     const TDesC8& /*aSourceLUID*/, 
+                                     const TDesC8& /*aType*/,
+                                     TInt aStatusRef )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::CopyCommandL(): begin");
+    
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    
+    _DBG_FILE("CGlobalWLANAdapter::CopyCommandL(): end");
+    }
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::StartAtomicL
+// not supported
+//------------------------------------------------------------------------------
+void CGlobalWLANAdapter::StartAtomicL()
+    {
+    _DBG_FILE("CGlobalWLANAdapter::StartAtomicL(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::StartAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::CommitAtomicL
+// not supported
+//------------------------------------------------------------------------------
+void CGlobalWLANAdapter::CommitAtomicL()
+    {
+    _DBG_FILE("CGlobalWLANAdapter::CommitAtomicL(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::CommitAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::RollbackAtomicL
+// returns EError
+//------------------------------------------------------------------------------
+void CGlobalWLANAdapter::RollbackAtomicL()
+    {
+    _DBG_FILE("CGlobalWLANAdapter::RollbackAtomicL(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::RollbackAtomicL(): end");
+    }
+
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::StreamingSupport
+// returns ETrue, streaming is supported
+//------------------------------------------------------------------------------
+
+TBool CGlobalWLANAdapter::StreamingSupport( TInt& /*aItemSize*/ )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::StreamingSupport(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::StreamingSupport(): end");
+    return EFalse;
+    }
+
+//------------------------------------------------------------------------------
+// CGlobalWLANAdapter::StreamCommittedL
+// not used in this adapter
+//------------------------------------------------------------------------------
+
+void CGlobalWLANAdapter::StreamCommittedL()
+    {
+    _DBG_FILE("CGlobalWLANAdapter::StreamCommittedL(): begin");
+    _DBG_FILE("CGlobalWLANAdapter::StreamCommittedL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CGlobalWLANAdapter* CGlobalWLANAdapter::CompleteOutstandingCmdsL( )
+//-----------------------------------------------------------------------------
+void CGlobalWLANAdapter::CompleteOutstandingCmdsL( )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::CompleteOutStandingCmdsL(): begin");
+    
+    ExecuteBufferL( ETrue );  
+    
+    _DBG_FILE("CGlobalWLANAdapter::CompleteOutStandingCmdsL(): end");
+    }
+
+
+// -------------------------------------------------------------------------------------
+// CGlobalWLANAdapter::FillNodeInfoL()
+// Fills the node info in ddf structure
+// -------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode,
+                                          TSmlDmAccessTypes aAccTypes,
+                                          MSmlDmDDFObject::TOccurence aOccurrence, 
+                                          MSmlDmDDFObject::TScope aScope, 
+                                          MSmlDmDDFObject::TDFFormat aFormat,
+                                          const TDesC8& aDescription )
+                                          
+    {
+    aNode.SetAccessTypesL(aAccTypes);
+    aNode.SetOccurenceL(aOccurrence);
+    aNode.SetScopeL(aScope);
+    aNode.SetDFFormatL(aFormat);
+    if(aFormat!=MSmlDmDDFObject::ENode)
+        {
+        aNode.AddDFTypeMimeTypeL(KNSmlMimeType);
+        }
+    aNode.SetDescriptionL(aDescription);
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// void CGlobalWLANAdapter::ExecuteBufferL( TBool aFinal )
+// Executes buffered commands
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::ExecuteBufferL( TBool /*aFinal*/ )
+    {
+    
+    _DBG_FILE("CGlobalWLANAdapter::ExecuteBuffer(): begin");
+  
+  	// Store the given values into cenrep and commsdb and
+  	// read the required parameters from cenrep and commsdb
+  	TRAPD (err1, StoreCenRepParamsL());
+  	TRAPD (err2, StoreCommsDBParamsL());
+  	TRAPD (err3, ReadCenRepParamsL());
+  	TRAPD (err4, ReadCommsDBParamsL());
+  	
+  	// Init the member variables after updates
+  	InitMemberVariables();
+  	
+  	// If some of the operations failed, then leave
+  	User::LeaveIfError( err1 );
+  	User::LeaveIfError( err2 );
+  	User::LeaveIfError( err3 );
+  	User::LeaveIfError( err4 );
+  	
+    _DBG_FILE("CGlobalWLANAdapter::ExecuteBuffer(): End");
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// TBool CGlobalWLANAdapter::StoreCenRepParamsL( )
+// Stores the parameters to central repository
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::StoreCenRepParamsL()
+	{
+	
+	_DBG_FILE("CGlobalWLANAdapter::StoreCenRepParams(): begin");
+
+ 	CRepository* repository = NULL;
+ 	CRepository* conSettRep = NULL;
+ 	TInt err = KErrNone;
+    
+
+	// Write KWlanInternetConnectivityTest
+    if ( iWriteSettings->internetConnectivityTestPresent )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanInternetConnectivityTest start " ); 
+    	// Open the cenrep for internet connectivity settings. This is the only global wlan parameter
+    	// from this cenrep
+        conSettRep = CRepository::NewL( KCRUidInternetConnectivitySettings );
+        
+        // There is no pointer to the repository, leave
+        if ( conSettRep == NULL )
+        	{
+        	User::LeaveIfError( KErrGeneral );
+        	}
+        
+        CleanupStack::PushL(conSettRep);
+        
+    	err = conSettRep->Set( KIctsTestPermission, static_cast<TInt>( iWriteSettings->internetConnectivityTest ) );
+    	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanInternetConnectivityTest set to cenRep " ); 
+    	if( err == KErrNone ) 
+        	{ 
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanInternetConnectivityTest" ); 
+        	iCallBack->SetStatusL(iWriteStatuses->internetConnectivityTestStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanInternetConnectivityTest failed " ); 
+       	 	iCallBack->SetStatusL(iWriteStatuses->internetConnectivityTestStatus, CSmlDmAdapter::EError);
+       	 	}
+    	CleanupStack::PopAndDestroy(conSettRep);
+       	}
+    
+    
+    // The rest of the parameters are stored to Wlan device settings cenRep
+    repository = CRepository::NewL( KCRUidWlanDeviceSettingsRegistryId );
+    
+    // There is no pointer to the repository, leave
+    if ( repository == NULL )
+    	{
+    	User::LeaveIfError( KErrGeneral );
+    	}
+    
+    CleanupStack::PushL(repository);
+    
+    if ( iWriteSettings->MTUPresent )
+    	{
+    	err = repository->Set( KWlanMTU, static_cast<TInt>( iWriteSettings->MTU ) );
+    		
+    	DBG_ARGS8(_S8("CGlobalWLANAdapter::StoreCenRepParams, MTU status - (%d)"), err );
+    	if( err == KErrNone  ) 
+        	{ 
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() MTU" ); 
+        	iCallBack->SetStatusL(iWriteStatuses->MTUStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() MTU failed " ); 
+       	 	iCallBack->SetStatusL(iWriteStatuses->MTUStatus, CSmlDmAdapter::EError);
+       	 	}
+       	}
+
+    // Write KWlanScanRate
+    if ( iWriteSettings->scanRatePresent )
+    	{
+    	err = repository->Set( KWlanScanRate, static_cast<TInt>( iWriteSettings->scanRate ) );
+    		
+    	DBG_ARGS8(_S8("CGlobalWLANAdapter::StoreCenRepParams, scanrate status - (%d)"), err );
+    	if( err == KErrNone ) 
+        	{ 
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() WlanScanRate" ); 
+        	iCallBack->SetStatusL(iWriteStatuses->scanRateStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() WlanScanRate failed " ); 
+       	 	iCallBack->SetStatusL(iWriteStatuses->scanRateStatus, CSmlDmAdapter::EError);
+       	 	}
+       	}
+
+    // Write KWlanRcpiTrigger
+   	if ( iWriteSettings->RCPITriggerPresent )
+    	{
+    	err = repository->Set( KWlanRcpiTrigger, static_cast<TInt>( iWriteSettings->RCPITrigger ) );
+    		
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanRcpiTrigger" );
+    	    iCallBack->SetStatusL(iWriteStatuses->RCPITriggerStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanRcpiTrigger failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->RCPITriggerStatus, CSmlDmAdapter::EError);
+       	 	}
+    	}
+
+    // Write KWlanMinActiveChannelTime
+    if ( iWriteSettings->minActiveChannelTimePresent )
+    	{
+    	err = repository->Set( KWlanMinActiveChannelTime, static_cast<TInt>( iWriteSettings->minActiveChannelTime ) );
+    		
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMinActiveChannelTime" );
+        	iCallBack->SetStatusL(iWriteStatuses->minActiveChannelTimeStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMinActiveChannelTime failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->minActiveChannelTimeStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanMaxActiveChannelTime
+    if ( iWriteSettings->maxActiveChannelTimePresent )
+    	{
+    	err = repository->Set( KWlanMaxActiveChannelTime, static_cast<TInt>( iWriteSettings->maxActiveChannelTime ) );
+    		
+    	if( err == KErrNone ) 
+        	{ 
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxActiveChannelTime" );
+        	iCallBack->SetStatusL(iWriteStatuses->maxActiveChannelTimeStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxActiveChannelTime failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->maxActiveChannelTimeStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanMaxTxMSDULifeTime
+    if ( iWriteSettings->maxTxMSDULifeTimePresent )
+    	{
+    	err = repository->Set( KWlanMaxTxMSDULifeTime, static_cast<TInt>( iWriteSettings->maxTxMSDULifeTime ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams()KWlanMaxTxMSDULifeTime" );
+        	iCallBack->SetStatusL(iWriteStatuses->maxTxMSDULifeTimeStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams()KWlanMaxTxMSDULifeTime failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->maxTxMSDULifeTimeStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanScanExpirationTimer
+    if ( iWriteSettings->scanExpirationTimerPresent )
+    	{
+    	err = repository->Set( KWlanScanExpirationTimer, static_cast<TInt>( iWriteSettings->scanExpirationTimer ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams()KWlanScanExpirationTimer" );
+        	iCallBack->SetStatusL(iWriteStatuses->scanExpirationTimerStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams()KWlanScanExpirationTimer failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->scanExpirationTimerStatus, CSmlDmAdapter::EError);
+       	 	}
+		}
+				
+    // Write KWlanUnloadDriverTimer
+    if ( iWriteSettings->unloadDriverTimerPresent )
+    	{
+    	err = repository->Set( KWlanUnloadDriverTimer, static_cast<TInt>( iWriteSettings->unloadDriverTimer ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams()KWlanUnloadDriverTimer" );
+        	iCallBack->SetStatusL(iWriteStatuses->unloadDriverTimerStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams()KWlanUnloadDriverTimer failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->unloadDriverTimerStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanRoamTimer
+    if ( iWriteSettings->roamTimerPresent )
+    	{
+    	err = repository->Set( KWlanRoamTimer, static_cast<TInt>( iWriteSettings->roamTimer ) );
+    	
+    	if( err == KErrNone) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanRoamTimer" );
+        	iCallBack->SetStatusL(iWriteStatuses->roamTimerStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanRoamTimer failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->roamTimerStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanRcpiDifference
+    if ( iWriteSettings->RCPIDifferencePresent )
+    	{
+    	err = repository->Set( KWlanRcpiDifference, static_cast<TInt>( iWriteSettings->RCPIDifference ) );
+    	
+    	DBG_ARGS8(_S8("CGlobalWLANAdapter::StoreCenRepParams, rcpidifference status - (%d)"), err );
+    	if( err == KErrNone) 
+        	{ 
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanRcpiDifference" );
+        	iCallBack->SetStatusL(iWriteStatuses->RCPIDifferenceStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanRcpiDifference failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->RCPIDifferenceStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanConnRegainTimer
+    if ( iWriteSettings->connRegainTimerPresent )
+    	{
+    	err = repository->Set( KWlanConnRegainTimer, static_cast<TInt>( iWriteSettings->connRegainTimer ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanConnRegainTimer" );
+        	iCallBack->SetStatusL(iWriteStatuses->connRegainTimerStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanConnRegainTimer failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->connRegainTimerStatus, CSmlDmAdapter::EError);
+       	 	}
+		}
+				
+    // Write KWlanMaxTriesToFindNw
+   	if ( iWriteSettings->maxTriesToFindNwPresent )
+    	{
+    	err = repository->Set( KWlanMaxTriesToFindNw, static_cast<TInt>( iWriteSettings->maxTriesToFindNw ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxTriesToFindNw ");
+        	iCallBack->SetStatusL(iWriteStatuses->maxTriesToFindNwStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxTriesToFindNw failed");
+       	 	iCallBack->SetStatusL(iWriteStatuses->maxTriesToFindNwStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanDelayBetweenFindNw
+    if ( iWriteSettings->delayBetweenFindNwPresent )
+    	{
+    	err = repository->Set( KWlanDelayBetweenFindNw, static_cast<TInt>( iWriteSettings->delayBetweenFindNw ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanDelayBetweenFindNw" );
+        	iCallBack->SetStatusL(iWriteStatuses->delayBetweenFindNwStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanDelayBetweenFindNw failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->delayBetweenFindNwStatus, CSmlDmAdapter::EError);
+       	 	}
+		}
+				
+    // Write KWlanMinPassiveChannelTime
+    if ( iWriteSettings->minPassiveChannelTimePresent )
+    	{
+    	err = repository->Set( KWlanMinPassiveChannelTime, static_cast<TInt>( iWriteSettings->minPassiveChannelTime ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMinPassiveChannelTime" );
+        	iCallBack->SetStatusL(iWriteStatuses->minPassiveChannelTimeStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	 else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMinPassiveChannelTime failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->minPassiveChannelTimeStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanMaxPassiveChannelTime
+    if ( iWriteSettings->maxPassiveChannelTimePresent )
+    	{
+    	err = repository->Set( KWlanMaxPassiveChannelTime, static_cast<TInt>( iWriteSettings->maxPassiveChannelTime ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxPassiveChannelTime" );
+        	iCallBack->SetStatusL(iWriteStatuses->maxPassiveChannelTimeStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxPassiveChannelTime failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->maxPassiveChannelTimeStatus, CSmlDmAdapter::EError);
+       	 	}
+		}
+				
+    // Write KWlanMaxApFailureCount
+    if ( iWriteSettings->maxApFailureCountPresent )
+    	{
+    	err = repository->Set( KWlanMaxApFailureCount, static_cast<TInt>( iWriteSettings->maxApFailureCount ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxApFailureCount" );
+        	iCallBack->SetStatusL(iWriteStatuses->maxApFailureCountStatus, CSmlDmAdapter::EOk);
+       	 	}
+        else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanMaxApFailureCount failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->maxApFailureCountStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanLongBeaconFindCount
+    if ( iWriteSettings->longBeaconFindCountPresent )
+    	{
+    	err = repository->Set( KWlanLongBeaconFindCount, static_cast<TInt>( iWriteSettings->longBeaconFindCount ) );
+    	
+    	if( err == KErrNone ) 
+      		{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanLongBeaconFindCount" );
+        	iCallBack->SetStatusL(iWriteStatuses->longBeaconFindCountStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanLongBeaconFindCount failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->longBeaconFindCountStatus, CSmlDmAdapter::EError);
+       	 	}
+		}
+				
+    // Write KWlanQosNullFrameInterval
+    if ( iWriteSettings->qosNullFrameIntervalPresent )
+    	{
+    	err = repository->Set( KWlanQosNullFrameInterval, static_cast<TInt>( iWriteSettings->qosNullFrameInterval ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanQosNullFrameInterval" );
+        	iCallBack->SetStatusL(iWriteStatuses->qosNullFrameIntervalStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanQosNullFrameInterval failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->qosNullFrameIntervalStatus, CSmlDmAdapter::EError);
+       	 	}
+        }
+
+    // Write KWlanQosNullFrameTimeout
+    if ( iWriteSettings->qosNullFrameTimeoutPresent )
+    	{
+    	err = repository->Set( KWlanQosNullFrameTimeout, static_cast<TInt>( iWriteSettings->qosNullFrameTimeout ) );
+    	
+    	if( err == KErrNone ) 
+        	{
+        	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanQosNullFrameTimeout" );
+        	iCallBack->SetStatusL(iWriteStatuses->qosNullFrameTimeoutStatus, CSmlDmAdapter::EOk);
+       	 	}
+       	else
+       	 	{
+       	 	_DBG_FILE("CGlobalWLANAdapter:StoreCenRepParams() KWlanQosNullFrameTimeout failed" );
+       	 	iCallBack->SetStatusL(iWriteStatuses->qosNullFrameTimeoutStatus, CSmlDmAdapter::EError);
+       	 	}
+       	}
+
+    // Cleanup
+   	CleanupStack::PopAndDestroy(repository);
+    _DBG_FILE("CGlobalWLANAdapter::StoreCenRepParams(): end");
+    return;
+	}
+	
+// ------------------------------------------------------------------------------------------------
+// void CGlobalWLANAdapter::StoreCommsDBParams( )
+// Stores the parameters to central repository
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::StoreCommsDBParamsL()
+	{
+	
+	_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): begin");
+	
+	CCommsDatabase* db = CCommsDatabase::NewL();
+	CleanupStack::PushL(db);
+			
+	// User defined WLAN device settings table from Comms database
+    CCommsDbTableView* usrTable;
+    
+    // Open user settings.
+    usrTable = db->OpenViewMatchingUintLC( TPtrC(WLAN_DEVICE_SETTINGS),
+											TPtrC(WLAN_DEVICE_SETTINGS_TYPE),
+											KWlanUserSettings );
+		
+	// if record did not exist, then it is created.
+    if ( usrTable->GotoFirstRecord() != KErrNone )
+        {
+        _DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): Record creation");
+    	TUint32 id;
+    	User::LeaveIfError( usrTable->InsertRecord( id ) );
+    
+    	usrTable->WriteUintL( TPtrC(WLAN_DEVICE_SETTINGS_TYPE), KWlanUserSettings );  
+    	//usrTable->WriteUintL( TPtrC(WLAN_TABLE_VERSION), KWlanDeviceSettingsTableVersion );
+    	User::LeaveIfError( usrTable->PutRecordChanges() ); // End and save changes.
+        }
+			
+	// Write CommsDat settings
+    User::LeaveIfError( usrTable->UpdateRecord() ); // Begin changes.
+	
+	// Check which parameters are present in the structure, store them into commsdb and
+	// update the status to OK/Error accordingly	
+	if ( iWriteSettings->backgroundScanIntervalPresent )
+		{
+		_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KBgScanInterval");
+    	TRAPD( err, usrTable->WriteUintL( TPtrC(WLAN_BG_SCAN_INTERVAL), iWriteSettings->backgroundScanInterval ));
+    	if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->backgroundScanIntervalStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->backgroundScanIntervalStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+		
+    if ( iWriteSettings->useDefaultSettingsPresent )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KUseDefaultSettings");
+    	TRAPD( err, usrTable->WriteBoolL( TPtrC(WLAN_USE_DEFAULT_SETTINGS), iWriteSettings->useDefaultSettings ));
+    	if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->useDefaultSettingsStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->useDefaultSettingsStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+		
+    if ( iWriteSettings->longRetryLimitPresent )
+   		{
+   		_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KWlanLongRetry");
+    	TRAPD( err, usrTable->WriteUintL( TPtrC(WLAN_LONG_RETRY), iWriteSettings->longRetryLimit ));
+    	if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->longRetryLimitStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->longRetryLimitStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+		
+    if ( iWriteSettings->shortRetryLimitPresent )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KWlanShortRetry");
+    	TRAPD( err, usrTable->WriteUintL( TPtrC(WLAN_SHORT_RETRY), iWriteSettings->shortRetryLimit ));
+    	if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->shortRetryLimitStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->shortRetryLimitStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+		
+    if ( iWriteSettings->RTSThresholdPresent )
+   		{
+   		_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KWlanRTSThreshold");
+    	TRAPD( err, usrTable->WriteUintL( TPtrC(WLAN_RTS_THRESHOLD), iWriteSettings->RTSThreshold ));
+    	if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->RTSThresholdStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->RTSThresholdStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+		
+    if ( iWriteSettings->TXPowerLevelPresent )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KWlanTxPowerLevel");
+    	TRAPD( err, usrTable->WriteUintL( TPtrC(NU_WLAN_TX_POWER_LEVEL), iWriteSettings->TXPowerLevel ));
+    	if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->TXPowerLevelStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->TXPowerLevelStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+		
+    if ( iWriteSettings->allowRadioMeasurementsPresent )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KWlanAllowRadioMeasurements");
+    	TRAPD( err, usrTable->WriteBoolL( TPtrC(WLAN_ALLOW_RADIO_MEASUREMENTS), iWriteSettings->allowRadioMeasurements ));
+        if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->allowRadioMeasurementsStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->allowRadioMeasurementsStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+    
+    if ( iWriteSettings->powerSavingPresent )
+    	{
+    	_DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): write KWlanPowerSaving");
+    	TRAPD( err, usrTable->WriteBoolL( TPtrC(WLAN_POWER_MODE), iWriteSettings->powerSaving ));
+        if ( err == KErrNone)
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->powerSavingStatus, CSmlDmAdapter::EOk);
+    		}
+    	else
+    		{
+    		iCallBack->SetStatusL(iWriteStatuses->powerSavingStatus, CSmlDmAdapter::EError);	
+    		}
+		}
+    
+    _DBG_FILE("CGlobalWLANAdapter::StoreCommsDBParams(): end");
+    User::LeaveIfError( usrTable->PutRecordChanges() ); // End and save changes.
+    CleanupStack::PopAndDestroy( usrTable );
+    CleanupStack::PopAndDestroy( db );
+    return;
+    
+	}
+			
+
+// ------------------------------------------------------------------------------------------------
+// void CGlobalWLANAdapter::ReadCenRepParams( )
+// Reads parameters from central repository
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::ReadCenRepParamsL()
+	{
+		
+	_DBG_FILE("CGlobalWLANAdapter::ReadCenRepParams(): begin");
+	
+	TInt err = KErrNone;
+    CRepository* repository = NULL;
+    TBuf8<KInputMaxLength> value;
+    TBuf8<KTypeMaxLength> type;
+    TInt temp = 0;
+     
+    // InternetConnectivityTest parameter is in a different cenRep than the other parameters
+    // Write KWlanScanRate
+    if ( iReadSettings->internetConnectivityTestPresent )
+    	{
+    	// This parameter is in the internet connectivity settings cenRep, open the repository
+        repository = CRepository::NewL( KCRUidInternetConnectivitySettings );
+        CleanupStack::PushL(repository);
+      
+    	value.Zero();
+    	type.Zero();
+    	
+    	// if opening the cenrtral repository failed, then leave this function
+    	if ( repository == NULL )
+    		{
+    		User::LeaveIfError( KErrGeneral );
+    		}
+    	
+    	err = repository->Get( KIctsTestPermission, temp );    	
+       	value.Num(temp);
+       	type.Append( KNSmlWLanInternetConnectivityTest );
+       	UpdateStatusAndResultL( iReadStatuses->internetConnectivityTestResult, iReadStatuses->internetConnectivityTestStatus, 
+       					value, type, err  );
+       	
+       	CleanupStack::PopAndDestroy(repository);
+    	}
+    
+    // The rest of the parameters are in WlanDeviceSettings cenRep
+    repository = CRepository::NewL( KCRUidWlanDeviceSettingsRegistryId );
+    CleanupStack::PushL(repository);
+    
+    // if opening the cenrtral repository failed, then leave this function
+	if ( repository == NULL )
+		{
+		User::LeaveIfError( KErrGeneral );
+		}
+    
+    if ( iReadSettings->MTUPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanMTU, temp );
+       	value.Num(temp);
+       	type.Append( KNSmlWLanMTU );
+       	UpdateStatusAndResultL( iReadStatuses->MTUResult, iReadStatuses->MTUStatus, 
+       					value, type, err  );
+    	}
+    
+    // Write KWlanScanRate
+    if ( iReadSettings->scanRatePresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanScanRate, temp );
+       	value.Num(temp);
+       	type.Append( KNSmlWLanScanRate );
+       	UpdateStatusAndResultL( iReadStatuses->scanRateResult, iReadStatuses->scanRateStatus, 
+       					value, type, err  );
+    	}
+
+    // Write KWlanRcpiTrigger
+   	if ( iReadSettings->RCPITriggerPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanRcpiTrigger, temp );
+       	value.Num(temp);
+       	type.Append( KNSmlWLanRCPITrigger );
+       	UpdateStatusAndResultL( iReadStatuses->RCPITriggerResult, iReadStatuses->RCPITriggerStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanMinActiveChannelTime
+    if ( iReadSettings->minActiveChannelTimePresent )
+   	 	{
+   	 	value.Zero();
+   	 	type.Zero();
+   	 	err = repository->Get( KWlanMinActiveChannelTime, temp );
+       	value.Num(temp);
+       	type.Append( KNSmlWLanMinActiveChannelTime );
+       	UpdateStatusAndResultL( iReadStatuses->minActiveChannelTimeResult, iReadStatuses->minActiveChannelTimeStatus, 
+       					value, type, err  );
+       	}
+       	
+    // Write KWlanMaxActiveChannelTime
+    if ( iReadSettings->maxActiveChannelTimePresent )
+   	 	{
+   	 	value.Zero();
+   	 	type.Zero();
+   	 	err = repository->Get( KWlanMaxActiveChannelTime, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanMaxActiveChannelTime );
+       	UpdateStatusAndResultL( iReadStatuses->maxActiveChannelTimeResult, iReadStatuses->maxActiveChannelTimeStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanMaxTxMSDULifeTime
+    if ( iReadSettings->maxTxMSDULifeTimePresent )
+   	 	{
+   	 	value.Zero();
+   	 	type.Zero();
+   	 	err = repository->Get( KWlanMaxTxMSDULifeTime, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanMaxTxMSDULifeTime );
+       	UpdateStatusAndResultL( iReadStatuses->maxTxMSDULifeTimeResult, iReadStatuses->maxTxMSDULifeTimeStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanScanExpirationTimer
+    if ( iReadSettings->scanExpirationTimerPresent )
+   	 	{
+   	 	value.Zero();
+   	 	type.Zero();
+   	 	err = repository->Get( KWlanScanExpirationTimer, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanScanExpirationTimer );
+       	UpdateStatusAndResultL( iReadStatuses->scanExpirationTimerResult, iReadStatuses->scanExpirationTimerStatus, 
+       					value, type, err  );
+       	}
+				
+    // Write KWlanUnloadDriverTimer
+    if ( iReadSettings->unloadDriverTimerPresent )
+   	 	{
+   	 	value.Zero();
+   	 	type.Zero();
+   	 	err = repository->Get( KWlanUnloadDriverTimer, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanUnloadDriverTimer );
+       	UpdateStatusAndResultL( iReadStatuses->unloadDriverTimerResult, iReadStatuses->unloadDriverTimerStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanRoamTimer
+    if ( iReadSettings->roamTimerPresent )
+    	{
+    	value.Zero();
+		type.Zero();
+    	err = repository->Get( KWlanRoamTimer, temp );
+    	value.Num(temp);
+		type.Append( KNSmlWLanRoamTimer );
+       	UpdateStatusAndResultL( iReadStatuses->roamTimerResult, iReadStatuses->roamTimerStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanRcpiDifference
+    if ( iReadSettings->RCPIDifferencePresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	type.Append( KNSmlWLanRCPIDifference );
+    	err = repository->Get( KWlanRcpiDifference, temp );
+		value.Num(temp); 	
+       	UpdateStatusAndResultL( iReadStatuses->RCPIDifferenceResult, iReadStatuses->RCPIDifferenceStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanConnRegainTimer
+    if ( iReadSettings->connRegainTimerPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	type.Append( KNSmlWLanConnRegainTimer );
+    	err = repository->Get( KWlanConnRegainTimer, temp );
+		value.Num(temp);
+       	UpdateStatusAndResultL( iReadStatuses->connRegainTimerResult, iReadStatuses->connRegainTimerStatus, 
+       					value, type, err  );
+       	}
+				
+    // Write KWlanMaxTriesToFindNw
+   	if ( iReadSettings->maxTriesToFindNwPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanMaxTriesToFindNw, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanMaxTriesToFindNw );
+       	UpdateStatusAndResultL( iReadStatuses->maxTriesToFindNwResult, iReadStatuses->maxTriesToFindNwStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanDelayBetweenFindNw
+    if ( iReadSettings->delayBetweenFindNwPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanDelayBetweenFindNw, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanDelayBetweenFindNw );
+       	UpdateStatusAndResultL( iReadStatuses->delayBetweenFindNwResult, iReadStatuses->delayBetweenFindNwStatus, 
+       					value, type, err  );
+       	}
+				
+    // Write KWlanMinPassiveChannelTime
+    if ( iReadSettings->minPassiveChannelTimePresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanMinPassiveChannelTime, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanRCPITrigger );
+       	UpdateStatusAndResultL( iReadStatuses->minPassiveChannelTimeResult, iReadStatuses->minPassiveChannelTimeStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanMaxPassiveChannelTime
+    if ( iReadSettings->maxPassiveChannelTimePresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanMaxPassiveChannelTime, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanMinPassiveChannelTime );
+       	UpdateStatusAndResultL( iReadStatuses->maxPassiveChannelTimeResult, iReadStatuses->maxPassiveChannelTimeStatus, 
+       					value, type, err  );
+       	}
+       			
+    // Write KWlanMaxApFailureCount
+    if ( iReadSettings->maxApFailureCountPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanMaxApFailureCount, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanMaxApFailureCount );
+       	UpdateStatusAndResultL( iReadStatuses->maxApFailureCountResult, iReadStatuses->maxApFailureCountStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanLongBeaconFindCount
+    if ( iReadSettings->longBeaconFindCountPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanLongBeaconFindCount, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanLongBeaconFindCount );
+       	UpdateStatusAndResultL( iReadStatuses->longBeaconFindCountResult, iReadStatuses->longBeaconFindCountStatus, 
+       					value, type, err  );
+       	}
+				
+    // Write KWlanQosNullFrameInterval
+    if ( iReadSettings->qosNullFrameIntervalPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanQosNullFrameInterval, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanQosNullFrameInterval );
+       	UpdateStatusAndResultL( iReadStatuses->qosNullFrameIntervalResult, iReadStatuses->qosNullFrameIntervalStatus, 
+       					value, type, err  );
+       	}
+
+    // Write KWlanQosNullFrameTimeout
+    if ( iReadSettings->qosNullFrameTimeoutPresent )
+    	{
+    	value.Zero();
+    	type.Zero();
+    	err = repository->Get( KWlanQosNullFrameTimeout, temp );
+		value.Num(temp);
+		type.Append( KNSmlWLanQosNullFrameTimeout );
+       	UpdateStatusAndResultL( iReadStatuses->qosNullFrameTimeoutResult, iReadStatuses->qosNullFrameTimeoutStatus, 
+       					value, type, err  );
+       	}
+
+    // Cleanup
+    CleanupStack::PopAndDestroy(repository);
+    _DBG_FILE("CGlobalWLANAdapter::ReadCenRepParams(): end"); 
+    return;
+	
+	}
+
+// ------------------------------------------------------------------------------------------------
+// void CGlobalWLANAdapter::UpdateStatusAndResultL( )
+// Reads parameters from cenrep and updates result/status
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::UpdateStatusAndResultL( TInt aResult, TInt aStatus, TDesC8& aValue, TDesC8& aType, TInt aStoreErr )
+	{
+	
+	_DBG_FILE("CGlobalWLANAdapter::UpdateStatusAndResultL(): begin");
+
+	CBufBase *lObject = CBufFlat::NewL(KInputMaxLength);
+    CleanupStack::PushL(lObject);
+
+    // If reading went ok, then we can set the results and statuses
+    if ( aStoreErr == KErrNone )
+    	{
+    	lObject->InsertL(0, aValue);
+    	iCallBack->SetResultsL( aResult,*lObject,aType );
+    	iCallBack->SetStatusL( aStatus, CSmlDmAdapter::EOk);
+    	}
+    else
+    	{
+    	iCallBack->SetStatusL( aStatus, CSmlDmAdapter::EError );
+    	}
+    
+    _DBG_FILE("CGlobalWLANAdapter::UpdateStatusAndResultL(): end");
+    CleanupStack::PopAndDestroy(lObject);
+    return;
+   	}
+
+// ------------------------------------------------------------------------------------------------
+// void CGlobalWLANAdapter::ReadCommsDBParams( )
+// Reads parameters from commsDB
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::ReadCommsDBParamsL()
+	{
+	_DBG_FILE("CGlobalWLANAdapter::ReadCommsDBParams() begin" );  
+   
+  	CCommsDatabase* db = CCommsDatabase::NewL();
+  	CleanupStack::PushL(db);
+			
+	// User defined WLAN device settings table from Comms database
+    CCommsDbTableView* usrTable;
+    
+    // Open user settings.
+    usrTable = db->OpenViewMatchingUintLC( TPtrC(WLAN_DEVICE_SETTINGS),
+    										TPtrC(WLAN_DEVICE_SETTINGS_TYPE),
+    										KWlanUserSettings );
+
+    TUint32 intVal;
+    TBool boolVal = EFalse;
+    TBuf8<KInputMaxLength> value;
+    TBuf8<KTypeMaxLength> type;
+    TInt err = KErrNone;
+    TInt readErr = KErrNone;
+    _LIT8(KTrue,"True");
+    _LIT8(KFalse,"False");
+		
+	// if record did not exist, then we don't do anything
+    if ( usrTable == NULL )
+    	readErr = KErrGeneral;
+   	else
+   		readErr = usrTable->GotoFirstRecord();
+
+    // Check whether parameter was requested to be fetched
+   	if ( iReadSettings->backgroundScanIntervalPresent )
+   		{
+   		// The reading is done if the commdb record was opened successfully, otherwise the err
+   		// is updated so that the ReadAndSetStatus function can update thet status correctly
+   		if ( readErr == KErrNone )
+   			{
+    		TRAP( err, usrTable->ReadUintL( TPtrC(WLAN_BG_SCAN_INTERVAL), intVal ));
+   			}
+    	else
+    		{
+            err=readErr;
+    		}
+   		
+   		value.Zero();
+   		type.Zero();
+    	value.Num(intVal); 
+    	type.Append( KNSmlWLanBackgroundScanInterval );
+    	UpdateStatusAndResultL( iReadStatuses->backgroundScanIntervalResult, iReadStatuses->backgroundScanIntervalStatus, 
+       					value, type, err );
+   		}
+ 
+    if ( iReadSettings->useDefaultSettingsPresent )
+    	{
+   		if ( readErr == KErrNone )
+   			{
+    		TRAP( err, usrTable->ReadBoolL( TPtrC(WLAN_USE_DEFAULT_SETTINGS), boolVal ));
+   			}
+    	else
+    		{
+            err=readErr;
+    		}
+    	
+		value.Zero();
+		type.Zero();
+    	if ( boolVal == 0 )
+    		value.Copy(KFalse);
+    	else
+    		value.Copy(KTrue);
+    	
+    	type.Append( KNSmlWLanUseDefaultSettings );
+    	_DBG_FILE("CGlobalWLANAdapter::ReadCommsDBParams() go set status" );
+    	UpdateStatusAndResultL( iReadStatuses->useDefaultSettingsResult, iReadStatuses->useDefaultSettingsStatus, 
+       					value, type, err );
+    	}
+    
+    if ( iReadSettings->longRetryLimitPresent )
+    	{
+    	if ( readErr == KErrNone )
+    		{
+    		TRAP( err, usrTable->ReadUintL( TPtrC(WLAN_LONG_RETRY), intVal ));
+    		}
+   		else
+   			{
+   			err = readErr;
+   			}
+    	
+    	value.Zero();
+    	value.Num(intVal);
+    	type.Zero();
+    	type.Append( KNSmlWLanLongRetryLimit );
+    	UpdateStatusAndResultL( iReadStatuses->longRetryLimitResult, iReadStatuses->longRetryLimitStatus, 
+       					value, type, err );
+    	}
+    
+    if ( iReadSettings->shortRetryLimitPresent )
+    	{
+    	if ( readErr == KErrNone )
+    		{
+    		TRAP( err, usrTable->ReadUintL( TPtrC(WLAN_SHORT_RETRY), intVal ));
+    		}
+   		else
+   			{
+   			err = readErr;
+   			}
+    	
+    	value.Zero();
+    	type.Zero();
+    	value.Num(intVal);
+    	type.Append( KNSmlWLanShortRetryLimit );
+    	UpdateStatusAndResultL( iReadStatuses->shortRetryLimitResult, iReadStatuses->shortRetryLimitStatus, 
+       					value, type, err );
+    	}
+    	
+    if ( iReadSettings->RTSThresholdPresent )
+    	{
+    	if ( readErr == KErrNone )
+    		{
+    		TRAP( err, usrTable->ReadUintL( TPtrC(WLAN_RTS_THRESHOLD), intVal ));
+    		}
+   		else
+   			{
+   			err = readErr;
+   			}
+    	
+    	value.Zero();
+    	type.Zero();
+    	value.Num(intVal);
+    	type.Append( KNSmlWLanRTSThreshold );
+    	UpdateStatusAndResultL( iReadStatuses->RTSThresholdResult, iReadStatuses->RTSThresholdStatus, 
+       					value, type, err );
+    	}
+    
+    if ( iReadSettings->TXPowerLevelPresent )
+    	{
+		if ( readErr == KErrNone )
+			{
+    		TRAP( err, usrTable->ReadUintL( TPtrC(NU_WLAN_TX_POWER_LEVEL), intVal ));
+			}
+   		else
+   			{
+   			err = readErr;
+   			}
+		
+		value.Zero();
+		type.Zero();
+    	value.Num(intVal);
+    	type.Append( KNSmlWLanTXPowerLevel );
+    	UpdateStatusAndResultL( iReadStatuses->TXPowerLevelResult, iReadStatuses->TXPowerLevelStatus, 
+       					value, type, err );
+    	}
+    
+    if ( iReadSettings->allowRadioMeasurementsPresent )
+    	{
+		if ( readErr == KErrNone )
+			{
+    		TRAP( err, usrTable->ReadBoolL( TPtrC(WLAN_ALLOW_RADIO_MEASUREMENTS), boolVal ));
+			}
+   		else
+   			{
+   			err = readErr;
+   			}
+		
+		value.Zero();
+		type.Zero();
+    	if ( boolVal )
+    		value.Copy(_L8("True"));
+    	else
+    		value.Copy(_L8("False"));
+    	
+    	type.Append( KNSmlWLanAllowRadioMeasurements );
+    	UpdateStatusAndResultL( iReadStatuses->allowRadioMeasurementsResult, iReadStatuses->allowRadioMeasurementsStatus, 
+       					value, type, err );
+    	}
+    
+    if ( iReadSettings->powerSavingPresent )
+    	{
+		if ( readErr == KErrNone )
+    		{
+    		TRAP( err, usrTable->ReadBoolL( TPtrC(WLAN_POWER_MODE), boolVal ));
+    		}
+   		else
+   			{
+   			err = readErr;
+   			}
+		
+		value.Zero();
+		type.Zero();
+    	if ( boolVal )
+    		value.Copy(_L8("True"));
+    	else
+    		value.Copy(_L8("False"));
+    	
+    	type.Append( KNSmlWLanPowerSaving );
+    	UpdateStatusAndResultL( iReadStatuses->powerSavingResult, iReadStatuses->powerSavingStatus, 
+       					value, type, err );
+    	}
+
+	CleanupStack::PopAndDestroy( usrTable );
+    CleanupStack::PopAndDestroy( db );
+	_DBG_FILE("CGlobalWLANAdapter::ReadCommsDBParams() end" );  
+	return;
+	}
+
+
+
+// ------------------------------------------------------------------------------------------------
+// TInt CGlobalWLANAdapter::NumOfUriSegs( const TDesC8& aUri )
+// Return count of URI segments of aUri
+// ------------------------------------------------------------------------------------------------
+TInt CGlobalWLANAdapter::NumOfUriSegs( const TDesC8& aUri )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::NumOfUriSegs(): begin");
+
+    TInt count = 1;
+    for( TInt i=0; i<aUri.Length(); i++ )
+        {
+        if( aUri[i] == '/' )
+            count ++;
+        }
+
+    _DBG_FILE("CGlobalWLANAdapter::NumOfUriSegs(): end");
+    return count;
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// TPtrC8 CGlobalWLANAdapter::GetLastUriSeg(const TDesC8& aURI)
+// Returns only the last uri segemnt
+// ------------------------------------------------------------------------------------------------
+TPtrC8 CGlobalWLANAdapter::GetLastUriSeg( const TDesC8& aURI )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::GetLastUriSeg(): begin");
+
+	// search for the segment after the last slash
+    TInt i;
+    for( i = aURI.Length() - 1; i >= 0; i-- )
+        {
+        if( aURI[i] == '/' )
+            {
+            break;
+            }
+        }
+
+    if( i == 0 )
+        {
+        _DBG_FILE("CGlobalWLANAdapter::GetLastUriSeg(): end");
+        return aURI;
+        }
+    else
+        {
+        _DBG_FILE("CGlobalWLANAdapter::GetLastUriSeg(): end");
+        return aURI.Mid( i + 1 );
+        }
+    }
+    
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::DesToInt( const TDesC8& aNumber )
+// Returns aLuid as integer value
+// ------------------------------------------------------------------------------------------------
+TInt CGlobalWLANAdapter::DesToInt( const TDesC8& aNumber )
+    {
+    _DBG_FILE("CGlobalWLANAdapter::DesToInt(): begin");
+    
+    TInt err = KErrNone;
+    TLex8 lex(aNumber);
+    TInt value = 0;
+    err = lex.Val( value );
+
+    DBG_ARGS8(_S8("CGlobalWLANAdapter::DesToInt() - Des: <%S> Int: <%D>"), &aNumber, value );
+    _DBG_FILE("CGlobalWLANAdapter::DesToInt(): end");
+   
+    // the input might have been illegal. Return error code if conversion failed.
+    if ( err == KErrNone )
+    	return value;
+    else
+    	return err;
+    }
+    
+    
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::InitMemberVariables
+// Inits the member variable structures
+// ------------------------------------------------------------------------------------------------
+void CGlobalWLANAdapter::InitMemberVariables()
+    {
+    _DBG_FILE("CGlobalWLANAdapter::InitMemberVariables(): begin");
+    
+    iWriteSettings->RCPITriggerPresent=EFalse;
+  	iWriteSettings->internetConnectivityTestPresent=EFalse;
+	iWriteSettings->useDefaultSettingsPresent=EFalse;
+	iWriteSettings->longRetryLimitPresent=EFalse;
+	iWriteSettings->shortRetryLimitPresent=EFalse;
+	iWriteSettings->RTSThresholdPresent=EFalse;
+	iWriteSettings->TXPowerLevelPresent=EFalse;
+	iWriteSettings->powerSavingPresent=EFalse;
+	iWriteSettings->backgroundScanIntervalPresent=EFalse;
+	iWriteSettings->scanRatePresent=EFalse;
+	iWriteSettings->RCPITriggerPresent=EFalse;
+	iWriteSettings->minActiveChannelTimePresent=EFalse;
+	iWriteSettings->maxActiveChannelTimePresent=EFalse;
+	iWriteSettings->maxTxMSDULifeTimePresent=EFalse;
+	iWriteSettings->scanExpirationTimerPresent=EFalse;
+	iWriteSettings->unloadDriverTimerPresent=EFalse;
+	iWriteSettings->roamTimerPresent=EFalse;
+	iWriteSettings->RCPIDifferencePresent=EFalse;
+	iWriteSettings->connRegainTimerPresent=EFalse;
+	iWriteSettings->maxTriesToFindNwPresent=EFalse;
+	iWriteSettings->delayBetweenFindNwPresent=EFalse;
+	iWriteSettings->allowRadioMeasurementsPresent=EFalse;
+	iWriteSettings->minPassiveChannelTimePresent=EFalse;
+	iWriteSettings->maxPassiveChannelTimePresent=EFalse;
+	iWriteSettings->maxApFailureCountPresent=EFalse;
+	iWriteSettings->longBeaconFindCountPresent=EFalse;
+	iWriteSettings->qosNullFrameIntervalPresent=EFalse;
+	iWriteSettings->qosNullFrameTimeoutPresent=EFalse;
+	iWriteSettings->MTUPresent=EFalse;
+		 
+	iReadSettings->RCPITriggerPresent=EFalse;
+  	iReadSettings->internetConnectivityTestPresent=EFalse;
+	iReadSettings->useDefaultSettingsPresent=EFalse;
+	iReadSettings->longRetryLimitPresent=EFalse;
+	iReadSettings->shortRetryLimitPresent=EFalse;
+	iReadSettings->RTSThresholdPresent=EFalse;
+	iReadSettings->TXPowerLevelPresent=EFalse;
+	iReadSettings->powerSavingPresent=EFalse;
+	iReadSettings->backgroundScanIntervalPresent=EFalse;
+	iReadSettings->scanRatePresent=EFalse;
+	iReadSettings->RCPITriggerPresent=EFalse;
+	iReadSettings->minActiveChannelTimePresent=EFalse;
+	iReadSettings->maxActiveChannelTimePresent=EFalse;
+	iReadSettings->maxTxMSDULifeTimePresent=EFalse;
+	iReadSettings->scanExpirationTimerPresent=EFalse;
+	iReadSettings->unloadDriverTimerPresent=EFalse;
+	iReadSettings->roamTimerPresent=EFalse;
+	iReadSettings->RCPIDifferencePresent=EFalse;
+	iReadSettings->connRegainTimerPresent=EFalse;
+	iReadSettings->maxTriesToFindNwPresent=EFalse;
+	iReadSettings->delayBetweenFindNwPresent=EFalse;
+	iReadSettings->allowRadioMeasurementsPresent=EFalse;
+	iReadSettings->minPassiveChannelTimePresent=EFalse;
+	iReadSettings->maxPassiveChannelTimePresent=EFalse;
+	iReadSettings->maxApFailureCountPresent=EFalse;
+	iReadSettings->longBeaconFindCountPresent=EFalse;
+	iReadSettings->qosNullFrameIntervalPresent=EFalse;
+	iReadSettings->qosNullFrameTimeoutPresent=EFalse;
+	iReadSettings->MTUPresent=EFalse;
+
+	_DBG_FILE("CGlobalWLANAdapter::InitMemberVariables(): begin");
+    }
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/globalwlansettings/src/globalwlanadapter.rss	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,45 @@
+CHARACTER_SET UTF8/*
+* Copyright (c) 2008 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:   glowal wlan-settings adapter resources
+*
+*/
+
+ 
+
+
+#include <registryinfo.rh>
+#include "nsmldmconstants.h"
+
+RESOURCE REGISTRY_INFO theRegistryInfo
+  {
+  dll_uid = 0x1315DBD; //The DLL's 3rd UID.
+  interfaces = 
+      {
+      INTERFACE_INFO
+          {
+          interface_uid = KNSmlDMInterfaceUid; // DM interface UID
+          implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x1315DBE; // Global WLAN Adapter
+                version_no = 1; 
+                display_name = "GlobalWLanAdapter";
+                default_data = "";
+                opaque_data = "";
+                }
+            };
+          }
+      };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/group/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,30 @@
+/*
+* 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:   build info file for internet settings adapter
+*
+*/
+
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+./nsmlinternetadapter.mmp
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/group/nsmlinternetadapter.mmp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2004-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:   InternetAdapter 
+*
+*/
+
+
+
+#include "defaultcaps.hrh"
+#include  <platform_paths.hrh>
+
+CAPABILITY      CAP_ECOM_PLUGIN
+TARGET	      	nsmlinternetadapter.dll
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x101F6DEA
+VENDORID        VID_DEFAULT
+
+
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+
+SOURCEPATH      ../src
+USERINCLUDE     ../inc
+
+SOURCE          NSmlInternetAdapter.cpp
+
+SOURCE		NSmlWLanAdapter.cpp
+SOURCE		NSmlWlanSettings.cpp
+
+START RESOURCE	NSmlInternetAdapter.rss
+END
+
+LANG	sc
+
+LIBRARY		charconv.lib commdb.lib efsrv.lib ecom.lib euser.lib nsmldmclientserverutils.lib
+LIBRARY		nsmldebug.lib sysutil.lib
+LIBRARY		inetprotutil.lib
+LIBRARY 	commsdat.lib
+LIBRARY 	cmmanager.lib
+LIBRARY 	cmmanagerdatabase.lib
+LIBRARY 	centralrepository.lib FeatMgr.lib
+LIBRARY		policyengine.lib
+LIBRARY		nsmldmtreedbclient.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/inc/NSmlInternetAdapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,575 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Internet-settings 
+*
+*/
+
+
+
+
+#ifndef __NSMLINTERNETADAPTER_H__
+#define __NSMLINTERNETADAPTER_H__
+
+// SyncML device management LoginScript
+//#define __SYNCML_DM_LSCRIPT 1
+//#define __SYNCML_DM_WLAN 1
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <utf.h>
+#include <bldvariant.hrh>
+#include <commdb.h>
+#include <metadatabase.h>
+#include "smldmadapter.h"
+#include "nsmlconstants.h"
+
+#include "NSmlWLanAdapter.h"
+#include "NSmlWlanSettings.h"
+
+const TInt  KNSmlInternetAdapterFatMinSize=512;
+const TInt  KNSmlIncompleteAP=-1;
+// Buffering Stuff
+const TInt KNSmlAPGranularity = 4;
+const TUint8 KNSmlDMUriSeparator = 0x2f;
+
+const TUint8 KNSmlDMDot = 0x2e;
+const TUint8 KNSmlDMAsciiIntStart = 0x30;
+const TUint8 KNSmlDMAsciiIntEnd = 0x39;
+// Other constants
+const TInt KNSmlApDnsLuidUpperBase = 300000;
+const TInt KNSmlAp3gpppsLowerBase = 50000;
+const TInt KNSmlApProxyLowerBase = 100000;
+const TInt KNSmlApProxyUpperBase = 200000;
+const TInt KNSmlApWapLowerBase = 9200;
+const TInt KNSmlApWapUpperBase = 9203;
+
+//DDF version number
+_LIT8( KNSmlInternetAdapterDDFversion, "1.1");
+
+//DDF accepted AP-fieldnames
+_LIT8( KNSmlDdfAP,              "AP" );
+
+_LIT8( KNSmlDdfPx,              "Px" );
+_LIT8( KNSmlDdfPxName,          "Name" );
+_LIT8( KNSmlDdfPxId,            "PxID" );
+_LIT8( KNSmlDdfPxPW,            "PxPW" );
+_LIT8( KNSmlDdfPPGAuthTy,       "PPGAuthTy" );
+_LIT8( KNSmlDdfDomain,          "Domain" );
+_LIT8( KNSmlDdfDomainL,         "DomainL" );
+_LIT8( KNSmlDdfPxAddr,          "PxAddr" );
+_LIT8( KNSmlDdfToNAPID,         "ToNAPID" );
+_LIT8( KNSmlDdfToNAPIDL,        "ToNAPIDL" );
+_LIT8( KNSmlDdfStartpg,         "Startpg" );
+_LIT8( KNSmlDdfBasAuthId,       "BasAuthId" );
+_LIT8( KNSmlDdfBasAuthPW,       "BasAuthPW" );
+_LIT8( KNSmlDdfPort,            "Port" );
+_LIT8( KNSmlDdfPortNbr,         "PortNbr" );
+_LIT8( KNSmlDdfPxAuthTy,        "PxAuthTy" ); 
+_LIT8( KNSmlDdfService,         "Service" );
+_LIT8( KNSmlDdfServiceL,        "ServiceL" );
+_LIT8( KNSmlDdfUsePTxtLog,      "UsePTxtLog" );
+
+_LIT8( KNSmlDdfGPRSPDP,         "GPRSPDP" );
+_LIT8( KNSmlDdfDefGW,           "DefGW" );
+_LIT8( KNSmlDdfNetworkMask,     "NetworkMask" );
+
+_LIT8( KNSmlDdfPPPComp,         "PPPComp" );
+
+_LIT8( KNSmlDdfNAPDef,          "NAPDef" );
+_LIT8( KNSmlDdfNAPName,         "Name" );
+_LIT8( KNSmlDdfNAPLinger,         "Linger" );
+_LIT8( KNSmlDdfNAPID,           "NAPID" );
+_LIT8( KNSmlDdfBearer,          "Bearer" );
+_LIT8( KNSmlDdfBearerL,         "BearerL" );
+_LIT8( KNSmlDdfDirection,       "Direction" );
+_LIT8( KNSmlDdfInternet,        "Internet" );
+_LIT8( KNSmlDdfNAPAddr,         "NAPAddr" );
+_LIT8( KNSmlDdfNAPAddrTy,       "NAPAddrTy" );
+_LIT8( KNSmlDdfDNSAddr,         "DNSAddr" );
+_LIT8( KNSmlDdfDNSAddrL,        "DNSAddrL" );
+_LIT8( KNSmlDdfDNSAddrTy,       "DNSAddrTy" );
+_LIT8( KNSmlDdfDNSPriority,     "DNSPriority" );
+_LIT8( KNSmlDdfNAPAuthInf,      "NAPAuthInf" ); 
+_LIT8( KNSmlDdfAuthName,        "AuthName" ); 
+_LIT8( KNSmlDdfAuthSecr,        "AuthSecr" );
+_LIT8( KNSmlDdfPxAuthInf,       "PxAuthInf" );
+_LIT8( KNSmlDdfPxAuthId,        "PxAuthID" );
+_LIT8( KNSmlDdfPxAuthPW,        "PxAuthPW" );
+
+_LIT8( KNSmlDdfIPAddrFromServer,"IPAddrFromServer" );
+_LIT8( KNSmlDdfIPAddr,          "IPAddr" );
+_LIT8( KNSmlDdfDNSAddrFromServer,"IPDNSAddrFromServer" );
+_LIT8( KNSmlDdfIPv6DNSAddrFromServer,"IPv6DNSAddrFromServer" );
+_LIT8( KNSmlDdfIfNetworks,      "IfNetworks" );
+_LIT8( KNSmlDdfIAPService,      "IAPService" );
+_LIT8( KNSmlDdfLANService,      "LANService" );
+
+_LIT8( KNSmlDdfIAPSeamlessness, "Seamlessness" );
+_LIT8( KNSmlDdfIAPMetaData,     "MetaData" );
+
+_LIT8( KNSmlDdfNoPxFor,         "NoPxFor" );
+_LIT8( KNSmlDdfNoPxForL,        "NoPxForL" );
+
+_LIT8( KNSmlDdfNetworks,        "Networks" );
+_LIT8( KNSmlDdfNetworkName,     "Name" );
+_LIT8( KNSmlDdfNetworkID,       "ID" );
+
+//DDF AP-field descriptions
+_LIT8( KNSmlDdfAPDesc,           "AP (Access Point) node" );
+
+_LIT8( KNSmlDdfPxDesc,          "Px (Proxy) node" );
+_LIT8( KNSmlDdfPxNameDesc,      "Px name description" );
+_LIT8( KNSmlDdfNameDesc,        "Displayable name for the Proxy" );
+_LIT8( KNSmlDdfPxIdDesc,        "Define one Proxy entity" );
+_LIT8( KNSmlDdfPxPWDesc,        "Password for one Proxy entity" );
+_LIT8( KNSmlDdfPPGAuthTyDesc,   "Link PxID and PxPW to an authentication method" );
+_LIT8( KNSmlDdfPxAddrDesc,      "Proxy-Address" );
+_LIT8( KNSmlDdfToNAPIDDesc,     "Parent to all Network Access Point link objects" );
+_LIT8( KNSmlDdfToNAPIDLDesc,    "NAPID end" );
+_LIT8( KNSmlDdfStartpgDesc,     "The WAP homepage or start page" );
+_LIT8( KNSmlDdfBasAuthIdDesc,   "Basic authentication identifier" );
+_LIT8( KNSmlDdfBasAuthPWDesc,   "Basic authentication password" );
+_LIT8( KNSmlDdfPortDesc,        "Port node" );
+_LIT8( KNSmlDdfPortNbrDesc,     "Value of the port number" );
+_LIT8( KNSmlDdfServiceDesc,     "Service node" );
+_LIT8( KNSmlDdfServiceLDesc,    "ServiceL" );
+_LIT8( KNSmlDdfUsePTxtLogDesc,  "Plain Text Login is used or not" );
+
+_LIT8( KNSmlDdfGPRSPDPDesc,     "GPRS PDP-type" );
+_LIT8( KNSmlDdfDefGWDesc,       "Default Gateway" );
+_LIT8( KNSmlDdfNetworkMaskDesc, "Network/Subnet mask" );
+
+_LIT8( KNSmlDdfPPPCompDesc,     "PPP Compression" );
+
+_LIT8( KNSmlDdfNAPDefDesc,      "Network Access Point Definition objects parent" );
+_LIT8( KNSmlDdfNAPNameDesc,     "Displayable name for the NAP" );
+_LIT8( KNSmlDdfNAPIDDesc,       "Used by TO-NAPID link of the Proxy" );
+_LIT8( KNSmlDdfNAPLingerDesc,       "Linger value" );
+_LIT8( KNSmlDdfBearerDesc,      "Bearer node" );
+_LIT8( KNSmlDdfBearerLDesc,     "Bearer valid" );
+_LIT8( KNSmlDdfDirectionDesc,   "Direction for network type" );
+_LIT8( KNSmlDdfInternetDesc,    "IP-routable network segment" );
+_LIT8( KNSmlDdfNAPAddrDesc,     "NAP-Address" );
+_LIT8( KNSmlDdfNAPAddrTyDesc,   "NAP-Address-Type" );
+_LIT8( KNSmlDdfDNSAddrDesc,     "DNSAddr node" );
+_LIT8( KNSmlDdfDNSAddrLDesc,    "Address of a DNS server" );
+_LIT8( KNSmlDdfDNSAddrTyDesc,   "Type of DNS address" );
+_LIT8( KNSmlDdfDNSPriorityDesc, "Rank of DNS server" );
+_LIT8( KNSmlDdfNAPAuthInfDesc,  "Authentication Info" );
+_LIT8( KNSmlDdfAuthNameDesc,    "Loginname" );
+_LIT8( KNSmlDdfAuthSecrDesc,    "Loginpassword" );
+_LIT8( KNSmlDdfPxAuthInfDesc,    "Proxy Authentication Info" );
+_LIT8( KNSmlDdfPxAuthIdDesc,        "Proxy Loginname" );
+_LIT8( KNSmlDdfPxAuthPWDesc,        "Proxy Loginpassword" );
+
+_LIT8( KNSmlDdfIPAddrFromServerDesc,"Get IP addresses from server?" );
+_LIT8( KNSmlDdfIPAddrDesc,          "IP-address" );
+_LIT8( KNSmlDdfDNSAddrFromServerDesc,"Get DNS addresses from server?" );
+_LIT8( KNSmlDdfIPv6DNSAddrFromServerDesc,"Get IPv6 addresses from server?" );
+_LIT8( KNSmlDdfIfNetworksDesc,      "Comma separated list of network protocols, e.g. PPP" );
+_LIT8( KNSmlDdfIAPServiceDesc,      "IAP service" );
+
+_LIT8( KNSmlDdfIAPSeamlessnessDesc, "IAP seamlessness value" );
+_LIT8( KNSmlDdfIAPMetaDataDesc,      "IAP meta data value" );
+
+_LIT8( KNSmlDdfDomainDesc,          "Domain desc" );
+_LIT8( KNSmlDdfDomainLDesc,         "Domain, for which the Proxy is responsible" );
+
+_LIT8( KNSmlDdfNoPxForDesc,     "No proxy for listed AP:s" );
+_LIT8( KNSmlDdfNoPxForLDesc,    "No proxy for this AP" );
+
+_LIT8( KNSmlDdfNetworksDesc,    "Networks" );
+_LIT8( KNSmlDdfNetworkNameDesc, "Network Name" );
+_LIT8( KNSmlDdfNetworkIDDesc,   "Network ID" );
+
+//Other 
+_LIT8( KNSmlDNS1,               "/DNS1" );
+_LIT8( KNSmlDNS2,               "/DNS2" );
+_LIT8( KNSmlDNS3,               "/DNS3" );
+_LIT8( KNSmlDNS4,               "/DNS4" );
+
+_LIT8(KNSmlAPnode,      "NAPDef/Px");
+
+
+_LIT8(KNSmlNAPDefGPRSnode, "Name/NAPID/Startpg/Bearer/IPAddr/IPAddrFromServer/IfNetworks/NAPAddr/NAPAddrTy/IPDNSAddrFromServer/IPv6DNSAddrFromServer/DNSAddr/NAPAuthInf/DefGW/NetworkMask/PPPComp/UsePTxtLog/GPRSPDP/Networks/IAPService/Seamlessness/MetaData/Linger");
+
+//_LIT8(KNSmlNAPDefCSDnode, "Name/NAPID/Bearer/IPAddr/IPAddrFromServer/IfNetworks/NAPAddr/NAPAddrTy/CallTy/IPDNSAddrFromServer/IPv6DNSAddrFromServer/DNSAddr/NAPAuthInf/LnkSpeed/DefGW/NetworkMask/PPPComp/UseCB/CBTy/CBNbr/UsePTxtLog/ModemInit/Networks/IAPService");
+
+//_LIT8(KNSmlNAPDefGPRSnode, "Name/NAPID/Bearer/IPAddr/IPAddrFromServer/IfNetworks/NAPAddr/NAPAddrTy/CallTy/IPDNSAddrFromServer/IPv6DNSAddrFromServer/DNSAddr/NAPAuthInf/LnkSpeed/DefGW/NetworkMask/PPPComp/UsePTxtLog/GPRSPDP/Networks/IAPService");
+
+_LIT8(KNSmlPxnode,      "Name/PxID/PxAddr/Port/ToNAPID/Startpg/Domain/PxAuthInf/NoPxFor");
+
+#ifdef __SYNCML_DM_LSCRIPT
+_LIT8(KNSmlLoginscriptnode, "/LoginTW/LoginScriptData");
+#endif
+
+_LIT8(KNSmlDNSAddrNode, "DNSAddrL/DNSAddrTy/DNSPriority" );
+
+_LIT8(KNSmlWLannode, "/WLAN/SSID/UsedSSID/SSIDHidden/UseWPAPSK/NetworkMode/SecurityMode/WEPAuthMode/WPAPreSharedKey/WLANEAPList/WEPKeyIndex/WEPKey/Data/Length/WEPKeyID/Username/Password/EAPType/Realm/UsePseudonym/Encapsulation/VerifyCertRealm/RequireClientAuthentication/SessionValidityTime/CipherSuite/AllowPEAPv0/AllowPEAPv1/AllowPEAPv2/IssuerName/SubjectName/CertType/SerialNumber/SubjectKeyId/Fingerprint");
+
+//Default data values
+_LIT( KNSmlDefName,             "APAdapterIns" );
+_LIT( KNSmlDefAP,               "AP" );
+_LIT8( KNSmlFirstDNSPri,        "1" );
+_LIT8( KNSmlSecondDNSPri,       "2" );
+_LIT8( KNSmlDNSIp,              "IP" );
+_LIT8( KNSmlDNSIp6,             "IP6" );
+_LIT8( KNSmlEmptyIpv4Address8,  "0.0.0.0");
+_LIT( KNSmlEmptyIpv4Address,   "0.0.0.0");
+_LIT8( KNSmlMimeTypeTextPlain,  "text/plain" );
+
+_LIT8( KNSmlDmApValOutgoing, "Outgoing" );
+_LIT8( KNSmlDmApValIncoming, "Incoming" );
+_LIT8( KNSmlDmApVal3Gppps, "3GPPPS" );
+_LIT8( KNSmlDmApValGsmCsd, "GSM-CSD" );
+_LIT8( KNSmlDmApValGsmGprs, "GSM-GPRS" );
+_LIT8( KNSmlDmApValGsmHscsd, "GSM-HSCSD" );
+_LIT8( KNSmlDmApValVpn, "VPN" );
+_LIT8( KNSmlDmApValWlan, "WLAN" );
+_LIT8( KNSmlDmApValFSlash, "/" );
+_LIT8( KNSmlDmApValAnalog, "ANALOG-MODEM" );
+_LIT8( KNSmlDmApValV110, "V.110" );
+_LIT8( KNSmlDmApValV120, "V.120" );
+
+_LIT8( KNSmlDmApValAuto, "Auto" );
+_LIT8( KNSmlDmApVal2400, "2400" );
+_LIT8( KNSmlDmApVal4800, "4800" );
+_LIT8( KNSmlDmApVal9600, "9600" );
+_LIT8( KNSmlDmApVal14400, "14400" );
+_LIT8( KNSmlDmApVal19200, "19200" );
+_LIT8( KNSmlDmApVal28800, "28800" );
+_LIT8( KNSmlDmApVal32000, "32000" );
+_LIT8( KNSmlDmApVal33600, "33600" );
+_LIT8( KNSmlDmApVal38400, "38400" );
+_LIT8( KNSmlDmApVal43200, "43200" );
+_LIT8( KNSmlDmApVal48000, "48000" );
+_LIT8( KNSmlDmApVal56000, "56000" );
+_LIT8( KNSmlDmApVal57600, "57600" );
+_LIT8( KNSmlDmApVal64000, "64000" );
+_LIT8( KNSmlDmApValExtended, "Extended" );
+_LIT8( KNSmlDmApValIpv4, "IPv4" );
+_LIT8( KNSmlDmApValIpv6, "IPv6" );
+_LIT8( KNSmlDmApValTrue, "True" );
+_LIT8( KNSmlDmApValFalse, "False" );
+
+
+//class forwards
+class CNSmlWLanAdapter;
+
+struct TNSmlAPAddElement
+    {
+    HBufC8  *iUri;
+    HBufC8 *iData;
+    TInt iStatusRef;
+    HBufC8* iLuid;
+    TBool iLeaf;
+    TBool iDone;
+    };
+
+enum TNSmlAPLeafType
+    {
+    EDMUpdate,
+    EDMAdd,
+    EDMDelete,
+    EDMUnset
+    };
+
+struct TNSmlAPBufferElement
+    {
+    CArrayFixFlat<TNSmlAPAddElement> *iNodeBuf;
+    CArrayFixFlat<TNSmlAPAddElement> *iWlanNodeBuf;
+    HBufC8* iMappingName;
+    HBufC8* iName;
+    TBool iExecuted;
+    TInt  iLuid;
+    TBool iBearer;
+    TBool iDirection;
+    TBool iNameReceived;
+    TBool iDnsUpdateBuf;
+    };
+//
+// ------------------------------------------------------------------------------------------------
+// CNSmlInternetAdapter 
+// ------------------------------------------------------------------------------------------------
+class CNSmlInternetAdapter : public CSmlDmAdapter
+    {
+public:
+
+enum TNSmlAPFieldType
+    {
+    EStr,
+    EInt,
+    EBin,
+    EBool,
+    ESpec,
+    EWap,
+    EWrong
+    };
+    static CNSmlInternetAdapter* NewL(MSmlDmCallback* aDmCallback );
+    static CNSmlInternetAdapter* NewLC(MSmlDmCallback* aDmCallback );
+
+    virtual ~CNSmlInternetAdapter(); 
+
+    // Adapter interface
+    void DDFVersionL( CBufBase& aDDFVersion );
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+    void AddLeafObjectL( const TDesC8& aURI,
+                         const TDesC8& aParentLUID, 
+                         const TDesC8& aObject, 
+                         const TDesC8& aType, 
+                         const TInt aStatusRef );  
+    void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID, 
+                            const TDesC8& aObject, 
+                            const TDesC8& aType, 
+                            const TInt aStatusRef );
+    void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            RWriteStream*& aStream, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+    void DeleteObjectL( const TDesC8& aURI, 
+                        const TDesC8& aLUID, 
+                        const TInt aStatusRef ); 
+    void FetchLeafObjectL( const TDesC8& aURI, 
+                           const TDesC8& aLUID, 
+                           const TDesC8& aType, 
+                           const TInt aResultsRef, 
+                           const TInt aStatusRef );
+    void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                               const TDesC8& aLUID,
+                               const TDesC8& aType, 
+                               TInt aResultsRef,
+                               TInt aStatusRef );
+    void ChildURIListL( const TDesC8& aURI, 
+                        const TDesC8& aLUID, 
+                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
+                        const TInt aResultsRef, 
+                        const TInt aStatusRef );  
+    void AddNodeObjectL( const TDesC8& aURI, 
+                         const TDesC8& aParentLUID, 
+                         const TInt aStatusRef );
+    void ExecuteCommandL( const TDesC8& aURI, 
+                          const TDesC8& aLUID,
+                          const TDesC8& aArgument, 
+                          const TDesC8& aType,
+                          TInt aStatusRef );
+    void ExecuteCommandL( const TDesC8& aURI, 
+                          const TDesC8& aLUID,
+                          RWriteStream*& aStream,
+                          const TDesC8& aType, 
+                          TInt aStatusRef );
+    void CopyCommandL( const TDesC8& aTargetURI,
+                       const TDesC8& aTargetLUID, 
+                       const TDesC8& aSourceURI,
+                       const TDesC8& aSourceLUID, 
+                       const TDesC8& aType,
+                       TInt aStatusRef );
+    void StartAtomicL();
+    void CommitAtomicL();
+    void RollbackAtomicL();
+    TBool StreamingSupport( TInt& aItemSize );
+    void StreamCommittedL();                      
+    void CompleteOutstandingCmdsL();
+
+private:
+    void ConstructL();
+    CNSmlInternetAdapter( TAny* aEcomArguments );
+    TDesC8& SetIntObjectLC( const TInt& aObject );
+    TInt    SetField( const TDesC8& aSource );
+    TInt GetIntObject8( const TDesC8& aObject );
+    TInt IntLUID( const TDesC8& aLUID );
+
+    void AddNodeBufferL( const TDesC8& aURI, 
+                         const TDesC8& aParentLUID, 
+                         const TInt aStatusRef,
+                         const TBool aDontAppend,
+                         const TBool aWlan = EFalse );
+    
+    void AddLeafBufferL( const TDesC8& aURI,
+                         const TDesC8& aParentLUID, 
+                         const TDesC8& aObject, 
+                         const TDesC8& aType, 
+                         const TInt aStatusRef,
+                         const TBool aWlan = EFalse );
+    
+    CSmlDmAdapter::TError FetchLeafObjectL( const TDesC8& aURI, 
+                                            const TDesC8& aLUID,
+                                            const TDesC8& aType,
+                                            CBufBase& aObject); 
+    TPtrC8 LastURISeg(const TDesC8& aURI);
+    TPtrC8 FirstURISeg(const TDesC8& aURI);
+    TPtrC8 GetDynamicAPNodeUri( const TDesC8& aURI );
+    void ExecuteBufferL(const TDesC8& aURI, const TBool aCompleting = EFalse);
+    TPtrC8 GetAddURISeg(const TDesC8& aURI,const TDesC8& aName);
+    
+    CNSmlInternetAdapter::TNSmlAPFieldType   GetAPFieldType( const TDesC8& aURI ) const;
+    TBool GetAPField( TPtrC& aTableName, TPtrC& aColumn ) const;
+    TBool NotValidStrLenght( const TDesC& aSource );
+
+    TDesC8&  ConvertTo8LC( const TDesC& aSource );
+    TDesC16& ConvertTo16LC( const TDesC8& aSource );
+
+    TInt InitializeGPRSL( CCommsDbTableView* aTable );
+    TInt InitializeProxyL( CCommsDbTableView* aTable );
+
+    TInt InitializeWAPIAPL( CCommsDbTableView* aTable, const TDesC8& aName );
+    TInt InitializeWAPL( CCommsDbTableView* aTable );
+    TInt InitializeLANServiceL( CCommsDbTableView* aTable );
+    TInt InitializeVPNServiceL( CCommsDbTableView* aTable );
+    TBool IsValidNameL(const TDesC8& aName);
+    TBool IsValidIPv4AddressL(const TDesC8& aNapAddr);
+    void  NextAPNameL(const TDesC8& aName);
+    
+    TUint32 GetIAPSeamlessnessL(TUint32 aId);
+    TUint32 GetIAPMetaDataL(TUint32 aId);
+    void SetIAPSeamlessnessL(TUint32 apMetaID,TUint32 aSeam,TInt aStatusRef);
+    void SetIAPMetaDataL(TUint32 apMetaID,TUint32 aMeta,TInt aStatusRef);
+    
+    TBool CheckEnforcementL();
+    TBool CheckWLANEnforcementL();
+    TInt UnprotectWLANAPItemL(TUint32 aId);
+    TInt DoProtectWAPTablesL(TBool aProtect);
+    void DoLockIAPTablesL(TBool aLock);
+
+    TBool IsIAPRecordLockedL(TUint32 aRecord);
+    TInt DoProtectIAPRecordL(TUint32 aRecord,TBool aProtect);
+    TBool IsProxyRecordLockedL(TUint32 aRecord);
+    TInt DoProtectProxyRecordL(TUint32 aRecord,TBool aProtect);
+    TBool IsServiceRecordLockedL(TUint32 aRecord);
+    TInt DoProtectServiceRecordL(TUint32 aRecord,TBool aProtect);
+	TBool IsWAPAccessPointRecordLockedL(TUint32 aRecord);
+	TInt DoProtectWAPAccessRecordL(TUint32 aRecord,TBool aProtect);
+
+    TBool IsWLANfield( const TDesC8& aURI );
+    TBool IsWlanL( const TDesC8& aURI );
+    TBool GetLanBearerL( TUint32& aId );
+
+    void SaveIAPDataL(const TDesC8& aURI);
+    TBool GetModemBearerL(TUint32& aId);
+    TBool IsInsertAllowedL();
+    TUint32 GetMaxIdL();
+    TBool GetProxyIdL(const TDesC8& aURI);
+
+    TBool APExistsL(TUint32 aId);
+    TBool NAPDefExistsL( TUint32 aId );
+    TBool PxExistsL(TUint32 aId);
+    TBool WapAPExistsL(TUint32 aId);
+    TBool NetworkExistsL(TUint32 aId);
+    TBool NetworkNameExistsL(TUint32& aId, const TDesC8& aObject);
+    TBool AddNetworkL(TUint32& aId, const TDesC8& aObject);
+
+    TBool DeleteAPL(TUint32 aId);
+    TBool DeleteNAPDefL(TUint32 aId);
+    TBool DeleteProxyL(TUint32 aId);
+    TBool DeleteWapAPL(TUint32 aId);
+
+    TUint32 GetAPIdFromURIL(const TDesC8& aURI);
+    void IsWapPort( const TDesC8& aObject );
+    void FillNodeInfoL( MSmlDmDDFObject& aNode,
+                        TSmlDmAccessTypes aAccTypes,
+                        MSmlDmDDFObject::TOccurence aOccurrence, 
+                        MSmlDmDDFObject::TScope aScope, 
+                        MSmlDmDDFObject::TDFFormat aFormat,
+                        const TDesC8& aDescription);
+
+    TInt UpdateIAPnameL( TUint32 aId, const TDesC8& aObject );
+    TUint32 GetLocationL();
+
+    TBool InitializeDNSParamsFromBuffL( const TPtrC8 aParentUri, TInt& aDnsPri );
+    TInt DnsToLuid( const UriUtils::TUriHostType aType, 
+                    const TInt aPriority ) const;
+    TInt LuidToDns( UriUtils::TUriHostType& aType, TInt& aPriority, 
+                    const TInt aLuid ) const;
+    TPtrC8 RemoveLastSeg(const TDesC8& aURI) const;
+    
+    void ClearBuffer( CArrayFixFlat<TNSmlAPAddElement>* aBuffer );
+    void LingerValueL( const TDesC8& aObject );
+    void AddLingerL( const TInt aIapId, const TInt aLingerInterval);
+    void UpdateLingerL( const TInt aIapId, const TInt aLingerInterval );
+    void GetLingerL( const TInt aIapId, TInt& aLingerInterval );
+    void DeleteLingerL( const TInt aIapId );        
+    TBool Notalpha(const TDesC& aValue);  
+    TUint32 ConstructTreeL(const TDesC8& aURI);
+    TBool IsAPUriFormatMatchPredefined(const TDesC8 & aURI);
+
+    
+
+private:
+    MSmlDmCallback* iCallBack;
+
+    CNSmlWLanAdapter* iWlanAdapter;
+
+    TInt iLUID;
+    TInt iParentLUID;
+    TInt iObject;
+    TBool iWapPort;
+    TInt iDirection;
+	TBool iStaleMapUpdate;
+    HBufC8* iField;     
+    TNSmlAPLeafType   iLeafType;
+
+    TBuf8<KCommsDbSvrMaxFieldLength> iWAPAccessPoint;
+    TUint32 iWapId;
+    TBuf<KCommsDbSvrMaxFieldLength> iWapBearer;
+    TBuf8<KCommsDbSvrMaxFieldLength> iWapName;
+    TBuf8<KCommsDbSvrMaxFieldLength> iWapUserName;
+    TBuf8<KCommsDbSvrMaxFieldLength> iWapPassword;
+
+    CArrayFixFlat<TNSmlAPBufferElement> *iBuffer;
+    TBool i3GPPPS;
+
+    private:    // data
+        CCommsDatabase* iDatabase;
+        
+        TBool iIAPExists;
+        
+        TInt iDnsIpv4Pri; // 1 or 2 
+        TInt iDnsIpv6Pri;
+        TInt iExecutionIndex;
+        TBool iExecutingBuffer;
+        TBool iDnsUpdate;
+        
+        TBuf8<KCommsDbSvrMaxFieldLength>        iIAPName;
+        
+        TUint32 iIAPId;
+        
+        TUint32 iISPId;
+
+        TUint32 iProxyId;
+        TUint32 iProxyISP;
+
+        TBuf<KCommsDbSvrMaxFieldLength> iProxyServiceType;
+        TBuf8<KCommsDbSvrMaxFieldLength> iProxyServerName;
+        
+        HBufC8* iPrevURI;
+        TInt   iPrevLUID;
+
+        TBuf<KCommsDbSvrMaxFieldLength> iBearer;
+        
+        TUint32 iBearerType;
+        TInt iNetworkId;
+        TInt iLingerValue;
+        TBool iLingerFlag;
+        TBool iTransactionCommitted;
+        TBool iWAPRelock;
+        RArray<TPtrC> iLockTableList;
+        
+        TBool iWlanSupported;
+    };
+
+
+
+#endif // __NSMLINTERNETADAPTER_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/inc/NSmlWLanAdapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,365 @@
+/*
+* Copyright (c) 2002 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:   Wlan adapter
+*
+*/
+
+
+
+#ifndef __NSMLWLANADAPTER_H__
+#define __NSMLWLANADAPTER_H__
+
+
+// -----------------------------------------------------------------------------------------------
+// Includes
+// -----------------------------------------------------------------------------------------------
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdat_partner.h>
+#endif
+#include <utf.h>
+#include <commdb.h>
+#include <EapSettings.h>
+#include "smldmadapter.h"
+#include "nsmlconstants.h"
+#include "NSmlWlanSettings.h"
+
+
+// -----------------------------------------------------------------------------------------------
+// Constants
+// -----------------------------------------------------------------------------------------------
+const TInt KNSmlWepKeyGranularity = 4;
+const TInt KNSmlMaxURISegLen = 32;
+const TInt KExpandedEAPIdLength = 8;
+const TInt KNsmlSubjectKeyIdLength = 255;
+
+_LIT8( KNSmlWLanAdapterDDFversion, "1.0" );
+_LIT16( KNSmlWLanServiceTable, "WLANServiceTable" );
+_LIT8( KNSmlWLanId, "Id" );
+_LIT8( KNSmlWLanName, "Name" );
+_LIT8( KNSmlWLanHidden, "Hidden" );
+_LIT8( KNSmlWLanReadOnly, "ReadOnly" );
+_LIT8( KNSmlWLanServiceId, "ServiceID" );
+_LIT8( KNSmlWLanNetworkMode, "NetworkMode" );
+_LIT8( KNSmlWLanConnectionMode, "WlanConnectionMode" );
+_LIT8( KNSmlWLanSsid, "SSID" );
+_LIT8( KNSmlWLanUsedSsid, "UsedSSID" );
+_LIT8( KNSmlWLanSsidHidden, "SSIDHidden" );
+_LIT8( KNSmlWLanUseWPAPSK, "UseWPAPSK" );
+_LIT8( KNSmlWLanEnablePSK, "EnablePSK" );
+_LIT8( KNSmlWLanWepKey1, "WEPKey1InHex" );
+_LIT8( KNSmlWLanWepKey2, "WEPKey2InHex" );
+_LIT8( KNSmlWLanWepKey3, "WEPKey3InHex" );
+_LIT8( KNSmlWLanWepKey4, "WEPKey4InHex" );
+_LIT8( KNSmlWLanWepIndex, "WEPKeyIndex" );       
+_LIT8( KNSmlWLanWepKey, "WEPKey" );      
+_LIT8( KNSmlWLanSecurityMode, "SecurityMode" );
+_LIT8( KNSmlWLanWpaAuthMode, "WPAAuthMode" );
+_LIT8( KNSmlWLanWpaPreSharedKey, "WPAPreSharedKey" );
+_LIT8( KNSmlWLanEapList, "WLANEAPList" );
+_LIT8( KNSmlWLanAuthMode, "WEPAuthMode" );
+_LIT8( KNSmlWLanWepKeyId, "WEPKeyID" );
+_LIT8( KNSmlWLanWepKeyData, "Data" );
+_LIT8( KNSmlWLanNodeName, "WLAN" );
+
+_LIT8( KNSmlEmpty, "" );
+#define  KNSmlWLanDefaultSSID _S("Net1")
+
+_LIT8( KNSmlWLan, "/WLAN" );
+_LIT8( KNSmlNAPDefWlanNode,"Name/NAPID/Bearer/IPAddrFromServer/IfNetworks/NAPAddr/NAPAddrTy/IPDNSAddrFromServer/DNSAddr/DefGW/NetworkMask/Networks/IAPService");
+
+_LIT8( KNSmlWLanListOfLeafs, "SSID/UsedSSID/SSIDHidden/NetworkMode/SecurityMode/WPAPreSharedKey/UseWPAPSK/WEPKey/WEPKeyIndex/WLANEAPList/WEPAuthMode/EAP/SecondarySSID" );
+
+_LIT8( KNSmlWLanListOfSecondaryLeafs, "SSID/UsedSSID" );
+_LIT8( KNSmlWLanListOfWepKeys, "1/2/3/4" );
+_LIT8( KNSmlWLanListOfWepKeyLeafs, "WEPKeyID/Data" );
+_LIT8( KNSmlWLanAllowUnsecure8, "allow unsecure" );
+_LIT8( KNSmlWLanWep8, "WEP" );
+_LIT8( KNSmlWLan8021x8, "802.1X" );
+_LIT8( KNSmlWLanWpa8, "WPA" );
+_LIT8( KNSmlWLanWpa28, "WPA2" );
+_LIT8( KNSmlWLanWpaPreSharedKey8, "WPA pre-shared key" );
+_LIT8( KNSmlWLanAdHoc8, "ADHOC" );
+_LIT8( KNSmlWLanInfrastructure8, "Infrastructure" );
+_LIT8( KNSmlMimeType,           "text/plain" );
+
+
+#ifdef FF_WLAN_EXTENSIONS
+_LIT8( KNSmlWLanListOfEAPLeafs, "EAPType/Username/Password/Realm/UsePseudonym/VerifyCertRealm/RequireClientAuthentication/SessionValidityTime/CipherSuite/AllowPEAPv0/AllowPEAPv1/AllowPEAPv2/Certificate/AuthProvMode/UnauthProvMode/PACGroupRef/WarnADHPNoPAC/WarnADHPNoMatchPAC/WarnNotDefaultSrv" );
+#else
+_LIT8( KNSmlWLanListOfEAPLeafs, "EAPType/Username/Password/Realm/UsePseudonym/VerifyCertRealm/RequireClientAuthentication/SessionValidityTime/CipherSuite/AllowPEAPv0/AllowPEAPv1/AllowPEAPv2/Certificate" );
+#endif
+
+_LIT8( KNSmlWLanListOfCertificateLeafs, "IssuerName/SubjectName/CertType/SerialNumber/SubjectKeyId/Fingerprint" );
+
+_LIT8( KNSmlWLanSecSsid, "SecondarySSID" );
+_LIT8( KNSmlWLanEap, "EAP" );
+_LIT8( KNSmlWLanEapType, "EAPType" );
+_LIT8( KNSmlWLanUsername, "Username" );
+_LIT8( KNSmlWLanPassword, "Password" );
+_LIT8( KNSmlWLanRealm, "Realm" );
+_LIT8( KNSmlWLanUsePseudonym, "UsePseudonym" );
+_LIT8( KNSmlWLanEncapsulation, "Encapsulation" );
+_LIT8( KNSmlWLanVerifyCertRealm, "VerifyCertRealm" );
+_LIT8( KNSmlWLanRequireClientAuthentication, "RequireClientAuthentication" );
+_LIT8( KNSmlWLanSessionValidityTime, "SessionValidityTime" );
+_LIT8( KNSmlWLanCipherSuite, "CipherSuite" );
+_LIT8( KNSmlWLanAllowPEAPv0, "AllowPEAPv0" );
+_LIT8( KNSmlWLanAllowPEAPv1, "AllowPEAPv1" );
+_LIT8( KNSmlWLanAllowPEAPv2, "AllowPEAPv2" );
+#ifdef FF_WLAN_EXTENSIONS 
+_LIT8( KNSmlWLanAuthProvMode, "AuthProvMode" );
+_LIT8( KNSmlWLanUnauthProvMode, "UnauthProvMode" );
+_LIT8( KNSmlWLanPACGroupRef, "PACGroupRef" );
+_LIT8( KNSmlWLanWarnADHPNoPAC, "WarnADHPNoPAC" );
+_LIT8( KNSmlWLanWarnADHPNoMatchPAC, "WarnADHPNoMatchPAC" );
+_LIT8( KNSmlWLanWarnNotDefaultSrv, "WarnNotDefaultSrv" );
+#endif
+_LIT8( KNSmlWLanCertificate, "Certificate" );
+_LIT8( KNSmlWLanIssuerName, "IssuerName" );
+_LIT8( KNSmlWLanSubjectName, "SubjectName" );
+_LIT8( KNSmlWLanCertType, "CertType" );
+_LIT8( KNSmlWLanSerialNumber, "SerialNumber" );
+_LIT8( KNSmlWLanSubjectKeyId, "SubjectKeyId" );
+_LIT8( KNSmlWLanFingerprint, "Fingerprint" );
+
+_LIT8(KTrue, "True");
+_LIT8(KFalse, "False");
+_LIT8(KTtrue, "true");
+_LIT8(KFfalse, "false");
+_LIT8(KSlash, "/");
+_LIT8(KDash, "-");
+_LIT8(KNSmlWLanEapId, "EAPId" );
+
+_LIT8(KSuitesDefault, "-010,-022,-019,-047,-050,-051,-004,-005");
+
+const TUint RSA_3DES_SHA = 10;
+const TUint DHE_RSA_3DES_SHA = 22;
+const TUint DHE_DSS_3DES_SHA = 19;
+const TUint RSA_AES_SHA = 47; // ?
+const TUint DHE_RSA_AES_SHA = 50; // ?
+const TUint DHE_DSS_AES_SHA = 51; // ?
+const TUint RSA_RC4_MD5 = 4;
+const TUint RSA_RC4_SHA = 5;
+const TUint NUMBER_OF_CIPHERSUITES = 8;
+
+_LIT8(KEAPSIM, "EAP-SIM");
+_LIT8(KEAPAKA, "EAP-AKA");
+_LIT8(KEAPTLS, "EAP-TLS");
+_LIT8(KEAPPEAP, "EAP-PEAP");
+_LIT8(KEAPTTLS, "EAP-TTLS");
+_LIT8(KEAPLEAP, "EAP-LEAP");
+_LIT8(KEAPMSCHAPV2, "EAP-MSCHAPV2");
+_LIT8(KMSCHAPV2, "MSCHAPV2");
+_LIT8(KEAPGTC, "EAP-GTC");
+_LIT8(KEAPFAST, "EAP-FAST");
+_LIT8(KEAPTTLSPAP, "EAP-TTLSPAP");
+
+
+const TUint8 KEapNoneId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+const TUint8 KEapTlsTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d};
+const TUint8 KEapGtcTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06};
+const TUint8 KEapLeapTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11};
+const TUint8 KEapSimTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12};
+const TUint8 KEapTtlsTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15};
+const TUint8 KEapAkaTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17};
+const TUint8 KEapPeapTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19};
+const TUint8 KEapMschapv2TypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A};
+const TUint8 KEapSecuridTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20};
+const TUint8 KEapFastTypeId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B};
+const TUint8 KMschapv2TypeId[] = {0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x63};
+const TUint8 KTtlspapTypeId[] = {0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62};
+
+
+
+
+// -----------------------------------------------------------------------------------------------
+// Structures
+// -----------------------------------------------------------------------------------------------
+struct TNSmlWepKeyBufferElement
+        {
+        HBufC8* iUri;
+        HBufC8* iData;
+        TInt iWepKeyId;
+        TInt iIdStatusRef;
+        //TInt iUseWPAPSK;
+        TInt iDataStatusRef;
+        TInt iNodeStatusRef;
+        TInt iLengthStatusRef;
+        TBool iExecuted;
+        TBool iDataSet;
+        TInt  iLuid;
+        };
+
+ struct TNSmlSecondarySSIDBufferElement
+    {
+     HBufC8* iUri;
+     TBuf<KMaxTextLength>   ScannedId;
+     TBuf<KMaxTextLength>   UsedId;
+     TInt  wlanLuid;
+     TBool iExecuted;
+    };
+
+struct TNSmlEAPBufferElement
+	{
+		EAPSettings* iEAPSettings;
+        EAPSettings::TEapType iEncapsulatingEAPId;
+        RArray<TInt> iStatusRefArray;
+        TInt iWLANServiceId;
+	};
+
+// -----------------------------------------------------------------------------------------------
+// Enumerations
+// -----------------------------------------------------------------------------------------------
+enum TConnectionMode
+        {
+        EAdhoc = 0,
+        EInfrastructure = 1
+        };
+
+enum TWLanSecurityMode
+        {
+        EAllowUnsecure = 1,
+        EWep = 2,
+        EWlan8021x = 4,
+        EWpa = 8,
+        EWpa2 = 16   
+        };
+
+enum TWepAuthenticationMode
+        {
+        EOpen = 0,
+        EShared = 1
+        };
+        
+// ------------------------------------------------------------------------------------------------
+// CNSmlWLanAdapter 
+// ------------------------------------------------------------------------------------------------
+class CNSmlWLanAdapter : public CSmlDmAdapter
+        {
+public:
+        static CNSmlWLanAdapter* NewL( MSmlDmCallback* aDmCallback, CCommsDatabase& aDatabase );
+        static CNSmlWLanAdapter* NewLC( MSmlDmCallback* aDmCallback, CCommsDatabase& aDatabase );
+        void ConstructL( CCommsDatabase& aDatabase );
+        virtual ~CNSmlWLanAdapter();
+
+// Adapter interface
+        void DDFVersionL( CBufBase& aDDFVersion );
+        void DDFStructureL( MSmlDmDDFObject& aDDF );
+        void AddLeafObjectL( const TDesC8& aURI,
+                             const TDesC8& aParentLUID, 
+                             const TDesC8& aObject, 
+                             const TDesC8& aType, 
+                             const TInt aStatusRef ); 
+        void UpdateLeafObjectL( const TDesC8& aURI, 
+                                const TDesC8& aLUID, 
+                            const TDesC8& aObject, 
+                            const TDesC8& aType, 
+                            const TInt aStatusRef );
+       void UpdateLeafObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID,
+                            RWriteStream*& aStream, 
+                            const TDesC8& aType,
+                            TInt aStatusRef );
+        void DeleteObjectL( const TDesC8& aURI, 
+                            const TDesC8& aLUID, 
+                            const TInt aStatusRef ); 
+        void FetchLeafObjectL( const TDesC8& aURI, 
+                               const TDesC8& aLUID, 
+                               const TDesC8& aType, 
+                               const TInt aResultsRef, 
+                               const TInt aStatusRef ); 
+        void FetchLeafObjectSizeL( const TDesC8& aURI, 
+                               const TDesC8& aLUID,
+                               const TDesC8& aType, 
+                               TInt aResultsRef,
+                               TInt aStatusRef );
+
+        void ChildURIListL( const TDesC8& aURI, 
+                            const TDesC8& aLUID, 
+                            const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
+                            const TInt aResultsRef, 
+                            const TInt aStatusRef ); 
+        void AddNodeObjectL( const TDesC8& aURI, 
+                             const TDesC8& aParentLUID, 
+                             const TInt aStatusRef );
+        void ExecuteCommandL( const TDesC8& aURI, 
+                              const TDesC8& aLUID,
+                              const TDesC8& aArgument, 
+                              const TDesC8& aType,
+                              TInt aStatusRef );
+        void ExecuteCommandL( const TDesC8& aURI, 
+                              const TDesC8& aLUID,
+                              RWriteStream*& aStream, 
+                              const TDesC8& aType,
+                              TInt aStatusRef );
+        void CopyCommandL( const TDesC8& aTargetURI, 
+                           const TDesC8& aTargetLUID, 
+                           const TDesC8& aSourceURI,
+                           const TDesC8& aSourceLUID, 
+                           const TDesC8& aType,
+                           TInt aStatusRef );
+        void StartAtomicL();
+        void CommitAtomicL();
+        void RollbackAtomicL();
+        TBool StreamingSupport( TInt& aItemSize );
+        void StreamCommittedL();
+        void CompleteOutstandingCmdsL();
+        CSmlDmAdapter::TError FetchLeafObjectL( const TDesC8& aURI,
+                                                const TDesC8& aLUID,
+                                                const TDesC8& aType,
+                                                CBufBase& aObject );
+
+private:
+        CNSmlWLanAdapter(TAny* aEcomArguments);
+        void FillNodeInfoL( MSmlDmDDFObject& aNode,
+                            TSmlDmAccessTypes aAccTypes,
+                            MSmlDmDDFObject::TOccurence aOccurrence, 
+                            MSmlDmDDFObject::TScope aScope, 
+                            MSmlDmDDFObject::TDFFormat aFormat,
+                            const TDesC8& aDescription );
+        HBufC* IntToDesLC(const TInt aLuid);
+        HBufC8* IntToDes8LC(const TInt aLuid);
+        TInt DesToInt(const TDesC8& aLuid);
+        TInt GetIdFromLuid( const TDesC8& aLuid );        
+        TUint32 GetSecSSIDFromUriL(const TDesC8& aUri );
+        TInt GetEAPIdFromUri( const TDesC8& aUri );
+        TInt GetCertificateIdFromUri( const TDesC8& aUri );
+        TInt GetWepKeyIdFromLuid( const TDesC8& aLuid );
+        TInt GetWepKeyIdFromUri( const TDesC8& aUri );
+        TInt NumOfUriSegs( const TDesC8& aUri );
+        TPtrC8 GetLastUriSeg(const TDesC8& aURI);
+        TPtrC8 RemoveLastUriSeg(const TDesC8& aURI);
+        void ExecuteBufferL( TBool aFinal = EFalse );
+        TDesC8&  ConvertTo8LC( const TDesC& aSource );
+        TDesC16& ConvertTo16LC( const TDesC8& aSource );        
+        void DesToBufferL(CBufBase& aTo, const TDesC& aFrom);
+        void FillCipherSuiteBufferL(CBufBase& aBuffer);      
+        void FillCipherSuitesL(const TDesC8& aObject, const TInt aLuid);
+        void ConvertEAPStringToIds( const TDesC8& aEAPString, TDes8& aExpandedId, EAPSettings::TEapType& aId);
+        TInt GetServiceIdFromUriL( const TDesC8& aURI);		
+        TInt GetEncapsEAPIdFromUri( const TDesC8& aUri );
+        void ResetEAPStructL();
+        void DeleteEAPStructL();
+
+        MSmlDmCallback* iCallBack;
+        CWlanSettings* iWlanSettings;
+        CArrayFixFlat<TNSmlWepKeyBufferElement> *iBuffer;
+        TWlanSettings *iSettings;
+        EAPSettings* iEAPSettings;
+        RPointerArray<TNSmlSecondarySSIDBufferElement>  iSecondaryBuffer;
+        RPointerArray<TNSmlEAPBufferElement>  iEAPBuffer;
+
+        };
+
+#endif __NSMLWLANADAPTER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/inc/NSmlWlanSettings.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2002 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:   Wlan Adapter commsDB handler
+*
+*/
+
+
+
+#ifndef __NSMLWLANSETTINGS_H__
+#define __NSMLWLANSETTINGS_H__
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdat_partner.h>
+#endif
+#include <commdb.h>
+#include <commsdattypesv1_1.h>
+#include <EapType.h>
+
+const TInt KMaxPSKLength = 63;
+const TInt KMinPSKLength = 8;
+
+// ==========================================================================
+// Class forwards
+// ==========================================================================
+//
+class CWlanSettings;
+
+class TWlanSettings
+    {
+public:    
+    TBuf<KMaxTextLength>     Name;
+    TUint32                  Id;
+    TUint32                  ServiceID;
+    TUint32                  ConnectionMode;     // Infrastructure / adhoc
+    TBuf<KMaxTextLength>     SSID;           
+    TBuf8<KMaxTextLength>    WepKey1; 
+    TBuf8<KMaxTextLength>    WepKey2;
+    TBuf8<KMaxTextLength>    WepKey3;
+    TBuf8<KMaxTextLength>    WepKey4;
+    TUint32                  WepIndex;
+    TUint32                  SecurityMode;   // SecurityMode (Allow unsecure, wep, 802.1xs, wpa) enum EWlanSecurityMode
+    TUint32                  WPAMode;        // enum EWpaMode
+    TUint32                  UseWPAPSK;      // CR ID: TMVI-5Y49AS
+    TBuf8<KMaxPSKLength>    WPAPreSharedKey;  
+    TUint32				     AuthMode;
+    TBuf<KMaxTextLength>     UsedSSID;           
+    TUint32                  ScanSSID;           
+    TBuf<KMaxLongTextLength> EapList;
+    TBool                       SecondarySSIDsExisting;
+//    TBuf<KMaxTextLength>        SecondarySSID;
+//    TBuf<KMaxTextLength>        UsedSecondarySSID;
+
+    };
+            
+class TSecondarySSID
+    {
+public:
+    TUint32                 Id;
+    TBuf<KMaxTextLength>   ScannedId;
+    TBuf<KMaxTextLength>   UsedId;
+    };    
+
+
+// -----------------------------------------------------------------------------------------------
+// Defines
+// -----------------------------------------------------------------------------------------------
+
+class CWlanSettings : public CBase
+    {
+public:
+    static CWlanSettings* NewL( CCommsDatabase& aDatabase );
+    void ConstructL( );
+    ~CWlanSettings( );
+
+    TInt GetWlanSettings( TUint32 aLuid, TWlanSettings& aWlanSettings );
+    TInt DeleteWlanSettings( TUint32 aLuid );
+    TInt WriteWlanSettings( TWlanSettings& aWlanSettings );
+    void ConnectToDatabaseL( );
+    TInt RecordExists( TUint32 aLuid );
+    TInt PerformLockWLANTablesL(TBool aProtect);
+    TBool CheckEnforcementL();
+    TBool CheckAPEnforcementL();
+    TBool iWLANRelock;
+    
+    TInt GetEAPSettings( const TInt aId, const TInt aEapType, const TInt aTunnelingType, EAPSettings& aEapSettings );
+    TInt DeleteEAPSettings( TInt aId , TInt aEapType  );
+    void DeleteWlanEapSettingsL( TInt aWlanId );
+    TInt DeleteSecondarySSIDsL( TUint32 aWLANId );
+    TInt DeleteOneSecondarySSIDL( TUint32 aWLANId , TUint32 asecId);
+    TInt WriteEAPSettings( EAPSettings& aEapSettings);
+    TInt WriteSecondarySSIDL( TUint32 aWlanID, TSecondarySSID& aSettings, TBool aNew );
+    void GetSecondarySSIDListL(TUint32 aLuid, RArray<TSecondarySSID>& aSecondarySSIDs);
+    void GetEAPInterfaceL(const TInt aId, const TInt aTunnelingType, const TInt aType);
+    TInt InstalledEAPsL(CBufBase& aEAPList);
+	
+
+private:
+
+    CWlanSettings( CCommsDatabase& aDatabase );
+    TInt GoToRecord( TUint32 aId );
+    void GetDataFromRecordL( TWlanSettings* aWlanSettings );
+    void WriteDataToRecordL( TWlanSettings* aWlanSettings );
+    void InitialiseRecordL( );
+    void SetSecondaryViewToRecordL( TUint32 aId );
+
+    TDesC8&  ConvertTo8LC( const TDesC& aSource );
+    TDesC16& ConvertTo16LC( const TDesC8& aSource );
+
+    CCommsDatabase& iDatabase;
+    CCommsDbTableView* iTableView;
+    CCommsDbTableView* iSecondaryView;
+    CEapType* iEapType;
+    TUint32 iServiceID;
+    TBool iExpandedEAPTypeFieldsUsed;
+    };
+
+
+#endif __NSMLWLANSETTINGS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/rom/nsmlinternetadapter.iby	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,36 @@
+/*
+* 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:   Image description file for project InternetAdapter
+*
+*/
+
+
+
+REM SyncML Device Management internet adapter
+
+#include <bldvariant.hrh>
+
+#ifndef __NSMLINTERNETADAPTER_IBY__
+#define __NSMLINTERNETADAPTER_IBY__
+
+#ifdef __SYNCML_DM // nothing should be installed from this .iby file if __SYNCML_DM feature is not selected
+#ifndef FF_DM_CONNMO_ADAPTER // nothing should be installed from this .iby file if this flag is specified.
+														 // ConnMO is used in that case for access point provisioning.
+
+ECOM_PLUGIN(nsmlinternetadapter.dll,nsmlinternetadapter.rsc)
+
+#endif // FF_DM_CONNMO_ADAPTER
+#endif //__SYNCML_DM
+
+#endif //__NSMLINTERNETADAPTER_IBY__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/src/NSmlInternetAdapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,9272 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Internet-settings 
+ *
+*/
+
+
+#include <commdb.h>
+#include <cdbstore.h>
+#include <cdbcols.h>             // CommsDB columname defs
+#include <implementationproxy.h> // For TImplementationProxy definition
+#include <cdbpreftable.h>
+#include <etelpckt.h>   // ISP enumerations
+#include <etelmm.h>     // GPRS ProtocolType
+#include <nifvar.h>     // CallbackType
+#include <etelqos.h>    // GPRS enumeration
+#include <wappdef.h>    // WAP  enumeration
+#include <sysutil.h>    // OOD checking
+#include <uriutils.h>   // ipv4 + ipv6 checking
+#include <featmgr.h>
+#include "NSmlInternetAdapter.h"
+#include "NSmlWLanAdapter.h"
+#include "nsmldebug.h"
+#include "nsmldmtreedbclient.h"
+#include <comms-infras/commdb/protection/protectdb.h>
+#include <utf.h>
+
+
+#include <metadatabase.h>
+#include <cmmanagerext.h>
+#include <cmconnectionmethoddef.h>
+#include <cmconnectionmethodext.h>
+#include  <cmpluginbaseeng.h>
+#include <centralrepository.h>
+#include <pdpcontextmanagerinternalcrkeys.h>
+
+const TUint KNSmlInternetAdapterImplUid = 0x101F6DE2;
+
+const TUint KIapColumn        = 0x00000100;
+const TUint KLingerColumn     = 0x00000200;
+const TUint KColumnMask       = 0xFFFFFF00;
+const TUint KRowMask          = 0x000000FF;
+
+
+#include <SettingEnforcementInfo.h> // VSettingEnforcementInfo
+
+class CNSmlWLanAdapter;
+
+_LIT( KDaemonManagerName, "NetCfgExtnDhcp" );
+_LIT( KConfigDaemonName, "!DhcpServ" );
+
+#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 TInt KBeginTransRetryDelay = 1000000; // Delay for comms db begintransaction retry (microseconds)
+const  TInt KBeginTransRetryCount = 7;      // Maximum number of retries
+//-----------------------------------------------------------------------------
+// CSmlInternetAdapter* CSmlInternetAdapter::NewL( )
+//-----------------------------------------------------------------------------
+
+CNSmlInternetAdapter* CNSmlInternetAdapter::NewL(MSmlDmCallback* aDmCallback )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::NewL(): begin");
+
+    CNSmlInternetAdapter* self = NewLC(aDmCallback);
+    CleanupStack::Pop();
+
+    _DBG_FILE("CNSmlInternetAdapter::NewL(): end");
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter* CNSmlInternetAdapter::NewLC( )
+//------------------------------------------------------------------------------
+CNSmlInternetAdapter* CNSmlInternetAdapter::NewLC(MSmlDmCallback* aDmCallback )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::NewLC(): begin");
+    CNSmlInternetAdapter* self = new (ELeave) CNSmlInternetAdapter(aDmCallback);
+    CleanupStack::PushL(self);
+
+    self->iCallBack = aDmCallback;
+    self->ConstructL();
+
+    _DBG_FILE("CNSmlInternetAdapter::NewLC(): end");
+    return self;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::CNSmlInternetAdapter()
+//------------------------------------------------------------------------------
+CNSmlInternetAdapter::CNSmlInternetAdapter(TAny* aEcomArguments) 
+    : CSmlDmAdapter(aEcomArguments)
+    {
+    _DBG_FILE("CNSmlInternetAdapter::CNSmlInternetAdapter(): begin");
+    _DBG_FILE("CNSmlInternetAdapter::CNSmlInternetAdapter(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::~CNSmlInternetAdapter(TAny* aEcomArguments)
+//------------------------------------------------------------------------------
+CNSmlInternetAdapter::~CNSmlInternetAdapter()
+    {
+    _DBG_FILE("CNSmlInternetAdapter::~CNSmlInternetAdapter(): begin");
+
+    delete iField;
+
+    delete iPrevURI;
+
+    // Command buffer cleaning if leave happend
+    if (iBuffer)
+        {
+        for(TInt i=0;i<iBuffer->Count();i++)
+            {
+            delete iBuffer->At(i).iMappingName;
+            delete iBuffer->At(i).iName;
+
+            ClearBuffer( iBuffer->At(iExecutionIndex).iNodeBuf );
+            delete iBuffer->At(i).iNodeBuf;
+            
+            ClearBuffer( iBuffer->At(iExecutionIndex).iWlanNodeBuf );
+            delete iBuffer->At(i).iWlanNodeBuf;
+            }
+
+        iBuffer->Reset();
+        delete iBuffer;
+        }
+
+    if ( iWlanSupported )
+      {
+        delete iWlanAdapter; 
+        }
+
+    delete iDatabase;
+    FeatureManager::UnInitializeLib();
+    _DBG_FILE("CNSmlInternetAdapter::~CNSmlInternetAdapter(): end");
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::ConstructL()
+//      Second phase constructor.
+//=============================================
+void CNSmlInternetAdapter::ConstructL()
+    {
+   	FeatureManager::InitializeLibL();
+    iField    = HBufC8::NewL( KNSmlMaxURLLength );
+
+    iPrevURI  = HBufC8::NewL( KNSmlMaxURLLength );
+
+    iDatabase = CCommsDatabase::NewL();
+    // iDatabase->BeginTransaction(); //+++
+    iTransactionCommitted=ETrue;
+    i3GPPPS = EFalse;
+
+    iLeafType = EDMUnset; // Default for leaf handling
+
+    //  Reset identification data
+
+    iDirection = ECommDbConnectionDirectionUnknown;
+
+    //
+    //  Command buffering used for AddNode + AddLeaf
+    //
+    iBuffer = new (ELeave) CArrayFixFlat <TNSmlAPBufferElement> (KNSmlAPGranularity);
+  
+  // checks if Wlan feature is supported
+    iWlanSupported = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );
+
+  // WlanAdapter 
+    //  
+    if ( iWlanSupported )
+        {
+      iWlanAdapter = CNSmlWLanAdapter::NewL(iCallBack, *iDatabase); 
+        }
+
+    iNetworkId = KErrNotFound;
+    iLingerValue = NULL;
+  iLingerFlag = ETrue;
+    }
+
+//------------------------------------------------------------------------------
+// void CNSmlInternetAdapter::DDFVersionL()
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::DDFVersionL(CBufBase& aDDFVersion)
+    {
+    aDDFVersion.InsertL(0,KNSmlInternetAdapterDDFversion);
+    }
+//------------------------------------------------------------------------------
+//  void CNSmlInternetAdapter::DDFStructureL()
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::DDFStructureL(): begin");
+
+    //
+    // Set rest acceptable operations for data itself
+    //
+
+  TSmlDmAccessTypes aclTypesAddGetDel;
+  aclTypesAddGetDel.SetGet();
+    aclTypesAddGetDel.SetAdd();
+    aclTypesAddGetDel.SetDelete();
+    
+    TSmlDmAccessTypes aclTypesAddGet;
+    aclTypesAddGet.SetGet();
+    aclTypesAddGet.SetAdd();
+
+    TSmlDmAccessTypes aclTypesNoDelete;
+    aclTypesNoDelete.SetGet();
+    aclTypesNoDelete.SetReplace();
+    aclTypesNoDelete.SetAdd();
+
+    TSmlDmAccessTypes aclTypesNoGet;
+    aclTypesNoGet.SetReplace();
+    aclTypesNoGet.SetAdd();
+    aclTypesNoGet.SetDelete();
+    
+    TSmlDmAccessTypes aclTypesAddReplace;
+    aclTypesAddReplace.SetReplace();
+    aclTypesAddReplace.SetAdd();
+
+    TSmlDmAccessTypes aclTypesOnlyGet;
+    aclTypesOnlyGet.SetGet();
+
+    TSmlDmAccessTypes aclTypesAll;
+    aclTypesAll.SetGet();
+    aclTypesAll.SetReplace();
+    aclTypesAll.SetAdd();
+    aclTypesAll.SetDelete();
+
+    MSmlDmDDFObject* ddfRoot = &aDDF;
+    MSmlDmDDFObject& ddf = ddfRoot->AddChildObjectL(KNSmlDdfAP);
+
+    _LIT8(KDescription,"AP-Settings DDF description");
+    _LIT8(KDFTitle,"AP-settings title");
+    
+    FillNodeInfoL( ddf, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EPermanent, 
+                   MSmlDmDDFObject::ENode, 
+                   KDescription);
+                   
+    ddf.SetDFTitleL(KDFTitle);
+    ddf.SetDefaultValueL(KNullDesC8);
+
+    MSmlDmDDFObject& nApDDF = ddf.AddChildObjectGroupL(); // For AP/<X>
+
+    FillNodeInfoL( nApDDF, 
+                   aclTypesAll, 
+                   MSmlDmDDFObject::EZeroOrMore, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nNAPDefRootDDF = nApDDF.AddChildObjectL(KNSmlDdfNAPDef);       // NAPDef
+    FillNodeInfoL( nNAPDefRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, // EZeroOrMore
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nNAPDefDDF = nNAPDefRootDDF.AddChildObjectGroupL();        // For NAPDef<x>
+    FillNodeInfoL( nNAPDefDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nPxRootDDF = nApDDF.AddChildObjectL(KNSmlDdfPx);               // Px
+    FillNodeInfoL( nPxRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nPxDDF = nPxRootDDF.AddChildObjectGroupL();                // For Px<x>
+    FillNodeInfoL( nPxDDF, 
+                   aclTypesAddGetDel,//aclTypesAddGet
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+//
+//  NAPDef-node fields
+//
+    MSmlDmDDFObject& nNameDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNAPName);        // Name
+    FillNodeInfoL( nNameDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNAPNameDesc);
+
+    MSmlDmDDFObject& nNAPIDDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNAPID);     // NAPID
+    FillNodeInfoL( nNAPIDDDF, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNAPIDDesc);
+
+    MSmlDmDDFObject& nNAPLingerDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNAPLinger);     // Linger
+    FillNodeInfoL( nNAPLingerDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EInt, 
+                   KNSmlDdfNAPLingerDesc);
+                   
+    MSmlDmDDFObject& nNAPStartpgDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfStartpg);       // Startpg
+    FillNodeInfoL( nNAPStartpgDDF, 
+                   aclTypesNoDelete,
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfStartpgDesc);
+
+    MSmlDmDDFObject& nBearerRootDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfBearer);   // Bearer 
+    FillNodeInfoL( nBearerRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nBearerDDF = nBearerRootDDF.AddChildObjectGroupL();        // Bearer/<x>
+    FillNodeInfoL( nBearerDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nBearerLDDF = nBearerDDF.AddChildObjectL(KNSmlDdfBearerL); // BearerL
+    FillNodeInfoL( nBearerLDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfBearerLDesc);
+
+    MSmlDmDDFObject& nDirectionDDF = nBearerDDF.AddChildObjectL(KNSmlDdfDirection); // Direction
+    FillNodeInfoL( nDirectionDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfDirectionDesc);
+
+    MSmlDmDDFObject& nNAPAddrDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNAPAddr); // NAPAddr
+    FillNodeInfoL( nNAPAddrDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNAPAddrDesc);
+
+    MSmlDmDDFObject& nNAPAddrTyDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNAPAddrTy); // NAPAddrTy
+    FillNodeInfoL( nNAPAddrTyDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNAPAddrTyDesc);
+
+    MSmlDmDDFObject& nDNSAddrRootDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfDNSAddr); // DNSAddr
+    FillNodeInfoL( nDNSAddrRootDDF, 
+             aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nDNSAddrDDF = nDNSAddrRootDDF.AddChildObjectGroupL();  // DNSAddr/<x>
+    FillNodeInfoL( nDNSAddrDDF, 
+             aclTypesAddGet, 
+                   MSmlDmDDFObject::EOneOrMore, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nDNSAddrLDDF = nDNSAddrDDF.AddChildObjectL(KNSmlDdfDNSAddrL);  // DNSAddrL
+    FillNodeInfoL( nDNSAddrLDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfDNSAddrLDesc);
+
+    MSmlDmDDFObject& nDNSAddrTyDDF = nDNSAddrDDF.AddChildObjectL(KNSmlDdfDNSAddrTy);  // DNSAddrTy
+    FillNodeInfoL( nDNSAddrTyDDF, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfDNSAddrTyDesc);
+
+    MSmlDmDDFObject& nDNSPriorityDDF = nDNSAddrDDF.AddChildObjectL(KNSmlDdfDNSPriority);  // DNSAddrPriority
+    FillNodeInfoL( nDNSPriorityDDF, 
+                   aclTypesNoDelete,
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfDNSPriorityDesc);
+
+    MSmlDmDDFObject& nNAPAuthInfRootDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNAPAuthInf); // NAPAuthInf 
+    FillNodeInfoL( nNAPAuthInfRootDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nNAPAuthInfDDF = nNAPAuthInfRootDDF.AddChildObjectGroupL();    // NAPAuthInf/<x>
+    FillNodeInfoL( nNAPAuthInfDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nAuthNameDDF = nNAPAuthInfDDF.AddChildObjectL(KNSmlDdfAuthName);   // AuthName
+    FillNodeInfoL( nAuthNameDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfAuthNameDesc);
+
+    MSmlDmDDFObject& nAuthSecrDDF = nNAPAuthInfDDF.AddChildObjectL(KNSmlDdfAuthSecr);   // AuthSecr
+    FillNodeInfoL( nAuthSecrDDF, 
+             aclTypesAddReplace, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfAuthSecrDesc);
+
+    MSmlDmDDFObject& nDefGWDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfDefGW);         // DefGW
+    FillNodeInfoL( nDefGWDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfDefGWDesc);
+
+    MSmlDmDDFObject& nNetworkMaskDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNetworkMask); // NetworkMask
+    FillNodeInfoL( nNetworkMaskDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNetworkMaskDesc);
+
+    MSmlDmDDFObject& nUsePTxtLogDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfUsePTxtLog);   // UsePTxtLog
+    FillNodeInfoL( nUsePTxtLogDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EBool, 
+                   KNSmlDdfUsePTxtLogDesc);
+
+    MSmlDmDDFObject& nNetworksRootDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfNetworks);   // Networks 
+    FillNodeInfoL( nNetworksRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8 );
+
+    MSmlDmDDFObject& nNetworksDDF = nNetworksRootDDF.AddChildObjectGroupL();        // Networks/<x>
+    FillNodeInfoL( nNetworksDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nNetworkNameDDF = nNetworksDDF.AddChildObjectL(KNSmlDdfNetworkName);   // NetworkName
+    FillNodeInfoL( nNetworkNameDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNetworkNameDesc);
+
+    MSmlDmDDFObject& nNetworkIDDDF = nNetworksDDF.AddChildObjectL(KNSmlDdfNetworkID);   // NetworkID
+    FillNodeInfoL( nNetworkIDDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EInt, 
+                   KNSmlDdfNetworkIDDesc);
+
+    MSmlDmDDFObject& nPPPCompDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfPPPComp);     // PPPComp
+    FillNodeInfoL( nPPPCompDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EBool, 
+                   KNSmlDdfPPPCompDesc);
+
+    MSmlDmDDFObject& nGPRSPDPDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfGPRSPDP); // GPRSPDP
+    FillNodeInfoL( nGPRSPDPDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfGPRSPDPDesc);
+
+    MSmlDmDDFObject& nIPAddrFromServerDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIPAddrFromServer);   // IPAddrFromServer
+    FillNodeInfoL( nIPAddrFromServerDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EBool, 
+                   KNSmlDdfIPAddrFromServerDesc);
+
+    MSmlDmDDFObject& nIPAddrDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIPAddr);  // IPAddr
+    FillNodeInfoL( nIPAddrDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfIPAddrDesc);
+
+    MSmlDmDDFObject& nDNSAddrFromServerDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfDNSAddrFromServer); // DNSAddrFromServer
+    FillNodeInfoL( nDNSAddrFromServerDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EBool, 
+                   KNSmlDdfDNSAddrFromServerDesc);
+
+    MSmlDmDDFObject& nIPv6DNSAddrFromServerDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIPv6DNSAddrFromServer); // IPv6DNSAddrFromServer
+    FillNodeInfoL( nIPv6DNSAddrFromServerDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EBool, 
+                   KNSmlDdfIPv6DNSAddrFromServerDesc);
+
+    MSmlDmDDFObject& nIfNetworksDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIfNetworks);   // IfNetworks
+    FillNodeInfoL( nIfNetworksDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfIfNetworksDesc);
+
+    MSmlDmDDFObject& nIAPServiceDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIAPService);   // IAPService
+    FillNodeInfoL( nIAPServiceDDF, 
+             aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfIAPServiceDesc);
+
+
+
+    MSmlDmDDFObject& nIAPSeamlessnessDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIAPSeamlessness);   // IAPService
+    FillNodeInfoL( nIAPSeamlessnessDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EInt, 
+                   KNSmlDdfIAPSeamlessnessDesc);
+    MSmlDmDDFObject& nIAPMetaDataDDF = nNAPDefDDF.AddChildObjectL(KNSmlDdfIAPMetaData);   // IAPService
+    FillNodeInfoL( nIAPMetaDataDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EInt, 
+                   KNSmlDdfIAPMetaDataDesc);
+
+    if ( iWlanSupported )
+        {
+        iWlanAdapter->DDFStructureL( nNAPDefDDF ); // Adds WLAN fields to DDF
+        }
+    
+//
+//  Px-node fields
+//
+    MSmlDmDDFObject& nPxNameDDF = nPxDDF.AddChildObjectL(KNSmlDdfPxName);           // Name
+    FillNodeInfoL( nPxNameDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfPxDesc);
+
+    MSmlDmDDFObject& nPxIdDDF = nPxDDF.AddChildObjectL(KNSmlDdfPxId);               // PxId
+    FillNodeInfoL( nPxIdDDF, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfPxIdDesc);
+
+    MSmlDmDDFObject& nDomainRootDDF = nPxDDF.AddChildObjectL(KNSmlDdfDomain);   // Domain 
+    FillNodeInfoL( nDomainRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNSmlDdfDomainDesc);
+
+    MSmlDmDDFObject& nDomainDDF = nDomainRootDDF.AddChildObjectGroupL();    // Domain<x> 
+    FillNodeInfoL( nDomainDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOneOrMore, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nDomainLDDF = nDomainDDF.AddChildObjectL(KNSmlDdfDomainL); // DomainL (Get)
+    FillNodeInfoL( nDomainLDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfDomainLDesc);
+
+    MSmlDmDDFObject& nPxPWDDF = nPxDDF.AddChildObjectL(KNSmlDdfPxPW);               // PxPW
+    FillNodeInfoL( nPxPWDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfPxPWDesc);
+
+    MSmlDmDDFObject& nPxAddrDDF = nPxDDF.AddChildObjectL(KNSmlDdfPxAddr);           // PxAddr
+    FillNodeInfoL( nPxAddrDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfPxAddrDesc);
+
+    MSmlDmDDFObject& nPortRootDDF = nPxDDF.AddChildObjectL(KNSmlDdfPort);           // Port 
+    FillNodeInfoL( nPortRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNSmlDdfPortDesc);
+
+    MSmlDmDDFObject& nPortDDF = nPortRootDDF.AddChildObjectGroupL();            // Port<x> 
+    FillNodeInfoL( nPortDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOneOrMore, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nPortNbrDDF = nPortDDF.AddChildObjectL(KNSmlDdfPortNbr);       // PortNbr (Get)
+    FillNodeInfoL( nPortNbrDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EInt, 
+                   KNSmlDdfPortNbrDesc);
+
+    MSmlDmDDFObject& nToNAPIDRootDDF = nPxDDF.AddChildObjectL(KNSmlDdfToNAPID); // ToNAPID 
+    FillNodeInfoL( nToNAPIDRootDDF, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNSmlDdfToNAPIDDesc);
+
+    MSmlDmDDFObject& nToNAPIDDDF = nToNAPIDRootDDF.AddChildObjectGroupL();  // ToNAPID<x> 
+    FillNodeInfoL( nToNAPIDDDF, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nToNAPIDLDDF = nToNAPIDDDF.AddChildObjectL(KNSmlDdfToNAPIDL);  // ToNAPIDL (Get)
+    FillNodeInfoL( nToNAPIDLDDF, 
+                   aclTypesOnlyGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfToNAPIDLDesc);
+
+    MSmlDmDDFObject& nPxStartpgDDF = nPxDDF.AddChildObjectL(KNSmlDdfStartpg);       // Startpg
+    FillNodeInfoL( nPxStartpgDDF, 
+                   aclTypesNoDelete,
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfStartpgDesc);
+
+    MSmlDmDDFObject& nPxAuthInfRootDDF = nPxDDF.AddChildObjectL(KNSmlDdfPxAuthInf); // PxAuthInf 
+    FillNodeInfoL( nPxAuthInfRootDDF, 
+             aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nPxAuthInfDDF = nPxAuthInfRootDDF.AddChildObjectGroupL();  // PxAuthInf/<x>
+    FillNodeInfoL( nPxAuthInfDDF, 
+             aclTypesAddGet, 
+                   MSmlDmDDFObject::EOneOrMore, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nPxAuthIdDDF = nPxAuthInfDDF.AddChildObjectL(KNSmlDdfPxAuthId);    // PxAuthId
+    FillNodeInfoL( nPxAuthIdDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfPxAuthIdDesc);
+
+    MSmlDmDDFObject& nPxAuthPWDDF = nPxAuthInfDDF.AddChildObjectL(KNSmlDdfPxAuthPW);    // PxAuthPW
+    FillNodeInfoL( nPxAuthPWDDF, 
+                   aclTypesAddReplace, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfPxAuthPWDesc);
+
+    MSmlDmDDFObject& nNoPxForRootDDF = nPxDDF.AddChildObjectL(KNSmlDdfNoPxFor);     // NoPxFor 
+    FillNodeInfoL( nNoPxForRootDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EZeroOrOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNSmlDdfNoPxForDesc);
+
+    MSmlDmDDFObject& nNoPxForDDF = nNoPxForRootDDF.AddChildObjectGroupL();      // NoPxFor<x> 
+    FillNodeInfoL( nNoPxForDDF, 
+                   aclTypesAddGet, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::ENode, 
+                   KNullDesC8);
+
+    MSmlDmDDFObject& nNoPxForLDDF = nNoPxForDDF.AddChildObjectL(KNSmlDdfNoPxForL);  // NoPxForL (Get)
+    FillNodeInfoL( nNoPxForLDDF, 
+                   aclTypesNoDelete, 
+                   MSmlDmDDFObject::EOne, 
+                   MSmlDmDDFObject::EDynamic, 
+                   MSmlDmDDFObject::EChr, 
+                   KNSmlDdfNoPxForLDesc);
+
+    
+    _DBG_FILE("CNSmlInternetAdapter::DDFStructureL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::LingerValueL()
+//------------------------------------------------------------------------------
+
+void CNSmlInternetAdapter::LingerValueL( const TDesC8& aObject )
+{
+    
+    TBuf<100> desObj;
+    CnvUtfConverter::ConvertToUnicodeFromUtf8(desObj, aObject);
+    TInt err(KErrNone);
+    //const TDesC& value = desObj;
+    if(!Notalpha(desObj))
+    {
+    TLex lex( desObj );
+    TUint Linger = 0;
+    TInt lingerint;
+    err = lex.Val( Linger, EDecimal );
+    if( err == KErrNone )
+    {
+        lingerint = Linger;
+      if( lingerint >= 0 )
+        {
+          iLingerValue = lingerint;
+          iLingerFlag = EFalse;
+        }
+    }
+    }
+}
+
+
+// -----------------------------------------------------------------------------
+// CWPAPNapdef::UdateligerValueL
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlInternetAdapter::Notalpha(const TDesC& aValue)
+{
+  TBool NotAlpha = EFalse;
+  TChar character;
+  for(TInt i = 0 ; i < aValue.Length(); i++)
+  {
+    character = aValue[i];
+    NotAlpha = character.IsAlpha();
+    if(NotAlpha)
+    break;
+  }
+  
+  return NotAlpha;
+}
+// CNSmlInternetAdapter::AddLeafObjectL()
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::AddLeafObjectL( const TDesC8& aURI,
+                                           const TDesC8& aParentLUID, 
+                                           const TDesC8& aObject, 
+                                           const TDesC8& aType, 
+                                           const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): begin");
+    DBG_ARGS8(_S8("AP:add aURI AddLeafObjectL   - %S - %S"), &aURI, &aParentLUID);
+    DBG_ARGS8(_S8("AP:Object %S"), &aObject);
+
+  TInt parentLUID(0);
+  if(aParentLUID.Length()<=0 )
+  {
+    if (aURI.Match(_L8("AP/*/Px/*"  ))!= KErrNotFound)
+        {
+        if(!GetProxyIdL(aURI)) 
+            {
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+            return; 
+            }
+        }
+        if(!iLUID)
+        iLUID = IntLUID(aParentLUID);
+      parentLUID = GetAPIdFromURIL(aURI);
+    if( parentLUID == 0 )
+      {
+        if( IsAPUriFormatMatchPredefined(aURI) )
+        {
+          iLUID = ConstructTreeL(aURI);
+          parentLUID = GetAPIdFromURIL(aURI);
+        } 
+      }
+   
+  }
+  else
+  {
+    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): PParentLUID set to parentLUID");
+    parentLUID = IntLUID(aParentLUID); 
+  }
+// Always buffer DNSAddr/<X>/*
+    if( ( parentLUID ==0 ||
+          aURI.Find(KNSmlDdfDNSPriority ) >= 0 ||
+          aURI.Find(KNSmlDdfDNSAddrL ) >= 0 ) && !iExecutingBuffer  )
+    // Update as add
+        {
+        iLeafType = EDMUnset; // Default for leaf handling
+        AddLeafBufferL(aURI,aParentLUID,aObject,aType,aStatusRef);
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): end");
+        return;
+        }
+
+    if(parentLUID == KNSmlIncompleteAP)
+        {
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+        return;
+        }
+
+//check if Stale and add leaf buffer
+  if (parentLUID > 0 && !iExecutingBuffer  )
+  {
+    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): parentLUID > 0 && !iExecutingBuffer");
+    TUint32 apID = GetAPIdFromURIL(aURI);
+      if(!APExistsL(apID))
+      {
+    AddLeafBufferL(aURI,aParentLUID,aObject,aType,aStatusRef);
+    iStaleMapUpdate=ETrue;
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): end");
+        return;
+      }
+  }
+    TInt pushed = 0;
+//
+//  Check which field going to be handled
+//
+    SetField(aURI);
+    if((iField->Compare(KNSmlDdfNAPLinger) == 0))
+    {
+      TUint32 apID = GetAPIdFromURIL(aURI);
+      if( aObject.Size()==0 )
+      {
+        DeleteLingerL( apID ); 
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        return;
+      }
+      LingerValueL( aObject );
+      
+      if ( !iLingerFlag )
+    {
+        iLingerFlag = ETrue;
+        TRAPD (error, AddLingerL( apID , iLingerValue ));
+        if( error == !KErrNone)
+        {
+          iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+        }
+        else
+        {
+          iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        }
+    }
+    else
+    {
+      iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+    }
+    return; 
+    }
+    
+//
+//  On leaf handling and add, must be checked that value not set before
+// 
+    if (iLeafType != EDMUpdate && 
+        iLeafType != EDMDelete )
+        {
+        iLeafType = EDMAdd;
+        }
+    if (iStaleMapUpdate)
+     {
+         iLeafType = EDMAdd;
+     }
+
+    TPtrC qTable  = TPtrC(KNullDesC);
+    TPtrC qColumn = TPtrC(KNullDesC);
+    TPtrC qDB = TPtrC(COMMDB_ID);
+
+    if(aURI.Find(KNSmlDdfPortNbr) >= 0)
+        {
+        IsWapPort(aObject);
+        }
+//
+//  Get Database field type 
+//
+
+    if(parentLUID > 0)
+        {
+        // Get IAP nbr for servicetype
+        TUint32 iapIDs = GetAPIdFromURIL(aURI);
+        
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): checkluid is %d and iapId %d "),parentLUID, iapIDs );
+
+        //  IAP-table search serviceType (=Bearer)
+        CCommsDbTableView* iapViews = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                        TPtrC(COMMDB_ID),
+                                                                        iapIDs);
+    
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+        TInt errorCode = iapViews->GotoFirstRecord();
+    
+        // Read iapService from (IAP)
+        if ( errorCode == KErrNone )
+            {
+            iapViews->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+            CleanupStack::PopAndDestroy(); // iapViews
+            qTable.Set(serviceType);
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(); // iapViews
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): ENotFound 1 end");
+            return;
+            }
+        } 
+
+  if ( iWlanSupported )
+    {
+      TBool wLANfield = IsWLANfield(aURI);
+      if( wLANfield )
+          {
+          iWlanAdapter->AddLeafObjectL( aURI, aParentLUID, aObject, aType, aStatusRef );
+          CleanupStack::PopAndDestroy(pushed); 
+          return;
+          }
+    }
+
+    TInt fType = GetAPFieldType( aURI );
+    if (fType == EWrong) // Error if leaf not supported
+        {
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+        return;
+        }
+
+    TBool fieldOK = GetAPField(qTable,qColumn);
+    if(!fieldOK ) // OK if column for table not supported
+        {
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EOk end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        return;
+        }
+
+    iISPId = parentLUID;
+    if(aURI.Match(_L8("AP/*/Px/*/*" ))!= KErrNotFound)
+        {
+        if(iProxyId == 0)
+            iProxyId = parentLUID;
+        }
+
+    if (( fType == CNSmlInternetAdapter::EStr ) ||
+        ( fType == CNSmlInternetAdapter::EInt && aURI.Find(KNSmlDdfGPRSPDP) >= 0) ||  // KNSmlDdfNAPAddrTy
+        ( fType == CNSmlInternetAdapter::EInt && aURI.Find(KNSmlDdfNAPAddrTy) >= 0))  // KNSmlDdfNAPAddrTy
+        { // Name + NAPAddr + DNSAddr +  Networks/*/Name
+        
+        if(aURI.Match(_L8("AP/*/Networks/*/Name"))!= KErrNotFound)
+            {
+            TUint32 checkLUID = 0;
+            TUint32 iapID1 = GetAPIdFromURIL(aURI);
+            
+    
+            //  IAP-table NetworkId Update
+            CCommsDbTableView* iapUpdate = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(COMMDB_ID),iapID1);
+            TInt iapExists = iapUpdate->GotoFirstRecord();
+    
+        if (iapExists == KErrNone)
+            {
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL, Get network id");
+            iapUpdate->ReadUintL(TPtrC(IAP_NETWORK),checkLUID);
+            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): networks is %d"),checkLUID);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL, IAP exists");
+            if( checkLUID >0 )                                       
+                {
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL, network id > 0");
+                //check if network exist in NETWORK TABLE 
+                CCommsDbTableView*  checknetView;
+                checknetView = iDatabase->OpenViewMatchingUintLC(TPtrC(NETWORK),TPtrC(COMMDB_ID),checkLUID);
+                TInt error = checknetView->GotoFirstRecord();
+                if (error == KErrNotFound)
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: Network does not exist, create it");
+                    AddNetworkL(checkLUID,aObject);
+                    if( checkLUID > 0 )
+                        {
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network generation ok");
+                        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): network id is %d"),checkLUID);
+                        //iapUpdate->WriteUintL(TPtrC(IAP_NETWORK),checkLUID); 
+                        }
+                    else
+                        {
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): network generation failed");
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                        return;
+                        }
+                    }
+                  // Network was found, update the name to the given name.
+                  else
+                    {
+                    if(checknetView->UpdateRecord()==KErrNone)
+                      {
+                      _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network found, update name");
+                      checknetView->WriteTextL(TPtrC(COMMDB_NAME), ConvertTo16LC(aObject));
+                      _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network name updated");
+                      CleanupStack::PopAndDestroy(); //ConvertTo16LC
+                      }
+                    // writing failed for some reason
+                    else
+                        {
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): network generation failed");
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                        return;
+                        }
+                    }
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network ok");
+                CleanupStack::PopAndDestroy();  //checknetView
+                }
+            }
+            // IAP does not exist yet, create network, network id will be updated later using checkLUID
+        else
+            {
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network does not exist, creation 2");
+            AddNetworkL(checkLUID,aObject);
+            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): network id is %d"),checkLUID);
+            }
+        CleanupStack::PopAndDestroy(); // iapUpdate
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network addition handled");
+            
+
+            //  IAP-table NetworkId Update
+            CCommsDbTableView* iapView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                           TPtrC(COMMDB_ID),
+                                                                           iapID1);
+            TInt iapFound = iapView->GotoFirstRecord();
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL: network id update begin");
+            if(iapFound==KErrNone)
+                {
+                TBool iapReLock = EFalse;
+	            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+	                {
+	                TBool apEnforce=EFalse;
+	                TRAPD(eError,apEnforce=CheckEnforcementL())
+	                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+	                if(eError==KErrNone && apEnforce)
+	                    {
+	                    DoLockIAPTablesL(EFalse);
+	                    ((CCommsDbProtectTableView*)iapView)->UnprotectRecord();
+	                    iWAPRelock = ETrue;
+	                    }
+	                }
+	                
+	            if(IsIAPRecordLockedL(iapID1))
+	                {
+	                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");  
+        			TInt reclockerr = ((CCommsDbProtectTableView*)iapView)->UnprotectRecord();
+	                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+	                if(reclockerr==KErrNone)
+	                    iapReLock = ETrue;
+	                }
+	            else
+	                {
+	                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected");  
+	                }
+                
+	            if(iapView->UpdateRecord()==KErrNone)
+                    {
+                    iapView->WriteUintL(TPtrC(IAP_NETWORK), checkLUID);
+                    DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObject(): checkLUID is %d"),checkLUID);
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObject, IAP_NETWORK set to checkLUID ");
+                    iapView->PutRecordChanges();
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObject, iap found, set iNetworkId to checkLUID");
+                    iNetworkId = checkLUID;
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+                    }
+                else
+                    {
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    }
+                    
+                    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                        {
+                        if(iWAPRelock)
+                            {
+                            DoLockIAPTablesL(ETrue);
+                            ((CCommsDbProtectTableView*)iapView)->ProtectRecord();
+                            iWAPRelock = EFalse;
+                            }
+                        }                   
+                    if(iapReLock)
+                        {
+                        TInt reclockerr = DoProtectIAPRecordL(iapID1,ETrue);
+                        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,Protecting IAPAccessRecord returned code = %d"),reclockerr);
+                        if(reclockerr==KErrNone)
+                            iapReLock = EFalse;  
+                        }                   
+                    }
+                else if (iapFound==KErrNotFound)
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObject, iap not found, set iNetworkId");
+                    DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObject(): checkLUID is %d"),checkLUID);
+                    iNetworkId = checkLUID;
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+                    }
+                else
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObject, iap found");
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    }
+
+                CleanupStack::PopAndDestroy(); // iapView
+                CleanupStack::PopAndDestroy(pushed); 
+
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): OK end");
+                return;
+            }
+        
+        else if(((aURI.Match(_L8("AP/*/Px/*/Name"))   != KErrNotFound ||    // ProxyName
+                  aURI.Match(_L8("AP/*/Px/*/PxAddr"))  != KErrNotFound ||   // ProxyAddr
+                  aURI.Match(_L8("AP/*/Px/*/DomainL")) != KErrNotFound ) // DomainL (PROXY_PROTOCOL_NAME)
+                 &&  iLeafType == EDMUpdate) ||
+                ((aURI.Match(_L8("AP/*/Px/*/PxAddr"))  != KErrNotFound 
+                  ||  aURI.Match(_L8("AP/*/Px/*/DomainL")) != KErrNotFound )
+                 &&  iLeafType == EDMAdd))
+            {
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                                             TPtrC(COMMDB_ID),
+                                                                             iProxyId);
+			TBool proxyReLock = EFalse;
+			if(IsProxyRecordLockedL(iProxyId))
+			{
+        		_DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): proxy record is LOCKED");	        		
+        		TInt reclockerr = ((CCommsDbProtectTableView*)tableView)->UnprotectRecord();
+        		DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting ProxyRecord returned code = %d"),reclockerr);
+        		if(reclockerr==KErrNone)
+               		proxyReLock = ETrue;
+			}
+			else
+			{
+  		     _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected");	
+			}
+
+            TInt errorCode = tableView->GotoFirstRecord();
+            if ( errorCode == KErrNone )
+                {
+                if (tableView->UpdateRecord() == KErrNone )
+                    {
+                    if (aURI.Match(_L8("AP/*/Px/*/PxAddr"))      != KErrNotFound )
+                        {
+                        tableView->WriteLongTextL(TPtrC(PROXY_SERVER_NAME), ConvertTo16LC(aObject));
+                        pushed++;
+                        }
+                    else if (aURI.Match(_L8("AP/*/Px/*/DomainL"))   != KErrNotFound )
+                        {
+                        // Accepted values are (http, https, ftp, ftps)
+                        _LIT8(KProxyProtocol,"http, https, ftp, ftps");
+
+                        TInt protocolFound = 0;
+                        if(aObject.Length() > 0)
+                            {
+                            protocolFound = KProxyProtocol().Find(aObject);
+                            }
+                        if( protocolFound == KErrNotFound && aObject.Length() > 0)
+                            {
+                            CleanupStack::PopAndDestroy(); // tableView
+                            CleanupStack::PopAndDestroy(pushed); 
+                            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                            return;
+                            }
+                        if(aObject.Length() == 0)
+                            {   
+                            tableView->SetNullL(TPtrC(PROXY_PROTOCOL_NAME)); 
+                            }
+                        else
+                            {
+                            tableView->WriteTextL(TPtrC(PROXY_PROTOCOL_NAME), ConvertTo16LC(aObject)); 
+                            CleanupStack::PopAndDestroy(); //ConvertTo16LC
+                            }
+                        }
+                    tableView->PutRecordChanges();
+                    CleanupStack::PopAndDestroy(); // tableView
+                    }
+                else
+                    {
+                    CleanupStack::PopAndDestroy(); // tableView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                    return;
+                    }
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // tableView
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): ENotFound end");
+                return;
+                }
+            if(proxyReLock)
+	    	{
+	    		TInt reclockerr = DoProtectProxyRecordL(iProxyId,ETrue);
+            	DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting Proxy returned code = %d"),reclockerr);
+            	if(reclockerr==KErrNone)
+               		proxyReLock = EFalse;	
+	    	}
+            CleanupStack::PopAndDestroy(pushed); 
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EOk end");
+            return;
+            }
+
+        if (iLeafType == EDMUpdate ||
+            (iLeafType == EDMAdd && 
+             (aURI.Find(KNSmlDdfNAPName) >= 0  &&
+              aURI.Find(KNSmlDdfNAPDef)  >= 0) ||
+             aURI.Find(KNSmlDdfNAPAddr)  >= 0 ||
+             aURI.Find(KNSmlDdfGPRSPDP)  >= 0 ||
+             aURI.Find(KNSmlDdfDNSAddrL) >= 0 ||
+             aURI.Find(KNSmlDdfAuthSecr) >= 0 ||
+             aURI.Find(KNSmlDdfDefGW)    >= 0 ||
+             aURI.Find(KNSmlDdfNetworkMask) >= 0 ||
+             aURI.Find(KNSmlDdfIPAddr)   >= 0 ||
+             aURI.Find(KNSmlDdfNAPAddrTy)>= 0 ))
+            {
+            // Get IAP nbr for servicetype
+
+            TUint32 iapID2 = GetAPIdFromURIL(aURI);
+
+            //  IAP-table search serviceType (=Bearer)
+            CCommsDbTableView* serviceView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                               qDB,
+                                                                               iapID2);
+    
+            TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+            TInt errorCode = serviceView->GotoFirstRecord();
+    
+            // Read serviceType from (IAP)
+            if ( errorCode == KErrNone )
+                {
+                serviceView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+                serviceView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), iProxyServiceType); // for locking
+
+                    serviceView->ReadUintL(TPtrC(IAP_SERVICE), iISPId);
+
+                CleanupStack::PopAndDestroy(); // serviceView
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // serviceView
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): ENotFound end");
+                return;
+                }
+            qTable.Set(serviceType);
+
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                             qDB,
+                                                                             iISPId);
+    
+            errorCode = tableView->GotoFirstRecord();
+
+            if ( errorCode == KErrNone )
+                {
+                TBool serviceReLock = EFalse;
+                if(IsServiceRecordLockedL(iISPId))
+        {
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");
+              TInt reclockerr = ( (CCommsDbProtectTableView*) tableView )->UnprotectRecord();             
+              DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+              if(reclockerr==KErrNone)
+                  serviceReLock = ETrue;
+        }
+        else
+        {
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected"); 
+        }    
+
+                if(tableView->UpdateRecord()!=KErrNone)
+                    {
+                    //database locked
+                    CleanupStack::PopAndDestroy(); // tableView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                    return;
+                    }
+                if ( fType == CNSmlInternetAdapter::EInt)
+                    {
+                    TUint32 object32;
+                    if (aURI.Find(KNSmlDdfGPRSPDP) >= 0 ||      /* GPRSPDP handling */
+                        aURI.Find(KNSmlDdfNAPAddrTy) >= 0)      /* NAPAddrTy handling */
+                        {
+                        if(aObject.MatchF(KNSmlDmApValIpv4) != KErrNotFound )
+                            {
+                            object32 = RPacketContext::EPdpTypeIPv4;    
+                            }
+                        else if (aObject.MatchF(KNSmlDmApValIpv6) != KErrNotFound )
+                            {
+                            object32 = RPacketContext::EPdpTypeIPv6;
+                            }
+                        else if (aObject.MatchF(_L8("PPP")) != KErrNotFound )
+                            {
+                            object32 = RPacketContext::EPdpTypePPP;
+                            }
+                        else 
+                            { // NotValid value
+                            tableView->CancelRecordChanges();
+                            CleanupStack::PopAndDestroy(); // tableView
+                            CleanupStack::PopAndDestroy(pushed); 
+                            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                            return;
+                            }
+                        }
+                    else
+                        {
+                    object32 = GetIntObject8(aObject);
+                        }
+
+                    tableView->WriteUintL(qColumn, object32);
+                    }
+                else
+                    {
+                    // This should be executed only when executing buffered cmds
+                    if(aURI.Find(KNSmlDdfDNSAddrL) >= 0 )
+                    // DNS address 
+                        {
+                        TPtrC8 parentUri = RemoveLastSeg(aURI);
+                        TInt dnsPri = 0;
+                        TBool found = InitializeDNSParamsFromBuffL( parentUri, dnsPri );
+                        UriUtils::TUriHostType dnsAddrTy = UriUtils::HostType(aObject);
+
+                        if (!found )
+                            {
+                            UriUtils::TUriHostType dnsLuidType;
+                            TInt dnsLuidPriority;
+                            if ( LuidToDns(dnsLuidType, dnsLuidPriority, parentLUID ) != KErrNone )
+                                {
+                                if ( dnsAddrTy == UriUtils::EIPv4Host )
+                                    {
+                                    iDnsIpv4Pri = (iDnsIpv4Pri % 2 ) + 1;
+                                    dnsPri = iDnsIpv4Pri;
+                                    }
+                                else if ( dnsAddrTy == UriUtils::EIPv6Host )
+                                    {
+                                    iDnsIpv6Pri = (iDnsIpv6Pri % 2 ) + 1; 
+                                    dnsPri = iDnsIpv6Pri;
+                                    }
+                                }
+                            else 
+                                {
+                                // update
+                                dnsPri = dnsLuidPriority;
+                                }
+
+                            }
+                        if ( dnsPri != 0 )
+                            { 
+                            if ( dnsPri == 1)
+                                {
+                                if ( dnsAddrTy == UriUtils::EIPv4Host )
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP_NAME_SERVER1 ));
+                                    }
+                                else
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP6_NAME_SERVER1 ));
+
+                                    }
+                                }
+                            else
+                                {
+                                if ( dnsAddrTy == UriUtils::EIPv4Host )
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP_NAME_SERVER2 ));
+                                    }
+                                else
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP6_NAME_SERVER2 ));
+
+                                    }
+                                }
+                            tableView->WriteTextL(qColumn, ConvertTo16LC(aObject));
+                            pushed++;
+                            TInt dnsLuid =  DnsToLuid( dnsAddrTy, dnsPri);
+                            iCallBack->SetMappingL(parentUri, SetIntObjectLC( dnsLuid ));
+                            pushed++;
+                            }
+                        else
+                            {
+                            CleanupStack::PopAndDestroy(); // tableView
+                            CleanupStack::PopAndDestroy(pushed); 
+                            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                            return;
+                            }
+                            
+                        }
+
+                    else
+                        {
+                      if(( serviceType == TPtrC( LAN_SERVICE ) ) && (iField->Compare(KNSmlDdfNAPAddr) == 0 ) )
+                        {
+                          if(!IsValidIPv4AddressL(aObject))
+                              {
+                              iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EInvalidObject);
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EInvalidObject end");
+                        CleanupStack::PopAndDestroy(); // tableView
+                                CleanupStack::PopAndDestroy(pushed); 
+                        return;
+                                }
+                                        
+                            }
+                        tableView->WriteTextL(qColumn, ConvertTo16LC(aObject));
+                        pushed++;
+                       
+                        }
+                    // DNSAddrL <> 0.0.0.0 or empty => 
+                    if(aURI.Find(KNSmlDdfDNSAddrL) >= 0 ) /* DNS serviceFlag handling */
+                        {
+                        if( aObject.Match(_L8("fec0:0:0:ffff::1")) == KErrNotFound ||
+                            aObject.Match(_L8("fec0:0:0:ffff::2")) == KErrNotFound )
+                            {
+                            tableView->WriteBoolL(TPtrC(SERVICE_IP6_DNS_ADDR_FROM_SERVER),EFalse);
+                            }
+                        else
+                            {
+                            tableView->WriteBoolL(TPtrC(SERVICE_IP6_DNS_ADDR_FROM_SERVER),ETrue);
+                            }
+                                    
+
+                  }
+                    }
+                TInt putOk = tableView->PutRecordChanges();
+                if ( putOk != KErrNone )
+                    {
+                    TInt retry = KBeginTransRetryCount;
+                    while ( retry > 0 && putOk == KErrLocked )
+                    {
+                        User::After(KBeginTransRetryDelay);
+                        putOk = tableView->PutRecordChanges();
+                        retry--;
+                    }
+                    if(putOk != KErrNone)
+                        {
+                    CleanupStack::PopAndDestroy(); // tableView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                      DBG_ARGS(_S16("CNSmlInternetAdapter::AddLeafObjectL(): Update failed with Code %d"),putOk);
+                    return;
+                        }
+                    }
+                if (aURI.Find(KNSmlDdfNAPName) >= 0 &&
+                    aURI.Find(KNSmlDdfAuthName) <= 0 ) /* NAPName */
+                    {
+                    if(UpdateIAPnameL(iapID2,aObject) != KErrNone )
+                        {
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                        }
+                    }
+        if(serviceReLock)
+          {
+            TInt reclockerr = DoProtectServiceRecordL(iISPId,ETrue);
+                  DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+                  if(reclockerr==KErrNone)
+                    serviceReLock = EFalse; 
+          }
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // tableView
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): ENotFound end");
+                return;
+                }
+
+            CleanupStack::PopAndDestroy(); // tableView
+            }   
+
+        }
+    else if (fType == CNSmlInternetAdapter::EBool)
+        { // UseCB + UseIPSec
+        TUint32 iapID3 = GetAPIdFromURIL(aURI);
+
+        //  IAP-table search serviceType (=Bearer)
+        CCommsDbTableView* boolView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                        TPtrC(COMMDB_ID),
+                                                                        iapID3);
+        TInt errorCode = boolView->GotoFirstRecord();
+        
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+        errorCode = boolView->GotoFirstRecord();
+    
+        // Read serviceType from (IAP)
+        if ( errorCode == KErrNone )
+            {
+            boolView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+            boolView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), iProxyServiceType); // for locking
+            boolView->ReadUintL(TPtrC(IAP_SERVICE), iISPId);
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(); // boolView
+            CleanupStack::PopAndDestroy(pushed); 
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): ENotFound end");
+            return;
+            }
+
+        CleanupStack::PopAndDestroy(); // boolView
+
+        qTable.Set(serviceType);
+        TBool ret = GetAPField(qTable,qColumn);
+        if(!ret)
+            {
+            CleanupStack::PopAndDestroy(pushed); 
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EInvalidObject);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EInvalidObject end");
+            return;
+            }
+
+
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                         TPtrC(COMMDB_ID),
+                                                                         iISPId);
+
+        errorCode = tableView->GotoFirstRecord();
+
+        if ( errorCode == KErrNone )
+            {
+            TBool serviceReLock = EFalse;
+            if(IsServiceRecordLockedL(iISPId))
+      {
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");
+            TInt reclockerr = ( (CCommsDbProtectTableView*) tableView )->UnprotectRecord(); 
+            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+            if(reclockerr==KErrNone)
+                serviceReLock = ETrue;
+      }
+      else
+      {
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected"); 
+      }    
+            if(tableView->UpdateRecord()!=KErrNone)
+                {
+                //database locked
+                CleanupStack::PopAndDestroy(); // tableView
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                return;
+                }
+            TBool tObject = EFalse;
+
+            if(aObject.CompareF(KNSmlDmApValTrue) == 0)
+                {
+                tObject = ETrue; 
+                }
+            if(aURI.Right(10).Compare(KNSmlDdfUsePTxtLog)==0)
+                {
+                tObject=!tObject;
+                }
+      if( qColumn.Match(TPtrC(SERVICE_IP_ADDR_FROM_SERVER)) != KErrNotFound )
+        {
+        if ( serviceType == TPtrC( LAN_SERVICE ) ) // Is WLAN service
+            {
+            if( tObject )
+              {
+                  tableView->WriteTextL( TPtrC(SERVICE_CONFIG_DAEMON_MANAGER_NAME), 
+                             KDaemonManagerName );
+              tableView->WriteTextL( TPtrC(SERVICE_CONFIG_DAEMON_NAME), 
+                           KConfigDaemonName );
+              }
+            else
+              {
+                  tableView->WriteTextL( TPtrC(SERVICE_CONFIG_DAEMON_MANAGER_NAME), KNullDesC );
+              tableView->WriteTextL( TPtrC(SERVICE_CONFIG_DAEMON_NAME), KNullDesC );
+              }
+            }
+        }  // Is WLAN service
+
+            tableView->WriteBoolL(qColumn, tObject );
+            tableView->PutRecordChanges();
+            CleanupStack::PopAndDestroy(); // tableView
+            if(serviceReLock)
+        {
+          TInt reclockerr = DoProtectServiceRecordL(iISPId,ETrue);
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting ServiceRecord returned code = %d"),reclockerr);
+                if(reclockerr==KErrNone)
+                  serviceReLock = EFalse; 
+        }
+            }
+        else
+            {
+            tableView->CancelRecordChanges();
+            CleanupStack::PopAndDestroy(); // tableView
+            CleanupStack::PopAndDestroy(pushed); 
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+            return;
+            }
+        }
+    else if (fType == CNSmlInternetAdapter::EInt)
+        { // UsePTxtLog + PortNbr + seamlessness and metadata
+        iObject = GetIntObject8(aObject);
+  
+            if(aURI.Find(KNSmlDdfIAPSeamlessness) >= 0 )
+                {
+               // TUint32 setSeam = GetIntObject8(aObject);
+                TUint32 apMetaID = GetAPIdFromURIL(aURI);
+                SetIAPSeamlessnessL(apMetaID,iObject,aStatusRef);
+                return;
+                }
+             
+             else if (aURI.Find(KNSmlDdfIAPMetaData)  >= 0)
+                {
+              //  TUint32 setMeta = GetIntObject8(aObject);
+                TUint32 apMetaID = GetAPIdFromURIL(aURI);
+                SetIAPMetaDataL(apMetaID,iObject,aStatusRef);
+                return;
+                }
+            
+    
+        if (aURI.Find(KNSmlDdfUsePTxtLog) >= 0)
+            {
+            TUint32 iapID4 = GetAPIdFromURIL(aURI);
+
+            //  IAP-table search serviceType (=Bearer)
+            CCommsDbTableView* iapView4 = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                            TPtrC(COMMDB_ID),
+                                                                            iapID4);
+            TInt errorCode = iapView4->GotoFirstRecord();
+        
+            TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+            errorCode = iapView4->GotoFirstRecord();
+    
+            // Read serviceType from (IAP)
+            if ( errorCode == KErrNone )
+                {
+                iapView4->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+                iapView4->ReadTextL(TPtrC(IAP_SERVICE_TYPE), iProxyServiceType); // for locking
+                iapView4->ReadUintL(TPtrC(IAP_SERVICE), iISPId);
+                CleanupStack::PopAndDestroy(); // iapView4
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // iapView4
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): ENotFound end");
+                return;
+                }
+
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                             TPtrC(COMMDB_ID),
+                                                                             iISPId);
+
+            errorCode = tableView->GotoFirstRecord();
+
+            if ( errorCode == KErrNone )
+                {
+                TBool serviceReLock = EFalse;
+              if(IsServiceRecordLockedL(iISPId))
+        {
+          
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");
+              TInt reclockerr = ( (CCommsDbProtectTableView*) tableView )->UnprotectRecord();
+              DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+              if(reclockerr==KErrNone)
+                  serviceReLock = ETrue;
+        }
+        else
+        { 
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected"); 
+        }    
+                if(tableView->UpdateRecord()!=KErrNone)
+                    {
+                    //database locked
+                    CleanupStack::PopAndDestroy(); // tableView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                    return;
+                    }
+                TBool tObject = EFalse;
+                if(iObject) 
+                    {
+                    tObject = ETrue; // <> 0
+                    }
+                tableView->WriteBoolL(TPtrC(SERVICE_DISABLE_PLAIN_TEXT_AUTH), tObject );
+                tableView->PutRecordChanges();
+        if(serviceReLock)
+          {
+              DoProtectIAPRecordL(iapID4,ETrue);
+            TInt reclockerr = DoProtectServiceRecordL(iISPId,ETrue);
+                  DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting ServiceRecord returned code = %d"),reclockerr);
+                  if(reclockerr==KErrNone)
+                    serviceReLock = EFalse; 
+          }
+                CleanupStack::PopAndDestroy(); // tableView
+                }
+            else
+                {
+                tableView->CancelRecordChanges();
+                CleanupStack::PopAndDestroy(); // tableView
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                return;
+                }
+            }
+        else if (aURI.Find(KNSmlDdfPortNbr) >= 0)
+            {
+            if(GetProxyIdL(aURI))
+                {
+                iProxyISP = GetAPIdFromURIL(aURI);
+
+                CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                                                 TPtrC(COMMDB_ID),
+                                                                                 iProxyId);
+                TInt errorCode = tableView->GotoFirstRecord();
+          TBool proxyReLock = EFalse;
+                // Read all columns needed.
+                if ( errorCode == KErrNone )
+                    {
+          if(IsProxyRecordLockedL(iProxyId))
+          {
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): proxy record is LOCKED");  
+        		TInt reclockerr = ((CCommsDbProtectTableView*)tableView)->UnprotectRecord();
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting Proxy Record returned code = %d"),reclockerr);
+                if(reclockerr==KErrNone)
+                      proxyReLock = ETrue;
+          }
+          else
+          {
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected"); 
+          }
+                    if(tableView->UpdateRecord()!=KErrNone)
+                        {
+                        //database locked
+                        CleanupStack::PopAndDestroy(); // tableView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Update failed end");
+                        return;
+                        }
+                    iObject = GetIntObject8(aObject);
+
+                    tableView->WriteUintL(TPtrC(PROXY_PORT_NUMBER), iObject);
+                    }
+                tableView->PutRecordChanges();
+                if(proxyReLock)
+          {
+            TInt reclockerr = DoProtectProxyRecordL(iProxyId,ETrue);
+                  DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting Proxy Record returned code = %d"),reclockerr);
+                  if(reclockerr==KErrNone)
+                    proxyReLock = EFalse; 
+          }
+                CleanupStack::PopAndDestroy(); // tableView
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): PortNbr Error end");
+                return;
+                }
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(pushed); 
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): PortNbr Error end");
+            return;
+            }
+
+        }
+
+    else if (fType == CNSmlInternetAdapter::EWap)
+        { // Startpg + PxAuthId + PxAuthPW (WAP-settings) (BasAuthId + BasAuthPW)
+        TUint32 iapID5 = GetAPIdFromURIL(aURI);
+        //
+        // Without iapID5 no insert possible, set on buffer
+        //
+        if(iapID5 < 1)
+            {
+            AddLeafBufferL(aURI,aParentLUID,aObject,aType,aStatusRef);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): end");
+            return;
+            }
+        
+        GetAPField(qTable,qColumn);
+        if(WapAPExistsL(iapID5)) 
+            {  // Update handled
+            TBool iapReLock = EFalse;
+            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                {
+                TBool apEnforce=EFalse;
+                TRAPD(eError,apEnforce=CheckEnforcementL())
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+                if(eError==KErrNone && apEnforce)
+                    {
+                    DoLockIAPTablesL(EFalse);
+                    iWAPRelock = ETrue;
+                    }
+                }
+            if(IsIAPRecordLockedL(iapID5))
+                {
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");  
+                TInt reclockerr = DoProtectIAPRecordL(iapID5,EFalse);
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                if(reclockerr==KErrNone)
+                    iapReLock = ETrue;
+                }
+            else
+                {
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected"); 
+                }
+            CCommsDbTableView* wapView;
+            TBool wapaccesspointTableLocked = EFalse;
+
+            if(qColumn == TPtrC(WAP_START_PAGE))
+                {
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): record to be added WAP_START_PAGE, check for lock status");
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL Get WapAccessPoint record access for ID = %d"),iWapId);
+                if(IsWAPAccessPointRecordLockedL(iWapId))
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): wapaccesspoint record is LOCKED"); 
+                    TInt reclockerr = DoProtectWAPAccessRecordL(iWapId,EFalse);
+                    DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                    if(reclockerr==KErrNone)
+                    wapaccesspointTableLocked = ETrue;
+                    }
+                else
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): wapaccesspoint record is not write protected");  
+                    }
+                wapView = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_ACCESS_POINT),
+                                                            TPtrC(COMMDB_ID),
+                                                            iWapId);
+                pushed++;
+                }
+            else // Other WAP-data
+                {
+                wapView = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_IP_BEARER),
+                                                            TPtrC(WAP_ACCESS_POINT_ID),
+                                                            iWapId);
+                pushed++;
+                }
+
+            TInt errorCode = wapView->GotoFirstRecord();
+    
+            // Read all columns needed.
+            if ( errorCode == KErrNone )
+                {
+                if(wapView->UpdateRecord()!=KErrNone)
+                    {
+                    //database locked
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): Wapview Update failed end");
+                    if(wapaccesspointTableLocked)
+                      {
+                      _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): wapaccesspoint record to be locked again "); 
+                      DoProtectWAPAccessRecordL(iWapId,ETrue);
+                      wapaccesspointTableLocked = EFalse; 
+                      }
+                    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                        {
+                        if(iWAPRelock)
+                            {
+                            DoLockIAPTablesL(ETrue);
+                            iWAPRelock = EFalse;
+                            }
+                        }
+                    if(iapReLock)
+                        {
+                        TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+                        if(reclockerr==KErrNone)
+                            iapReLock = EFalse; 
+                        }
+                        return;
+                    }
+
+                if(qColumn == TPtrC(WAP_PROXY_PORT))
+                    {
+                    TBool security = EFalse; // => 9200 + 9201, ETrue 9202 + 9203
+                    TUint32 object32;
+                    TPtrC object16 = ConvertTo16LC(aObject);
+                    pushed++;
+                    if(object16.Match(KWappPort9200) != KErrNotFound )
+                        {
+                        object32 = KWAPP_PORT_9200; // wappdef.h
+                        }
+                    else if(object16.Match(KWappPort9201) != KErrNotFound )
+                        {
+                        object32 = KWAPP_PORT_9201; 
+                        }
+                    else if(object16.Match(KWappPort9202) != KErrNotFound )
+                        {
+                        object32 = KWAPP_PORT_9202; 
+                        security = ETrue;
+                        }
+                    else if(object16.Match(KWappPort9203) != KErrNotFound )
+                        {
+                        object32 = KWAPP_PORT_9203; 
+                        security = ETrue;
+                        }
+                    else
+                        {
+                        wapView->CancelRecordChanges();
+                        CleanupStack::PopAndDestroy(pushed);
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                        if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                            {
+                            if(iWAPRelock)
+                                {
+                                DoLockIAPTablesL(ETrue);
+                                iWAPRelock = EFalse;
+                                }
+                            }
+                        if(iapReLock)
+                            {
+                            TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                            if(reclockerr==KErrNone)
+                                iapReLock = EFalse; 
+                            }
+                            return;
+                        }
+                    wapView->WriteUintL(qColumn, object32);
+                    wapView->WriteBoolL(TPtrC(WAP_SECURITY), security );
+                    }
+                else
+                    {
+                    wapView->WriteTextL(TPtrC(qColumn),ConvertTo16LC(aObject));
+                    pushed++;
+                    }
+                }
+            wapView->PutRecordChanges();
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): wapaccesspoint record Changes DONE successfully ");  
+            if(wapaccesspointTableLocked)
+            {
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): wapaccesspoint record to be locked again "); 
+              TInt reclockerr = DoProtectWAPAccessRecordL(iWapId,ETrue);  
+              DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,Protecting WAPAccessRecord %d , returned code = %d"),iWapId,reclockerr);
+              wapaccesspointTableLocked = EFalse;
+            }
+            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                {
+                if(iWAPRelock)
+                    {
+                    DoLockIAPTablesL(ETrue);
+                    iWAPRelock = EFalse;
+                    }
+                }
+            if(iapReLock)
+                {
+                TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+                if(reclockerr==KErrNone)
+                    iapReLock = EFalse; 
+                }
+            CleanupStack::PopAndDestroy(pushed);
+            pushed = 0;
+            }
+        else
+            { // Insert handled
+            CCommsDbTableView* insView;
+            TInt wapInitOK = KErrCancel;
+            TBool iapReLock = EFalse;
+            
+            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                {
+                TBool apEnforce=EFalse;
+                TRAPD(eError,apEnforce=CheckEnforcementL())
+                DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+                if(eError==KErrNone && apEnforce)
+                    {
+                    DoLockIAPTablesL(EFalse);
+                    iWAPRelock = ETrue;
+                    }
+                }
+        if(iapReLock)
+            {
+            TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+            if(reclockerr==KErrNone)
+                iapReLock = EFalse; 
+            }
+            insView = iDatabase->OpenTableLC(TPtrC(WAP_ACCESS_POINT));
+            iWapId = 0;
+            wapInitOK = insView->InsertRecord(iWapId);
+            if(wapInitOK == KErrNone)
+                {
+                iWAPAccessPoint.Zero();
+                iWapUserName.Zero();
+                iWapPassword.Zero();
+
+                if(qColumn == TPtrC(WAP_START_PAGE))
+                    {
+                    iWAPAccessPoint = aObject;
+                    }
+                else if(qColumn == TPtrC(WAP_PROXY_LOGIN_NAME))
+                    {
+                    iWapUserName = aObject;
+                    }
+                else if(qColumn == TPtrC(WAP_PROXY_LOGIN_PASS))
+                    {
+                    iWapPassword = aObject;
+                    }
+
+                iWapBearer = TPtrC(WAP_IP_BEARER);
+                iWapName   = FirstURISeg(aURI); // Name needed !!!
+
+                wapInitOK = InitializeWAPIAPL( insView, iIAPName );
+                if( wapInitOK == KErrNone )
+                    {
+                    insView->PutRecordChanges();
+                    CleanupStack::PopAndDestroy(); // insView
+
+                    CCommsDbTableView* updView;
+                    TUint32 iWapId2 = 0;
+                    iISPId = iapID5; // IAP number set
+                    updView = iDatabase->OpenTableLC(TPtrC(WAP_IP_BEARER));
+                    if(updView->InsertRecord(iWapId2) == KErrNone )
+                        {
+                        wapInitOK = InitializeWAPL( updView );
+                        }
+                    else
+                        {
+                        wapInitOK = KErrGeneral;
+                        }
+                    if( wapInitOK == KErrNone )
+                        {
+                        if( !PxExistsL(iapID5) ) 
+                            {
+
+                            // Set mapping-data
+
+                            TPtrC8 addURI = GetAddURISeg(aURI,KNSmlDdfStartpg);
+                            TBuf8<16> addLUID;
+                            _LIT8(KFormat,"%d");    
+                            addLUID.Format(KFormat,iapID5); 
+                            iCallBack->SetMappingL(addURI,addLUID);
+                            }
+                        else if( !NAPDefExistsL(iapID5) ) 
+                            {
+
+                            // Set mapping-data
+
+                            TPtrC8 addURI = GetAddURISeg(aURI,KNSmlDdfStartpg);
+                            TBuf8<16> addLUID;
+                            _LIT8(KFormat,"%d");    
+                            addLUID.Format(KFormat,iapID5); 
+                            iCallBack->SetMappingL(addURI,addLUID);
+                            }
+
+                        updView->PutRecordChanges();
+                        CleanupStack::PopAndDestroy(); // updView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+                        
+                        if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                            {
+                            if(iWAPRelock)
+                                {
+                                DoLockIAPTablesL(ETrue);
+                                iWAPRelock = EFalse;
+                                }
+                            }
+                        if(iapReLock)
+                            {
+                            TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                            if(reclockerr==KErrNone)
+                                iapReLock = EFalse; 
+                            }
+                            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EOk end");
+                            return;
+                        }
+                    else
+                        {
+                        CleanupStack::PopAndDestroy(); // updView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                        
+                        if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                            {
+                            if(iWAPRelock)
+                                {
+                                DoLockIAPTablesL(ETrue);
+                                iWAPRelock = EFalse;
+                                }
+                            }
+                        if(iapReLock)
+                            {
+                            TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                            if(reclockerr==KErrNone)
+                                iapReLock = EFalse; 
+                            }
+                            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                            return;
+                        }
+                    }
+                else
+                    {
+                    insView->CancelRecordChanges();
+                    CleanupStack::PopAndDestroy(); // insView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    
+                    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                        {
+                        if(iWAPRelock)
+                            {
+                            DoLockIAPTablesL(ETrue);
+                            iWAPRelock = EFalse;
+                            }
+                        }
+                   if(iapReLock)
+                       {
+                       TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                       DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                       if(reclockerr==KErrNone)
+                           iapReLock = EFalse; 
+                       }
+                        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                        return;
+                        }
+                    }
+                else
+                    {
+                    CleanupStack::PopAndDestroy(); // insView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                        {
+                        if(iWAPRelock)
+                            {
+                            DoLockIAPTablesL(ETrue);
+                            iWAPRelock = EFalse;
+                            }
+                        }
+                    if(iapReLock)
+                        {
+                        TInt reclockerr = DoProtectIAPRecordL(iapID5,ETrue);
+                        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+                        if(reclockerr==KErrNone)
+                            iapReLock = EFalse; 
+                        }
+                    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                    return;
+                    }
+                }
+        }
+    else if ( fType == CNSmlInternetAdapter::ESpec )
+        { // BearerL + NoPxForL + IAPService + Direction
+        if (aURI.Find(KNSmlDdfDirection) >= 0)
+            {
+            _LIT8(KDirection,"Outgoing");
+            if(KDirection().Find(aObject) != KErrNotFound)
+                {
+                iDirection = ECommDbConnectionDirectionOutgoing;
+                }
+            else
+                {
+                iDirection = ECommDbConnectionDirectionIncoming;
+                if(iBearer == TPtrC(OUTGOING_GPRS))
+                    {
+                    iBearer = TPtrC(INCOMING_GPRS);
+                    }
+                }
+            }
+        else if (aURI.Find(KNSmlDdfIAPService) >= 0)
+            {
+            CleanupStack::PopAndDestroy(pushed); 
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+            return;
+            }
+        else if (aURI.Find(KNSmlDdfNoPxForL) >= 0) /* No proxies used field handling */
+            {
+            TBool proxyFound = GetProxyIdL(aURI);
+            if(!proxyFound)
+                {
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+                CleanupStack::PopAndDestroy(pushed); 
+                return;
+                }
+
+            CCommsDbTableView* specView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                                            TPtrC(COMMDB_ID),
+                                                                            iProxyId);
+            TInt errorCode = specView->GotoFirstRecord();
+    
+
+            if ( errorCode == KErrNone )
+                {
+                TBool proxyReLock = EFalse;
+        if(IsProxyRecordLockedL(iProxyId))
+        {
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");  
+        	  TInt reclockerr = ((CCommsDbProtectTableView*)specView)->UnprotectRecord();
+              DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting ProxyAccessRecord returned code = %d"),reclockerr);
+              if(reclockerr==KErrNone)
+                    proxyReLock = ETrue;
+        }
+        else
+        {
+              _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected"); 
+        }
+                if(specView->UpdateRecord()==KErrNone)
+                    {
+                    //database not locked
+                    specView->WriteLongTextL(TPtrC(PROXY_EXCEPTIONS), ConvertTo16LC(aObject));
+                    specView->PutRecordChanges();
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+                    CleanupStack::PopAndDestroy(); // ConvertTo16LC
+                    }
+                else
+                    {
+                    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                    }
+        if(proxyReLock)
+          {
+            TInt reclockerr = DoProtectProxyRecordL(iProxyId,ETrue);
+                  DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting ProxyAccessRecord returned code = %d"),reclockerr);
+                  if(reclockerr==KErrNone)
+                    proxyReLock = EFalse; 
+                    }
+                }
+            else
+                {
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                }
+            CleanupStack::PopAndDestroy(); // specView
+
+            CleanupStack::PopAndDestroy(pushed); 
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+            return;
+            }
+        else if (aURI.Find(KNSmlDdfBearerL) >= 0) /* Bearer handling */
+            {
+            if (aObject.Match(KNSmlDmApValGsmGprs) != KErrNotFound)
+                {
+                if(iDirection == ECommDbConnectionDirectionIncoming)
+                    {
+                    iBearer = TPtrC(INCOMING_GPRS);
+                    }
+                else
+                    {
+                    iBearer = TPtrC(OUTGOING_GPRS);
+                    }
+                }
+
+            else if (aObject.Match(KNSmlDmApVal3Gppps) != KErrNotFound)
+                {
+                i3GPPPS = ETrue;
+                if(iDirection == ECommDbConnectionDirectionIncoming)
+                    {
+                    iBearer = TPtrC(INCOMING_GPRS);
+                    }
+                else
+                    {
+                    iBearer = TPtrC(OUTGOING_GPRS);
+                    }
+                }
+            else if (aObject.Match(KNSmlDmApValVpn) != KErrNotFound) 
+                {
+                iBearer = TPtrC(VPN_SERVICE);
+                }
+            else if ( (aObject.Match(KNSmlDmApValWlan) != KErrNotFound )
+                    && iWlanSupported ) 
+                {
+                iBearer = TPtrC(LAN_SERVICE);
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(pushed); 
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): UNKNOWN Bearer Error end");
+                return;
+                }
+            }
+        else if (aURI.Find( KNSmlDdfNAPName ) >= 0)
+            {
+            iIAPName.Copy( aObject );
+            TUint32 iapID2 = GetAPIdFromURIL(aURI);
+            if( iapID2 > 0 && UpdateIAPnameL(iapID2,aObject) != KErrNone )
+                {
+                CleanupStack::PopAndDestroy(pushed);
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                return;
+                }
+            }
+        }
+
+    CleanupStack::PopAndDestroy(pushed);
+    pushed = 0; 
+
+//  Update CommsDB IAP + insert iBearer Table
+
+    if( IsInsertAllowedL() && iLeafType == EDMAdd && fType == CNSmlInternetAdapter::ESpec)  //iIAPExists  
+        {
+        TInt initOK = KErrCancel;
+
+        iISPId = GetMaxIdL() + 1;  // For new data
+
+        SaveIAPDataL(aURI); // Level 1 Mapping inside
+
+        CCommsDbTableView* newAPView;
+
+        newAPView = iDatabase->OpenTableLC(iBearer);
+        // 3GPPPS  = OUTGOING/INCOMING_GPRS
+        if (iBearer == TPtrC(OUTGOING_GPRS) ||
+            iBearer == TPtrC(INCOMING_GPRS))
+            {
+            if(newAPView->InsertRecord(iISPId)==KErrNone)
+                {
+                initOK = InitializeGPRSL(newAPView);
+                }
+            else
+                {
+                initOK = KErrGeneral;
+                }
+            }
+
+        else if(iBearer == TPtrC(VPN_SERVICE) ) 
+            {
+            if(newAPView->InsertRecord(iISPId)==KErrNone)
+                {
+                initOK = InitializeVPNServiceL(newAPView);
+                }
+            else
+                {
+                initOK = KErrGeneral;
+                }
+            }
+        else if( ( iBearer == TPtrC(LAN_SERVICE) ) && iWlanSupported ) 
+            {
+            if(newAPView->InsertRecord(iISPId)==KErrNone)
+                {
+                initOK = InitializeLANServiceL(newAPView);
+                }
+            else
+                {
+                initOK = KErrGeneral;
+                }
+            }
+        else
+            {
+            initOK = KErrCancel;
+            }
+
+        if ( initOK == KErrNone)
+            {
+            TUint32 newId = 0;
+            newAPView->PutRecordChanges();
+            newAPView->ReadUintL(TPtrC(COMMDB_ID), newId);
+
+            // To update right Id
+
+            iISPId = newId;
+
+            SaveIAPDataL(aURI);
+            
+            TUint32 iapID2 = GetAPIdFromURIL(aURI);
+            UpdateIAPnameL( iapID2, iIAPName );
+            //
+            // Set mapping-data (levels 2 and 3 )
+            //
+            TPtrC8 addURI = GetAddURISeg(aURI,KNSmlDdfNAPDef);
+
+            TBuf8<16> addLUID;
+            _LIT8(KFormat,"%d");    
+            addLUID.Format(KFormat,newId);  
+
+            // Also NAPDef  (level 2)
+            iCallBack->SetMappingL(addURI,addLUID);
+            DBG_ARGS8(_S8("AP:level2 URI - <%S> <%S> <%d>"), &addURI, &addLUID, newId );
+
+            // Also BearerL (level 3)
+            TPtrC8 addURI2 = GetAddURISeg(aURI,KNSmlDdfBearer);
+            if ( i3GPPPS )
+                {
+                newId = KNSmlAp3gpppsLowerBase+newId;
+                addLUID.Format(KFormat,newId);
+                i3GPPPS = EFalse;
+                }
+            iCallBack->SetMappingL(addURI2,addLUID);
+            DBG_ARGS8(_S8("AP:level3 URI - <%S> <%S> <%d>"), &addURI2, &addLUID, newId );
+            }
+        else
+            {
+            if(initOK==KErrCancel)
+                {
+                newAPView->CancelRecordChanges();
+                }
+            CleanupStack::PopAndDestroy(newAPView);
+            CleanupStack::PopAndDestroy(pushed);
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EError end");
+            return;
+            }
+
+        CleanupStack::PopAndDestroy(newAPView); 
+        }
+    else if(IsInsertAllowedL() && 
+            iLeafType == EDMAdd &&
+            aURI.Find(KNSmlDdfBearerL) >= 0 )
+
+        {
+        CleanupStack::PopAndDestroy(pushed);
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EAlreadyExists);
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): EAlreadyExists BearerL end");
+        return;
+        }
+    CleanupStack::PopAndDestroy(pushed);
+    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+    _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): OK end");
+    return;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, const TDesC8& aObject, const TDesC8& aType )
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+                                              const TDesC8& aLUID, 
+                                              const TDesC8& aObject, 
+                                              const TDesC8& aType, 
+                                              const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::UpdateLeafObjectL(): begin");
+
+    DBG_ARGS8(_S8("AP:update aURI UpdateLeafObjectL   - %S - %S"), &aURI, &aLUID);
+    DBG_ARGS8(_S8("AP:Object %S"), &aObject);
+    if( iTransactionCommitted )
+        {               
+        TInt dberr = iDatabase->BeginTransaction();
+        if( dberr == KErrLocked )
+            {
+            _DBG_FILE("UpdateLeafObjectL: CommsDat was locked.");
+            TInt retry = KBeginTransRetryCount;            
+            while ( retry > 0 && dberr == KErrLocked )
+                {
+                User::After(KBeginTransRetryDelay);
+                _DBG_FILE("UpdateLeafObjectL: Slept 1 second. Try again");
+                dberr = iDatabase->BeginTransaction();
+                retry--;
+                }
+            if(dberr != KErrNone)
+                {        
+                _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                User::Leave( dberr ); 
+                }           
+            }        
+        iTransactionCommitted = EFalse;
+        }  
+    if ( ( aURI.Match(_L8("*/WLAN*" )) != KErrNotFound ) && iWlanSupported )
+        {
+        AddLeafBufferL( aURI, aLUID, aObject, aType, aStatusRef, ETrue );
+        iDatabase->CommitTransaction();
+        iTransactionCommitted = ETrue;
+        _DBG_FILE("CNSmlInternetAdapter::UpdateLeafObjectL(): WLAN end");
+
+        return;
+        }
+//
+//  No direct update allowed only update as add
+//
+    if( aLUID.Length() > 0 &&
+            aURI.Find(KNSmlDdfNAPDef) >= 0 )
+        /*( aURI.Find(KNSmlDdfBearerL)   >= 0 ||
+          aURI.Find(KNSmlDdfDirection) >= 0 || 
+          aURI.Find(KNSmlDdfNAPName) >= 0 ) */ 
+        {
+        _DBG_FILE("Bearer | direction CNSmlInternetAdapter::UpdatelaefObject ( ): EError end");
+
+         AddLeafBufferL( aURI, aLUID, aObject, aType, aStatusRef, EFalse );
+         iDatabase->CommitTransaction();
+         iTransactionCommitted = ETrue;
+         return;
+        }
+    
+    iLeafType = EDMUpdate;
+
+    TRAP_IGNORE(AddLeafObjectL( aURI, aLUID, aObject, aType , aStatusRef ));
+    iDatabase->CommitTransaction();
+    iTransactionCommitted = ETrue;
+//
+//  If try to update field that has value which is not default errorvalue should be returned
+//
+    iLeafType = EDMUnset;
+
+    _DBG_FILE("CNSmlInternetAdapter::UpdateLeafObjectL(): end");
+
+    return;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+// const TDesC8& aLUID, const TDesC8& aObject, const TDesC8& aType )
+//------------------------------------------------------------------------------
+
+void CNSmlInternetAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, 
+                                              const TDesC8& /*aLUID*/,
+                                              RWriteStream*& /*aStream*/, 
+                                              const TDesC8& /*aType*/,
+                                              TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::UpdateLeafObjectL(RWriteStream): begin");
+    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlInternetAdapter::UpdateLeafObjectL(RWriteStream): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::DeleteObjectL( const TDesC& aURI, const TDesC& aLUID, 
+// const TInt aStatusRef )
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::DeleteObjectL( const TDesC8& aURI, 
+                                          const TDesC8& aLUID, 
+                                          const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL( ): begin");
+    if( iTransactionCommitted )
+        {
+        TInt dberr = iDatabase->BeginTransaction();
+        if( dberr == KErrLocked )
+            {
+            _DBG_FILE("DeleteObjectL: CommsDat was locked.");
+            TInt retry = KBeginTransRetryCount;            
+            while ( retry > 0 && dberr == KErrLocked )
+                {
+                User::After(KBeginTransRetryDelay);
+                _DBG_FILE("DeleteObjectL: Slept 1 second. Try again");
+                dberr = iDatabase->BeginTransaction();
+                retry--;
+                }
+            if(dberr != KErrNone)
+                {        
+                _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                User::Leave( dberr ); 
+                }           
+            }
+        iTransactionCommitted = EFalse;
+        }  
+
+    if( ( aURI.Match( _L8( "AP/*/NAPDef/*/WLAN/*" ) ) != KErrNotFound ) && iWlanSupported )
+        {
+        iWlanAdapter->DeleteObjectL( aURI, aLUID, aStatusRef );
+        _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL( ): end");
+        return;
+        }
+
+//
+//  Check which field going to be handled
+//
+    SetField(aURI);
+
+    iLUID = IntLUID(aLUID);
+
+    TUint32 checkLUID = IntLUID(aLUID); 
+//
+//  Check which kind node to be deleted (Leaf delete not supported)
+//
+    if( aURI.Match(_L8("AP/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/*"))== KErrNotFound )
+        {
+        // Check if AP exists
+        if(!APExistsL(checkLUID)) 
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): ENotFound end");
+            return;
+            }
+        if(DeleteAPL(checkLUID))
+            {
+            iPrevURI->Des().Format( KNullDesC8 );
+            iPrevLUID = 0;
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): EOk end");
+            return;
+            }
+        else
+            {
+            iPrevURI->Des().Format( KNullDesC8 );
+            iPrevLUID = 0;
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): EError end");
+            return;
+            }
+        }
+
+    if (aURI.Match(_L8("AP/*/Px/*/Startpg"  ))!= KErrNotFound) //Key for WAP-delete  
+        {
+        // Check if WAPAp exists
+        if(!WapAPExistsL(checkLUID)) 
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): ENotFound end");
+            return;
+            }
+        if(DeleteWapAPL(checkLUID))
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): EOk end");
+            return;
+            }
+        else
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): EError end");
+            return;
+            }
+        }
+    
+    if (aURI.Match(_L8("AP/*/NAPDef/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/NAPDef/*/*"))== KErrNotFound )
+        {
+        // Check if NAPDef exists
+        if(!NAPDefExistsL(checkLUID )) 
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): ENotFound end");
+            return;
+            }
+        if(DeleteNAPDefL(checkLUID))
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): EOk end");
+            return;
+            }
+        }
+    
+    if (aURI.Match(_L8("AP/*/Px/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/Px/*/*"))== KErrNotFound )
+        {
+        // Check if PX exists
+        if(!PxExistsL(checkLUID)) 
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): ENotFound end");
+            return;
+            }
+        if(DeleteProxyL(checkLUID))
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL(): EOk end");
+            return;
+            }
+        }
+
+    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlInternetAdapter::DeleteObjectL( ): end");
+    return;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::FetchLeafObjectSizeL()
+//------------------------------------------------------------------------------
+    
+void CNSmlInternetAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
+                                                 const TDesC8& aLUID,
+                                                 const TDesC8& aType, 
+                                                 TInt aResultsRef,
+                                                 TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectSizeL(): begin");
+
+    DBG_ARGS8(_S8("AP:Fetch aURI - %S - %S"), &aURI, &aLUID);
+    CBufBase *lObject = CBufFlat::NewL(128);
+    CleanupStack::PushL(lObject);
+
+    // call to internal fetchleafobj.
+    CSmlDmAdapter::TError status = FetchLeafObjectL( aURI, aLUID, aType, *lObject );
+
+    if ( status == CSmlDmAdapter::EOk )
+        {
+        lObject->Compress();
+        TBuf8<8> size;
+        size.Num( lObject->Size() );
+        lObject->Reset();
+        lObject->InsertL(0, size );
+        iCallBack->SetResultsL(aResultsRef, *lObject, aType);
+        }
+    iCallBack->SetStatusL(aStatusRef, status);
+
+    CleanupStack::PopAndDestroy(lObject);
+    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectSizeL(): end");
+
+    return;
+    }                                                
+
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::FetchLeafObjectL()
+//------------------------------------------------------------------------------
+
+void CNSmlInternetAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+                                             const TDesC8& aLUID, 
+                                             const TDesC8& aType, 
+                                             const TInt aResultsRef, 
+                                             const TInt aStatusRef  )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(): begin");
+
+    DBG_ARGS8(_S8("AP:Fetch aURI - %S - %S"), &aURI, &aLUID);
+    CBufBase *lObject = CBufFlat::NewL(128);
+    CleanupStack::PushL(lObject);
+
+    // Add call to internal fetchleafobj
+    CSmlDmAdapter::TError status = FetchLeafObjectL( aURI, aLUID, aType, *lObject );
+    if ( status == CSmlDmAdapter::EOk )
+        {
+        iCallBack->SetResultsL(aResultsRef,*lObject,aType);
+        }
+    iCallBack->SetStatusL(aStatusRef, status);
+
+    CleanupStack::PopAndDestroy(); //lObject 
+    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(): end");
+    return;
+    }
+
+
+
+//------------------------------------------------------------------------------
+// CSmlDmInternetAdapter::FetchLeafObjectL()
+//------------------------------------------------------------------------------
+    
+CSmlDmAdapter::TError CNSmlInternetAdapter::FetchLeafObjectL( 
+    const TDesC8& aURI,
+    const TDesC8& aLUID,
+    const TDesC8& aType,
+    CBufBase& aObject )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)(): begin");
+    
+    TInt pushed = 0;
+    TUint32 iapID = 0;
+    TBool treeConstructed(EFalse);  
+    //
+    // If no proxy no fetch allowed 
+    //
+    if (aURI.Match(_L8("AP/*/Px/*"  ))!= KErrNotFound)
+        {
+        if(!GetProxyIdL(aURI)) 
+            {
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+            return CSmlDmAdapter::ENotFound;
+            }
+        }
+  if(!iLUID)
+    iLUID = IntLUID(aLUID);
+
+    iapID = GetAPIdFromURIL(aURI);
+  
+    if( iapID == 0 )
+    {
+      if( IsAPUriFormatMatchPredefined(aURI) )
+      {
+        iLUID = ConstructTreeL(aURI);
+        iapID = GetAPIdFromURIL(aURI);
+        treeConstructed = ETrue;
+      }
+       
+    }
+    // Check if values for Given LUID
+    if (!iLUID
+      && (!IsWLANfield( aURI ) || !iWlanSupported) )
+        {
+        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+        return CSmlDmAdapter::ENotFound;
+        }
+//
+//  Check which field going to be handled
+//
+    SetField(aURI);
+
+    aObject.Reset();
+
+//Linger value 
+    if((iField->Compare(KNSmlDdfNAPLinger) == 0))
+    {
+      TInt lingerInterval;
+      TRAPD (err, GetLingerL( iapID, lingerInterval ));
+      if(err == KErrNotFound)
+      {
+        
+        return CSmlDmAdapter::ENotFound;
+      }
+      else if( err !=KErrNone)
+      {
+        
+        return CSmlDmAdapter::EError;
+        
+      }
+      else
+      { 
+        TBuf<10> slinger;
+        slinger.AppendNum(lingerInterval);
+        
+        aObject.InsertL(aObject.Size(),ConvertTo8LC(slinger));
+        CleanupStack::PopAndDestroy();
+        return CSmlDmAdapter::EOk;
+      }
+  }
+    TPtrC qTable  = TPtrC(KNullDesC);
+    TPtrC qColumn = TPtrC(KNullDesC);
+    TPtrC qDB = TPtrC(COMMDB_ID);
+
+    if(aURI.Find(KNSmlDdfPortNbr) >= 0) // Check if WAP or PROXY port asked
+        {
+        _LIT8( KWap, "/WAP" );
+        if(aURI.Find(KWap) >= 0)
+            {
+            iWapPort = ETrue;
+            }
+        else
+            {
+            iWapPort = EFalse;
+            }
+        }
+
+
+    if ( iWlanSupported )
+      {
+      TBool wLANfield = IsWLANfield(aURI);
+      if(wLANfield)
+        {
+        //
+        //      WLAN-adapter handles all WLAN fields
+        //
+        return iWlanAdapter->FetchLeafObjectL(aURI, aLUID, aType, aObject);
+        }
+      }
+
+//
+//  Get Database field type 
+//
+    TInt fType = GetAPFieldType( aURI );
+
+    if (fType == EWrong)
+        {
+        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): EError end");
+        return CSmlDmAdapter::EError;
+        }
+//
+    iISPId = iLUID;
+//
+//  IAP-table search serviceType (=Bearer)
+
+    CCommsDbTableView* serviceView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                       qDB,
+                                                                       iapID);
+    
+    TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+    TUint32 serviceId = 0;
+
+    TInt errorCode = serviceView->GotoFirstRecord();
+    
+    // Read serviceType from (IAP)
+    if ( errorCode == KErrNone )
+        {
+        serviceView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+        serviceView->ReadUintL(TPtrC(IAP_SERVICE),      serviceId);
+        CleanupStack::PopAndDestroy(); // serviceView
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(); // serviceView
+        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+        CleanupStack::PopAndDestroy(pushed);
+        return CSmlDmAdapter::ENotFound;
+        }
+    qTable.Set(serviceType);
+
+    TBool allowed = GetAPField(qTable,qColumn);
+
+    if(!allowed)
+        {
+        if( aURI.Find(KNSmlDdfNAPAddrTy) >= 0)      /* NAPAddrTy handling */
+            {
+            if (serviceType == TPtrC(OUTGOING_GPRS) ||
+                serviceType == TPtrC(INCOMING_GPRS))
+                {
+                _LIT8( KApn, "APN" );
+                aObject.InsertL(aObject.Size(), KApn );
+
+                }
+            CleanupStack::PopAndDestroy(pushed); 
+            return CSmlDmAdapter::EOk;
+
+            }
+        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): FieldNot allowed");
+        CleanupStack::PopAndDestroy(pushed); 
+        return CSmlDmAdapter::EError;
+        }
+
+    if (fType == CNSmlInternetAdapter::EStr)
+        { // Name + NAPAddr + DNSAddrL
+        if(aURI.Match(_L8("AP/*/Networks/*/Name"))!= KErrNotFound ) // Networks-name
+            {
+            TUint32 iapID8 = IntLUID(aLUID);
+
+            //  IAP-table NetworkId Fetch
+            CCommsDbTableView* networkView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                               TPtrC(COMMDB_ID),
+                                                                               iapID8);
+            networkView->GotoFirstRecord();
+            TRAPD(leavecode,networkView->ReadUintL(TPtrC(IAP_NETWORK), iISPId));
+            CleanupStack::PopAndDestroy(); // networkView
+            if(leavecode != 0)
+                {
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                CleanupStack::PopAndDestroy(pushed); 
+                return CSmlDmAdapter::ENotFound;
+                }
+
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(NETWORK),
+                                                                             TPtrC(COMMDB_ID),
+                                                                             iISPId);
+
+            errorCode = tableView->GotoFirstRecord();
+    
+
+            if ( errorCode == KErrNone )
+                {
+                TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+
+                tableView->ReadTextL(qColumn, columnValue);
+            
+                aObject.InsertL(aObject.Size(),ConvertTo8LC(columnValue));
+                pushed++;
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // tableView
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                CleanupStack::PopAndDestroy(pushed); 
+                return CSmlDmAdapter::ENotFound;
+                }
+            }
+        else if(aURI.Match(_L8("AP/*/Px/*/Name"))   != KErrNotFound ||  // ProxyName
+                aURI.Match(_L8("AP/*/Px/*/PxAddr")) != KErrNotFound ||  // ProxyAddr
+                aURI.Match(_L8("AP/*/Px/*/DomainL")) != KErrNotFound )  // DomainL (PROXY_PROTOCOL_NAME)
+            {
+            CCommsDbTableView* proxyView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                                             TPtrC(COMMDB_ID),
+                                                                             iProxyId);
+
+            errorCode = proxyView->GotoFirstRecord();
+    
+
+            if ( errorCode == KErrNone )
+                {
+                if(aURI.Match(_L8("AP/*/Px/*/DomainL"))!= KErrNotFound)
+                    {
+                    TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+    
+                    proxyView->ReadTextL(TPtrC(PROXY_PROTOCOL_NAME), columnValue);
+                
+                    aObject.InsertL(aObject.Size(),ConvertTo8LC(columnValue));
+                    pushed++;
+                    }
+
+                else if(aURI.Match(_L8("AP/*/Px/*/PxAddr"))!= KErrNotFound)
+                    {
+                    HBufC* serverName = proxyView->ReadLongTextLC(TPtrC(PROXY_SERVER_NAME));
+                    pushed++;
+
+                    aObject.InsertL(aObject.Size(),ConvertTo8LC(*serverName));
+                    pushed++;
+                    }
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // proxyView
+                CleanupStack::PopAndDestroy(pushed); 
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                return CSmlDmAdapter::ENotFound;
+                }
+            }
+        else
+            {
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                             qDB,
+                                                                             serviceId);
+    
+            errorCode = tableView->GotoFirstRecord();
+    
+
+            if ( errorCode == KErrNone )
+                {
+                if ( aURI.Find(KNSmlDdfDNSPriority) >= 0)    /* DNSPriority */
+                    {
+                    UriUtils::TUriHostType theType;
+                    TInt dnsPri;
+                    
+                    // This resets iLUID to match aLUID, which is needed in this case.
+                    // Otherwise iLUID has a different value
+                    if(!treeConstructed)
+                       iLUID = IntLUID(aLUID);
+
+                    if ( LuidToDns( theType, dnsPri, iLUID ) == KErrNone )
+                        {
+                        if ( dnsPri == 1 )
+                            {
+                            aObject.InsertL( aObject.Size(), KNSmlFirstDNSPri );
+                            }
+                        else
+                            {
+                            aObject.InsertL( aObject.Size(), KNSmlSecondDNSPri );
+                            }
+                        }
+                    else
+                        {
+                        CleanupStack::PopAndDestroy(tableView); // tableView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                        return CSmlDmAdapter::ENotFound;
+                        }
+                    }
+                else if ( aURI.Find(KNSmlDdfDNSAddrTy) >= 0)    /* DNSAddrTy */
+                    {
+                    UriUtils::TUriHostType theType;
+                    TInt dnsPri;
+                    // This resets iLUID to match aLUID, which is needed in this case.
+                    // Otherwise iLUID has a different value
+                    if(!treeConstructed)
+                    iLUID = IntLUID(aLUID);
+                    if ( LuidToDns( theType, dnsPri, iLUID ) == KErrNone )
+                        {
+                        if ( theType ==  UriUtils::EIPv4Host)
+                            {
+                            aObject.InsertL( aObject.Size(), KNSmlDNSIp );
+                            }
+                        else
+                            {
+                            aObject.InsertL( aObject.Size(), KNSmlDNSIp6 );
+                            }
+                        }
+                    else
+                        {
+                        CleanupStack::PopAndDestroy(tableView); // tableView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                        return CSmlDmAdapter::ENotFound;
+                        }
+                    }
+                else
+                    {
+                    TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+                    if ( aURI.Find(KNSmlDdfDNSAddrL ) >= 0)
+                        {
+                        UriUtils::TUriHostType theType;
+                        TInt dnsPri;
+                        
+                        // This resets iLUID to match aLUID, which is needed in this case.
+                        // Otherwise iLUID has a different value
+                        if(!treeConstructed)
+                        iLUID = IntLUID(aLUID);
+                        if ( LuidToDns( theType, dnsPri, iLUID ) == KErrNone )
+                            {
+                            if ( dnsPri == 1)
+                                {
+                                if ( theType == UriUtils::EIPv4Host )
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP_NAME_SERVER1 ));
+                                    }
+                                else
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP6_NAME_SERVER1 ));
+
+                                    }
+                                }
+                            else
+                                {
+                                if ( theType == UriUtils::EIPv4Host )
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP_NAME_SERVER2 ));
+                                    }
+                                else
+                                    {
+                                    qColumn.Set( TPtrC(SERVICE_IP6_NAME_SERVER2 ));
+
+                                    }
+                                }
+                            }
+                        else
+                            {
+                            CleanupStack::PopAndDestroy(tableView); // tableView
+                            CleanupStack::PopAndDestroy(pushed); 
+                            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                            return CSmlDmAdapter::ENotFound;
+                            }
+                        }
+                    TRAPD(leavecode,tableView->ReadTextL(qColumn,  columnValue));
+                    if(leavecode != 0)
+                        {
+                        CleanupStack::PopAndDestroy(); // tableView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                        return CSmlDmAdapter::ENotFound;
+                        }
+                    aObject.InsertL(aObject.Size(),ConvertTo8LC(columnValue));
+                    pushed++;
+                    }
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // tableView
+                CleanupStack::PopAndDestroy(pushed); 
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                return CSmlDmAdapter::ENotFound;
+                }
+            }
+        CleanupStack::PopAndDestroy(); // tableView
+        }
+    else if (fType == CNSmlInternetAdapter::EBool)
+        { // UseCB
+        CCommsDbTableView* boolView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                        qDB,
+                                                                        serviceId);
+        
+        errorCode = boolView->GotoFirstRecord();
+
+        TBool objectBool = EFalse;
+        if ( errorCode == KErrNone )
+            {
+            TRAPD(leavecode,boolView->ReadBoolL(qColumn,objectBool ));
+            if(leavecode == KErrUnknown ) // value is null
+                {
+                }
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(); // boolView
+            CleanupStack::PopAndDestroy(pushed); 
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): EError end");
+            return CSmlDmAdapter::EError;
+            }
+
+        if (objectBool)
+            {
+            aObject.InsertL(aObject.Size(),KNSmlDmApValTrue);
+            }
+        else
+            {
+            aObject.InsertL(aObject.Size(),KNSmlDmApValFalse);
+            }
+
+        CleanupStack::PopAndDestroy(); // boolView
+        }
+    else if (fType == CNSmlInternetAdapter::EInt)
+        { // NAPId +Bearer + NAPAddrTy + PxID + PortNbr + UsePTxtLog
+          // CBTy + LnkSpeed
+
+        if(aURI.Match(_L8("AP/*/Px/*/PxID"))!= KErrNotFound )
+            {
+            aObject.InsertL(aObject.Size(),SetIntObjectLC(iISPId)); 
+            pushed++;
+            }
+    
+         else if (aURI.Find(KNSmlDdfIAPSeamlessness) >= 0 )  /* Seamlessness handling */
+            {
+                TInt seam = GetIAPSeamlessnessL(iapID);
+                aObject.InsertL(aObject.Size(),SetIntObjectLC(seam)); 
+                pushed++;
+            }
+        else if(aURI.Find(KNSmlDdfIAPMetaData) >= 0)
+            {
+                TInt meta = GetIAPMetaDataL(iapID);
+                aObject.InsertL(aObject.Size(),SetIntObjectLC(meta)); 
+                pushed++;
+            }
+          
+        else if(aURI.Match(_L8("AP/*/Networks/*/ID"))!= KErrNotFound )
+            {
+
+            iISPId= IntLUID(aLUID);
+
+            CCommsDbTableView* nwidView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                            TPtrC(COMMDB_ID),
+                                                                            iISPId);
+            nwidView->GotoFirstRecord();
+            nwidView->ReadUintL(TPtrC(IAP_NETWORK), iISPId);
+            CleanupStack::PopAndDestroy(); // nwidView
+
+            aObject.InsertL(aObject.Size(),SetIntObjectLC(iISPId)); 
+            pushed++;
+            }
+        else if(aURI.Match(_L8("AP/*/Px/*/PortNbr"))!= KErrNotFound )
+            {
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): PortNbr");
+            DBG_ARGS8(_S8("iISPId = %d "), iISPId );
+            DBG_ARGS8(_S8("proxyid = %d "), iProxyId );
+            CCommsDbTableView* portView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                TPtrC(COMMDB_ID),
+                                                iProxyId);
+
+            errorCode = portView->GotoFirstRecord();
+            
+
+            if ( errorCode == KErrNone )
+                {
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): Portview opened");
+                TUint32 object32=0;
+
+                TRAPD(leavecode,portView->ReadUintL(qColumn,object32 ));
+                if(leavecode == KErrNone)
+                    {
+                    aObject.InsertL(aObject.Size(),SetIntObjectLC(object32));
+                    pushed++;
+                    }
+                else
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): db read failed");
+                    CleanupStack::PopAndDestroy(); // portView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): EError end");
+                    return CSmlDmAdapter::EError;
+                    }
+                }
+            else
+                {
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): Portview opening failed");
+                CleanupStack::PopAndDestroy(); // portView
+                CleanupStack::PopAndDestroy(pushed); 
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                return CSmlDmAdapter::ENotFound;
+                }
+            CleanupStack::PopAndDestroy(); // portView
+            }
+        else if(aURI.Match(_L8("AP/*/NAPID"))!= KErrNotFound ||
+                aURI.Match(_L8("AP/*/ToNAPIDL"))!= KErrNotFound )
+            {
+            iObject = iapID;
+            TPtrC8 napidUri = FirstURISeg(aURI);
+            aObject.InsertL(aObject.Size(),napidUri);
+
+            }
+        else
+            {
+            iObject = 0;
+
+            CCommsDbTableView* colView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                           qDB,
+                                                                           serviceId);
+        
+            errorCode = colView->GotoFirstRecord();
+
+            TUint32 object32 = 0;
+            if ( errorCode == KErrNone )
+                {
+                if(aURI.Find(KNSmlDdfUsePTxtLog) >= 0)
+                    {
+                    TBool objectBool = EFalse;
+                    TRAPD(leavecode,colView->ReadBoolL(qColumn,objectBool ));
+                    errorCode = leavecode;
+                    object32 = objectBool;
+                    }
+                else
+                    {
+                    TRAPD(leavecode,colView->ReadUintL(qColumn,object32 ));
+                    errorCode = leavecode;
+                    }
+                }
+
+            if ( errorCode == KErrNone )
+                {
+
+                if (aURI.Find(KNSmlDdfNAPAddrTy) >= 0 || /* NAPAddrTy handling */
+                    aURI.Find(KNSmlDdfGPRSPDP)   >= 0) /* NAPAddrTy handling */
+                    {
+                    if(object32 == RPacketContext::EPdpTypeIPv4)
+                        {
+                        aObject.InsertL(aObject.Size(),KNSmlDmApValIpv4);    
+                        }
+                    else if (object32 == RPacketContext::EPdpTypeIPv6)
+                        {
+                        aObject.InsertL(aObject.Size(), KNSmlDmApValIpv6);
+                        }
+                    else if (object32 == RPacketContext::EPdpTypePPP)
+                        {
+                        _LIT8( KPpp, "PPP" );
+                        aObject.InsertL(aObject.Size(),KPpp);
+                        }
+                    else 
+                        {
+                        aObject.InsertL(aObject.Size(),KNullDesC8);
+                        }
+                    }
+                else
+                    {
+                    aObject.InsertL(aObject.Size(),SetIntObjectLC(object32));
+                    pushed++;
+                    }
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy(); // colView
+                CleanupStack::PopAndDestroy(pushed); 
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                return CSmlDmAdapter::ENotFound;
+                }
+            CleanupStack::PopAndDestroy(); // colView
+            }
+        }
+
+    else if (fType == CNSmlInternetAdapter::EWap)
+        { // Startpg + PxAuthId + PxAuthPW + PortNbr (BasAuthId + BasAuthPW)
+        CCommsDbTableView* wapView = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_IP_BEARER),
+                                                                       TPtrC(WAP_IAP),
+                                                                       iapID);
+
+        errorCode = wapView->GotoFirstRecord();
+    
+        if ( errorCode == KErrNone )
+            {
+            TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+
+            if(qColumn == TPtrC(WAP_START_PAGE))
+                {
+                TRAPD(leavecode,wapView->ReadUintL(TPtrC(WAP_ACCESS_POINT_ID), iWapId));
+                CleanupStack::PopAndDestroy(); // wapView
+                if(leavecode != KErrNone)
+                    {
+                    CleanupStack::PopAndDestroy(pushed); 
+                    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): EError end");
+                    return CSmlDmAdapter::EError;
+    
+                    }
+
+                CCommsDbTableView* wapView2 = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_ACCESS_POINT),
+                                                                                TPtrC(COMMDB_ID),
+                                                                                iWapId);
+
+                errorCode = wapView2->GotoFirstRecord();
+                if ( errorCode != KErrNone )
+                    {
+                    CleanupStack::PopAndDestroy(); // wapView2
+                    CleanupStack::PopAndDestroy(pushed); 
+                    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                    return CSmlDmAdapter::ENotFound;
+                    }
+
+                HBufC* tmpVal = wapView2->ReadLongTextLC( qColumn );
+                
+                aObject.InsertL(aObject.Size(),ConvertTo8LC(tmpVal->Des()));
+                CleanupStack::PopAndDestroy(); // ReadLongTextLC
+                CleanupStack::PopAndDestroy(); // wapView2
+                pushed++;
+                }
+            else
+                {
+                if(qColumn == TPtrC(WAP_PROXY_PORT))
+                    {
+                    TUint32 object32;
+                    wapView->ReadUintL(qColumn, object32);
+                    if(object32 == KWAPP_PORT_9200) // wappdef.h
+                        {
+                        aObject.InsertL(aObject.Size(),ConvertTo8LC(KWappPort9200));    
+                        }
+                    else if(object32 == KWAPP_PORT_9201)
+                        {
+                        aObject.InsertL(aObject.Size(),ConvertTo8LC(KWappPort9201));    
+                        }
+                    else if(object32 == KWAPP_PORT_9202)
+                        {
+                        aObject.InsertL(aObject.Size(),ConvertTo8LC(KWappPort9202));    
+                        }
+                    else if(object32 == KWAPP_PORT_9203)
+                        {
+                        aObject.InsertL(aObject.Size(),ConvertTo8LC(KWappPort9203));
+                        }
+                    else
+                        {
+                        CleanupStack::PopAndDestroy(); // wapView
+                        CleanupStack::PopAndDestroy(pushed); 
+                        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                        return CSmlDmAdapter::ENotFound;
+                        }
+
+                    pushed++;
+                    }
+                else
+                    {
+                    wapView->ReadTextL(qColumn, columnValue);
+                    aObject.InsertL(aObject.Size(),ConvertTo8LC(columnValue));
+                    pushed++;
+                    }
+                CleanupStack::PopAndDestroy(); // wapView
+                }
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(); // wapView
+            CleanupStack::PopAndDestroy(pushed); 
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+            return CSmlDmAdapter::ENotFound;
+            }
+        }
+    else if (fType == CNSmlInternetAdapter::ESpec)
+        { 
+        // name
+        if ( aURI.Find( KNSmlDdfNAPName ) >= 0 )
+            {
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                             qDB,
+                                                                             serviceId);
+                
+            errorCode = tableView->GotoFirstRecord();
+                
+            if ( errorCode == KErrNone )
+                {
+                TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+                TRAPD(leavecode,tableView->ReadTextL(qColumn,  columnValue));
+                if(leavecode != 0)
+                    {
+                    CleanupStack::PopAndDestroy(); // tableView
+                    CleanupStack::PopAndDestroy(pushed); 
+                    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                    return CSmlDmAdapter::ENotFound;
+                    }
+                aObject.InsertL(aObject.Size(),ConvertTo8LC(columnValue));
+                pushed++;
+                }
+            CleanupStack::PopAndDestroy(); // tableView
+            }
+        // BearerL + NoPxForL + IAPService
+        else if (aURI.Find(KNSmlDdfIAPService) >= 0) 
+            {
+            aObject.InsertL(aObject.Size(),SetIntObjectLC(serviceId)); 
+            pushed++;
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): EOk end");
+            CleanupStack::PopAndDestroy(pushed); 
+            return CSmlDmAdapter::EOk;
+            }
+        else if (aURI.Find(KNSmlDdfNoPxForL) >= 0) /* No proxies used handling */
+            {
+            TBool proxyFound = GetProxyIdL(aURI);
+            if(!proxyFound)
+                {
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                CleanupStack::PopAndDestroy(pushed); 
+                return CSmlDmAdapter::ENotFound;
+                } 
+
+            CCommsDbTableView* exeptionView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                                                TPtrC(COMMDB_ID),
+                                                                                iProxyId);
+            errorCode = exeptionView->GotoFirstRecord();
+    
+            if ( errorCode == KErrNone )
+                {
+                HBufC* proxyExceptions = exeptionView->ReadLongTextLC(TPtrC(PROXY_EXCEPTIONS));
+                pushed++;
+    
+                aObject.InsertL(aObject.Size(),ConvertTo8LC(*proxyExceptions));
+                pushed++;
+                }
+            else
+                {
+                _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): ENotFound end");
+                CleanupStack::PopAndDestroy(pushed); 
+                return CSmlDmAdapter::ENotFound;
+                }
+            CleanupStack::PopAndDestroy(); // exeptionView
+
+            _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)()(): EOk end");
+            CleanupStack::PopAndDestroy(pushed); 
+            return CSmlDmAdapter::EOk;
+            }
+
+        if(aURI.Find(KNSmlDdfDirection) >= 0)
+            {
+            if (serviceType == TPtrC(OUTGOING_GPRS))
+                {
+                aObject.InsertL(aObject.Size(),KNSmlDmApValOutgoing);
+                }
+            else if (serviceType == TPtrC(INCOMING_GPRS))
+                {
+                aObject.InsertL(aObject.Size(),KNSmlDmApValIncoming);
+                }
+            else if (serviceType == TPtrC(LAN_SERVICE)) // Wlan ADD
+                {
+                aObject.InsertL(aObject.Size(),KNSmlDmApValOutgoing);
+                }
+            else if (serviceType == TPtrC(VPN_SERVICE)) 
+                {
+                aObject.InsertL(aObject.Size(),KNSmlDmApValOutgoing);
+                }
+            else 
+                {
+                _LIT8( KDirectionUnk, "DirectionUnknown");
+                aObject.InsertL(aObject.Size(),KDirectionUnk);
+                }
+            }
+        else
+            {
+            if (serviceType == TPtrC(OUTGOING_GPRS) ||
+                serviceType == TPtrC(INCOMING_GPRS))
+                {
+                if (i3GPPPS)
+                    {
+                    aObject.InsertL(aObject.Size(),KNSmlDmApVal3Gppps);
+                    i3GPPPS = EFalse;
+                    }
+                else
+                    {
+                    aObject.InsertL(aObject.Size(),KNSmlDmApValGsmGprs);
+                    }
+                
+                }
+
+            else if (serviceType == TPtrC(OUTGOING_GPRS) ||
+                     serviceType == TPtrC(INCOMING_GPRS))
+                {
+                if (i3GPPPS)
+                    {
+                    aObject.InsertL(aObject.Size(),KNSmlDmApVal3Gppps);
+                    i3GPPPS = EFalse;
+                    }
+                else
+                    {
+                    aObject.InsertL(aObject.Size(),KNSmlDmApValGsmGprs);
+                    }
+                
+                }
+            else if (serviceType == TPtrC(VPN_SERVICE)) 
+                {
+                aObject.InsertL(aObject.Size(),KNSmlDmApValVpn);
+                }
+
+            else if ( ( serviceType == TPtrC(LAN_SERVICE) && iWlanSupported ) ) 
+                {
+                aObject.InsertL(aObject.Size(),KNSmlDmApValWlan);
+                }
+            else 
+                {
+                _LIT8( KUnkBearer, "Unknown Bearer");
+                aObject.InsertL(aObject.Size(),KUnkBearer);
+                }
+            }
+        }
+    else 
+        {
+        _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)(): ENotFound end");
+        CleanupStack::PopAndDestroy(pushed); 
+        return CSmlDmAdapter::ENotFound;
+        }
+
+    _DBG_FILE("CNSmlInternetAdapter::FetchLeafObjectL(internal)(): end");
+    CleanupStack::PopAndDestroy(pushed); 
+    return CSmlDmAdapter::EOk;
+    
+    }
+
+//------------------------------------------------------------------------------
+// CSmlDmAdapter::ChildURIListL()
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::ChildURIListL( const TDesC8& aURI, 
+                                          const TDesC8& aLUID, 
+                                          const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
+                                          const TInt aResultsRef, 
+                                          const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): begin");
+    DBG_ARGS8(_S8("AP:ChildURIListL URI - <%S> <%S>"), &aURI, &aLUID );
+
+    CBufBase* currentURISegmentList = CBufFlat::NewL(128);
+    CleanupStack::PushL(currentURISegmentList);
+    
+    TUint32 checkLUID = IntLUID(aLUID);
+    
+    // If this is command to proxy node we'll need to make sure that
+    // the LUID is for proxy node and not AP node.
+    // If this command comes to predefined AP node then 
+    // the LUID passed is inherited from that node and is not
+    // proper proxy node.
+    if ( aURI.Match(_L8("AP/*/Px/*" ))!= KErrNotFound )
+        {    
+        TLex8 lex(aLUID);
+        TUint tempLUID;
+        if ( !((lex.Val( tempLUID ) == KErrNone ) 
+              && ( tempLUID > KNSmlApProxyLowerBase ) 
+              && ( tempLUID < KNSmlApProxyUpperBase )) )                                     
+            {
+               // Non-proxy LUID         
+                checkLUID = 0;
+            }        
+        }   
+     
+    // Fetch all data for child
+    if ( !checkLUID 
+      && ( !IsWLANfield( aURI ) || !iWlanSupported ) )  
+        {
+        if(aURI.Match(KNSmlDdfAP)== KErrNotFound) // Not for AP
+            {
+            CleanupStack::PopAndDestroy(); // currentURISegmentList
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ENotFound end");
+            return;
+            }
+        }
+
+    TUint32 apId = GetAPIdFromURIL( aURI );
+    
+    if( aURI.Match( _L8("AP/*") ) != KErrNotFound && 
+        !APExistsL( apId ) )
+        {
+        if ( aLUID.Length() > 0 )
+            {
+            // Stale data, remove mapping. 
+            RNSmlDMCallbackSession dMCbSession;
+            User::LeaveIfError( dMCbSession.Connect() );
+            CleanupClosePushL( dMCbSession );
+        
+            dMCbSession.RemoveMappingInfoL( KNSmlInternetAdapterImplUid, GetDynamicAPNodeUri( aURI ), ETrue );
+            CleanupStack::PopAndDestroy( &dMCbSession );
+            }
+        
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): AP doesn't exist: ENotFound end");
+        return;
+        }
+    
+    if( aURI.Match(_L8("AP/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/*"))== KErrNotFound )
+        {
+        // Check if AP exists
+        if(!APExistsL(checkLUID)) 
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            CleanupStack::PopAndDestroy(); // currentURISegmentList
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ENotFound end");
+            return;
+            }
+        currentURISegmentList->InsertL( 0, KNSmlAPnode); 
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): end");
+        return;
+        }
+
+    // Check that queried proxy exists
+    if (aURI.Match(_L8("AP/*/Px/*" ))!= KErrNotFound &&
+        !PxExistsL(checkLUID))
+        {
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ENotFound end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Px/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/Px/*/*"))== KErrNotFound )
+        {
+        // Check if PX exists
+        if(!PxExistsL(checkLUID)) 
+            {
+            // Only WAP-data  
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            CleanupStack::PopAndDestroy(); // currentURISegmentList
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ENotFound end");
+            return;
+            }
+        // List all Px
+        currentURISegmentList->InsertL( 0, KNSmlPxnode ); 
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): OK end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/NAPDef/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/NAPDef/*/*"))== KErrNotFound )
+        {
+        // Check if IAP has luid mapped
+        HBufC8* iapIdBuf = iCallBack->GetLuidAllocL(RemoveLastSeg(aURI));
+        TInt iapIdInt = GetIntObject8(iapIdBuf->Des());
+        
+        delete iapIdBuf;
+        iapIdBuf = NULL;
+        
+        if ( iapIdInt > 0 )
+            {
+            CCommsDbTableView* iapView = iDatabase->OpenViewMatchingUintLC(
+                TPtrC(IAP),TPtrC(COMMDB_ID), iapIdInt);
+            TInt error = iapView->GotoFirstRecord();
+            TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+            if (error == KErrNone)
+                {
+                iapView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+                }
+            CleanupStack::PopAndDestroy( iapView );
+
+            // Check if NAPDef exists
+            if(!NAPDefExistsL(checkLUID)) 
+                {
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                CleanupStack::PopAndDestroy(); // currentURISegmentList
+                _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ENotFound end");
+                return;
+                }
+            // List all NAPDef
+            if(IsWlanL(aURI) && iWlanSupported )
+                {
+                iWlanAdapter->ChildURIListL(aURI,aLUID,aPreviousURISegmentList,aResultsRef,aStatusRef); 
+                CleanupStack::PopAndDestroy(); // currentURISegmentList
+                _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): WLAN end");
+                return;
+                }
+            _LIT( KGprs, "*GPRS*");
+            _LIT( K3gppps, "*3GPPPS*");
+            if ( serviceType.Match(KGprs) != KErrNotFound ||
+                 serviceType.Match(K3gppps) != KErrNotFound)
+                {
+                currentURISegmentList->InsertL( 0 ,KNSmlNAPDefGPRSnode);
+                }
+
+#ifdef __SYNCML_DM_LSCRIPT
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlLoginscriptnode); 
+#endif
+
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+            }
+        else
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            }
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): end");
+        return;
+        }
+
+
+    if ( ( aURI.Match(_L8("AP/*/WLAN")) != KErrNotFound 
+           || aURI.Match(_L8("AP/*/WLAN/*"))!= KErrNotFound )
+           && iWlanSupported )
+        {
+        iWlanAdapter->ChildURIListL(aURI,aLUID,aPreviousURISegmentList,aResultsRef,aStatusRef); 
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): WLAN end");
+        return;
+        }
+//
+//  Get all AP numbers from IAP-table
+//
+    if (aURI.Match(KNSmlDdfAP)!= KErrNotFound)
+        {
+        TBool inDatabase = EFalse;
+
+        CCommsDbTableView* apView = iDatabase->OpenTableLC(TPtrC(IAP));
+
+        TInt errorCode = apView->GotoFirstRecord();
+        
+        while ( errorCode == KErrNone ) 
+            {
+            TUint32 lValue;
+            TBool validService = EFalse;
+            TInt lLine(0);
+            apView->ReadUintL(TPtrC(COMMDB_ID),lValue);
+
+            TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+            apView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+            TUint32 bearerId  = 0;
+            apView->ReadUintL(TPtrC(IAP_BEARER),bearerId);
+            //
+            // Skip other service types than GSM outgoing
+            //
+            if (serviceType == TPtrC(OUTGOING_GPRS) ||
+                serviceType == TPtrC(INCOMING_GPRS))
+                {
+                validService = ETrue;
+                }
+
+            else if(serviceType == TPtrC(LAN_SERVICE) &&
+                    bearerId > 1) 
+                {
+                validService = ETrue;
+                }
+            else if(serviceType == TPtrC(VPN_SERVICE)) 
+                {
+                validService = ETrue;
+                }
+            else if( ( serviceType == TPtrC(LAN_SERVICE) ) && iWlanSupported ) 
+                {
+                validService = ETrue;
+                }
+
+            if(validService)
+                { 
+                // Skip others
+                //
+                //  Check if in aPreviousURISegmentList
+                // 
+                while(!inDatabase && lLine < aPreviousURISegmentList.Count())
+                    {
+                    TUint32 list = GetIntObject8(aPreviousURISegmentList.At(lLine).iURISegLUID);
+                    if(list == lValue) 
+                        {
+                        inDatabase = ETrue;
+                        }
+                    else
+                        {
+                        lLine++;
+                        }
+                    }
+
+                if(inDatabase)
+                    {
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(lLine).iURISeg);
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+                    inDatabase = EFalse;
+                    DBG_ARGS8(_S8("InList: Id = %d Name %S"), lValue, &aPreviousURISegmentList.At(lLine).iURISeg);
+
+                    }
+                else
+                    {
+                    _LIT8(Kprev,"APId");
+                    TBuf8<9> addNAME(Kprev); // APIdnnn , nnn = profileid
+                    addNAME.AppendNumFixedWidth(lValue,EDecimal,3); 
+
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+                    DBG_ARGS8(_S8("NotInList: Id = %d Name %S"), lValue, &addNAME);
+
+                    // KNSmlDMStart includes start text for URISeg
+                    TBuf8<20> addURI; // AP/APIdnnn , nnn = profileid
+                    addURI.Append(_L8("AP/APId"));
+                    addURI.AppendNumFixedWidth(lValue,EDecimal,3); 
+
+                    TBuf8<16> addLUID;
+                    _LIT8(KFormat,"%d");
+                    addLUID.Format(KFormat,lValue);
+
+                    // Also added to mapping
+                    iCallBack->SetMappingL(addURI,addLUID);
+                    }
+                } // Skip
+            errorCode = apView->GotoNextRecord();
+            }
+
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(2); // apView, currentURISegmentList
+
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): AP end");
+        return;
+        }
+
+    iISPId = IntLUID(aLUID);
+
+//
+//  Get all NAPDef numbers
+//
+    if (aURI.Match(_L8("AP/*/NAPDef"))!= KErrNotFound)
+        {
+        TBool inDatabase = EFalse;
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+        TUint32 serviceId;
+
+        CCommsDbTableView* napdefView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP)
+                                                                          ,
+                                                                          TPtrC(COMMDB_ID),
+                                                                          iISPId);
+
+        TInt errorCode = napdefView->GotoFirstRecord();
+
+        if (errorCode != KErrNone )
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NAPDef error end");
+            CleanupStack::PopAndDestroy(2); // napdefView, currentURISegmentList
+            return;
+            }
+        else
+            {
+            napdefView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+            napdefView->ReadUintL(TPtrC(IAP_SERVICE),       serviceId);  // ID  
+            CleanupStack::PopAndDestroy(); // napdefView
+            }
+        
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                         TPtrC(COMMDB_ID),
+                                                                         serviceId);
+
+        errorCode = tableView->GotoFirstRecord();
+
+        while ( errorCode == KErrNone ) 
+            {
+            TUint32 lValue;
+            TInt lLine(0);
+            tableView->ReadUintL(TPtrC(COMMDB_ID),lValue);
+            //
+            //  Check if in aPreviousURISegmentList
+            // 
+            while(!inDatabase && lLine<aPreviousURISegmentList.Count())
+                {
+                TUint32 list = GetIntObject8(aPreviousURISegmentList.At(lLine).iURISegLUID);
+                if(list == lValue) 
+                    {
+                    inDatabase = ETrue;
+                    }
+                else
+                    {
+                    lLine++;
+                    }
+                }
+
+            if(inDatabase)
+                {
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(lLine).iURISeg);
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+                inDatabase = EFalse;
+                }
+            else
+                {
+                _LIT8(Kprev,"NAPId");
+                TBuf8<15> addNAME(Kprev); // APIdnnn , nnn = profileid
+                addNAME.AppendNumFixedWidth(lValue,EDecimal,3); 
+
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+
+
+
+                _LIT8(Kprev2,"/NAPId");
+                TBuf8<80> addURI; // AP/xxx/NAPDef/NAPIdnnn , nnn = id nbr
+                addURI.Append(aURI);
+                addURI.Append(Kprev2);
+                addURI.AppendNumFixedWidth(lValue,EDecimal,3); 
+
+                TBuf8<16> addLUID;
+                _LIT8(KFormat,"%d");    
+                addLUID.Format(KFormat,lValue); 
+
+                // Also added to mapping
+                iCallBack->SetMappingL(addURI,addLUID);
+                }
+            errorCode = tableView->GotoNextRecord();
+            }
+
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(2); // tableView, currentURISegmentList
+
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): AP end");
+        return;
+        }
+
+//  Get all Px numbers 
+//  Check also AP-nbr + serviceType and nbr for Proxy
+//  To get right data for AP
+//
+    if (aURI.Match(_L8("AP/*/Px"))!= KErrNotFound)
+        {
+        TBool inDatabase = EFalse;
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+        TUint32                         ServiceIsp;
+
+        CCommsDbTableView* pxView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                      TPtrC(COMMDB_ID),
+                                                                      iISPId);
+
+        TInt errorCode = pxView->GotoFirstRecord();
+
+        if (errorCode != KErrNone )
+            {
+            CleanupStack::PopAndDestroy(2); // pxView, currentURISegmentList
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NAPDef error end");
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            return;
+            }
+        else
+            {
+            pxView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType); // Type
+            pxView->ReadUintL(TPtrC(IAP_SERVICE),      ServiceIsp);  // ID  
+            CleanupStack::PopAndDestroy(); // pxView
+            }
+        
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingTextLC(TPtrC(PROXIES),
+                                                                         TPtrC(PROXY_SERVICE_TYPE),
+                                                                         serviceType);
+
+        errorCode = tableView->GotoFirstRecord();
+        
+        TBool proxyFound(false);
+        while ( errorCode == KErrNone ) 
+            {
+            TUint32 lProxyIspId;
+            TUint32 lProxyId;
+            TInt lLine(0);
+            tableView->ReadUintL(TPtrC(PROXY_ISP),lProxyIspId);
+            tableView->ReadUintL(TPtrC(COMMDB_ID),lProxyId);
+            if (lProxyIspId == ServiceIsp) // Right value ISP
+                {
+                proxyFound=true;
+                tableView->ReadUintL(TPtrC(COMMDB_ID),lProxyId);
+                //
+                //  Check if in aPreviousURISegmentList
+                // 
+                while(!inDatabase && lLine < aPreviousURISegmentList.Count())
+                    {
+                    TUint32 list = GetIntObject8(aPreviousURISegmentList.At(
+                                                     lLine).iURISegLUID) - KNSmlApProxyLowerBase;
+                    if(list == lProxyId) 
+                        {
+                        inDatabase = ETrue;
+                        }
+                    else
+                        {
+                        lLine++;
+                        }
+                    }
+
+                if(inDatabase)
+                    {
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(lLine).iURISeg);
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+                    inDatabase = EFalse;
+                    DBG_ARGS8(_S8("InList: Id = %d Name %S"), lProxyId + KNSmlApProxyLowerBase , &aPreviousURISegmentList.At(lLine).iURISeg);
+                    }
+                else
+                    {
+                    _LIT8(Kprev,"PXId");
+                    TBuf8<9> addNAME(Kprev); // PXIdnnn , nnn = profileid
+                    addNAME.AppendNumFixedWidth(lProxyId,EDecimal,3); 
+
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+                    DBG_ARGS8(_S8("NotInList: Id = %d Name %S"), lProxyId, &addNAME);
+                    TBuf8<80> addURI; // AP/xxx/Px/PXIdnnn , nnn = id nbr
+                    addURI.Append(aURI);
+                    _LIT8( KPxid, "/PXId");
+                    addURI.Append( KPxid );
+                    addURI.AppendNumFixedWidth(lProxyId,EDecimal,3); 
+
+                    TBuf8<16> addLUID;
+                    _LIT8(KFormat,"%d");    
+                    addLUID.Format(KFormat,  KNSmlApProxyLowerBase + lProxyId);    // 100000 + lProxyId
+
+                    // Also added to mapping
+                    iCallBack->SetMappingL(addURI,addLUID);
+                    }
+                }
+            errorCode = tableView->GotoNextRecord();
+            }
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): AP end");
+        if(proxyFound)
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);    
+            }
+        else
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            }
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(2); //  tableView, currentURISegmentList
+
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Bearer/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/Bearer/*/*"))== KErrNotFound )
+        {
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(_L8("BearerL/Direction"))); // Direction
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): BearerL end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Bearer"))!= KErrNotFound)
+        {
+        if(aPreviousURISegmentList.Count()>0) // Allready mapped
+            {
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(0).iURISeg);
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+            }
+        else
+            {
+            _LIT8(Kprev,"BId");
+            TBuf8<9> addNAME(Kprev); // Id
+            addNAME.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+    
+            TBuf8<80> addURI; // AP/xxx/NapDef/Bearer/BIdn , n=aLUID
+            addURI.Append(aURI);
+            _LIT8( KBid, "/BId");
+            addURI.Append( KBid );
+            addURI.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+            TBuf8<16> addLUID;
+            _LIT8(KFormat,"%d");    
+            addLUID.Format(KFormat,checkLUID);
+
+            // Also added to mapping
+            iCallBack->SetMappingL(addURI,addLUID);
+            }
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Bearer end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/DNSAddr/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/DNSAddr/*/*"))== KErrNotFound )
+        {
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDNSAddrNode);
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): DNSAddrL end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/DNSAddr"))!= KErrNotFound)
+        {
+
+        TBuf<KCommsDbSvrMaxFieldLength> ServType;
+        TUint32 servId;
+
+        CCommsDbTableView* napdefView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP) ,
+                                                                          TPtrC(COMMDB_ID),
+                                                                          iISPId);
+
+        TInt errorCode = napdefView->GotoFirstRecord();
+
+        if (errorCode != KErrNone )
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): DNSAddr error end");
+            CleanupStack::PopAndDestroy(2); // napdefView, currentURISegmentList
+            return;
+            }
+        else
+            {
+            napdefView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), ServType);
+            napdefView->ReadUintL(TPtrC(IAP_SERVICE),       servId);  // ID  
+            CleanupStack::PopAndDestroy(napdefView); // napdefView
+            }
+        
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(ServType,
+                                                                         TPtrC(COMMDB_ID),
+                                                                         servId);
+
+        errorCode = tableView->GotoFirstRecord();
+
+        if ( errorCode != KErrNone ) 
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): DNSAddr error end");
+            CleanupStack::PopAndDestroy(2); // tableView, currentURISegmentList
+            return;
+            }
+        else 
+            {
+            // Now we can read DNSAddrL values
+            TInt leavecode;
+            TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+            TBuf8<16> addLUID;
+            TBuf8<80> addURI; // AP/xxx/NAPDef/DNSAddr/DNSx
+            _LIT8(KFormat,"%d");    
+            TRAP(leavecode, tableView->ReadTextL( TPtrC(SERVICE_IP_NAME_SERVER1 ),  columnValue));
+            if ( ( leavecode == KErrNone ) && ( columnValue.Length() > 0 ) )
+                {
+                addURI.Append(aURI);
+                addURI.Append(KNSmlDNS1);
+                _LIT8( KDns1, "DNS1");
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),KDns1);
+                addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv4Host, 1));
+                iCallBack->SetMappingL(addURI,addLUID);
+                addURI.Zero();
+                }
+
+            TRAP(leavecode, tableView->ReadTextL( TPtrC(SERVICE_IP_NAME_SERVER2 ),  columnValue));
+            if ( leavecode == KErrNone && ( columnValue.Length() > 0 ) )
+                {
+                if ( currentURISegmentList->Size() > 0 )
+                    {
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(), KNSmlDmApValFSlash);
+                    }
+                addURI.Append(aURI);
+                addURI.Append(KNSmlDNS2);
+                _LIT8( KDns2, "DNS2");
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),KDns2);
+                addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv4Host, 2));
+                iCallBack->SetMappingL(addURI,addLUID);
+                addURI.Zero();
+                }
+
+            TRAP(leavecode, tableView->ReadTextL( TPtrC(SERVICE_IP6_NAME_SERVER1 ),  columnValue));
+            if ( leavecode == KErrNone && ( columnValue.Length() > 0 ) )
+                {
+                if ( currentURISegmentList->Size() > 0 )
+                    {
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(), KNSmlDmApValFSlash);
+                    }
+                addURI.Append(aURI);
+                addURI.Append(KNSmlDNS3);
+                _LIT8( KDns3, "DNS3");
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),KDns3);
+                addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv6Host, 1));
+                iCallBack->SetMappingL(addURI,addLUID);
+                addURI.Zero();
+                }
+
+            TRAP(leavecode, tableView->ReadTextL( TPtrC(SERVICE_IP6_NAME_SERVER2 ),  columnValue));
+            if ( leavecode == KErrNone && ( columnValue.Length() > 0 ) )
+                {
+                if ( currentURISegmentList->Size() > 0 )
+                    {
+                    currentURISegmentList->InsertL(currentURISegmentList->Size(), KNSmlDmApValFSlash);
+                    }
+                addURI.Append(aURI);
+                addURI.Append(KNSmlDNS4);
+                _LIT8(KDns4, "DNS4" );
+                currentURISegmentList->InsertL(currentURISegmentList->Size(),KDns4 );
+                addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv6Host, 2));
+                iCallBack->SetMappingL(addURI,addLUID);
+                }
+
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): DNSAddr end");
+            iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EOk);
+            iCallBack->SetResultsL(aResultsRef, *currentURISegmentList, KNullDesC8);
+
+            CleanupStack::PopAndDestroy(tableView);
+            CleanupStack::PopAndDestroy(currentURISegmentList); //  currentURISegmentList
+            }
+        return;
+        }
+
+
+    if (aURI.Match(_L8("AP/*/Port/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/Port/*/*"))== KErrNotFound )
+        {
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDdfPortNbr);
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Port end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Port"))!= KErrNotFound)
+        {
+
+        TUint32 iapID10 = GetAPIdFromURIL(aURI);
+
+        if(WapAPExistsL(iapID10)) // WapPort
+            {
+            TBuf8<80> addURI; // AP/xxx/Px/Port/WAP
+            addURI.Append(aURI);
+            _LIT8( KWap, "/WAP");
+            addURI.Append( KWap );
+            _LIT8( KWap2, "WAP/");
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KWap2);
+            }
+        
+        if(PxExistsL(checkLUID)) // ProxyPort
+            {
+            TBuf8<80> addURI; // AP/xxx/Px/Port/PROXY
+            addURI.Append(aURI);
+            _LIT8( KProxy, "/PROXY");
+            addURI.Append( KProxy );
+            _LIT8( KProxy2, "PROXY/");
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KProxy2);
+            }
+
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Port end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/NAPAuthInf/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/NAPAuthInf/*/*"))== KErrNotFound )
+        {
+        _LIT8( KAuthFields, "AuthName/AuthSecr");
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(KAuthFields));
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NAPAuthInfL end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/NAPAuthInf"))!= KErrNotFound)
+        {
+        _LIT8(Kprev,"AUId");
+        TBuf8<9> addNAME(Kprev); // Id
+        addNAME.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+
+        TBuf8<80> addURI; // AP/xxx/NapDef/NAPAuthInf/AUIdn , n=aLUID
+        addURI.Append(aURI);
+        _LIT8( KAuid, "/AUId" );
+        addURI.Append( KAuid );
+        addURI.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+        TBuf8<16> addLUID;
+        _LIT8(KFormat,"%d");    
+        addLUID.Format(KFormat,checkLUID);
+
+        // Also added to mapping
+        iCallBack->SetMappingL(addURI,addLUID);
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NAPAuthInf end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/PxAuthInf/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/PxAuthInf/*/*"))== KErrNotFound )
+        {
+        _LIT8( KPxAuthFields, "PxAuthId/PxAuthPW");
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(KPxAuthFields));
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NAPAuthInfL end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/PxAuthInf"))!= KErrNotFound)
+        {
+        _LIT8(Kprev,"AUPxId");
+        TBuf8<11> addNAME(Kprev); // Id
+        addNAME.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+
+        TBuf8<80> addURI; // AP/xxx/Px/PxAuthInf/AUPxIdn , n=aLUID
+        addURI.Append(aURI);
+        _LIT8( KAupxid, "/AUPxId" );
+        addURI.Append( KAupxid );
+        addURI.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NAPAuthInf end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/ToNAPID/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/ToNAPID/*/*"))== KErrNotFound )
+        {
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(KNSmlDdfToNAPIDL));
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ToNAPIDL end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/ToNAPID"))!= KErrNotFound)
+        {
+        _LIT8(Kprev,"TId");
+        TBuf8<9> addNAME(Kprev); // Id
+        addNAME.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+
+        TBuf8<80> addURI; // AP/xxx/NapDef/ToNAPID/TIdn , n=aLUID
+        addURI.Append(aURI);
+        _LIT8( KTid, "/TId" );
+        addURI.Append( KTid );
+        addURI.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): ToNAPID end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Networks/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/Networks/*/*"))== KErrNotFound )
+        {
+        _LIT8( KNameId, "Name/ID" );
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(KNameId));
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Networks end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Networks"))!= KErrNotFound)
+        {
+        checkLUID = GetAPIdFromURIL(aURI); 
+
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                         TPtrC(COMMDB_ID),
+                                                                         checkLUID);
+
+        TInt errorCode = tableView->GotoFirstRecord();
+        
+        if ( errorCode == KErrNone ) 
+            {
+            TUint32 nwLUID = 0;
+            tableView->ReadUintL(TPtrC(IAP_NETWORK),nwLUID); // Networks luid
+            if(!NetworkExistsL(nwLUID))
+                {
+                errorCode = KErrNotFound;
+                }
+            }
+
+        CleanupStack::PopAndDestroy(); // tableView
+
+        if(errorCode != KErrNone)
+            {
+            _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Networks error end");
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            CleanupStack::PopAndDestroy(); //  currentURISegmentList
+            return;
+            }
+
+        if(aPreviousURISegmentList.Count()>0) // Allready mapped
+            {
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(0).iURISeg);
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+            }
+        else
+            {
+            _LIT8(Kprev,"NwId");
+            TBuf8<9> addNAME(Kprev); // Id
+            addNAME.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),addNAME);
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+
+            TBuf8<80> addURI; // AP/xxx/NapDef/Networks/NwIdn , n=aLUID
+            addURI.Append(aURI);
+            _LIT8( KNwid, "/NwId");
+            addURI.Append(KNwid);
+            addURI.AppendNumFixedWidth(checkLUID,EDecimal,3); 
+
+            TBuf8<16> addLUID;
+            _LIT8(KFormat,"%d");    
+            addLUID.Format(KFormat,checkLUID);
+
+
+            // Also added to mapping
+            iCallBack->SetMappingL(addURI,addLUID);
+            }
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Networks end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/NoPxFor/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/NoPxFor/*/*"))== KErrNotFound )
+        {
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(KNSmlDdfNoPxForL));
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NoPxFor end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/NoPxFor"))!= KErrNotFound)
+        {
+        if(aPreviousURISegmentList.Count()>0) // Allready mapped
+            {
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(0).iURISeg);
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+            }
+        else
+            {
+            _LIT8(KexepPrev,"eXC");
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KexepPrev);
+            }
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): NoPxFor end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Domain/*"  ))!= KErrNotFound &&
+        aURI.Match(_L8("AP/*/Domain/*/*"))== KErrNotFound )
+        {
+        currentURISegmentList->InsertL(currentURISegmentList->Size(),(KNSmlDdfDomainL));
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+        CleanupStack::PopAndDestroy(); // currentURISegmentList
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Domain end");
+        return;
+        }
+
+    if (aURI.Match(_L8("AP/*/Domain"))!= KErrNotFound)
+        {
+        if(aPreviousURISegmentList.Count()>0) // Allready mapped
+            {
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),aPreviousURISegmentList.At(0).iURISeg);
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KNSmlDmApValFSlash);
+            }
+        else
+            {
+            _LIT8(KexepPrev,"dOM");
+            currentURISegmentList->InsertL(currentURISegmentList->Size(),KexepPrev);
+            }
+        _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): Domain end");
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+
+        CleanupStack::PopAndDestroy(); //  currentURISegmentList
+        
+        return;
+        }
+
+    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+    iCallBack->SetResultsL(aResultsRef,*currentURISegmentList,KNullDesC8);
+    _DBG_FILE("CNSmlInternetAdapter::ChildURIListL(): end");
+
+    CleanupStack::PopAndDestroy(); // currentURISegmentList
+
+    return;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::AddNodeBufferL()
+// Inserts new AP-data to database
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::AddNodeBufferL( const TDesC8& aURI, 
+                                           const TDesC8& /*aParentLUID*/, 
+                                           const TInt aStatusRef,
+                                           const TBool aDnsUpd,
+                                           const TBool aWlan )
+    {
+    TInt index = -1;
+
+    for(TInt i = 0; i<iBuffer->Count(); i++)
+        {
+        TPtrC8 parentUri = FirstURISeg(aURI);
+        if(iBuffer->At(i).iMappingName->Compare(parentUri) == 0 )
+            {
+            index = i;
+            break;
+            }
+        }
+
+    if(index<0)
+        {
+        TNSmlAPBufferElement newNode;
+        newNode.iMappingName = aURI.AllocLC();
+        
+        NextAPNameL(*LastURISeg(aURI).AllocLC());
+        CleanupStack::PopAndDestroy();
+        
+        newNode.iName = iIAPName.AllocLC();
+        newNode.iNodeBuf = new (ELeave) CArrayFixFlat <TNSmlAPAddElement> (KNSmlAPGranularity);
+        newNode.iWlanNodeBuf = new (ELeave) CArrayFixFlat <TNSmlAPAddElement> (KNSmlAPGranularity);
+        newNode.iExecuted  = EFalse;
+        newNode.iBearer    = EFalse;
+        newNode.iDirection = EFalse;
+        newNode.iNameReceived = EFalse;
+        if ( aDnsUpd )
+            {
+            newNode.iDnsUpdateBuf = ETrue;
+            }
+        else
+            {
+            newNode.iDnsUpdateBuf = EFalse;
+            }
+        newNode.iLuid = 0;
+        iBuffer->AppendL(newNode);
+        CleanupStack::Pop(2); //newNode.iMappingName,newNode.iName
+
+        index = iBuffer->Count() - 1;
+        }
+
+    if ( !aDnsUpd )
+        {
+        TNSmlAPAddElement newCommand;
+        newCommand.iUri = aURI.AllocLC();
+        newCommand.iData = 0;
+        newCommand.iStatusRef = aStatusRef;
+        newCommand.iLeaf   = EFalse;
+        newCommand.iDone   = EFalse;
+        
+        TPtrC8 parentUri = FirstURISeg(aURI);
+        newCommand.iLuid   = iCallBack->GetLuidAllocL( parentUri );
+        
+        if ( aWlan )
+            {
+            iBuffer->At(index).iWlanNodeBuf->AppendL(newCommand);
+            }
+        else
+            {
+            iBuffer->At(index).iNodeBuf->AppendL(newCommand);
+            }
+        CleanupStack::Pop(); //newCommand.iUri
+        }
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::AddLeafBufferL()
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::AddLeafBufferL( const TDesC8& aURI,
+                                           const TDesC8& aParentLUID, 
+                                           const TDesC8& aObject, 
+                                           const TDesC8& /*aType*/, 
+                                           const TInt aStatusRef,
+                                           const TBool aWlan )
+    {
+    TInt index = -1;
+
+    for(TInt i = 0; i<iBuffer->Count(); i++)
+        {
+        TPtrC8 parentUri = FirstURISeg(aURI);
+        if(iBuffer->At(i).iMappingName->Compare(parentUri) == 0 )
+            {
+            index = i;
+            break;
+            }
+        }
+
+    if( index<0 )
+        {
+        if ( aParentLUID.Length() < 0 )
+            {
+            DBG_ARGS8(_S8("AP:AddLeafBufferL URI - <%S> <%S> NOTFOUND"), &aURI, &aParentLUID );
+            iCallBack->SetStatusL(aStatusRef,  CSmlDmAdapter::ENotFound);
+            return;
+            }
+        else
+            {
+            // this means update to DNSAddr/<X>
+            TPtrC8 apURI = FirstURISeg(aURI);
+            HBufC8* luid = iCallBack->GetLuidAllocL(apURI);
+            CleanupStack::PushL( luid );
+            
+            AddNodeBufferL( apURI, luid->Des(), -2, ETrue );
+            iDnsIpv4Pri = 0;
+            iDnsIpv6Pri = 0;
+            
+            CleanupStack::PopAndDestroy( luid );
+            index = 0;
+            }
+        }
+
+    TNSmlAPAddElement newCommand;
+
+    newCommand.iUri = aURI.AllocLC(); //aURI.AllocLC();
+    newCommand.iData = aObject.AllocLC();
+    newCommand.iStatusRef = aStatusRef;
+    newCommand.iLuid = aParentLUID.AllocLC();
+    newCommand.iLeaf = ETrue;
+    newCommand.iDone = EFalse;
+    
+    if ( aWlan )
+        {
+        iBuffer->At(index).iWlanNodeBuf->AppendL(newCommand);
+        }
+    else
+        {
+        iBuffer->At(index).iNodeBuf->AppendL(newCommand);
+        }
+    
+    CleanupStack::Pop(3); //newCommand.iLastUriSeg, newCommand.iData, newCommand.iLuid
+
+    if (aURI.Find(KNSmlDdfBearerL) >= 0 )   // Bearer added
+        {
+        if (aObject.Match(KNSmlDmApValGsmGprs)!= KErrNotFound)
+            {
+            iBuffer->At(index).iBearer = ETrue;
+            }
+
+        else if (aObject.Match(KNSmlDmApVal3Gppps) != KErrNotFound ||
+                 aObject.Match(KNSmlDmApValVpn) != KErrNotFound )
+            {
+            iBuffer->At(index).iBearer = ETrue;
+            }
+        if ( ( aObject.Match(KNSmlDmApValWlan) != KErrNotFound ) && iWlanSupported )   // Valid Bearer
+            {
+            iBuffer->At(index).iBearer = ETrue;
+            }
+        }
+
+    if (aURI.Find(KNSmlDdfDirection) >= 0 ) // Direction added
+        {
+        iBuffer->At(index).iDirection = ETrue;
+        }
+    
+    if ( aURI.Match(_L8("AP/*/NAPDef/*/*"  ))!= KErrNotFound &&
+         aURI.Match(_L8("AP/*/NAPDef/*/*/*"))== KErrNotFound &&
+         LastURISeg(aURI).Compare( KNSmlDdfNAPName ) == 0 )                         
+        {
+        iIAPExists = EFalse;
+        iBuffer->At(index).iNameReceived = ETrue;
+        
+        delete iBuffer->At(index).iName;
+        iBuffer->At(index).iName = 0;
+        
+        iBuffer->At(index).iName = aObject.AllocLC();
+        iIAPName.Copy( aObject );
+        CleanupStack::Pop();
+        
+        // Check if Name and LUID match
+        TPtrC qTable = TPtrC(IAP);          // Check if IAP-table free
+        TPtrC qDB    = TPtrC(COMMDB_ID);
+        TPtrC8 parentUri = FirstURISeg(aURI);
+        HBufC8* luid = iCallBack->GetLuidAllocL( parentUri );
+        CleanupStack::PushL( luid );
+        
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(qTable,
+                                                                         qDB,
+                                                                         IntLUID( *luid ) );
+        
+            
+        TInt errorCode = tableView->GotoFirstRecord();
+        if( errorCode != KErrNotFound )
+            {
+            // Check the name
+            TBuf8<KCommsDbSvrMaxFieldLength> name;                             
+            tableView->ReadTextL( TPtrC(COMMDB_NAME ),  name);
+            if ( name.Compare( aObject ) != 0 )
+                {
+                // Not correct name
+                RNSmlDMCallbackSession dMCbSession;
+                User::LeaveIfError( dMCbSession.Connect() );
+                CleanupClosePushL( dMCbSession );
+                    
+                // Remove all mappings from AP/xxx level
+                dMCbSession.RemoveMappingInfoL( KNSmlInternetAdapterImplUid, GetDynamicAPNodeUri( aURI ), ETrue );
+                CleanupStack::PopAndDestroy( &dMCbSession ); 
+
+                iPrevURI->Des().Format( KNullDesC8 );
+                iPrevLUID = 0;
+                }     
+            else
+                {
+                iIAPExists = ETrue;
+                iLeafType = EDMUpdate;
+                }
+            }
+        CleanupStack::PopAndDestroy( tableView );
+        CleanupStack::PopAndDestroy( luid );
+        }
+//    
+    
+//  If Bearer data + Direction + name => add is possible for AP
+//
+    if (iBuffer->At(index).iDirection &&
+        iBuffer->At(index).iBearer &&
+        iBuffer->At(index).iNameReceived &&
+        !iExecutingBuffer )
+        {
+        iBearer.Zero();        
+        iDirection = ECommDbConnectionDirectionUnknown;
+        ExecuteBufferL(aURI);
+
+        }
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::AddNodeObjectL()
+// Inserts new AP-data to database
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::AddNodeObjectL( const TDesC8& aURI, 
+                                           const TDesC8& aParentLUID, 
+                                           const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): begin");
+
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::AddNodeObjectL(): aURI=<%S>, aParentLUID=<%S>"), &aURI, &aParentLUID);
+
+    if (iLeafType == EDMUpdate && iExecutingBuffer )
+        {
+        // This is an update to an old IAP. All node additions return KErrAlreadyExists.
+        iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EAlreadyExists); // EError
+        _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): EAlreadyExists end");
+        return;
+        }
+
+    // Save LUID to local variable to be able to reset the value, if needed.
+    TBuf8<KSmlMaxURISegLen> parentLUID;
+    parentLUID.Zero();
+    parentLUID = aParentLUID;
+
+    TUint32 apId = GetAPIdFromURIL( aURI );
+        
+    if( parentLUID.Length() > 0 && IntLUID(parentLUID) > 0 && 
+        !APExistsL( apId ) )
+        {
+        // AP has been deleted. Handle as new data.
+        _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): parentLUID.Length() > 0 && !APExistsL() -> Remove mapping ");
+          
+        RNSmlDMCallbackSession dMCbSession;
+        User::LeaveIfError( dMCbSession.Connect() );
+        CleanupClosePushL( dMCbSession );
+        
+        // Remove all mappings from AP/xxx level
+        dMCbSession.RemoveMappingInfoL( KNSmlInternetAdapterImplUid, GetDynamicAPNodeUri( aURI ), ETrue );
+        CleanupStack::PopAndDestroy( &dMCbSession );
+        
+        parentLUID.Zero();
+        iPrevURI->Des().Format( KNullDesC8 );
+        iPrevLUID = 0;
+        }
+    
+    if(parentLUID.Length()<=0)
+        {
+        // Check OOD before saving new 
+        RFs fs;
+        User::LeaveIfError( fs.Connect() );
+        CleanupClosePushL(fs);
+
+        if (SysUtil::FFSSpaceBelowCriticalLevelL(&fs, KNSmlInternetAdapterFatMinSize))
+            {
+            CleanupStack::PopAndDestroy(); // fs
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EDiskFull);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): DISK FULL end");
+            return;
+            // do not write
+            }
+        CleanupStack::PopAndDestroy(); //fs
+        }
+//
+//  Check if AP-add
+//
+    if(( aURI.Match(_L8("AP/*"  ))!= KErrNotFound &&
+         aURI.Match(_L8("AP/*/*"))== KErrNotFound ) ||
+       ( aURI.Match(_L8("AP/*/NAPDef/*"  ))!= KErrNotFound &&
+         aURI.Match(_L8("AP/*/NAPDef/*/*"))== KErrNotFound ) ||
+       aURI.Match(_L8("AP/*/NAPDef"  ))!= KErrNotFound ||
+       aURI.Match(_L8("AP/*/NAPDef/*/Bearer"))!= KErrNotFound ||
+       ( aURI.Match(_L8("AP/*/NAPDef/*/Bearer/*"  ))!= KErrNotFound &&
+         aURI.Match(_L8("AP/*/NAPDef/*/Bearer/*/*"))== KErrNotFound ) ||
+       aURI.Match(_L8("*/WLAN*" )) != KErrNotFound)
+        {
+        if( ( parentLUID.Length()<=0 ) && ( aURI.Match(_L8("*/WLAN*" )) != KErrNotFound ) )
+            {
+            AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse, ETrue);
+            return;
+            }
+        if(parentLUID.Length()<=0)
+            {
+            AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+            return;
+            }
+
+        if( iTransactionCommitted && !iDatabase->InTransaction() )
+        {
+        
+        _DBG_FILE("CNSmlInternetAdapter::AddNode object, begin commsdb transaction ");
+        TInt codeBegin = iDatabase->BeginTransaction();
+        TInt retry = KBeginTransRetryCount;
+        if( codeBegin == KErrNone )
+        {
+          iTransactionCommitted = EFalse;
+        }
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddNode object iDatabase->Begintransaction start of addobjectL return code = %d"),codeBegin);
+        if( codeBegin == KErrLocked )
+        {
+        _DBG_FILE("CNSmlInternetAdapter::Addnodeobject Database->Begintransaction has returned KErrLocked");
+        while ( retry > 0 && codeBegin == KErrLocked )
+            {
+            User::After(KBeginTransRetryDelay);
+            codeBegin = iDatabase->BeginTransaction();
+            DBG_ARGS8(_S8("CNSmlInternetAdapter::AddNode object iDatabase->Begintransaction after 2 seconds of wait of addobjectL return code = %d"),codeBegin);
+            retry--;
+            }
+        
+        if( codeBegin == KErrNone )
+            {
+             iTransactionCommitted = EFalse;
+            _DBG_FILE("CNSmlInternetAdapter::AddNode object transaction commited is false ");        
+            }
+                       
+        }
+      
+     
+        }    
+        if ( ( aURI.Match(_L8("*/WLAN*" )) != KErrNotFound ) && iWlanSupported )
+            {
+            DBG_ARGS8(_S8("To WlanAdapter::AddNodeObjectL - uri: <%S> to parentLUID: <%S>"), &aURI, &parentLUID );
+            iWlanAdapter->AddNodeObjectL( aURI, parentLUID, aStatusRef );
+            return;
+            }
+
+        TInt pluid = IntLUID(parentLUID);
+
+        if(pluid < 0)
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): end");
+            return;
+            }
+        iIAPId = pluid;
+
+        TPtrC qTable = TPtrC(IAP);          // Check if IAP-table free
+        TPtrC qDB    = TPtrC(COMMDB_ID);
+
+    //Check if URI is /AP/*/NAPDef/* then it should be check IAP ID in DB not IAPService
+    if(( iIAPId > 0 ) && ((aURI.Match(_L8("AP/*/NAPDef/*"  ))!= KErrNotFound) || (aURI.Match(_L8("AP/*/NAPDef/*/Bearer/*"  ))!= KErrNotFound)))
+    {
+      //Get parent UID and check if that exist if not add 
+      iIAPId = GetAPIdFromURIL(aURI);
+      
+    }
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(qTable,
+                                                                         qDB,
+                                                                         iIAPId);
+    
+        TInt errorCode = tableView->GotoFirstRecord();
+
+        CleanupStack::PopAndDestroy(tableView); 
+
+        // Node allready exists => No adding possible
+        if ( errorCode == KErrNone )
+            {
+            if ( !iExecutingBuffer )
+                {
+                AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+                }
+            else
+                {
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EAlreadyExists); // EError
+                _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): EAlreadyExists end");    
+                }            
+            return;
+            }
+        else if ( iIAPId == 0 )
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): ENotFound end");
+            return;
+            }
+        else if( iIAPId > 0 && errorCode == KErrNotFound) // Stale data, needs update
+        {
+          
+           _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): stale data Add to buffer");
+          AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+          iStaleMapUpdate=ETrue;
+          return;
+        }
+
+        }
+    else if (aURI.Match(_L8("AP/*/Px/*"  ))!= KErrNotFound  &&  // How to check if already added
+             aURI.Match(_L8("AP/*/Px/*/*"))== KErrNotFound )    // dm-tree knows last LUID
+        {
+        if(parentLUID.Length()<=0) 
+            {
+            AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+            return;
+            }                       
+
+        // Check if already exists on database (=> only One possible for AP)
+        if(GetProxyIdL(aURI))
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EAlreadyExists);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): EAlreadyExists end");
+            return;
+            }
+
+        TUint32 iapID = GetAPIdFromURIL(aURI);
+
+        //  IAP-table search serviceType (=Bearer)
+        CCommsDbTableView* iapView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                       TPtrC(COMMDB_ID),
+                                                                       iapID);
+
+        TInt errorCode = iapView->GotoFirstRecord();
+    
+        // Read serviceType from (IAP)
+        if ( errorCode == KErrNone )
+            {
+            iapView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), iProxyServiceType);
+            iapView->ReadUintL(TPtrC(IAP_SERVICE),      iProxyISP);
+            CleanupStack::PopAndDestroy(); // iapView
+            }
+        else if( iapID > 0 && errorCode == KErrNotFound) // Stale data, needs update
+        {
+          
+          CleanupStack::PopAndDestroy(); // iapViewv
+           _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): stale data for proxy this as new AP ");
+          AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+          iStaleMapUpdate=ETrue;
+          return;
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(); // iapView
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): ENotFound end");
+            return;
+            }
+
+        CCommsDbTableView* proxyTable;
+
+        proxyTable = iDatabase->OpenTableLC(TPtrC(PROXIES));
+
+        TInt initOK = proxyTable->InsertRecord(iapID);
+        
+        TInt retry = KBeginTransRetryCount; 
+        while ( retry > 0 && initOK != KErrNone )
+            {
+            User::After( KBeginTransRetryDelay );
+            initOK = proxyTable->InsertRecord( iapID );
+            retry--;
+            }
+        
+        if( initOK == KErrNone )
+            {
+            iProxyServerName = LastURISeg(aURI); // Name from URI
+            initOK = InitializeProxyL( proxyTable );
+            
+            User::After( KBeginTransRetryDelay );
+            if ( initOK == KErrNone)
+                {
+                TUint32 newId = 0;
+                initOK = proxyTable->PutRecordChanges();
+                
+                retry = KBeginTransRetryCount;
+                while ( retry > 0 && initOK != KErrNone )
+                    {
+                    User::After( KBeginTransRetryDelay );
+                    initOK = proxyTable->PutRecordChanges();
+                    retry--;
+                    }
+                
+                proxyTable->ReadUintL(TPtrC(COMMDB_ID), newId);
+                //
+                // Set mapping-data
+                //
+                TBuf8<16> addLUID;
+                _LIT8(KFormat,"%d");    
+                addLUID.Format(KFormat,KNSmlApProxyLowerBase + newId);     // 100000 + lProxyId
+
+                // Also added to mapping
+                iCallBack->SetMappingL(aURI,addLUID);
+                }
+            else
+                {
+                proxyTable->CancelRecordChanges();
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+                _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): EError end");
+                }
+            }
+        else
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): EError end Insert failed");
+            }
+        CleanupStack::PopAndDestroy(); // proxyTable
+
+        }
+    else if (aURI.Match(_L8("AP/*/Px/*/*"))!= KErrNotFound )
+        {
+        if(parentLUID.Length()<=0) 
+            {
+            AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): end");
+            return;
+            }                       
+
+        TInt pluid = IntLUID(parentLUID);
+
+        if(pluid < 0)
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): end");
+            return;
+            }
+        else 
+          {
+            TUint32 apID = GetAPIdFromURIL(aURI);
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                       TPtrC(COMMDB_ID),
+                                                                           apID);
+              TInt errorCode = tableView->GotoFirstRecord();
+            CleanupStack::PopAndDestroy(tableView); 
+            if( apID > 0 && errorCode == KErrNotFound) // Stale data, needs update
+            {
+        _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): stale data for proxy this as new AP ");
+             AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+            iStaleMapUpdate=ETrue;
+            return;
+            }
+        
+          }
+        }
+
+    else if (aURI.Match(_L8("AP/*/Px"))!= KErrNotFound )
+        {
+        if(parentLUID.Length()<=0)
+            {
+            AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+            return;
+            }
+
+        TInt pluid = IntLUID(parentLUID);
+
+        if(pluid < 0)
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): end");
+            return;
+            }
+        else if(pluid == 0)
+            {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+            _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): EError");
+            return;
+            }
+          else 
+          {
+            TUint32 apID = GetAPIdFromURIL(aURI);
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                       TPtrC(COMMDB_ID),
+                                                                           apID);
+              TInt errorCode = tableView->GotoFirstRecord();
+            CleanupStack::PopAndDestroy(tableView); 
+            if( apID > 0 && errorCode == KErrNotFound) // Stale data, needs update
+            {
+        _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): stale data for proxy this as new AP ");
+             AddNodeBufferL(aURI,parentLUID,aStatusRef, EFalse);
+            iStaleMapUpdate=ETrue;
+            return;
+            }
+            }
+        }
+
+    else if (aURI.Match(_L8("AP/*/Networks/*"  ))!= KErrNotFound &&
+             aURI.Match(_L8("AP/*/Networks/*/*"))== KErrNotFound )
+        {
+        iIAPId = IntLUID(parentLUID);
+        }
+
+
+
+    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+    _DBG_FILE("CNSmlInternetAdapter::AddNodeObjectL(): end");
+    return;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::ExecuteCommandL
+// not supported
+//------------------------------------------------------------------------------
+
+
+void CNSmlInternetAdapter::ExecuteCommandL( const TDesC8&/* aURI*/, 
+                                            const TDesC8& /*aLUID*/,
+                                            const TDesC8& /*aArgument*/, 
+                                            const TDesC8& /*aType*/,
+                                            TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::ExecuteCommandL(): begin");
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlInternetAdapter::ExecuteCommandL(): end");
+    }
+    
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::ExecuteCommandL ( .. RWriteStream ..)
+// not supported
+//------------------------------------------------------------------------------
+
+
+void CNSmlInternetAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                                            const TDesC8& /*aLUID*/,
+                                            RWriteStream*& /*aStream*/, 
+                                            const TDesC8& /*aType*/,
+                                            TInt aStatusref )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::ExecuteCommandL(): begin");
+    iCallBack->SetStatusL(aStatusref, CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlInternetAdapter::ExecuteCommandL(): end");
+    }
+    
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::CopyCommandL
+// not supported
+//------------------------------------------------------------------------------
+
+
+void CNSmlInternetAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/,
+                                         const TDesC8& /*aTargetLUID*/,
+                                         const TDesC8& /*aSourceURI*/,
+                                         const TDesC8& /*aSourceLUID*/, 
+                                         const TDesC8& /*aType*/,
+                                         TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::CopyCommandL(): begin");
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlInternetAdapter::CopyCommandL(): end");
+    }
+    
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::StartAtomicL
+// not supported
+//------------------------------------------------------------------------------
+
+
+void CNSmlInternetAdapter::StartAtomicL()
+    {
+    _DBG_FILE("CNSmlInternetAdapter::StartAtomicL(): begin");
+    _DBG_FILE("CNSmlInternetAdapter::StartAtomicL(): end");
+    }
+    
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::CommitAtomicL
+// not supported
+//------------------------------------------------------------------------------
+
+
+void CNSmlInternetAdapter::CommitAtomicL()
+    {
+    _DBG_FILE("CNSmlInternetAdapter::CommitAtomicL(): begin");
+    _DBG_FILE("CNSmlInternetAdapter::CommitAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::RollbackAtomicL
+// not supported
+//------------------------------------------------------------------------------
+
+void CNSmlInternetAdapter::RollbackAtomicL()
+    {
+    _DBG_FILE("CNSmlInternetAdapter::RollbackAtomicL(): begin");
+    _DBG_FILE("CNSmlInternetAdapter::RollbackAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::StreamingSupport
+// returns EFalse
+//------------------------------------------------------------------------------
+
+TBool CNSmlInternetAdapter::StreamingSupport( TInt& /*aItemSize*/ )
+    {   
+    _DBG_FILE("CNSmlInternetAdapter::StreamingSupport(): begin");
+    _DBG_FILE("CNSmlInternetAdapter::StreamingSupport(): end");
+    return EFalse;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::StreamCommittedL
+// not used in this adapter
+//------------------------------------------------------------------------------
+
+void CNSmlInternetAdapter::StreamCommittedL()
+    {
+    _DBG_FILE("CNSmlInternetAdapter::StreamCommittedL(): begin");
+    _DBG_FILE("CNSmlInternetAdapter::StreamCommittedL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::CompleteOutstandingCmdsL
+// 
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::CompleteOutstandingCmdsL()
+    {
+
+    _DBG_FILE("CNSmlInternetAdapter::CompleteOutstandingCmdsL(): begin");
+//
+//  Handle possible unhandled buffered nodes
+//
+    if( !iDatabase->InTransaction() )
+        {
+        _DBG_FILE("CompleteOutstandingCmds: Try first begintransaction.");
+        TInt err = iDatabase->BeginTransaction();        
+        if( err == KErrLocked )
+            {
+            _DBG_FILE("CompleteOutstandingCmds: CommsDat was locked.");
+            TInt retry = KBeginTransRetryCount;            
+            while ( retry > 0 && err == KErrLocked )
+                {
+                User::After(KBeginTransRetryDelay);
+                _DBG_FILE("CompleteOutstandingCmds: Slept 1 second. Try again");
+                err = iDatabase->BeginTransaction();
+                retry--;
+                }
+            if(err != KErrNone)
+                {        
+                _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                User::Leave( err ); 
+                }           
+            }
+        }
+    _DBG_FILE("CompleteOutstandingCmds: BeginTransaction was successful");
+    
+    iDnsIpv4Pri = 0;
+    iDnsIpv6Pri = 0;
+    _LIT8( KDummy, "/Dummy" );
+    for(TInt h = iBuffer->Count()-1; h >= 0; h--) // Through buffers
+        {
+        TBuf8<80> commandURI;
+        commandURI.Append(iBuffer->At(h).iMappingName->Des());
+        commandURI.Append( KDummy ); // Removed on execution
+        ExecuteBufferL(commandURI, ETrue);
+        } 
+    iDnsUpdate = EFalse;
+    iDnsIpv4Pri = 0;
+    iDnsIpv6Pri = 0;
+    iBuffer->Reset();
+
+  if ( iWlanSupported )
+    {
+    iWlanAdapter->CompleteOutstandingCmdsL(); // Execute possible unhandled WLAN commands 
+      }
+
+    iNetworkId = KErrNotFound;
+
+    iDatabase->CommitTransaction();
+    iTransactionCommitted = ETrue;
+    _DBG_FILE("CNSmlInternetAdapter::CompleteOutstandingCmdsL(): end");
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::GetAPField()
+//      Match URI fieldname to 
+//      CommsDb table and column
+//      
+//=============================================
+TBool CNSmlInternetAdapter::GetAPField(TPtrC& aTableName,TPtrC& aColumn) const
+    {
+    _DBG_FILE("CNSmlInternetAdapter::GetAPField(): Start");
+
+    TBool fRet = EFalse;
+
+    aColumn.Set(TPtrC(KNullDesC));
+
+    if (iField->Compare(KNSmlDdfAuthName) == 0)
+        {
+        if( aTableName == TPtrC(OUTGOING_GPRS) ||
+            aTableName == TPtrC(INCOMING_GPRS))
+            {
+            aColumn.Set(TPtrC(SERVICE_IF_AUTH_NAME));
+            }
+        else
+            {
+            return fRet;
+            }
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNAPName) == 0)
+        {
+        aColumn.Set(TPtrC(COMMDB_NAME));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfToNAPIDL) == 0)
+        {
+        aColumn.Set(TPtrC(COMMDB_ID));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNAPID) == 0)
+        {
+        aColumn.Set(TPtrC(COMMDB_ID));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfPxId) == 0)
+        {
+        aColumn.Set(TPtrC(COMMDB_ID));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfPxAddr) == 0)
+        {
+        aTableName.Set(TPtrC(PROXIES));
+        aColumn.Set(TPtrC(PROXY_SERVER_NAME));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNAPAddrTy) == 0)   // Is valid
+        {
+        return fRet;
+        }
+    else if (iField->Compare(KNSmlDdfDNSAddrL) == 0)
+        {
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfDNSPriority) == 0)
+        {
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfDNSAddrTy) == 0)
+        {
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNAPAddr) == 0)
+        {
+        if( aTableName == TPtrC(OUTGOING_GPRS) ||
+                 aTableName == TPtrC(INCOMING_GPRS))
+            {
+            aColumn.Set(TPtrC(GPRS_APN));               // GPRS_PDP_ADDRESS
+            }
+        else if(aTableName == TPtrC(LAN_SERVICE))       // Wlan ADD
+            {
+            aColumn.Set(TPtrC(ISP_IP_ADDR));  
+            // Leni: Should this be LAN_IP_ADDR  ??
+            }
+        else
+            {
+            return fRet;
+            }
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfBearerL) == 0)
+        {
+        aTableName.Set(TPtrC(IAP));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfDirection) == 0)
+        {
+        aTableName.Set(TPtrC(IAP));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfAuthSecr) == 0)
+        {
+        if( aTableName == TPtrC(OUTGOING_GPRS) ||
+            aTableName == TPtrC(INCOMING_GPRS))
+            {
+            aColumn.Set(TPtrC(SERVICE_IF_AUTH_PASS)); 
+            }
+        else
+            {
+            return fRet; // NotValid
+            }
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfPortNbr) == 0)
+        {
+        if(iWapPort)
+            {
+            aTableName.Set(TPtrC(WAP_IP_BEARER));
+            aColumn.Set(TPtrC(WAP_PROXY_PORT));
+            }
+        else
+            {
+            aTableName.Set(TPtrC(PROXIES));
+            aColumn.Set(TPtrC(PROXY_PORT_NUMBER));
+            }
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfStartpg) == 0)
+        {
+        aTableName.Set(TPtrC(WAP_ACCESS_POINT));
+        aColumn.Set(TPtrC(WAP_START_PAGE));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfPxAuthId) == 0) // No KNSmlDdfBasAuthId
+        {
+        aTableName.Set(TPtrC(WAP_IP_BEARER));
+        aColumn.Set(TPtrC(WAP_PROXY_LOGIN_NAME));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfPxAuthPW) == 0) // No KNSmlDdfBasAuthPW
+        {
+        aTableName.Set(TPtrC(WAP_IP_BEARER));
+        aColumn.Set(TPtrC(WAP_PROXY_LOGIN_PASS));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfUsePTxtLog) == 0)
+        {
+        if( aTableName == TPtrC(OUTGOING_GPRS) ||
+            aTableName == TPtrC(INCOMING_GPRS))
+            {
+            aColumn.Set(TPtrC(SERVICE_DISABLE_PLAIN_TEXT_AUTH));
+            fRet = ETrue;
+            }
+        else
+            {
+            return fRet; // NotValid
+            }
+        }
+    else if (iField->Compare(KNSmlDdfDefGW) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IP_GATEWAY));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNetworkMask) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IP_NETMASK));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNetworkID) == 0)
+        {
+        aColumn.Set(TPtrC(COMMDB_ID));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfPPPComp) == 0)
+        {
+        if( aTableName == TPtrC(OUTGOING_GPRS) ||
+            aTableName == TPtrC(INCOMING_GPRS))
+            {
+            aColumn.Set(TPtrC(GPRS_DATA_COMPRESSION));
+            }
+        else
+            {
+            return fRet; // NotValid
+            }
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfGPRSPDP) == 0)
+        {
+        if( aTableName == TPtrC(OUTGOING_GPRS) ||
+            aTableName == TPtrC(INCOMING_GPRS))
+            {
+            aColumn.Set(TPtrC(GPRS_PDP_TYPE));
+            }
+        else
+            {
+            return fRet; // NotValid
+            }
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfNoPxForL) == 0)
+        {
+        aColumn.Set(TPtrC(PROXY_EXCEPTIONS));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfDomainL) == 0)
+        {
+        aColumn.Set(TPtrC(PROXY_PROTOCOL_NAME));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfIPAddrFromServer) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IP_ADDR_FROM_SERVER));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfIPAddr) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IP_ADDR));    
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfDNSAddrFromServer) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IP_DNS_ADDR_FROM_SERVER));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfIPv6DNSAddrFromServer) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IP6_DNS_ADDR_FROM_SERVER));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfIfNetworks) == 0)
+        {
+        aColumn.Set(TPtrC(SERVICE_IF_NETWORKS));
+        fRet = ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfIAPService) == 0)
+        {
+        aColumn.Set(TPtrC(IAP_SERVICE));
+        fRet = ETrue;
+        }
+   
+    else if (iField->Compare(KNSmlDdfIAPSeamlessness) == 0)
+        {
+        fRet= ETrue;
+        }
+    else if (iField->Compare(KNSmlDdfIAPMetaData) == 0)
+        {
+        fRet= ETrue;
+        }
+
+    DBG_ARGS(_S16("GetAPField: aURI    - %S - %S - %S"),&aTableName, &aColumn, &*iField);
+
+    _DBG_FILE("CNSmlInternetAdapter::GetAPField(): EOk");
+
+    return fRet;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::GetAPFieldType()
+//      Match fieldtype to Commsdb-database 
+//      
+//=============================================
+CNSmlInternetAdapter::TNSmlAPFieldType CNSmlInternetAdapter::GetAPFieldType( const TDesC8& aURI ) const
+    {
+    if (iField->Compare(KNSmlDdfBearerL) == 0)
+        {
+        return CNSmlInternetAdapter::ESpec;
+        }
+    else if (iField->Compare(KNSmlDdfDirection) == 0)
+        {
+        return CNSmlInternetAdapter::ESpec;
+        }
+    else if (iField->Compare(KNSmlDdfBearer) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfToNAPIDL) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfNAPID) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfPxId) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfAuthName) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfNAPName) == 0 ||
+             iField->Compare(KNSmlDdfPxName) == 0 ||
+             iField->Compare(KNSmlDdfNetworkName) == 0 )
+        {
+        if( aURI.Match(_L8("AP/*/Px/*/Name"))   != KErrNotFound
+            || aURI.Match(_L8("AP/*/Networks/*/Name"))!= KErrNotFound )
+            {
+            return CNSmlInternetAdapter::EStr;
+            }
+        else
+            {
+            return CNSmlInternetAdapter::ESpec; // For NAPName
+            }
+        }
+    else if (iField->Compare(KNSmlDdfNAPAddrTy) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfNAPAddr) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfStartpg) == 0)
+        {
+        return CNSmlInternetAdapter::EWap;
+        }
+    else if (iField->Compare(KNSmlDdfPxAuthId) == 0)
+        {
+        return CNSmlInternetAdapter::EWap;
+        }
+    else if (iField->Compare(KNSmlDdfPxAuthPW) == 0)
+        {
+        return CNSmlInternetAdapter::EWap;
+        }
+    else if (iField->Compare(KNSmlDdfPxAddr) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfDNSAddrFromServer) == 0)
+        {
+        return CNSmlInternetAdapter::EBool;
+        }
+    else if (iField->Compare(KNSmlDdfIPv6DNSAddrFromServer) == 0)
+        {
+        return CNSmlInternetAdapter::EBool;
+        }
+    else if (iField->Compare(KNSmlDdfDNSAddrL) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfDNSAddrTy) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfDNSPriority) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfPxName) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfAuthSecr) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfPxId) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfPxPW) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfPortNbr) == 0)
+        {
+        if(iWapPort)    // Different handlig for WAP and Proxy PortNbr
+            {
+            return CNSmlInternetAdapter::EWap;
+            }
+        else
+            {
+            return CNSmlInternetAdapter::EInt;
+            }
+        }
+    else if (iField->Compare(KNSmlDdfUsePTxtLog) == 0)
+        {
+        return CNSmlInternetAdapter::EBool;
+        }
+    else if (iField->Compare(KNSmlDdfDefGW) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfNetworkMask) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfNetworkID) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfPPPComp) == 0)
+        {
+        return CNSmlInternetAdapter::EBool;
+        }
+    else if (iField->Compare(KNSmlDdfGPRSPDP) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfDomainL) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfNoPxForL) == 0)
+        {
+        return CNSmlInternetAdapter::ESpec;
+        }
+    else if (iField->Compare(KNSmlDdfIPAddrFromServer) == 0)
+        {
+        return CNSmlInternetAdapter::EBool;
+        }
+    else if (iField->Compare(KNSmlDdfIPAddr) == 0)
+        {
+        return EStr;
+        }
+    else if (iField->Compare(KNSmlDdfIfNetworks) == 0)
+        {
+        return CNSmlInternetAdapter::EStr;
+        }
+    else if (iField->Compare(KNSmlDdfIAPService) == 0)
+        {
+        return CNSmlInternetAdapter::ESpec;
+        }
+
+    else if (iField->Compare(KNSmlDdfIAPSeamlessness) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+    else if (iField->Compare(KNSmlDdfIAPMetaData) == 0)
+        {
+        return CNSmlInternetAdapter::EInt;
+        }
+
+    _DBG_FILE("CNSmlInternetAdapter::GetAPFieldType(): Error");
+
+    return EWrong;
+    }
+
+//------------------------------------------------------------------------------
+//
+//------------------------------------------------------------------------------
+#ifndef IMPLEMENTATION_PROXY_ENTRY
+#define IMPLEMENTATION_PROXY_ENTRY(aUid, aFuncPtr)  {{aUid},(aFuncPtr)}
+#endif
+
+const TImplementationProxy ImplementationTable[] = 
+    {
+    IMPLEMENTATION_PROXY_ENTRY(0x101F6DE2, CNSmlInternetAdapter::NewL)
+    };
+
+//------------------------------------------------------------------------------
+// TImplementationProxy* ImplementationGroupProxy()
+//------------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    _DBG_FILE("ImplementationGroupProxy() for CNSmlInternetAdapter: begin");
+
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+    _DBG_FILE("ImplementationGroupProxy() for CNSmlInternetAdapter: end");
+    return ImplementationTable;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::IntLUID()
+//      Returns IntValue for aLUID
+//=============================================
+TInt CNSmlInternetAdapter::IntLUID(const TDesC8& aLUID)
+    {
+    TLex8 lex(aLUID);
+
+    if (lex.Val(iLUID) == KErrNone)
+        {
+        if ((iLUID > KNSmlApProxyUpperBase) && 
+            (iLUID < KNSmlApDnsLuidUpperBase ))
+            {
+            iLUID = iLUID - KNSmlApProxyUpperBase;
+            }
+        else if ((iLUID > KNSmlApProxyLowerBase) && 
+                 (iLUID < KNSmlApProxyUpperBase ))
+            {
+            iProxyId = iLUID - KNSmlApProxyLowerBase; // Proxy 
+            iLUID = iProxyId;
+            }
+        else if ((iLUID > KNSmlAp3gpppsLowerBase ) && 
+                 (iLUID <= KNSmlApProxyLowerBase) )
+            {
+            iLUID = iLUID - KNSmlAp3gpppsLowerBase;
+            i3GPPPS = ETrue;
+            }
+        else
+            {
+            iProxyId = 0;
+            }
+        return iLUID;
+        }
+    else
+        {
+        return 0;
+        }
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::GetIntObject8()
+//      Returns IntValue for aObject
+//=============================================
+TInt CNSmlInternetAdapter::GetIntObject8(const TDesC8& aObject)
+    {
+    TLex8 lex(aObject);
+
+    TInt lValue = 0;
+
+    if (lex.Val(lValue) == KErrNone)
+        {
+        return lValue;
+        }
+    else
+        {
+        return lValue;
+        }
+    }
+//=============================================
+//      CNSmlInternetAdapter::SetIntObjectLC()
+//      Returns IntValue for aObject
+//=============================================
+TDesC8& CNSmlInternetAdapter::SetIntObjectLC(const TInt& aObject)
+    {
+    HBufC8* buf = HBufC8::NewLC(8);
+    TPtr8 ptrBuf = buf->Des();
+
+    ptrBuf.Num(aObject);
+
+    return *buf;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::NotValidStrLenght()
+//      False if datalength is valid
+//=============================================
+TBool CNSmlInternetAdapter::NotValidStrLenght(const TDesC& aSource)
+    {
+    TInt len = aSource.Length();
+    TBool theBool = EFalse;
+
+    if(len > KCommsDbSvrMaxFieldLength)
+        {
+        theBool = ETrue;  
+        }
+    return theBool;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::SetField()
+//      String after last '/' is returned
+//      
+//=============================================
+TInt CNSmlInternetAdapter::SetField( const TDesC8& aSource )
+    {
+    if (aSource.LocateReverse('/') == KErrNotFound)
+        {
+        iField->Des().Format(aSource);
+        }
+    else
+        {
+        iField->Des().Format(aSource.Mid(aSource.LocateReverse('/')+1));
+        }
+
+    return KErrNone;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::ConvertTo8LC()
+//      Converts string value to 8-bit
+//      
+//=============================================
+TDesC8& CNSmlInternetAdapter::ConvertTo8LC( const TDesC& aSource )
+    {
+    HBufC8* buf = HBufC8::NewLC( aSource.Length()*2);
+    TPtr8 bufPtr = buf->Des();
+    CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource );
+
+    return *buf;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::ConvertTo16LC()
+//      Converts string value to 16-bit
+//      
+//=============================================
+TDesC16& CNSmlInternetAdapter::ConvertTo16LC( const TDesC8& aSource)
+    {
+    HBufC16* buf16 = HBufC16::NewLC( aSource.Length() );
+    TPtr bufPtr16 = buf16->Des();
+
+    CnvUtfConverter::ConvertToUnicodeFromUtf8(bufPtr16, aSource);
+
+    return *buf16;
+    }
+
+
+//=============================================
+//      CNSmlInternetAdapter::InitializeGPRSL()
+//      Initialize GPRS-data before insert
+//      
+//=============================================
+TInt CNSmlInternetAdapter::InitializeGPRSL( CCommsDbTableView* aTable )
+    {
+    TBuf<KCommsDbSvrMaxFieldLength> user;
+    TBuf<KCommsDbSvrMaxFieldLength> pass;
+
+  _LIT(Kdns6Address,   "0:0:0:0:0:0:0:0");
+    _LIT(KgifNetworks,"ip");
+
+    // COMMON DATA 
+    aTable->WriteBoolL(TPtrC(SERVICE_DISABLE_PLAIN_TEXT_AUTH),EFalse);
+
+    aTable->WriteTextL(TPtrC(GPRS_IF_NETWORKS), KgifNetworks);
+
+    aTable->WriteTextL(TPtrC(COMMDB_NAME), ConvertTo16LC(iIAPName)); // Same as IAP
+    CleanupStack::PopAndDestroy(); //ConvertTo16LC
+
+    aTable->WriteBoolL(TPtrC(GPRS_IF_PROMPT_FOR_AUTH),      EFalse);
+    aTable->WriteTextL(TPtrC(GPRS_IF_AUTH_NAME),            user);
+    aTable->WriteTextL(TPtrC(GPRS_IF_AUTH_PASS),            pass);
+
+    aTable->WriteBoolL(TPtrC(GPRS_IP_ADDR_FROM_SERVER),     ETrue );
+    aTable->WriteTextL(TPtrC(GPRS_IP_ADDR),                 KNSmlEmptyIpv4Address);
+
+    aTable->WriteBoolL(TPtrC(GPRS_IP_DNS_ADDR_FROM_SERVER), ETrue );
+    aTable->WriteTextL(TPtrC(GPRS_IP_NAME_SERVER1),         KNSmlEmptyIpv4Address);
+    aTable->WriteTextL(TPtrC(GPRS_IP_NAME_SERVER2),         KNSmlEmptyIpv4Address);
+        
+    aTable->WriteBoolL(TPtrC(GPRS_IP6_DNS_ADDR_FROM_SERVER), ETrue );  
+    aTable->WriteTextL(TPtrC(GPRS_IP6_NAME_SERVER1),        Kdns6Address);
+    aTable->WriteTextL(TPtrC(GPRS_IP6_NAME_SERVER2),        Kdns6Address);
+    // GPRS DATA
+
+    aTable->WriteTextL(TPtrC(GPRS_APN), ConvertTo16LC(iIAPName)); // Same as IAP
+    CleanupStack::PopAndDestroy(); //ConvertTo16LC
+
+    aTable->WriteUintL(TPtrC(GPRS_REQ_PRECEDENCE),          0);
+    aTable->WriteUintL(TPtrC(GPRS_REQ_DELAY),               0);
+    aTable->WriteUintL(TPtrC(GPRS_REQ_RELIABILITY),         0);
+    aTable->WriteUintL(TPtrC(GPRS_REQ_PEAK_THROUGHPUT),     0);
+    aTable->WriteUintL(TPtrC(GPRS_REQ_MEAN_THROUGHPUT),     0);
+    aTable->WriteUintL(TPtrC(GPRS_MIN_PRECEDENCE),          0);
+    aTable->WriteUintL(TPtrC(GPRS_MIN_DELAY),               0);
+    aTable->WriteUintL(TPtrC(GPRS_MIN_RELIABILITY),         0);
+    aTable->WriteUintL(TPtrC(GPRS_MIN_PEAK_THROUGHPUT),     0);
+    aTable->WriteUintL(TPtrC(GPRS_MIN_MEAN_THROUGHPUT),     0);
+
+    aTable->WriteUintL(TPtrC(GPRS_IF_AUTH_RETRIES),         0);
+    
+    aTable->WriteBoolL(TPtrC(GPRS_DATA_COMPRESSION),        EFalse );
+    aTable->WriteUintL(TPtrC(GPRS_PDP_TYPE),                RPacketContext::EPdpTypeIPv4);  // IPV4
+
+    aTable->WriteBoolL(TPtrC(GPRS_ENABLE_LCP_EXTENSIONS),   EFalse );
+    aTable->WriteBoolL(TPtrC(GPRS_ANONYMOUS_ACCESS),        EFalse );
+    aTable->WriteBoolL(TPtrC(GPRS_HEADER_COMPRESSION),      EFalse );
+
+    aTable->WriteBoolL(TPtrC(GPRS_IP_ADDR_FROM_SERVER),     ETrue );
+    aTable->WriteTextL(TPtrC(GPRS_IP_GATEWAY),              KNSmlEmptyIpv4Address);
+
+    aTable->WriteTextL(TPtrC(GPRS_IP_ADDR),                 KNSmlEmptyIpv4Address); 
+    aTable->WriteTextL(TPtrC(GPRS_IF_PARAMS),               KNullDesC);
+    aTable->WriteTextL(TPtrC(GPRS_IP_NETMASK),              KNullDesC);
+
+    aTable->WriteUintL(TPtrC(GPRS_QOS_WARNING_TIMEOUT),     0xffffffff);
+
+    aTable->WriteUintL(TPtrC(GPRS_AP_TYPE), (TUint32)EIspTypeInternetAndWAP);   
+
+
+    return KErrNone;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::InitializeProxyL()
+//      Initialize Proxy-data before insert
+//      
+//=============================================
+TInt CNSmlInternetAdapter::InitializeProxyL( CCommsDbTableView* aTable )
+    {
+    _LIT(KprotocolName,    "http"); // http, https, ftp, ftps
+    const TUint32 KPortNumber(80);
+
+    aTable->WriteUintL(TPtrC(PROXY_ISP),                iProxyISP);         // ISP with which these proxies are associated 
+
+    aTable->WriteTextL(TPtrC(PROXY_SERVICE_TYPE),       iProxyServiceType); // Type ISP/GPRS
+    aTable->WriteBoolL(TPtrC(PROXY_USE_PROXY_SERVER),   ETrue );
+
+    TPtr proxyName16 = HBufC::NewLC( iProxyServerName.Length() )->Des();
+    CnvUtfConverter::ConvertToUnicodeFromUtf8( proxyName16, iProxyServerName );
+
+    aTable->WriteLongTextL(TPtrC(PROXY_SERVER_NAME),    proxyName16);   // Name of the proxy server
+    aTable->WriteTextL(TPtrC(PROXY_PROTOCOL_NAME),      KprotocolName);      // also https + ftps
+
+    aTable->WriteUintL(TPtrC(PROXY_PORT_NUMBER),        KPortNumber); 
+
+    aTable->WriteLongTextL(TPtrC(PROXY_EXCEPTIONS),     KNullDesC);
+
+    CleanupStack::PopAndDestroy(); //proxyName16
+    return KErrNone;
+    }
+
+
+//      CNSmlInternetAdapter::IsInsertAllowedL
+//      Check if possible to Add new AP
+//
+//=============================================
+TBool CNSmlInternetAdapter::IsInsertAllowedL()
+    {
+    TBool theBool = EFalse;
+//
+//  Id + Name + Bearer needed for Insert
+//
+    if (
+        iIAPName.Length() > 0  &&
+        iBearer.Length()  > 0  &&
+        iDirection != ECommDbConnectionDirectionUnknown)
+        {
+        theBool = ETrue;
+        }
+//
+//  Should check also if Name or iISPId in USE !!!
+//
+    if(theBool)
+        {
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingTextLC(iBearer,
+                                                                         TPtrC(COMMDB_NAME),
+                                                                         iIAPName);
+        TInt errorCode = tableView->GotoFirstRecord();
+
+        // Node allready exists => No adding possible
+        if ( errorCode == KErrNone )
+            {
+            DBG_ARGS8(_S8("CNSmlInternetAdapter::NODE NAME <%S> ALLREADY(): error"), &iIAPName );
+            theBool = EFalse;
+            }
+        CleanupStack::PopAndDestroy(tableView); 
+        }
+    return theBool;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::SaveIAPDataL
+//      Saves data to IAP-table
+//      
+//=============================================
+void CNSmlInternetAdapter::SaveIAPDataL(const TDesC8& aURI)
+    {
+    TInt                    errorCode;
+    CCommsDbTableView*      tableView;
+    
+    TBool apEnforce=EFalse;
+    TBool iapReLock = EFalse;
+
+    
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        TRAPD(eError,apEnforce=CheckEnforcementL())
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::SaveIAPDataL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+        if(eError==KErrNone && apEnforce)
+            {
+            DoLockIAPTablesL(EFalse);
+            iWAPRelock = ETrue;
+            }
+        }
+    if(iIAPExists)
+        {
+        tableView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(COMMDB_ID),  iIAPId);
+        if(IsIAPRecordLockedL(iIAPId))
+            {
+           _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED"); 
+      	   TInt reclockerr = ((CCommsDbProtectTableView*)tableView)->UnprotectRecord();
+           DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+           if(reclockerr==KErrNone)
+                iapReLock = ETrue;
+            }
+        else
+            {
+            _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected");  
+            }
+        
+        errorCode = tableView->GotoFirstRecord();
+        
+        if ( errorCode == KErrNone )
+            {
+            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                {
+                // if enforcement is on and rec exists, it needs to be unprotected
+                if ( apEnforce )
+                    {
+                    ((CCommsDbProtectTableView*)tableView)->UnprotectRecord();
+                    }            
+                }
+                errorCode = tableView->UpdateRecord();
+            }
+        }
+    else
+        {
+        tableView = iDatabase->OpenTableLC(TPtrC(IAP));
+        
+        errorCode = tableView->InsertRecord(iIAPId);
+        }
+    
+    if ( errorCode == KErrNone )
+        {
+        TUint32 modemISPId = 1;                    // Default
+        TBuf<KCommsDbSvrMaxFieldLength> modemBearer = TPtrC(MODEM_BEARER);
+        if(iBearer == TPtrC(LAN_SERVICE))
+            {
+            modemBearer = TPtrC(LAN_BEARER);
+            }
+        else if(iBearer == TPtrC(VPN_SERVICE))
+            {
+            modemBearer = TPtrC(VIRTUAL_BEARER);
+            }
+        else
+            {
+            modemBearer = TPtrC(MODEM_BEARER);
+            }
+        
+        if(modemBearer == TPtrC(MODEM_BEARER))
+            {
+            GetModemBearerL(modemISPId);
+            }
+        else if(modemBearer == TPtrC(VIRTUAL_BEARER))
+            {
+            modemISPId = 1;
+            }
+        else if ( iWlanSupported )
+            {
+            GetLanBearerL(modemISPId);
+            }        
+        tableView->WriteTextL(TPtrC(COMMDB_NAME),       ConvertTo16LC(iIAPName));
+        CleanupStack::PopAndDestroy(); //ConvertTo16LC
+        
+        // ISP id must be written
+        tableView->WriteUintL(TPtrC(IAP_SERVICE),       iISPId);
+        tableView->WriteTextL(TPtrC(IAP_SERVICE_TYPE),  iBearer);
+
+        tableView->WriteUintL(TPtrC(IAP_BEARER),        modemISPId);
+        tableView->WriteTextL(TPtrC(IAP_BEARER_TYPE),   modemBearer);        
+        if( iNetworkId != KErrNotFound )
+            {
+            tableView->WriteUintL(TPtrC(IAP_NETWORK),       iNetworkId); // First name on network table    
+            }        
+        tableView->WriteUintL(TPtrC(IAP_NETWORK_WEIGHTING), 0);
+        tableView->WriteUintL(TPtrC(IAP_LOCATION),      2); // Minimum=2
+        
+
+        errorCode = tableView->PutRecordChanges();
+        }
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        if(iWAPRelock)
+            {
+            DoLockIAPTablesL(ETrue);
+            ((CCommsDbProtectTableView*)tableView)->ProtectRecord();
+            iWAPRelock = EFalse;
+            }
+        }
+    if(iapReLock)
+        {
+        TInt reclockerr = DoProtectIAPRecordL(iIAPId,ETrue);
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+        if(reclockerr==KErrNone)
+            iapReLock = EFalse; 
+        } 
+
+    if ( errorCode == KErrNone )
+        {
+        if(!iIAPExists)
+            {
+            TUint32 lValue;
+            tableView->ReadUintL(TPtrC(COMMDB_ID),lValue);
+            
+            // Add AP
+            TPtrC8 addURI = GetAddURISeg(aURI,KNSmlDdfAP);
+            
+            TBuf8<16> addLUID;
+            _LIT8(KFormat,"%d");
+            addLUID.Format(KFormat,lValue);
+            
+            // Also added to mapping
+            iCallBack->SetMappingL(addURI,addLUID);
+            DBG_ARGS8(_S8("AP:level1 URI - <%S> <%S> <%d>"), &addURI, &addLUID, lValue );
+            }
+        
+        iIAPExists = ETrue;
+        }
+
+    if (apEnforce)
+      apEnforce=EFalse; // to rget rid of warnings
+    
+    CleanupStack::PopAndDestroy(); // tableView
+    User::LeaveIfError(errorCode);
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::GetMaxIdL
+//      Get max id from given bearer
+//      
+//=============================================
+TUint32 CNSmlInternetAdapter::GetMaxIdL()
+    {
+    CCommsDbTableView*  checkView;
+    TUint32 maxGPRS(0);
+    checkView = iDatabase->OpenTableLC(iBearer);
+    TInt errorCodem = checkView->GotoFirstRecord();
+    while (errorCodem == KErrNone)
+        {
+        TUint32 lValue;
+        checkView->ReadUintL(TPtrC(COMMDB_ID),lValue);
+        if(lValue > maxGPRS)
+            {
+            maxGPRS = lValue;
+            }
+        errorCodem = checkView->GotoNextRecord();
+        }
+
+    CleanupStack::PopAndDestroy(); // checkView
+
+    return (maxGPRS);
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::GetProxyIdL
+//      Get proxy id for given IAP
+//      
+//=============================================
+TBool CNSmlInternetAdapter::GetProxyIdL(const TDesC8& aURI)
+    {
+    TBool proxyFound = EFalse;
+
+    CCommsDbTableView*  checkView;
+
+    // Get servicetype for IAP nbr  
+
+    TUint32 iapID = GetAPIdFromURIL(aURI);
+    if( iapID == 0 )
+    {
+      if( IsAPUriFormatMatchPredefined(aURI) )
+      {
+        iLUID = ConstructTreeL(aURI);
+        iapID = GetAPIdFromURIL(aURI);
+      }
+       
+    }
+    //  IAP-table search serviceType + serviceId
+    CCommsDbTableView* iapView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                   TPtrC(COMMDB_ID),
+                                                                   iapID);
+    
+    TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+    TUint32 serviceId;
+
+    TInt errorCode = iapView->GotoFirstRecord();
+    
+    // Read serviceType from (IAP)
+    if ( errorCode == KErrNone )
+        {
+        iapView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+        iapView->ReadUintL(TPtrC(IAP_SERVICE),      serviceId);
+        CleanupStack::PopAndDestroy(); // iapView
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy(); // iapView
+        return proxyFound;
+        }
+
+    checkView = iDatabase->OpenViewMatchingTextLC(TPtrC(PROXIES),
+                                                  TPtrC(PROXY_SERVICE_TYPE),
+                                                  serviceType);
+
+    TInt errorCodem = checkView->GotoFirstRecord();
+
+    while (errorCodem == KErrNone)
+        {
+        TUint32 lValue;
+        checkView->ReadUintL(TPtrC(PROXY_ISP),lValue);
+        if(lValue ==  serviceId)
+            {
+            checkView->ReadUintL(TPtrC(COMMDB_ID),iProxyId);
+            proxyFound = ETrue;
+            break;
+            }
+        errorCodem = checkView->GotoNextRecord();
+        }
+
+    CleanupStack::PopAndDestroy(); // checkView
+
+    return proxyFound;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::APExistsL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::APExistsL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  checkView;
+
+    checkView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(COMMDB_ID),  aId);
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        ret = ETrue;
+        }
+    CleanupStack::PopAndDestroy(); // checkView
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::NetworkExistsL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::NetworkExistsL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  checkView;
+
+    checkView = iDatabase->OpenViewMatchingUintLC(TPtrC(NETWORK),TPtrC(COMMDB_ID),  aId);
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        ret = ETrue;
+        }
+    CleanupStack::PopAndDestroy(); // checkView
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::NetworkNameExistsL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::NetworkNameExistsL(TUint32& aId, const TDesC8& aObject)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  checkView;
+
+    checkView = iDatabase->OpenViewMatchingTextLC(TPtrC(NETWORK),TPtrC(COMMDB_NAME), ConvertTo16LC(aObject));
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        checkView->ReadUintL(TPtrC(COMMDB_ID), aId);
+        ret = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy(2); // checkView ConvertTo16LC
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::AddNetworkL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::AddNetworkL(TUint32& aId, const TDesC8& aObject)
+    {
+    TBool ret = EFalse;
+    TUint32 newId;
+    CCommsDbTableView* networkView = iDatabase->OpenTableLC(TPtrC(NETWORK));
+
+    if( networkView->InsertRecord(newId) == KErrNone )
+        {
+        networkView->WriteTextL(TPtrC(COMMDB_NAME), ConvertTo16LC(aObject));
+        if(networkView->PutRecordChanges() == KErrNone)
+            {
+            networkView->ReadUintL(TPtrC(COMMDB_ID), aId); // New networks Id
+            ret = ETrue;
+            }
+        CleanupStack::PopAndDestroy(); //ConvertTo16LC
+        }
+    CleanupStack::PopAndDestroy(); // networkView
+    DBG_ARGS8(_S8("NsmlInternetAdapter: AddNetworkL:networkId %d"), aId);
+
+    return ret;
+    }
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::NAPDefExistsL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::NAPDefExistsL(TUint32 aId )
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  checkView;
+
+    
+    checkView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(IAP_SERVICE), aId);
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+        checkView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,TPtrC(COMMDB_ID), aId);
+        error = tableView->GotoFirstRecord();
+
+        if (error == KErrNone)
+            {
+            ret = ETrue;
+            }
+        CleanupStack::PopAndDestroy(); // tableView
+        }
+
+    CleanupStack::PopAndDestroy(); // checkView
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::PxExistsL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::PxExistsL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  pxView;
+
+    pxView = iDatabase->OpenViewMatchingUintLC( TPtrC(PROXIES),TPtrC(COMMDB_ID), aId);
+
+    TInt errorCode = pxView->GotoFirstRecord();
+
+    if (errorCode == KErrNone )
+        {
+        ret = ETrue;
+        }
+    CleanupStack::PopAndDestroy(); // pxView
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::WapAPExistsL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::WapAPExistsL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  wapView;
+
+    wapView = iDatabase->OpenViewMatchingUintLC( TPtrC(WAP_IP_BEARER),TPtrC(WAP_IAP), aId);
+
+    TInt errorCode = wapView->GotoFirstRecord();
+
+    if (errorCode == KErrNone )
+        {
+        wapView->ReadUintL(TPtrC(WAP_ACCESS_POINT_ID), iWapId);
+        ret = ETrue;
+        }
+    CleanupStack::PopAndDestroy(); // wapView
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TUint32 CNSmlInternetAdapter::GetAPIdFromURIL(const TDesC8& aURI)
+//         Get AP luid for given aURI
+//------------------------------------------------------------------------------
+TUint32 CNSmlInternetAdapter::GetAPIdFromURIL(const TDesC8& aURI)
+    {
+    HBufC8* apURI = HBufC8::NewLC(aURI.Length());
+    
+    _DBG_FILE("CNSmlInternetAdapter::GetAPIdFromURIL(): begin");
+    DBG_ARGS8(_S8("AP:add aURI GetAPIdFromURIL   - %S "), &aURI);
+//
+//  Second slash after AP
+//
+    TInt i= 0;
+    for( i=aURI.Find(KNSmlDdfAP)+3; i < aURI.Length(); i++ )
+        {
+        if(aURI[i]=='/')
+            {
+            break;
+            }
+        }
+    DBG_ARGS8(_S8("AP:add aURI GetAPIdFromURIL i is %d "), i);
+    if(i>0)
+        {
+        apURI->Des().Format(aURI.Left(i));
+        }
+//
+//  Same profile as previous
+//
+    if(iPrevURI->Match(*apURI) != KErrNotFound)
+        {
+        _DBG_FILE("CNSmlInternetAdapter::GetAPIdFromURIL(): previous uri");
+        CleanupStack::PopAndDestroy(); // apURI
+        return iPrevLUID;
+        }
+//
+//  Fetch AP-id for URI
+//
+    HBufC8* apLUID = iCallBack->GetLuidAllocL(*apURI);
+    CleanupStack::PushL(apLUID);
+    
+    TUint32 resLUID = IntLUID(*apLUID); 
+    DBG_ARGS8(_S8("AP:add aURI GetAPIdFromURIL luidallocation is %d "), resLUID);
+    
+    if ( resLUID > 0 )
+      {
+      iPrevURI->Des().Format( *apURI );
+      iPrevLUID = resLUID;
+      }
+
+    CleanupStack::PopAndDestroy(2); // apURI, apLUID
+
+    return resLUID;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::DeleteProxyL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::DeleteProxyL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  pxView;
+
+    pxView = iDatabase->OpenViewMatchingUintLC( TPtrC(PROXIES),TPtrC(COMMDB_ID), aId);
+
+    TInt errorCode = pxView->GotoFirstRecord();
+
+    if (errorCode == KErrNone )
+        {
+        errorCode = pxView->DeleteRecord();
+        if (errorCode == KErrNone )
+            {
+            ret = ETrue;
+            }
+        }
+
+    CleanupStack::PopAndDestroy(); // pxView
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::DeleteWapAPL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::DeleteWapAPL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  wapView;
+
+    TUint32 wapId = 0;
+    
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        TBool apEnforce=EFalse;
+        TRAPD(eError,apEnforce=CheckEnforcementL())
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DeleteWAPAPL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+        if(eError==KErrNone && apEnforce)
+            {
+            DoLockIAPTablesL(EFalse);
+            iWAPRelock = ETrue;
+            }
+        }
+    wapView = iDatabase->OpenViewMatchingUintLC( TPtrC(WAP_IP_BEARER),TPtrC(WAP_IAP), aId);
+    
+    TInt errorCode = wapView->GotoFirstRecord();
+    
+    if (errorCode == KErrNone )
+        {
+        wapView->ReadUintL(TPtrC(WAP_ACCESS_POINT_ID),  wapId);  // WapIAP id
+        errorCode = wapView->DeleteRecord();
+        if (errorCode == KErrNone )
+            {
+            ret = ETrue;
+            }
+        }
+
+    if(ret)
+        {
+        CCommsDbTableView* wapApView = iDatabase->OpenViewMatchingUintLC( TPtrC(WAP_ACCESS_POINT),TPtrC(COMMDB_ID), wapId);
+
+        errorCode = wapApView->GotoFirstRecord();
+
+        if (errorCode == KErrNone )
+            {
+            errorCode = wapApView->DeleteRecord();
+            if (errorCode == KErrNone )
+                {
+                ret = ETrue;
+                }
+            }
+        CleanupStack::PopAndDestroy(); // wapApView
+        }
+
+    CleanupStack::PopAndDestroy(); // wapView
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        if(iWAPRelock)
+            {
+            DoLockIAPTablesL(ETrue);
+            iWAPRelock = EFalse;
+            }
+        }
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::DeleteNAPDefL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::DeleteNAPDefL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  checkView;
+    TBool apEnforce=EFalse;
+    TBool iapReLock = EFalse;
+    
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        TRAPD( eError,apEnforce=CheckEnforcementL() )
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DeleteNAPDefL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+        if( eError==KErrNone && apEnforce )
+            {
+            DoLockIAPTablesL(EFalse);
+            iWAPRelock = ETrue;
+            }
+        }
+
+    checkView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(IAP_SERVICE), aId);
+    if(IsIAPRecordLockedL(aId))
+        {
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");  
+        TInt reclockerr = ((CCommsDbProtectTableView*)checkView)->UnprotectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+        if(reclockerr==KErrNone)
+            iapReLock = ETrue;
+        }
+    else
+        {
+       _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected");  
+        }
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+        checkView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+
+        CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,TPtrC(COMMDB_ID), aId);
+        error = tableView->GotoFirstRecord();
+
+        if (error == KErrNone)
+            {
+            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                {
+                if ( apEnforce )
+                    {
+                    ((CCommsDbProtectTableView*)tableView)->UnprotectRecord();
+                    }
+                }
+            
+            error = tableView->DeleteRecord();
+            if (error == KErrNone )
+                {
+                ret = ETrue;
+                }
+            }
+        CleanupStack::PopAndDestroy(); // tableView
+        }
+
+    CleanupStack::PopAndDestroy(); // checkView
+   
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        if(iWAPRelock)
+            {
+            DoLockIAPTablesL(ETrue);
+            iWAPRelock = EFalse;
+            }
+        }
+    
+    if(iapReLock)
+        {
+        TInt reclockerr = DoProtectIAPRecordL(aId,ETrue);
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting WAPAccessRecord returned code = %d"),reclockerr);
+        if(reclockerr==KErrNone)
+            iapReLock = EFalse; 
+        }
+    if (apEnforce)
+      apEnforce=EFalse; // to get rid of warnings
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// Removes iapID and linger interval from CentralRepository
+// ---------------------------------------------------------------------------
+//
+void CNSmlInternetAdapter::DeleteLingerL( const TInt aIapId )    
+    {
+    TInt    err( KErrNone );
+    
+    // Open repository
+    CRepository* repository = CRepository::NewLC( KCRUidPDPContextManager );
+    
+    // Find if an entry for "iapId" already exists in CentRep 
+    RArray< TUint32 > foundKeys;
+    foundKeys.Reset();
+    
+    err = repository->FindEqL( KIapColumn,       // partial key
+                                KColumnMask,      // key mask
+                                aIapId,           // value
+                                foundKeys );      // found keys
+    
+    if ( err == KErrNone )
+        {
+        if ( foundKeys.Count() > 0 )
+            {
+            TInt    arrayCount( 0 );
+            
+            // Get number of iapId&linger entries in Centrep
+            err = repository->Get( KPdpContextManagerLingerArrayCount, arrayCount );
+
+            if ( err == KErrNone )
+                {
+                TInt32 row = foundKeys[ 0 ] & KRowMask;
+
+                // Shift existing entries one position left
+                for ( TInt i=row+1; i <= arrayCount; i++ )
+                    {
+                    TInt iapId( 0 );
+                    TInt linger( 0 );
+                        
+                    err = repository->Get( ( KIapColumn | i ), iapId );
+                    
+                    if ( err == KErrNone )
+                        {
+                        err = repository->Get( ( KLingerColumn | i ), linger );    
+                        }
+                        
+                    if ( err == KErrNone )
+                        {
+                        err = repository->Set( ( KIapColumn | (i-1) ), iapId );    
+                        }
+                                    
+                    if ( err == KErrNone )
+                        {
+                        err = repository->Set( ( KLingerColumn | (i-1) ), linger );    
+                        }
+                    }
+                        
+                // Remove the last entry on row arrayCount
+                if ( err == KErrNone )
+                    {
+                    TUint32 errorKey( 0 );
+                       
+                    err = repository->Delete( ( KIapColumn | arrayCount ), 
+                                                 0xFFFFFFFF, 
+                                                 errorKey);
+                    
+                    if ( err == KErrNone )
+                        {
+                        err = repository->Delete( ( KLingerColumn | arrayCount ), 
+                                                   0xFFFFFFFF, 
+                                                   errorKey);    
+                        arrayCount--;
+                        }
+                    }
+                    
+                // Update number of iapId&linger entries in Centrep
+                err = repository->Set( KPdpContextManagerLingerArrayCount, arrayCount );
+                }
+            }        
+        }
+        
+    foundKeys.Close();
+    CleanupStack::PopAndDestroy( repository );
+       
+    }
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::DeleteAPL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::DeleteAPL(TUint32 aId)
+    {
+    TBool ret = EFalse;
+    
+  //Check MIP IAP first then go forward
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        { 
+        TBool apEnforce=EFalse;
+        TBool wlanEnforce= EFalse;
+        TInt wError = KErrNone;
+        TRAP(wError,wlanEnforce=CheckWLANEnforcementL());
+        TRAPD( eError,apEnforce=CheckEnforcementL() )
+        if( wlanEnforce)
+            {
+            UnprotectWLANAPItemL(aId);
+            }
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DeleteAPL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+        if( eError==KErrNone && apEnforce )
+            {
+            DoLockIAPTablesL(EFalse);
+            iWAPRelock = ETrue;
+            }
+        }
+  
+    if(iDatabase->InTransaction())
+        iDatabase->CommitTransaction();
+    RCmManagerExt        cmManagerExt;
+    cmManagerExt.OpenL();
+    RCmConnectionMethodExt cmConMethodExt ;
+    TRAPD(err, cmConMethodExt= cmManagerExt.ConnectionMethodL( aId ));
+    CleanupClosePushL( cmConMethodExt );
+    if(err == KErrNone)
+        {
+        TRAPD(dError,cmConMethodExt.DeleteL());
+        if(dError == KErrNone)
+            {
+            DeleteLingerL( aId );
+            ret= ETrue;
+            }
+        }
+  
+        CleanupStack::PopAndDestroy(  );
+        cmManagerExt.Close();
+        if(!iDatabase->InTransaction())
+            {
+            TInt dberr = iDatabase->BeginTransaction();
+            if( dberr == KErrLocked )
+                {
+                _DBG_FILE("DeleteAPL: CommsDat was locked.");
+                TInt retry = KBeginTransRetryCount;            
+                while ( retry > 0 && dberr == KErrLocked )
+                    {
+                    User::After(KBeginTransRetryDelay);
+                    _DBG_FILE("DeleteAPL: Slept 1 second. Try again");
+                    dberr = iDatabase->BeginTransaction();
+                    retry--;
+                    }
+                if(dberr != KErrNone)
+                    {        
+                    _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                    User::Leave( dberr ); 
+                    }           
+                }
+            }
+    
+    //The following code is kept under #ifndef , so that it can be removed
+    //after RD_DM_APPLICATION_LEVEL_ROAMING_SUPPORT becomes stable.
+    
+   /* #ifndef RD_DM_APPLICATION_LEVEL_ROAMING_SUPPORT
+    CCommsDbTableView*  checkView;
+    CCommsDbTableView*  proxyView;
+    
+    checkView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(COMMDB_ID),  aId);
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        //
+        // Remove possible NAPDef-data first if ONLY IAP
+        //
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+        TUint32                         serviceId;
+
+        checkView->ReadTextL(TPtrC(IAP_SERVICE_TYPE),   serviceType);
+        checkView->ReadUintL(TPtrC(IAP_SERVICE),        serviceId);  
+
+
+        CCommsDbTableView* tableView;
+        tableView= iDatabase->OpenViewMatchingUintLC(serviceType, TPtrC(COMMDB_ID), serviceId);
+        error = tableView->GotoFirstRecord();
+        if (error == KErrNone )
+            {
+            error = tableView->DeleteRecord();
+            }
+        CleanupStack::PopAndDestroy();  // tableView
+        
+        //
+        // Delete Proxies for AP also
+        //
+        proxyView = iDatabase->OpenViewMatchingTextLC(TPtrC(PROXIES),
+                                                      TPtrC(PROXY_SERVICE_TYPE),
+                                                      serviceType);
+
+        TInt errorProxy = proxyView->GotoFirstRecord();
+
+        while (errorProxy == KErrNone)
+            {
+            TUint32 lValue;
+            proxyView->ReadUintL(TPtrC(PROXY_ISP),lValue);
+            if(lValue ==  serviceId)
+                {
+                proxyView->ReadUintL(TPtrC(COMMDB_ID),iProxyId);
+               DBG_ARGS8(_S8("DeleteAPL:Delete ServiceId=%d ProxyId=%d"),lValue, iProxyId);
+                error = proxyView->DeleteRecord();
+                }
+            errorProxy = proxyView->GotoNextRecord();
+            }
+            
+        CleanupStack::PopAndDestroy();  // proxyView
+
+        error = checkView->DeleteRecord();
+        if( error == KErrNone )
+            {
+            ret = ETrue;
+            }
+
+        // Delete WAP also
+        if(WapAPExistsL(aId))
+            {
+            DeleteWapAPL(aId);
+            }
+        }
+
+    CleanupStack::PopAndDestroy();      // checkView
+ #endif
+ */
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        if(iWAPRelock)
+            {
+            DoLockIAPTablesL(ETrue);
+            iWAPRelock = EFalse;
+            }   
+        }
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CNSmlInternetAdapter::LastURISeg(const TDesC8& aURI)
+// Returns only the last uri segment
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlInternetAdapter::LastURISeg(const TDesC8& aURI)
+    {
+    TInt i;
+    for(i=aURI.Length()-1;i>=0;i--)
+        {
+        if(aURI[i]=='/')
+            {
+            break;
+            }
+        }
+    if(i==0)
+        {
+        return aURI;
+        }
+    else
+        {
+        return aURI.Mid(i+1);
+        }
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CNSmlInternetAdapter::FirstURISeg(const TDesC8& aURI)
+// returns parent uri, i.e. removes last uri segment
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlInternetAdapter::FirstURISeg(const TDesC8& aURI)
+    {
+    TInt j= 0;
+    for(TInt i=0;i<=aURI.Length()-1;i++)
+        {
+        if(aURI[i]=='/')
+            {
+            for(j=i+1;j<=aURI.Length()-1;j++)
+                {
+                if(aURI[j]=='/') // Second slash => AP/xxxx
+                break;
+                }
+            break;
+            }
+        }
+    return aURI.Left(j);
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC8 CNSmlInternetAdapter::GetDynamicAPNodeUri( const TDesC8& aURI )
+// returns AP/xxx URI
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlInternetAdapter::GetDynamicAPNodeUri( const TDesC8& aURI )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::GetDynamicAPNodeUri(): begin");
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::GetDynamicAPNodeUri() - <%S> "), &aURI);
+
+    TInt i= 0;
+    for ( i = aURI.Find( KNSmlDdfAP ) + 3; i < aURI.Length(); i++ )
+        {
+        if( aURI[i] == '/' )
+            {
+            break;
+            }
+        }
+        
+    _DBG_FILE("CNSmlInternetAdapter::GetDynamicAPNodeUri(): end");
+    
+    return aURI.Left( i );
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlInternetAdapter::ExecuteBufferL(const TDesC8& aURI)
+// Executes commands for AP after Bearer-data is set
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::ExecuteBufferL(const TDesC8& aURI, const TBool aCompleting)
+    {
+    //
+    // Choose AP according to aURI
+    //
+    iExecutingBuffer = ETrue;
+    for(TInt i = 0; i<iBuffer->Count(); i++)
+        {
+        TPtrC8 parentUri = FirstURISeg(aURI);
+        if(iBuffer->At(i).iMappingName->Compare(parentUri) == 0 )
+            {
+            iExecutionIndex = i;
+            break;
+            }
+        }
+
+    if((iExecutionIndex<0) || (iExecutionIndex >= iBuffer->Count()))
+        {
+        return;
+        }
+
+    iISPId = 0;
+    //
+    // Execute all commands for One AP NAPDef
+    //
+    if ( iBuffer->At(iExecutionIndex).iDnsUpdateBuf )
+        {
+        iDnsUpdate = ETrue;
+        }
+    
+    for(TInt cmd=iBuffer->At(iExecutionIndex).iNodeBuf->Count()-1;cmd>=0;cmd--)
+        {
+        TBuf8<16> addLUID;
+        _LIT8(KFormat,"%d");    
+
+        if(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iUri->Match(_L8("AP/*/Px*")) != 0)
+            {
+
+            if (!iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iLeaf) 
+                {
+                addLUID.Format(KFormat,0);
+                if(iBuffer->At(iExecutionIndex).iLuid > 0)
+                    {
+                    addLUID.Format(KFormat,-1); // Used for Status return
+                    }
+                AddNodeObjectL(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iUri->Des(),
+                               addLUID,
+                               iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iStatusRef);
+
+                iBuffer->At(iExecutionIndex).iExecuted = ETrue;
+                }
+            else
+                {
+                if ( iBuffer->At(iExecutionIndex).iDnsUpdateBuf )
+                    {
+                    addLUID.Zero();
+                    addLUID.Append(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iLuid->Des());
+                    }
+                else
+                    {
+                    addLUID.Format(KFormat,iBuffer->At(iExecutionIndex).iLuid);
+                    if(!iBuffer->At(iExecutionIndex).iDirection ||    // The three values has to be set
+                       !iBuffer->At(iExecutionIndex).iBearer ||
+                       !iBuffer->At(iExecutionIndex).iNameReceived )         // before new AP set
+                        {
+                        addLUID.Format(KFormat,KNSmlIncompleteAP);  // (-1) Used for error 
+                        }                                           // Status return
+                    }
+                //iIAPName = iBuffer->At(iExecutionIndex).iName->Des();
+
+                AddLeafObjectL(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iUri->Des(),
+                               addLUID,
+                               iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iData->Des(),
+                               KNSmlMimeTypeTextPlain,
+                               iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iStatusRef);
+
+                if(iBuffer->At(iExecutionIndex).iLuid == 0) // After BearerL
+                iBuffer->At(iExecutionIndex).iLuid = iISPId;
+                }
+
+            iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd).iDone = ETrue;
+            }
+
+        }
+    //
+    // Execute all commands for One AP Px
+    //
+    for(TInt cmd2=0;cmd2 < iBuffer->At(iExecutionIndex).iNodeBuf->Count();cmd2++)
+        {
+        TBuf8<16> addLUID2;
+        _LIT8(KFormat,"%d");    
+        if(!iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iDone)
+            {
+            if (!iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iLeaf) 
+                {
+                addLUID2.Format(KFormat,0);
+                if(iBuffer->At(iExecutionIndex).iLuid > 0)
+                    {
+                    addLUID2.Format(KFormat,-1); // Used for Status return
+                    }
+                AddNodeObjectL(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iUri->Des(),
+                               addLUID2,
+                               iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iStatusRef);
+
+                iBuffer->At(iExecutionIndex).iExecuted = ETrue;
+                }
+            else
+                {
+                addLUID2.Format(KFormat,iBuffer->At(iExecutionIndex).iLuid);
+                iIAPName = iBuffer->At(iExecutionIndex).iName->Des();
+                if(!iBuffer->At(iExecutionIndex).iDirection ||    // Allvalues has to be set
+                   !iBuffer->At(iExecutionIndex).iBearer ||
+                   !iBuffer->At(iExecutionIndex).iName) // before new AP set
+                    {
+                    addLUID2.Format(KFormat,KNSmlIncompleteAP); // (-1) Used for error 
+                    }                                           // Status return
+
+                AddLeafObjectL(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iUri->Des(),
+                               addLUID2,
+                               iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iData->Des(),
+                               KNSmlMimeTypeTextPlain,
+                               iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iStatusRef);
+
+                if(iBuffer->At(iExecutionIndex).iLuid == 0) // After BearerL
+                iBuffer->At(iExecutionIndex).iLuid = iISPId;
+                }
+            } //++
+
+        iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iDone = ETrue;
+    
+        delete iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iUri;
+        iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iUri = NULL;
+        
+        if(iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iData)
+            {
+            delete iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iData;
+            iBuffer->At(iExecutionIndex).iNodeBuf->At(cmd2).iData = NULL;
+            }
+        }
+
+    // Wlan buffer execution only when called from CompleteOutstandingCmdsL (= aCompleting)
+    for(TInt i = 0; aCompleting && i < iBuffer->At(iExecutionIndex).iWlanNodeBuf->Count(); ++i )        
+        {
+        TBuf8<16> addLUID;
+        _LIT8( KFormat,"%d" );    
+
+        if ( !iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iLeaf ) 
+            {
+            addLUID.Format( KFormat, 0 );
+            
+            if( iBuffer->At( iExecutionIndex ).iLuid > 0 )
+                {
+                addLUID.Format( KFormat, iBuffer->At(iExecutionIndex).iLuid );
+                }
+            
+            AddNodeObjectL( iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iUri->Des(),
+                            addLUID,
+                            iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iStatusRef );
+
+            iBuffer->At( iExecutionIndex ).iExecuted = ETrue;
+            }
+        else
+            {
+            addLUID.Zero();
+            addLUID.Append( iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iLuid->Des() );
+            
+            iIAPName = iBuffer->At( iExecutionIndex ).iName->Des();
+
+            AddLeafObjectL( iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iUri->Des(),
+                            addLUID,
+                            iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iData->Des(),
+                            KNSmlMimeTypeTextPlain,
+                            iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iStatusRef);
+
+            if( iBuffer->At( iExecutionIndex ).iLuid == 0 ) // After BearerL            
+              {
+              iBuffer->At( iExecutionIndex ).iLuid = iISPId;
+              }
+              
+            }
+
+        iBuffer->At( iExecutionIndex ).iWlanNodeBuf->At( i ).iDone = ETrue;
+        }
+
+//
+//  Remove data from handled AP-commands
+//
+
+    ClearBuffer( iBuffer->At(iExecutionIndex).iNodeBuf );
+    
+    if ( aCompleting )
+        {
+        delete iBuffer->At(iExecutionIndex).iNodeBuf;
+        
+        ClearBuffer( iBuffer->At(iExecutionIndex).iWlanNodeBuf );
+        delete iBuffer->At(iExecutionIndex).iWlanNodeBuf;
+        
+        if(iBuffer->At(iExecutionIndex).iMappingName)
+            {
+            delete iBuffer->At(iExecutionIndex).iMappingName;
+            iBuffer->At(iExecutionIndex).iMappingName = NULL;
+            }
+
+        if(iBuffer->At(iExecutionIndex).iName)
+            {
+            delete iBuffer->At(iExecutionIndex).iName;
+            iBuffer->At(iExecutionIndex).iName = NULL;
+            }
+
+        iBuffer->Delete(iExecutionIndex); 
+        iBuffer->Compress();
+        }
+
+    iExecutingBuffer = EFalse;
+    iStaleMapUpdate = EFalse;
+    }
+
+//------------------------------------------------------------------------------
+// TPtrC16 CNSmlInternetAdapter::GetAddURISeg(const TDesC8& aURI,const TDesC8 aName)
+// Returns uri segment until the next segment after given aName
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlInternetAdapter::GetAddURISeg(const TDesC8& aURI,const TDesC8& aName)
+    {
+    TInt lStrt = aURI.Find(aName);
+    if (lStrt == KErrNotFound)
+        {
+        return aURI;
+        }
+
+    lStrt += 1;
+    TInt i = 0;
+    for( i=lStrt+aName.Length(); i <= aURI.Length()-1; i++ )
+        {
+        if(aURI[i]=='/')
+            {
+            break;
+            }
+        }
+    if(i==0)
+        {
+        return aURI;
+        }
+    else
+        {
+        return aURI.Left(i);
+        }
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::InitializeWAPAIPL()
+//      Initialize WAP IAP-data before insert
+//      
+//=============================================
+TInt CNSmlInternetAdapter::InitializeWAPIAPL( CCommsDbTableView* aTable, 
+                                              const TDesC8& aName )
+    {
+    aTable->WriteTextL(TPtrC(COMMDB_NAME),        ConvertTo16LC(aName)); // Same as IAP
+    
+
+    aTable->WriteTextL(TPtrC(WAP_CURRENT_BEARER), iWapBearer);
+    aTable->WriteLongTextL(TPtrC(WAP_START_PAGE),     ConvertTo16LC(iWAPAccessPoint)); 
+    CleanupStack::PopAndDestroy(2); //ConvertTo16LC
+    return KErrNone;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::InitializeWAPL()
+//      Initialize WAP IP Bearer-data  before insert
+//      
+//=============================================
+TInt CNSmlInternetAdapter::InitializeWAPL( CCommsDbTableView* aTable )
+    {
+    TUint32 wapPortNumber = 0;                 
+
+    aTable->WriteUintL(TPtrC(WAP_ACCESS_POINT_ID),  iWapId);        
+    aTable->WriteTextL(TPtrC(WAP_GATEWAY_ADDRESS),  KNSmlEmptyIpv4Address);
+
+    aTable->WriteUintL(TPtrC(WAP_WSP_OPTION),       EWapWspOptionConnectionOriented); // EWapWspOptionConnectionless
+    aTable->WriteBoolL(TPtrC(WAP_SECURITY),         EFalse ); // if 9200 => false
+
+    aTable->WriteUintL(TPtrC(WAP_IAP),              iISPId);        
+    aTable->WriteUintL(TPtrC(WAP_PROXY_PORT),       wapPortNumber);        
+
+    aTable->WriteTextL(TPtrC(WAP_PROXY_LOGIN_NAME), ConvertTo16LC(iWapUserName)); 
+    aTable->WriteTextL(TPtrC(WAP_PROXY_LOGIN_PASS), ConvertTo16LC(iWapPassword));
+    
+    CleanupStack::PopAndDestroy(2); //ConvertTo16LC
+    return KErrNone;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::IsWapPort()
+//      Check if portnbr for proxy or wap
+//      
+//=============================================
+void CNSmlInternetAdapter::IsWapPort( const TDesC8& aObject )
+    {
+    iWapPort = EFalse;
+    TInt portNbr = GetIntObject8(aObject);
+    if( portNbr >= KNSmlApWapLowerBase && portNbr <= KNSmlApWapUpperBase )
+        {
+        iWapPort = ETrue;
+        }
+    }
+
+// -------------------------------------------------------------------------------------
+// CNSmlInternetAdapter::FillNodeInfoL()
+// Fills the node info in ddf structure
+// -------------------------------------------------------------------------------------
+void CNSmlInternetAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode,
+                                          TSmlDmAccessTypes aAccTypes,
+                                          MSmlDmDDFObject::TOccurence aOccurrence, 
+                                          MSmlDmDDFObject::TScope aScope, 
+                                          MSmlDmDDFObject::TDFFormat aFormat,
+                                          const TDesC8& aDescription )
+                                          
+    {
+    aNode.SetAccessTypesL(aAccTypes);
+    aNode.SetOccurenceL(aOccurrence);
+    aNode.SetScopeL(aScope);
+    aNode.SetDFFormatL(aFormat);
+    if(aFormat!=MSmlDmDDFObject::ENode)
+        {
+        aNode.AddDFTypeMimeTypeL(KNSmlMimeType);
+        }
+    aNode.SetDescriptionL(aDescription);
+    }
+
+
+//=======================================================
+//      CNSmlInternetAdapter::UpdateIAPnameL()
+//      Update IAP-table name add Network-table if needed
+//      Add/update WAP-table name also
+//      
+//=======================================================
+TInt CNSmlInternetAdapter::UpdateIAPnameL( TUint32 aId, const TDesC8& aObject )
+    {
+
+    TUint32 nwId=0;
+    TInt ret = KErrNone;
+    TBool iapReLock = EFalse;
+    
+  TBool apEnforce=EFalse;
+  TRAPD( eError,apEnforce=CheckEnforcementL() )
+  DBG_ARGS8(_S8("CNSmlInternetAdapter::UpdateIAPNAme(): EError %d , APEnforcement is %d"),eError,apEnforce);
+  if( eError==KErrNone && apEnforce )
+    {
+        DoLockIAPTablesL(EFalse);
+        iWAPRelock = ETrue;
+    }
+   
+    CCommsDbTableView*  iapUpdate = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(COMMDB_ID),  aId);
+    if(IsIAPRecordLockedL(aId))
+        {
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is LOCKED");  
+        TInt reclockerr = ((CCommsDbProtectTableView*)iapUpdate)->UnprotectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+        if(reclockerr==KErrNone)
+               iapReLock = ETrue;
+        }
+    else
+        {
+        _DBG_FILE("CNSmlInternetAdapter::AddLeafObjectL(): apaccesspoint record is not write protected");  
+        }
+    TInt error = iapUpdate->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        _DBG_FILE("CNSmlInternetAdapter::UpdateIAPName, IAP_NETWORK set");
+        TRAPD(err, iapUpdate->ReadUintL(TPtrC(IAP_NETWORK),nwId));
+        
+        if(iapUpdate->UpdateRecord()==KErrNone)
+            {
+            iapUpdate->WriteTextL(TPtrC(COMMDB_NAME), ConvertTo16LC(aObject));
+                        
+            if( err != KErrNone ) // Network entry not yet created
+                {                
+        		AddNetworkL(nwId,aObject);
+                if( nwId > 0 )
+                    {
+                    _DBG_FILE("CNSmlInternetAdapter::UpdateIAPName, IAP_NETWORK set");
+                    DBG_ARGS8(_S8("CNSmlInternetAdapter::UpdateIAPName(): networks is %d"),nwId);
+                    iapUpdate->WriteUintL(TPtrC(IAP_NETWORK),nwId); 
+                    }
+                else
+                    {
+                    ret = KErrGeneral;
+            		}
+                }
+            iapUpdate->PutRecordChanges();
+            }
+        CleanupStack::PopAndDestroy(); //ConvertTo16LC
+        }    
+    CleanupStack::PopAndDestroy(); // iapUpdate
+    
+    
+    if(WapAPExistsL(aId)) 
+        {  // Update handled
+        CCommsDbTableView* wapView;
+        wapView = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_ACCESS_POINT),
+                                                    TPtrC(COMMDB_ID),
+                                                    iWapId);
+        TInt errorCode = wapView->GotoFirstRecord();
+    
+        // Read all columns needed.
+        if ( errorCode == KErrNone )
+            {
+            if(wapView->UpdateRecord()==KErrNone)
+                {
+                wapView->WriteTextL(TPtrC(COMMDB_NAME), ConvertTo16LC(aObject));
+                wapView->PutRecordChanges();
+                CleanupStack::PopAndDestroy(); //ConvertTo16LC
+                }
+            }
+        CleanupStack::PopAndDestroy(); // wapView
+        }
+    else
+        { // Insert handled
+        CCommsDbTableView* insView;
+        TInt wapInitOK = KErrCancel;
+
+        insView = iDatabase->OpenTableLC(TPtrC(WAP_ACCESS_POINT));
+        iWapId = 0;
+        wapInitOK = insView->InsertRecord(iWapId);
+        if(wapInitOK == KErrNone)
+            {
+            iWAPAccessPoint.Zero();
+            iWapUserName.Zero();
+            iWapPassword.Zero();
+            iWapBearer = TPtrC(WAP_IP_BEARER);
+
+            wapInitOK = InitializeWAPIAPL( insView, aObject );
+            wapInitOK = insView->PutRecordChanges();
+
+            if( wapInitOK == KErrNone )
+                {
+                CCommsDbTableView* updView;
+                TUint32 iWapId2 = 0;
+                iISPId = aId; // IAP number set
+                updView = iDatabase->OpenTableLC(TPtrC(WAP_IP_BEARER));
+                if(updView->InsertRecord(iWapId2) == KErrNone)
+                    {
+                    InitializeWAPL(updView);
+                    updView->PutRecordChanges();
+                    }
+                CleanupStack::PopAndDestroy(); // updView
+                }
+            }
+        else
+            {
+            ret = KErrGeneral;
+            }
+        CleanupStack::PopAndDestroy(); // insView
+        }   
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        if(iWAPRelock)
+            {
+            DoLockIAPTablesL(ETrue);
+            iWAPRelock = EFalse;
+            }
+        }
+    if(iapReLock)
+        {
+        TInt reclockerr = DoProtectIAPRecordL(aId,ETrue);
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::AddLeafObjectL ,UnProtecting IAPAccessRecord returned code = %d"),reclockerr);
+        if(reclockerr==KErrNone)
+            iapReLock = EFalse; 
+        }
+        return ret;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::InitializeVPNServiceL()
+//      Initialize VPNService-data before insert
+//=============================================
+TInt CNSmlInternetAdapter::InitializeVPNServiceL( CCommsDbTableView* aTable )
+    {
+    _LIT(KdefPolicy, "Home");
+
+    aTable->WriteTextL(TPtrC(COMMDB_NAME)           ,iIAPName); // Same as IAP
+
+    aTable->WriteTextL(TPtrC(VPN_SERVICE_POLICY)    ,KdefPolicy);
+    aTable->WriteUintL(TPtrC(VPN_SERVICE_IAP)       ,1);
+    aTable->WriteUintL(TPtrC(VPN_SERVICE_NETWORKID) ,1);
+
+    return KErrNone;
+    }
+
+
+//=============================================
+//      CNSmlInternetAdapter::InitializeLANServiceL()
+//      Initialize LANService-data before insert
+//=============================================
+TInt CNSmlInternetAdapter::InitializeLANServiceL( CCommsDbTableView* aTable )
+    {
+    if ( !iWlanSupported )
+        {
+      _DBG_FILE("CNSmlInternetAdapter::InitializeLANServiceL, WLAN not supported.");
+      return KErrNotSupported;
+        }
+    _LIT(KgifNetworks,   "ip,ip6");
+    _LIT(Kdns6Address,   "0:0:0:0:0:0:0:0");
+    _LIT(KdefaultNetmask, "255.255.255.0");
+
+    aTable->WriteTextL(TPtrC(COMMDB_NAME)            ,ConvertTo16LC(iIAPName));    // Same as IAP
+    aTable->WriteTextL(TPtrC(LAN_IF_NETWORKS)        ,KgifNetworks);
+    aTable->WriteBoolL(TPtrC(SERVICE_IP_ADDR_FROM_SERVER),ETrue);   // DHCP by default.
+    aTable->WriteTextL(TPtrC(SERVICE_IP_ADDR)        ,KNSmlEmptyIpv4Address);
+    aTable->WriteTextL(TPtrC(SERVICE_IP_NETMASK)     ,KdefaultNetmask);
+    aTable->WriteBoolL(TPtrC(SERVICE_IP_DNS_ADDR_FROM_SERVER),ETrue);
+    aTable->WriteTextL(TPtrC(SERVICE_IP_NAME_SERVER1),KNSmlEmptyIpv4Address); 
+    aTable->WriteTextL(TPtrC(SERVICE_IP_NAME_SERVER2),KNSmlEmptyIpv4Address); 
+    aTable->WriteTextL(TPtrC(SERVICE_IP_GATEWAY)     ,KNSmlEmptyIpv4Address); 
+    
+    aTable->WriteBoolL(TPtrC(SERVICE_IP6_DNS_ADDR_FROM_SERVER),ETrue );
+    aTable->WriteTextL(TPtrC(SERVICE_IP6_NAME_SERVER1),Kdns6Address);
+    aTable->WriteTextL(TPtrC(SERVICE_IP6_NAME_SERVER2),Kdns6Address);
+    aTable->WriteTextL(TPtrC(SERVICE_CONFIG_DAEMON_MANAGER_NAME), KDaemonManagerName);
+    aTable->WriteTextL(TPtrC(SERVICE_CONFIG_DAEMON_NAME), KConfigDaemonName );
+                            
+    CleanupStack::PopAndDestroy(); //ConvertTo16LC
+    return KErrNone;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::IsWLANfield()
+//      Check if handled by WLAN-adapter
+//=============================================
+TBool CNSmlInternetAdapter::IsWLANfield( const TDesC8& aURI )
+    {
+    TBool ret(EFalse);
+
+    SetField(aURI);
+
+    if(KNSmlDdfNetworkID().Match(*iField) == 0) // ID not valid
+        {
+        return ret;
+        }
+    if(KNSmlDdfAP().Match(*iField) == 0) // AP not valid
+        {
+        return ret;
+        }
+    if (aURI.Match(_L8("AP/*/NAPDef/*/WLAN/*")) != KErrNotFound)
+        {
+        DBG_ARGS8(_S8("AP:IsWLANfield URI - <%S> <%S> FOUND"), &aURI, iField );
+        ret = ETrue;
+        }
+
+    return ret;
+    }
+
+//=============================================
+//      CNSmlInternetAdapter::IsWlanL()
+//      Check if WLAN accesspoint
+//=============================================
+TBool CNSmlInternetAdapter::IsWlanL( const TDesC8& aURI )
+    {
+    TBool ret(EFalse);
+    
+    if ( !iWlanSupported )
+        {
+      _DBG_FILE("CNSmlInternetAdapter::IsWlanL, WLAN not supported.");
+      return ret;
+        }
+
+    TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+
+    // Get IAP nbr for servicetype
+    TUint32 apWlan = GetAPIdFromURIL(aURI);
+
+    //  IAP-table search serviceType (=Bearer)
+    CCommsDbTableView* iapViews = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                    TPtrC(COMMDB_ID),
+                                                                    apWlan);
+
+    TInt errorCode = iapViews->GotoFirstRecord();
+    
+    // Read iapService from (IAP)
+    if ( errorCode == KErrNone )
+        {
+        iapViews->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+        if(serviceType == TPtrC(LAN_SERVICE))
+            {
+            ret = ETrue;
+            }
+        }
+    CleanupStack::PopAndDestroy(); // iapViews
+
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::GetLanBearerL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::GetLanBearerL(TUint32& aId)
+    {
+    TBool ret = EFalse;
+    
+    if ( !iWlanSupported )
+        {
+      _DBG_FILE("CNSmlInternetAdapter::GetLanBearerL, WLAN not supported.");
+      return ret;
+        }
+    
+    CCommsDbTableView*  checkView;
+
+    HBufC* bName = HBufC::NewLC(15);
+    TPtr bNamePtr = bName->Des();
+    _LIT(KWlanBearer, "WLANBearer" );
+    bNamePtr.Format( KWlanBearer );
+
+    checkView = iDatabase->OpenViewMatchingTextLC(TPtrC(LAN_BEARER),TPtrC(COMMDB_NAME), bNamePtr);
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        checkView->ReadUintL(TPtrC(COMMDB_ID), aId);
+        ret = ETrue;
+        }
+    else
+        {
+        aId = 1; // Default modem 
+        }
+    DBG_ARGS8(_S8("CNSmlInternetAdapter:GetLanBearerL %d"), aId);
+
+    CleanupStack::PopAndDestroy(2); // checkView bName
+
+    return ret;
+    }
+
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::GetModemBearerL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::GetModemBearerL(TUint32& aId)
+    {
+    TBool ret = EFalse;
+    CCommsDbTableView*  checkView;
+
+    HBufC* bName = HBufC::NewLC(15);
+    TPtr bNamePtr = bName->Des();
+    
+    if(iBearer == TPtrC(OUTGOING_GPRS) ||
+       iBearer == TPtrC(INCOMING_GPRS) )
+        {
+        _LIT(KGprsModem, "GPRS Modem" );
+        bNamePtr.Format( KGprsModem );
+        }
+
+    checkView = iDatabase->OpenViewMatchingTextLC(TPtrC(MODEM_BEARER),TPtrC(COMMDB_NAME), bNamePtr);
+    TInt error = checkView->GotoFirstRecord();
+    if (error == KErrNone)
+        {
+        checkView->ReadUintL(TPtrC(COMMDB_ID), aId);
+        ret = ETrue;
+        }
+    else
+        {
+        aId = 5; // Default modem 1->5 ???
+        }
+    DBG_ARGS8(_S8("CNSmlInternetAdapter:GetModemBearerL %d"), aId);
+
+    CleanupStack::PopAndDestroy(2); // checkView bName
+
+    return ret;
+    }
+
+
+// ---------------------------------------------------------
+//      NextAPNameL()
+//      Generates new AP name.
+// ---------------------------------------------------------
+void CNSmlInternetAdapter::NextAPNameL(const TDesC8& aName)
+    {
+    // generate name candidate
+    HBufC8* nameCandidate = HBufC8::NewLC(aName.Length()+12);
+    TPtr8 candidatePtr = nameCandidate->Des();
+
+    // loop while valid name is found
+    TBool validName;
+
+    // loop while valid name is found
+    TInt i=0;
+    do  {
+        validName = ETrue;
+        candidatePtr.Format(aName);
+        if(i>0)
+            {
+            _LIT( KLeftBrace, "(" );
+            _LIT( KRightBrace, ")" );
+            HBufC* buf = HBufC::NewLC(10); //10 = max length of 32bit integer
+            TPtr ptrBuf = buf->Des();
+            ptrBuf.Num(i);
+            candidatePtr.Append( KLeftBrace );
+            candidatePtr.Append(ptrBuf);
+            candidatePtr.Append( KRightBrace );
+            CleanupStack::PopAndDestroy(); //buf
+            }
+        i++;
+        if(!IsValidNameL(candidatePtr))
+            {
+            validName = EFalse;
+            }
+    } while( !validName );
+
+    iIAPName = candidatePtr;
+
+    CleanupStack::PopAndDestroy(); //nameCandidate
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::IsValidNameL()
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::IsValidNameL(const TDesC8& aName)
+    {
+    TBool ret = ETrue;
+    CCommsDbTableView*  nameView;    
+
+    nameView = iDatabase->OpenViewMatchingTextLC( TPtrC(IAP),TPtrC(COMMDB_NAME), aName);
+
+    TInt errorCode = nameView->GotoFirstRecord();
+
+    if (errorCode == KErrNone )
+        {
+        ret = EFalse; // If found error returned        
+        }
+    
+    CleanupStack::PopAndDestroy(); // nameView
+    return ret;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::InitializeDNSParamsFromBuffL(const TPtrC8 aParentUri,
+//                                                          TInt& aDnsPri )
+// Finds parameters needed in updating DNSAddrL from buffer
+//------------------------------------------------------------------------------
+TBool CNSmlInternetAdapter::InitializeDNSParamsFromBuffL( const TPtrC8 aParentUri, 
+                                                          TInt& aDnsPri )
+    {
+    TInt cmd(0);
+    TBool found(EFalse);
+
+    TNSmlAPBufferElement& thisElem = iBuffer->At( 0 );
+
+    // Parse URI to match
+    CBufBase* buf = CBufFlat::NewL(150);
+    CleanupStack::PushL( buf );
+    buf->InsertL(0, aParentUri);
+    buf->InsertL(buf->Size(), KNSmlDmApValFSlash);
+    buf->InsertL(buf->Size(), KNSmlDdfDNSPriority );
+    TBuf8<150> tmp;
+    buf->Read(0, tmp, buf->Size());
+
+    cmd = thisElem.iNodeBuf->Count() -1;
+    // check if the DNSPriority is sent for DNSAddr/<x>
+    while( cmd >= 0 )
+        {
+        TNSmlAPAddElement& dbgElem2 = thisElem.iNodeBuf->At(cmd);
+        if( thisElem.iNodeBuf->At(cmd).iUri->Match( tmp ) != KErrNotFound )
+            {
+            TLex8 lex(thisElem.iNodeBuf->At(cmd).iData->Des());
+            lex.Val(aDnsPri);
+            thisElem.iNodeBuf->At(cmd).iDone = ETrue;
+            found = ETrue;
+            }
+        cmd--;
+        }
+    CleanupStack::PopAndDestroy(buf);
+    return found;
+    }
+
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::DnsToLuid(const UriUtils::TUriHostType aType,)
+//                                      const TInt aPriority ) const
+// Encodes special luid for DNSAddr/<X>
+//------------------------------------------------------------------------------
+TInt CNSmlInternetAdapter::DnsToLuid( const UriUtils::TUriHostType aType, 
+                                      const TInt aPriority ) const
+    {
+    return KNSmlApDnsLuidUpperBase + static_cast<TInt>(aType)*10 + aPriority;
+    }
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::LuidToDns(UriUtils::TUriHostType& aType,)
+//                                     TInt& aPriority, const TInt aLuid ) const
+// Decodes DNAddr/<X> type from LUID
+//------------------------------------------------------------------------------
+TInt CNSmlInternetAdapter::LuidToDns( UriUtils::TUriHostType& aType, 
+                                      TInt& aPriority, const TInt aLuid ) const
+    {
+    TInt err = KErrNone;
+    if ( aLuid < KNSmlApDnsLuidUpperBase )
+        {
+        err = KErrGeneral;
+        }
+    else
+        {
+        aPriority = ( aLuid - KNSmlApDnsLuidUpperBase ) % 10;
+        if ( (aPriority > 0) && (aPriority < 3) )
+            {
+            TInt type  = ( aLuid - KNSmlApDnsLuidUpperBase - aPriority ) / 10;
+            if ( ( type >= 0 ) && ( type < 2 ) )
+                {
+                aType = static_cast<UriUtils::TUriHostType>(type);
+                }
+            else
+                {
+                err = KErrGeneral;
+                }
+            }
+        else 
+            {
+            err = KErrGeneral;
+            }
+        }
+    return err;
+    }
+//------------------------------------------------------------------------------
+// TBool CNSmlInternetAdapter::RemoveLastSeg(const TDesC8& aURI)
+// Returns URI without its last segment
+//------------------------------------------------------------------------------
+TPtrC8 CNSmlInternetAdapter::RemoveLastSeg(const TDesC8& aURI) const
+    {
+    TInt i;
+    for(i=aURI.Length()-1;i>=0;i--)
+        {
+        if(aURI[i]==KNSmlDMUriSeparator)
+            {
+            break;
+            }
+        }
+    if(i>0)
+        {
+        return aURI.Left(i);
+        }
+    else
+        {
+        return KNullDesC8();
+        }
+    }
+
+//------------------------------------------------------------------------------
+// void CNSmlInternetAdapter::ClearBuffer()
+// Deletes all dynamically allocated data from given array's each element
+// and resets the buffer.
+//------------------------------------------------------------------------------
+void CNSmlInternetAdapter::ClearBuffer( CArrayFixFlat<TNSmlAPAddElement>* aBuffer )
+    {
+    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();
+    }
+
+
+
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::IsValidIPv4AddressL(const TDesC8& aNapAddr)
+//Checks if the string is of correct IPV4 address format x.x.x.x and 
+//numbers are within the range 0-255
+//returns true on sucess and false on failure.
+//----------------------------------------------------------------------
+TBool CNSmlInternetAdapter::IsValidIPv4AddressL(const TDesC8& aNapAddr)
+    {
+    TInt digitLen(0);
+    TBool ret = EFalse;
+    _LIT8( KNSmlDMV4Format,      "*.*.*.*" );
+    
+    if( aNapAddr.Match(KNSmlDMV4Format)!= KErrNotFound )
+        {
+        TInt pos = 0;
+        TInt numDots=0;
+        TInt maxIP=255;
+        TInt minIP=0;
+        for( TInt i=0;i<aNapAddr.Length();i++ ) 
+            {  
+            digitLen ++;
+            //Check if aNapAddr contain any characters other than 
+            // 0 - 9 and ".",  If yes return from the function.
+            if( aNapAddr[i]!=KNSmlDMDot && (aNapAddr[i]<KNSmlDMAsciiIntStart || aNapAddr[i] > KNSmlDMAsciiIntEnd ))
+                {
+                ret = EFalse;
+                break;
+                }
+            if(aNapAddr[i]==KNSmlDMDot)
+                {
+                ret = ETrue;
+                if (i > 0 )
+                    {
+                    TInt digit;
+                    TPtrC8 ptrOneDigit = aNapAddr.Mid(pos,digitLen-1);
+                    TLex8 lexint(ptrOneDigit);
+                    if( lexint.Val(digit)!=KErrNone || digit >= maxIP || digit < minIP )
+                        {
+                        ret = EFalse;
+                        break;
+                        }
+                    } // end of if i > 0
+                pos = i+1;
+                numDots++;
+                digitLen=0;
+                } // end of if
+            } //End of for
+         if( numDots==3 && ret )
+            {
+            ret = ETrue;
+            }
+            else 
+            {
+            ret = EFalse;
+            }
+        } // end of outer if, format check
+    return ret;
+    }
+
+TBool CNSmlInternetAdapter::IsWAPAccessPointRecordLockedL(TUint32 aRecord)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::IsWAPAccessPointRecordLockedL():  BEGIN"); 
+  TBool ret = EFalse;
+    CCommsDbTableView* wapView;
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::IsWAPAccessPointRecordLockedL record being checked = %d"),aRecord);
+    wapView = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_ACCESS_POINT),
+                                                            TPtrC(COMMDB_ID),
+                                                            aRecord);
+                                                              
+    TInt aAccess( 0 );
+    if(wapView!=NULL)
+      {
+      _DBG_FILE("CNSmlInternetAdapter::IsWAPAccessPointRecordLockedL():wap record exists, check for access type");  
+      TInt err = (((CCommsDbProtectTableView*) wapView )->GetRecordAccess( aAccess ) );
+      DBG_ARGS8(_S8("CNSmlInternetAdapter::IsWAPAccessPointRecordLockedL , GetrecordAccess code is =%d and acess type of record = %d"),err, aAccess);
+      CleanupStack::PopAndDestroy( wapView);                                            
+      if(aAccess == RDbRowSet::EReadOnly)                                                    
+          ret = ETrue;
+      }
+    
+    _DBG_FILE("CNSmlInternetAdapter::IsWAPAccessPointRecordLockedL():  END"); 
+    return ret;
+            
+  }
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::DoProtectWAPAccessRecordL(TUint32 aRecord,TBool aProtect)
+// protect or unprotect wapaccesspoint record of access point being altered 
+//----------------------------------------------------------------------
+
+
+TInt CNSmlInternetAdapter::DoProtectWAPAccessRecordL(TUint32 aRecord,TBool aProtect)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectWAPAccessRecordL():  BEGIN"); 
+  DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectWAPAccessRecordL , record and protect value  =%d  = %d"),aRecord, aProtect);
+  TInt err = KErrNone;
+  
+  CCommsDbTableView* wapView;
+    wapView = iDatabase->OpenViewMatchingUintLC(TPtrC(WAP_ACCESS_POINT),
+                                                            TPtrC(COMMDB_ID),
+                                                            aRecord);
+  if( wapView != NULL )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::DoProtectWAPAccessRecordL():  wap record exists"); 
+    if( !aProtect )
+        {
+        err = ( (CCommsDbProtectTableView*) wapView )->UnprotectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectWAPAccessRecordL ,error code of Unprotectrecord = %d"),err);
+          }
+          
+      else
+        {
+        err = ( (CCommsDbProtectTableView*) wapView )->ProtectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectWAPAccessRecordL ,error code of ProtectRecord = %d"),err);  
+        }
+  
+      CleanupStack::PopAndDestroy( wapView);
+    }
+    
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectWAPAccessRecordL():  END"); 
+  return err;
+  }
+  
+//------------------------------------------------------------------------------
+// TUint32 CNSmlInternetAdapter::GetIAPSeamlessnessL(TUint32 aId)
+// Gets the seamlessness value from the IAPMetadata table though the cmmanager API
+//------------------------------------------------------------------------------
+
+TUint32 CNSmlInternetAdapter::GetIAPSeamlessnessL(TUint32 aId)
+    {
+        _DBG_FILE("CNSmlInternetAdapter::GetIAPSeamlessnessL(): begin");
+        //Deleting iDatabase, Required since CommsDB has one view open for reading and commsdat API would
+        //return KErrLocked if this is not done
+        TBool reopenTransaction( EFalse );
+        if( iDatabase->InTransaction() )
+        {
+        	iDatabase->CommitTransaction();
+        	iTransactionCommitted = ETrue;       
+        	reopenTransaction = ETrue;
+        }
+        	
+
+        RCmManagerExt        cmManagerExt;
+        cmManagerExt.OpenL();
+        RCmConnectionMethodExt cm = cmManagerExt.ConnectionMethodL( aId );        
+        CleanupClosePushL( cm );
+        TUint32 smless= cm.GetIntAttributeL( CMManager::ECmSeamlessnessLevel );
+        CleanupStack::PopAndDestroy(  );
+        cmManagerExt.Close();
+        
+        //Recreate reference to CommsDB since other tables
+        //are manipulated with Commsdb 
+        if( reopenTransaction )
+            {
+            TInt dberr = iDatabase->BeginTransaction();
+            if( dberr == KErrLocked )
+                {
+                _DBG_FILE("GetIAPSeamlessnessL: CommsDat was locked.");
+                TInt retry = KBeginTransRetryCount;            
+                while ( retry > 0 && dberr == KErrLocked )
+                    {
+                    User::After(KBeginTransRetryDelay);
+                    _DBG_FILE("GetIAPSeamlessnessL: Slept 1 second. Try again");
+                    dberr = iDatabase->BeginTransaction();
+                    retry--;
+                    }
+                if(dberr != KErrNone)
+                    {        
+                    _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                    User::Leave( dberr ); 
+                    }           
+                }
+            }
+                
+       _DBG_FILE("CNSmlInternetAdapter::GetIAPSeamlessnessL(): End");
+        return smless;
+            
+    }
+
+//------------------------------------------------------------------------------
+// TUint32 CNSmlInternetAdapter::GetIAPMetaDataL(TUint32 aId)
+// Gets the metadata value from the IAPMetadata table though the cmmanager API
+//--------------------------------------------------------------------------
+    
+TUint32 CNSmlInternetAdapter::GetIAPMetaDataL(TUint32 aId)
+    {
+         _DBG_FILE("CNSmlInternetAdapter::GetIAPMetaDataL(): begin");
+        //Deleting iDatabase, Required since CommsDB has one view open for reading and commsdat API would
+        //return KErrLocked if this is not done 
+         TBool reopenTransaction( EFalse );
+         if( iDatabase->InTransaction() )
+         {
+             iDatabase->CommitTransaction();
+             iTransactionCommitted = ETrue;       
+             reopenTransaction = ETrue;
+         }
+                 
+        TUint32 metadata, highlight, hidden;
+        RCmManagerExt        cmManagerExt;
+        
+        cmManagerExt.OpenL();
+        RCmConnectionMethodExt cm = cmManagerExt.ConnectionMethodL( aId );        
+        CleanupClosePushL( cm );
+        
+        TBool metaHidden = cm.GetBoolAttributeL( CMManager::ECmMetaHiddenAgent);
+        TBool metaHL = cm.GetBoolAttributeL( CMManager::ECmMetaHighlight);
+        highlight =   EMetaHighlight & metaHL;
+        hidden    =   EMetaHiddenAgent &  metaHidden;
+        metadata  =   highlight | hidden; 
+        
+        CleanupStack::PopAndDestroy(  );
+        cmManagerExt.Close();
+        //Recreate reference to CommsDB since other tables
+        //are manipulated with Commsdb 
+        if( reopenTransaction )
+            {
+            TInt dberr = iDatabase->BeginTransaction();
+            if( dberr == KErrLocked )
+                {
+                _DBG_FILE("GetIAPMetaDataL: CommsDat was locked.");
+                TInt retry = KBeginTransRetryCount;            
+                while ( retry > 0 && dberr == KErrLocked )
+                    {
+                    User::After(KBeginTransRetryDelay);
+                    _DBG_FILE("GetIAPMetaDataL: Slept 1 second. Try again");
+                    dberr = iDatabase->BeginTransaction();
+                    retry--;
+                    }
+                if(dberr != KErrNone)
+                    {        
+                    _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                    User::Leave( dberr ); 
+                    }           
+                }
+            }
+        
+        _DBG_FILE("CNSmlInternetAdapter::GetIAPMetaDataL(): end");
+        return metadata;
+            
+    }
+//------------------------------------------------------------------------------
+// void CNSmlInternetAdapter::SetIAPSeamlessnessL(TUint32 apMetaID,TUint32 aSeam,TInt aStatusRef)
+// Sets the seamlessness value to the IAPMetadata table though the cmmanager API
+//------------------------------------------------------------------------------
+ void CNSmlInternetAdapter::SetIAPSeamlessnessL(TUint32 apMetaID,TUint32 aSeam,TInt aStatusRef)
+    {
+    
+      _DBG_FILE("CNSmlInternetAdapter::SetIAPSeamlessnessL(): begin");
+      TBool reopenTransaction( EFalse );
+      if( iDatabase->InTransaction() )
+      {
+          iDatabase->CommitTransaction();
+          iTransactionCommitted = ETrue;       
+          reopenTransaction = ETrue;
+      }
+        
+       
+       RCmManagerExt        cmManagerExt;
+       cmManagerExt.OpenL();
+       RCmConnectionMethodExt cm ;
+       TInt cmerror = KErrNone;
+       TRAP(cmerror, cm= cmManagerExt.ConnectionMethodL( apMetaID ));        
+       CleanupClosePushL( cm );
+       TRAPD(sErr,cm.SetIntAttributeL( CMManager::ECmSeamlessnessLevel,aSeam ))
+       if(sErr == KErrNone)
+        {
+           cm.UpdateL(); 
+           iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        }
+       else
+        {
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+        }
+             
+       CleanupStack::PopAndDestroy(  );
+       
+       cmManagerExt.Close();
+     //  iDatabase = CCommsDatabase::NewL();
+       if( reopenTransaction )
+           {
+           TInt dberr = iDatabase->BeginTransaction();
+           if( dberr == KErrLocked )
+               {
+               _DBG_FILE("SetIAPSeamlessnessL: CommsDat was locked.");
+               TInt retry = KBeginTransRetryCount;            
+               while ( retry > 0 && dberr == KErrLocked )
+                   {
+                   User::After(KBeginTransRetryDelay);
+                   _DBG_FILE("SetIAPSeamlessnessL: Slept 1 second. Try again");
+                   dberr = iDatabase->BeginTransaction();
+                   retry--;
+                   }
+               if(dberr != KErrNone)
+                   {        
+                   _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                   User::Leave( dberr ); 
+                   }           
+               }
+           }
+       
+       _DBG_FILE("CNSmlInternetAdapter::SetIAPSeamlessnessL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// void CNSmlInternetAdapter::SetIAPMetaDataL(TUint32 apMetaID,TUint32 aMeta,TInt aStatusRef)
+// Sets the metadata value to the IAPMetadata table though the cmmanager API
+//------------------------------------------------------------------------------
+ 
+ void CNSmlInternetAdapter::SetIAPMetaDataL(TUint32 apMetaID,TUint32 aMeta,TInt aStatusRef)
+    {
+    
+       _DBG_FILE("CNSmlInternetAdapter::SetIAPMetaDataL(): begin");
+       TInt hMHLErr = KErrNone;
+       TInt hMHAErr = KErrNone;
+       if(iDatabase)
+        {
+         iDatabase->CommitTransaction();
+        // delete iDatabase;
+        }
+       RCmManagerExt        cmManagerExt;
+       cmManagerExt.OpenL();
+       RCmConnectionMethodExt cm = cmManagerExt.ConnectionMethodL( apMetaID );
+       CleanupClosePushL( cm );
+       
+       if(aMeta & EMetaHighlight)
+          {
+             TRAP(hMHLErr,cm.SetBoolAttributeL( CMManager::ECmMetaHighlight,ETrue));
+          }
+        else
+          {
+             TRAP(hMHLErr,cm.SetBoolAttributeL( CMManager::ECmMetaHighlight,EFalse));
+          }
+          
+        if(aMeta & EMetaHiddenAgent )
+          {
+             TRAP(hMHAErr,cm.SetBoolAttributeL( CMManager::ECmMetaHiddenAgent,ETrue));
+          }
+        else
+          {
+             TRAP(hMHAErr,cm.SetBoolAttributeL( CMManager::ECmMetaHiddenAgent,EFalse));
+          }
+         if( (hMHAErr==KErrNone) && (hMHLErr==KErrNone) )
+          {
+              cm.UpdateL();  
+              iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);  
+                  
+          }
+         else
+          {
+              iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+          }
+          
+
+	       CleanupStack::PopAndDestroy(  );
+	       
+	       cmManagerExt.Close();
+	       TInt dberr = iDatabase->BeginTransaction();
+           if( dberr == KErrLocked )
+               {
+               _DBG_FILE("SetIAPMetaDataL: CommsDat was locked.");
+               TInt retry = KBeginTransRetryCount;            
+               while ( retry > 0 && dberr == KErrLocked )
+                   {
+                   User::After(KBeginTransRetryDelay);
+                   _DBG_FILE("SetIAPMetaDataL: Slept 1 second. Try again");
+                   dberr = iDatabase->BeginTransaction();
+                   retry--;
+                   }
+               if(dberr != KErrNone)
+                   {        
+                   _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+                   User::Leave( dberr ); 
+                   }           
+               }
+           
+	       _DBG_FILE("CNSmlInternetAdapter::SetIAPMetaDataL(): end");
+    }
+
+
+void CNSmlInternetAdapter::AddLingerL( const TInt aIapId, const TInt aLingerInterval)
+{
+    TInt    err( KErrNone );
+    
+    // Open repository
+    CRepository* repository = CRepository::NewLC( KCRUidPDPContextManager );
+    
+    // Find if an entry for "iapId" already exists in CentRep 
+    RArray< TUint32 > foundKeys;
+    foundKeys.Reset();
+    
+    err = repository->FindEqL( KIapColumn,       // partial key
+                               KColumnMask,      // key mask
+                               aIapId,           // value
+                               foundKeys );      // found keys
+    
+    if ( err == KErrNone || err == KErrNotFound )
+        {
+        if ( foundKeys.Count() == 0 )
+            {
+            // Add a new entry
+            TInt arrayCount( 0 );
+            
+            // Get number of iapId&linger entries in Centrep
+            err = repository->Get( KPdpContextManagerLingerArrayCount, 
+                                   arrayCount );
+        
+            if ( err == KErrNone )
+                {
+                arrayCount++;
+                
+                err = repository->Create( ( KIapColumn | arrayCount ), aIapId ); 
+                
+                if ( err == KErrNone )
+                    {
+                    err = repository->Create( ( KLingerColumn | arrayCount ), 
+                                               aLingerInterval );     
+                    }
+                
+                if ( err == KErrNone )
+                    {
+                    // Update number of iapId&linger entries in Centrep
+                    err = repository->Set( KPdpContextManagerLingerArrayCount, 
+                                           arrayCount );
+                    }
+                }
+            }
+        else
+            {
+            // Update existing entry on current row
+            TInt32 row = foundKeys[ 0 ] & KRowMask;
+            
+            err = repository->Set( ( KLingerColumn | row ), aLingerInterval ); 
+            }         
+        }
+        
+    foundKeys.Close();
+    CleanupStack::PopAndDestroy( repository );
+    
+    User::LeaveIfError( err );
+}
+
+void CNSmlInternetAdapter::UpdateLingerL( const TInt aIapId, const TInt aLingerInterval )
+    { 
+    TInt    err( KErrNone );
+    
+    // Open repository
+    CRepository* repository = CRepository::NewLC( KCRUidPDPContextManager );
+
+    // Find if an entry for "iapId" already exists in CentRep 
+    RArray< TUint32 > foundKeys;
+    foundKeys.Reset();
+    
+    err = repository->FindEqL( KIapColumn,       // partial key
+                                KColumnMask,      // key mask
+                                aIapId,           // value
+                                foundKeys );      // found keys
+    
+    if ( err == KErrNone || err == KErrNotFound )
+        {
+        
+        if ( foundKeys.Count() == 0 )
+            {
+            // Add a new entry
+            TInt arrayCount( 0 );
+            
+            // Get number of iapId&linger entries in Centrep
+            err = repository->Get( KPdpContextManagerLingerArrayCount, 
+                                   arrayCount );
+        
+            if ( err == KErrNone )
+                {
+                arrayCount++;
+                
+                err = repository->Create( ( KIapColumn | arrayCount ), aIapId ); 
+                
+                if ( err == KErrNone )
+                    {
+                    err = repository->Create( ( KLingerColumn | arrayCount ), 
+                                               aLingerInterval );     
+                    }
+                
+                if ( err == KErrNone )
+                    {
+                    // Update number of iapId&linger entries in Centrep
+                    err = repository->Set( KPdpContextManagerLingerArrayCount, 
+                                           arrayCount );
+                    }
+                }
+            }
+        else
+            {
+            // Update existing entry on currebt row
+            TInt32 row = foundKeys[ 0 ] & KRowMask;
+            
+            err = repository->Set( ( KLingerColumn | row ), aLingerInterval ); 
+            }    
+        }
+        
+    foundKeys.Close();
+    CleanupStack::PopAndDestroy( repository );
+    
+    User::LeaveIfError( err );
+    }
+void CNSmlInternetAdapter::GetLingerL( const TInt aIapId, TInt& aLingerInterval )    
+    {
+    TInt    err( KErrNone );
+    
+    // Open repository
+    CRepository* repository = CRepository::NewLC( KCRUidPDPContextManager );
+
+    // Find if an entry for "iapId" already exists in CentRep 
+    RArray< TUint32 > foundKeys;
+    foundKeys.Reset();
+    
+    err = repository->FindEqL( KIapColumn,       // partial key
+                                KColumnMask,      // key mask
+                                aIapId,           // value
+                                foundKeys );      // found keys
+    
+    if ( err == KErrNone )
+        {
+        if ( foundKeys.Count() > 0 )
+            {
+            // Find linger interval for the iap id on current row
+            TInt32 row = foundKeys[ 0 ] & KRowMask;
+            
+            err = repository->Get( ( KLingerColumn | row ), aLingerInterval ); 
+            }        
+        }
+        
+    foundKeys.Close();
+    CleanupStack::PopAndDestroy( repository );
+    
+    User::LeaveIfError( err );
+    }
+    
+
+
+
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::CheckEnforcementL()
+// If AP policy is enforced true is returned else false
+//----------------------------------------------------------------------
+TBool CNSmlInternetAdapter::CheckEnforcementL()
+    {
+      CSettingEnforcementInfo* info = CSettingEnforcementInfo::NewL();
+    CleanupStack::PushL(info);
+    TBool enforceActive ( EFalse );
+    User::LeaveIfError(info->EnforcementActive(EAPEnforcement, enforceActive));
+    CleanupStack::PopAndDestroy(info);
+    return enforceActive;
+    }
+
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::CheckWLANEnforcementL()
+// If WLAN AP policy is enforced true is returned else false
+//----------------------------------------------------------------------
+TBool CNSmlInternetAdapter::CheckWLANEnforcementL()
+    {
+      CSettingEnforcementInfo* info = CSettingEnforcementInfo::NewL();
+    CleanupStack::PushL(info);
+    TBool enforceActive ( EFalse );
+    User::LeaveIfError(info->EnforcementActive(EWLANEnforcement, enforceActive));
+    CleanupStack::PopAndDestroy(info);
+    return enforceActive;
+    }
+    
+    
+//----------------------------------------------------------------------
+//TInt CNSmlInternetAdapter::DoProtectWAPTablesL(TBool aProtect)
+// if aProtect is true , tables are locked otherwise tables are unlocked.
+//----------------------------------------------------------------------
+  
+TInt CNSmlInternetAdapter::DoProtectWAPTablesL(TBool aProtect)
+    {
+    TInt err = KErrNone;
+    CCommsDatabaseProtect* dbprotect = CCommsDatabaseProtect::NewL();
+    CleanupStack::PushL(dbprotect);
+    for ( TInt i( 0 ); i < iLockTableList.Count(); i++ )
+      {
+          if(!aProtect)
+        {
+          err = dbprotect->UnProtectTable( iLockTableList[ i ] ); 
+        }
+          else 
+        { 
+          err = dbprotect->ProtectTable( iLockTableList[ i ] );
+        }
+    
+      }
+  CleanupStack::PopAndDestroy( dbprotect );
+  return err;
+    }
+//----------------------------------------------------------------------
+//void CNSmlInternetAdapter::DoLockIAPTablesL(TBool aProtect)
+// if aProtect is true , tables are locked otherwise tables are unlocked.
+//----------------------------------------------------------------------
+      
+void CNSmlInternetAdapter::DoLockIAPTablesL(TBool aLock)
+    {
+    TInt protError = KErrNone;
+    TInt err = KErrNone;
+    iDatabase->CommitTransaction();
+    iLockTableList.AppendL( TPtrC( WAP_ACCESS_POINT ) );
+    iLockTableList.AppendL( TPtrC( WAP_IP_BEARER ) );
+    iLockTableList.AppendL( TPtrC( IAP ) );
+  
+    TRAP(err, protError = DoProtectWAPTablesL(aLock));
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::DoLockIAPTablesL(): Table protect error %d , leave error %d " ),protError,err);
+    
+    if ( protError != KErrNone ) // To remove the warnings
+        {
+        protError = KErrNone;
+        }
+	TInt dberr = iDatabase->BeginTransaction();
+    if( dberr == KErrLocked )
+        {
+        _DBG_FILE("DoLockIAPTablesL: CommsDat was locked.");
+        TInt retry = KBeginTransRetryCount;            
+        while ( retry > 0 && dberr == KErrLocked )
+            {
+            User::After(KBeginTransRetryDelay);
+            _DBG_FILE("DoLockIAPTablesL: Slept 1 second. Try again");
+            dberr = iDatabase->BeginTransaction();
+            retry--;
+            }
+        if(dberr != KErrNone)
+            {        
+            _DBG_FILE("CNSmlInternetAdapter: BeginTransaction failed completely.");
+            User::Leave( dberr ); 
+            }           
+        }
+  }
+//--------------------------------------------------------------------
+//TInt UnprotectWLANAPItemL(TUint32 aId)
+//Unprotect the wlan AP if only wlan enforcement is on
+//-------------------------------------------------------------------
+TInt CNSmlInternetAdapter::UnprotectWLANAPItemL(TUint32 aId)
+{
+  _DBG_FILE("CNSmlInternetAdapter::UnprotectWLANAPItemL():  BEGIN");  
+  CCommsDbTableView*  wapView;
+  
+  TInt errorCode = KErrNone;
+  TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+  
+  //check if its WLAN AP being deleted
+  wapView = iDatabase->OpenViewMatchingUintLC( TPtrC(IAP),TPtrC(COMMDB_ID), aId);
+  
+  errorCode = wapView->GotoFirstRecord();
+  
+  if ( errorCode == KErrNone )
+      {
+      wapView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+      if(serviceType != TPtrC(LAN_SERVICE))
+          {
+          CleanupStack::PopAndDestroy(); // wapView   
+          return KErrNone;
+          }
+      }
+
+  ((CCommsDbProtectTableView*)wapView)->UnprotectRecord();
+              
+  CleanupStack::PopAndDestroy(); // wapView   
+  
+  _DBG_FILE("CNSmlInternetAdapter::UnprotectWLANAPItemL():  END"); 
+  return errorCode;
+}
+      
+
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::IsIAPRecordLockedL(TUint32 aRecord)
+//check for wap access point record  lock status 
+//----------------------------------------------------------------------
+    
+TBool CNSmlInternetAdapter::IsIAPRecordLockedL(TUint32 aRecord)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::IsIAPRecordLockedL():  BEGIN");  
+  TBool ret = EFalse;
+    CCommsDbTableView* apView;
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::IsIAPRecordLockedL record being checked = %d"),aRecord);
+    apView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                TPtrC(COMMDB_ID),
+                                                aRecord);
+                                                              
+    TInt aAccess( 0 );
+    if(apView!=NULL)
+      {
+      _DBG_FILE("CNSmlInternetAdapter::IsIAPRecordLockedL():wap record exists, check for access type"); 
+      TInt err = (((CCommsDbProtectTableView*) apView )->GetRecordAccess( aAccess ) );
+      DBG_ARGS8(_S8("CNSmlInternetAdapter::IsIAPRecordLockedL , GetrecordAccess code is =%d and acess type of record = %d"),err, aAccess);
+      CleanupStack::PopAndDestroy( apView);                                            
+      if(aAccess == RDbRowSet::EReadOnly)                                                    
+          ret = ETrue;
+      }
+    
+    _DBG_FILE("CNSmlInternetAdapter::IsIAPRecordLockedL():  END");  
+    return ret;
+            
+  }
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::DoProtectIAPRecordL(TUint32 aRecord,TBool aProtect)
+// protect or unprotect wapaccesspoint record of access point being altered 
+//----------------------------------------------------------------------
+
+
+TInt CNSmlInternetAdapter::DoProtectIAPRecordL(TUint32 aRecord,TBool aProtect)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectIAPRecordL():  BEGIN"); 
+  DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectIAPRecordL , record and protect value  =%d  = %d"),aRecord, aProtect);
+  TInt err = KErrNone;
+  
+  CCommsDbTableView* apView;
+    apView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                TPtrC(COMMDB_ID),
+                                                aRecord);
+  if( apView != NULL )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::DoProtectIAPRecordL():  wap record exists"); 
+    if( !aProtect )
+        {
+        err = ( (CCommsDbProtectTableView*) apView )->UnprotectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectIAPAccessRecordL ,error code of Unprotectrecord = %d"),err);
+          }
+          
+      else
+        {
+        err = ( (CCommsDbProtectTableView*) apView )->ProtectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectIAPRecordL ,error code of ProtectRecord = %d"),err);  
+        }
+  
+      CleanupStack::PopAndDestroy( apView);
+    }
+    
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectIAPRecordL():  END"); 
+  return err;
+  }
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::IsProxyRecordLockedL(TUint32 aRecord)
+//check for proxy record  lock status 
+//----------------------------------------------------------------------
+    
+TBool CNSmlInternetAdapter::IsProxyRecordLockedL(TUint32 aRecord)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::IsProxyRecordLockedL():  BEGIN");  
+  TBool ret = EFalse;
+    CCommsDbTableView* proxyView;
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::IsProxyRecordLockedL record being checked = %d"),aRecord);
+    proxyView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                TPtrC(COMMDB_ID),
+                                                aRecord);
+                                                              
+    TInt aAccess( 0 );
+    if(proxyView!=NULL)
+      {
+      _DBG_FILE("CNSmlInternetAdapter::IsProxyRecordLockedL():wap record exists, check for access type"); 
+      TInt err = (((CCommsDbProtectTableView*) proxyView )->GetRecordAccess( aAccess ) );
+      DBG_ARGS8(_S8("CNSmlInternetAdapter::IsProxyRecordLockedL , GetrecordAccess code is =%d and acess type of record = %d"),err, aAccess);
+      CleanupStack::PopAndDestroy( proxyView);                                            
+      if(aAccess == RDbRowSet::EReadOnly)                                                    
+          ret = ETrue;
+      }
+    
+    _DBG_FILE("CNSmlInternetAdapter::IsProxyRecordLockedL():  END");  
+    return ret;
+            
+  }
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::DoProtectProxyRecordL(TUint32 aRecord,TBool aProtect)
+// protect or unprotect proxy record of access point being altered 
+//----------------------------------------------------------------------
+
+
+TInt CNSmlInternetAdapter::DoProtectProxyRecordL(TUint32 aRecord,TBool aProtect)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectProxyRecordL():  BEGIN"); 
+  DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectProxyRecordL , record and protect value  =%d  = %d"),aRecord, aProtect);
+  TInt err = KErrNone;
+  
+  CCommsDbTableView* proxyView;
+    proxyView = iDatabase->OpenViewMatchingUintLC(TPtrC(PROXIES),
+                                                TPtrC(COMMDB_ID),
+                                                aRecord);
+  if( proxyView != NULL )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::DoProtectProxyRecordL():  wap record exists"); 
+    if( !aProtect )
+        {
+        err = ( (CCommsDbProtectTableView*) proxyView )->UnprotectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectProxyRecordL ,error code of Unprotectrecord = %d"),err);
+          }
+          
+      else
+        {
+        err = ( (CCommsDbProtectTableView*) proxyView )->ProtectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectProxyRecordL ,error code of ProtectRecord = %d"),err);  
+        }
+  
+      CleanupStack::PopAndDestroy( proxyView);
+    }
+    
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectProxyRecordL():  END"); 
+  return err;
+  }
+  
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::IsServiceRecordLockedL(TUint32 aRecord)
+//check for proxy record  lock status 
+//----------------------------------------------------------------------
+    
+TBool CNSmlInternetAdapter::IsServiceRecordLockedL(TUint32 aRecord)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::IsProxyRecordLockedL():  BEGIN");  
+  TBool ret = EFalse;
+    CCommsDbTableView* serviceView;
+    DBG_ARGS8(_S8("CNSmlInternetAdapter::IsProxyRecordLockedL record being checked = %d"),aRecord);
+    serviceView = iDatabase->OpenViewMatchingUintLC(iProxyServiceType,
+                                                TPtrC(COMMDB_ID),
+                                                aRecord);
+                                                              
+    TInt aAccess( 0 );
+    if(serviceView!=NULL)
+      {
+      _DBG_FILE("CNSmlInternetAdapter::IsProxyRecordLockedL():wap record exists, check for access type"); 
+      TInt err = (((CCommsDbProtectTableView*) serviceView )->GetRecordAccess( aAccess ) );
+      DBG_ARGS8(_S8("CNSmlInternetAdapter::IsProxyRecordLockedL , GetrecordAccess code is =%d and acess type of record = %d"),err, aAccess);
+      CleanupStack::PopAndDestroy( serviceView);                                            
+      if(aAccess == RDbRowSet::EReadOnly)                                                    
+          ret = ETrue;
+      }
+    
+    _DBG_FILE("CNSmlInternetAdapter::IsProxyRecordLockedL():  END");  
+    return ret;
+            
+  }
+//----------------------------------------------------------------------
+//TBool CNSmlInternetAdapter::DoProtectProxyRecordL(TUint32 aRecord,TBool aProtect)
+// protect or unprotect proxy record of access point being altered 
+//----------------------------------------------------------------------
+
+
+TInt CNSmlInternetAdapter::DoProtectServiceRecordL(TUint32 aRecord,TBool aProtect)
+  {
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectProxyRecordL():  BEGIN"); 
+  DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectProxyRecordL , record and protect value  =%d  = %d"),aRecord, aProtect);
+  TInt err = KErrNone;
+  
+  CCommsDbTableView* serviceView;
+    serviceView = iDatabase->OpenViewMatchingUintLC(iProxyServiceType,
+                                                TPtrC(COMMDB_ID),
+                                                aRecord);
+  if( serviceView != NULL )
+    {
+    _DBG_FILE("CNSmlInternetAdapter::DoProtectProxyRecordL():  wap record exists"); 
+    if( !aProtect )
+        {
+        err = ( (CCommsDbProtectTableView*) serviceView )->UnprotectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectProxyRecordL ,error code of Unprotectrecord = %d"),err);
+          }
+          
+      else
+        {
+        err = ( (CCommsDbProtectTableView*) serviceView )->ProtectRecord();
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::DoProtectProxyRecordL ,error code of ProtectRecord = %d"),err);  
+        }
+  
+      CleanupStack::PopAndDestroy( serviceView);
+    }
+    
+  _DBG_FILE("CNSmlInternetAdapter::DoProtectProxyRecordL():  END"); 
+  return err;
+  } 
+//--------------------------------------------------------------------
+//TInt CNSmlInternetAdapter::IsAPUriFormatMatchPredefined(const TDesC8 & aURI)
+//
+//-------------------------------------------------------------------
+
+
+TBool CNSmlInternetAdapter::IsAPUriFormatMatchPredefined(const TDesC8 & aURI)
+{
+  if(aURI.Match(_L8("AP/APId*"))   != KErrNotFound ||
+    aURI.Match(_L8("AP/APId*/NAPDef/NAPId*"))   != KErrNotFound)
+  {
+    return ETrue;
+  }
+  else
+  {
+    return EFalse;
+  }
+  
+  
+}
+//--------------------------------------------------------------------
+//TInt CNSmlInternetAdapter::ConstructTreeL(const TDesC8& aURI)
+//
+//-------------------------------------------------------------------
+
+     
+TUint32 CNSmlInternetAdapter::ConstructTreeL(const TDesC8& aURI)
+{
+  _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): AP begin");
+  TUint32 returnLuid = 0; // IAP doesn't exist
+
+  CCommsDbTableView* apView = iDatabase->OpenTableLC(TPtrC(IAP));
+
+    TInt errorCode = apView->GotoFirstRecord();
+        
+    while ( errorCode == KErrNone ) 
+        {
+        TUint32 lValue;
+        TBool validService = EFalse;
+        apView->ReadUintL(TPtrC(COMMDB_ID),lValue);
+        
+        TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+        apView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+        TUint32 bearerId  = 0;
+        apView->ReadUintL(TPtrC(IAP_BEARER),bearerId);
+        //
+        // Skip other service types than GSM outgoing
+        //
+        if (serviceType == TPtrC(OUTGOING_GPRS) ||
+            serviceType == TPtrC(INCOMING_GPRS))
+            {
+            validService = ETrue;
+            }
+      
+        else if(serviceType == TPtrC(LAN_SERVICE) &&
+                bearerId > 0) 
+            {
+            validService = ETrue;
+            }
+        else if(serviceType == TPtrC(VPN_SERVICE)) 
+            {
+            validService = ETrue;
+            }
+
+        if(validService)
+            { 
+            // Skip others
+            //
+            //  Check if in aPreviousURISegmentList
+            // 
+          TBool skipToNextIAP = EFalse;
+            // KNSmlDMStart includes start text for URISeg
+            TBuf8<20> addAPURI; // AP/APIdnnn , nnn = profileid
+            addAPURI.Append(_L8("AP/APId"));
+            addAPURI.AppendNumFixedWidth(lValue,EDecimal,3); 
+
+            TBuf8<16> addLUID;
+            _LIT8(KFormat,"%d");
+            addLUID.Format(KFormat,lValue);  
+            
+            HBufC8* mapInfo = iCallBack->GetLuidAllocL(addAPURI);
+            CleanupStack::PushL( mapInfo );
+      if (mapInfo->Length() == 0)
+          {
+        iCallBack->SetMappingL(addAPURI,addLUID);
+        if( aURI.Find(addAPURI) >= 0 )
+            { 
+                returnLuid = lValue;
+          iPrevLUID = lValue;
+            }
+          }
+      else
+          {            
+        skipToNextIAP= ETrue;
+          }
+			CleanupStack::PopAndDestroy( mapInfo );
+      
+      if( !skipToNextIAP ) 
+          {
+          // Add the NAPDef also 
+            
+            TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+            TUint32 serviceId;
+
+            CCommsDbTableView* napdefView = iDatabase->OpenViewMatchingUintLC(TPtrC(IAP),
+                                                                          TPtrC(COMMDB_ID),
+                                                                          lValue);
+
+            errorCode = napdefView->GotoFirstRecord();
+            if (errorCode == KErrNone )
+                {               
+                napdefView->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+                napdefView->ReadUintL(TPtrC(IAP_SERVICE),       serviceId);  // ID 
+                }
+        
+            CCommsDbTableView* tableView = iDatabase->OpenViewMatchingUintLC(serviceType,
+                                                                         TPtrC(COMMDB_ID),
+                                                                         serviceId);
+
+            errorCode = tableView->GotoFirstRecord();
+
+            while( errorCode == KErrNone ) 
+                {
+                  TUint32 lValue;
+                  tableView->ReadUintL(TPtrC(COMMDB_ID),lValue);
+                  //
+                  //  Check if in aPreviousURISegmentList
+                  // 
+                
+                    _LIT8(Kprev,"NAPId");
+                    TBuf8<15> addNAME(Kprev); // APIdnnn , nnn = profileid
+                    addNAME.AppendNumFixedWidth(lValue,EDecimal,3); 
+    
+               
+                    _LIT8(Kprev2,"/NAPDef/NAPId");
+                    TBuf8<80> addURI; // AP/xxx/NAPDef/NAPIdnnn , nnn = id nbr
+                    addURI.Append(addAPURI);
+                    addURI.Append(Kprev2);
+                    addURI.AppendNumFixedWidth(lValue,EDecimal,3); 
+    
+                    TBuf8<16> addLUID;
+                    _LIT8(KFormat,"%d");    
+                    addLUID.Format(KFormat,lValue); 
+          
+            HBufC8* mapInfo = iCallBack->GetLuidAllocL(addURI);
+    				CleanupStack::PushL( mapInfo );
+            if (mapInfo->Length() == 0)
+                {
+                // Also added to mapping
+              iCallBack->SetMappingL(addURI,addLUID);
+              if( aURI.Find(addURI) >= 0 ) 
+                    returnLuid = lValue;
+              _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set NAPDef Mapping ");
+             
+              TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+              TBuf8<16> addDNSLUID;
+                TBuf8<80> addDNSURI; // AP/xxx/NAPDef/DNSAddr/DNSx
+                _LIT8(KFormat,"%d");   
+              tableView->ReadTextL( TPtrC(SERVICE_IP_NAME_SERVER1 ),  columnValue);
+             
+              if ( ( columnValue.Length() > 0 ) )
+                  {
+                    _LIT8(Kprev2,"/DNSAddr/DNS1");                      
+                        addDNSURI.Append(addURI);
+                        addDNSURI.Append(Kprev2);                       
+                    addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv4Host, 1));
+                    iCallBack->SetMappingL(addDNSURI,addLUID);  
+                    if( aURI.Find(addDNSURI) >= 0 ) 
+                      returnLuid = DnsToLuid( UriUtils::EIPv4Host, 1);                      
+                    addDNSURI.Zero();
+                  }
+
+              tableView->ReadTextL( TPtrC(SERVICE_IP_NAME_SERVER2 ),  columnValue);
+              if ( columnValue.Length() > 0 )
+                      {  
+                    _LIT8(Kprev2,"/DNSAddr/DNS2");
+                      addDNSURI.Append(addURI);
+                      addDNSURI.Append(Kprev2);
+                    addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv4Host, 2));
+                    iCallBack->SetMappingL(addDNSURI,addLUID);
+                    if( aURI.Find(addDNSURI) >= 0 ) 
+                      returnLuid = DnsToLuid( UriUtils::EIPv4Host, 2);
+                    addDNSURI.Zero();                   
+                      }
+
+              tableView->ReadTextL( TPtrC(SERVICE_IP6_NAME_SERVER1 ),  columnValue);
+              if ( columnValue.Length() > 0 )
+                      {  
+                    _LIT8(Kprev2,"/DNSAddr/DNS3");
+                      addDNSURI.Append(addURI);
+                      addDNSURI.Append(Kprev2);
+                    addLUID.Format(KFormat,DnsToLuid( UriUtils::EIPv6Host, 1) );
+                    iCallBack->SetMappingL(addDNSURI,addLUID);
+                    if( aURI.Find(addDNSURI) >= 0 ) 
+                      returnLuid = DnsToLuid( UriUtils::EIPv6Host, 1);
+                    addDNSURI.Zero();                   
+                      }
+              tableView->ReadTextL( TPtrC(SERVICE_IP6_NAME_SERVER2 ),  columnValue);
+              if ( columnValue.Length() > 0 ) 
+                      {  
+                    _LIT8(Kprev2,"/DNSAddr/DNS4");
+                      addDNSURI.Append(addURI);
+                      addDNSURI.Append(Kprev2);
+                    addLUID.Format(KFormat, DnsToLuid( UriUtils::EIPv6Host, 2));
+                    iCallBack->SetMappingL(addDNSURI,addLUID);
+                    if( aURI.Find(addDNSURI) >= 0 ) 
+                      returnLuid = DnsToLuid( UriUtils::EIPv6Host, 2);
+                    addDNSURI.Zero(); 
+                      }              
+            _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set DNS Mapping ");  
+                  
+            TUint32 nwID = 0;
+                napdefView->ReadUintL(TPtrC(IAP_NETWORK),nwID); // Networks luid
+                   
+                    CCommsDbTableView* nwView = iDatabase->OpenViewMatchingUintLC(TPtrC(NETWORK),TPtrC(COMMDB_ID), nwID);
+
+              errorCode = nwView->GotoFirstRecord();                
+        
+              if ( errorCode == KErrNone ) 
+                  {                         
+                          _LIT8(Kprev2,"/Networks/NwId");
+                          TBuf8<80> addNwURI; // AP/xxx/NAPDef/xxx/Networks/NwIdnnn , nnn = id nbr
+                          addNwURI.Append(addURI);
+                          addNwURI.Append(Kprev2);
+                          addNwURI.AppendNumFixedWidth(nwID,EDecimal,3); 
+                          TBuf8<16> addNwLUID;
+                          _LIT8(KFormat,"%d");    
+                          addNwLUID.Format(KFormat,nwID); 
+                  HBufC8* mapInfo = iCallBack->GetLuidAllocL(addNwURI);
+        					CleanupStack::PushL( mapInfo );
+            
+              if (mapInfo->Length() == 0)
+                  {
+                  // Also added to mapping
+                  iCallBack->SetMappingL(addNwURI,addNwLUID);
+                  if( aURI.Find(addNwURI) >= 0 ) 
+                          returnLuid = nwID;
+                  _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set Networks Mapping ");             
+                  }                           
+					 		CleanupStack::PopAndDestroy( mapInfo );
+              }
+              CleanupStack::PopAndDestroy(); // nwView              
+
+              if ( iWlanSupported )
+                  {
+                        // Check WLAN node
+                        if(serviceType == TPtrC(LAN_SERVICE)) 
+                            {
+                            TUint32 wlanID = serviceId;
+                            _LIT8(Kprev2,"/WLAN/WLId");
+                            TBuf8<80> addWlanURI; // AP/xxx/NAPDef/xxx/WLAN/WLIdnnn , nnn = id nbr
+                            addWlanURI.Append(addURI);
+                            addWlanURI.Append(Kprev2);
+                            addWlanURI.AppendNumFixedWidth(wlanID,EDecimal,3); 
+                            TBuf8<16> addWlanLUID;
+                            _LIT8(KFormat,"%d");    
+                            addWlanLUID.Format(KFormat,wlanID); 
+                    HBufC8* mapInfo = iCallBack->GetLuidAllocL(addWlanURI);
+        						CleanupStack::PushL( mapInfo );
+            
+                    if (mapInfo->Length() == 0)
+                        {
+                      // Also added to mapping
+                      iCallBack->SetMappingL(addWlanURI,addWlanLUID);
+                      if( aURI.Find(addWlanURI) >= 0 ) 
+                                returnLuid = wlanID;
+                      _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set WLAN Mapping ");                       
+                            
+                      TBuf<KCommsDbSvrMaxFieldLength> value;
+                      TBuf8<16> addWkLUID;
+                            TBuf8<80> addWkURI; // AP/xxx/NAPDef/xxx/WLAN/xxx/WEPKey/WKIdn, n = id nbr
+                                                   
+                      for( TInt value =1; value <=4 ;value++)
+                          {
+                                _LIT8(Kprev2,"/WEPKey/WKId");                     
+                                addWkURI.Append(addWlanURI);
+                                addWkURI.Append(Kprev2);
+                                addWkURI.AppendNumFixedWidth(value,EDecimal,1); 
+                                _LIT8(KFormat,"%d");    
+                                addWkLUID.Format(KFormat,(1000*value)+value);                       
+                                iCallBack->SetMappingL(addWkURI,addWkLUID);
+                                if( aURI.Find(addWkURI) >= 0 ) 
+                                  returnLuid = (1000*value)+value;
+                                addWkURI.Zero();
+                          } 
+                        }                              
+        						CleanupStack::PopAndDestroy( mapInfo );
+                            }                                           
+                  }
+
+            //Check Bearer node 
+                               
+                  CCommsDbTableView* bView = iDatabase->OpenViewMatchingUintLC(TPtrC(NETWORK),TPtrC(COMMDB_ID), lValue);
+                errorCode = bView->GotoFirstRecord();
+                
+                if ( errorCode == KErrNone ) 
+                    {                         
+                        _LIT8(Kprev2,"/Bearer/BId");
+                        TBuf8<80> addbURI; // AP/xxx/NAPDef/xxx/Bearer/BIdnnn , nnn = id nbr
+                        addbURI.Append(addURI);
+                        addbURI.Append(Kprev2);
+                        addbURI.AppendNumFixedWidth(lValue,EDecimal,3); 
+                        TBuf8<16> addbLUID;
+                        _LIT8(KFormat,"%d");    
+                        addbLUID.Format(KFormat,lValue); 
+                HBufC8* mapInfo = iCallBack->GetLuidAllocL(addbURI);
+    						CleanupStack::PushL( mapInfo );
+            
+              if (mapInfo->Length() == 0)
+                  {
+                  // Also added to mapping
+                  iCallBack->SetMappingL(addbURI,addbLUID);
+                  if( aURI.Find(addbURI) >= 0 ) 
+                            returnLuid = lValue;
+                  _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set Bearer Mapping ");            
+                  }                             
+							CleanupStack::PopAndDestroy( mapInfo );
+                    }
+                  CleanupStack::PopAndDestroy(); // bView 
+                  
+                  //Check NAPAuthInf node NAPAuthInf/AUId
+                               
+                  CCommsDbTableView* authView = iDatabase->OpenViewMatchingUintLC(TPtrC(NETWORK),TPtrC(COMMDB_ID), lValue);
+
+                errorCode = authView->GotoFirstRecord();
+        
+                if ( errorCode == KErrNone ) 
+                    {                         
+                        _LIT8(Kprev2,"/Bearer/BId");
+                        TBuf8<80> addauthURI; // AP/xxx/NAPDef/xxx/Bearer/BIdnnn , nnn = id nbr
+                        addauthURI.Append(addURI);
+                        addauthURI.Append(Kprev2);
+                        addauthURI.AppendNumFixedWidth(lValue,EDecimal,3); 
+                        TBuf8<16> addauthLUID;
+                        _LIT8(KFormat,"%d");    
+                        addauthLUID.Format(KFormat,lValue); 
+                HBufC8* mapInfo = iCallBack->GetLuidAllocL(addauthURI);
+    						CleanupStack::PushL( mapInfo );
+            
+              if (mapInfo->Length() == 0)
+                  {
+                  // Also added to mapping
+                  iCallBack->SetMappingL(addauthURI,addauthLUID);
+                  if( aURI.Find(addauthURI) >= 0 ) 
+                            returnLuid = lValue;
+    							_DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set NAPAuthInf Mapping ");						 					
+                        }
+							CleanupStack::PopAndDestroy( mapInfo );
+        				    }        				    
+                    CleanupStack::PopAndDestroy(); // authView  
+                      
+                    //Check Proxy node          
+
+                    CCommsDbTableView* pxView = iDatabase->OpenViewMatchingTextLC(TPtrC(PROXIES),
+                                                                         TPtrC(PROXY_SERVICE_TYPE),
+                                                                         serviceType);
+
+                    errorCode = pxView->GotoFirstRecord();
+                  if(errorCode == KErrNone)                   
+                      {                       
+                      while ( errorCode == KErrNone ) 
+                          {
+                          TUint32 lProxyIspId;
+                          TUint32 lProxyId;
+                          pxView->ReadUintL(TPtrC(PROXY_ISP),lProxyIspId);                      
+                          if (lProxyIspId == serviceId) //ServiceIsp) // Right value ISP
+                              {                         
+                              pxView->ReadUintL(TPtrC(COMMDB_ID),lProxyId);
+                  
+                      _LIT8(Kprev2,"/Px/PXId");
+                              TBuf8<80> addURI; // AP/xxx/Px/PXIdnnn , nnn = id nbr
+                              addURI.Append(addAPURI);
+                              addURI.Append(Kprev2);
+                              addURI.AppendNumFixedWidth(lProxyId,EDecimal,3); 
+    
+                                TBuf8<16> addLUID;
+                                _LIT8(KFormat,"%d");    
+                                addLUID.Format(KFormat,  KNSmlApProxyLowerBase + lProxyId);    // 100000 + lProxyId
+                                HBufC8* mapInfo = iCallBack->GetLuidAllocL(addURI);
+				                  	CleanupStack::PushL( mapInfo );
+                  
+                    if (mapInfo->Length() == 0)
+                        {
+                        // Also added to mapping
+                        iCallBack->SetMappingL(addURI,addLUID);
+                        if( aURI.Find(addURI) >= 0 ) 
+                                  returnLuid = KNSmlApProxyLowerBase + lProxyId;
+                        _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): Set Proxy Mapping ");
+                        _LIT8(KProxy,"/Port/PROXY");
+                        TBuf8<80> addPortURI; // AP/xxx/Px/Port/PROXY
+                              addPortURI.Append(addURI);
+                              addPortURI.Append( KProxy );
+                              TBuf8<16> addPortLUID;
+                              _LIT8(KFormat,"%d");    
+                                  addPortLUID.Format(KFormat, 1);
+                              iCallBack->SetMappingL(addPortURI,addPortLUID);
+                              if( aURI.Find(addPortURI) >= 0 ) 
+                                  returnLuid = 1;
+                        }
+					 				CleanupStack::PopAndDestroy( mapInfo );
+                              }
+                          errorCode = pxView->GotoNextRecord();
+                      }           
+                }
+                CleanupStack::PopAndDestroy() ;//Pxview             
+                      }
+				CleanupStack::PopAndDestroy( mapInfo );
+                  errorCode = tableView->GotoNextRecord();                    
+                    }
+          CleanupStack::PopAndDestroy() ;//tableview
+                CleanupStack::PopAndDestroy() ;//napdefview
+                }
+            }
+        errorCode = apView->GotoNextRecord();
+        }         
+        CleanupStack::PopAndDestroy(); // apView
+        _DBG_FILE("CNSmlInternetAdapter::ConstructTreeL(): AP end"); 
+        return returnLuid;        
+}   
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/src/NSmlInternetAdapter.rss	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,45 @@
+CHARACTER_SET UTF8/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Internet-settings resources
+*
+*/
+
+ 
+
+
+#include <registryinfo.rh>
+#include "nsmldmconstants.h"
+
+RESOURCE REGISTRY_INFO theRegistryInfo
+  {
+  dll_uid = 0x101F6DEA; //The DLL's 3rd UID.
+  interfaces = 
+      {
+      INTERFACE_INFO
+          {
+          interface_uid = KNSmlDMInterfaceUid; // DM interface UID
+          implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x101F6DE2; // DM Internet Adapter
+                version_no = 1; 
+                display_name = "";
+                default_data = "";
+                opaque_data = "";
+                }
+            };
+          }
+      };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/src/NSmlWLanAdapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,3952 @@
+/*
+* Copyright (c) 2002-2006 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:   Wlan Adapter
+*
+*/
+
+
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdat_partner.h>
+#endif
+#include "NSmlWLanAdapter.h"
+#include "NSmlWlanSettings.h"
+#include "nsmldebug.h"
+#include <commdb.h>
+#include <utf.h>
+#include <cdbstore.h>
+#include <cdbcols.h>
+#include <EapType.h>
+#include <nsmldmuri.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
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::NewL( )
+//-----------------------------------------------------------------------------
+CNSmlWLanAdapter* CNSmlWLanAdapter::NewL( MSmlDmCallback* aDmCallback,CCommsDatabase& aDatabase )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::NewL(): begin");
+
+    CNSmlWLanAdapter* self = NewLC( aDmCallback, aDatabase );
+    CleanupStack::Pop( self );
+
+    _DBG_FILE("CNSmlWLanAdapter::NewL(): end");
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::NewLC( )
+//-----------------------------------------------------------------------------
+CNSmlWLanAdapter* CNSmlWLanAdapter::NewLC( MSmlDmCallback* aDmCallback, CCommsDatabase& aDatabase )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::NewLC(): begin");
+
+    CNSmlWLanAdapter* self = new(ELeave) CNSmlWLanAdapter(aDmCallback);
+    CleanupStack::PushL( self );
+
+    self->iCallBack = aDmCallback;
+    self->ConstructL( aDatabase );
+
+    _DBG_FILE("CNSmlWLanAdapter::NewLC(): end");
+    return self;
+    }
+
+//-----------------------------------------------------------------------------
+// void CNSmlWLanAdapter::ConstructL( )
+// Second phase constructor
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::ConstructL( CCommsDatabase& aDatabase )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::ConstructL(): begin");
+
+    iWlanSettings = CWlanSettings::NewL( aDatabase );
+    iBuffer = new (ELeave) CArrayFixFlat <TNSmlWepKeyBufferElement> (KNSmlWepKeyGranularity);
+    iSettings = new (ELeave) TWlanSettings;
+    iEAPSettings = new (ELeave) EAPSettings;
+
+    _DBG_FILE("CNSmlWLanAdapter::ConstructL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter::CNSmlWLanAdapter( )
+// Constructor
+//-----------------------------------------------------------------------------
+CNSmlWLanAdapter::CNSmlWLanAdapter( TAny* aEcomArguments )
+    : CSmlDmAdapter(aEcomArguments)
+    {
+    _DBG_FILE("CNSmlWLanAdapter::CNSmlWLanAdapter(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::CNSmlWLanAdapter(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter::~CNSmlWLanAdapter( )
+// Destructor
+//-----------------------------------------------------------------------------
+CNSmlWLanAdapter::~CNSmlWLanAdapter( )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::~CNSmlWLanAdapter(): begin");
+
+	if ( iBuffer )
+		{
+		
+	    for( TInt index=0; index<iBuffer->Count(); index++ )
+	        {
+	        delete iBuffer->At(index).iUri;
+	        delete iBuffer->At(index).iData;
+
+	        iBuffer->Delete(index);
+	        }
+
+	    iBuffer->Reset();
+	    delete iBuffer;
+	    
+		}
+    delete iWlanSettings;
+    delete iSettings;
+
+    TRAP_IGNORE( DeleteEAPStructL() );
+    
+    for ( TInt i = 0 ; i < iEAPBuffer.Count() ; i++ )
+    	{
+    	iEAPBuffer[i]->iStatusRefArray.Close();
+    	iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypes.Close();
+    	iEAPBuffer[i]->iEAPSettings->iCipherSuites.Close();    	
+    	delete iEAPBuffer[i]->iEAPSettings;
+    	iEAPBuffer[i]->iEAPSettings = NULL;
+    	}
+    iEAPBuffer.ResetAndDestroy(); 
+    
+    TInt count = iSecondaryBuffer.Count();
+    for( TInt index=0; index<count; index++ )
+        {
+        delete iSecondaryBuffer[index];
+        }
+
+    iSecondaryBuffer.Reset();
+
+
+    _DBG_FILE("CNSmlWLanAdapter::~CNSmlWLanAdapter(): end");
+    }
+
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::DDFVersionL( CBufBase& aDDFVersion )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::DDFVersionL( CBufBase& aDDFVersion )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::DDFVersionL(): begin");
+
+    aDDFVersion.InsertL( 0, KNSmlWLanAdapterDDFversion );
+
+    _DBG_FILE("CNSmlWLanAdapter::DDFVersionL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::DDFStructureL(): begin");
+
+    TSmlDmAccessTypes *aclTypes = new (ELeave) TSmlDmAccessTypes();
+    CleanupStack::PushL(aclTypes);
+//
+// Set Get as acceptable operations
+//
+    aclTypes->SetGet();
+    aclTypes->SetAdd(); // 041208 Added
+    aclTypes->SetDelete( );
+    aclTypes->SetReplace( );
+
+    TSmlDmAccessTypes accessTypesAll;
+    accessTypesAll.SetGet( );
+    accessTypesAll.SetDelete( );
+    accessTypesAll.SetAdd( );
+    accessTypesAll.SetReplace( );
+
+    TSmlDmAccessTypes accessTypesNoDelete;
+    accessTypesNoDelete.SetGet( );
+    accessTypesNoDelete.SetAdd( );
+    accessTypesNoDelete.SetReplace( );
+
+    TSmlDmAccessTypes accessTypesGetAdd;
+    accessTypesGetAdd.SetGet( );
+    accessTypesGetAdd.SetAdd(); 
+    
+    TSmlDmAccessTypes accessTypesGetAddDel;
+    accessTypesGetAddDel.SetGet();     
+    accessTypesGetAddDel.SetAdd();
+    accessTypesGetAddDel.SetDelete();
+    //WLAN
+    MSmlDmDDFObject& rootNode = aDDF.AddChildObjectL( KNSmlWLanNodeName );
+    FillNodeInfoL( rootNode,
+    		   accessTypesGetAdd,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );
+
+    //WLAN/<x>
+    MSmlDmDDFObject& wlanNode = rootNode.AddChildObjectGroupL( );
+    FillNodeInfoL( wlanNode,
+    		   accessTypesGetAddDel,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );
+
+    //WLAN/<x>/SSID
+    MSmlDmDDFObject& ssid = wlanNode.AddChildObjectL( KNSmlWLanSsid );
+    FillNodeInfoL( ssid,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );
+
+    //WLAN/<x>/UsedSSID
+    MSmlDmDDFObject& usedSsid = wlanNode.AddChildObjectL( KNSmlWLanUsedSsid );
+    FillNodeInfoL( usedSsid,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );
+               
+    //WLAN/<x>/SSIDHidden
+    MSmlDmDDFObject& ssidHidden = wlanNode.AddChildObjectL( KNSmlWLanSsidHidden );
+    FillNodeInfoL( ssidHidden,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );
+
+    //WLAN/<x>/NetworkMode
+    MSmlDmDDFObject& networkMode = wlanNode.AddChildObjectL( KNSmlWLanNetworkMode );
+    FillNodeInfoL( networkMode,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/SecurityMode
+    MSmlDmDDFObject& securityMode = wlanNode.AddChildObjectL( KNSmlWLanSecurityMode );
+    FillNodeInfoL( securityMode,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/UseWPAPSK
+    MSmlDmDDFObject& useWPAPSK = wlanNode.AddChildObjectL( KNSmlWLanUseWPAPSK );
+    FillNodeInfoL( useWPAPSK,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );
+
+    //WLAN/<x>/WPAPreSharedKey
+    MSmlDmDDFObject& wpaPreSharedKey = wlanNode.AddChildObjectL( KNSmlWLanWpaPreSharedKey );
+    FillNodeInfoL( wpaPreSharedKey,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBin,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/WLANEAPList
+    MSmlDmDDFObject& wlanEapList = wlanNode.AddChildObjectL( KNSmlWLanEapList );
+    FillNodeInfoL( wlanEapList,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                       
+
+    //WLAN/<x>/WEPKeyIndex
+    MSmlDmDDFObject& wepKeyIndex = wlanNode.AddChildObjectL( KNSmlWLanWepIndex );
+    FillNodeInfoL( wepKeyIndex,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EInt,
+               KNSmlEmpty );                       
+               
+    //WLAN/<x>/WEPAuthMode
+    MSmlDmDDFObject& wlanWepAuthMode = wlanNode.AddChildObjectL( KNSmlWLanAuthMode );
+    FillNodeInfoL( wlanWepAuthMode,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EInt,
+               KNSmlEmpty );                       
+
+    //WLAN/<x>/WEPKey/
+    MSmlDmDDFObject& wepKeyRoot = wlanNode.AddChildObjectL( KNSmlWLanWepKey );
+    FillNodeInfoL( wepKeyRoot,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/WEPKey/<x>
+    MSmlDmDDFObject& wepKey = wepKeyRoot.AddChildObjectGroupL( );
+    FillNodeInfoL( wepKey,
+    		   accessTypesGetAdd,
+               MSmlDmDDFObject::EOneOrN,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/WEPKey/<x>/WEPKeyID
+    MSmlDmDDFObject& wepKeyId = wepKey.AddChildObjectL( KNSmlWLanWepKeyId );
+    FillNodeInfoL( wepKeyId,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EInt,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/WEPKey/<x>/Data
+    MSmlDmDDFObject& data = wepKey.AddChildObjectL( KNSmlWLanWepKeyData );
+    FillNodeInfoL( data,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBin,
+               KNSmlEmpty );         
+
+
+    //WLAN/<x>/SecondarySSID/
+    MSmlDmDDFObject& secondarySSidRoot = wlanNode.AddChildObjectL( KNSmlWLanSecSsid );
+    FillNodeInfoL( secondarySSidRoot,
+               accessTypesGetAdd,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/SecondarySSID/<x>
+    MSmlDmDDFObject& secondarySSid = secondarySSidRoot.AddChildObjectGroupL( );
+    FillNodeInfoL( secondarySSid,
+               accessTypesGetAddDel,
+               MSmlDmDDFObject::EOneOrN,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/SecondarySSID/<x>/SSID
+    MSmlDmDDFObject& secSsidId = secondarySSid.AddChildObjectL( KNSmlWLanSsid );
+    FillNodeInfoL( secSsidId,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/SecondarySSID/<x>/UsedSSID
+    MSmlDmDDFObject& secUsedSsidId = secondarySSid.AddChildObjectL( KNSmlWLanUsedSsid );
+    FillNodeInfoL( secUsedSsidId,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/
+    MSmlDmDDFObject& eapRoot = wlanNode.AddChildObjectL( KNSmlWLanEap );
+    FillNodeInfoL( eapRoot,
+               accessTypesGetAdd,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/EAP/<x>
+    MSmlDmDDFObject& eap = eapRoot.AddChildObjectGroupL( );
+    FillNodeInfoL( eap,
+               accessTypesGetAdd,
+               MSmlDmDDFObject::EOneOrN,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/EAP/<x>/EAPType
+    MSmlDmDDFObject& eapType = eap.AddChildObjectL( KNSmlWLanEapType );
+    FillNodeInfoL( eapType,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Username
+    MSmlDmDDFObject& eapUsername = eap.AddChildObjectL( KNSmlWLanUsername );
+    FillNodeInfoL( eapUsername,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Password
+    MSmlDmDDFObject& eapPassword = eap.AddChildObjectL( KNSmlWLanPassword );
+    FillNodeInfoL( eapPassword,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Realm
+    MSmlDmDDFObject& eapRealm = eap.AddChildObjectL( KNSmlWLanRealm );
+    FillNodeInfoL( eapRealm,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/UsePseudonym
+    MSmlDmDDFObject& eapPseudo = eap.AddChildObjectL( KNSmlWLanUsePseudonym );
+    FillNodeInfoL( eapPseudo,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Encapsulation
+    // Encapsulation is not supported using this parameter. It is done
+    // with */EAP/EAPIdxxx-yyy/* where xxx is the encapsulated and yyy the encapsulating method.
+    /*MSmlDmDDFObject& eapEncapsulation = eap.AddChildObjectL( KNSmlWLanEncapsulation );
+    FillNodeInfoL( eapEncapsulation,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           */
+
+    //WLAN/<x>/EAP/<x>/VerifyCertRealm
+    MSmlDmDDFObject& eapVerifyCertRealm = eap.AddChildObjectL( KNSmlWLanVerifyCertRealm );
+    FillNodeInfoL( eapVerifyCertRealm,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/RequireClientAuthentication
+    MSmlDmDDFObject& eapRequireClientAuthentication = eap.AddChildObjectL( KNSmlWLanRequireClientAuthentication );
+    FillNodeInfoL( eapRequireClientAuthentication,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/SessionValidityTime
+    MSmlDmDDFObject& eapSessionValidityTime = eap.AddChildObjectL( KNSmlWLanSessionValidityTime );
+    FillNodeInfoL( eapSessionValidityTime,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/CipherSuite
+    MSmlDmDDFObject& eapCipherSuite = eap.AddChildObjectL( KNSmlWLanCipherSuite );
+    FillNodeInfoL( eapCipherSuite,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/AllowPEAPv0
+    MSmlDmDDFObject& eapAllowPEAPv0 = eap.AddChildObjectL( KNSmlWLanAllowPEAPv0 );
+    FillNodeInfoL( eapAllowPEAPv0,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/AllowPEAPv1
+    MSmlDmDDFObject& eapAllowPEAPv1 = eap.AddChildObjectL( KNSmlWLanAllowPEAPv1 );
+    FillNodeInfoL( eapAllowPEAPv1,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/AllowPEAPv2
+    MSmlDmDDFObject& eapAllowPEAPv2 = eap.AddChildObjectL( KNSmlWLanAllowPEAPv2 );
+    FillNodeInfoL( eapAllowPEAPv2,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty );  
+               
+#ifdef FF_WLAN_EXTENSIONS 
+
+    //WLAN/<x>/EAP/<x>/AuthProvModeAllowed
+    MSmlDmDDFObject& authProvMode = eap.AddChildObjectL( KNSmlWLanAuthProvMode );
+    FillNodeInfoL( authProvMode,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty ); 
+                             
+    //WLAN/<x>/EAP/<x>/UnauthProvModeAllowed
+    MSmlDmDDFObject& unauthProvMode = eap.AddChildObjectL( KNSmlWLanUnauthProvMode );
+    FillNodeInfoL( unauthProvMode,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty ); 
+                                 
+    //WLAN/<x>/EAP/<x>/PACGroupReference
+    MSmlDmDDFObject& pacGroupRef = eap.AddChildObjectL( KNSmlWLanPACGroupRef );
+    FillNodeInfoL( pacGroupRef,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );             
+               
+	//WLAN/<x>/EAP/<x>/WarnADHPNoPAC
+    MSmlDmDDFObject& warnADHPNoPAC = eap.AddChildObjectL( KNSmlWLanWarnADHPNoPAC );
+    FillNodeInfoL( warnADHPNoPAC,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty ); 
+               
+ 	//WLAN/<x>/EAP/<x>/WarnADHPNoMatchingPAC
+    MSmlDmDDFObject& warnADHPNoMatchingPAC = eap.AddChildObjectL( KNSmlWLanWarnADHPNoMatchPAC );
+    FillNodeInfoL( warnADHPNoMatchingPAC,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty ); 
+              
+    //WLAN/<x>/EAP/<x>/WarnNotDefaultServer
+    MSmlDmDDFObject& warnNoDefServ = eap.AddChildObjectL( KNSmlWLanWarnNotDefaultSrv );
+    FillNodeInfoL( warnNoDefServ,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EBool,
+               KNSmlEmpty ); 
+               
+#endif           
+                                                 
+
+    //WLAN/<x>/EAP/<x>/Certificate
+    MSmlDmDDFObject& eapCertificateRoot = eap.AddChildObjectL( KNSmlWLanCertificate );
+    FillNodeInfoL( eapCertificateRoot,
+               accessTypesGetAdd,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>
+    MSmlDmDDFObject& eapCertificate = eapCertificateRoot.AddChildObjectGroupL( );
+    FillNodeInfoL( eapCertificate,
+               accessTypesGetAdd,
+               MSmlDmDDFObject::EOneOrMore,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::ENode,
+               KNSmlEmpty );               
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>/IssuerName
+    MSmlDmDDFObject& eapIssuerName = eapCertificate.AddChildObjectL( KNSmlWLanIssuerName );
+    FillNodeInfoL( eapIssuerName,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>/SubjectName
+    MSmlDmDDFObject& eapSubjectName = eapCertificate.AddChildObjectL( KNSmlWLanSubjectName );
+    FillNodeInfoL( eapSubjectName,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>/CertType
+    MSmlDmDDFObject& eapCertType = eapCertificate.AddChildObjectL( KNSmlWLanCertType );
+    FillNodeInfoL( eapCertType,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>/SerialNumber
+    MSmlDmDDFObject& eapSerialNumber = eapCertificate.AddChildObjectL( KNSmlWLanSerialNumber );
+    FillNodeInfoL( eapSerialNumber,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>/SubjectKeyId
+    MSmlDmDDFObject& eapSubjectKeyId = eapCertificate.AddChildObjectL( KNSmlWLanSubjectKeyId );
+    FillNodeInfoL( eapSubjectKeyId,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+    //WLAN/<x>/EAP/<x>/Certificate/<x>/Fingerprint
+    MSmlDmDDFObject& eapFingerprint = eapCertificate.AddChildObjectL( KNSmlWLanFingerprint );
+    FillNodeInfoL( eapFingerprint,
+               accessTypesNoDelete,
+               MSmlDmDDFObject::EZeroOrOne,
+               MSmlDmDDFObject::EDynamic,
+               MSmlDmDDFObject::EChr,
+               KNSmlEmpty );                           
+
+	CleanupStack::PopAndDestroy(); //aclTypes
+
+    _DBG_FILE("CNSmlWLanAdapter::DDFStructureL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::AddLeafObjectL( const TDesC& aURI,const 
+// TDesC& aParentLUID, const TDesC8& aObject, const TDesC& aType, 
+// const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::AddLeafObjectL( const TDesC8& aURI,
+                                       const TDesC8& aParentLUID, 
+                                       const TDesC8& aObject, 
+                                       const TDesC8& /*aType*/, 
+                                       const TInt aStatusRef )
+    {
+    DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL - <%S> <%S> <%S>"), &aURI, &aParentLUID, &aObject );
+
+    TInt uriSegs = NumOfUriSegs( aURI );
+    TInt luid = GetIdFromLuid( aParentLUID );
+    TInt err(KErrNone);
+    TPtrC8 lastUriSeg = GetLastUriSeg( aURI );
+    
+    TInt eapIndex(0);
+    
+    TInt eapId = GetEAPIdFromUri( aURI );
+    if (eapId == KErrNotFound)
+        {
+        _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Non-EAP setting.");
+        err = iWlanSettings->GetWlanSettings( luid, *iSettings );    
+        }
+    else
+       	{
+       	_DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): EAP setting.");       	
+		TInt encapsEapId = GetEncapsEAPIdFromUri( aURI );
+        if ( encapsEapId == KErrNotFound )
+        	{
+        	_DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Does not have encapsulation id xx-xx.");
+        	encapsEapId = EAPSettings::EEapNone;
+        	}
+        TInt i(0);
+    	// This is EAP addition. Check if the buffer for this EAP already exists
+    	for ( i = 0 ; i < iEAPBuffer.Count() ; i++ )
+    		{
+    		if ( eapId == iEAPBuffer[i]->iEAPSettings->iEAPType
+    			&& encapsEapId == iEAPBuffer[i]->iEncapsulatingEAPId )
+    			{
+    			// The correct buffer was found.     			
+    			_DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Found existing buffer.");
+				eapIndex = i;
+				break;                    			
+    			}
+    		}
+    	if ( i == iEAPBuffer.Count() )
+    		{
+    		DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL(): No buffer found. Create new: <%d>-<%d>"), eapId, encapsEapId );
+			// Buffer was not found. Create new.
+			TInt WLANServiceId = GetServiceIdFromUriL ( aURI );
+    
+	        if ( WLANServiceId == KErrNotFound )
+	        	{
+	        	_DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): Could not find WLAN service ID from URI.");
+	        	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+	        	return;
+	        	}
+	        
+	        TNSmlEAPBufferElement* buffer = new (ELeave) TNSmlEAPBufferElement;	        
+	        CleanupStack::PushL( buffer );
+	        
+	        buffer->iEAPSettings = new (ELeave) EAPSettings;	        
+	        CleanupStack::PushL( buffer->iEAPSettings );
+	        
+	        buffer->iEAPSettings->iEAPType = static_cast<EAPSettings::TEapType> ( eapId );
+	        buffer->iWLANServiceId = WLANServiceId;
+	        buffer->iEncapsulatingEAPId = static_cast<EAPSettings::TEapType>( encapsEapId );
+	        iEAPBuffer.AppendL(buffer);
+	        
+	        CleanupStack::Pop( buffer->iEAPSettings );
+	        CleanupStack::Pop( buffer );
+	        
+	        eapIndex = iEAPBuffer.Count() - 1;			
+   			}
+       	}
+    if( err != KErrNone )
+        {
+        DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL - ErrorCode <%D>"), err );
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        return;
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*/*") ) != KErrNotFound && uriSegs==9 )
+        {
+        TInt wepKeyId = GetWepKeyIdFromLuid( aParentLUID );
+
+        if( wepKeyId != KErrNotFound )
+            {
+            if( lastUriSeg.Match( KNSmlWLanWepKeyData ) != KErrNotFound  )
+                {
+                switch( wepKeyId )
+                    {
+                case 1:
+                    iSettings->WepKey1 = aObject;
+                    break;
+                case 2:
+                    iSettings->WepKey2 = aObject;
+                    break;
+                case 3:
+                    iSettings->WepKey3 = aObject;
+                    break;
+                case 4:
+                    iSettings->WepKey4 = aObject;
+                    break;
+                default:
+                    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                    return;
+                    }
+                }
+            else if( lastUriSeg.Match( KNSmlWLanWepKeyId ) != KErrNotFound )
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+                return;
+                }
+            else
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                return;
+                }
+            }
+
+        else
+            {
+            TInt index = -1;
+
+            for( TInt i=0; i<iBuffer->Count(); i++ )
+                {
+                if( aURI.Find( iBuffer->At(i).iUri->Des() ) != KErrNotFound )
+                    {
+                    index = i;
+                    break;
+                    }
+                }
+            if( index < 0 )
+                {
+                wepKeyId = GetWepKeyIdFromUri( aURI );
+
+                TBuf8<80> addLUID; // AP/<x>/NapDef/<x>/WLAN/<x>/WEPKey/WKIdnnn
+                addLUID.AppendNum( wepKeyId );
+                addLUID.AppendNumFixedWidth( luid, EDecimal, 3 );
+
+                DBG_ARGS8(_S8("WLanAdapter::AddleafObject - mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID );
+                DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID );
+                iCallBack->SetMappingL(aURI, addLUID);
+                if( lastUriSeg.Match( KNSmlWLanWepKeyData ) != KErrNotFound  )
+                {
+                switch( wepKeyId )
+                    {
+                case 1:
+                    iSettings->WepKey1 = aObject;
+                    break;
+                case 2:
+                    iSettings->WepKey2 = aObject;
+                    break;
+                case 3:
+                    iSettings->WepKey3 = aObject;
+                    break;
+                case 4:
+                    iSettings->WepKey4 = aObject;
+                    break;
+                default:
+                    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                    return;
+                    }
+                }
+            else if( lastUriSeg.Match( KNSmlWLanWepKeyId ) != KErrNotFound )
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+                return;
+                }
+            else
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                return;
+                }
+                }
+            else
+                {
+                //Add WepKeyId and execute buffer
+                if( lastUriSeg.Match( KNSmlWLanWepKeyId ) != KErrNotFound )
+                    {
+                    iBuffer->At(index).iWepKeyId = DesToInt( aObject );
+                    iBuffer->At(index).iIdStatusRef = aStatusRef;
+                                       
+//                  ExecuteBufferL( ); (JPLA-6M29NR caused error in WEPkey Data if buffer is executed here)
+                    return;
+                    }
+
+                else if( lastUriSeg.Match( KNSmlWLanWepKeyData ) != KErrNotFound )
+                    {
+                    iBuffer->At(index).iData = aObject.AllocLC();
+                    iBuffer->At(index).iDataSet = ETrue;
+                    CleanupStack::Pop( ); //iBuffer->At(index).iData
+                    iBuffer->At(index).iDataStatusRef = aStatusRef;
+                    return;
+                    }
+                else
+                    {
+                    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                    return;
+                    }
+                }
+            }
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/*") ) != KErrNotFound && uriSegs==7 )
+        {
+        if( lastUriSeg.Compare(KNSmlWLanSsid) == 0 )
+            {
+            TInt returnValue = CnvUtfConverter::ConvertToUnicodeFromUtf8( iSettings->SSID, aObject );
+            DBG_ARGS(_S16("WLanAdapter::ssid convert: <%D>"), returnValue );
+            if (returnValue != KErrNone)
+            	{
+            	// setting the default value to the network name
+            	iSettings->SSID = TPtrC(KNSmlWLanDefaultSSID);
+            	DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL SSID - ErrorCode <%D>"), returnValue );
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+                return;
+            	}
+            }
+
+        else if( lastUriSeg.Compare(KNSmlWLanUsedSsid) == 0 )
+            {
+            TInt returnValue = CnvUtfConverter::ConvertToUnicodeFromUtf8( iSettings->UsedSSID, aObject );
+            DBG_ARGS(_S16("WLanAdapter::usedSsid convert: <%D>"), returnValue );
+            }
+
+        else if( lastUriSeg.Compare(KNSmlWLanSsidHidden) == 0 )
+            {
+            if( aObject.MatchF( _L8("True")) != KErrNotFound )
+                {
+                iSettings->ScanSSID = 1;
+                }
+            else
+                {
+                iSettings->ScanSSID = 0;
+                }
+            }
+
+        else if( lastUriSeg.Compare(KNSmlWLanNetworkMode) == 0 )
+            {
+            if( aObject.MatchF( _L8("ADHOC") ) != KErrNotFound )
+                {
+                iSettings->ConnectionMode = EAdhoc;
+                }
+
+            else if( aObject.MatchF( _L8("Infrastructure") ) != KErrNotFound )
+                {
+                iSettings->ConnectionMode = EInfrastructure;
+                }
+            else
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+                return;
+                }
+            }
+    
+        else if( lastUriSeg.Compare(KNSmlWLanSecurityMode) == 0 )
+            {
+            if( aObject.MatchF( _L8("NONE") ) != KErrNotFound )
+                {
+                iSettings->SecurityMode = EAllowUnsecure;
+                }
+            else if( aObject.MatchF( _L8("WEP") ) != KErrNotFound )
+                {
+                iSettings->SecurityMode = EWep;
+                }
+            else if( aObject.MatchF( _L8("8021X") ) != KErrNotFound )
+                {
+                iSettings->SecurityMode = EWlan8021x;
+                }
+            else if( aObject.MatchF( _L8("WPA") ) != KErrNotFound )
+                {
+                iSettings->SecurityMode = EWpa;
+                }
+            else if( aObject.MatchF( _L8("WPA2") ) != KErrNotFound )
+                {
+                iSettings->SecurityMode = EWpa2;
+                }
+            else
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+                return;
+                }
+            }
+
+        else if( lastUriSeg.Compare( KNSmlWLanUseWPAPSK ) == 0 )
+            {
+            if( aObject.MatchF( _L8("True")) != KErrNotFound )
+                {
+                iSettings->UseWPAPSK = 1;
+                }
+            else
+                {
+                iSettings->UseWPAPSK = 0;
+                }
+            }
+
+        else if( lastUriSeg.Compare(KNSmlWLanWpaPreSharedKey) == 0 )
+            {
+            if(aObject.Length() > KMaxPSKLength)
+            {
+            	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject );
+            	return;
+            }
+            /*else if(aObject.Length() < KMinPSKLength)
+            {
+              	iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+            	return;
+            }*/
+            else
+            {
+                iSettings->WPAPreSharedKey = aObject;     
+            }
+            }   
+
+	    else if( lastUriSeg.Compare( KNSmlWLanEapList ) == 0 )
+    	    {
+            TInt returnValue = CnvUtfConverter::ConvertToUnicodeFromUtf8( iSettings->EapList, aObject );
+            DBG_ARGS(_S16("WLanAdapter::EapList convert: <%D>"), returnValue );            
+        	}
+
+    	else if( lastUriSeg.Compare( KNSmlWLanAuthMode ) == 0 )
+        	{
+        	if( aObject.MatchF( _L8("1")) != KErrNotFound )
+                {
+                iSettings->AuthMode = EShared;
+                }
+            else
+                {
+                iSettings->AuthMode = EOpen;
+                }            
+        	}
+
+        else if( lastUriSeg.Compare(KNSmlWLanWepIndex) == 0 )
+            {
+            TInt32 actualIndex = DesToInt( aObject );
+            if( actualIndex < 4 && actualIndex >= 0  )
+            {
+            	iSettings->WepIndex = actualIndex ;
+            }
+            else
+            {
+            	if ( actualIndex > 3)
+            	{
+				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ETooLargeObject );
+            	}
+            	else
+            	{
+				iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+            	}
+            	return;
+            }
+            }
+
+        else
+            {
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            return;
+            }
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*/*") ) != KErrNotFound && uriSegs == 9 )
+        {
+        TSecondarySSID ssid;
+        ssid.Id = 0;
+        TUint32 id = GetSecSSIDFromUriL(aURI);
+        RArray<TSecondarySSID> secondaryList;
+        CleanupClosePushL( secondaryList );
+        iWlanSettings->GetSecondarySSIDListL(luid, secondaryList);
+        TInt count = secondaryList.Count();
+        for (TInt i=0;i<count;i++)
+            {
+            if (id == secondaryList[i].Id)
+                {
+                ssid = secondaryList[i];
+                break;
+                }
+            }
+        CleanupStack::PopAndDestroy(&secondaryList);
+        if (ssid.Id == 0)
+            {
+            
+            _DBG_FILE("CNSmlWLanAdapter::Coming to check buffer ");
+            
+            //Check if its buffered here - Divya
+            TInt index = -1;
+
+            for( TInt i=0; i<iSecondaryBuffer.Count(); i++ )
+                {
+                if( aURI.Find( iSecondaryBuffer[i]->iUri->Des() ) != KErrNotFound )
+                    {
+                    index = i;
+                    _DBG_FILE("CNSmlWLanAdapter::one indexis matched :-)");
+                    break;
+                    }
+                }
+            if( index < 0 )
+                {
+                _DBG_FILE("CNSmlWLanAdapter::one indexis matched :-)");
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                return;
+                }
+            else
+                {
+                DBG_ARGS8(_S8("CWlanadaptes::Execute Buffer - copying in buffer instead of giving 404 uri: object id  : <%S>"), &aObject);
+                
+                    if( lastUriSeg.Compare(KNSmlWLanSsid) == 0 )
+                    {
+                    if ( aObject.Length() <= KMaxTextLength )
+                    	{
+                    	iSecondaryBuffer[index]->ScannedId.Copy(aObject);
+                    	}
+                    else
+                    	{
+                    	_DBG_FILE("CNSmlWLanAdapter::AddLeafObject - SecondarySSID too long");
+                        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+                        return;
+                    	}
+                    		
+                    }
+                    else if (lastUriSeg.Compare(KNSmlWLanUsedSsid) == 0 )
+                    {
+                    iSecondaryBuffer[index]->UsedId.Copy(aObject);
+                    }
+                
+                }
+                
+            
+            }
+        
+        else
+            {
+            
+        if( lastUriSeg.Compare(KNSmlWLanSsid) == 0 )
+            {
+            ssid.ScannedId.Copy(aObject);
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanUsedSsid) == 0 )
+            {
+            ssid.UsedId.Copy(aObject);
+            }
+        TInt retval = iWlanSettings->WriteSecondarySSIDL(luid, ssid, EFalse);
+        if (retval == KErrNone)
+            {
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            }
+        else
+            {
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+            }
+            }
+        }
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/*") ) != KErrNotFound && uriSegs == 9 )
+        {
+        DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL - EAP index: <%d>"), eapIndex );
+        
+        if( lastUriSeg.Compare(KNSmlWLanEapType) == 0 )
+            {
+            // Get EAP ID from URI instead of the value because the server gives the value
+            // incorrectly as the textual representation of the EAP method instead of the IANA number.            
+            iEAPBuffer[eapIndex]->iEAPSettings->iEAPType = static_cast<EAPSettings::TEapType>(GetEAPIdFromUri(aURI));
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanUsername) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iUsername, aObject );
+            if (retval == KErrNone)
+            	{
+                iEAPBuffer[eapIndex]->iEAPSettings->iUsernamePresent = ETrue;
+            	}
+            else
+            	{
+            	iEAPBuffer[eapIndex]->iEAPSettings->iUsername.Zero();
+                DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL EAP username - ErrorCode <%D>"), retval );
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+                return;
+            	}
+
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanPassword) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iPassword, aObject );
+            if (retval == KErrNone)
+            	{
+                iEAPBuffer[eapIndex]->iEAPSettings->iPasswordPresent = ETrue;
+            	}
+            else
+            	{
+            	iEAPBuffer[eapIndex]->iEAPSettings->iPassword.Zero();
+                DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL EAP password - ErrorCode <%D>"), retval );
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+                return;
+            	}
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanRealm) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iRealm, aObject );
+            if (retval == KErrNone)
+                iEAPBuffer[eapIndex]->iEAPSettings->iRealmPresent = ETrue;
+            
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanUsePseudonym) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iUsePseudonyms = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iUsePseudonyms = EFalse;
+            
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iUsePseudonymsPresent = ETrue; 
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanEncapsulation) == 0)
+            {           
+            TBuf8<KExpandedEAPIdLength> dummy;
+            ConvertEAPStringToIds( aObject, dummy, iEAPBuffer[eapIndex]->iEncapsulatingEAPId );
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanVerifyCertRealm) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iVerifyServerRealm = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iVerifyServerRealm = EFalse;
+            
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iVerifyServerRealmPresent = ETrue; 
+            
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanRequireClientAuthentication) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iRequireClientAuthentication = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iRequireClientAuthentication = EFalse;
+            
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iRequireClientAuthenticationPresent = ETrue; 
+            
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanSessionValidityTime) == 0)
+            {
+            TLex8 lex(aObject);
+            TUint newVal;
+            TInt sesValErr = lex.Val(newVal);
+            // Check whether the conversion went ok
+            if ( sesValErr == KErrNone ) 
+            	{
+            	iEAPBuffer[eapIndex]->iEAPSettings->iSessionValidityTime = newVal;
+            	iEAPBuffer[eapIndex]->iEAPSettings->iSessionValidityTimePresent = ETrue;
+            	}
+            else 
+            	{
+            	// there were errors, let's leave the function and update status
+                DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL SessionValidityTime - ErrorCode <%D>"), sesValErr );
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EInvalidObject );
+                return;
+            	}
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanCipherSuite) == 0)
+            {
+            FillCipherSuitesL( aObject , eapIndex );
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanAllowPEAPv0) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv0Allowed = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv0Allowed = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iPEAPVersionsPresent = ETrue;
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanAllowPEAPv1) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv1Allowed = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv1Allowed = EFalse;
+
+            iEAPBuffer[eapIndex]->iEAPSettings->iPEAPVersionsPresent = ETrue;
+            
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanAllowPEAPv2) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv2Allowed = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iPEAPv2Allowed = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iPEAPVersionsPresent = ETrue;
+            }
+            
+#ifdef FF_WLAN_EXTENSIONS 
+		else if (lastUriSeg.Compare(KNSmlWLanAuthProvMode) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iAuthProvModeAllowed = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iAuthProvModeAllowed = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iAuthProvModeAllowedPresent = ETrue;
+            }
+            
+            
+      	else if (lastUriSeg.Compare(KNSmlWLanUnauthProvMode) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iUnauthProvModeAllowed = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iUnauthProvModeAllowed = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iUnauthProvModeAllowedPresent = ETrue;
+            }
+            
+                        
+     	else if (lastUriSeg.Compare(KNSmlWLanPACGroupRef) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( iEAPBuffer[eapIndex]->iEAPSettings->iPACGroupReference, aObject );
+            if (retval == KErrNone)
+                iEAPBuffer[eapIndex]->iEAPSettings->iPACGroupReferencePresent = ETrue;
+            
+            }
+                        
+    	else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoPAC) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoPAC = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoPAC = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoPACPresent = ETrue;
+            }
+            
+            
+    	else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoMatchPAC) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoMatchingPAC = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoMatchingPAC = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iWarnADHPNoMatchingPACPresent = ETrue;
+            }
+            
+            
+  		else if (lastUriSeg.Compare(KNSmlWLanWarnNotDefaultSrv) == 0)
+            {
+            if ( (aObject == KTrue) || (aObject == KTtrue) )
+                iEAPBuffer[eapIndex]->iEAPSettings->iWarnNotDefaultServer = ETrue; 
+            else
+                iEAPBuffer[eapIndex]->iEAPSettings->iWarnNotDefaultServer = EFalse;
+            
+            iEAPBuffer[eapIndex]->iEAPSettings->iWarnNotDefaultServerPresent = ETrue;
+            }
+            
+
+#endif            
+        
+        // Save the status reference
+		iEAPBuffer[eapIndex]->iStatusRefArray.AppendL(aStatusRef);        
+		return;
+        }
+    else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*/*") ) != KErrNotFound && uriSegs == 11)
+        {
+		TPtrC8 ptr = NSmlDmURI::ParentURI( aURI );
+
+		// Get the LUID from ptr2
+       	HBufC8* certLuid = iCallBack->GetLuidAllocL( ptr );
+		
+		TInt certIndex = GetIdFromLuid( *certLuid );
+        
+        delete certLuid;		
+        
+        DBG_ARGS8(_S8("CNSmlWLanAdapter::AddLeafObjectL - cert index: <%d>, cert count: <%d>"), 
+        	certIndex, iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.Count());
+      	
+      	if ( iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.Count() - 1 < certIndex )
+      		{
+      		_DBG_FILE("CNSmlWLanAdapter::AddLeafObject - Certificate buffer does not exist. Create it.");
+      		// The certificate buffer does not exist. Create a new one
+	  		CertificateEntry entry;
+			iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.AppendL(entry);
+			iEAPBuffer[eapIndex]->iEAPSettings->iCertificatesPresent = ETrue;
+	        	        
+	       	certIndex = iEAPBuffer[eapIndex]->iEAPSettings->iCertificates.Count() - 1;
+	       	
+	        TBuf8<2> newLuid;
+			newLuid.Num( certIndex );
+			
+	        DBG_ARGS8(_S8("WLanAdapter::AddLeafObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &newLuid );
+	        iCallBack->SetMappingL( aURI, newLuid);	              		      		
+      		}
+      
+        if (lastUriSeg.Compare(KNSmlWLanIssuerName) == 0)
+            {
+            TInt retval = 
+                CnvUtfConverter::ConvertToUnicodeFromUtf8( 
+                	iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iIssuerName, aObject );
+            if (retval == KErrNone)
+                iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iIssuerNamePresent = ETrue;
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanSubjectName) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8(
+            	iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectName, aObject );
+            if (retval == KErrNone)
+                iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectNamePresent = ETrue;
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanCertType) == 0)
+            {
+            iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iCertType = (CertificateEntry::TCertType)DesToInt(aObject);
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanSerialNumber) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8(
+            	iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSerialNumber, aObject );
+            if (retval == KErrNone)
+                iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSerialNumberPresent = ETrue;
+            
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanSubjectKeyId) == 0)
+            {
+            
+            // Define literals to search the subject key for possible 0X/0x beginning
+            _LIT(KHexIdLC, "0x");
+           	_LIT(KHexIdUC, "0X");
+           	TBuf<2> hexIdBuf;
+           	// The lenght of the key given as input
+           	TInt keyLen = aObject.Length();
+           	
+           	// setting the given key to the key buffer
+           	TBuf8<KNsmlSubjectKeyIdLength> origKey = aObject;
+           	origKey.SetLength(keyLen);
+           	TBuf<KNsmlSubjectKeyIdLength> key;
+           	TLex8 tmpByte;
+           	TUint16 byte;
+           	
+           	// Remove possible spaces from the beginning
+           	origKey.TrimLeft();
+           	
+           	// the key should be atleast two chars long
+           	if (origKey.Length() >= 2)
+                {
+            	// Copy the two left most characters in to the buffer
+            	hexIdBuf.Copy(origKey.Left(2));
+            	
+            	// If the first characters are 0x or 0X, then thet should be ignored
+            	if (hexIdBuf.Compare(KHexIdLC) == 0
+            			|| hexIdBuf.Compare(KHexIdUC) == 0)
+            		{
+            		// delete two characters
+            		origKey.Delete(0, 2);
+            		}
+                }
+            
+
+           	// looping the subject key through, removing whitespaces
+           	for (TInt i = 0; i < keyLen; i++)
+           		{
+           		// removing white spaces from the left side of the key
+           		origKey.TrimLeft();
+           		// check that there are characters left
+           		if (origKey.Length() >= 2)
+           			{
+           			// pick the two left most bytes from the key
+           			tmpByte = origKey.Left(2);
+           			// convert byte into binary format
+           			err = tmpByte.Val(byte, EHex);
+           			
+           			// check whether conversion to decimal went ok
+           			if (err != KErrNone)
+           				{
+           				// if there are problems, then leave the loop
+           				break;
+           				}
+           			
+           			// store the appended byte into the key variable
+           			key.Append(byte);
+           			// delete two characters from the left side of the character array in the buffer
+           			origKey.Delete(0, 2);
+           			}
+           		else if (	origKey.Length() == 1 )
+           			{
+           			// pick the left most byte from the key
+           			tmpByte = origKey.Left(1);
+           			// convert byte into binary format
+           			err = tmpByte.Val(byte, EHex);
+           			
+           			// check whether conversion to decimal went ok
+           			if (err != KErrNone)
+           				{
+           				// if there are problems, then leave the loop
+           				break;
+           				}
+           			
+           			// store the appended byte into the key variable
+           			key.Append(byte);
+           			// delete two characters from the left side of the character array in the buffer
+           			origKey.Delete(0, 1);
+           			}
+           		else {
+           			// leave the loop, no characters are left
+           			break;
+           			}
+           		}
+           	// store key value only if no errors occurred
+           	if (err == KErrNone) 
+           		{
+           		iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectKeyID.Copy(key);
+           		iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iSubjectKeyIDPresent = ETrue;
+           		}
+             else 
+            	{
+            	// there were errors, let's leave the function and update status
+                DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL - ErrorCode <%D>"), err );
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+                return;
+            	}
+            }
+        else if (lastUriSeg.Compare(KNSmlWLanFingerprint) == 0)
+            {
+            TInt retval = CnvUtfConverter::ConvertToUnicodeFromUtf8( 
+            	iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iThumbprint, aObject );
+            if (retval == KErrNone)
+                iEAPBuffer[eapIndex]->iEAPSettings->iCertificates[certIndex].iThumbprintPresent = ETrue;
+            }
+        // Save the status reference
+		iEAPBuffer[eapIndex]->iStatusRefArray.AppendL(aStatusRef);        
+		
+        return;
+        }
+        
+    if (eapId == KErrNotFound)
+        {
+        err = iWlanSettings->WriteWlanSettings( *iSettings );
+        }
+    
+    if( err != KErrNone )
+        {
+        DBG_ARGS(_S16("CNSmlWLanAdapter::AddLeafObjectL - ErrorCode <%D>"), err );
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+        return;
+        }
+
+    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+
+    _DBG_FILE("CNSmlWLanAdapter::AddLeafObjectL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC& aURI, 
+//    const TDesC& aLUID, const TDesC8& aObject, const TDesC& aType, 
+//    const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+                                          const TDesC8& aLUID, 
+                                          const TDesC8& aObject, 
+                                          const TDesC8& aType, 
+                                          const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): begin");
+    DBG_ARGS8(_S8("WLanAdapter::UpdateLeafObjectL - <%S> <%S> <%S>"), &aURI, &aLUID, &aObject );
+
+    AddLeafObjectL( aURI, aLUID, aObject, aType, aStatusRef );
+
+    _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+// const TDesC8& aLUID, const TDesC8& aObject, const TDesC8& aType )
+//------------------------------------------------------------------------------
+
+void CNSmlWLanAdapter::UpdateLeafObjectL( const TDesC8& /*aURI*/, 
+                                          const TDesC8& /*aLUID*/,
+                                          RWriteStream*& /*aStream*/, 
+                                          const TDesC8& /*aType*/,
+                                          TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): begin");
+    iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlWLanAdapter::UpdateLeafObjectL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::DeleteObjectL( const TDesC8& aURI, 
+// const TDesC8& aLUID, const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::DeleteObjectL( const TDesC8& aURI, 
+                                      const TDesC8& aLUID, 
+                                      const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): begin");
+    CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound;
+
+    if( aLUID.Length() == 0 )
+        {
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+
+        _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): end");
+        return;
+        }
+
+	TInt luid = GetIdFromLuid( aLUID );
+
+
+    if( ( NumOfUriSegs( aURI ) < 6 )
+     	|| (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 6 ) )
+        {
+        TInt ret = iWlanSettings->DeleteWlanSettings( luid );
+
+        if( ret == KErrNone )
+        	{
+        	status = CSmlDmAdapter::EOk;
+        	}                          
+        else
+            {
+            status = CSmlDmAdapter::EError;
+            }
+            
+        }
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey") ) != KErrNotFound && NumOfUriSegs( aURI ) == 7 )
+        {
+        // Individual WLAN settings cannot be deleted and this case should never happen.
+        // These are deleted through WLAN parent nodes.
+        status = CSmlDmAdapter::EError;
+        }
+        
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*"))!= KErrNotFound && NumOfUriSegs( aURI ) == 8  )
+    {
+      _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): matching SecondarySSID/*");
+    	//Check if the secondary SSID is present , if so delete that 
+    	 TUint32 secid = GetSecSSIDFromUriL(aURI);
+    	 TInt retvalue( KErrNone );
+         _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() before call to DeleteOneSecondarySSIDL ");
+        TRAPD(ssidError, retvalue = iWlanSettings->DeleteOneSecondarySSIDL(luid,secid));
+         _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() After call to DeleteOneSecondarySSIDL ");
+         DBG_ARGS8(_S8("TRAP ERROR  ssidError : Id = %d and retvalue eror = %d"), ssidError, retvalue);
+                  
+		 if(ssidError == KErrNone )
+		 {
+		   _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() SSID trap KERRONONE");
+		 	if(retvalue == KErrNone)            
+		 	{
+		 		_DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() retvalue also  KERRONONE, so its deleted");
+		 		status = CSmlDmAdapter::EOk;
+		 	}
+		 	
+			 else  if (retvalue == KErrNotFound)
+			 {
+			 	status = CSmlDmAdapter::ENotFound;
+			 	_DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() retvalue KErrNotFound :-(");
+			 }
+			
+			else
+			{
+				_DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() retvalue some error :-(");
+				status = CSmlDmAdapter::EError;
+			}
+				
+			
+		 }
+		 else
+		 {
+		 _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL() trap error :-( ");
+		 	status = CSmlDmAdapter::EError;
+		 }  
+				 
+    }
+    
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 7 )
+        {
+        // Individual WLAN settings cannot be deleted and this case should never happen.
+        // These are deleted through WLAN parent nodes.
+        status = CSmlDmAdapter::EError;
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 8 )
+        {
+        // Individual WEP keys cannot be deleted and this case should never happen.
+        // These are deleted through WLAN parent nodes.
+        status = CSmlDmAdapter::EError;
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*/Data") ) != KErrNotFound && NumOfUriSegs( aURI ) == 9 )
+        {
+    	// Individual WEP keys cannot be deleted and this case should never happen.
+    	// These are deleted through WLAN parent nodes.	
+       	status = CSmlDmAdapter::EError;        
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 8 )
+        {
+    	// Individual EAP settings cannot be deleted and this case should never happen.
+    	// These are deleted through WLAN parent nodes.	
+       	status = CSmlDmAdapter::EError;        
+        }
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 9 )
+        {
+        // Individual EAP settings cannot be deleted and this case should never happen.
+        // These are deleted through WLAN parent nodes.
+        status = CSmlDmAdapter::EError;
+        }
+    else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 10)
+        {
+        // Individual certificates are not allowed to be deleted and this case should never happen
+        // These are deleted through WLAN parent nodes.
+        status = CSmlDmAdapter::EError;
+               
+        }
+    else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*/*") ) != KErrNotFound && NumOfUriSegs( aURI ) == 11)
+        {
+        // Individual certificate fields are not allowed to be deleted and this case should never happen.
+        // These are deleted through WLAN parent nodes.
+        status = CSmlDmAdapter::EError;
+		}
+
+    iCallBack->SetStatusL( aStatusRef, status );
+
+    _DBG_FILE("CNSmlWLanAdapter::DeleteObjectL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+//                     const TDesC8& aLUID, const TDesC8& aType, 
+//                     const TInt aResultsRef, const TInt aStatusRef )
+// not used.
+//-----------------------------------------------------------------------------
+
+void CNSmlWLanAdapter::FetchLeafObjectSizeL( const TDesC8& /*aURI*/, 
+                                                 const TDesC8& /*aLUID*/,
+                                                 const TDesC8& /*aType*/, 
+                                                 TInt /*aResultsRef*/,
+                                                 TInt /*aStatusRef*/ )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectSizeL(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectSizeL(): end");
+    return;
+}                                                
+
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+//                     const TDesC8& aLUID, const TDesC8& aType, 
+//                     const TInt aResultsRef, const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& /*aURI*/, 
+                                        const TDesC8& /*aLUID*/, 
+                                        const TDesC8& /*aType*/, 
+                                        const TInt /*aResultsRef*/, 
+                                        const TInt /*aStatusRef*/ )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): end");
+
+    }
+    
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::FetchLeafObjectL( const TDesC& aURI, 
+//                     const TDesC& aLUID, const TDesC& aType, 
+//                     const TInt aResultsRef, const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+CSmlDmAdapter::TError CNSmlWLanAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+                                        const TDesC8& aLUID, 
+                                        const TDesC8& aType, 
+                                        CBufBase& aObject )
+    {
+    
+    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): begin");
+    DBG_ARGS8(_S8("WLanAdapter::FetchLeafObjectL - <%S> <%S> <%S>"), &aURI, &aLUID, &aType);
+
+    if(aLUID.Length()==0)
+        {
+
+        _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): ENotFound");
+        return CSmlDmAdapter::ENotFound;
+        }
+
+    CSmlDmAdapter::TError status = CSmlDmAdapter::ENotFound;
+
+	// This luid is the service table id (Found from EAP node and parents)
+	TInt luid;
+	if ( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*")) != KErrNotFound )
+		{
+		luid = GetServiceIdFromUriL( aURI );
+		}
+	else
+		{
+		// The luid supplied is ok
+		luid = GetIdFromLuid( aLUID );
+		}
+    
+    TPtrC8 lastUriSeg = GetLastUriSeg( aURI );
+
+    TInt err = iWlanSettings->GetWlanSettings( luid, *iSettings );
+
+    if( err == KErrNotFound )
+    {
+
+        _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): ENotFound");       
+        return CSmlDmAdapter::ENotFound;
+    }
+
+    if( lastUriSeg.Compare( KNSmlWLanSsid ) == 0 )
+        {
+
+        if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*")) != KErrNotFound)
+            {
+            RArray<TSecondarySSID> secondarySSIDs;
+            CleanupClosePushL( secondarySSIDs );
+            iWlanSettings->GetSecondarySSIDListL(luid, secondarySSIDs);
+            TSecondarySSID ssid;
+            ssid.Id = 0;
+            TUint32 id = GetSecSSIDFromUriL(aURI);
+            TInt count = secondarySSIDs.Count();
+            for (TInt i=0;i<count;i++)
+                {
+                if (id == secondarySSIDs[i].Id)
+                    {
+                    ssid = secondarySSIDs[i];
+                    break;
+                    }
+                }            
+            CleanupStack::PopAndDestroy(&secondarySSIDs);
+            if (ssid.Id == 0)
+                {
+                status = CSmlDmAdapter::ENotFound;
+                }
+            else
+                {
+                HBufC* data = ssid.ScannedId.AllocLC();
+                HBufC8* data8 = HBufC8::NewLC(data->Size());
+                TPtr8 dataPtr8 = data8->Des();
+                //FFS
+                CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() );
+
+                aObject.InsertL( 0, dataPtr8 );
+                status = CSmlDmAdapter::EOk;
+
+                CleanupStack::PopAndDestroy( 2 ); //data, data8
+                }
+            }
+        else
+            {
+
+        HBufC* data = iSettings->SSID.AllocLC();
+        HBufC8* data8 = HBufC8::NewLC(data->Size());
+        TPtr8 dataPtr8 = data8->Des();
+        //FFS
+        CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() );
+
+        aObject.InsertL( 0, dataPtr8 );
+        status = CSmlDmAdapter::EOk;
+
+        CleanupStack::PopAndDestroy( 2 ); //data, data8
+
+            }
+
+        }
+
+    else if( lastUriSeg.Compare( KNSmlWLanUsedSsid ) == 0 )
+        {
+
+        if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*")) != KErrNotFound)
+            {
+            RArray<TSecondarySSID> secondarySSIDs;
+            CleanupClosePushL( secondarySSIDs );
+            iWlanSettings->GetSecondarySSIDListL(luid, secondarySSIDs);
+            TSecondarySSID ssid;
+            ssid.Id = 0;
+            TUint32 id = GetSecSSIDFromUriL(aURI);
+            TInt count = secondarySSIDs.Count();
+            for (TInt i=0;i<count;i++)
+                {
+                if (id == secondarySSIDs[i].Id)
+                    {
+                    ssid = secondarySSIDs[i];
+                    break;
+                    }
+                }
+            CleanupStack::PopAndDestroy(&secondarySSIDs);            
+            if (ssid.Id == 0)
+                {
+                status = CSmlDmAdapter::ENotFound;
+                }
+            else
+                {
+                HBufC* data = ssid.UsedId.AllocLC();
+                HBufC8* data8 = HBufC8::NewLC(data->Size());
+                TPtr8 dataPtr8 = data8->Des();
+                //FFS
+                CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() );
+
+                aObject.InsertL( 0, dataPtr8 );
+                status = CSmlDmAdapter::EOk;
+
+                CleanupStack::PopAndDestroy( 2 ); //data, data8
+                }
+            }
+        else
+            {
+            
+        HBufC* data = iSettings->UsedSSID.AllocLC();
+        HBufC8* data8 = HBufC8::NewLC(data->Size());
+        TPtr8 dataPtr8 = data8->Des();
+        //FFS
+        CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() );
+
+        aObject.InsertL( 0, dataPtr8 );
+        status = CSmlDmAdapter::EOk;
+
+        CleanupStack::PopAndDestroy( 2 ); //data, data8
+        
+            }
+
+        }
+        
+    else if( lastUriSeg.Compare( KNSmlWLanSsidHidden ) == 0 )
+        {
+        if ( iSettings->ScanSSID == 1 )
+            {
+            aObject.InsertL( 0, _L8("True" ) );
+            }
+        else
+            {
+            aObject.InsertL( 0, _L8("False" ) );
+            }
+        status = CSmlDmAdapter::EOk;
+        }
+
+
+    else if( lastUriSeg.Compare( KNSmlWLanNetworkMode ) == 0 )
+        {
+        status = CSmlDmAdapter::EOk;
+
+        switch( iSettings->ConnectionMode )
+            {
+        case 0:
+            aObject.InsertL( 0, KNSmlWLanAdHoc8 );
+            break;
+        case 1:
+            aObject.InsertL( 0, KNSmlWLanInfrastructure8 );
+            break;
+        default:
+            status = CSmlDmAdapter::ENotFound;
+            break;
+            }
+        }
+    else if( lastUriSeg.Compare( KNSmlWLanSecurityMode ) == 0 )
+        {
+        status = CSmlDmAdapter::EOk;
+
+        switch( iSettings->SecurityMode )
+            {
+        case EAllowUnsecure:
+            aObject.InsertL( 0, KNSmlWLanAllowUnsecure8 );
+            break;
+        case EWep:
+            aObject.InsertL( 0, KNSmlWLanWep8 );
+            break;
+        case EWlan8021x:
+            aObject.InsertL( 0, KNSmlWLan8021x8 );
+            break;
+        case EWpa:
+            aObject.InsertL( 0, KNSmlWLanWpa8 );
+            break;
+        case EWpa2:
+            aObject.InsertL( 0, KNSmlWLanWpa28 );
+            break;
+        default:
+            status = CSmlDmAdapter::ENotFound;
+            break;
+            }
+        }
+        
+    else if( lastUriSeg.Compare( KNSmlWLanWpaPreSharedKey ) == 0 )
+        {
+		aObject.InsertL( 0, iSettings->WPAPreSharedKey );
+        status = CSmlDmAdapter::EOk;
+        }
+
+    else if( lastUriSeg.Compare( KNSmlWLanUseWPAPSK ) == 0 )
+        {
+        if ( iSettings->UseWPAPSK == 1 )
+            {
+            aObject.InsertL( 0, _L8("True" ) );
+            }
+        else
+            {
+            aObject.InsertL( 0, _L8("False" ) );
+            }       
+        status = CSmlDmAdapter::EOk;
+        }
+
+    else if( lastUriSeg.Compare( KNSmlWLanWepIndex ) == 0 )
+        {
+        HBufC8* data = IntToDes8LC( iSettings->WepIndex );
+        aObject.InsertL( 0, data->Des() );
+        
+        CleanupStack::PopAndDestroy( data ); //data
+        status = CSmlDmAdapter::EOk;
+        }
+
+    else if( lastUriSeg.Compare( KNSmlWLanEapList ) == 0 )
+        {     
+        HBufC* data = iSettings->EapList.AllocLC();
+        HBufC8* data8 = HBufC8::NewLC(data->Size());
+        TPtr8 dataPtr8 = data8->Des();
+        //FFS
+        CnvUtfConverter::ConvertFromUnicodeToUtf8( dataPtr8, data->Des() );
+
+        aObject.InsertL( 0, dataPtr8 );
+        status = CSmlDmAdapter::EOk;
+
+        CleanupStack::PopAndDestroy( 2 ); //data, data8
+      
+        }
+
+    else if( lastUriSeg.Compare( KNSmlWLanAuthMode ) == 0 )
+        {
+        HBufC8* data = IntToDes8LC( iSettings->AuthMode );
+        aObject.InsertL( 0, data->Des() );
+        
+        CleanupStack::PopAndDestroy( data ); //data
+        status = CSmlDmAdapter::EOk;
+        }
+
+    else if( lastUriSeg.Compare( KNSmlWLanWepKeyData ) == 0 )
+        {
+        TInt wepKeyIndex = GetWepKeyIdFromLuid( aLUID );
+        if(wepKeyIndex == KErrNotFound)
+        {
+        	wepKeyIndex = GetWepKeyIdFromUri( aURI );
+        	TBuf8<80> addLUID; // AP/<x>/NapDef/<x>/WLAN/<x>/WEPKey/WKIdnnn
+            addLUID.AppendNum( wepKeyIndex );
+            addLUID.AppendNumFixedWidth( luid, EDecimal, 3 );
+            DBG_ARGS8(_S8("WLanAdapter::Fetchleaf object, set mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID );
+            DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID );
+           iCallBack->SetMappingL(aURI, addLUID);
+                
+        }
+        status = CSmlDmAdapter::EOk;
+        switch( wepKeyIndex )
+            {
+        case 1:
+            aObject.InsertL( 0, iSettings->WepKey1 );
+            break;
+        case 2:
+            aObject.InsertL( 0, iSettings->WepKey2 );
+            break;
+        case 3:
+            aObject.InsertL( 0, iSettings->WepKey3 );
+            break;
+        case 4:
+            aObject.InsertL( 0, iSettings->WepKey4 );
+            break;
+        default:
+            status = CSmlDmAdapter::EError;
+            }
+        }
+    else if( lastUriSeg.Compare( KNSmlWLanWepKeyId ) == 0 )
+        {
+        TInt wepKeyIndex = GetWepKeyIdFromLuid( aLUID );
+        if(wepKeyIndex == KErrNotFound)
+        {
+        	wepKeyIndex = GetWepKeyIdFromUri( aURI );
+        	TBuf8<80> addLUID; // AP/<x>/NapDef/<x>/WLAN/<x>/WEPKey/WKIdnnn
+            addLUID.AppendNum( wepKeyIndex );
+            addLUID.AppendNumFixedWidth( luid, EDecimal, 3 );
+            DBG_ARGS8(_S8("WLanAdapter::Fetchleaf object, set mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID );
+            DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID );
+           iCallBack->SetMappingL(aURI, addLUID);
+        }
+        if( wepKeyIndex > 0 )
+            {
+            HBufC8* data = IntToDes8LC( wepKeyIndex );
+            aObject.InsertL( 0, data->Des() );
+            CleanupStack::PopAndDestroy( data ); //data
+            status = CSmlDmAdapter::EOk;
+            }
+        else
+            {
+            status = CSmlDmAdapter::EError;
+            }
+        }
+
+    else if (aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*")) != KErrNotFound)
+        {
+        TInt eapId = GetEAPIdFromUri(aURI);
+
+        // Check if the id contains encapsulating type as well
+        TInt encapsEapId = GetEncapsEAPIdFromUri( aURI );
+        if ( encapsEapId == KErrNotFound )
+        	{
+        	encapsEapId = EAPSettings::EEapNone;
+        	}
+        
+        ResetEAPStructL();
+                              
+        TInt err = iWlanSettings->GetEAPSettings( luid, eapId, encapsEapId, *iEAPSettings );
+        if (err != KErrNone || iEAPSettings == NULL)
+            {
+            status = CSmlDmAdapter::EError; 
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanEapType ) == 0 )
+            {
+            aObject.InsertL(0, *IntToDes8LC((TInt)iEAPSettings->iEAPType));
+            CleanupStack::PopAndDestroy(); // IntToDes8LC
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanUsername ) == 0 )
+            {
+            if (iEAPSettings->iUsernamePresent)
+                {
+                DesToBufferL(aObject, iEAPSettings->iUsername);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanPassword ) == 0 )
+            {
+            if (iEAPSettings->iPasswordPresent)
+                {
+                DesToBufferL(aObject, iEAPSettings->iPassword);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanRealm ) == 0 )
+            {
+            if (iEAPSettings->iRealmPresent)
+                {
+                DesToBufferL(aObject, iEAPSettings->iRealm);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanUsePseudonym ) == 0 )
+            {
+            if (iEAPSettings->iUsePseudonymsPresent && iEAPSettings->iUsePseudonyms)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanEncapsulation ) == 0 )
+            {
+            if ( encapsEapId == EAPSettings::EEapPeap )
+            	{
+            	aObject.InsertL( 0, KEAPPEAP);            	
+            	}
+            else if ( encapsEapId == EAPSettings::EEapTtls )
+            	{
+            	aObject.InsertL( 0, KEAPTTLS);
+            	}
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanVerifyCertRealm ) == 0 )
+            {
+            if (iEAPSettings->iVerifyServerRealmPresent && iEAPSettings->iVerifyServerRealm)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanRequireClientAuthentication ) == 0 )
+            {
+            if (iEAPSettings->iRequireClientAuthenticationPresent && iEAPSettings->iRequireClientAuthentication)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanSessionValidityTime ) == 0 )
+            {
+            if (iEAPSettings->iSessionValidityTimePresent)
+                {
+                aObject.InsertL(0, *IntToDes8LC((TInt)iEAPSettings->iSessionValidityTime));
+                CleanupStack::PopAndDestroy(); // IntToDes8LC
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanCipherSuite ) == 0 )
+            {
+            FillCipherSuiteBufferL(aObject);
+            status = CSmlDmAdapter::EOk; 
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanAllowPEAPv0 ) == 0 )
+            {
+            if (iEAPSettings->iPEAPVersionsPresent && iEAPSettings->iPEAPv0Allowed)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanAllowPEAPv1 ) == 0 )
+            {
+            if (iEAPSettings->iPEAPVersionsPresent && iEAPSettings->iPEAPv1Allowed)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanAllowPEAPv2 ) == 0 )
+            {
+            if (iEAPSettings->iPEAPVersionsPresent && iEAPSettings->iPEAPv2Allowed)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+            
+            
+            
+#ifdef FF_WLAN_EXTENSIONS 
+		else if (lastUriSeg.Compare(KNSmlWLanAuthProvMode) == 0)
+            {
+            if (iEAPSettings->iAuthProvModeAllowedPresent && iEAPSettings->iAuthProvModeAllowed)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+            
+                        
+      	else if (lastUriSeg.Compare(KNSmlWLanUnauthProvMode) == 0)
+                        {
+            if (iEAPSettings->iUnauthProvModeAllowedPresent && iEAPSettings->iUnauthProvModeAllowed)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+                                    
+     	else if (lastUriSeg.Compare(KNSmlWLanPACGroupRef) == 0)
+            {
+            if (iEAPSettings->iPACGroupReferencePresent)
+                {
+                DesToBufferL(aObject, iEAPSettings->iPACGroupReference);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+                        
+    	else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoPAC) == 0)
+            {
+            if (iEAPSettings->iWarnADHPNoPACPresent && iEAPSettings->iWarnADHPNoPAC)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+            
+            
+    	else if (lastUriSeg.Compare(KNSmlWLanWarnADHPNoMatchPAC) == 0)
+            {
+            if (iEAPSettings->iWarnADHPNoMatchingPACPresent && iEAPSettings->iWarnADHPNoMatchingPAC)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+            
+            
+            
+  		else if (lastUriSeg.Compare(KNSmlWLanWarnNotDefaultSrv) == 0)
+            {
+            if (iEAPSettings->iWarnNotDefaultServerPresent && iEAPSettings->iWarnNotDefaultServer)
+                {
+                aObject.InsertL(0, KTrue);
+                }
+            else
+                {
+                aObject.InsertL(0, KFalse);
+                }
+            status = CSmlDmAdapter::EOk;
+            }
+            
+#endif  
+                                
+            
+        else if (lastUriSeg.Compare( KNSmlWLanIssuerName ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+            
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+                {
+                if (iEAPSettings->iCertificates[certId-1].iIssuerNamePresent)
+                	{
+                	aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iIssuerName));
+                   	CleanupStack::PopAndDestroy(); // ConvertTo8LC
+                   	status = CSmlDmAdapter::EOk;
+                	}
+            	}
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanSubjectName ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+            
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+                {
+                if (iEAPSettings->iCertificates[certId-1].iSubjectNamePresent)
+                	{
+                    aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iSubjectName));
+                    CleanupStack::PopAndDestroy(); // ConvertTo8LC
+					status = CSmlDmAdapter::EOk;                  
+                	}                   
+                }
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanCertType ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+            
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+                {
+                aObject.InsertL(0, *IntToDes8LC(iEAPSettings->iCertificates[certId-1].iCertType));
+                CleanupStack::PopAndDestroy(); // IntToDes8LC
+                status = CSmlDmAdapter::EOk;
+                }                            
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanSerialNumber ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+            
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+                {
+                if (iEAPSettings->iCertificates[certId-1].iSerialNumberPresent)
+    	            {
+                    aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iSerialNumber));
+                    CleanupStack::PopAndDestroy(); // ConvertTo8LC
+	                status = CSmlDmAdapter::EOk;
+                    }
+                }
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanSubjectKeyId ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+            
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+            	{         	
+                if (iEAPSettings->iCertificates[certId-1].iSubjectKeyIDPresent)
+                    {
+                    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObject - Fetch subject key.");
+                    // check the lenght of the given subjectKeyId, if it is longer that 20, then we
+                    // update the status with error and will not go through the key
+                    if ((iEAPSettings->iCertificates[certId-1].iSubjectKeyID.Length()) > KKeyIdentifierLength)
+                    	{
+                    	status = CSmlDmAdapter::EError;        
+                    	}
+                    else 
+                    	{
+                    	_DBG_FILE("CNSmlWLanAdapter::FetchLeafObject - key is under max lenght");
+                    	TBuf8<KKeyIdentifierLength> binKey = iEAPSettings->iCertificates[certId-1].iSubjectKeyID;
+                    	TBuf8<2> idBuf;
+                    	TBuf8<KKeyIdentifierLength*2> key;
+                    	TUint8 byte;
+                    
+                    	// hexadecimal representation
+                    	_LIT8(KFormat, "%02x");
+                                             	
+                    	// looping the subject key through
+                    	for (TInt i = 0; i < binKey.Length(); i++)
+                    		{
+                    		_DBG_FILE("CNSmlWLanAdapter::FetchLeafObject - Loop the key through.");
+                    		// pick the next value from the buffer
+                    		byte = binKey[i];
+                    		// convert the value into hexadecimal format
+                    		idBuf.Format(KFormat, byte);		
+                    		// store the hexa value into the key variable
+                    		key.Append(idBuf);
+                    		}
+                    	// Copy the key to the aObject variable
+                    	aObject.InsertL(0, key);
+                    	status = CSmlDmAdapter::EOk;
+                    	}
+                    }
+            	}            
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanFingerprint ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+                {   
+                if (iEAPSettings->iCertificates[certId-1].iThumbprintPresent)
+                	{
+                    aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iThumbprint));
+                    CleanupStack::PopAndDestroy(); // ConvertTo8LC
+                    status = CSmlDmAdapter::EOk;
+                	}                 
+                }
+            }
+        else if (lastUriSeg.Compare( KNSmlWLanSerialNumber ) == 0 )
+            {
+            status = CSmlDmAdapter::ENotFound;            
+            
+            TInt certId = GetCertificateIdFromUri(aURI);
+            
+            if ( iEAPSettings->iCertificatesPresent
+            	&& iEAPSettings->iCertificates.Count() >= certId
+            	&& certId != KErrNotFound )
+                {   
+                if (iEAPSettings->iCertificates[certId-1].iSerialNumberPresent)
+                	{
+                    aObject.InsertL(0, ConvertTo8LC(iEAPSettings->iCertificates[certId-1].iSerialNumber));
+                    CleanupStack::PopAndDestroy(); // ConvertTo8LC
+                    status = CSmlDmAdapter::EOk;
+                	}
+               	}
+            }
+        }
+
+        
+    DBG_ARGS(_S16("CNSmlWLanAdapter::FetchLeafObjectL - Status <%D>"), status );
+    _DBG_FILE("CNSmlWLanAdapter::FetchLeafObjectL(): end");
+    return status;
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::ChildURIListL( const TDesC& aURI, 
+// const TDesC& aLUID, const CArrayFix<TNSmlDmMappingInfo>& aPreviousURISegmentList, 
+// const TInt aResultsRef, const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::ChildURIListL( const TDesC8& aURI, 
+                                      const TDesC8& aLUID, 
+                                      const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList, 
+                                      const TInt aResultsRef, 
+                                      const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): begin");
+    DBG_ARGS8(_S8("WLanAdapter::ChildURIListL - <%S> <%S>"), &aURI, &aLUID );
+    CBufBase* currentUriSegmentList = CBufFlat::NewL( 128 );
+    CleanupStack::PushL( currentUriSegmentList );
+
+    TInt uriSegs = NumOfUriSegs( aURI );
+    TInt luid = GetIdFromLuid( aLUID );
+
+    //AP/<x>/NAPDef/<x>/
+    if( aURI.Match( _L8("AP/*/NAPDef/*") ) != KErrNotFound && uriSegs==4 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->NAPDef - <%S> <%S>"), &aURI, &aLUID );
+        if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            currentUriSegmentList->InsertL( 0, KNSmlNAPDefWlanNode );
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+		    _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        else
+            {
+            currentUriSegmentList->InsertL( 0, KNSmlNAPDefWlanNode );
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLan );
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+		    _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        }
+
+    //AP/<x>/NAPDef/<x>/WLAN
+    else if (aURI.Match(_L8("AP/*/NAPDef/*/WLAN")) != KErrNotFound && uriSegs == 5 ) 
+        {
+        if( aPreviousURISegmentList.Count() > 0 )
+            {
+            HBufC8 *uriSeg = HBufC8::NewLC(KNSmlMaxURISegLen);
+            TPtr8 uriSegPtr = uriSeg->Des();
+            uriSegPtr = aPreviousURISegmentList.At(0).iURISeg;
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), uriSegPtr );
+            CleanupStack::PopAndDestroy( uriSeg ); //uriSeg
+            iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        	iCallBack->SetResultsL(aResultsRef,*currentUriSegmentList,KNullDesC8);
+		    _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        else
+            {
+            if( iWlanSettings->RecordExists( luid ) < 0)
+                {
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status: Not found");
+                }
+            else
+                {
+                _LIT8(Kprev,"WLId");
+                TBuf8<9> addNAME(Kprev); // WLId
+                addNAME.AppendNumFixedWidth(luid,EDecimal,3);
+
+                currentUriSegmentList->InsertL(currentUriSegmentList->Size(),addNAME);
+                currentUriSegmentList->InsertL(currentUriSegmentList->Size(),_L8("/"));
+
+                TBuf8<80> addURI; // AP/<x>/NapDef/<x>/WLAN/WLIdnnn , n=aLUID
+                addURI.Append(aURI);
+                addURI.Append(_L8("/WLId"));
+                addURI.AppendNumFixedWidth(luid,EDecimal,3);
+
+                TBuf8<16> addLUID;
+                _LIT8(KFormat,"%d");
+                addLUID.Format(KFormat,luid);
+        
+                // Also added to mapping
+                DBG_ARGS8(_S8("WLanAdapter::ChildURIListL - mapping uri: <%S> to luid: <%S>"), &addURI, &addLUID );
+                DBG_ARGS8(_S8("Parameters - <%S> <%S>"), &aURI, &aLUID );
+                iCallBack->SetMappingL(addURI,addLUID);
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::EOk);
+        		iCallBack->SetResultsL(aResultsRef,*currentUriSegmentList,KNullDesC8);
+		    	_DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+                }
+            }        
+        }
+
+    //AP/<x>/NAPDef/<x>/WLAN/<x>
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*") ) != KErrNotFound && uriSegs==6 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->NAPDef - <%S> <%S>"), &aURI, &aLUID );
+        if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+            }
+        else
+            {
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfLeafs );
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        }
+
+    
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/WEPKey
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey") ) != KErrNotFound && uriSegs==7 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->WEPKey - <%S> <%S> <%D> <%D>"), &aURI, &aLUID, aResultsRef, aStatusRef );
+
+        for( TInt i=0; i<4; i++ )
+            {
+            if( aPreviousURISegmentList.Count()>i )
+                {
+                HBufC8 *uriSeg = HBufC8::NewLC( KNSmlMaxURISegLen) ;
+                TPtr8 uriSegPtr = uriSeg->Des();
+                uriSegPtr = aPreviousURISegmentList.At(i).iURISeg;
+                
+                currentUriSegmentList->InsertL( currentUriSegmentList->Size(),uriSegPtr );
+                currentUriSegmentList->InsertL( currentUriSegmentList->Size(),_L8( "/" ) );
+                CleanupStack::PopAndDestroy(); //uriSeg
+                }
+            else
+                {
+                TBuf8<25> addNAME;
+                addNAME.Append( _L8("WKId") );
+                addNAME.AppendNum( i+1 );
+                addNAME.Append( _L8("/") );
+
+                currentUriSegmentList->InsertL( currentUriSegmentList->Size(),addNAME );
+                }
+            }
+
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );           
+        _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+        }
+
+    //AP/<x>/NAPDef/<x>/WEPKey/<x>
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) != KErrNotFound && uriSegs==8 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->WEPKey/* - <%S> <%D>"), &aURI, luid );
+        if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            //wlan settings not found for aLUID
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+            }
+        else
+            {
+            TInt wepKeyId = GetWepKeyIdFromLuid( aLUID );
+            if( wepKeyId == KErrNotFound )
+                {
+                wepKeyId = GetWepKeyIdFromUri( aURI );
+
+                TBuf8<80> addLUID; // AP/<x>/NapDef/<x>/WLAN/<x>/WEPKey/WKIdnnn
+                addLUID.AppendNum( wepKeyId );
+                addLUID.AppendNumFixedWidth( luid, EDecimal, 3 );
+
+                DBG_ARGS8(_S8("WLanAdapter::ChildURIListL - mapping uri: <%S> to luid: <%S>"), &aURI, &addLUID );
+                DBG_ARGS8(_S8("Parametrit - <%S> <%S>"), &aURI, &addLUID );
+                iCallBack->SetMappingL(aURI, addLUID);
+                }
+
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfWepKeyLeafs );
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        }
+
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/SecondarySSID/
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID") ) != KErrNotFound && uriSegs==7 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP - <%S> <%S> <%D> <%D>"), &aURI, &aLUID, aResultsRef, aStatusRef );
+        if( aPreviousURISegmentList.Count() > 0 )
+            {
+            HBufC8 *uriSeg = HBufC8::NewLC(KNSmlMaxURISegLen);
+            TPtr8 uriSegPtr = uriSeg->Des();
+            uriSegPtr = aPreviousURISegmentList.At(0).iURISeg;
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), uriSegPtr );
+            CleanupStack::PopAndDestroy( uriSeg ); //uriSeg
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        	iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );           
+        	_DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        else
+            {
+            if( iWlanSettings->RecordExists( luid ) < 0)
+                {
+                iCallBack->SetStatusL(aStatusRef,CSmlDmAdapter::ENotFound);
+                _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status: Not found");
+                }
+            else
+                {
+                RArray<TSecondarySSID> secondarySSIDs;
+                CleanupClosePushL( secondarySSIDs );
+                iWlanSettings->GetSecondarySSIDListL(luid, secondarySSIDs);
+                TInt count = secondarySSIDs.Count();
+                _LIT8(KPrefixSSID,"SecSSID");
+                TBuf8<5> addNAME; // number
+                for (TInt i=0;i<count;i++)
+                    {
+                    if (i != 0) // Don't do it in first iteration, but with all the following
+                        {
+                        currentUriSegmentList->InsertL(currentUriSegmentList->Size(),_L8("/"));
+                        }
+                    currentUriSegmentList->InsertL(currentUriSegmentList->Size(),KPrefixSSID);
+                    addNAME.Zero();
+                    addNAME.AppendNumFixedWidth(secondarySSIDs[i].Id ,EDecimal,3);
+                    currentUriSegmentList->InsertL(currentUriSegmentList->Size(),addNAME);
+                    }
+                CleanupStack::PopAndDestroy(&secondarySSIDs);
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        		iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );           
+        		_DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+                }
+            }       
+        }
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/SecondarySSID/*
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*") ) != KErrNotFound && uriSegs==8 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->SecondarySSID/* - <%S> <%D>"), &aURI, luid );
+        if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            //wlan settings not found for aLUID
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+            }
+        else
+            {
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfSecondaryLeafs );
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        }
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/EAP
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP") ) != KErrNotFound && uriSegs==7 )
+        {        
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP - <%S> <%S> <%D> <%D>"), &aURI, &aLUID, aResultsRef, aStatusRef );
+        
+        // Need to get the service id from parent node
+		luid = GetServiceIdFromUriL ( aURI );
+		
+		if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            //wlan settings not found for aLUID
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+            }
+        else
+        	{
+	        iWlanSettings->InstalledEAPsL(*currentUriSegmentList);
+
+    	    iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+	        iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );           
+	        _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");        	
+        	}
+        }
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/EAP/<x>
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) != KErrNotFound && uriSegs==8 )
+        {
+		// Need to get the service id from parent node
+		luid = GetServiceIdFromUriL ( aURI );
+		
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP/* - <%S> <%D>"), &aURI, luid );
+        if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            //wlan settings not found for aLUID
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+            }
+        else
+            {
+            currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfEAPLeafs );
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+            }
+        }
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/EAP/<x>/Certificate
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate") ) != KErrNotFound && uriSegs== 9 )
+        {
+		luid = GetServiceIdFromUriL ( aURI );
+		      
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->Certificate - <%S> <%D>"), &aURI, luid );
+        if( iWlanSettings->RecordExists( luid ) < 0 )
+            {
+            //wlan settings not found for aLUID
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+            }
+        else
+            {
+            TInt eapId = GetEAPIdFromUri( aURI );
+            
+            // Check if the id contains encapsulating type as well
+            TInt encapsEapId = GetEncapsEAPIdFromUri( aURI );
+            if ( encapsEapId == KErrNotFound )
+            	{
+            	encapsEapId = EAPSettings::EEapNone;
+            	}
+            
+            ResetEAPStructL();
+            TInt err = iWlanSettings->GetEAPSettings(luid, eapId, encapsEapId, *iEAPSettings);
+            if (err != KErrNone || !iEAPSettings->iCertificatesPresent)
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+                _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");
+                }
+            else
+                {
+                TInt certCount = iEAPSettings->iCertificates.Count();
+                HBufC8* pBuf = HBufC8::NewLC(KNSmlMaxURISegLen);
+                TPtr8 ptrCerts = pBuf->Des();
+                for (TInt i=0; i<certCount; i++)
+                    {
+                    ptrCerts.Append(_L8("CertId"));
+                    ptrCerts.AppendNumFixedWidth( i+1, EDecimal, 3);
+                    ptrCerts.Append( _L8("/") );
+                    }
+                
+                currentUriSegmentList->InsertL( currentUriSegmentList->Size(), ptrCerts );
+                CleanupStack::PopAndDestroy(pBuf); // pBuf
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+            	iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+            	_DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");
+                }
+            }
+        }
+    //AP/<x>/NAPDef/<x>/WLAN/<x>/EAP/<x>/Certificate/<x>
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) != KErrNotFound && uriSegs==10 )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ChildURIListL->EAP/* - <%S> <%D>"), &aURI, luid );
+        TInt eapId = GetEAPIdFromUri(aURI);
+        // Check if the id contains encapsulating type as well
+        TInt encapsEapId = GetEncapsEAPIdFromUri( aURI );
+        if ( encapsEapId == KErrNotFound )
+        	{
+        	encapsEapId = EAPSettings::EEapNone;
+        	}
+
+        ResetEAPStructL();
+        TInt err = iWlanSettings->GetEAPSettings(luid, eapId, encapsEapId, *iEAPSettings);
+        if (err != KErrNone || !iEAPSettings->iCertificatesPresent)
+            {
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): ENotFound end");            
+            }
+        else
+          	{
+	        currentUriSegmentList->InsertL( currentUriSegmentList->Size(), KNSmlWLanListOfCertificateLeafs );
+	        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+	        iCallBack->SetResultsL( aResultsRef, *currentUriSegmentList, KNullDesC8 );
+	        _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): status ok");  	
+          	}                      
+        }
+
+
+    CleanupStack::PopAndDestroy( currentUriSegmentList );
+
+    _DBG_FILE("CNSmlWLanAdapter::ChildURIListL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// void CNSmlWLanAdapter::AddNodeObjectL( const TDesC& aURI, const TDesC& aParentLUID, 
+// const TInt aStatusRef )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::AddNodeObjectL( const TDesC8& aURI, 
+                                       const TDesC8& aParentLUID, 
+                                       const TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): begin");
+    DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - uri: <%S> to aParentLuid: <%S>"), 
+                &aURI, &aParentLUID );
+
+    TInt uriSegs = NumOfUriSegs( aURI );
+    if( (aURI.Match (_L8( "AP/*/NAPDef/*/WLAN") ) != KErrNotFound && uriSegs == 5 )
+    	|| (aURI.Match (_L8( "AP/*/NAPDef/*/WLAN/*/EAP") ) != KErrNotFound && uriSegs == 7 )
+    	|| (aURI.Match (_L8( "AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate") ) != KErrNotFound && uriSegs == 9 ) )
+        {
+        iCallBack->SetMappingL( aURI, aParentLUID );
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        return;
+        }
+
+    //Add new wlan settings
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*") ) != 
+            KErrNotFound && NumOfUriSegs( aURI ) == 6 )
+        {
+        iSettings->Id = 0;
+        iSettings->ServiceID = DesToInt( aParentLUID ); 
+        iSettings->ConnectionMode = 0;
+      	iSettings->SSID = TPtrC(KNSmlWLanDefaultSSID);
+        iSettings->UsedSSID = _L("");
+        iSettings->ScanSSID = 0;
+        iSettings->WepKey1 = _L8("");
+        iSettings->WepKey2 = _L8("");
+        iSettings->WepKey3 = _L8("");
+        iSettings->WepKey4 = _L8("");
+        iSettings->WepIndex = 0;
+        iSettings->SecurityMode = EAllowUnsecure;
+        iSettings->WPAPreSharedKey = _L8("");
+        iSettings->UseWPAPSK = 0;
+        iSettings->EapList = _L("");
+        iSettings->AuthMode = 0;                
+
+        TInt err = iWlanSettings->WriteWlanSettings( *iSettings );
+        if( err != KErrNone )
+            {
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+            return;
+            }
+
+        DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &aParentLUID );
+        iCallBack->SetMappingL( aURI, aParentLUID );
+        iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey") ) != KErrNotFound && uriSegs == 7 )
+        {
+        if( iWlanSettings->RecordExists( DesToInt( aParentLUID ) ) )
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        else
+            iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        return;
+        }
+
+    //Add wep key for existing record
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) != KErrNotFound && uriSegs == 8 )
+        {
+        for( TInt i=0; i<iBuffer->Count(); i++ )
+            {
+            if( iBuffer->At(i).iUri->Match( aURI ) != KErrNotFound )
+                {
+                iCallBack->SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+
+                _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): EAlreadyExists");
+                return;
+                }
+            }
+        DBG_ARGS8(_S8("WLanAdapter::Bufferiin - uri: <%S> to aParentLuid: <%S>"), &aURI, &aParentLUID );
+
+        TNSmlWepKeyBufferElement newNode;
+        newNode.iUri = aURI.AllocLC();
+        newNode.iData = 0;
+        newNode.iWepKeyId = 0;
+        //newNode.iUseWPAPSK = 0;
+        newNode.iIdStatusRef = 0;
+        newNode.iDataStatusRef = 0;
+        newNode.iLengthStatusRef = 0;
+        newNode.iNodeStatusRef = aStatusRef;
+        newNode.iExecuted = EFalse;
+        newNode.iDataSet = EFalse;
+        newNode.iLuid = DesToInt( aParentLUID );
+        iBuffer->AppendL( newNode );
+
+        CleanupStack::Pop( );   //newNode.iUri
+
+        _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): end");
+        return;
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*") ) != 
+            KErrNotFound && NumOfUriSegs( aURI ) == 8 )
+        {
+        /*
+        TSecondarySSID ssid;
+        ssid.ScannedId = KNullDesC;
+        ssid.UsedId = KNullDesC;
+        TInt luid = GetIdFromLuid( aParentLUID );
+        TInt retval = iWlanSettings->WriteSecondarySSIDL(luid, ssid, ETrue);*/
+        
+        TNSmlSecondarySSIDBufferElement *newSecNode =  new (ELeave) TNSmlSecondarySSIDBufferElement;;
+        newSecNode->iUri = aURI.AllocLC();
+        newSecNode->ScannedId = KNullDesC;
+        newSecNode->UsedId = KNullDesC;
+        newSecNode->iExecuted = EFalse;
+        newSecNode->wlanLuid = GetIdFromLuid( aParentLUID );
+        iSecondaryBuffer.AppendL( newSecNode );
+        CleanupStack::Pop( );   //newNode.iUri
+        return;
+        }
+
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) != 
+            KErrNotFound && NumOfUriSegs( aURI ) == 8 )
+        {
+        TInt eapTypeId = GetEAPIdFromUri(aURI);
+		TInt encapsEapId = GetEncapsEAPIdFromUri( aURI );
+        if ( encapsEapId == KErrNotFound )
+        	{
+        	encapsEapId = EAPSettings::EEapNone;
+        	}
+        
+                    
+        TInt WLANServiceId = GetServiceIdFromUriL ( aURI );
+        
+        if ( WLANServiceId == KErrNotFound )
+        	{
+        	_DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): Could not find WLAN service ID from URI.");
+        	User::Leave( KErrNotFound );
+        	}
+        
+        TInt i(0);
+        // Check if the buffer for this EAP already exists
+        for ( i = 0 ; i < iEAPBuffer.Count() ; i++ )
+            {
+            if ( eapTypeId == iEAPBuffer[i]->iEAPSettings->iEAPType
+                && encapsEapId == iEAPBuffer[i]->iEncapsulatingEAPId )
+                {
+                // The correct buffer was found.                
+                _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): Found existing buffer.");
+                break;                              
+                }
+            }
+        // buffer did not exist. Update the existing buffer
+        if ( i == iEAPBuffer.Count() )
+            {   
+            TNSmlEAPBufferElement* buffer = new (ELeave) TNSmlEAPBufferElement;
+            CleanupStack::PushL( buffer );
+       	
+            buffer->iEAPSettings = new (ELeave) EAPSettings;
+            CleanupStack::PushL( buffer->iEAPSettings );
+	                
+            buffer->iEAPSettings->iEAPType = static_cast<EAPSettings::TEapType> (eapTypeId);        
+            buffer->iStatusRefArray.AppendL(aStatusRef);
+            buffer->iWLANServiceId = WLANServiceId;
+            buffer->iEncapsulatingEAPId = static_cast<EAPSettings::TEapType>(encapsEapId);
+            iEAPBuffer.AppendL(buffer);       
+
+            CleanupStack::Pop( buffer->iEAPSettings );
+            CleanupStack::Pop( buffer );
+            }
+        
+        // Set the mapping luid to be the index to the iEAPBuffer
+        TBuf8<2> luid;
+        luid.Num( iEAPBuffer.Count() - 1 );
+        DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &luid );
+        iCallBack->SetMappingL( aURI, luid);
+            
+        }
+    else if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) != 
+            KErrNotFound && NumOfUriSegs( aURI ) == 10 )
+        {
+		TPtrC8 ptr = NSmlDmURI::ParentURI( aURI );
+		TPtrC8 ptr2 = NSmlDmURI::ParentURI( ptr );
+							
+       	HBufC8* eapLuidBuf = iCallBack->GetLuidAllocL( ptr2 );
+		
+		TInt index = GetIdFromLuid( *eapLuidBuf );
+        
+        delete eapLuidBuf;
+        
+  		CertificateEntry entry;
+		iEAPBuffer[index]->iEAPSettings->iCertificates.AppendL(entry);
+		iEAPBuffer[index]->iEAPSettings->iCertificatesPresent = ETrue;
+        iEAPBuffer[index]->iStatusRefArray.AppendL(aStatusRef);
+        
+        TBuf8<2> luid;
+		luid.Num( iEAPBuffer[index]->iEAPSettings->iCertificates.Count() - 1 );
+		
+        DBG_ARGS8(_S8("WLanAdapter::AddNodeObjectL - mapping uri: <%S> to luid: <%S>"), &aURI, &luid );
+        iCallBack->SetMappingL( aURI, luid);
+        }
+    _DBG_FILE("CNSmlWLanAdapter::AddNodeObjectL(): end");
+    }
+    
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::ExecuteCommandL
+// not supported
+//------------------------------------------------------------------------------
+void CNSmlWLanAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                              const TDesC8& /*aLUID*/,
+                              const TDesC8& /*aArgument*/, 
+                              const TDesC8& /*aType*/,
+                              TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): begin");
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::ExecuteCommandL ( .. RWriteStream ..)
+// not supported
+//------------------------------------------------------------------------------
+void CNSmlWLanAdapter::ExecuteCommandL( const TDesC8& /*aURI*/, 
+                              const TDesC8& /*aLUID*/,
+                              RWriteStream*& /*aStream*/, 
+                              const TDesC8& /*aType*/,
+                              TInt aStatusref )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): begin");
+    iCallBack->SetStatusL(aStatusref, CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlWLanAdapter::ExecuteCommandL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::CopyCommandL
+// not supported
+//------------------------------------------------------------------------------
+void CNSmlWLanAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/,
+                                     const TDesC8& /*aTargetLUID*/,
+                                     const TDesC8& /* aSourceURI*/,
+                                     const TDesC8& /*aSourceLUID*/, 
+                                     const TDesC8& /*aType*/,
+                                     TInt aStatusRef )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::CopyCommandL(): begin");
+    iCallBack->SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    _DBG_FILE("CNSmlWLanAdapter::CopyCommandL(): end");
+    }
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::StartAtomicL
+// not supported
+//------------------------------------------------------------------------------
+void CNSmlWLanAdapter::StartAtomicL()
+    {
+    _DBG_FILE("CNSmlWLanAdapter::StartAtomicL(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::StartAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::CommitAtomicL
+// not supported
+//------------------------------------------------------------------------------
+void CNSmlWLanAdapter::CommitAtomicL()
+    {
+    _DBG_FILE("CNSmlWLanAdapter::CommitAtomicL(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::CommitAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::RollbackAtomicL
+// returns EError
+//------------------------------------------------------------------------------
+void CNSmlWLanAdapter::RollbackAtomicL()
+    {
+    _DBG_FILE("CNSmlWLanAdapter::RollbackAtomicL(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::RollbackAtomicL(): end");
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::StreamingSupport
+// returns EFalse
+//------------------------------------------------------------------------------
+
+TBool CNSmlWLanAdapter::StreamingSupport( TInt& /*aItemSize*/ )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::StreamingSupport(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::StreamingSupport(): end");
+    return EFalse;
+    }
+
+//------------------------------------------------------------------------------
+// CNSmlWLanAdapter::StreamCommittedL
+// not used in this adapter
+//------------------------------------------------------------------------------
+
+void CNSmlWLanAdapter::StreamCommittedL()
+    {
+    _DBG_FILE("CNSmlWLanAdapter::StreamCommittedL(): begin");
+    _DBG_FILE("CNSmlWLanAdapter::StreamCommittedL(): end");
+    }
+
+//-----------------------------------------------------------------------------
+// CNSmlWLanAdapter* CNSmlWLanAdapter::CompleteOutstandingCmdsL( )
+//-----------------------------------------------------------------------------
+void CNSmlWLanAdapter::CompleteOutstandingCmdsL( )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::CompleteOutStandingCmdsL(): begin");
+
+    ExecuteBufferL( ETrue );
+
+    _DBG_FILE("CNSmlWLanAdapter::CompleteOutStandingCmdsL(): end");
+    }
+
+// ------------------------------------------------------------------------------------------------
+// TPtrC8 CNSmlWLanAdapter::GetLastUriSeg(const TDesC8& aURI)
+// Returns only the last uri segemnt
+// ------------------------------------------------------------------------------------------------
+TPtrC8 CNSmlWLanAdapter::GetLastUriSeg( const TDesC8& aURI )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::GetLastUriSeg(): begin");
+
+    TInt i;
+    for( i = aURI.Length()-1; i >= 0; i-- )
+        {
+        if( aURI[i] == '/' )
+            {
+            break;
+            }
+        }
+
+    if( i==0 )
+        {
+        _DBG_FILE("CNSmlWLanAdapter::GetLastUriSeg(): end");
+        return aURI;
+        }
+    else
+        {
+        _DBG_FILE("CNSmlWLanAdapter::GetLastUriSeg(): end");
+        return aURI.Mid( i+1 );
+        }
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// TPtrC16 CNSmlWLanAdapter::RemoveLastURISeg(const TDesC8& aURI)
+// returns parent uri, i.e. removes last uri segment
+// ------------------------------------------------------------------------------------------------
+TPtrC8 CNSmlWLanAdapter::RemoveLastUriSeg(const TDesC8& aURI)
+    {
+    _DBG_FILE("CNSmlWLanAdapter::RemoveLastUriSeg(): begin");
+
+    TInt i;
+    for( i = aURI.Length()-1; i >= 0; i-- )
+        {
+        if(aURI[i] == '/')
+            {
+            break;
+            }
+        }
+
+    _DBG_FILE("CNSmlWLanAdapter::RemoveLastUriSeg(): end");
+    return aURI.Left(i);
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::DesToInt( const TDesC8& aLuid )
+// Returns aLuid as integer value
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::DesToInt( const TDesC8& aLuid )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::DesToInt(): begin");
+
+    TLex8 lex(aLuid);
+    TInt value = 0;
+    lex.Val( value );
+
+    DBG_ARGS8(_S8("WLanAdapter::DesToInt() - Des: <%S> Int: <%D>"), &aLuid, value );
+    _DBG_FILE("CNSmlWLanAdapter::DesToInt(): end");
+    return value;
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// HBufC* CNSmlWLanAdapter::IntToDesLC(const TInt aLuid)
+// ------------------------------------------------------------------------------------------------
+HBufC* CNSmlWLanAdapter::IntToDesLC(const TInt aLuid)
+    {
+    _DBG_FILE("CNSmlWLanAdapter::IntToDesLC(): begin");
+
+    HBufC* buf = HBufC::NewLC(10);
+    TPtr ptrBuf = buf->Des();
+    ptrBuf.Num(aLuid);
+
+    _DBG_FILE("CNSmlWLanAdapter::IntToDesLC(): end");
+    return buf;
+    }
+
+// ------------------------------------------------------------------------------------------------
+// HBufC8* CNSmlWLanAdapter::IntToDes8LC(const TInt aLuid)
+// ------------------------------------------------------------------------------------------------
+HBufC8* CNSmlWLanAdapter::IntToDes8LC(const TInt aLuid)
+    {
+    _DBG_FILE("CNSmlWLanAdapter::IntToDes8LC(): begin");
+
+    HBufC8* buf = HBufC8::NewLC(10);
+    TPtr8 ptrBuf = buf->Des();
+    ptrBuf.Num(aLuid);
+    
+    _DBG_FILE("CNSmlWLanAdapter::IntToDes8LC(): end");
+    return buf;
+    }
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::NumOfUriSegs( const TDesC8& aUri )
+// Return count of URI segments of aUri
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::NumOfUriSegs( const TDesC8& aUri )
+    {
+    _DBG_FILE("CNSmlWLanAdapter::NumOfUriSegs(): begin");
+
+    TInt count = 1;
+    for( TInt i=0; i<aUri.Length(); i++ )
+        {
+        if( aUri[i] == '/' )
+            count ++;
+        }
+
+    _DBG_FILE("CNSmlWLanAdapter::NumOfUriSegs(): end");
+    return count;
+    }
+
+
+// -------------------------------------------------------------------------------------
+// CNSmlWLanAdapter::FillNodeInfoL()
+// Fills the node info in ddf structure
+// -------------------------------------------------------------------------------------
+void CNSmlWLanAdapter::FillNodeInfoL( MSmlDmDDFObject& aNode,
+                                          TSmlDmAccessTypes aAccTypes,
+                                          MSmlDmDDFObject::TOccurence aOccurrence, 
+                                          MSmlDmDDFObject::TScope aScope, 
+                                          MSmlDmDDFObject::TDFFormat aFormat,
+                                          const TDesC8& aDescription )
+                                          
+    {
+    aNode.SetAccessTypesL(aAccTypes);
+    aNode.SetOccurenceL(aOccurrence);
+    aNode.SetScopeL(aScope);
+    aNode.SetDFFormatL(aFormat);
+    if(aFormat!=MSmlDmDDFObject::ENode)
+        {
+        aNode.AddDFTypeMimeTypeL(KNSmlMimeType);
+        }
+    aNode.SetDescriptionL(aDescription);
+    }
+
+
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetEAPIdFromUri( const TDesC8& aUri )
+// Return WLan ID number from URI
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetEAPIdFromUri( const TDesC8& aUri )
+    {
+    DBG_ARGS8(_S8("WLanAdapter::GetEAPIdFromUri - <%S>"), &aUri );
+
+    if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*") ) == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    
+    TInt begin = aUri.Find(_L8("/EAPId")) + 6;
+    if ( begin == KErrNotFound )
+    	{
+    	return KErrNotFound;
+    	}
+
+    TInt eapId = DesToInt( aUri.Mid( begin, 3 ) );    
+    
+    return eapId;
+    }
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetEncapsEAPIdFromUri( const TDesC8& aUri )
+// Return WLan ID number from URI
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetEncapsEAPIdFromUri( const TDesC8& aUri )
+    {
+    DBG_ARGS8(_S8("WLanAdapter::GetEncapsEAPIdFromUri - <%S>"), &aUri );
+
+    if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/EAPId*-*") ) == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    
+    TInt begin = aUri.Find(_L8("/EAPId")) + 9;
+    if ( aUri[begin] != '-' )
+    	{
+    	return KErrNotFound;
+    	}
+    begin++;
+    TInt end = -1;
+    TInt count;
+
+    for( count=0; count+begin<aUri.Length(); count++ )
+        {
+        if( aUri[begin+count]=='/' )
+            {
+            end = begin+count;
+            break;
+            }
+        else if( aUri.Length() == begin+count+1 )
+            {
+            count++;
+            end = begin+count;
+            break;
+            }
+        }
+
+    if( end > 0 )
+        {
+        TInt eapId = DesToInt( aUri.Mid( begin, count ) );
+        return eapId;
+        }
+    return KErrNotFound;
+    }
+    
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetEAPIdFromUriL( const TDesC8& aUri )
+// Return WLan ID number from URI
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetServiceIdFromUriL( const TDesC8& aURI)
+    {
+    DBG_ARGS8(_S8("WLanAdapter::GetServiceIdFromUriL - <%S>"), &aURI );
+
+    if( aURI.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP*") ) == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    
+    TInt end = aURI.Find(_L8("/EAP")) + 4;
+    
+    if( end > 0 )
+        {        
+        
+       	HBufC8* luidBuf = iCallBack->GetLuidAllocL( aURI.Left( end ) );
+		
+		TInt serviceId = GetIdFromLuid( *luidBuf );
+        
+	    delete luidBuf;		
+          
+	    return serviceId;        
+        }
+ 	return KErrNotFound;        
+ }
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetSecSSIDFromUriL( const TDesC8& aUri )
+// Return WLan ID number from URI
+// ------------------------------------------------------------------------------------------------
+TUint32 CNSmlWLanAdapter::GetSecSSIDFromUriL( const TDesC8& aUri )
+    {
+    DBG_ARGS8(_S8("WLanAdapter::GetSecSSIDFromUriL - <%S>"), &aUri );
+
+    if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/SecondarySSID/*") ) == KErrNotFound )
+        {
+        User::Leave(KErrNotFound);
+        }
+    _LIT8(KSSIDString, "/SecondarySSID/SecSSID");
+    TInt begin = aUri.Find(KSSIDString) + KSSIDString().Length();
+    TInt end = -1;
+    TInt count;
+
+    for( count=0; count+begin<aUri.Length(); count++ )
+        {
+        if( aUri[begin+count]=='/' )
+            {
+            end = begin+count;
+            break;
+            }
+        else if( aUri.Length() == begin+count+1 )
+            {
+            count++;
+            end = begin+count;
+            break;
+            }
+        }
+
+    if( end > 0 )
+        {
+        TLex8 lex(aUri.Mid( begin, count ));
+        TUint32 value = 0;
+        lex.Val( value, EDecimal );
+        return value;
+        }
+    else
+        {
+        User::Leave(KErrNotFound);
+        }
+    return 0;
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetEAPIdFromUri( const TDesC8& aUri )
+// Return WLan ID number from URI
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetCertificateIdFromUri( const TDesC8& aUri )
+    {
+    DBG_ARGS8(_S8("WLanAdapter::GetCertificateIdFromUri - <%S>"), &aUri );
+
+    if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/EAP/*/Certificate/*") ) == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    _LIT8(KCertString, "/Certificate/CertId");
+    
+    TInt begin = aUri.Find(KCertString);
+    if ( begin == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    
+    begin += KCertString().Length();
+    
+    TInt end = -1;
+    TInt count;
+
+    for( count=0; count+begin<aUri.Length(); count++ )
+        {
+        if( aUri[begin+count]=='/' )
+            {
+            end = begin+count;
+            break;
+            }
+        else if( aUri.Length() == begin+count+1 )
+            {
+            count++;
+            end = begin+count;
+            break;
+            }
+        }
+
+    if( end > 0 )
+        {
+        TInt certId = DesToInt( aUri.Mid( begin, count ) );
+        return certId;
+        }
+    return KErrNotFound;
+    }
+
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetWepKeyIdFromUri( const TDesC8& aUri )
+// Returns WepKey ID number from URI
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetWepKeyIdFromUri( const TDesC8& aUri )
+    {
+    if( aUri.Match( _L8("AP/*/NAPDef/*/WLAN/*/WEPKey/*") ) == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    
+    TInt begin = aUri.Find(_L8("WEPKey/WKId")) + 11;
+    TInt end = -1;
+    TInt count;
+
+    for( count=0; count<aUri.Length()-11; count++ )
+        {
+        if( aUri[begin+count]=='/' )
+            {
+            end = begin+count;
+            break;
+            }
+        
+        else if( aUri.Length() == begin+count+1 )
+            {
+            count ++;
+            end = begin+count;
+            break;
+            }
+        }
+
+    if( end > 0 )
+        {
+        TInt wlanId = DesToInt( aUri.Mid( begin, count ) );
+        return wlanId;
+        }
+    return KErrNotFound;
+    }
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetWepKeyIdFromLuid( const TDesC8& aLuid )
+// Return id number of wepkey
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetWepKeyIdFromLuid( const TDesC8& aLuid )
+    {
+    TLex8 iLex( aLuid );
+
+    TInt luid;
+    if (iLex.Val( luid ) == KErrNone)
+        {
+        if( luid > 1000 )
+            {
+            return luid / 1000;
+            }
+        else
+            {
+            return KErrNotFound;
+            }
+        }
+    else
+        {
+        return KErrNotFound;
+        }
+    }
+
+// ------------------------------------------------------------------------------------------------
+// TInt CNSmlWLanAdapter::GetIdFromLuid( const TDesC& aLuid )
+// Return luid of wlan node
+// ------------------------------------------------------------------------------------------------
+TInt CNSmlWLanAdapter::GetIdFromLuid( const TDesC8& aLuid )
+    {
+    TLex8 iLex( aLuid );
+
+    TInt luid;
+    if( iLex.Val(luid) == KErrNone )
+        {
+        if( luid < 1000 )
+            {
+            return luid;
+            }
+        else
+            {
+            TInt tmp = luid / 1000 * 1000; //First number of luid > 1000
+            return luid - tmp;
+            }
+        }
+    else
+        {
+        return KErrNotFound;
+        }
+    }
+
+// ------------------------------------------------------------------------------------------------
+// void CNSmlWLanAdapter::ExecuteBufferL( TBool aFinal )
+// Executes buffered commands from iBuffer
+// ------------------------------------------------------------------------------------------------
+void CNSmlWLanAdapter::ExecuteBufferL( TBool aFinal )
+    {
+    for( TInt index=0; index<iBuffer->Count(); index++ )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ExecuteBuffer(): Buf count: <%D> index: <%D>"), iBuffer->Count(), index );
+
+        if( iBuffer->At(index).iExecuted )
+            {
+            continue;
+            }
+        TInt err = 0;
+
+        TInt luid = iBuffer->At(index).iLuid;
+        TInt wepKeyId = iBuffer->At(index).iWepKeyId;
+        if( ! wepKeyId && ! aFinal )
+            {
+            continue;
+            }
+
+        if( wepKeyId > 4 ||
+            ! wepKeyId && aFinal )
+            {
+            if( iBuffer->At(index).iDataStatusRef )
+                iCallBack->SetStatusL( iBuffer->At(index).iDataStatusRef, CSmlDmAdapter::EError );
+            if( iBuffer->At(index).iNodeStatusRef )
+                iCallBack->SetStatusL( iBuffer->At(index).iNodeStatusRef, CSmlDmAdapter::EError );
+            if( iBuffer->At(index).iLengthStatusRef )
+                iCallBack->SetStatusL( iBuffer->At(index).iLengthStatusRef, CSmlDmAdapter::EError );
+
+            iBuffer->At(index).iIdStatusRef = 0;
+            iBuffer->At(index).iNodeStatusRef = 0;
+            iBuffer->At(index).iDataStatusRef = 0;
+            iBuffer->At(index).iLengthStatusRef = 0;
+            iBuffer->At(index).iExecuted = ETrue;
+
+            continue;
+            }
+        
+        if( iBuffer->At(index).iDataSet &&
+            iBuffer->At(index).iWepKeyId > 0 )
+            {
+            iWlanSettings->GetWlanSettings( luid, *iSettings );
+
+            switch( wepKeyId )
+                {
+            case 1:
+                iSettings->WepKey1 = iBuffer->At(index).iData->Des();
+                break;
+            case 2:
+                iSettings->WepKey2 = iBuffer->At(index).iData->Des();
+                break;
+            case 3:
+                iSettings->WepKey3 = iBuffer->At(index).iData->Des();
+                break;
+            case 4:
+                iSettings->WepKey4 = iBuffer->At(index).iData->Des();
+                break;
+            default:
+                continue;
+                }
+
+            err = iWlanSettings->WriteWlanSettings( *iSettings );
+            if( err == KErrNone )
+                {
+                iCallBack->SetStatusL( iBuffer->At(index).iDataStatusRef, CSmlDmAdapter::EOk );
+                }
+            else
+                {
+                iCallBack->SetStatusL( iBuffer->At(index).iDataStatusRef, CSmlDmAdapter::EError );
+                }
+
+            iBuffer->At(index).iDataStatusRef = 0;
+            }
+
+        TBuf8<5> addLUID;
+        addLUID.AppendNum( wepKeyId );
+        addLUID.AppendNumFixedWidth( luid, EDecimal, 3 );
+        
+        iCallBack->SetMappingL( iBuffer->At( index).iUri->Des(), addLUID );
+        if( iBuffer->At(index).iIdStatusRef )
+            iCallBack->SetStatusL( iBuffer->At(index).iIdStatusRef, CSmlDmAdapter::EOk );
+        if( iBuffer->At(index).iNodeStatusRef )
+            iCallBack->SetStatusL( iBuffer->At(index).iNodeStatusRef, CSmlDmAdapter::EOk );
+        if( iBuffer->At(index).iLengthStatusRef )
+            iCallBack->SetStatusL( iBuffer->At(index).iLengthStatusRef, CSmlDmAdapter::EOk );
+
+        iBuffer->At(index).iIdStatusRef = 0;
+        iBuffer->At(index).iNodeStatusRef = 0;
+        iBuffer->At(index).iLengthStatusRef = 0;
+        iBuffer->At(index).iExecuted = ETrue;
+        }
+
+    //Clean executed command from buffer
+    for( TInt i=0; i<iBuffer->Count(); i++ )
+        {
+        if( iBuffer->At(i).iExecuted )
+            {
+            if( iBuffer->At(i).iUri )
+                {
+                delete iBuffer->At(i).iUri;
+                iBuffer->At(i).iUri = 0;
+                }
+            if( iBuffer->At(i).iData )
+                {
+                delete iBuffer->At(i).iData;
+                iBuffer->At(i).iData = 0;
+                }
+            iBuffer->Delete(i);
+            iBuffer->Compress();
+            }
+        }
+// Secondary SSID Buffer 
+      for( TInt index=0; index<iSecondaryBuffer.Count(); index++ )
+        {
+        DBG_ARGS8(_S8("WLanAdapter::ExecuteBuffer(): Buf count: <%D> index: <%D>"), iBuffer->Count(), index );
+
+        if( iSecondaryBuffer[index]->iExecuted )
+            {
+            continue;
+            }
+               
+        TSecondarySSID ssid;
+        ssid.ScannedId = iSecondaryBuffer[index]->ScannedId;
+        ssid.UsedId = iSecondaryBuffer[index]->UsedId;
+        
+        DBG_ARGS8(_S8("CWlanadaptes::Execute Buffer - WLAN_SEC_SSID_SCANNED_SSID uri: <%S> ad  WLAN_SEC_SSID_USED_SSID : <%S>"), &iSecondaryBuffer[index]->ScannedId, &iSecondaryBuffer[index]->UsedId );
+        
+        TInt retval = iWlanSettings->WriteSecondarySSIDL(iSecondaryBuffer[index]->wlanLuid, ssid, ETrue);
+        iSecondaryBuffer[index]->iExecuted=ETrue;
+        
+        }
+      // EAP settings
+      for( TInt i = 0 ; i < iEAPBuffer.Count() ; i++ )
+      	{
+      	// Check if this method has encapsulated methods
+      	for ( TInt j = 0; j < iEAPBuffer.Count() ; j++ )
+      		{
+      		if ( iEAPBuffer[i]->iEAPSettings->iEAPType == iEAPBuffer[j]->iEncapsulatingEAPId )
+      			{
+      			// j is encapsulated inside i
+      			iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypes.Append( iEAPBuffer[j]->iEAPSettings->iEAPType );
+				iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypesPresent = ETrue;
+      			}
+      		}
+      	
+      	TRAPD( err, iWlanSettings->GetEAPInterfaceL(iEAPBuffer[i]->iWLANServiceId, 
+      												iEAPBuffer[i]->iEncapsulatingEAPId, 
+      												static_cast<TInt> (iEAPBuffer[i]->iEAPSettings->iEAPType ) ) );
+ 		if ( err == KErrNone )
+ 			{ 			
+ 			err = iWlanSettings->WriteEAPSettings( *iEAPBuffer[i]->iEAPSettings );
+ 			}
+      											      											      	
+      	MSmlDmAdapter::TError status;
+      	switch ( err ) 
+      		{
+      			case KErrNotFound:
+      				{
+      				status = CSmlDmAdapter::ENotFound;
+      				break;
+      				}
+      			case KErrNone:
+      				{
+      				status = CSmlDmAdapter::EOk;
+      				break;
+      				}
+      			default:
+      				{
+      				status = CSmlDmAdapter::EError;      				
+      				}
+      		}
+      		
+      	for ( TInt j = 0; j < iEAPBuffer[i]->iStatusRefArray.Count() ; j++)
+      		{
+      			iCallBack->SetStatusL( iEAPBuffer[i]->iStatusRefArray[j], status );	
+      		}      	
+      	}      	
+      	for ( TInt i = 0 ; i < iEAPBuffer.Count() ; i++ )
+    		{
+    		iEAPBuffer[i]->iStatusRefArray.Close();
+    		iEAPBuffer[i]->iEAPSettings->iEncapsulatedEAPTypes.Close();
+    		iEAPBuffer[i]->iEAPSettings->iCipherSuites.Close();
+    		delete iEAPBuffer[i]->iEAPSettings;
+    		iEAPBuffer[i]->iEAPSettings = NULL;
+	    	}
+      	iEAPBuffer.ResetAndDestroy();
+    }
+
+
+//=============================================
+//      CNSmlWLanAdapter::ConvertTo8LC()
+//      Converts string value to 8-bit
+//      
+//=============================================
+TDesC8& CNSmlWLanAdapter::ConvertTo8LC( const TDesC& aSource )
+    {
+    HBufC8* buf = HBufC8::NewLC( aSource.Length()*2);
+    TPtr8 bufPtr = buf->Des();
+    CnvUtfConverter::ConvertFromUnicodeToUtf8( bufPtr, aSource );
+
+    return *buf;
+    }
+
+//=============================================
+//      CNSmlWLanAdapter::ConvertTo16LC()
+//      Converts string value to 16-bit
+//      
+//=============================================
+TDesC16& CNSmlWLanAdapter::ConvertTo16LC( const TDesC8& aSource)
+    {
+    HBufC16* buf16 = HBufC16::NewLC( aSource.Length() );
+    TPtr bufPtr16 = buf16->Des();
+
+    CnvUtfConverter::ConvertToUnicodeFromUtf8(bufPtr16, aSource);
+
+    return *buf16;
+    }
+
+void CNSmlWLanAdapter::ResetEAPStructL()
+    {
+    DeleteEAPStructL();
+    iEAPSettings = new (ELeave) EAPSettings;
+    }
+
+    
+void CNSmlWLanAdapter::DeleteEAPStructL()
+    {
+    if (iEAPSettings != NULL)
+        {        
+        if (iEAPSettings->iCertificatesPresent)
+            {
+            iEAPSettings->iCertificates.Reset();
+            }
+        iEAPSettings->iEncapsulatedEAPTypes.Close();
+        iEAPSettings->iCipherSuites.Close();
+            
+        delete iEAPSettings;
+        iEAPSettings = NULL;
+        }
+    }
+
+
+void CNSmlWLanAdapter::DesToBufferL(CBufBase& aTo, const TDesC& aFrom)
+    {
+    aTo.InsertL( 0, ConvertTo8LC(aFrom) );
+    CleanupStack::PopAndDestroy(); // ConvertTo8LC
+    }
+
+void CNSmlWLanAdapter::FillCipherSuiteBufferL(CBufBase& aBuffer)
+    {
+    if (iEAPSettings == NULL || !iEAPSettings->iCipherSuitesPresent)
+        {
+        return;
+        }
+                        // 0    5    10   15   20   25   30   35
+    _LIT8(KPlus, "+");
+    aBuffer.InsertL(0,KSuitesDefault);
+    TInt count = iEAPSettings->iCipherSuites.Count();
+    for (TInt i=count-1; i>=0;--i)
+        {
+        switch (iEAPSettings->iCipherSuites[i])
+            {
+            case RSA_3DES_SHA:
+                {
+                aBuffer.Write(0, KPlus);
+                break;
+                }
+            case DHE_RSA_3DES_SHA:
+                {
+                aBuffer.Write(5, KPlus);
+                break;
+                }
+            case DHE_DSS_3DES_SHA:
+                {
+                aBuffer.Write(10, KPlus);
+                break;
+                }
+            case RSA_AES_SHA:
+                {
+                aBuffer.Write(15, KPlus);
+                break;
+                }
+            case DHE_RSA_AES_SHA:
+                {
+                aBuffer.Write(20, KPlus);
+                break;
+                }
+            case DHE_DSS_AES_SHA:
+                {
+                aBuffer.Write(25, KPlus);
+                break;
+                }
+            case RSA_RC4_MD5:
+                {
+                aBuffer.Write(30, KPlus);
+                break;
+                }
+            case RSA_RC4_SHA:
+                {
+                aBuffer.Write(35, KPlus);
+                break;
+                }
+            default:
+                {
+                break;
+                }
+                
+            }
+        }
+        
+    }
+
+    
+void CNSmlWLanAdapter::FillCipherSuitesL(const TDesC8& aObject, const TInt aLuid)
+    {
+    if (iEAPBuffer[aLuid] == NULL)
+        {
+        return;
+        }
+    iEAPBuffer[aLuid]->iEAPSettings->iCipherSuites.Reset();
+    iEAPBuffer[aLuid]->iEAPSettings->iCipherSuitesPresent = EFalse; // init to EFalse
+    
+    TChar plus('+');
+    
+    TInt length = aObject.Length();
+    for (TInt i=0; i+3<length;i+=5)
+        {
+        if (aObject[i] == plus)
+            {
+            TLex8 lex(aObject.Mid(i+1, 3));
+            TUint suite;
+            lex.Val(suite);
+            iEAPBuffer[aLuid]->iEAPSettings->iCipherSuites.Append(suite);
+            iEAPBuffer[aLuid]->iEAPSettings->iCipherSuitesPresent = ETrue;
+            }
+        }
+    }
+
+void CNSmlWLanAdapter::ConvertEAPStringToIds( const TDesC8& aEAPString, TDes8& aExpandedId, EAPSettings::TEapType& aId)
+	{
+    if ( aEAPString == KEAPSIM )
+		{	
+		aExpandedId.Copy( KEapSimTypeId, KExpandedEAPIdLength );		
+		aId = EAPSettings::EEapSim;
+		}
+    else if( aEAPString == KEAPAKA )
+        {
+		aExpandedId.Copy( KEapAkaTypeId, KExpandedEAPIdLength );	
+		aId = EAPSettings::EEapAka;	
+        }
+    else if( aEAPString == KEAPTLS )
+        {		
+		aExpandedId.Copy( KEapTlsTypeId, KExpandedEAPIdLength );	
+		aId = EAPSettings::EEapTls;	
+        }
+    else if( aEAPString == KEAPPEAP )
+    	{   
+		aExpandedId.Copy( KEapPeapTypeId, KExpandedEAPIdLength );	
+		aId = EAPSettings::EEapPeap;	
+        }
+    else if( aEAPString == KEAPTTLS )
+        {
+		aExpandedId.Copy( KEapTtlsTypeId, KExpandedEAPIdLength );		
+		aId = EAPSettings::EEapTtls;
+        }
+   else if( aEAPString == KEAPLEAP )
+        {
+		aExpandedId.Copy( KEapLeapTypeId, KExpandedEAPIdLength );
+		aId = EAPSettings::EEapLeap;		
+        }                                    
+   else if( aEAPString == KEAPMSCHAPV2 )
+        {
+		aExpandedId.Copy( KEapMschapv2TypeId, KExpandedEAPIdLength );		
+		aId = EAPSettings::EEapMschapv2;
+        }     
+   else if( aEAPString == KMSCHAPV2 )
+        {
+		aExpandedId.Copy( KMschapv2TypeId, KExpandedEAPIdLength );		
+		aId = EAPSettings::EPlainMschapv2;
+        }     
+   else if( aEAPString == KEAPGTC )
+   		{
+   		aExpandedId.Copy( KEapGtcTypeId, KExpandedEAPIdLength );
+		aId = EAPSettings::EEapGtc;
+        }
+   else if( aEAPString == KEAPFAST )
+        {		
+		aExpandedId.Copy( KEapFastTypeId, KExpandedEAPIdLength );		
+		aId = EAPSettings::EEapFast;
+        }
+   else if( aEAPString == KEAPTTLSPAP )
+       {		
+		aExpandedId.Copy( KTtlspapTypeId, KExpandedEAPIdLength );		
+		aId = static_cast<EAPSettings::TEapType>(98);
+       }
+    else
+        {		
+		aExpandedId.Copy( KEapNoneId, KExpandedEAPIdLength );
+		aId = EAPSettings::EEapNone;
+        }
+
+	}
+
+
+// end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldinternet/src/NSmlWlanSettings.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,1732 @@
+/*
+* Copyright (c) 2002-2006 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:   Wlan Adapter DB handler
+*
+*/
+
+
+
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdat_partner.h>
+#endif
+#include <WlanCdbCols.h>
+#include "NSmlWlanSettings.h"
+#include "NSmlWLanAdapter.h"
+#include "nsmldebug.h"
+#include <comms-infras/commdb/protection/protectdb.h>
+#include <SettingEnforcementInfo.h> // vsettingenforcementinfo
+#include <featmgr.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 KEAPListBufferSize = 128;
+const TUint KLengthOfOldStyleEAPListEntry = 5; // "+xxx,"
+
+const TInt KBeginTransRetryDelay = 1000000; // Delay for comms db begintransaction retry (microseconds)
+const  TInt KBeginTransRetryCount = 7;      // Maximum number of retries
+//-----------------------------------------------------------------------------
+// CWlanAdapter::CWlanSettings( CCommsDatabase& aDatabase )
+//-----------------------------------------------------------------------------
+CWlanSettings::CWlanSettings( CCommsDatabase& aDatabase ) : iDatabase( aDatabase ), iExpandedEAPTypeFieldsUsed( ETrue )
+	{
+	_DBG_FILE("CWlanSettings::CWlanSettings(): begin");
+
+	iTableView = 0;
+	iEapType = NULL;
+	iSecondaryView = NULL;
+
+
+	_DBG_FILE("CWlanSettings::CWlanSettings(): end");
+	}
+
+//-----------------------------------------------------------------------------
+// CWlanAdapter::~CWlanSettings( )
+//-----------------------------------------------------------------------------
+CWlanSettings::~CWlanSettings( )
+	{
+
+	delete iEapType;
+	delete iSecondaryView;
+	delete iTableView;
+	}
+
+//-----------------------------------------------------------------------------
+// CWlanSettings* CWlanSettings::NewL( CCommsDatabase& aDatabase )
+//-----------------------------------------------------------------------------
+CWlanSettings* CWlanSettings::NewL( CCommsDatabase& aDatabase )
+	{
+	_DBG_FILE("CWlanSettings::NewL(): begin");
+
+	CWlanSettings* self = new(ELeave) CWlanSettings( aDatabase );
+
+	CleanupStack::PushL( self );
+	self->ConstructL( );
+	CleanupStack::Pop( self );
+
+	_DBG_FILE("CWlanSettings::NewL(): end");
+	return self;
+	}
+
+//-----------------------------------------------------------------------------
+// void CWlanSettings::ConstructL( )
+//-----------------------------------------------------------------------------
+void CWlanSettings::ConstructL( )
+{
+	_DBG_FILE("CWlanSettings::ConstructL(): begin");
+	_DBG_FILE("CWlanSettings::ConstructL(): end");
+}
+
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::GetWlanSettings( TUint32 aLuid, TWlanSettings& aWlanSettings )
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::GetWlanSettings( TUint32 aLuid, TWlanSettings& aWlanSettings )
+	{
+	_DBG_FILE("CWlanSettings::GetWlanSettings(): begin");
+
+	TRAPD( err, ConnectToDatabaseL() );
+	if( err == KErrNone )
+		{
+		err = GoToRecord( aLuid );
+
+		if( err == KErrNone )
+			{
+			TRAP( err, GetDataFromRecordL( &aWlanSettings ) );			
+			}
+		}
+
+	_DBG_FILE("CWlanSettings::GetWlanSettings(): end");
+	return err;
+	}
+	
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::GetEapSettings( TInt aId, TWlanSettings& aWlanSettings )
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::GetEAPSettings( const TInt aId, const TInt aEapType, const TInt aTunnelingType, EAPSettings& aEapSettings )
+	{
+	_DBG_FILE("CWlanSettings::GetEapSettings(): begin");
+	DBG_ARGS(_S16("aId=%d, eEapType=%d"), aId, aEapType);
+
+	TRAPD( err, GetEAPInterfaceL(aId, aTunnelingType, aEapType) );
+	DBG_ARGS(_S16("GetEAPInterfaceL leaved with %d"), err);
+	if( err == KErrNone )
+		{
+		TRAP(err, iEapType->GetConfigurationL(aEapSettings));
+    	DBG_ARGS(_S16("iEapType->GetConfigurationL leaved with %d"), err);
+		}
+		
+	_DBG_FILE("CWlanSettings::GetEAPSettings(): end");
+	return err;
+	}
+
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::DeleteWlanSettings( TUint32 aLuid )
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::DeleteWlanSettings( TUint32 aLuid )
+	{
+	_DBG_FILE("CWlanSettings::DeleteWlanSettings(): begin");
+	TBool wlanEnforce = EFalse;
+	TInt tableLockError= KErrNone;
+	
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+        TInt enError = KErrNone;
+        TRAP(enError, wlanEnforce=CheckEnforcementL());
+        DBG_ARGS(_S16("CWlanSettings::DeleteWLANSettings, check enforcement failed. error: <%D>"), enError );
+        if(wlanEnforce)
+            {
+            _DBG_FILE("CWlanSettings::WriteWlanSettings(): wlan enforce is ON ");
+            TRAPD(lockError,tableLockError = PerformLockWLANTablesL(EFalse));
+            if(lockError == KErrNone && tableLockError == KErrNone)
+                {
+                _DBG_FILE("CWlanSettings::WriteWlanSettings(): Table unlcoked successfully ");
+                iWLANRelock = ETrue;	
+                }
+            }
+        }
+ 	
+	TRAPD( err, ConnectToDatabaseL() );
+	if( err == KErrNone )
+		{
+		err = GoToRecord( aLuid );
+		if( err == KErrNone )
+			{
+			
+			if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+			    {
+			    if(wlanEnforce)
+			        {
+			        ((CCommsDbProtectTableView*)iTableView)->UnprotectRecord();
+			        }
+			    }
+
+			
+			TInt err = iTableView->UpdateRecord( );
+	        if( err == KErrLocked )
+	             {
+	             _DBG_FILE("DeleteWlanSettings: UpdateRecord was locked.");
+	             TInt retry = KBeginTransRetryCount;            
+	             while ( retry > 0 && err == KErrLocked )
+	                 {
+	                 User::After(KBeginTransRetryDelay);
+	                 _DBG_FILE("DeleteWlanSettings: Slept 1 second. Try again");
+	                 err = iTableView->UpdateRecord();	                 
+	                 retry--;
+	                 }      	                           
+                 if( err != KErrNone )
+                     {
+                     _DBG_FILE("DeleteWlanSettings: UpdateRecord was unsuccessful");
+                     }			
+                 else
+                     {
+                     _DBG_FILE("DeleteWlanSettings: UpdateRecord was successful");
+                     }
+	             }			
+			
+			if( err == KErrNone )
+				{
+				TRAP( err, iTableView->WriteUintL( TPtrC(WLAN_SERVICE_ID), 0 ) );
+				if( err != KErrNone )
+					{
+					if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+					    {
+					    TInt tableLockError= KErrNone;
+					    if(iWLANRelock)
+					        {
+					        TInt lockError = KErrNone;
+					        TRAP(lockError,tableLockError = PerformLockWLANTablesL(ETrue));
+					        ((CCommsDbProtectTableView*)iTableView)->ProtectRecord();
+					        DBG_ARGS(_S16("CWlanSettings::DeleteWLANSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,tableLockError );
+					        iWLANRelock =EFalse;		             
+					        }
+					    if ( tableLockError != KErrNone ) // to remove warnings
+					        {
+					        tableLockError = KErrNone;
+					        }
+					    }
+					return err;
+					}
+				}
+			err = iTableView->PutRecordChanges( );
+			if( err == KErrLocked )
+                {
+                _DBG_FILE("DeleteWlanSettings: PutRecordChanges was locked.");
+                TInt retry = KBeginTransRetryCount;            
+                while ( retry > 0 && err == KErrLocked )
+                    {
+                    User::After(KBeginTransRetryDelay);
+                    _DBG_FILE("DeleteWlanSettings: Slept 1 second. Try again");
+                    err = iTableView->PutRecordChanges();
+                    retry--;
+                    }                                     
+                if( err != KErrNone )
+                    {
+                    _DBG_FILE("DeleteWlanSettings: PutRecordChanges was unsuccessful");
+                    }
+                else
+                    {
+                    _DBG_FILE("DeleteWlanSettings: PutRecordChanges was successful");
+                    }
+                }
+			
+			if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+			    {
+				TInt tableLockError= KErrNone;
+				if(iWLANRelock)
+					{
+					TInt lockError = KErrNone;
+					TRAP(lockError,tableLockError = PerformLockWLANTablesL(ETrue));
+					DBG_ARGS(_S16("CWlanSettings::DeleteWLANSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,tableLockError );
+					((CCommsDbProtectTableView*)iTableView)->ProtectRecord();
+					iWLANRelock =EFalse;
+					}
+				if ( tableLockError != KErrNone ) // to remove warnings
+				    {
+				    tableLockError = KErrNone;
+				    }
+			    }   
+
+			
+			if ( err == KErrNone )
+				{
+				// Ignore err on purpose
+				TRAP( err, DeleteSecondarySSIDsL( aLuid ) );				
+    	                    
+	            TRAP( err, DeleteWlanEapSettingsL( aLuid ) );
+				}            
+			}
+		}
+
+
+	_DBG_FILE("CWlanSettings::DeleteWlanSettings(): end");
+	if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+	    {
+	    if(iWLANRelock)
+		    {
+		    TInt lockError = KErrNone;
+		    TRAP(lockError,tableLockError = PerformLockWLANTablesL(ETrue));
+	        DBG_ARGS(_S16("CWlanSettings::DeleteWLANSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,tableLockError );
+	        ((CCommsDbProtectTableView*)iTableView)->ProtectRecord();
+	        iWLANRelock =EFalse;		   
+		    }
+	    }
+	
+	if (wlanEnforce) 
+		wlanEnforce = EFalse; // to get rid of warnings
+	return err;
+	}
+
+
+
+
+TInt CWlanSettings::DeleteOneSecondarySSIDL( TUint32 aWLANId , TUint32 asecId)
+{
+  
+  	   TInt retval = KErrNone;
+        SetSecondaryViewToRecordL(aWLANId);
+    	retval = iSecondaryView->GotoFirstRecord();
+          
+       while (retval == KErrNone)
+        {
+        TSecondarySSID ssid;
+        TRAP(retval, iSecondaryView->ReadUintL( TPtrC(WLAN_SEC_SSID_ID ),  ssid.Id ));
+        if(ssid.Id == asecId)
+            {
+            //retval = iSecondaryView->UpdateRecord();
+            //if( retval==KErrNone )
+              //  {
+            if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+                {
+    			TBool wlanEnforce = EFalse;
+    			TInt enError = KErrNone;
+    			TRAP(enError, wlanEnforce=CheckEnforcementL());
+    			DBG_ARGS(_S16("CWlanSettings::DeleteWLANSettings, check enforcement failed. error: <%D>"), enError );
+    			if(wlanEnforce)
+    				{
+    				((CCommsDbProtectTableView*)iSecondaryView)->UnprotectRecord();
+    				}
+                }
+
+            retval = iSecondaryView->DeleteRecord();
+            if( retval == KErrLocked )
+                {
+                _DBG_FILE("DeleteOneSecondarySSIDL: DeleteRecord was locked.");
+                TInt retry = KBeginTransRetryCount;            
+                while ( retry > 0 && retval == KErrLocked )
+                    {
+                    User::After(KBeginTransRetryDelay);
+                    _DBG_FILE("DeleteOneSecondarySSIDL: Slept 1 second. Try again");
+                    retval = iSecondaryView->DeleteRecord();
+                    retry--;
+                    }                                    
+                if( retval != KErrNone )
+                    {
+                    _DBG_FILE("DeleteOneSecondarySSIDL: DeleteRecord was unsuccessful");
+                    }
+                else
+                    {
+                    _DBG_FILE("DeleteOneSecondarySSIDL: DeleteRecord was successful");
+                    }
+                }
+                DBG_ARGS(_S16("CWlanSettings::DeleteOneSecondarySSIDL, Secondaryssid delete error: <%D> "), retval );
+
+                //    iTableView->PutRecordChanges( );
+                //}
+
+        	break;
+       	}
+        
+        retval = iSecondaryView->GotoNextRecord();
+        }
+        
+	return retval;
+}
+
+TInt CWlanSettings::DeleteSecondarySSIDsL( TUint32 aWLANId )
+    {
+    TInt retVal(KErrNone);
+	if (iSecondaryView == NULL)
+	    {
+	    SetSecondaryViewToRecordL(aWLANId);
+	    }
+	else 
+	    {
+	    retVal = iSecondaryView->GotoFirstRecord();
+	    TUint32 secId = 0;
+	    if (retVal == KErrNone)
+	        {
+	        iSecondaryView->ReadUintL( TPtrC(WLAN_SEC_SSID_SERVICE_ID), secId );
+	        }
+	    if (secId != aWLANId)
+	        {
+	        SetSecondaryViewToRecordL(aWLANId);
+	        }
+	    }
+	    
+    TInt err = iSecondaryView->GotoFirstRecord();
+    while (err == KErrNone)
+        {
+        if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+            {
+			TBool wlanEnforce = EFalse;
+			TInt enError = KErrNone;
+			TRAP(enError, wlanEnforce=CheckEnforcementL());
+			DBG_ARGS(_S16("CWlanSettings::DeleteSecondarySSIDsL, check enforcement failed. error: <%D>"), enError );
+			if(wlanEnforce)
+				{
+				((CCommsDbProtectTableView*)iSecondaryView)->UnprotectRecord();
+				}
+            }
+		retVal = iSecondaryView->DeleteRecord();
+        if( retVal == KErrLocked )
+             {
+             _DBG_FILE("DeleteSecondarySSIDsL: DeleteRecord was locked.");
+             TInt retry = KBeginTransRetryCount;            
+             while ( retry > 0 && retVal == KErrLocked )
+                 {
+                 User::After(KBeginTransRetryDelay);
+                 _DBG_FILE("DeleteSecondarySSIDsL: Slept 1 second. Try again");
+                 retVal = iSecondaryView->DeleteRecord();
+                 retry--;
+                 }                                   
+             if( retVal != KErrNone )
+                 {
+                 _DBG_FILE("DeleteSecondarySSIDsL: DeleteRecord was unsuccessful");
+                 }
+             else
+                 {
+                 _DBG_FILE("DeleteSecondarySSIDsL: DeleteRecord was successful");     
+                 }
+             }
+		DBG_ARGS(_S16("CWlanSettings::DeleteSecondarySSIDsL, Secondaryssid delete error: <%D> "), retVal );
+
+		err = iSecondaryView->GotoNextRecord();
+        }
+    
+    return retVal;
+    }
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::DeleteEapSettings( TInt aWlanId, TInt aEapType )
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::DeleteEAPSettings( TInt aWlanId, TInt aEapType  )
+	{
+	_DBG_FILE("CWlanSettings::DeleteEAPSettings(): begin");
+
+	TRAPD( err, GetEAPInterfaceL(aWlanId, EAPSettings::EEapNone, aEapType) );
+	if( err == KErrNone )
+		{
+		TRAP( err, iEapType->DeleteConfigurationL());
+		if( err != KErrNone )
+		    {
+		    DBG_ARGS(_S16("CWlanSettings::DeleteEAPSettings, delete failed, error: <%D> "), err );
+			return err;
+		    }
+		}
+
+	_DBG_FILE("CWlanSettings::DeleteEAPSettings(): end");
+	return err;
+	}
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::DeleteWlanEapSettings( TInt aWlanId )
+// Deletes all EAPs from a Wlan
+//-----------------------------------------------------------------------------
+void CWlanSettings::DeleteWlanEapSettingsL( TInt aWlanId )
+	{
+	_DBG_FILE("CWlanSettings::DeleteWlanEapSettings(): begin");    
+    TInt retVal( KErrNone );
+    TInt err( KErrNone );
+
+    // List EAP implementations and call deletion for those that are not encapsulated
+	
+	RImplInfoPtrArray ecomInfoArray;
+	REComSession::ListImplementationsL( KEapTypeInterfaceUid, ecomInfoArray );	
+	TUint eapId;
+	for (TInt i = 0; i < ecomInfoArray.Count(); i++)
+		{
+		if ( !CEapType::IsDisallowedOutsidePEAP( *ecomInfoArray[i] ) )
+			{
+			// Not encapsulated method. Settings can be deleted.
+			if ( ecomInfoArray[i]->DataType().Length() == KExpandedEAPIdLength)
+				{				
+				// The EAP ID is in expanded type format
+				eapId = ecomInfoArray[i]->DataType()[7];				
+				}
+			else
+				{
+				// The EAP ID is in old 8-bit format (as string)
+				TLex8 lex( ecomInfoArray[i]->DataType() );
+        		lex.Val( eapId );        		        		
+				}
+			err = DeleteEAPSettings( aWlanId, eapId );				
+			if ( err != KErrNone )
+				{
+				retVal = err;
+				}
+			}
+		}
+	ecomInfoArray.ResetAndDestroy();
+	User::LeaveIfError (retVal);
+		
+	_DBG_FILE("CWlanSettings::DeleteWlanEapSettings(): end");	
+	}
+
+
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::WriteWlanSettings( TWlanSettings& aWlanSettings )
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::WriteWlanSettings( TWlanSettings& aWlanSettings )
+	{
+	_DBG_FILE("CWlanSettings::WriteWlanSettings(): begin");
+
+	TInt err = 0;
+	TInt enError= KErrNone;
+	iServiceID = aWlanSettings.ServiceID; 
+	TBool wlanEnforce = EFalse;
+
+	if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+	    {
+	    TRAP(enError, wlanEnforce=CheckEnforcementL());
+	    DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings, check enforcement . error: <%D>"), enError );
+	    if(wlanEnforce)
+	        {
+	        TRAPD(lockError,enError = PerformLockWLANTablesL(EFalse));
+	        if(lockError == KErrNone && enError == KErrNone)
+	            {
+	            iWLANRelock = ETrue;	
+	            }
+	        }
+	    }
+	
+	if( RecordExists( aWlanSettings.ServiceID ) <= 0 )
+		{
+		err = iTableView->InsertRecord( aWlanSettings.Id );			           
+        if( err == KErrLocked )
+            {
+            _DBG_FILE("WriteWlanSettings InsertRecord: CommsDat was locked.");
+            TInt retry = KBeginTransRetryCount;            
+            while ( retry > 0 && err == KErrLocked )
+                {
+                User::After(KBeginTransRetryDelay);
+                _DBG_FILE("WriteWlanSettings: Slept 1 second. Try again");
+                err = iTableView->InsertRecord( aWlanSettings.Id ); 
+                retry--;
+                }      
+            }        
+		
+		if( err != KErrNone )
+			{
+			DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings(): - InsertRecord failed. error: <%D>"), err );
+		
+			if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+			    {
+			    TInt tableLockError= KErrNone;
+			    if(iWLANRelock)
+			        {
+			        TInt lockError = KErrNone;
+			        TRAP(lockError,tableLockError = PerformLockWLANTablesL(ETrue));
+			        DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,tableLockError );
+			        iWLANRelock =EFalse;
+			        }
+			    if ( tableLockError != KErrNone ) // to remove warnings
+			        {
+			        tableLockError = KErrNone;
+			        }
+			    }
+			return err;
+			}
+		TRAP( err, InitialiseRecordL() );
+		if( err != KErrNone )
+			{
+			DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings(): - InitialiseRecord failed. error: <%D>"), err );
+		
+			if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+			    {
+			    TInt tableLockError= KErrNone;
+			    if(iWLANRelock)
+			        {
+			        TInt lockError = KErrNone;
+			        TRAP(lockError,tableLockError = PerformLockWLANTablesL(ETrue));
+			        DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,tableLockError );
+			        iWLANRelock =EFalse;
+			        }
+			    if ( tableLockError != KErrNone ) // to remove warnings
+			        {
+			        tableLockError = KErrNone;
+			        }
+			    }
+			return err;
+			}
+		}
+	else
+		{
+		err = GoToRecord( aWlanSettings.ServiceID );
+		if( err == KErrNone )
+			{
+			
+			if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+			    {
+				if ( wlanEnforce )
+					{
+					_DBG_FILE("CWlanSettings::WriteWlanSettings(): unprotect wlan");
+					((CCommsDbProtectTableView*)iTableView)->UnprotectRecord(); 
+					}
+			    }
+
+			
+			err = iTableView->UpdateRecord( );
+            if( err == KErrLocked )
+                {
+                _DBG_FILE("WriteWlanSettings: UpdateRecord was locked.");
+                TInt retry = KBeginTransRetryCount;            
+                while ( retry > 0 && err == KErrLocked )
+                    {
+                    User::After(KBeginTransRetryDelay);
+                    _DBG_FILE("WriteWlanSettings: Slept 1 second. Try again");
+                    err = iTableView->UpdateRecord();                    
+                    retry--;
+                    }               
+                if( err != KErrNone )
+                    {
+                    _DBG_FILE("WriteWlanSettings: UpdateRecord was unsuccessful");
+                    }
+                else
+                    {
+                    _DBG_FILE("WriteWlanSettings: UpdateRecord was successful");
+                    }
+                }           
+			
+			if( err != KErrNone )
+				{
+				DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings(): - UpdateRecord failed. error: <%D>"), err );
+			
+				if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+				    {
+				    TInt tableLockError= KErrNone;
+				    if(iWLANRelock)
+				        {
+				        TInt lockError = KErrNone;
+				        TRAP(lockError,tableLockError = PerformLockWLANTablesL(ETrue));
+				        DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,tableLockError );
+				        ((CCommsDbProtectTableView*)iTableView)->ProtectRecord(); 
+				        iWLANRelock =EFalse;
+				        }
+				    if ( tableLockError != KErrNone ) // to remove warnings
+				        {
+				        tableLockError = KErrNone;
+				        }
+				    }
+				return err;
+				}
+			}
+		}
+
+	TRAP( err, WriteDataToRecordL( &aWlanSettings ) );
+
+	if( err == KErrNone )
+		{
+		_DBG_FILE("CWlanSettings::WriteWlanSettings(): PutRecordChanges");
+		err = iTableView->PutRecordChanges();
+		if( err == KErrLocked )
+            {
+            _DBG_FILE("WriteWlanSettings: PutRecordChanges was locked.");
+            TInt retry = KBeginTransRetryCount;            
+            while ( retry > 0 && err == KErrLocked )
+                {
+                User::After(KBeginTransRetryDelay);
+                _DBG_FILE("WriteWlanSettings: Slept 1 second. Try again");
+                err = iTableView->PutRecordChanges();
+                retry--;
+                }      
+            }                
+        if( err != KErrNone )
+            {
+            _DBG_FILE("WriteWlanSettings: PutRecordChanges was unsuccessful");
+            }				
+        else
+            {
+            _DBG_FILE("WriteWlanSettings: PutRecordChanges was successful");        
+            }
+		}
+	if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+	    {
+	    if(iWLANRelock)
+	        {
+	        TInt lockError = KErrNone;
+	        TRAP(lockError,enError = PerformLockWLANTablesL(ETrue));
+	        DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings, WLAN table Lock error. error: <%D>, <%D> "), lockError,enError );
+	       iWLANRelock =EFalse;
+		   }
+	    }
+	DBG_ARGS(_S16("CWlanSettings::WriteWlanSettings(): end. err: <%D>"), err );
+	return err;
+	}
+
+
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::WriteWlanSettings( TWlanSettings& aWlanSettings )
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::WriteSecondarySSIDL( TUint32 aWlanID, TSecondarySSID& aSettings, TBool aNew )
+    {
+    
+    _DBG_FILE("CWlanSettings::WriteSecondarySSIDL(): begin");
+
+    TUint32 id = 0;
+    delete iSecondaryView;
+    iSecondaryView = NULL;
+    
+    TInt retval = KErrNone;
+    TInt reLock = EFalse;
+    TBool apEnforce=EFalse;
+    
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+    	TRAPD(eError,apEnforce=CheckEnforcementL())
+    	DBG_ARGS8(_S8("CNSmlInternetAdapter::WriteSecondarySSIDL(): EError %d , APEnforcement is %d"),eError,apEnforce);
+		if(eError==KErrNone && apEnforce)
+			{
+			_DBG_FILE("CWlanSettings::WriteSecondarySSIDL(): set db protect");
+			TInt enError=KErrNone;
+			TInt lockError = KErrNone;
+			TRAP(lockError,enError = PerformLockWLANTablesL(EFalse));
+			reLock = ETrue;
+			if ( enError != KErrNone ) // to remove warnings
+			    {
+			    enError = KErrNone;
+			    }
+			}
+        }
+
+    
+    if (aNew)
+        {
+        _DBG_FILE("CWlanSettings::WriteSecondarySSIDL(): new table inserted");
+        iSecondaryView = iDatabase.OpenTableLC( TPtrC( WLAN_SECONDARY_SSID ) ); 
+        CleanupStack::Pop(iSecondaryView); // iSecondaryView
+        retval = iSecondaryView->InsertRecord(id);
+        
+        if( retval == KErrLocked )
+             {
+             _DBG_FILE("WriteSecondarySSIDL: InsertRecord was locked.");
+             TInt retry = KBeginTransRetryCount;            
+             while ( retry > 0 && retval == KErrLocked )
+                 {
+                 User::After(KBeginTransRetryDelay);
+                 _DBG_FILE("WriteSecondarySSIDL: Slept 1 second. Try again");
+                 retval = iSecondaryView->InsertRecord(id);
+                 retry--;
+                 }      
+             }                
+         if( retval != KErrNone )
+             {
+             _DBG_FILE("WriteSecondarySSIDL: InsertRecord was unsuccessful");
+             }
+         else 
+             {
+             _DBG_FILE("WriteSecondarySSIDL: InsertRecord was successful");
+             }
+        
+        DBG_ARGS8(_S8("CNSmlInternetAdapter::WriteSecondarySSIDL(): Add record, error %d"), retval);
+        if ( retval == KErrNone )
+        	{
+        	_DBG_FILE("CWlanSettings::WriteSecondarySSIDL(): table insertion went ok");      
+        	iSecondaryView->WriteUintL(TPtrC(WLAN_SEC_SSID_SERVICE_ID), aWlanID );
+        	iSecondaryView->WriteUintL(TPtrC(WLAN_SEC_SSID_ID), id );
+        	}
+        }
+    else
+        {
+        _DBG_FILE("CWlanSettings::WriteSecondarySSIDL(): table exists, find it");
+        iSecondaryView = iDatabase.OpenViewMatchingUintLC(TPtrC(WLAN_SECONDARY_SSID),
+                                                        TPtrC(WLAN_SEC_SSID_ID),
+                                                        aSettings.Id);
+        CleanupStack::Pop(iSecondaryView); // iSecondaryView
+        TInt err = iSecondaryView->GotoFirstRecord();
+        if (err != KErrNone)
+            {
+            _DBG_FILE("CWlanSettings::WriteSecondarySSIDL(): go to first record failed");
+            // most likely KErrNotFound, something wrong with the URI parsing probably
+            return err;
+            }
+        if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+            {
+    		if ( apEnforce )
+    			{
+    			((CCommsDbProtectTableView*)iSecondaryView)->UnprotectRecord();
+    			}
+            }
+        retval = iSecondaryView->UpdateRecord();
+        if( retval == KErrLocked )
+             {
+             _DBG_FILE("WriteSecondarySSIDL: UpdateRecord was locked.");
+             TInt retry = KBeginTransRetryCount;            
+             while ( retry > 0 && retval == KErrLocked )
+                 {
+                 User::After(KBeginTransRetryDelay);
+                 _DBG_FILE("WriteSecondarySSIDL: Slept 1 second. Try again");
+                 retval = iSecondaryView->UpdateRecord();
+                 retry--;
+                 }      
+             }                
+         if( retval != KErrNone )
+             {
+             _DBG_FILE("WriteSecondarySSIDL: UpdateRecord was unsuccessful");
+             }
+         else
+             {
+             _DBG_FILE("WriteSecondarySSIDL: UpdateRecord was successful");
+             }
+        }
+    if ( retval == KErrNone )
+    	{
+    	DBG_ARGS8(_S8("CWlanSettings::writesecondaryssids - WLAN_SEC_SSID_SCANNED_SSID uri: <%S> ad  WLAN_SEC_SSID_USED_SSID : <%S>"), &aSettings.ScannedId, &aSettings.UsedId );
+    	iSecondaryView->WriteTextL(TPtrC(WLAN_SEC_SSID_SCANNED_SSID), aSettings.ScannedId);
+    	iSecondaryView->WriteTextL(TPtrC(WLAN_SEC_SSID_USED_SSID), aSettings.UsedId);
+    
+    	retval = iSecondaryView->PutRecordChanges();
+        if( retval == KErrLocked )
+             {
+             _DBG_FILE("WriteSecondarySSIDL: PutRecordChanges was locked.");
+             TInt retry = KBeginTransRetryCount;            
+             while ( retry > 0 && retval == KErrLocked )
+                 {
+                 User::After(KBeginTransRetryDelay);
+                 _DBG_FILE("WriteSecondarySSIDL: Slept 1 second. Try again");
+                 retval = iSecondaryView->PutRecordChanges();
+                 retry--;
+                 }      
+             }                
+         if( retval != KErrNone )
+             {
+             _DBG_FILE("WriteSecondarySSIDL: PutRecordChanges was unsuccessful");
+             }
+         else
+             {
+             _DBG_FILE("WriteSecondarySSIDL: PutRecordChanges was successful");
+             }
+    	}
+    
+    if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement))
+        {
+    	if ( reLock )
+    		{
+			TInt enError=KErrNone;
+			TInt lockError = KErrNone;
+			TRAP(lockError,enError = PerformLockWLANTablesL(ETrue));
+			if ( iSecondaryView != NULL )
+				{
+				((CCommsDbProtectTableView*)iSecondaryView)->ProtectRecord();
+				}
+			if ( enError != KErrNone ) // to remove warnings
+			    {
+			    enError = KErrNone;
+			    }
+    		}
+        }
+
+    	
+    // This makes sure that there will be no calling to GotoFirstRecord() 
+    // before secondaryview is reinitialized, (causes a panic if that would happen)
+    delete iSecondaryView;
+    iSecondaryView = NULL;
+    
+    if ( reLock&&apEnforce )
+    	{
+    	reLock = EFalse; // to get rid of warnings
+    	apEnforce = EFalse;
+    	}
+    
+    return retval;
+    
+    }
+	
+TInt CWlanSettings::WriteEAPSettings( EAPSettings& aEapSettings) 
+    {
+    TRAPD(err, iEapType->SetConfigurationL(aEapSettings));
+    return err;
+    }
+
+
+//-----------------------------------------------------------------------------
+// void CWlanSettings::ConnectToDatabaseL( )
+//-----------------------------------------------------------------------------
+void CWlanSettings::ConnectToDatabaseL( )
+	{
+	_DBG_FILE("CWlanSettings::ConnectToDatabaseL(): begin");
+
+	if( !iTableView )
+		{
+		iTableView = iDatabase.OpenTableLC( TPtrC( WLAN_SERVICE ) ); 
+
+		if( iTableView == NULL )
+			{
+			_DBG_FILE("CWlanSettings::ConnectToDatabaseL(): could not open table");
+			User::Leave( KErrCouldNotConnect );
+			}
+
+		CleanupStack::Pop( iTableView ); //iTableView
+		}
+	
+	_DBG_FILE("CWlanSettings::ConnectToDatabaseL(): end");
+	}
+
+
+void CWlanSettings::GetEAPInterfaceL(const TInt aId, const TInt aTunnelingType, const TInt aType)
+    {
+    if ( aId < 0 )
+    	{
+    	// Illegal input
+    	User::Leave( KErrArgument );
+    	}
+    	
+ 	if ( iEapType )
+	    {
+	    delete iEapType;
+	    iEapType = NULL;
+	    }
+
+    TInt err = KErrNone;
+    TUint8 expandedEapId[] = {0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+    TBuf8<KExpandedEAPIdLength> cue;
+    
+	// First try loading EAP type using the expanded id and if that fails 
+	// try the 8-bit id. If that succeeds then set the flag so that subsequent
+	// EAP method loads are always done using the 8-bit id.
+	if ( iExpandedEAPTypeFieldsUsed )
+		{
+		_DBG_FILE("CWlanSettings::GetEAPInterfaceL(): iExpandedEAPTypeFieldsUsed == True.");
+		// Set-up 64-bit expanded EAP id
+		if ( ( aType == KMschapv2TypeId[7] ) || ( aType == KTtlspapTypeId[7] ) )
+			{
+			// This is plain MSCHAPv2. Set vendor ID correctly
+			expandedEapId[1] = KMschapv2TypeId[1];
+			expandedEapId[2] = KMschapv2TypeId[2];
+			expandedEapId[3] = KMschapv2TypeId[3];
+			}
+		
+		expandedEapId[KExpandedEAPIdLength - 1] = static_cast<TUint8> ( aType );	
+						
+		cue.Copy( expandedEapId, KExpandedEAPIdLength );
+		
+		// Try loading EAP ECOM module
+		TRAP( err, iEapType = CEapType::NewL( cue, ELan, aId ));
+		if ( err != KErrNone )
+			{
+			_DBG_FILE("CWlanSettings::GetEAPInterfaceL(): Expanded EAP type loading failed. Trying old style.");
+			// It failed. Try old style
+			cue.Format( _L8("%d"), aType );
+			iEapType = CEapType::NewL( cue, ELan, aId );
+			_DBG_FILE("CWlanSettings::GetEAPInterfaceL(): Old style loading successful.");
+			// Succeeded (because didn't leave). Set the flag so that subsequent trys
+			// are directly using the old format.
+			iExpandedEAPTypeFieldsUsed = EFalse;					
+			}			
+    	}
+    else
+    	{
+    	// Use the old 8-bit format
+    	_DBG_FILE("CWlanSettings::GetEAPInterfaceL(): iExpandedEAPTypeFieldsUsed == False.");
+    	cue.Format( _L8("%d"), aType );
+		iEapType = CEapType::NewL( cue, ELan, aId );
+		_DBG_FILE("CWlanSettings::GetEAPInterfaceL(): Old style loading successful.");
+    	}   
+    	
+    // Set tunneling type
+	if (aTunnelingType != EAPSettings::EEapNone)
+		{
+		iEapType->SetTunnelingType(aTunnelingType);
+		}
+}
+
+
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::GoToRecord( TUint32 aId )
+// Moves iTableView to point record whose id-number equals to aId
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::GoToRecord( TUint32 aId )
+{
+	_DBG_FILE("CWlanSettings::GoToRecord(): begin");
+	DBG_ARGS(_S16("CWlanSettings::GoToRecord(): begin Search record id: <%D>"), aId );
+	
+	TInt err = iTableView->GotoFirstRecord( );
+	if( err != KErrNone )
+		{
+		DBG_ARGS(_S16("CWlanSettings::GoToRecord(): end, GotoFirstRecord. err: <%D>"), err );
+    return err;
+		}
+
+	TUint32 id = 0;
+	TRAP( err, iTableView->ReadUintL( TPtrC(WLAN_SERVICE_ID), id ) );
+	if( err != KErrNone )
+		{
+		DBG_ARGS(_S16("CWlanSettings::GoToRecord(): end, ReadUintL. err: <%D>"), err );
+	  return err;
+		}
+
+	while( aId != id )
+		{
+		err = iTableView->GotoNextRecord( );
+		if( err != KErrNone )
+			{
+			DBG_ARGS(_S16("CWlanSettings::GoToRecord(): end, GotoNextRecord. err: <%D>"), err );
+  	  	    return err;
+			}
+
+		TRAP( err, iTableView->ReadUintL( TPtrC(WLAN_SERVICE_ID), id ) );
+
+		if( err == KErrNone )
+			{
+			DBG_ARGS(_S16("CWlanSettings::GoToRecord(): Found service id: <%D>"), id );
+			}
+		else
+			{
+	  	DBG_ARGS(_S16("CWlanSettings::GoToRecord(): end, ReadUintL next. err: <%D>"), err );
+			return err;
+			}
+		}
+
+    TRAP(err, SetSecondaryViewToRecordL(aId));
+
+
+	DBG_ARGS(_S16("CWlanSettings::GoToRecord(): end. Final record id: <%D>"), id );
+
+	return err;
+	}
+
+
+
+void CWlanSettings::SetSecondaryViewToRecordL( TUint32 aId )
+    {
+    // optional secondarySSID
+    if (iSecondaryView)
+        {
+        delete iSecondaryView;
+        iSecondaryView = NULL;
+        }
+        
+    // first open a view to secondary ssid table, with all the rows with service id
+    // matching the wlan service id (count can be zero)        
+    iSecondaryView = iDatabase.OpenViewMatchingUintLC( TPtrC(WLAN_SECONDARY_SSID),
+                                                        TPtrC(WLAN_SEC_SSID_SERVICE_ID),
+                                                        aId);
+	if( iSecondaryView == NULL )
+		{
+		// this should not happen in a normal situation
+		User::Leave( KErrCouldNotConnect );
+		}
+	CleanupStack::Pop( iSecondaryView );
+    }
+
+
+//-----------------------------------------------------------------------------
+// void CWlanSettings::GetDataFromRecordL( TWlanSettings* aWlanSettings )
+// Read settings from database to aWlanSettings structure
+//-----------------------------------------------------------------------------
+void CWlanSettings::GetDataFromRecordL( TWlanSettings* aWlanSettings )
+	{
+	_DBG_FILE("CWlanSettings::GetDataFromRecordL(): begin");
+	
+    TInt leavecode = 0;
+
+    aWlanSettings->ServiceID = 0;
+    aWlanSettings->ConnectionMode = 0;
+    aWlanSettings->SSID = _L("");
+    aWlanSettings->UsedSSID = _L("");
+    aWlanSettings->ScanSSID = 0;
+    aWlanSettings->WepKey1 = _L8("");
+    aWlanSettings->WepKey2 = _L8("");
+    aWlanSettings->WepKey3 = _L8("");
+    aWlanSettings->WepKey4 = _L8("");
+    aWlanSettings->WepIndex = 0;
+    aWlanSettings->SecurityMode = EAllowUnsecure;
+    aWlanSettings->WPAPreSharedKey = _L8("");
+    aWlanSettings->UseWPAPSK = 0;
+    aWlanSettings->EapList = _L("");
+    aWlanSettings->AuthMode = 0;                
+            
+    TRAP( leavecode, iTableView->ReadUintL( TPtrC( WLAN_SERVICE_ID ), aWlanSettings->ServiceID ) );
+    if ( leavecode != KErrNone ) 
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_SERVICE_ID read error: <%D>"), leavecode );
+        }       
+       
+    TRAP( leavecode, iTableView->ReadUintL( TPtrC( WLAN_CONNECTION_MODE ), aWlanSettings->ConnectionMode ) );
+    if ( leavecode != KErrNone ) 
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_CONNECTION_MODE read error: <%D>"), leavecode );
+        }       
+
+    TRAP( leavecode, iTableView->ReadUintL( TPtrC( NU_WLAN_AUTHENTICATION_MODE ), aWlanSettings->AuthMode ) );
+    if ( leavecode != KErrNone ) 
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): NU_WLAN_AUTHENTICATION_MODE read error: <%D>"), leavecode );
+        }       
+ 
+    TRAP( leavecode, iTableView->ReadUintL( TPtrC( WLAN_WEP_INDEX ), aWlanSettings->WepIndex ) );
+    if ( leavecode != KErrNone ) 
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_WEP_INDEX read error: <%D>"), leavecode );
+        }       
+
+    TRAP( leavecode, iTableView->ReadUintL( TPtrC( WLAN_SECURITY_MODE ), aWlanSettings->SecurityMode ) );
+    if ( leavecode != KErrNone ) 
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_SECURITY_MODE read error: <%D>"), leavecode );
+        }       
+
+    TRAP( leavecode, iTableView->ReadUintL( TPtrC( WLAN_ENABLE_WPA_PSK ), aWlanSettings->UseWPAPSK ) );
+    if ( leavecode != KErrNone ) 
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_ENABLE_WPA_PSK read error: <%D>"), leavecode );
+        }       
+
+    TBuf8<KCommsDbSvrMaxFieldLength> columnValue8;
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(NU_WLAN_WEP_KEY1 ),  columnValue8 ));
+    if ( ( leavecode == KErrNone ) && ( columnValue8.Length() > 0 ) )
+        {
+    	aWlanSettings->WepKey1 = columnValue8;
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): NU_WLAN_WEP_KEY1 read error: <%D>"), leavecode );
+        }
+
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(NU_WLAN_WEP_KEY2 ),  columnValue8 ));
+    if ( ( leavecode == KErrNone ) && ( columnValue8.Length() > 0 ) )
+        {
+    	aWlanSettings->WepKey2 = columnValue8;
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): NU_WLAN_WEP_KEY2 read error: <%D>"), leavecode );
+        }
+
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(NU_WLAN_WEP_KEY3 ),  columnValue8 ));
+    if ( ( leavecode == KErrNone ) && ( columnValue8.Length() > 0 ) )
+        {
+    	aWlanSettings->WepKey3 = columnValue8;
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): NU_WLAN_WEP_KEY3 read error: <%D>"), leavecode );
+        }
+
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(NU_WLAN_WEP_KEY4 ),  columnValue8 ));
+    if ( ( leavecode == KErrNone ) && ( columnValue8.Length() > 0 ) )
+        {
+    	aWlanSettings->WepKey4 = columnValue8;
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): NU_WLAN_WEP_KEY4 read error: <%D>"), leavecode );
+        }
+
+	TBuf8<KMaxPSKLength> precolumnValue8;
+    TBuf<KCommsDbSvrMaxFieldLength> columnValue;
+    
+    _DBG_FILE("CWlanSettings::GetDataFromRecordL(): Before getting WLAN_WPA_PRE_SHARED_KEY ");
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(WLAN_WPA_PRE_SHARED_KEY ),  precolumnValue8 ));
+    DBG_ARGS(_S16("CWlanSettings::ReadTextL( TPtrC(WLAN_WPA_PRE_SHARED_KEY ),length of key: <%D>"), precolumnValue8.Length() );
+    if ( ( leavecode == KErrNone ) && ( precolumnValue8.Length() > 0 ) )
+        {
+    	aWlanSettings->WPAPreSharedKey = precolumnValue8;
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_WPA_PRE_SHARED_KEY read error: <%D>"), leavecode );
+        }
+
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(NU_WLAN_SSID ),  columnValue ));
+    if ( ( leavecode == KErrNone ) && ( columnValue.Length() > 0 ) )
+        {
+    	aWlanSettings->SSID = columnValue;
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): NU_WLAN_SSID read error: <%D>"), leavecode );
+        }
+
+    TRAP(leavecode, iTableView->ReadTextL( TPtrC(WLAN_USED_SSID ),  columnValue ));
+    if ( ( leavecode == KErrNone ) && ( columnValue.Length() > 0 ) )
+        {
+    	aWlanSettings->UsedSSID = columnValue;
+        _DBG_FILE("CWlanSettings::GetDataFromRecordL(): WLAN_USED_SSID reading ok");
+        }
+    else
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_USED_SSID read error: <%D>"), leavecode );
+        }
+	
+    iTableView->ReadTextL( TPtrC(WLAN_USED_SSID), aWlanSettings->UsedSSID );
+    _DBG_FILE("CWlanSettings::GetDataFromRecordL(): WLAN_USED_SSID");
+
+    TRAP(leavecode, iTableView->ReadUintL( TPtrC(WLAN_SCAN_SSID ), aWlanSettings->ScanSSID ));
+    if ( leavecode != KErrNone )
+        {
+        DBG_ARGS(_S16("CWlanSettings::GetDataFromRecordL(): WLAN_SCAN_SSID read error: <%D>"), leavecode );
+        }
+
+	TInt retval = iSecondaryView->GotoFirstRecord();
+	if (retval == KErrNone)
+	    {
+	    aWlanSettings->SecondarySSIDsExisting = ETrue;
+	    }
+	else
+	    {
+	    aWlanSettings->SecondarySSIDsExisting = EFalse;
+	    }
+
+	// Try to read the old EAPList field
+	HBufC* eapList = iTableView->ReadLongTextLC( TPtrC( WLAN_EAPS ) );
+	if ( eapList->Length() > 0 )
+		{
+		// The old field was valid and there was content
+		aWlanSettings->EapList = *eapList;		
+		}
+	else
+		{
+		// Old list was invalid or empty. Try the new fields:
+	    // enabled EAP types
+	    TBuf8<KEAPListBufferSize> enabledTypes;
+	    TBuf8<KEAPListBufferSize> disabledTypes;
+	    iTableView->ReadTextL( TPtrC( WLAN_ENABLED_EAPS ), enabledTypes);
+	    iTableView->ReadTextL( TPtrC( WLAN_DISABLED_EAPS ), disabledTypes);         	                               
+		
+	    // Calculate the number of EAP types altogether
+	    TUint numEapTypes = enabledTypes.Length() / KExpandedEAPIdLength;
+	    numEapTypes += disabledTypes.Length() / KExpandedEAPIdLength;
+	    
+	    if (numEapTypes > 0)
+		    {
+		    // One EAP type reserves maximum of 5 bytes: "+xxx,"
+		    HBufC* outputBuf = HBufC::NewLC( numEapTypes * KLengthOfOldStyleEAPListEntry );
+		    		    
+		    TPtr output = outputBuf->Des();	    
+			_LIT( KFormat, "%03d" );		                  	                               
+			for ( TInt i = (KExpandedEAPIdLength - 1) ; i < enabledTypes.Length() ; i += KExpandedEAPIdLength)
+				{
+				
+				output.Append(TChar( '+' ));
+				output.AppendFormat( KFormat, enabledTypes[i] );
+				output.Append(TChar( ',' ));
+				}
+				
+			for ( TInt i = (KExpandedEAPIdLength - 1) ; i < disabledTypes.Length() ; i += KExpandedEAPIdLength)
+				{				
+				output.Append(TChar( '-' ));
+				output.AppendFormat( KFormat, disabledTypes[i] );
+				output.Append(TChar( ',' ));
+				}
+			// Strip the final ','
+			output.Delete( output.Length() - 1, 1 );
+			
+			aWlanSettings->EapList = *outputBuf;
+			CleanupStack::PopAndDestroy( outputBuf );
+		    }
+		}
+    
+	CleanupStack::PopAndDestroy( eapList );
+
+    _DBG_FILE("CWlanSettings::GetDataFromRecordL(): WLAN_EAPS");
+    
+
+	_DBG_FILE("CWlanSettings::GetDataFromRecordL(): end");
+	}
+	
+	
+	
+//-----------------------------------------------------------------------------
+// void CWlanSettings::GetSecondarySSIDListL(TUint32 aId, RArray<TSecondarySSID>& aSecondarySSIDs)
+// Fills the array with secondarySSIDs, which are associated with given WLANID
+//-----------------------------------------------------------------------------
+void CWlanSettings::GetSecondarySSIDListL(TUint32 aWlanId, RArray<TSecondarySSID>& aSecondarySSIDs)
+    {
+    if (iSecondaryView == NULL)
+        {
+        // views haven't been initialized, in case of incorrect usage
+        User::Leave(KErrNotReady);
+        }
+        
+    // set the view pointer into the first record
+    TInt retval = iSecondaryView->GotoFirstRecord();
+    if (retval != KErrNone)
+        {
+        return;
+        }
+    
+    // check that given id matches the current rowset. If not, then reinitialize
+    TUint32 id;
+    TInt err(KErrNone);
+    TRAP(err, iSecondaryView->ReadUintL( TPtrC(WLAN_SEC_SSID_SERVICE_ID ),  id ));
+    if (id != aWlanId)
+        {
+        SetSecondaryViewToRecordL(aWlanId);
+    	retval = iSecondaryView->GotoFirstRecord();
+        }
+        
+    TBuf<KMaxTextLength> columnValue;
+
+    while (retval == KErrNone)
+        {
+        TSecondarySSID ssid;
+        TRAP(retval, iSecondaryView->ReadUintL( TPtrC(WLAN_SEC_SSID_ID ),  ssid.Id ));
+        TRAP(retval, iSecondaryView->ReadTextL( TPtrC(WLAN_SEC_SSID_SCANNED_SSID ),  ssid.ScannedId ));
+        TRAP(retval, iSecondaryView->ReadTextL( TPtrC(WLAN_SEC_SSID_USED_SSID ),  ssid.UsedId ));
+        aSecondarySSIDs.Append(ssid);
+        retval = iSecondaryView->GotoNextRecord();
+        }
+    }
+
+
+
+
+//-----------------------------------------------------------------------------
+// void CWlanSettings::WriteDataToRecordL( TWlanSettings* aWlanSettings )
+// Writes settings to database from aWlanSettings structure
+//-----------------------------------------------------------------------------
+void CWlanSettings::WriteDataToRecordL( TWlanSettings* aWlanSettings )
+	{
+	_DBG_FILE("CWlanSettings::WriteDataToRecordL(): begin");
+
+	iTableView->WriteUintL( TPtrC(WLAN_SERVICE_ID), aWlanSettings->ServiceID );
+	iTableView->WriteUintL( TPtrC(WLAN_CONNECTION_MODE), aWlanSettings->ConnectionMode );
+	iTableView->WriteUintL( TPtrC(WLAN_WEP_INDEX), aWlanSettings->WepIndex );
+	iTableView->WriteUintL( TPtrC(WLAN_SECURITY_MODE), aWlanSettings->SecurityMode );
+	iTableView->WriteUintL( TPtrC(WLAN_ENABLE_WPA_PSK), aWlanSettings->UseWPAPSK );
+	iTableView->WriteUintL( TPtrC(NU_WLAN_AUTHENTICATION_MODE), aWlanSettings->AuthMode );
+	iTableView->WriteTextL( TPtrC(NU_WLAN_SSID), aWlanSettings->SSID );
+	iTableView->WriteTextL( TPtrC(WLAN_USED_SSID), aWlanSettings->UsedSSID );
+	iTableView->WriteUintL( TPtrC(WLAN_SCAN_SSID), aWlanSettings->ScanSSID );
+	
+	iTableView->WriteTextL( TPtrC(NU_WLAN_WEP_KEY1), aWlanSettings->WepKey1 );
+	iTableView->WriteTextL( TPtrC(NU_WLAN_WEP_KEY2), aWlanSettings->WepKey2 );
+	iTableView->WriteTextL( TPtrC(NU_WLAN_WEP_KEY3), aWlanSettings->WepKey3 );
+	iTableView->WriteTextL( TPtrC(NU_WLAN_WEP_KEY4), aWlanSettings->WepKey4 );
+	iTableView->WriteUintL( TPtrC(WLAN_WEP_KEY1_FORMAT ), 1 ); // 0 = Eascii, 1 = EHexadecimal
+	iTableView->WriteUintL( TPtrC(WLAN_WEP_KEY2_FORMAT ), 1 );
+	iTableView->WriteUintL( TPtrC(WLAN_WEP_KEY3_FORMAT ), 1 );
+	iTableView->WriteUintL( TPtrC(WLAN_WEP_KEY4_FORMAT ), 1 ); 
+	
+	iTableView->WriteTextL( TPtrC(WLAN_WPA_PRE_SHARED_KEY), aWlanSettings->WPAPreSharedKey );
+	iTableView->WriteUintL( TPtrC(WLAN_WPA_KEY_LENGTH), aWlanSettings->WPAPreSharedKey.Length() );
+
+	// Expanded EAP types in use. Write the eap list to the new columns.
+
+    // generate appropriate entries in the new enabled and disabled list,
+    // overwriting those values 
+    
+    // count the + and - signs to determine the size of enabled and 
+    // disabled descriptors
+    TLex lex( aWlanSettings->EapList );
+    
+    TInt numPlus = 0;
+    TInt numMinus = 0;
+    TChar ch;
+    while ( !lex.Eos() )
+        {
+        ch = lex.Get();
+        if ( ch == '+' ) ++numPlus;
+        else if ( ch == '-' ) ++numMinus;
+        }
+        
+    // each entry consumes 8 bytes in binary format
+    HBufC8* enabledEAPPlugin = HBufC8::NewL( 8 * numPlus );
+    CleanupStack::PushL( enabledEAPPlugin );
+    
+    HBufC8* disabledEAPPlugin = HBufC8::NewL( 8 * numMinus );
+    CleanupStack::PushL( disabledEAPPlugin );
+        
+    lex.Assign( aWlanSettings->EapList );
+    
+    while ( !lex.Eos() )
+        {
+        // beginning of implementation UID
+        TInt16 implUid = 0;
+        
+        if ( lex.Val( implUid ) != KErrNone || !implUid )
+            {
+            // if the old string is corrupted, null out both lists
+            enabledEAPPlugin->Des().Zero();
+            disabledEAPPlugin->Des().Zero();
+            break;
+            }
+
+        // append it to the appropriate list ('+' enabled, '-' disabled)
+        _LIT8( KPadding, "\xFE\0\0\0\0\0\0" );
+        _LIT8( KMsChapV2Padding, "\xFE\xFF\xFF\xFF\0\0\0");
+        const TInt KPlainMsChapV2ImplUid = 99;
+        const TInt KTtlspapImplUid = 98;
+        
+        // Check whether eap is inluded or not +/-
+        if ( implUid > 0 )
+            {
+            // check whether plain mschap or ttlspap in question
+            if ( Abs( implUid ) == KPlainMsChapV2ImplUid || Abs( implUid ) == KTtlspapImplUid )
+            	{
+            	enabledEAPPlugin->Des().Append( KMsChapV2Padding );
+            	}
+            else
+            	{
+            	enabledEAPPlugin->Des().Append( KPadding );
+            	}
+            enabledEAPPlugin->Des().Append( Abs( implUid ) );
+            }
+        else if (implUid < 0 )
+            {
+            // check whether plain mschap or ttlspap in question
+            if ( Abs( implUid ) == KPlainMsChapV2ImplUid || Abs( implUid ) == KTtlspapImplUid )
+            	{
+            	disabledEAPPlugin->Des().Append( KMsChapV2Padding );
+            	}
+            else
+            	{
+            	disabledEAPPlugin->Des().Append( KPadding );
+            	}
+            disabledEAPPlugin->Des().Append( Abs( implUid ) );
+            }
+        
+        // swallow the delimiter (',')
+        lex.Get();
+        }
+                	
+	
+	
+	iTableView->WriteTextL( TPtrC( WLAN_ENABLED_EAPS ), 
+                                  enabledEAPPlugin? 
+                                        (const TDesC8&)*enabledEAPPlugin: 
+                                        (const TDesC8&)KNullDesC8 );
+
+    iTableView->WriteTextL( TPtrC( WLAN_DISABLED_EAPS ), 
+                                  disabledEAPPlugin? 
+                                        (const TDesC8&)*disabledEAPPlugin: 
+                                        (const TDesC8&)KNullDesC8 );
+    CleanupStack::PopAndDestroy( disabledEAPPlugin );
+    CleanupStack::PopAndDestroy( enabledEAPPlugin );
+    
+	_DBG_FILE("CWlanSettings::WriteDataToRecordL(): end");
+	}
+
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::RecordExists( TUint32 aLuid )
+// Returns ETrue if record exists in database
+//-----------------------------------------------------------------------------
+TInt CWlanSettings::RecordExists( TUint32 aLuid )
+	{
+	_DBG_FILE("CWlanSettings::RecordExists(): begin");
+	
+	TInt err = KErrNone;
+	TRAP( err, ConnectToDatabaseL() );
+	
+	// If the connection went ok, then we can go to the record
+	if( err == KErrNone )
+	    {	    
+	    err = GoToRecord( aLuid );
+	    }
+	
+	if( err == KErrNone )
+		{
+  	    DBG_ARGS(_S16("CWlanSettings::RecordExists(): end. GoToRecord OK err: <%D>"), err );
+		return ETrue;
+		}
+	else
+		{
+  	    DBG_ARGS(_S16("CWlanSettings::RecordExists(): end. GoToRecord error err: <%D>"), err );
+		return err;
+		}
+	}
+
+//-----------------------------------------------------------------------------
+// void CWlanSettings::InitialiseRecordL( )
+// Inserts mandatory values for commsdb
+//-----------------------------------------------------------------------------
+void CWlanSettings::InitialiseRecordL( )
+	{
+	_DBG_FILE("CWlanSettings::InitialiseRecordL(): begin");
+	
+	iTableView->WriteUintL( TPtrC(WLAN_WPA_KEY_LENGTH), 0 );
+	iTableView->WriteUintL( TPtrC(NU_WLAN_AUTHENTICATION_MODE), 0 );
+
+  _DBG_FILE("CWlanSettings::InitialiseRecordL(): end");
+	}
+
+		
+TInt CWlanSettings::InstalledEAPsL(CBufBase& aEAPList)
+    {
+    _DBG_FILE("CWlanSettings::InstalledEAPsL(): begin");
+
+    RImplInfoPtrArray ecomInfoArray;
+    REComSession::ListImplementationsL(KEapTypeInterfaceUid, ecomInfoArray);
+        
+    TUint eapId( 0 ); 
+                
+    // First sort the EAPIds
+    for (TInt i = 0; i < ecomInfoArray.Count(); i++)
+        {        
+		if ( ecomInfoArray[i]->DataType().Length() == KExpandedEAPIdLength)
+			{
+			// The EAP ID is in expanded type format
+			// Only handle the vendor type of 0
+			if ( (ecomInfoArray[i]->DataType()[1] != 0
+				 || ecomInfoArray[i]->DataType()[2] != 0
+				 || ecomInfoArray[i]->DataType()[3] != 0  )
+				 && ( ( ecomInfoArray[i]->DataType()[7] != KMschapv2TypeId[7] ) &&
+					  ( ecomInfoArray[i]->DataType()[7] != KTtlspapTypeId[7] ) ) )
+				 {
+				 	// This is some other vendor type than IETF
+				 	continue;	
+				 }
+			eapId = ecomInfoArray[i]->DataType()[7];
+			_DBG_FILE("CWlanSettings::InstalledEAPsL(): Expanded EAP id found.");			
+			}
+		else
+			{
+			// The EAP ID is in old 8-bit format (as string)
+			TLex8 lex( ecomInfoArray[i]->DataType() );
+        	if ( lex.Val( eapId ) != KErrNone )
+        		{
+        		// Unsupported format. Ignore this.
+        		_DBG_FILE("CWlanSettings::InstalledEAPsL(): Unsupported EAP id found.");
+        		continue;
+				}			       			
+				_DBG_FILE("CWlanSettings::InstalledEAPsL(): Old style EAP id found.");
+			}
+			        
+        if ( !CEapType::IsDisallowedOutsidePEAP( *ecomInfoArray[i] ) )
+        	{
+		        aEAPList.InsertL(aEAPList.Size(), KNSmlWLanEapId);  // EAPId
+        		TBuf8<3> cue;    // Max EAPId == 255
+        		cue.AppendNumFixedWidth( eapId, EDecimal, 3 );
+        		aEAPList.InsertL(aEAPList.Size(), cue);
+				aEAPList.InsertL(aEAPList.Size(), KSlash);				
+        	}
+
+		// Check if the method is allowed inside PEAP
+		if ( !CEapType::IsDisallowedInsidePEAP( *ecomInfoArray[i] ) )
+			{			
+	        aEAPList.InsertL(aEAPList.Size(), KNSmlWLanEapId);  // EAPId
+	        TBuf8<3> cue;    // Max EAPId == 255
+	        cue.AppendNumFixedWidth( eapId, EDecimal, 3 );
+	        aEAPList.InsertL(aEAPList.Size(), cue);		
+	        aEAPList.InsertL(aEAPList.Size(), KDash);
+	        cue.Zero();
+	        cue.AppendNumFixedWidth( KEapPeapTypeId[7], EDecimal, 3 );
+	        aEAPList.InsertL(aEAPList.Size(), cue);			       
+	        aEAPList.InsertL(aEAPList.Size(), KSlash);
+	        
+#ifdef FF_WLAN_EXTENSIONS
+			// same additions for EAP-FAST
+	       	aEAPList.InsertL(aEAPList.Size(), KNSmlWLanEapId);  // EAPId
+	       	cue.Zero();    // Max EAPId == 255
+	        cue.AppendNumFixedWidth( eapId, EDecimal, 3 );
+	       	aEAPList.InsertL(aEAPList.Size(), cue);		
+	        aEAPList.InsertL(aEAPList.Size(), KDash);
+	        cue.Zero();
+	        cue.AppendNumFixedWidth( KEapFastTypeId[7], EDecimal, 3 );
+	        aEAPList.InsertL(aEAPList.Size(), cue);			       
+	        aEAPList.InsertL(aEAPList.Size(), KSlash);	
+#endif		        
+			}
+		// Check if the method is allowed inside TTLS
+		if ( !CEapType::IsDisallowedInsideTTLS( *ecomInfoArray[i] ) )
+			{
+	        aEAPList.InsertL(aEAPList.Size(), KNSmlWLanEapId);  // EAPId
+	        TBuf8<3> cue;    // Max EAPId == 255
+	        cue.AppendNumFixedWidth( eapId, EDecimal, 3 );
+	        aEAPList.InsertL(aEAPList.Size(), cue);		
+	        aEAPList.InsertL(aEAPList.Size(), KDash);
+	        cue.Zero();
+	        cue.AppendNumFixedWidth( KEapTtlsTypeId[7], EDecimal, 3 );
+	        aEAPList.InsertL(aEAPList.Size(), cue);			       	
+	        aEAPList.InsertL(aEAPList.Size(), KSlash);		                		        		
+			}
+        }
+    // ECOM array is no longer needed.
+    ecomInfoArray.ResetAndDestroy();
+
+    // Cut the last slash
+	aEAPList.ResizeL( aEAPList.Size() -1);
+     
+    _DBG_FILE("CWlanSettings::InstalledEAPsL(): end");
+    return KErrNone;
+    }
+
+		
+
+//-----------------------------------------------------------------------------
+// TBool CWlanSettings::CheckEnforcementL( )
+// Checks if wlan enforcement is On or Off
+//-----------------------------------------------------------------------------
+    TBool CWlanSettings::CheckEnforcementL()
+    {
+    	CSettingEnforcementInfo* info = CSettingEnforcementInfo::NewL();
+		CleanupStack::PushL(info);
+		TBool enforceWLANActive ( EFalse );
+		User::LeaveIfError(info->EnforcementActive(EWLANEnforcement, enforceWLANActive));
+		CleanupStack::PopAndDestroy(info);
+		return ( enforceWLANActive) ;
+    }
+
+//-----------------------------------------------------------------------------
+// TBool CWlanSettings::CheckAPEnforcementL( )
+// Checks if AP enforcement is On or Off
+//-----------------------------------------------------------------------------
+    
+TBool CWlanSettings::CheckAPEnforcementL()
+    {
+    	CSettingEnforcementInfo* info = CSettingEnforcementInfo::NewL();
+		CleanupStack::PushL(info);
+		TBool enforceAPActive ( EFalse );
+		User::LeaveIfError(info->EnforcementActive(EAPEnforcement, enforceAPActive));
+		CleanupStack::PopAndDestroy(info);
+		return ( enforceAPActive) ;
+    }
+//-----------------------------------------------------------------------------
+// TInt CWlanSettings::PerformLockWLANTablesL( )
+// Locks or unlocks the wlan tables depending on the 
+// aProtect value
+//-----------------------------------------------------------------------------
+  TInt CWlanSettings::PerformLockWLANTablesL(TBool aProtect)
+    {
+       
+   	_DBG_FILE("CWlanSettings::PerformLockWLANTablesL(): BEGIN ");
+    CCommsDatabaseProtect* dbprotect = CCommsDatabaseProtect::NewL();
+    CleanupStack::PushL(dbprotect);
+    RArray<TPtrC> wlanTableList;
+    CleanupClosePushL( wlanTableList );
+    TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+   	TBool apEnforce = EFalse;
+   	TInt err = KErrNone;
+	
+   	TRAP_IGNORE( apEnforce=CheckAPEnforcementL() );
+   	if(apEnforce)
+    	{
+    	_DBG_FILE("CWlanSettings::PerformLockWLANTablesL(): AP enforcement is TRUE");
+   		wlanTableList.AppendL( TPtrC( WAP_ACCESS_POINT ) );
+		wlanTableList.AppendL( TPtrC( WAP_IP_BEARER ) );
+		wlanTableList.AppendL( TPtrC( IAP ) );
+		//condition when only ap is enforced and not wlan then its not 
+		//necessary to add wlanservice table
+		RDbRowSet::TAccess checkAccessType;
+		checkAccessType =  dbprotect->GetTableAccessL(TPtrC(WLAN_DEVICE_SETTINGS));
+    	switch(checkAccessType)
+			{
+			case RDbRowSet::EReadOnly :
+				{
+				wlanTableList.AppendL( TPtrC(WLAN_SERVICE) );
+				wlanTableList.AppendL(TPtrC(WLAN_SECONDARY_SSID) );
+				}
+			default :	
+				{
+				break;
+				}
+			}
+		
+    	}
+    else
+    	{
+    	_DBG_FILE("CWlanSettings::PerformLockWLANTablesL() Only wlan enforcement is ON");
+    	wlanTableList.AppendL( TPtrC(WLAN_SERVICE) );	
+    	wlanTableList.AppendL(TPtrC(WLAN_SECONDARY_SSID) );
+    	}
+    	
+   	iDatabase.CommitTransaction();
+	                                                               	   
+   	for ( TInt i( 0 ); i < wlanTableList.Count(); i++ )	
+   	    {
+   	    if(!aProtect)
+   	        {
+		   	err = dbprotect->UnProtectTable( wlanTableList[ i ] );
+		   	DBG_ARGS(_S16("CWlanSettings::PerformLockWLANTablesL(): Unprotect error  %D"), err);	
+		   	//Check if current AP is locked , if yes , unprotect 
+			// lock = EFalse;
+			}
+   	    else 
+			{
+			err = dbprotect->ProtectTable( wlanTableList[ i ] );
+			//Check if current ServiceID is not locked , if yes , protect
+			// lock = ETrue;
+			}
+   	    } //for loop
+	
+   	CleanupStack::PopAndDestroy(&wlanTableList);
+   	CleanupStack::PopAndDestroy( dbprotect );		
+   	CCommsDatabase* commsDataBase = CCommsDatabase::NewL();
+   	CleanupStack::PushL( commsDataBase );
+			
+	// Open the IAP from IAP Table and protect 
+					
+	TUint32 apIAPID = 0;   					
+	CCommsDbTableView* iapViews = commsDataBase->OpenViewMatchingUintLC(TPtrC(IAP),
+	                                                                    TPtrC(IAP_SERVICE),
+                                                                        iServiceID);
+    err = iapViews->GotoFirstRecord();
+	// Service ID can be same for GPRS or WLAN, hence check service type and get the iAPID
+    while (err == KErrNone )
+        {
+        iapViews->ReadTextL(TPtrC(IAP_SERVICE_TYPE), serviceType);
+		if(serviceType == TPtrC(LAN_SERVICE))    
+		    {		           	
+		    iapViews->ReadUintL(TPtrC(COMMDB_ID), apIAPID);
+		    DBG_ARGS(_S16("CWlanSettings::PerformLockWLANTablesL():  IAPId   %D"), apIAPID);	
+		    break;
+		    }      
+		err = iapViews->GotoNextRecord();
+        }
+                                                          
+        //iapViews->ReadUintL(TPtrC(COMMDB_ID), apIAPID);
+        DBG_ARGS(_S16("CWlanSettings::PerformLockWLANTablesL(): end. IAP ID being locked %d "), apIAPID );
+        if(err == KErrNone)		
+            {	
+            CCommsDbTableView* iapUpdate = commsDataBase->OpenViewMatchingUintLC(TPtrC(IAP),TPtrC(COMMDB_ID),apIAPID);
+            TInt iapExists = iapUpdate->GotoFirstRecord();
+	
+            if(!aProtect)                                                                       	
+                {	
+                ((CCommsDbProtectTableView*)iapViews)->UnprotectRecord(); 	
+                if (iapExists)		
+                    {	
+                    ((CCommsDbProtectTableView*)iapUpdate)->UnprotectRecord();
+                    }
+                }	
+            else
+        		{
+        		((CCommsDbProtectTableView*)iapViews)->ProtectRecord();
+        		if (iapExists)
+        			{
+        			((CCommsDbProtectTableView*)iapUpdate)->ProtectRecord();
+        			}
+        		}
+        	CleanupStack::PopAndDestroy(); // iapUpdate
+            }
+    
+        CleanupStack::PopAndDestroy( iapViews );
+        CleanupStack::PopAndDestroy( commsDataBase );
+            
+        iDatabase.BeginTransaction();
+		return err;
+    }
+  
+			
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/group/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,33 @@
+/*
+* 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:  Build information file for project nsmldmalwaysonadapter
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+
+
+PRJ_MMPFILES
+nsmldmalwaysonadapter.mmp
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/group/nsmldmalwaysonadapter.mmp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* 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:  Project definition file for project nsmldmalwaysonadapter
+*
+*/
+
+#include <platform_paths.hrh>
+#include <defaultcaps.hrh>
+
+TARGET                  nsmldmalwaysonadapter.dll
+TARGETTYPE              PLUGIN
+UID                     0x10009d8d 0x101f6d36
+
+CAPABILITY              CAP_ECOM_PLUGIN
+VENDORID                VID_DEFAULT
+
+SOURCEPATH              ../src
+SOURCE                  nsmldmalwaysonadapter.cpp
+SOURCE                  nsmldmalwaysonsettingstore.cpp
+
+START RESOURCE          nsmldmalwaysonadapter.rss
+END
+
+USERINCLUDE             ../inc
+
+//Default system include paths for middleware layer modules
+MW_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE 	        /epoc32/include/ecom
+
+LIBRARY                 euser.lib ecom.lib charconv.lib flogger.lib
+LIBRARY                 centralrepository.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/logger.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,99 @@
+/*
+* 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:  Provides logging services.
+*
+*/
+
+
+#ifndef ALWAYSONLOGGER_H
+#define ALWAYSONLOGGER_H
+
+#ifdef _DEBUG
+                              // 0 = No logging,
+#define LOGGING_METHOD  1     // 1 = Flogger,
+                              // 2 = RDebug
+#else
+
+#define LOGGING_METHOD  0     // No logging in UREL builds
+
+#endif // _DEBUG
+
+
+#if LOGGING_METHOD == 1       // Flogger
+
+#include <flogger.h>
+_LIT(KLOGFolder,"ALWAYSONADAPTER");
+_LIT(KLOGFile,"ALWAYSONADAPTER.txt");
+
+#define LOGTEXT(x)\
+    {\
+    RFileLogger::Write(KLOGFolder(),KLOGFile(),EFileLoggingModeAppend,\
+    x);\
+    }
+
+#define LOGSTRING(x)\
+    {\
+    _LIT8(tempLogDes,x);\
+    RFileLogger::Write(KLOGFolder(),KLOGFile(),EFileLoggingModeAppend,\
+    tempLogDes());\
+    }
+
+#define LOGSTRING2(x,y)\
+    { _LIT8(tempLogDes,x);\
+    RFileLogger::WriteFormat(KLOGFolder(),\
+                             KLOGFile(),\
+                             EFileLoggingModeAppend,\
+                             TRefByValue<const TDesC8>(tempLogDes()),y);\
+    }
+
+#define LOGSTRING3(x,y,z)\
+    { _LIT8(tempLogDes,x);\
+    RFileLogger::WriteFormat(KLOGFolder(),\
+                             KLOGFile(),\
+                             EFileLoggingModeAppend,\
+    TRefByValue<const TDesC8>(tempLogDes()),y,z);\
+    }
+
+#define LOGSTRING4(w,x,y,z)\
+    { _LIT8(tempLogDes,w);\
+    RFileLogger::WriteFormat(KLOGFolder(),\
+                             KLOGFile(),\
+                             EFileLoggingModeAppend,\
+    TRefByValue<const TDesC8>(tempLogDes()),x,y,z);\
+    }
+
+
+#elif _LOGGING_METHOD == 2    // RDebug
+
+#include <e32svr.h>
+
+#define LOGSTRING(x) RDebug::Print(x);
+#define LOGSTRING(x) RDebug::Print(_L(x));
+#define LOGSTRING2(x,y) RDebug::Print(_L(x),y);
+#define LOGSTRING3(x,y,z) RDebug::Print(_L(x),y,z);
+#define LOGSTRING4(w,x,y,z) RDebug::Print(_L(w),x,y,z);
+
+#else // LOGGING_METHOD == 0 or invalid
+
+#define LOGSTRING(x)
+#define LOGSTRING(x)
+#define LOGSTRING2(x,y)
+#define LOGSTRING3(x,y,z)
+#define LOGSTRING4(w,x,y,z)
+
+#endif // LOGGING_METHOD
+
+#endif  // ALWAYSONLOGGER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonadapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,581 @@
+/*
+* 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 adapter for handling always-on settings.
+*
+*/
+
+
+#ifndef NSMLDMALWAYSONADAPTER_H
+#define NSMLDMALWAYSONADAPTER_H
+
+#include <smldmadapter.h>
+
+#include "nsmldmalwaysonsettingstore.h"
+
+class CSmlDmAOCommandElement;
+class CNSmlDmAOSettingStore;
+
+// The DDF version must be changed if any changes in DDF structure 
+// ( built in DDFStructureL() function )
+_LIT8( KNSmlDmAOAdapterDDFVersion, "1.0" ); 
+_LIT8( KNSmlDmAOAdapterTextPlain, "text/plain" );
+
+// Names of the nodes
+// When updating KNSmlDmAOAdapterAOURI also update 
+// KNSmlDmAOAdapterURIMaxLength! */
+_LIT8(KNSmlDmAOAdapterAOURI, "./VENDORCONFIG");
+_LIT8(KNSmlDmAOAdapterAO, "VENDORCONFIG");
+_LIT8(KNSmlDmAOAdapterName, "NAME");
+_LIT8(KNSmlDmAOAdapterAwonPdpc, "AWON-PDPC");
+_LIT8(KNSmlDmAOAdapterTRetry, "T-RETRY");
+
+
+// Descriptions of the nodes
+_LIT8( KNSmlDmAOAdapterAODescription, 
+       "Always-on provides management of connections");
+_LIT8( KNSmlDmAOAdapterNameDescription, 
+       "Name of the VENDORCONFIG");
+_LIT8( KNSmlDmAOAdapterAwonPdpcDescription, 
+       "Always-on setting in home and visited network");
+_LIT8( KNSmlDmAOAdapterTRetryDescription, 
+       "T-Retry timer interval");
+
+// Leaf nodes of VENDORCONFIG node
+_LIT8( KNSmlDmAOAllLeafNodes, 
+       "NAME/AWON-PDPC/T-RETRY");
+
+// URI segment separator
+// When updating this literal also update 
+// KNSmlDmAOAdapterAPURIMaxLength and KNSmlDmAOAdapterURIMaxLength!
+_LIT8( KNSmlDmAOSeparator, "/" );
+
+// URI segment separator
+// When updating KNSmlDmAOAdapterAOURI also update 
+// KNSmlDmAOAdapterAPURIMaxLength and KNSmlDmAOAdapterURIMaxLength!
+_LIT8( KNSmlDmAOUriListSeparator, "," );
+
+// Prefix in URIs (removed for LUID mapping)
+_LIT8( KNSmlDmAOAdapterURIPrefix, "./" );
+
+// Name prefix for unnamed VENDORCONFIG nodes
+_LIT8( KNSmlDmAONamePrefix, "VENDORCONFIG" );
+
+const TInt KNSmlDmAOGranularity = 4;
+const TInt KNSmlDmAOInvalidRef = -1;
+
+// Maximum length of VENDORCONFIG URI including a separator 
+// character in URI List. Node is not calculated here.  
+// KNSmlDmAOAdapterAOURI + KNSmlDmAOSeparator + KNSmlDmAOUriListSeparator
+const TInt KNSmlDmAOAdapterURIMaxLength =  16;
+        
+/**
+ *  Always-on device management adapter
+ *
+ *  Always-on device management adapter manages settings
+ *  related to VENDORCONFIG.
+ *
+ *  @lib nsmldmalwaysonadapter
+ *  @since S60 v3.2
+ */
+class CNSmlDmAOAdapter : public CSmlDmAdapter
+    {
+    
+public:
+
+/** Possible command types */
+enum TCommandType
+    {
+    EAddCmd,
+    EGetCmd,
+    EGetSizeCmd,
+    EDeleteCmd
+    };
+
+
+    static CNSmlDmAOAdapter* NewL( MSmlDmCallback* aDmCallback );
+    
+    virtual ~CNSmlDmAOAdapter();
+
+
+// from base class CSmlDmAdapter
+
+    /**
+     *  The function returns current version of the DDF. 
+     *
+     *  @since S60 v3.2
+     *  @param aVersion DDF version of the
+     *  adapter. (filled by the adapter) 
+     */
+    void DDFVersionL( CBufBase& aDDFVersion );
+
+    /**
+     *  The function for filling the DDF structure of the adapter
+     *
+     *  @since S60 v3.2
+     *  @param aDDFObject   Reference to root object.
+    */
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+
+    /**
+     * The function creates new leaf objects, or replaces data in existing 
+     * leaf objects. The information about the success of the command is
+     * returned by calling SetStatusL function of MSmlDmCallback callback
+     * interface. 
+     *     
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object 
+     * @param aObject      Data of the object.
+     * @param aType        MIME type of the object
+     * @param aStatusRef   Reference to correct command, i.e. this reference
+     *                     must be used when calling the SetStatusL of this 
+     *                     command
+    */
+    void UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+							const TDesC8& aObject, const TDesC8& aType,
+							TInt aStatusRef );
+    /**
+     * The function deletes an object and its child objects. 
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object (if the adapter have earlier 
+     *                     returned LUID to the DM Module).
+     * @param aStatusRef   Reference to correct command, i.e. this reference 
+     *                     must be used when calling the SetStatusL of this 
+     *                     command.
+    */
+    void DeleteObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+						TInt aStatusRef );
+
+    /**
+     * The function fetches data of a leaf object. The SetStatusL is used
+     * as described in UpdateLeafObjectL(). The data is returned by using the
+     * SetResultsL function of MSmlCallback callback interface.
+	 *
+     * @since S60 v3.2
+     * @param aURI             URI of the object
+     * @param aLUID            LUID of the object (if the adapter have 
+     *                         earlier returned LUID to the DM Module).   
+     * @param aType            MIME type of the object
+     * @param aResultsRef      Reference to correct results, i.e. this 
+     *                         reference must be used when returning the 
+     *                         result by calling the SetResultsL.
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+						   const TDesC8& aType, TInt aResultsRef,
+						   TInt aStatusRef );
+
+    /**
+     * The function fetches the size of the data of a leaf object. The size 
+     * is in bytes, and must reflect the number of bytes that will be 
+     * transferred when the framework calls FetchLeafObjectL. 
+	 *
+     * @since S60 v3.2
+     * @param aURI             URI of the object
+     * @param aLUID            LUID of the object (if the adapter have 
+     *                         earlier returned LUID to the DM Module).   
+     * @param aType            MIME type of the object
+     * @param aResultsRef      Reference to correct results, i.e. this 
+     *                         reference must be used when returning the 
+     *                         result by calling the SetResultsL.
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void FetchLeafObjectSizeL( const TDesC8& aURI, const TDesC8& aLUID,
+							   const TDesC8& aType, TInt aResultsRef,
+							   TInt aStatusRef );
+
+    /**
+     * The function fetches URI list. An adapter returns the list of URI 
+     * segments under the given URI be separated by slash ("/"). The URI 
+     * segment names for new objects must be given by the adapter.
+     * The list is returned by calling the SetResultsL function of 
+     * MSmlCallback callback interface. 
+	 *
+     * @since S60 v3.2
+     * @param aParentURI               URI of the parent object
+     * @param aParentLUID              LUID of the parent object (if the
+     *                                 adapter have earlier returned LUID to
+     *                                 the DM Module).   
+     * @param aPreviousURISegmentList  URI list with mapping LUID 
+     *                                 information, which is known by DM
+     *                                 engine.  
+     * @param aResultsRef              Reference to correct results, i.e. 
+     *                                 this reference must be used when 
+     *                                 returning the result by calling the 
+     *                                 SetResultsL.
+     * @param aStatusRef               Reference to correct command, i.e. 
+     *                                 this reference must be used when 
+     *                                 calling the SetStatusL of this 
+     *                                 command.
+    */
+    void ChildURIListL( const TDesC8& aURI, const TDesC8& aLUID,
+					    const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+					    TInt aResultsRef, TInt aStatusRef );
+
+    /**
+     * The function adds node object. 
+     *
+     * @since S60 v3.2
+     * @param aURI             URI of the object
+     * @param aParentLUID      LUID of the parent object (if the adapter have
+     *                         earlier returned LUID to the DM Module).   
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void AddNodeObjectL( const TDesC8& aURI, const TDesC8& aParentLUID,
+						 TInt aStatusRef );
+    /**
+     * The adapter does not support streaming and no implementation is 
+     * provided for this function.
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object
+     * @param aStream      Data of the object. 
+     * @param aType        MIME type of the object
+     * @param aStatusRef   Reference to correct command, i.e. this reference
+     *                     must be used when calling the SetStatusL of this
+     *                     command.
+    */
+    void UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+							RWriteStream*& aStream, const TDesC8& aType,
+		 					TInt aStatusRef );
+    /**
+     * The adapter does not support execute command and does not 
+     * provide implementation for this function. 
+     *
+     *  @since S60 v3.2
+     * @param aURI             URI of the command
+     * @param aLUID            LUID of the object
+     * @param aArgument        Argument for the command
+     * @param aType            MIME type of the object 
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID, 
+                          const TDesC8& aArgument, const TDesC8& aType, 
+                          TInt aStatusRef );
+    /**
+     * The adapter does not support execute command and does not 
+     * provide implementation for this function. 
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the command
+     * @param aLUID            LUID of the object 
+     * @param aStream      Argument for the command. 
+     * @param aType            MIME type of the object 
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID,
+						  RWriteStream*& aStream, const TDesC8& aType,
+						  TInt aStatusRef );
+    /**
+     * The adapter does not support copy command and does not 
+     * provide implementation for this function. 
+     *
+     * @since S60 v3.2
+     * @param aTargetURI       Target URI for the command
+     * @param aSourceLUID      LUID of the target object 
+     * @param aSourceURI       Source URI for the command
+     * @param aSourceLUID      LUID of the source object 
+     * @param aType            MIME type of the objects
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void CopyCommandL( const TDesC8& aTargetURI, const TDesC8& aTargetLUID, 
+                       const TDesC8& aSourceURI, const TDesC8& aSourceLUID, 
+                       const TDesC8& aType, TInt aStatusRef );
+    /**
+     * Not supported
+     *  @since S60 v3.2
+    */
+    void StartAtomicL();
+    /**
+     * Not Supported     
+     *  @since S60 v3.2
+     *
+    */
+    void CommitAtomicL();
+    /**
+ 	 * Not supported.
+     *  @since S60 v3.2
+     */
+    void RollbackAtomicL();
+    /**
+     * Returns EFalse as the adapter does not support streaming
+     *
+     * @since S60 v3.2
+     * @param aItemSize size limit for stream usage
+     * @return TBool EFalse as streaming is not supported
+    */
+    TBool StreamingSupport( TInt& aItemSize );
+    /**
+     * Not supported
+     *
+     *  @since S60 v3.2
+    */  
+    void StreamCommittedL();
+    /**
+     * The function tells the adapter that all the commands of the message 
+     * that can be passed to the adapter have now been passed.  This 
+     * indciates that the adapter must supply status codes and results to 
+     * any buffered commands. This must be done at latest by the time this 
+     * function returns. This function is used at the end of SyncML messages, 
+     * and during processing of Atomic.  
+     *
+     *  @since S60 v3.2
+    */
+    void CompleteOutstandingCmdsL();
+        
+    /**
+     * Converts integer to 8bit descriptor
+     *
+     *  @since S60 v3.2
+     * @param    aLuid The integer to be converted
+     * @return    The Integer as a descriptor
+     */
+    HBufC8* IntToDes8L( TInt aLuid) const;
+    
+    /**
+     * Converts 8bit descriptor to integer
+     *
+     *  @since S60 v3.2
+     * @param    aLuid The descriptor to be converted
+     * @return    Integer value of the descriptor
+     */
+    TUint DesToIntL(const TDesC8& aLuid) const;
+
+
+private:
+
+     /**
+     * Constructor
+     */
+    CNSmlDmAOAdapter();
+
+    /**
+     * Constructor
+     * @param aDmCallback Callback object to the framework
+     */
+    CNSmlDmAOAdapter( MSmlDmCallback* aDmCallback );   
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+     
+    /**
+     * Parses the last URI segment from URI
+     * @param    aURI The whole URI
+     * @return    The last URI segment
+     */
+    TPtrC8 LastURISeg(const TDesC8& aURI) const; 
+
+
+private: //data
+
+    /**
+     * Setting store object, which is called for managing settings 
+     * in CommsDat. Own.
+     */
+     CNSmlDmAOSettingStore * iSettingStore;
+        
+    };
+
+
+/**
+ *  CSmlDmAOCommandElement 
+ *
+ * Helper class, which stores a single command for a VENDORCONFIG. 
+ *  @lib nsmldmalwaysonadapter
+ *  @since S60 v3.2
+ */
+
+class CSmlDmAOCommandElement : public CBase
+    {
+
+public:
+
+    static CSmlDmAOCommandElement* NewLC( TBool aLeaf, 
+                                          TInt aStatusRef, 
+                                          TInt aResultRef, 
+                                          CNSmlDmAOAdapter::TCommandType  aCmdType, 
+                                          const TDesC8& aLastUriSeg, 
+                                          const TDesC8& aData );
+
+     ~CSmlDmAOCommandElement();
+
+    /**
+     * Returns the iExecuted member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iExecuted member value of the object
+     */
+    inline TBool Executed();
+
+    /**
+     * Sets the iExecuted member value of the object
+     *
+     * @since S60 v3.2
+     * @param aExecuted Executed value for the object. 
+     */    
+    inline void SetExecuted( TBool aExecuted );
+    
+    /**
+     * Returns the iStatus member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iStatus value of the object
+     */
+    inline CSmlDmAdapter::TError Status();
+    
+    /**
+     * Sets the iStatus member value of the object
+     *
+     * @since S60 v3.2
+     * @param aStatus Status value for the object. 
+     */    
+    inline void SetStatus( CSmlDmAdapter::TError aStatus ); 
+    
+    /**
+     * Returns the iLeaf member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iLeaf member value of the object
+     */
+    inline TBool Leaf();
+    
+    /**
+     * Returns the iStatusRef member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iStatusRef member value of the object
+     */
+    inline TInt StatusRef();
+    
+    /**
+     * Returns the iResultRef member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iResultRef member value of the object
+     */
+    inline TInt ResultRef();
+    
+    /**
+     * Returns the iCmdType member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iCmdType member value of the object
+     */
+    inline CNSmlDmAOAdapter::TCommandType  CmdType();        
+    
+    /**
+     * Returns the iData member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iData member value of the object
+     */
+    inline const HBufC8* Data();
+    
+    /**
+     * Returns the iLastUriSeg member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iLastUriSeg member value of the object
+     */
+    inline const HBufC8* LastUriSeg();
+    
+    /**
+     * Sets the iData member value of the object
+     *
+     * @since S60 v3.2
+     * @param aData Data set to the object. The data will be owned by 
+     * the command object. 
+     */    
+    inline void SetData( HBufC8* aData );
+
+private:
+
+    CSmlDmAOCommandElement( TBool aLeaf, 
+                            TInt aStatusRef, 
+                            TInt aResultRef, 
+                            CNSmlDmAOAdapter::TCommandType aCmdType );                              
+
+    void ConstructL( const TDesC8& aLastUriSeg, const TDesC8& aData );   
+
+    
+private: //data
+
+    /**
+     * Has command been executed. 
+     * Set to ETrue when command is executed.
+     */
+    TBool iExecuted;
+    
+    /**
+     * The execution status of an exeuted command. 
+     * Filled in when command is executed.
+     */    
+    CSmlDmAdapter::TError iStatus;
+    
+    
+    /**
+     * True if commend is for a leaf node, False if it is for a NAPDEF node.
+     */    
+    const TBool iLeaf;
+    
+    /**
+     * Reference for returning the status to DM framework.
+     */    
+    const TInt iStatusRef;
+    
+    /**
+     * Reference for returning result of Get command to the DM framework.
+     */    
+    const TInt iResultRef;
+    
+    /**
+     * Type of command.
+     */    
+    const CNSmlDmAOAdapter::TCommandType  iCmdType;        
+    
+
+    /**
+     * Data which is either ment to be stored to setting store 
+     * or which has been fetched from there. 
+     */
+    HBufC8* iData;
+
+    /**
+     * Last segment in the command URI, which indicates the leaf node 
+     * in question. For non leaf command empty string. 
+     */    
+    HBufC8* iLastUriSeg;
+
+    };
+    
+#include "nsmldmalwaysonadapter.inl"    
+
+#endif // NSMLDMALWAYSONADAPTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonadapter.inl	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,119 @@
+/*
+* 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:  Contains implementations of inline functions.
+*
+*/
+
+
+// -----------------------------------------------------------------------------
+// Returns the iExecuted member of the object
+// -----------------------------------------------------------------------------
+//
+TBool CSmlDmAOCommandElement::Executed()
+    {
+    return iExecuted;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns the iStatus member of the object
+// -----------------------------------------------------------------------------
+//
+CSmlDmAdapter::TError CSmlDmAOCommandElement::Status()
+    {
+    return iStatus;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iLeaf member of the object
+// -----------------------------------------------------------------------------
+//
+TBool CSmlDmAOCommandElement::Leaf()
+    {
+    return iLeaf;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iStatusRef member of the object
+// -----------------------------------------------------------------------------
+//
+TInt CSmlDmAOCommandElement::StatusRef()
+    {
+    return iStatusRef;    
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iResultRef member of the object
+// -----------------------------------------------------------------------------
+//
+TInt CSmlDmAOCommandElement::ResultRef()
+    {
+    return iResultRef;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iCmdType member of the object
+// -----------------------------------------------------------------------------
+//
+CNSmlDmAOAdapter::TCommandType  CSmlDmAOCommandElement::CmdType()
+    {
+    return iCmdType;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iData member of the object
+// -----------------------------------------------------------------------------
+//
+const HBufC8* CSmlDmAOCommandElement::Data()
+    {
+    return iData;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iLastUriSeg member of the object
+// -----------------------------------------------------------------------------
+//
+const HBufC8* CSmlDmAOCommandElement::LastUriSeg()
+    {
+    return iLastUriSeg;
+    }
+    
+// -----------------------------------------------------------------------------
+// Sets the iExecuted member of the object
+// -----------------------------------------------------------------------------
+//
+void CSmlDmAOCommandElement::SetExecuted( TBool aExecuted )
+    {
+    iExecuted = aExecuted;
+    }
+
+// -----------------------------------------------------------------------------
+// Sets the iStatus member of the object
+// -----------------------------------------------------------------------------
+//
+void CSmlDmAOCommandElement::SetStatus( CSmlDmAdapter::TError aStatus )
+    {
+    iStatus = aStatus;
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// Sets the iData member of the object. Ownership of aData argument will be 
+// transfered to the CSmlDmAOCommandElement
+// -----------------------------------------------------------------------------
+//
+void CSmlDmAOCommandElement::SetData( HBufC8* aData )
+    {
+    iData = aData;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/inc/nsmldmalwaysonsettingstore.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,165 @@
+/*
+* 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:  Manages always-on settings in Central Repository.
+*
+*/
+
+
+#ifndef NSMLDMALWAYSONSETTINGSTORE_H
+#define NSMLDMALWAYSONSETTINGSTORE_H
+
+#include "nsmldmalwaysonadapter.h"
+
+#include <centralrepository.h>
+
+const TInt KDefaultLuid = 1;
+
+class CNSmlDmAOAdapter;
+class CSmlDmAOCommandElement;
+
+/**
+ *  Setting Store is used for managing settings in CentralRepository
+ *
+ *  The class provides functions for executing commands 
+ *  and sets of commands that involve manipulation of 
+ *  data in CentralRepository. 
+ *
+ *  @lib nsmldmalwaysonadapter
+ *  @since S60 v3.2
+ */
+class CNSmlDmAOSettingStore : public CBase
+    {
+
+public:
+
+    static CNSmlDmAOSettingStore * NewL( CNSmlDmAOAdapter* aAdapter );
+
+    virtual ~CNSmlDmAOSettingStore();
+
+    /**
+     * Executes the argument command. 
+     *
+     * @since S60 v3.2
+     * @param aCmd Command to be executed
+     * @param aLUID LUID of the VENDORCONFIG which command is referring.
+     */
+     void ExecuteCmdL( CSmlDmAOCommandElement& aCmd, TUint aLuid);   
+
+    /**
+     * Fetches all VENDORCONFIGs and inserts id of each VENDORCONFIG
+     * into the argument array (in practise there is only one VENDORCONFIG)
+     *
+     * @since S60 v3.2
+     * @param aLUIDArray Array for VENDORCONFIG ids
+     */
+    void GetVendorConfigsL( RArray<TUint32>& aLUIDArray );
+ 
+private:
+
+    CNSmlDmAOSettingStore( CNSmlDmAOAdapter * aAdapter );
+
+    void ConstructL();
+
+//----------- Commands for managing leaf nodes -------------------//
+
+    /**
+     * Executes VENDORCONFIG commands. The valid commands include 
+     * get. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aLuid The id of the VENDORCONFIG
+     */
+    void ExecuteVendorConfigCmdL( CSmlDmAOCommandElement& aCmd, TUint aLuid );    
+
+    /**
+     * Executes NAME commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd    The command to be executed
+     * @param aCenrep Pointer to PdpContextManager2 repository
+     */
+    void ExecuteNameCmdL( CSmlDmAOCommandElement& aCmd, 
+                          CRepository*            aCenrep );
+
+
+    /**
+     * Executes AWON-PDPC commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aCenrep Pointer to PdpContextManager2 repository
+     */
+    void ExecuteAwonPdpcCmdL( CSmlDmAOCommandElement& aCmd, 
+                              CRepository*            aCenrep );
+
+
+    /**
+     * Executes T-RETRY commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aCenrep Pointer to PdpContextManager2 repository
+     */
+    void ExecuteTRetryCmdL( CSmlDmAOCommandElement& aCmd, 
+                            CRepository*            aCenrep );
+    
+     /**
+     * Parses integer from descriptor 
+     *
+     * @param aPtr Descriptor containing value
+     * @param aInt Value as integer
+     */                        
+    void ParseIntegerL( const TDesC& aPtr, TInt& aInt );
+    
+     /**
+     * Parses settings for home network and visited network 
+     *
+     * @param aInt Interger containing home & visited network setting
+     * @param aHplmn "1" when always-on enabled in hplmn, otherwise "0"
+     * @param aVplmn "1" when always-on enabled in vplmn, otherwise "0"
+     */
+    void ParseAwonPdpcValuesL( const TInt aInt, TInt& aHplmn, TInt& aVplmn );                        
+
+private: //data
+     
+    /**
+     * Pointer to the adapter. This is used for 
+     * querying data from DM framework when necessary
+     * and using helper functions. Not own.
+     */ 
+    CNSmlDmAOAdapter* iAdapter;
+
+  };
+
+
+#endif // NSMLDMALWAYSONSETTINGSTORE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/rom/nsmldmalwaysonadapter.iby	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* 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:  Image description file for project nsmldmalwaysonadapter
+*
+*/
+
+
+#ifndef NSMLDMALWAYSONADAPTER_IBY
+#define NSMLDMALWAYSONADAPTER_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+#ifdef __ALWAYS_ONLINE_PDPCONTEXT2 
+#ifdef __SYNCML_DM
+
+ECOM_PLUGIN( nsmldmalwaysonadapter.dll, nsmldmalwaysonadapter.rsc )
+
+#endif // __SYNCML_DM
+#endif // __ALWAYS_ONLINE_PDPCONTEXT2
+
+#endif // NSMLDMALWAYSONADAPTER_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/src/nsmldmalwaysonadapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,647 @@
+/*
+* 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:  Provides handling of Always-on settings in Device management.
+*
+*/
+
+
+#include <ecom/implementationproxy.h>
+
+#include "nsmldmalwaysonadapter.h"
+#include "logger.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// --------------------------------------------------------------------------
+// Maps plugin UID to its factory function (constructor)
+// --------------------------------------------------------------------------
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(0x101f6d36, 
+                               CNSmlDmAOAdapter::NewL)
+    };
+
+// --------------------------------------------------------------------------
+// For ecom plugin implementation
+// -------------------------------------------------------------------------
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::NewL
+// --------------------------------------------------------------------------
+CNSmlDmAOAdapter* CNSmlDmAOAdapter::NewL( MSmlDmCallback* aDmCallback )
+    {
+    LOGSTRING("CNSmlDmAOAdapter::NewL: Start");
+    
+    CNSmlDmAOAdapter* self = new (ELeave) CNSmlDmAOAdapter( aDmCallback );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    
+    LOGSTRING("CNSmlDmAOAdapter::NewL: End");
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::CNSmlDmAOAdapter
+// --------------------------------------------------------------------------
+
+CNSmlDmAOAdapter::CNSmlDmAOAdapter( MSmlDmCallback* aDmCallback ) 
+    : CSmlDmAdapter( aDmCallback )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::ConstructL
+// --------------------------------------------------------------------------
+void CNSmlDmAOAdapter::ConstructL()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::CNSmlDmAOAdapter: Start" );
+    
+    iSettingStore = CNSmlDmAOSettingStore::NewL( this );
+    
+    LOGSTRING( "CNSmlDmAOAdapter::CNSmlDmAOAdapter: End" );
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::~CNSmlDmAOAdapter
+// --------------------------------------------------------------------------
+CNSmlDmAOAdapter::~CNSmlDmAOAdapter()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::~CNSmlDmAOAdapter: Start" );    
+ 
+    //iBuffer.ResetAndDestroy();
+    //iBuffer.Close();
+    delete iSettingStore;
+ 
+    LOGSTRING( "CNSmlDmAOAdapter::~CNSmlDmAOAdapter: End" );
+    }
+    
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::DDFVersionL
+// Returns ddf version nr
+// --------------------------------------------------------------------------
+void CNSmlDmAOAdapter::DDFVersionL( CBufBase& aDDFVersion )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::DDFVersionL: Start" );
+ 
+    aDDFVersion.InsertL( 0, KNSmlDmAOAdapterDDFVersion );
+ 
+    LOGSTRING( "CNSmlDmAOAdapter::DDFVersionL:End" );
+    }
+   
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::DDFStructureL
+//  Constructs the DDF structure
+// --------------------------------------------------------------------------
+void CNSmlDmAOAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::DDFStructureL: Start" );
+    TSmlDmAccessTypes accessTypes;
+
+    // VENDORCONFIG
+    MSmlDmDDFObject& ao = aDDF.AddChildObjectL( KNSmlDmAOAdapterAO );
+    
+    accessTypes.SetGet();    
+    
+    ao.SetAccessTypesL( accessTypes );
+    ao.SetOccurenceL( MSmlDmDDFObject::EOne );
+    ao.SetScopeL( MSmlDmDDFObject::EPermanent );
+    ao.SetDFFormatL( MSmlDmDDFObject::ENode );
+    ao.AddDFTypeMimeTypeL( KNSmlDmAOAdapterTextPlain );
+    ao.SetDescriptionL( KNSmlDmAOAdapterAODescription );
+    accessTypes.Reset();
+
+    // VENDORCONFIG/Name
+    MSmlDmDDFObject& name = ao.AddChildObjectL( KNSmlDmAOAdapterName );
+    
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    accessTypes.SetAdd();
+    
+    name.SetAccessTypesL( accessTypes );
+    name.SetOccurenceL( MSmlDmDDFObject::EOne );
+    name.SetScopeL( MSmlDmDDFObject::EDynamic );
+    name.SetDFFormatL( MSmlDmDDFObject::EChr );
+    name.SetDescriptionL( KNSmlDmAOAdapterNameDescription );
+    accessTypes.Reset();
+
+    // VENDORCONFIG/AWON-PDPC
+    MSmlDmDDFObject& awonPdpc = 
+                          ao.AddChildObjectL( KNSmlDmAOAdapterAwonPdpc );
+    
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    accessTypes.SetAdd();
+    
+    awonPdpc.SetAccessTypesL( accessTypes );
+    awonPdpc.SetOccurenceL( MSmlDmDDFObject::EOne );
+    awonPdpc.SetScopeL( MSmlDmDDFObject::EDynamic );
+    awonPdpc.SetDFFormatL( MSmlDmDDFObject::EChr );
+    awonPdpc.SetDescriptionL( KNSmlDmAOAdapterAwonPdpcDescription );
+    accessTypes.Reset();
+        
+    // VENDORCONFIG/T-RETRY
+    MSmlDmDDFObject& tRetry = 
+                          ao.AddChildObjectL( KNSmlDmAOAdapterTRetry );
+    
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    accessTypes.SetAdd();
+    
+    tRetry.SetAccessTypesL( accessTypes );
+    tRetry.SetOccurenceL( MSmlDmDDFObject::EOne );
+    tRetry.SetScopeL( MSmlDmDDFObject::EDynamic );
+    tRetry.SetDFFormatL( MSmlDmDDFObject::EChr );
+    tRetry.SetDescriptionL( KNSmlDmAOAdapterTRetryDescription );
+    accessTypes.Reset();
+    
+    LOGSTRING( "CNSmlDmAOAdapter::DDFStructureL: End" );    
+    }
+
+// -------------------------------------------------------------------------
+// CNSmlDmAOAdapter::UpdateLeafObjectL
+// Adds or updates leaf node value. 
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+                                          const TDesC8& aLUID, 
+                                          const TDesC8& aObject, 
+                                          const TDesC8& /*aType*/, 
+                                          TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::UpdateLeafObjectL: Start" );
+    LOGSTRING4( "\tUpdateLeafObjectL  \tURI: %S, \n\tLUID: %S,\
+                         \tobject: %S ", 
+                        &aURI, &aLUID, &aObject );
+        
+	// execute command and return status  
+    CSmlDmAOCommandElement* cmd = 
+    CSmlDmAOCommandElement::NewLC( ETrue, 
+                                   aStatusRef,
+                                   KNSmlDmAOInvalidRef, 
+                                   CNSmlDmAOAdapter::EAddCmd,
+                                   LastURISeg( aURI ), 
+                                   aObject);
+    
+    TInt luid( KDefaultLuid );
+    
+    if ( aLUID.Length() > 0 )
+        {
+        luid = DesToIntL( aLUID );    
+        }
+                                                                                                     
+    iSettingStore->ExecuteCmdL( *cmd, luid );    
+    
+    LOGSTRING2( "\tCmd executed with status: %d", 
+                          cmd->Status() );
+    Callback().SetStatusL( aStatusRef, cmd->Status() );     
+    CleanupStack::PopAndDestroy( cmd );                
+        
+    LOGSTRING( "CNSmlDmAOAdapter::UpdateLeafObjectL: End" );    
+    }
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::DeleteObjectL
+// Not supported
+// --------------------------------------------------------------------------
+
+void CNSmlDmAOAdapter::DeleteObjectL( const TDesC8& /*aURI*/, 
+                                      const TDesC8& /*aLUID*/,
+						              TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::DeleteObjectL: Start" );
+    Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError); 
+    LOGSTRING( "CNSmlDmAOAdapter::DeleteObjectL: End" );
+    }
+    
+// -------------------------------------------------------------------------
+// CNSmlDmAOAdapter::FetchLeafObjectL
+// Fetches leaf object value.
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+                                         const TDesC8& aLUID, 
+                                         const TDesC8& /*aType*/, 
+                                         const TInt aResultsRef, 
+                                         const TInt aStatusRef )
+    {
+    LOGSTRING( "NSmlDmAOAdapter::FetchLeafObjectL: Start" );
+    LOGSTRING3( "\tFetchLeafObjectL  \tURI: %S, \tLUID: %S,", 
+                        &aURI, &aLUID );
+    
+    CSmlDmAOCommandElement* cmd = 
+    CSmlDmAOCommandElement::NewLC( ETrue, 
+                                   aStatusRef, 
+                                   aResultsRef, 
+                                   CNSmlDmAOAdapter::EGetCmd,
+                                   LastURISeg( aURI ), 
+                                   KNullDesC8);
+
+    TInt luid( KDefaultLuid );
+    
+    if ( aLUID.Length() > 0 )
+        {
+        luid = DesToIntL( aLUID );    
+        }
+        
+    iSettingStore->ExecuteCmdL( *cmd, luid );
+    LOGSTRING2( "\tCmd executed with status: %d ", 
+                          cmd->Status() );
+
+    // if executed return status
+    if ( cmd->Executed() ) 
+        {
+        Callback().SetStatusL( aStatusRef, cmd->Status() );            
+        // if successful set results
+        if ( cmd->Status() == CSmlDmAdapter::EOk )
+            {
+            LOGSTRING2( "\tCmd executed with result: %S ", 
+                                  cmd->Data() );
+            CBufBase* result = CBufFlat::NewL( cmd->Data()->Size() );
+            CleanupStack::PushL( result );
+            result->InsertL( 0, *cmd->Data() );
+            Callback().SetResultsL( aResultsRef, *result, KNullDesC8 );
+            CleanupStack::PopAndDestroy( result );
+            }
+        }
+    else
+        {
+        // failed to execute command
+        Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+        }
+    CleanupStack::PopAndDestroy( cmd );
+    
+    
+    LOGSTRING( "NSmlDmAOAdapter::FetchLeafObjectL: End" );
+    }
+
+// --------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::FetchLeafObjectSizeL
+//  Fetches leaf object size.
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
+                                             const TDesC8& aLUID,
+									         const TDesC8& /* aType */, 
+									         TInt aResultsRef,
+									         TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::FetchLeafObjectSizeL: Start" );
+    LOGSTRING3( "\tFetchLeafObjectSizeL  \tURI: %S, \tLUID: %S,", 
+                         &aURI, &aLUID );
+   
+    CSmlDmAOCommandElement* cmd = 
+    CSmlDmAOCommandElement::NewLC( ETrue, 
+                                   aStatusRef, 
+                                   aResultsRef, 
+                                   CNSmlDmAOAdapter::EGetSizeCmd,
+                                   LastURISeg( aURI ), 
+                                   KNullDesC8);
+                                   
+    TInt luid( KDefaultLuid );
+    
+    if ( aLUID.Length() > 0 )
+        {
+        luid = DesToIntL( aLUID );    
+        }
+                                       
+    iSettingStore->ExecuteCmdL( *cmd, luid );
+    
+    LOGSTRING2( "\tCmd executed with status: %d ", 
+                          cmd->Status() );
+    // if executed get status
+    if ( cmd->Executed() ) 
+        {
+        Callback().SetStatusL( aStatusRef, cmd->Status() );            
+        // if successful get results
+        if ( cmd->Status() == CSmlDmAdapter::EOk )
+            {
+            LOGSTRING2( "\tCmd executed with result: %S ", 
+                                  cmd->Data() );
+            CBufBase* result = CBufFlat::NewL( cmd->Data()->Size() );
+            CleanupStack::PushL( result );
+            result->InsertL( 0, *cmd->Data() );
+            Callback().SetResultsL( aResultsRef, *result, KNullDesC8 );
+            CleanupStack::PopAndDestroy( result );
+            }
+        }
+    else
+        {
+        // failed to execute command
+        Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+        }
+    
+    CleanupStack::PopAndDestroy( cmd );
+        
+    LOGSTRING( "CNSmlDmAOAdapter::FetchLeafObjectSizeL: End" );
+    }
+
+// ------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::ChildURIListL
+//  Fetches child nodes of a node. these may be either all VENDORCONFIG 
+//  nodes or leaf nodes under a VENDORCONFIG node. 
+// ------------------------------------------------------------------------
+void CNSmlDmAOAdapter::ChildURIListL( const TDesC8& aURI, 
+                                      const TDesC8& aLUID,
+					                  const CArrayFix<TSmlDmMappingInfo>& 
+					                  /*aPreviousURISegmentList*/,
+					                  TInt aResultsRef, 
+					                  TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::ChildURIListL: Start" );
+    LOGSTRING3( "\tChildURIListL  URI: %S, LUID: %S ", 
+                        &aURI, &aLUID );
+    
+    CBufBase* resultList = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( resultList );
+	
+	// get all leaf nodes below VENDORCONFIG node
+    if ( !aURI.Compare( KNSmlDmAOAdapterAO ) )
+        {        
+        CSmlDmAOCommandElement* cmd = 
+        CSmlDmAOCommandElement::NewLC( EFalse, 
+                                       aStatusRef,
+                                       aResultsRef, 
+                                       CNSmlDmAOAdapter::EGetCmd, 
+                                       KNullDesC8, 
+                                       KNullDesC8 );
+                                       
+        TInt luid( KDefaultLuid );
+    
+        if ( aLUID.Length() > 0 )
+            {
+            luid = DesToIntL( aLUID );    
+            }
+                                           
+        iSettingStore->ExecuteCmdL( *cmd, luid );
+        
+        LOGSTRING2( "\tCmd executed with status: %d ", 
+                              cmd->Status() );
+   
+        Callback().SetStatusL( aStatusRef, cmd->Status() );
+        if( cmd->Status() == CSmlDmAdapter::EOk )
+            {
+            resultList->InsertL( 0, *cmd->Data() );
+            Callback().SetResultsL( aResultsRef, 
+                                    *resultList, 
+                                    KNullDesC8 );
+            } 
+   
+        CleanupStack::PopAndDestroy( cmd );               
+        }        
+   
+    CleanupStack::PopAndDestroy( resultList );
+    LOGSTRING( "CNSmlDmAOAdapter::ChildURIListL: End" );
+    }
+ 
+// --------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::AddNodeObjectL
+//  Not supported
+// --------------------------------------------------------------------------
+void CNSmlDmAOAdapter::AddNodeObjectL( const TDesC8& /*aURI*/, 
+                                       const TDesC8& /*aParentLUID*/,
+								       TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::AddNodeObjectL: Start" );
+    Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    LOGSTRING( "CNSmlDmAOAdapter::AddNodeObjectL: End" );
+    }
+
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::UpdateLeafObjectL
+//  Not supported from stream
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */, 
+                                          const TDesC8& /* aLUID */, 
+                                          RWriteStream*& /* aStream */, 
+                                          const TDesC8& /* aType */, 
+                                          TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::UpdateLeafObjectL: Start" );
+    Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError);    
+    LOGSTRING( "CNSmlDmAOAdapter::UpdateLeafObjectL: End" );
+    }
+
+
+
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::ExecuteCommandL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::ExecuteCommandL( const TDesC8& /* aURI */, 
+                                        const TDesC8& /* aLUID */, 
+                                        const TDesC8& /* aArgument */, 
+                                        const TDesC8& /* aType */, 
+                                        TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::ExecuteCommandL: Start" );
+    Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError);    
+    LOGSTRING( "CNSmlDmAOAdapter::ExecuteCommandL: End" );
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::ExecuteCommandL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::ExecuteCommandL( const TDesC8& /* aURI */, 
+                                        const TDesC8& /* aLUID */, 
+                                        RWriteStream*& /* aStream */, 
+                                        const TDesC8& /* aType */, 
+                                        TInt aStatusRef )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::ExecuteCommandL: Start" );
+    Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );    
+    LOGSTRING( "CNSmlDmAOAdapter::ExecuteCommandL: End" );
+    }
+ 
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::CopyCommandL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::CopyCommandL( const TDesC8& /* aTargetURI */ , 
+                                     const TDesC8& /* aTargetLUID */ , 
+                                     const TDesC8& /* aSourceURI */ , 
+                                     const TDesC8& /* aSourceLUID */, 
+                                     const TDesC8& /* aType */ , 
+                                     TInt aStatusRef )
+    {
+    //not supported
+    LOGSTRING( "CNSmlDmAOAdapter::CopyCommandL: Sart" );
+    Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );    
+    LOGSTRING( "CNSmlDmAOAdapter::CopyCommandL: End" );
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::StartAtomicL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::StartAtomicL()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::StartAtomicL: Start" );
+    LOGSTRING( "CNSmlDmAOAdapter::StartAtomicL: End" );
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::CommitAtomicL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::CommitAtomicL()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::CommitAtomicL: Start" );
+    LOGSTRING( "CNSmlDmAOAdapter::CommitAtomicL: End" );
+    }
+
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::RollbackAtomicL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::RollbackAtomicL()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::RollbackAtomicL: Start" );
+    LOGSTRING( "CNSmlDmAOAdapter::RollbackAtomicL: End" );
+    }
+
+TBool CNSmlDmAOAdapter::StreamingSupport( TInt& /* aItemSize */ )
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::StreamingSupport: Start" );
+    LOGSTRING( "CNSmlDmAOAdapter::StreamingSupport: End" );
+    return EFalse;
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmAOAdapter::StreamCommittedL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::StreamCommittedL()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::StreamCommittedL: Start" );
+    LOGSTRING( "CNSmlDmAOAdapter::StreamCommittedL: End" );
+    }
+
+// -------------------------------------------------------------------------
+// CNSmlDmAOAdapter::CompleteOutstandingCmdsL
+// Buffering not needed because nodes can't be added
+// -------------------------------------------------------------------------
+void CNSmlDmAOAdapter::CompleteOutstandingCmdsL()
+    {
+    LOGSTRING( "CNSmlDmAOAdapter::CompleteOutstandingCmdsL: Start");
+    LOGSTRING( "CNSmlDmAOAdapter::CompleteOutstandingCmdsL: End" );    
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::IntToDes8L
+// Converts integer to 8bit descriptor
+// --------------------------------------------------------------------------
+HBufC8* CNSmlDmAOAdapter::IntToDes8L( TInt aLuid ) const
+    {
+    HBufC8* buf = HBufC8::NewL( 10 ); //10 = max length of 32bit integer
+    TPtr8 ptrBuf = buf->Des();
+    ptrBuf.Num( aLuid );
+    return buf;
+    }
+    
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::DesToIntL
+// Converts 8bit descriptor to int
+// --------------------------------------------------------------------------
+TUint CNSmlDmAOAdapter::DesToIntL( const TDesC8& aLuid ) const
+    {
+    TLex8 lex( aLuid );
+    TUint value( 0 );
+    User::LeaveIfError( lex.Val( value ) );
+    return value;
+    }        
+
+// --------------------------------------------------------------------------
+// CNSmlDmAOAdapter::LastURISeg
+// Returns the last uri segemnt of a uri. 
+// --------------------------------------------------------------------------
+TPtrC8 CNSmlDmAOAdapter::LastURISeg( const TDesC8& aURI ) const
+    {
+    TInt i;
+    for ( i=aURI.Length()-1; i >= 0; i-- )
+        {
+        if ( aURI[i]=='/' )
+            {
+            break;
+            }
+        }
+        
+    if ( i==0 )
+        {
+        return aURI;
+        }
+    else
+        {
+        return aURI.Mid( i + 1 );
+        }
+    }
+
+
+//---------------------- CSmlDmAOCommandElement -------------------------//
+
+// --------------------------------------------------------------------------
+// CSmlDmAOCommandElement* CSmlDmAOCommandElement::NewLC
+// --------------------------------------------------------------------------
+
+CSmlDmAOCommandElement* CSmlDmAOCommandElement::NewLC( TBool aLeaf,
+                                                       TInt aStatusRef, 
+                                                       TInt aResultRef, 
+                                                       CNSmlDmAOAdapter::TCommandType aCmdType,
+                                                       const TDesC8& aLastUriSeg, 
+                                                       const TDesC8& aData )
+    {
+    CSmlDmAOCommandElement* self = new (ELeave) CSmlDmAOCommandElement( aLeaf, 
+                                                                        aStatusRef, 
+                                                                        aResultRef, 
+                                                                        aCmdType );
+    CleanupStack::PushL(self);
+    self->ConstructL( aLastUriSeg, aData );
+    return self;
+    }    
+    
+// --------------------------------------------------------------------------
+// CSmlDmAOCommandElement::~CSmlDmAOCommandElement
+// --------------------------------------------------------------------------
+CSmlDmAOCommandElement::~CSmlDmAOCommandElement()
+    {
+    delete iLastUriSeg;
+    delete iData;
+    }
+    
+// --------------------------------------------------------------------------
+// CSmlDmAOCommandElement::CSmlDmAOCommandElement
+// --------------------------------------------------------------------------
+CSmlDmAOCommandElement::CSmlDmAOCommandElement( TBool aLeaf,
+                                                TInt aStatusRef, 
+                                                TInt aResultRef, 
+                                                CNSmlDmAOAdapter::TCommandType  aCmdType )
+                                                : iStatus( CSmlDmAdapter::EError ),
+                                                iLeaf( aLeaf ),
+                                                iStatusRef( aStatusRef ),
+                                                iResultRef( aResultRef ),
+                                                iCmdType( aCmdType ),
+                                                iData( NULL )
+                                                
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CSmlDmAOCommandElement::ConstructL
+// --------------------------------------------------------------------------
+void CSmlDmAOCommandElement::ConstructL( const TDesC8& aLastUriSeg, 
+                                         const TDesC8& aData )
+    {
+    iLastUriSeg = aLastUriSeg.AllocL();    
+    iData = aData.AllocL();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/src/nsmldmalwaysonadapter.rss	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,45 @@
+CHARACTER_SET UTF8/*
+* 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:  Resource definitions for project nsmldmalwaysonadapter
+*
+*/
+
+
+#include <ecom/registryinfo.rh>
+#include "nsmldmconstants.h"
+
+RESOURCE REGISTRY_INFO theRegistryInfo
+  {
+  dll_uid = 0x101f6d36; //The DLL's 3rd UID.
+  interfaces = 
+      {
+      INTERFACE_INFO
+          {
+          interface_uid = KNSmlDMInterfaceUid; //DM interface UID
+          implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x101f6d36; // adapter implementation UID
+                version_no = 1; 
+                display_name = "";
+                default_data = "";
+                opaque_data = "";
+                }
+            };
+          }
+      };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmalwaysonadapter/src/nsmldmalwaysonsettingstore.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,396 @@
+/*
+* 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:  Provides settings management in Central Repository.
+*
+*/
+
+
+
+#include <utf.h>
+#include <pdpcontextmanagerinternalcrkeys.h>
+
+#include "nsmldmalwaysonsettingstore.h"
+#include "nsmldmalwaysonadapter.h"
+#include "logger.h"
+
+// AWON-PDPC
+// Values are XY, where X is related to 3G flag and Y is related to 2G flag.
+// Possible values are:
+// "00", AlwaysOn is OFF for both 3G and 2G
+// "10", AlwaysOn is ON for 3G, OFF for 2G
+// "01", AlwaysOn is OFF for 3G, ON for 2G
+// "11", AlwaysOn is ON for 3G, ON for 2G
+const TInt KAwonPdpc_Off3G_Off2G = 00;
+const TInt KAwonPdpc_Off3G_On2G  = 01;
+const TInt KAwonPdpc_On3G_Off2G  = 10;
+const TInt KAwonPdpc_On3G_On2G   = 11;
+
+const TInt KBufSize = 10;
+
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::NewL
+// -----------------------------------------------------------------------------
+CNSmlDmAOSettingStore* CNSmlDmAOSettingStore::NewL( CNSmlDmAOAdapter * aAdapter )
+    {
+    CNSmlDmAOSettingStore* self = new (ELeave) CNSmlDmAOSettingStore( aAdapter );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::CNSmlDmAOSettingStore
+// -----------------------------------------------------------------------------
+CNSmlDmAOSettingStore::CNSmlDmAOSettingStore( CNSmlDmAOAdapter * aAdapter ) 
+    : iAdapter( aAdapter )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ConstructL
+// -----------------------------------------------------------------------------
+void CNSmlDmAOSettingStore::ConstructL()
+    {   
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::~CNSmlDmAOSettingStore
+// -----------------------------------------------------------------------------
+CNSmlDmAOSettingStore::~CNSmlDmAOSettingStore()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ExecuteCmdL
+// Executes a single command
+// -----------------------------------------------------------------------------
+void CNSmlDmAOSettingStore::ExecuteCmdL( CSmlDmAOCommandElement& aCmd, TUint aLuid)
+    {   
+    if( !aCmd.Leaf() )
+        {
+        ExecuteVendorConfigCmdL( aCmd, aLuid );
+        }
+    else 
+        {
+        CRepository* cenrep = CRepository::NewL( KCRUidPDPContextManager );
+        CleanupStack::PushL( cenrep );
+        
+        // name
+        if ( !aCmd.LastUriSeg()->Compare( KNSmlDmAOAdapterName ) )
+            {
+            ExecuteNameCmdL( aCmd, cenrep );            
+            }
+        // awon-pdpc
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmAOAdapterAwonPdpc ) )
+            {
+            ExecuteAwonPdpcCmdL( aCmd, cenrep );
+            } 
+        // t-retry
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmAOAdapterTRetry ) )
+            {
+            ExecuteTRetryCmdL( aCmd, cenrep ); 
+            } 
+        else
+            {
+            // invalid node
+            LOGSTRING( "ExecuteCmdL: Error, Invalid node name" );
+            aCmd.SetStatus( CSmlDmAdapter::ENotFound );
+            }
+                         				    
+        aCmd.SetExecuted( ETrue );
+        
+        CleanupStack::PopAndDestroy( cenrep );    
+        }   
+    }    
+
+	 
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::GetVendorConfigsL
+// Fetches all VENDORCONFIG ids
+// -----------------------------------------------------------------------------
+void CNSmlDmAOSettingStore::GetVendorConfigsL( RArray<TUint32>& aLUIDArray )
+        {
+        // Only one VENDORCONFIG node possible at the moment
+        aLUIDArray.Append( KDefaultLuid );
+        }
+ 
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ExecuteVendorConfigCmdL
+// Executes a command for VENDORCONFIG node. Either delete or get, adds are handled 
+// in StoreVendorConfigL
+// -----------------------------------------------------------------------------
+void CNSmlDmAOSettingStore::ExecuteVendorConfigCmdL( CSmlDmAOCommandElement& aCmd, 
+                                                     TUint /*aLuid*/ )
+    {
+    
+    if ( aCmd.CmdType() == CNSmlDmAOAdapter::EGetCmd )
+        {
+        aCmd.SetData( KNSmlDmAOAllLeafNodes().AllocL() );
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else if ( aCmd.CmdType() == CNSmlDmAOAdapter::EDeleteCmd )
+        {
+        // Should not be possible to delete
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else
+        {
+        LOGSTRING( "ExecuteVendorConfigCmdL: Error, Invalid cmd type" );
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ExecuteNameCmdL
+// Executes NAME command (add or get )
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmAOSettingStore::ExecuteNameCmdL( CSmlDmAOCommandElement& aCmd, 
+                                             CRepository*         /*aCenrep*/ )
+    {
+    if ( aCmd.CmdType() == CNSmlDmAOAdapter::EAddCmd )
+        {
+        HBufC* name = HBufC::NewLC( aCmd.Data()->Size() );
+        TPtr namePtr = name->Des();
+        CnvUtfConverter::ConvertToUnicodeFromUtf8( namePtr, *aCmd.Data() );
+
+        // name is not written to the CentralRepository
+        // Add write to CR here
+
+        CleanupStack::PopAndDestroy( name );
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        }        		
+    else if ( aCmd.CmdType() == CNSmlDmAOAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmAOAdapter::EGetSizeCmd )
+        {
+        // name is not written/read to/from the CentralRepository
+        // Add read from CR here
+        
+        //HBufC* data = ...read name
+        
+        //HBufC8* data8 = HBufC8::NewLC( data->Size() );
+        //TPtr8 toPtr = data8->Des();        
+        //CnvUtfConverter::ConvertFromUnicodeToUtf8( toPtr, *data );
+        //aCmd.SetData( data8 );
+        //CleanupStack::Pop( data8 );
+        //CleanupStack::PopAndDestroy( data );
+
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        
+        //if( aCmd.CmdType() == CNSmlDmAOAdapter::EGetSizeCmd )
+        //    {            
+        //    HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+        //    aCmd.SetData( size );
+        //    }                
+        
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else    
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        LOGSTRING( "ExecuteNameCmdL: Error, Only Add, Get and Get size commands supported" );
+        }  
+    }
+    
+// ---------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ExecuteAwonPdpcCmdL
+// Executes AWON-PDPC command (add or get )
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmAOSettingStore::ExecuteAwonPdpcCmdL( CSmlDmAOCommandElement& aCmd, 
+                                                 CRepository*         aCenrep )
+    {
+    if ( aCmd.CmdType() == CNSmlDmAOAdapter::EAddCmd )
+        {
+        HBufC* data = HBufC::NewLC( aCmd.Data()->Size() );
+        TPtr dataPtr = data->Des();
+        CnvUtfConverter::ConvertToUnicodeFromUtf8( dataPtr, *aCmd.Data() );
+
+        // write to the CentralRepository
+        TInt value( 0 );
+        TInt hplmn( 0 );
+        TInt vplmn( 0 );
+        
+        ParseIntegerL( dataPtr, value );
+        ParseAwonPdpcValuesL( value, hplmn, vplmn );
+        
+        User::LeaveIfError( aCenrep->Set( KPDPContextManagerEnableWhenHome,
+        hplmn ) );
+        User::LeaveIfError( aCenrep->Set( KPDPContextManagerEnableWhenRoaming,
+        vplmn ) );
+
+        CleanupStack::PopAndDestroy( data );
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        }        		
+    else if ( aCmd.CmdType() == CNSmlDmAOAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmAOAdapter::EGetSizeCmd )
+        {
+        // read from CentralRepository
+        TInt hplmn( 0 );
+        TInt vplmn( 0 );
+        
+        User::LeaveIfError(
+        aCenrep->Get( KPDPContextManagerEnableWhenHome, hplmn ) );
+        User::LeaveIfError(
+        aCenrep->Get( KPDPContextManagerEnableWhenRoaming, vplmn ) );
+        
+        HBufC* data    = HBufC::NewLC( KBufSize );
+        TPtr   dataPtr = data->Des();
+        
+        dataPtr.Zero();
+        dataPtr.FillZ();
+        dataPtr.AppendNum( hplmn );
+        dataPtr.AppendNum( vplmn );
+        
+        HBufC8* data8 = HBufC8::NewLC( data->Size() );
+        TPtr8 toPtr = data8->Des();        
+        CnvUtfConverter::ConvertFromUnicodeToUtf8( toPtr, *data );
+        aCmd.SetData( data8 );
+        CleanupStack::Pop( data8 );
+        CleanupStack::PopAndDestroy( data );
+
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmAOAdapter::EGetSizeCmd )
+            {            
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            aCmd.SetData( size );
+            }                
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else    
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        LOGSTRING( "ExecuteNameCmdL: Error, Only Add, Get and Get size commands supported" );
+        }  
+    }
+    
+ // ---------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ExecuteTRetryCmdL
+// Executes T-RETRY command (add or get )
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmAOSettingStore::ExecuteTRetryCmdL( CSmlDmAOCommandElement& aCmd, 
+                                               CRepository*            aCenrep )
+    {
+    if ( aCmd.CmdType() == CNSmlDmAOAdapter::EAddCmd )
+        {
+        HBufC* data = HBufC::NewLC( aCmd.Data()->Size() );
+        TPtr dataPtr = data->Des();
+        CnvUtfConverter::ConvertToUnicodeFromUtf8( dataPtr, *aCmd.Data() );
+
+        // write to the CentralRepository
+        TInt value( 0 );
+        ParseIntegerL( dataPtr, value );
+        
+        User::LeaveIfError( aCenrep->Set( KPDPContextManagerRetryTimer,
+                            value ) );
+
+        CleanupStack::PopAndDestroy( data );
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        }        		
+    else if ( aCmd.CmdType() == CNSmlDmAOAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmAOAdapter::EGetSizeCmd )
+        {
+        // Read from CentralRepository
+        TInt value( 0 );
+        User::LeaveIfError( aCenrep->Get( KPDPContextManagerRetryTimer,
+                            value ) );
+        
+        HBufC* data    = HBufC::NewLC( KBufSize );
+        TPtr   dataPtr = data->Des();
+        
+        dataPtr.Zero();
+        dataPtr.FillZ();
+        dataPtr.AppendNum( value );
+        
+        HBufC8* data8 = HBufC8::NewLC( data->Size() );
+        TPtr8 toPtr = data8->Des();        
+        CnvUtfConverter::ConvertFromUnicodeToUtf8( toPtr, *data );
+        aCmd.SetData( data8 );
+        CleanupStack::Pop( data8 );
+        CleanupStack::PopAndDestroy( data );
+
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmAOAdapter::EGetSizeCmd )
+            {            
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            aCmd.SetData( size );
+            }                
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else    
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        LOGSTRING( "ExecuteNameCmdL: Error, Only Add, Get and Get size commands supported" );
+        }  
+    }
+    
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ParseIntegerL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDmAOSettingStore::ParseIntegerL( const TDesC& aPtr, TInt& aInt )
+    {
+    TLex lex( aPtr );
+    User::LeaveIfError( lex.Val( aInt ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmAOSettingStore::ParseAwonPdpcValuesL
+// -----------------------------------------------------------------------------
+//
+void CNSmlDmAOSettingStore::ParseAwonPdpcValuesL( const TInt aInt,
+                                                  TInt& aHplmn,
+                                                  TInt& aVplmn )
+    {
+    switch( aInt )
+        {
+        case KAwonPdpc_Off3G_Off2G:
+            aHplmn = 0;
+            aVplmn = 0;
+            break;
+        case KAwonPdpc_Off3G_On2G:
+            aHplmn = 0;
+            aVplmn = 1;
+            break;
+        case KAwonPdpc_On3G_Off2G:
+            aHplmn = 1;
+            aVplmn = 0;
+            break;
+        case KAwonPdpc_On3G_On2G:
+            aHplmn = 1;
+            aVplmn = 1;
+            break;
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+        }
+    }           
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/group/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006-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:   Build information file for project nsmldmbmadapter
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+nsmldmbmadapter.mmp
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/group/nsmldmbmadapter.mmp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2006 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:   Project definition file for project nsmldmbmadapter
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <defaultcaps.hrh>
+
+TARGET                  nsmldmbmadapter.dll
+TARGETTYPE              PLUGIN
+UID                     0x10009d8d 0x101f6d2f
+
+CAPABILITY              CAP_ECOM_PLUGIN
+VENDORID                VID_DEFAULT
+
+SOURCEPATH              ../src
+SOURCE                  nsmldmbmadapter.cpp
+SOURCE                  nsmldmbmsettingstore.cpp
+
+START RESOURCE          nsmldmbmadapter.rss
+END
+
+//LANG sc
+
+USERINCLUDE             ../inc
+
+//Default system include paths for middleware layer modules
+MW_LAYER_SYSTEMINCLUDE
+
+SYSTEMINCLUDE 	/epoc32/include/ecom
+
+LIBRARY        euser.lib ecom.lib cmmanagerdatabase.lib cmmanager.lib charconv.lib flogger.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/inc/bmadapterlogger.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2006 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:   Logging functions for the component.
+*
+*/
+
+
+
+#ifndef BMADAPTERLOGGER_H
+#define BMADAPTERLOGGER_H
+
+#ifndef _DEBUG
+
+// UREL BUILD:
+#define BMADAPTER_LOGGING_METHOD  0   // No logging in UREL builds
+
+#else
+
+// UDEB BUILD:
+#define BMADAPTER_LOGGING_METHOD  1     // 0 = No logging,
+                                        // 1 = Flogger,
+                                        // 2 = RDebug
+#endif // _DEBUG
+
+
+#if BMADAPTER_LOGGING_METHOD == 1 // Flogger
+
+#include <flogger.h>
+_LIT(KBMADAPTERLOGFolder,"NSMLDMBMADAPTER");
+_LIT(KBMADAPTERLOGFile,"NSMLDMBMADAPTER.txt");
+
+#define BMADAPTERLOGTEXT(x)\
+    {\
+    RFileLogger::Write(KBMADAPTERLOGFolder(),KBMADAPTERLOGFile(),EFileLoggingModeAppend,\
+    x);\
+    }
+
+#define BMADAPTERLOGSTRING(x)\
+    {\
+    _LIT8(tempLogDes,x);\
+    RFileLogger::Write(KBMADAPTERLOGFolder(),KBMADAPTERLOGFile(),EFileLoggingModeAppend,\
+    tempLogDes());\
+    }
+
+#define BMADAPTERLOGSTRING2(x,y)\
+    { _LIT8(tempLogDes,x);\
+    RFileLogger::WriteFormat(KBMADAPTERLOGFolder(),\
+                             KBMADAPTERLOGFile(),\
+                             EFileLoggingModeAppend,\
+                             TRefByValue<const TDesC8>(tempLogDes()),y);\
+    }
+
+#define BMADAPTERLOGSTRING3(x,y,z)\
+    { _LIT8(tempLogDes,x);\
+    RFileLogger::WriteFormat(KBMADAPTERLOGFolder(),\
+                             KBMADAPTERLOGFile(),\
+                             EFileLoggingModeAppend,\
+    TRefByValue<const TDesC8>(tempLogDes()),y,z);\
+    }
+
+#define BMADAPTERLOGSTRING4(w,x,y,z)\
+    { _LIT8(tempLogDes,w);\
+    RFileLogger::WriteFormat(KBMADAPTERLOGFolder(),\
+                             KBMADAPTERLOGFile(),\
+                             EFileLoggingModeAppend,\
+    TRefByValue<const TDesC8>(tempLogDes()),x,y,z);\
+    }
+
+
+#elif BMADAPTER_LOGGING_METHOD == 2    // RDebug
+
+#include <e32svr.h>
+
+#define BMADAPTERLOGSTRING(x) RDebug::Print(x);
+#define BMADAPTERLOGSTRING(x) RDebug::Print(_L(x));
+#define BMADAPTERLOGSTRING2(x,y) RDebug::Print(_L(x),y);
+#define BMADAPTERLOGSTRING3(x,y,z) RDebug::Print(_L(x),y,z);
+#define BMADAPTERLOGSTRING4(w,x,y,z) RDebug::Print(_L(w),x,y,z);
+
+#else // BMADAPTER_LOGGING_METHOD == 0 or invalid
+
+#define BMADAPTERLOGSTRING(x)
+#define BMADAPTERLOGSTRING(x)
+#define BMADAPTERLOGSTRING2(x,y)
+#define BMADAPTERLOGSTRING3(x,y,z)
+#define BMADAPTERLOGSTRING4(w,x,y,z)
+
+#endif // BMADAPTER_LOGGING_METHOD
+
+#endif  // BMADAPTERLOGGER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmadapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,887 @@
+/*
+* Copyright (c) 2006 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:   Device management adapter handling bearer management related settings
+*
+*/
+
+
+
+
+#ifndef NSMLDMBMADAPTER_H
+#define NSMLDMBMADAPTER_H
+
+#include <smldmadapter.h>
+
+#include "nsmldmbmsettingstore.h"
+
+class CSmlDmBmCommandElement;
+class CSmlDmBmSettingsElement;
+class CNSmlDmBmSettingStore;
+
+/**  The DDF version must be changed if any changes in DDF structure 
+( built in DDFStructureL() function ) */
+_LIT8( KNSmlDmBMAdapterDDFVersion, "1.1" ); 
+_LIT8( KNSmlDmBMAdapterTextPlain, "text/plain" );
+
+/** Names of the nodes */
+/** When updating KNSmlDmBMAdapterBMURI also update 
+KNSmlDmBmAdapterURIMaxLength! */
+_LIT8(KNSmlDmBMAdapterBMURI, "./BearerManagementSNAP");
+_LIT8(KNSmlDmBMAdapterBM, "BearerManagementSNAP");
+_LIT8(KNSmlDmBMAdapterName, "Name");
+_LIT8(KNSmlDmBMAdapterIAPPriorityList, "IAPPriorityList");
+_LIT8(KNSmlDmBMAdapterEmbeddedSNAP, "EmbeddedSNAP");
+_LIT8(KNSmlDmBMAdapterMetadata, "Metadata");
+_LIT8(KNSmlDmBMAdapterProtected, "Protected");
+_LIT8(KNSmlDmBMAdapterHidden, "Hidden");
+
+/** Descriptions of the nodes */
+_LIT8( KNSmlDmBMAdapterBMDescription, 
+       "BearerManagement provides management of Access Point groups (SNAPs)");
+_LIT8( KNSmlDmBMAdapterDynamicDescription, 
+       "Node presents a group of Access Points (SNAP)");
+_LIT8( KNSmlDmBMAdapterNameDescription, 
+       "Name of the Access Point group");
+_LIT8( KNSmlDmBMAdapterIAPPriorityListDescription, 
+       "Comma separated list of Access Point URIs in priority order.");
+_LIT8( KNSmlDmBMAdapterEmbeddedSNAPDescription, 
+       "URI of embedded Access Point group. All Access points of the Embedded \
+       SNAP are seen as also belonging to this SNAP");
+_LIT8( KNSmlDmBMAdapterMetadataDescription, 
+       "32 bit integer representing SNAP metadata. Following bitmasks indicate \
+       meaning of the individual bits: \n 0x00000001 \t Internet: The SNAP is \
+       the Internet SNAP. This may only be set to one SNAP object.\n \
+       0x00000002\tHighlight: SNAP is highlighted in certain UI dialog.\n \
+       0x00000004\tHidden: SNAP is hidden in certain UI dialog.");
+_LIT8( KNSmlDmBMAdapterProtectedDescription, 
+       "SNAP is protected with one of the following protection levels. \
+       Protected object can not be modified without NetworkControl capability \n \
+       0 \t No protection \n 1 \t SNAP and related objects \n \
+       2 \t SNAP name is protected.");
+_LIT8( KNSmlDmBMAdapterHiddenDescription, 
+       "SNAP is set as hidden in the setting store");
+
+/** Leaf nodes of snap node */
+_LIT8( KNSmlDmBMAllLeafNodes, 
+       "Name/IAPPriorityList/Metadata/Protected/Hidden/EmbeddedSNAP");
+_LIT8( KNSmlDmBMAllLeafNodesNoEmbedded, 
+       "Name/IAPPriorityList/Metadata/Protected/Hidden");
+
+/** URI of for fetching IAP nodes */
+/** When updating KNSmlDmBMAdapterIAPURI also update 
+KNSmlDmBmAdapterAPURIMaxLength! */
+_LIT8( KNSmlDmBMAdapterIAPURI, "./AP" );
+/** Node name of AP adapter root */
+_LIT8( KNSmlDmBMAdapterIAPNode, "AP" );
+/** URI segment separator */
+/** When updating this literal also update 
+KNSmlDmBmAdapterAPURIMaxLength and KNSmlDmBmAdapterURIMaxLength! */
+_LIT8( KNSmlDmBmSeparator, "/" );
+/** URI segment separator */
+/** When updating KNSmlDmBMAdapterBMURI also update 
+KNSmlDmBmAdapterAPURIMaxLength and KNSmlDmBmAdapterURIMaxLength! */
+_LIT8( KNSmlDmBmUriListSeparator, "," );
+/** Prefix in URIs (removed for LUID mapping) */
+_LIT8( KNSmlDmBmAdapterURIPrefix, "./" );
+
+/** Name prefix for unnamed snap nodes */
+_LIT8( KNSmlDmBMSNAPNamePrefix, "SNAP" );
+_LIT8( KNSmlDmBMBooleanTrue, "True" );
+_LIT8( KNSmlDmBMBooleanFalse, "False" );
+
+
+const TInt KNSmlDmBMGranularity = 4;
+const TInt KNsmlDmBmSNAPNodeDepth = 2;
+const TInt KNSmlDmBmInvalidRef = -1;
+
+/** Maximum length of snap URI including a separator character in URI List.
+Node is not calculated here. KNSmlDmBMAdapterBMURI + KNSmlDmBmSeparator + 
+KNSmlDmBmUriListSeparator
+*/
+const TInt KNSmlDmBmAdapterURIMaxLength =  24;
+
+/** Maximum length of AP URI including a separator character in URI List.
+Node is not calculated here. KNSmlDmBMAdapterIAPURI + KNSmlDmBmSeparator + 
+KNSmlDmBmUriListSeparator
+*/
+const TInt KNSmlDmBmAdapterAPURIMaxLength = 6;
+
+/** Maximum length of 32bit integer */
+const TInt KMaxLengthOf32bitInteger = 10;
+
+/**
+ *  Bearer Management device management adapter
+ *
+ *  Bearer Management device management adapter manages settings
+ *  related to Service Network Access Points (SNAPs) which are
+ *  used for groupin IAPs
+ *
+ *  @lib nsmldmbmadapter
+ *  @since S60 v3.2
+ */
+class CNSmlDmBmAdapter : public CSmlDmAdapter
+    {
+    
+public:
+
+/** Possible command types */
+enum TCommandType
+    {
+    EAddCmd,
+    EGetCmd,
+    EGetSizeCmd,
+    EDeleteCmd
+    };
+
+    /**
+     * Two-phased constructor.
+     */
+    static CNSmlDmBmAdapter* NewL( MSmlDmCallback* aDmCallback );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CNSmlDmBmAdapter();
+
+
+// from base class CSmlDmAdapter
+
+    /**
+     *  The function returns current version of the DDF. 
+     *
+     *  @since S60 v3.2
+     *  @param aDDFVersion DDF version of the
+     *  adapter. (filled by the adapter) 
+     */
+    void DDFVersionL( CBufBase& aDDFVersion );
+
+    /**
+     *  The function for filling the DDF structure of the adapter
+     *
+     *  @since S60 v3.2
+     *  @param aDDF Reference to root object.
+    */
+    void DDFStructureL( MSmlDmDDFObject& aDDF );
+
+    /**
+     * The function creates new leaf objects, or replaces data in existing 
+     * leaf objects. The information about the success of the command is
+     * returned by calling SetStatusL function of MSmlDmCallback callback
+     * interface. 
+     *     
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object 
+     * @param aObject      Data of the object.
+     * @param aType        MIME type of the object
+     * @param aStatusRef   Reference to correct command, i.e. this reference
+     *                     must be used when calling the SetStatusL of this 
+     *                     command
+    */
+    void UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+                            const TDesC8& aObject, const TDesC8& aType,
+                            TInt aStatusRef );
+    /**
+     * The function deletes an object and its child objects. 
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object (if the adapter have earlier 
+     *                     returned LUID to the DM Module).
+     * @param aStatusRef   Reference to correct command, i.e. this reference 
+     *                     must be used when calling the SetStatusL of this 
+     *                     command.
+    */
+    void DeleteObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+                        TInt aStatusRef );
+
+    /**
+     * The function fetches data of a leaf object. The SetStatusL is used
+     * as described in UpdateLeafObjectL(). The data is returned by using the
+     * SetResultsL function of MSmlCallback callback interface.
+     *
+     * @since S60 v3.2
+     * @param aURI             URI of the object
+     * @param aLUID            LUID of the object (if the adapter have 
+     *                         earlier returned LUID to the DM Module). 
+     * @param aType            MIME type of the object
+     * @param aResultsRef      Reference to correct results, i.e. this 
+     *                         reference must be used when returning the 
+     *                         result by calling the SetResultsL.
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void FetchLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+                           const TDesC8& aType, TInt aResultsRef,
+                           TInt aStatusRef );
+
+    /**
+     * The function fetches the size of the data of a leaf object. The size 
+     * is in bytes, and must reflect the number of bytes that will be 
+     * transferred when the framework calls FetchLeafObjectL. 
+     *
+     * @since S60 v3.2
+     * @param aURI             URI of the object
+     * @param aLUID            LUID of the object (if the adapter have 
+     *                         earlier returned LUID to the DM Module).   
+     * @param aType            MIME type of the object
+     * @param aResultsRef      Reference to correct results, i.e. this 
+     *                         reference must be used when returning the 
+     *                         result by calling the SetResultsL.
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void FetchLeafObjectSizeL( const TDesC8& aURI, const TDesC8& aLUID,
+                               const TDesC8& aType, TInt aResultsRef,
+                               TInt aStatusRef );
+
+    /**
+     * The function fetches URI list. An adapter returns the list of URI 
+     * segments under the given URI be separated by slash ("/"). The URI 
+     * segment names for new objects must be given by the adapter.
+     * The list is returned by calling the SetResultsL function of 
+     * MSmlCallback callback interface. 
+     *
+     * @since S60 v3.2
+     * @param aURI                     URI of the parent object
+     * @param aLUID                    LUID of the parent object (if the
+     *                                 adapter have earlier returned LUID to
+     *                                 the DM Module).   
+     * @param aPreviousURISegmentList  URI list with mapping LUID 
+     *                                 information, which is known by DM
+     *                                 engine.  
+     * @param aResultsRef              Reference to correct results, i.e. 
+     *                                 this reference must be used when 
+     *                                 returning the result by calling the 
+     *                                 SetResultsL.
+     * @param aStatusRef               Reference to correct command, i.e. 
+     *                                 this reference must be used when 
+     *                                 calling the SetStatusL of this 
+     *                                 command.
+    */
+    void ChildURIListL( const TDesC8& aURI, const TDesC8& aLUID,
+                        const CArrayFix<TSmlDmMappingInfo>& aPreviousURISegmentList,
+                        TInt aResultsRef, TInt aStatusRef );
+
+    /**
+     * The function adds node object. 
+     *
+     * @since S60 v3.2
+     * @param aURI             URI of the object
+     * @param aParentLUID      LUID of the parent object (if the adapter have
+     *                         earlier returned LUID to the DM Module).   
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void AddNodeObjectL( const TDesC8& aURI, const TDesC8& aParentLUID,
+                         TInt aStatusRef );
+    /**
+     * The adapter does not support streaming and no implementation is 
+     * provided for this function.
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the object
+     * @param aLUID        LUID of the object
+     * @param aStream      Data of the object. 
+     * @param aType        MIME type of the object
+     * @param aStatusRef   Reference to correct command, i.e. this reference
+     *                     must be used when calling the SetStatusL of this
+     *                     command.
+    */
+    void UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID,
+                            RWriteStream*& aStream, const TDesC8& aType,
+                            TInt aStatusRef );
+    /**
+     * The adapter does not support execute command and does not 
+     * provide implementation for this function. 
+     *
+     *  @since S60 v3.2
+     * @param aURI             URI of the command
+     * @param aLUID            LUID of the object
+     * @param aArgument        Argument for the command
+     * @param aType            MIME type of the object 
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID, 
+                          const TDesC8& aArgument, const TDesC8& aType, 
+                          TInt aStatusRef );
+    /**
+     * The adapter does not support execute command and does not 
+     * provide implementation for this function. 
+     *
+     * @since S60 v3.2
+     * @param aURI         URI of the command
+     * @param aLUID            LUID of the object 
+     * @param aStream      Argument for the command. 
+     * @param aType            MIME type of the object 
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID,
+                          RWriteStream*& aStream, const TDesC8& aType,
+                          TInt aStatusRef );
+    /**
+     * The adapter does not support copy command and does not 
+     * provide implementation for this function. 
+     *
+     * @since S60 v3.2
+     * @param aTargetURI       Target URI for the command
+     * @param aTargetLUID      LUID of the target object 
+     * @param aSourceURI       Source URI for the command
+     * @param aSourceLUID      LUID of the source object 
+     * @param aType            MIME type of the objects
+     * @param aStatusRef       Reference to correct command, i.e. this 
+     *                         reference must be used when calling the 
+     *                         SetStatusL of this command.
+    */
+    void CopyCommandL( const TDesC8& aTargetURI, const TDesC8& aTargetLUID, 
+                       const TDesC8& aSourceURI, const TDesC8& aSourceLUID, 
+                       const TDesC8& aType, TInt aStatusRef );
+    /**
+     * Not supported
+     *  @since S60 v3.2
+    */
+    void StartAtomicL();
+    /**
+     * Not Supported     
+     *  @since S60 v3.2
+     *
+    */
+    void CommitAtomicL();
+    /**
+     * Not supported.
+     *  @since S60 v3.2
+     */
+    void RollbackAtomicL();
+    /**
+     * Returns EFalse as the adapter does not support streaming
+     *
+     * @since S60 v3.2
+     * @param aItemSize size limit for stream usage
+     * @return TBool EFalse as streaming is not supported
+    */
+    TBool StreamingSupport( TInt& aItemSize );
+    /**
+     * Not supported
+     *
+     *  @since S60 v3.2
+    */  
+    void StreamCommittedL();
+    /**
+     * The function tells the adapter that all the commands of the message 
+     * that can be passed to the adapter have now been passed.  This 
+     * indciates that the adapter must supply status codes and results to 
+     * any buffered commands. This must be done at latest by the time this 
+     * function returns. This function is used at the end of SyncML messages, 
+     * and during processing of Atomic.  
+     *
+     *  @since S60 v3.2
+    */
+    void CompleteOutstandingCmdsL();
+    
+    /**
+     * Function checks if a SNAP with the argument URI is buffered for 
+     * later handling. If so, the function calls iSettingStore object 
+     * to store the SNAP. This function is called by the iSettingStore 
+     * object to check whether EmbeddedSNAP node referenced by a command is 
+     * still in the buffer and needs to be stored first.
+     *
+     * @since S60 v3.2
+     * @param aURI Descriptor containing the SNAP URI
+     */    
+    void StoreSnapIfBufferedL( const TDesC8& aURI );
+
+
+    /**
+     * Function returns a pointer to a HBufC object containing  a SNAP URI 
+     * which correcponds to the argument LUID.
+     *
+     * @since S60 v3.2
+     * @param aSnapId LUID of SNAP object
+     * @return Descriptor containing the SNAP URI. 
+     */    
+    HBufC8* GetSnapUriFromLuidL( const TUint aSnapId );
+
+
+    /**
+     * Function returns a pointer to HBufC object containing a 
+     * comma separated list of IAP URIs according to the IAP LUIDs
+     * contained in the argument array.
+     *
+     * @since S60 v3.2
+     * @param aIdArray Array of IAP LUIDs for which the URI list is formed.
+     * @return HBufC object containing a comma separated list of IAP URIs
+     */
+    HBufC8* GetIapListL( const RArray<TUint>& aIdArray );
+
+
+    /**
+     * Function returns an array containing the LUIDs of IAP URIs listed in 
+     * argument descriptor. 
+     *
+     *  @since S60 v3.2
+     * @param aIAPList TDesC object containing a comma separated list of IAP
+     *  URIs
+     * @return Array of IAP LUIDs that correspond to the argument URI list. 
+     */    
+    RArray<TUint> GetIdArrayL( const TDesC8& aIAPList);
+
+    
+    /**
+     * Converts integer to 8bit descriptor
+     *
+     *  @since S60 v3.2
+     * @param    aLuid The integer to be converted
+     * @return    The Integer as a descriptor
+     */
+    HBufC8* IntToDes8L( TInt aLuid) const;
+
+    /**
+     * Converts 8bit descriptor to integer
+     *
+     *  @since S60 v3.2
+     * @param    aLuid The descriptor to be converted
+     * @return    Integer value of the descriptor
+     */
+    TUint DesToIntL(const TDesC8& aLuid) const;
+
+    /**
+     * Converts 8bit descriptor to a boolean value
+     * @since S60 v3.2
+     * @param aBoolDes The descriptor to be converted
+     * @param aBool A pointer to a boolean where result is stored
+     * @return ETrue if conversion was succesful, otherwise EFalse
+     */
+    TBool DesToBool(const TDesC8& aBoolDes, TBool& aBool ) const;
+
+    /**
+     * Converts boolean value to 8bit descriptor
+     * @since S60 v3.2
+     * @param    aBool The boolean value to be converted
+     * @return    The boolean value as a descriptor
+     */
+    HBufC8* BoolToDes8LC( TBool aBool) const;
+
+
+    /**
+     * The function calls the GetLuidAllocL function of the MSmlDmCallback to 
+     * get the LUID which is mapped to aURI. This function LUID is not found,  
+     * the function allocates a null length string, i.e. the function
+     * allocates memory in every case.
+     * @since S60 v3.2
+     * @param aURI  URI of the object. 
+     */
+    HBufC8* GetLuidAllocL( const TDesC8& aURI );
+
+private:
+
+     /**
+     * Constructor
+     */
+    CNSmlDmBmAdapter();
+
+    /**
+     * Constructor
+     * @param aDmCallback Callback object to the framework
+     */
+    CNSmlDmBmAdapter( MSmlDmCallback* aDmCallback );
+
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+    
+    
+    /**
+     * Searches the buffer for a SNAP with the parameter mapping name 
+     * @param aMappingName Mapping Name of this SNAP
+     * @return Pointer to the CSmlDmBmSettingsElement object in buffer. 
+     * The object is owned by the CNSmlDmBmAdapter.  
+     */
+     CSmlDmBmSettingsElement* GetSnapIfBuffered( const TDesC8& aMappingName);
+     
+    /**
+     * Returns the first URI from a list of URIs
+     * @param  aURIList Comma separated list of URIs
+     * @return    The first URI
+     */
+     TPtrC8 FirstURI(const TDesC8& aURIList) const;
+    
+    /**
+     * Returns the number of URIs in a list of URIs
+     * @param aURIList Comma-separated list of URIs
+     * @return Number of URIs in the list.  
+     */
+    TInt NumOfURIs(const TDesC8& aURIList) const;
+
+
+    /**
+     * Removes the first URI from a list of URIs
+     * @param  aURIList Comma separated list of URIs
+     * @return    The first URI
+     */
+     TPtrC8 RemoveFirstURI(const TDesC8& aURI) const;
+
+    /**
+     * Parses the last URI segment from URI
+     * @param    aURI The whole URI
+     * @return    The last URI segment
+     */
+    TPtrC8 LastURISeg(const TDesC8& aURI) const; 
+
+    /**
+     * Removes the last URI segment from URI
+     * @param    aURI The whole URI
+     * @return    The aURI without the last URI segment
+     */
+    TPtrC8 RemoveLastURISeg(const TDesC8& aURI) const;
+
+    /**
+     * Calculates the number of URI segments
+     * @param    aURI The whole URI
+     * @return    The number of URI segments
+     */
+    TInt NumOfURISegs(const TDesC8& aURI) const;
+
+    /**
+     * Checks if the URI refers to predefined SNAP (of format SNAPx) in which
+     * case operations should be successful even if passed LUID is empty.
+     * Maps the URI to found id.
+     * @param    aURI The whole URI
+     * @param    aLUID LUID
+     * @return    The SNAP ID if found
+     */
+    TInt MapPredefinedSnapsL( const TDesC8& aURI, const TDesC8& aLUID );
+    
+    /**
+     * Tries to find predefined URI string (SNAPx) fronm input
+     * returns the ID.
+     * @param    aURI The whole URI    
+     * @return    The SNAP ID if found
+     */
+    TInt GetPredefinedSnapIdFromUri( const TDesC8& aURI ) const;
+
+private: //data
+
+    /**
+     * Buffered commands. Contains a CSmlDmBmSettingsElement object 
+     * for each SNAP. THese in turn contain commands for the SNAP.
+     */
+    RPointerArray<CSmlDmBmSettingsElement> iBuffer;
+    
+    /**
+     * Setting store object, which is called for managing settings 
+     * in CommsDat. Own.
+     */
+     CNSmlDmBmSettingStore * iSettingStore;
+     
+     /**
+      * CmManager object for SNAP existence checking for
+      * direct accesses to pre-defined SNAPs    
+      */
+     RCmManagerExt iCmManagerExt;
+        
+    };
+
+
+/**
+ *  CSmlDmBmCommandElement 
+ *
+ * Helper class, which stores a single buffered command for a SNAP. 
+ *  @lib nsmldmbmadapter
+ *  @since S60 v3.2
+ */
+
+class CSmlDmBmCommandElement : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CSmlDmBmCommandElement* NewLC( TBool aLeaf, 
+                                          TInt aStatusRef, 
+                                          TInt aResultRef, 
+                                          CNSmlDmBmAdapter::TCommandType  aCmdType, 
+                                          const TDesC8& aLastUriSeg, 
+                                          const TDesC8& aData );
+
+    /**
+     * Destructor.
+     */
+     ~CSmlDmBmCommandElement();
+
+    /**
+     * Returns the iExecuted member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iExecuted member value of the object
+     */
+    inline TBool Executed();
+
+    /**
+     * Sets the iExecuted member value of the object
+     *
+     * @since S60 v3.2
+     * @param aExecuted Executed value for the object. 
+     */    
+    inline void SetExecuted( TBool aExecuted );
+    
+    /**
+     * Returns the iStatus member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iStatus value of the object
+     */
+    inline CSmlDmAdapter::TError Status();
+    
+    /**
+     * Sets the iStatus member value of the object
+     *
+     * @since S60 v3.2
+     * @param aStatus Status value for the object. 
+     */    
+    inline void SetStatus( CSmlDmAdapter::TError aStatus ); 
+    
+    /**
+     * Returns the iLeaf member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iLeaf member value of the object
+     */
+    inline TBool Leaf();
+    
+    /**
+     * Returns the iStatusRef member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iStatusRef member value of the object
+     */
+    inline TInt StatusRef();
+    
+    /**
+     * Returns the iResultRef member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iResultRef member value of the object
+     */
+    inline TInt ResultRef();
+    
+    /**
+     * Returns the iCmdType member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iCmdType member value of the object
+     */
+    inline CNSmlDmBmAdapter::TCommandType  CmdType();
+    
+    /**
+     * Returns the iData member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iData member value of the object
+     */
+    inline const HBufC8* Data();
+    
+    /**
+     * Returns the iLastUriSeg member value of the object
+     *
+     * @since S60 v3.2
+     * @return The iLastUriSeg member value of the object
+     */
+    inline const HBufC8* LastUriSeg();
+    
+    /**
+     * Sets the iData member value of the object
+     *
+     * @since S60 v3.2
+     * @param aData Data set to the object. The data will be owned by 
+     * the command object. 
+     */   
+    inline void SetDataL( const TDesC8& aData );
+
+private:
+
+    CSmlDmBmCommandElement( TBool aLeaf, 
+                            TInt aStatusRef, 
+                            TInt aResultRef, 
+                            CNSmlDmBmAdapter::TCommandType aCmdType );
+
+    void ConstructL( const TDesC8& aLastUriSeg, const TDesC8& aData );
+
+    
+private: //data
+
+    /**
+     * Has command been executed. 
+     * Set to ETrue when command is executed.
+     */
+    TBool iExecuted;
+    
+    /**
+     * The execution status of an exeuted command. 
+     * Filled in when command is executed.
+     */    
+    CSmlDmAdapter::TError iStatus;
+    
+    
+    /**
+     * True if commend is for a leaf node, False if it is for a Snap node.
+     */    
+    const TBool iLeaf;
+    
+    /**
+     * Reference for returning the status to DM framework.
+     */    
+    const TInt iStatusRef;
+    
+    /**
+     * Reference for returning result of Get command to the DM framework.
+     */    
+    const TInt iResultRef;
+    
+    /**
+     * Type of command.
+     */    
+    const CNSmlDmBmAdapter::TCommandType  iCmdType;
+    
+
+    /**
+     * Data which is either ment to be stored to setting store 
+     * or which has been fetched from there. 
+     */
+    HBufC8* iData;
+
+    /**
+     * Last segment in the command URI, which indicates the leaf node 
+     * in question. For non leaf command empty string. 
+     */    
+    HBufC8* iLastUriSeg;
+
+    };
+
+
+/**
+ *  CSmlDmBmSettingsElement
+ *
+ * Helper class which stores information of a single SNAP object 
+ * into buffer. Contains the buffered commands for the 
+ * SNAP as a list of CSmlBmCommandElement objects.
+ *
+ *  @lib nsmldmbmadapter
+ *  @since S60 v3.2
+ */
+
+class CSmlDmBmSettingsElement : public CBase
+    {
+ 
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+     static CSmlDmBmSettingsElement* NewLC( const TDesC8& aMappingName );
+    
+    /**
+     * Destructor.
+     */
+    ~CSmlDmBmSettingsElement();
+     
+    /**
+     * Returns a reference to iNodeBuf member.  
+     * @since S60 v3.2
+     * @return Reference to iNodeBuf member of the object
+     */
+    inline RPointerArray<CSmlDmBmCommandElement>& NodeBuf(); 
+
+    /**
+     * Returns the iMappingName member value.  
+     * @since S60 v3.2
+     * @return The iMappingName member value of the object
+     */
+    inline const HBufC8* MappingName();
+
+    /**
+     * Returns the iExecuted member value.  
+     * @since S60 v3.2
+     * @return The iExecuted member value of the object
+     */
+    inline TBool Executed();
+    
+    /**
+     * Sets the iExecuted member value.  
+     * @since S60 v3.2
+     * @param aExecuted Value for the iExecuted member of the object
+     */
+    inline void SetExecuted( TBool aExecuted );
+
+    /**
+     * Returns the iLuid member value.  
+     * @since S60 v3.2
+     * @return The iLuid member value of the object
+     */
+    inline TInt Luid();
+    
+    /**
+     * Sets the iLuid member value.  
+     * @since S60 v3.2
+     * @param aLuid Value for the iLuid member of the object
+     */
+    inline void SetLuid( TInt aLuid );
+    
+        
+private:
+
+    CSmlDmBmSettingsElement();
+
+    void ConstructL( const TDesC8& aMappingName );
+
+private: //data
+
+    /**
+     * Buffer of commands for this SNAP object. Commands 
+     * are added as they come in from the framework and 
+     * executed by the setting store.
+     */
+    RPointerArray<CSmlDmBmCommandElement> iNodeBuf;
+
+    /**
+     * Indicates whether commands for this SNAP have been executed. 
+     * Set to Erue by CNsmlDmBmSettingStore when object is handled.
+     */    
+    TBool iExecuted;
+    
+    /**
+     * LUID (Local UID) is the CommsDat id of the SNAP node. This is 
+     * filled in when SNAP object is created in CommsDat. 
+     */
+    TInt iLuid;
+
+    /**
+     * Mapping name of this SNAP node. This is mapped to the 
+     * iLuid when the Snap is created and has id. 
+     */
+    HBufC8* iMappingName;
+    };
+
+#include "nsmldmbmadapter.inl"
+
+#endif // NSMLDMBMADAPTER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmadapter.inl	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2006 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:   Contains implementations of inline functions
+*
+*/
+
+
+
+// -----------------------------------------------------------------------------
+// Returns the iExecuted member of the object
+// -----------------------------------------------------------------------------
+//
+TBool CSmlDmBmCommandElement::Executed()
+    {
+    return iExecuted;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns the iStatus member of the object
+// -----------------------------------------------------------------------------
+//
+CSmlDmAdapter::TError CSmlDmBmCommandElement::Status()
+    {
+    return iStatus;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iLeaf member of the object
+// -----------------------------------------------------------------------------
+//
+TBool CSmlDmBmCommandElement::Leaf()
+    {
+    return iLeaf;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iStatusRef member of the object
+// -----------------------------------------------------------------------------
+//
+TInt CSmlDmBmCommandElement::StatusRef()
+    {
+    return iStatusRef;    
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iResultRef member of the object
+// -----------------------------------------------------------------------------
+//
+TInt CSmlDmBmCommandElement::ResultRef()
+    {
+    return iResultRef;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iCmdType member of the object
+// -----------------------------------------------------------------------------
+//
+CNSmlDmBmAdapter::TCommandType  CSmlDmBmCommandElement::CmdType()
+    {
+    return iCmdType;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iData member of the object
+// -----------------------------------------------------------------------------
+//
+const HBufC8* CSmlDmBmCommandElement::Data()
+    {
+    return iData;
+    }
+    
+// -----------------------------------------------------------------------------
+// Returns the iLastUriSeg member of the object
+// -----------------------------------------------------------------------------
+//
+const HBufC8* CSmlDmBmCommandElement::LastUriSeg()
+    {
+    return iLastUriSeg;
+    }
+    
+// -----------------------------------------------------------------------------
+// Sets the iExecuted member of the object
+// -----------------------------------------------------------------------------
+//
+void CSmlDmBmCommandElement::SetExecuted( TBool aExecuted )
+    {
+    iExecuted = aExecuted;
+    }
+
+// -----------------------------------------------------------------------------
+// Sets the iStatus member of the object
+// -----------------------------------------------------------------------------
+//
+void CSmlDmBmCommandElement::SetStatus( CSmlDmAdapter::TError aStatus )
+    {
+    iStatus = aStatus;
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// Sets the iData member of the object. Ownership of aData argument will be 
+// transfered to the CSmlDmBmCommandElement
+// -----------------------------------------------------------------------------
+//
+void CSmlDmBmCommandElement::SetDataL( const TDesC8& aData )
+    {  
+    if ( aData.Length() > iData->Length() )
+        {
+        iData = iData->ReAllocL( aData.Length() );
+        }
+    *iData = aData;
+    }
+
+//Function definitions for CSmlDmBmSettingsElement
+// -----------------------------------------------------------------------------
+// Returns reference to iNodeBuf
+// -----------------------------------------------------------------------------
+RPointerArray<CSmlDmBmCommandElement>& CSmlDmBmSettingsElement::NodeBuf()
+    {
+    return iNodeBuf;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns iMappingName
+// -----------------------------------------------------------------------------
+const HBufC8* CSmlDmBmSettingsElement::MappingName()
+    {
+    return iMappingName;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns iExecuted
+// -----------------------------------------------------------------------------
+TBool CSmlDmBmSettingsElement::Executed()
+    {
+    return iExecuted;
+    }
+    
+// -----------------------------------------------------------------------------
+// Sets the iExecuted member value
+// -----------------------------------------------------------------------------
+void CSmlDmBmSettingsElement::SetExecuted( TBool aExecuted )
+    {
+    iExecuted = aExecuted;
+    }
+
+
+// -----------------------------------------------------------------------------
+// Returns iLuid
+// -----------------------------------------------------------------------------
+TBool CSmlDmBmSettingsElement::Luid()
+    {
+    return iLuid;
+    }
+    
+// -----------------------------------------------------------------------------
+// Sets the iExecuted member value
+// -----------------------------------------------------------------------------
+void CSmlDmBmSettingsElement::SetLuid( TInt aLuid )
+    {
+    iLuid = aLuid;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/inc/nsmldmbmsettingstore.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,218 @@
+/*
+* Copyright (c) 2006 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:   The class manages snap data in Commsdat using CMManager
+*
+*/
+
+
+
+
+#ifndef NSMLDMBMSETTINGSTORE_H
+#define NSMLDMBMSETTINGSTORE_H
+
+#include <cmmanagerext.h>
+
+#include "nsmldmbmadapter.h"
+
+const TInt KShift8 = 8;
+
+class CNSmlDmBmAdapter;
+class CSmlDmBmCommandElement;
+class CSmlDmBmSettingsElement;
+
+/**
+ *  Setting Store is used for managing settings in CommsDat
+ *
+ *  The class provides functions for executing commands 
+ *  and sets of commands that involve manipulation of 
+ *  data in CommsDat. 
+ *
+ *  @lib nsmldmbmadapter
+ *  @since S60 v3.2
+ */
+class CNSmlDmBmSettingStore : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CNSmlDmBmSettingStore * NewL( CNSmlDmBmAdapter* aAdapter );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CNSmlDmBmSettingStore();
+
+
+    /**
+     * Executes all commands for the argument snap object.
+     * Executed commands are set as executed and status is filled 
+     * in. For Get commands also fetched data is filled in the command.
+     *
+     * @since S60 v3.2
+     * @param aSettings Settings object for the SNAP, contains all 
+     * commands to be executed for the SNAP
+     */
+    void StoreSnapL( CSmlDmBmSettingsElement& aSettings );
+
+    
+    /**
+     * Executes the argument command. Checks the node from 
+     * for which the command is intended and calls node specific functions.
+     *
+     * @since S60 v3.2
+     * @param aCmd Command to be executed
+     * @param aLuid LUID of the SNAP which command is referring.
+     */
+     void ExecuteCmdL( CSmlDmBmCommandElement& aCmd, TUint aLuid);
+
+    /**
+     * Fetches all SNAPs and inserts id of each SNAp into the argument array
+     *
+     * @since S60 v3.2
+     * @param aLUIDArray Array for SNAP ids
+     */
+    void GetSnapsL( RArray<TUint32>& aLUIDArray );
+ 
+private:
+
+    CNSmlDmBmSettingStore( CNSmlDmBmAdapter * aAdapter );
+
+    void ConstructL();
+
+//----------- Commands for managing leaf nodes -------------------//
+
+    /**
+     * Executes snap commands. The valid commands include 
+     * get and delete. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aLuid The id of the snap
+     */
+    void ExecuteSnapCmdL( CSmlDmBmCommandElement& aCmd, TUint aLuid );
+
+    /**
+     * Executes iap list commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aSnap The snap object
+     */
+    void ExecuteIapsCmdL( CSmlDmBmCommandElement& aCmd, 
+                          RCmDestinationExt& aSnap );
+
+    /**
+     * Executes protection commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aSnap The snap object
+     */
+    void ExecuteProtectionCmdL( CSmlDmBmCommandElement& aCmd, 
+                                RCmDestinationExt& aSnap );
+
+    /**
+     * Executes hidden commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aSnap The snap object
+     */
+    void ExecuteHiddenCmdL( CSmlDmBmCommandElement& aCmd, 
+                            RCmDestinationExt& aSnap );
+
+    /**
+     * Executes metadata commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aSnap The snap object
+     */
+    void ExecuteMetadataCmdL( CSmlDmBmCommandElement& aCmd, 
+                              RCmDestinationExt& aSnap );
+
+    /**
+     * Executes embedded snap commands. The valid commands include 
+     * update, get and delete. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aLuid The id of the snap
+     */
+    void ExecuteEmbeddedSnapCmdL( CSmlDmBmCommandElement& aCmd, 
+                                  RCmDestinationExt& aSnap );
+    /**
+     * Executes name commands. The valid commands include 
+     * update and get. With update commands data is read from the 
+     * iData memeber of the argument command. With get commands the iData 
+     * memeber is used to pass fetched data back to caller. 
+     * After execution of command the function fills in the status 
+     * in aCmd.iStatus memeber and sets aCmd.iExecuted as True. The function
+     * leaves if command can not be executed for some reason. 
+     *
+     * @param aCmd The command to be executed
+     * @param aSnap The snap object
+     */
+    void ExecuteNameCmdL( CSmlDmBmCommandElement& aCmd, 
+                          RCmDestinationExt& aSnap );
+
+
+private: //data
+
+    /**
+     * CmManager is used for accessing CommsDat.
+     */
+     RCmManagerExt iCmManagerExt;
+     
+    /**
+     * Pointer to the adapter. This is used for 
+     * querying data from DM framework when necessary
+     * and using helper functions. Not own.
+     */ 
+    CNSmlDmBmAdapter* iAdapter;
+
+  };
+
+
+#endif // NSmlDmBmSettingStore_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/rom/nsmldmbmadapter.iby	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2006 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:   Image description file for project nsmldmbmadapter
+*
+*/
+
+
+
+#ifndef NSMLDMBMADAPTER_IBY
+#define NSMLDMBMADAPTER_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+#ifdef __SYNCML_DM
+
+ECOM_PLUGIN( nsmldmbmadapter.dll, nsmldmbmadapter.rsc )
+
+#endif // __SYNCML_DM
+
+#endif // NSMLDMBMADAPTER_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/src/nsmldmbmadapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,1675 @@
+/*
+* Copyright (c) 2006 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:   Bearer management DM adapter. Provides handling of 
+                Bearer management related settings in Device management
+*
+*/
+
+
+
+#include <ecom/implementationproxy.h>
+#include <cmdestinationext.h>
+
+#include "nsmldmbmadapter.h"
+#include "bmadapterlogger.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+
+// --------------------------------------------------------------------------
+// Maps plugin UID to its factory function (constructor)
+// --------------------------------------------------------------------------
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(0x101f6d2f, 
+                               CNSmlDmBmAdapter::NewL)
+    };
+
+// --------------------------------------------------------------------------
+// For ecom plugin implementation
+// -------------------------------------------------------------------------
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::NewL
+// --------------------------------------------------------------------------
+CNSmlDmBmAdapter* CNSmlDmBmAdapter::NewL( MSmlDmCallback* aDmCallback )
+    {
+    BMADAPTERLOGSTRING("CNSmlDmBmAdapter::NewL: Start")
+    CNSmlDmBmAdapter* self = new (ELeave) CNSmlDmBmAdapter( aDmCallback );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    BMADAPTERLOGSTRING("CNSmlDmBmAdapter::NewL: End")
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::CNSmlDmBmAdapter
+// --------------------------------------------------------------------------
+
+CNSmlDmBmAdapter::CNSmlDmBmAdapter( MSmlDmCallback* aDmCallback ) 
+    : CSmlDmAdapter( aDmCallback )
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::ConstructL
+// --------------------------------------------------------------------------
+void CNSmlDmBmAdapter::ConstructL()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CNSmlDmBmAdapter: Start" )
+    iSettingStore = CNSmlDmBmSettingStore::NewL( this );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CNSmlDmBmAdapter: End" )
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::~CNSmlDmBmAdapter
+// --------------------------------------------------------------------------
+CNSmlDmBmAdapter::~CNSmlDmBmAdapter()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::~CNSmlDmBmAdapter: Start" )
+    iBuffer.ResetAndDestroy();
+    iBuffer.Close();
+    delete iSettingStore;
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::~CNSmlDmBmAdapter: End" )
+    }
+    
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::DDFVersionL
+// Returns ddf version nr
+// --------------------------------------------------------------------------
+void CNSmlDmBmAdapter::DDFVersionL( CBufBase& aDDFVersion )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::DDFVersionL: Start" )
+    aDDFVersion.InsertL( 0, KNSmlDmBMAdapterDDFVersion );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::DDFVersionL:End" )
+    }
+   
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::DDFStructureL
+//  Constructs the DDF structure
+// --------------------------------------------------------------------------
+void CNSmlDmBmAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::DDFStructureL: Start" )
+    TSmlDmAccessTypes accessTypes;
+
+    // BearerManagementSNAP
+    MSmlDmDDFObject& bm = aDDF.AddChildObjectL( KNSmlDmBMAdapterBM );
+    accessTypes.SetGet();
+    accessTypes.SetAdd();
+    bm.SetAccessTypesL( accessTypes );
+    bm.SetOccurenceL( MSmlDmDDFObject::EOne );
+    bm.SetScopeL( MSmlDmDDFObject::EPermanent );
+    bm.SetDFFormatL( MSmlDmDDFObject::ENode );
+    bm.AddDFTypeMimeTypeL( KNSmlDmBMAdapterTextPlain );
+    bm.SetDescriptionL( KNSmlDmBMAdapterBMDescription );
+    accessTypes.Reset();
+
+    
+    // BearerManagementSNAP/<X>
+    MSmlDmDDFObject& dynamic1 = bm.AddChildObjectGroupL();
+    accessTypes.SetAdd();
+    accessTypes.SetDelete();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    dynamic1.SetAccessTypesL( accessTypes );
+    dynamic1.SetOccurenceL( MSmlDmDDFObject::EZeroOrMore );
+    dynamic1.SetScopeL( MSmlDmDDFObject::EDynamic );
+    dynamic1.SetDFFormatL( MSmlDmDDFObject::ENode );
+    dynamic1.AddDFTypeMimeTypeL( KNSmlDmBMAdapterTextPlain );
+    dynamic1.SetDescriptionL( KNSmlDmBMAdapterDynamicDescription );
+    accessTypes.Reset();
+
+
+    // BearerManagementSNAP/<X>/Name
+    MSmlDmDDFObject& name = dynamic1.AddChildObjectL( KNSmlDmBMAdapterName );
+    accessTypes.SetAdd();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    name.SetAccessTypesL( accessTypes );
+    name.SetOccurenceL( MSmlDmDDFObject::EOne );
+    name.SetScopeL( MSmlDmDDFObject::EDynamic );
+    name.SetDFFormatL( MSmlDmDDFObject::EChr );
+    name.SetDescriptionL( KNSmlDmBMAdapterNameDescription );
+    accessTypes.Reset();
+
+    // BearerManagementSNAP/<X>/IAPPrioityList
+    MSmlDmDDFObject& iapList = 
+    dynamic1.AddChildObjectL( KNSmlDmBMAdapterIAPPriorityList );
+    accessTypes.SetAdd();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    iapList.SetAccessTypesL( accessTypes );
+    iapList.SetOccurenceL( MSmlDmDDFObject::EOne );
+    iapList.SetScopeL( MSmlDmDDFObject::EDynamic );
+    iapList.SetDFFormatL( MSmlDmDDFObject::EChr );
+    iapList.SetDescriptionL( KNSmlDmBMAdapterIAPPriorityListDescription );
+    accessTypes.Reset();
+        
+    // BearerManagementSNAP/<X>/EmbeddedSNAP
+    MSmlDmDDFObject& embedded = 
+    dynamic1.AddChildObjectL( KNSmlDmBMAdapterEmbeddedSNAP );
+    accessTypes.SetAdd();
+    accessTypes.SetDelete();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    embedded.SetAccessTypesL( accessTypes );
+    embedded.SetOccurenceL( MSmlDmDDFObject::EZeroOrOne );
+    embedded.SetScopeL( MSmlDmDDFObject::EDynamic );
+    embedded.SetDFFormatL( MSmlDmDDFObject::EChr );
+    embedded.SetDescriptionL( KNSmlDmBMAdapterEmbeddedSNAPDescription );
+    accessTypes.Reset();
+
+    // BearerManagementSNAP/<X>/Metadata
+    MSmlDmDDFObject& metadata = 
+    dynamic1.AddChildObjectL( KNSmlDmBMAdapterMetadata );
+    accessTypes.SetAdd();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    metadata.SetAccessTypesL( accessTypes );
+    metadata.SetOccurenceL( MSmlDmDDFObject::EOne );
+    metadata.SetScopeL( MSmlDmDDFObject::EDynamic );
+    metadata.SetDFFormatL( MSmlDmDDFObject::EInt );
+    metadata.SetDescriptionL( KNSmlDmBMAdapterMetadataDescription );
+    accessTypes.Reset();
+ 
+ 
+    // BearerManagementSNAP/<X>/Protected
+    MSmlDmDDFObject& protection = 
+    dynamic1.AddChildObjectL( KNSmlDmBMAdapterProtected );
+    accessTypes.SetAdd();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    protection.SetAccessTypesL( accessTypes );
+    protection.SetOccurenceL( MSmlDmDDFObject::EOne );
+    protection.SetScopeL( MSmlDmDDFObject::EDynamic );
+    protection.SetDFFormatL( MSmlDmDDFObject::EInt );
+    protection.SetDescriptionL( KNSmlDmBMAdapterProtectedDescription );
+    accessTypes.Reset(); 
+    
+    // BearerManagementSNAP/<X>/Hidden
+    MSmlDmDDFObject& hidden = dynamic1.AddChildObjectL( KNSmlDmBMAdapterHidden );
+    accessTypes.SetAdd();
+    accessTypes.SetGet();
+    accessTypes.SetReplace();
+    hidden.SetAccessTypesL( accessTypes );
+    hidden.SetOccurenceL( MSmlDmDDFObject::EOne );
+    hidden.SetScopeL( MSmlDmDDFObject::EDynamic );
+    hidden.SetDFFormatL( MSmlDmDDFObject::EBool );
+    hidden.SetDescriptionL( KNSmlDmBMAdapterHiddenDescription );
+    accessTypes.Reset(); 
+    
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::DDFStructureL: End" )
+    }
+
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::UpdateLeafObjectL
+//  Adds or updates leaf node value. If snap object is 
+//  in buffer this command is also buffered. Also if leaf node 
+//  is embedded snap and that snap is buffered, the argument command
+//  is buffered.
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::UpdateLeafObjectL( const TDesC8& aURI, 
+                                          const TDesC8& aLUID, 
+                                          const TDesC8& aObject, 
+                                          const TDesC8& /*aType*/, 
+                                          TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::UpdateLeafObjectL: Start" )
+    BMADAPTERLOGSTRING4( "\tUpdateLeafObjectL  \tURI: %S, \n\tLUID: %S,\
+                         \tobject: %S ", 
+                        &aURI, &aLUID, &aObject )
+
+    TInt snapId = MapPredefinedSnapsL( aURI, aLUID );
+                        
+    // Check if parent snap node is found in the buffered settings
+    CSmlDmBmSettingsElement* snap = 
+    GetSnapIfBuffered( RemoveLastURISeg( aURI ) );
+
+    // data for buffered SNAP -> Store command into buffer    
+    if ( snap )
+        {
+        CSmlDmBmCommandElement* cmd = 
+        CSmlDmBmCommandElement::NewLC( ETrue, 
+                                       aStatusRef,
+                                       KNSmlDmBmInvalidRef, 
+                                       CNSmlDmBmAdapter::EAddCmd,
+                                       LastURISeg( aURI ), 
+                                       aObject);
+        snap->NodeBuf().AppendL(cmd);
+        CleanupStack::Pop( cmd );
+        BMADAPTERLOGSTRING2( "\tSnap %S found, buffering cmd", 
+                            snap->MappingName() )
+
+        }
+    // updates for an existing SNAP
+    else
+        {
+
+        // If setting embedded SNAP node and the embedded SNAP node is still 
+        // buffered -> Buffer also this command
+        if( !LastURISeg( aURI ).Compare( KNSmlDmBMAdapterEmbeddedSNAP ) )
+            {
+            snap = GetSnapIfBuffered( aObject );
+
+                // embedded SNAP is buffered
+                if ( snap )
+                    {
+                    CSmlDmBmCommandElement* cmd = 
+                    CSmlDmBmCommandElement::NewLC( ETrue, 
+                                                   aStatusRef,
+                                                   KNSmlDmBmInvalidRef, 
+                                                   CNSmlDmBmAdapter::EAddCmd,
+                                                   LastURISeg( aURI ), 
+                                                   aObject);
+
+                    // buffer this command
+                    CSmlDmBmSettingsElement* setting = 
+                    CSmlDmBmSettingsElement::NewLC( RemoveLastURISeg( aURI ) );
+                    
+                    // Check if SNAP was predefined or not
+                    if( snapId == KErrNotFound )
+                        {
+                        snapId = DesToIntL( aLUID );
+                        }
+                    setting->SetLuid( snapId );
+                    iBuffer.AppendL( setting );
+                    CleanupStack::Pop( setting );
+                    setting->NodeBuf().AppendL(cmd);
+                    CleanupStack::Pop( cmd );
+                    BMADAPTERLOGSTRING2( "\tEmbedded Snap %S buffered, buffering cmd", 
+                                         snap->MappingName() )
+                    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::UpdateLeafObjectL: End" )
+                    return;
+                    }
+            }
+        // execute command and return status  
+        CSmlDmBmCommandElement* cmd = 
+        CSmlDmBmCommandElement::NewLC( ETrue, 
+                                       aStatusRef,
+                                       KNSmlDmBmInvalidRef, 
+                                       CNSmlDmBmAdapter::EAddCmd,
+                                       LastURISeg( aURI ), 
+                                       aObject);
+        if( snapId == KErrNotFound )
+            {
+            snapId = DesToIntL( aLUID );
+            }
+        iSettingStore->ExecuteCmdL( *cmd, snapId );
+        BMADAPTERLOGSTRING2( "\tCmd executed with status: %d", 
+                              cmd->Status() )
+        Callback().SetStatusL( aStatusRef, cmd->Status() );
+        CleanupStack::PopAndDestroy( cmd );
+
+        }
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::UpdateLeafObjectL: End" )
+    }
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::DeleteObjectL
+//  Deletes node or leaf object. If the snap this command relates to is
+//  buffered, also the delete command is buffered.
+// --------------------------------------------------------------------------
+
+void CNSmlDmBmAdapter::DeleteObjectL( const TDesC8& aURI, 
+                                      const TDesC8& aLUID,
+                                      TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::DeleteObjectL: Start" )
+    BMADAPTERLOGSTRING3( "\tDeleteObjectL  \tURI: %S, \tLUID: %S", 
+                         &aURI, &aLUID )
+    
+    CSmlDmBmCommandElement* cmd;
+    
+    TInt snapId = MapPredefinedSnapsL( aURI, aLUID );
+    // check if node or leaf object and create command accordingly
+    // when updating, make sure that cmd is constructed
+    if ( NumOfURISegs( aURI  ) == KNsmlDmBmSNAPNodeDepth )
+        {
+        cmd = CSmlDmBmCommandElement::NewLC( EFalse, 
+                                             aStatusRef,
+                                             KNSmlDmBmInvalidRef, 
+                                             CNSmlDmBmAdapter::EDeleteCmd,
+                                             KNullDesC8, KNullDesC8 );
+        }
+    else if ( ! LastURISeg( aURI ).Compare( KNSmlDmBMAdapterEmbeddedSNAP() ) )
+        {
+        cmd = CSmlDmBmCommandElement::NewLC( ETrue, 
+                                             aStatusRef,
+                                             KNSmlDmBmInvalidRef, 
+                                             CNSmlDmBmAdapter::EDeleteCmd,
+                                             LastURISeg( aURI ), 
+                                             KNullDesC8 );
+        }
+    else
+        {
+        // unsupported node, framework should check this
+        Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+        BMADAPTERLOGSTRING( "\tCNSmlDmBmAdapter::DeleteObjectL: \
+        Error, unsupported node" )
+        return;
+        }
+
+    // If this SNAP still in buffer -> buffer command for later execution
+    // Check if SNAP is found in the buffered settings
+    CSmlDmBmSettingsElement* snap = NULL;
+    if( cmd->Leaf() )
+        {
+        snap = GetSnapIfBuffered( RemoveLastURISeg( aURI ) );
+        }
+    else
+        {
+        snap = GetSnapIfBuffered( aURI );
+        }
+    // when updating make sure that cmd is removed from cleanup 
+    // stack and deleted if necessary
+    
+    // if cmd for buffered snap append cmd to buffer
+    if ( snap )
+        {
+        snap->NodeBuf().AppendL( cmd );
+        CleanupStack::Pop( cmd );
+        BMADAPTERLOGSTRING2( "\tSnap %S found, buffering cmd", 
+                            snap->MappingName() )
+        }
+    // if existing node, execute command
+    else if( aLUID.Length() > 0 || snapId != KErrNotFound )
+        {
+        if( snapId == KErrNotFound )
+            {
+            snapId = DesToIntL( aLUID );
+            }
+        iSettingStore->ExecuteCmdL( *cmd, snapId );
+        BMADAPTERLOGSTRING2( "\tCmd executed with status: %d ", 
+                              cmd->Status() )
+        Callback().SetStatusL( aStatusRef, cmd->Status() );
+        CleanupStack::PopAndDestroy( cmd );
+        }
+        // unknown node    
+    else
+        {
+        BMADAPTERLOGSTRING( "\tUnknown node\n" )
+        Callback().SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+        CleanupStack::PopAndDestroy( cmd );
+        }
+    
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::DeleteObjectL: End" )
+    }
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::FetchLeafObjectL
+//  Fetches leaf object value. If the snap is buffered also this command 
+//  will
+//  be buffered.
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::FetchLeafObjectL( const TDesC8& aURI, 
+                                         const TDesC8& aLUID, 
+                                         const TDesC8& /*aType*/, 
+                                         const TInt aResultsRef, 
+                                         const TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "NSmlDmBMAdapter::FetchLeafObjectL: Start" )
+    BMADAPTERLOGSTRING3( "\tFetchLeafObjectL  \tURI: %S, \tLUID: %S,", 
+                        &aURI, &aLUID )
+
+    TInt snapId = MapPredefinedSnapsL( aURI, aLUID );                         
+                        
+    // check if parent snap node is buffered 
+    CSmlDmBmSettingsElement* snap = 
+    GetSnapIfBuffered( RemoveLastURISeg( aURI ) );
+
+    // data for buffered SNAP -> Store command into buffer    
+    if ( snap )
+        {
+        CSmlDmBmCommandElement* cmd = 
+        CSmlDmBmCommandElement::NewLC( ETrue, 
+                                       aStatusRef, 
+                                       aResultsRef, 
+                                       CNSmlDmBmAdapter::EGetCmd,
+                                       LastURISeg( aURI ), 
+                                       KNullDesC8);
+        snap->NodeBuf().AppendL( cmd );
+        CleanupStack::Pop( cmd );
+        BMADAPTERLOGSTRING2( "\tSnap %S found, buffering cmd", 
+                            snap->MappingName() )
+        }
+    // otherwise execute cmd right away
+    else
+        {
+                
+        CSmlDmBmCommandElement* cmd = 
+        CSmlDmBmCommandElement::NewLC( ETrue, 
+                                       aStatusRef, 
+                                       aResultsRef, 
+                                       CNSmlDmBmAdapter::EGetCmd,
+                                       LastURISeg( aURI ), 
+                                       KNullDesC8);
+        if( snapId == KErrNotFound )
+            {
+            snapId = DesToIntL( aLUID );
+            }
+
+        iSettingStore->ExecuteCmdL( *cmd, snapId );
+        BMADAPTERLOGSTRING2( "\tCmd executed with status: %d ", 
+                              cmd->Status() )
+        // if executed return status
+        if ( cmd->Executed() ) 
+            {
+            Callback().SetStatusL( aStatusRef, cmd->Status() );
+            // if successful set results
+            if ( cmd->Status() == CSmlDmAdapter::EOk )
+                {
+                BMADAPTERLOGSTRING2( "\tCmd executed with result: %S ", 
+                                      cmd->Data() )
+                CBufBase* result = CBufFlat::NewL( cmd->Data()->Size() );
+                CleanupStack::PushL( result );
+                result->InsertL( 0, *cmd->Data() );
+                Callback().SetResultsL( aResultsRef, *result, KNullDesC8 );
+                CleanupStack::PopAndDestroy( result );
+                }
+            }
+        else
+            {
+            // failed to execute command
+            Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+            }
+        CleanupStack::PopAndDestroy( cmd );
+        }
+    
+    BMADAPTERLOGSTRING( "NSmlDmBMAdapter::FetchLeafObjectL: End" )
+    }
+
+// --------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::FetchLeafObjectSizeL
+//  Fetches leaf object size. If the snap is buffered also this command will
+//  be buffered.
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, 
+                                             const TDesC8& aLUID,
+                                             const TDesC8& /* aType */, 
+                                             TInt aResultsRef,
+                                             TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::FetchLeafObjectSizeL: Start" )
+    BMADAPTERLOGSTRING3( "\tFetchLeafObjectSizeL  \tURI: %S, \tLUID: %S,", 
+                         &aURI, &aLUID )
+   
+    TInt snapId = MapPredefinedSnapsL( aURI, aLUID );
+    
+    // check if parent snap node is buffered 
+    CSmlDmBmSettingsElement* snap = 
+    GetSnapIfBuffered( RemoveLastURISeg( aURI ) );
+
+    // data for buffered SNAP -> Store command into buffer    
+    if ( snap )
+        {
+        CSmlDmBmCommandElement* cmd = 
+        CSmlDmBmCommandElement::NewLC( ETrue, 
+                                       aStatusRef, 
+                                       aResultsRef, 
+                                       CNSmlDmBmAdapter::EGetSizeCmd,
+                                       LastURISeg( aURI ), 
+                                       KNullDesC8);
+        snap->NodeBuf().AppendL( cmd );
+        CleanupStack::Pop( cmd ); 
+        BMADAPTERLOGSTRING2( "\tSnap %S found, buffering cmd", 
+                             snap->MappingName() )
+        }
+    // otherwise execute get size cmd right away
+    else
+        {
+        CSmlDmBmCommandElement* cmd = 
+        CSmlDmBmCommandElement::NewLC( ETrue, 
+                                       aStatusRef, 
+                                       aResultsRef, 
+                                       CNSmlDmBmAdapter::EGetSizeCmd,
+                                       LastURISeg( aURI ), 
+                                       KNullDesC8);
+        if( snapId == KErrNotFound )
+            {
+            snapId = DesToIntL( aLUID );
+            }
+        iSettingStore->ExecuteCmdL( *cmd, snapId );
+        BMADAPTERLOGSTRING2( "\tCmd executed with status: %d ", 
+                              cmd->Status() )
+        // if executed get status
+        if ( cmd->Executed() ) 
+            {
+            Callback().SetStatusL( aStatusRef, cmd->Status() );
+            // if successful get results
+            if ( cmd->Status() == CSmlDmAdapter::EOk )
+                {
+                BMADAPTERLOGSTRING2( "\tCmd executed with result: %S ", 
+                                      cmd->Data() )
+                CBufBase* result = CBufFlat::NewL( cmd->Data()->Size() );
+                CleanupStack::PushL( result );
+                result->InsertL( 0, *cmd->Data() );
+                Callback().SetResultsL( aResultsRef, *result, KNullDesC8 );
+                CleanupStack::PopAndDestroy( result );
+                }
+            }
+        else
+            {
+            // failed to execute command
+            Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+            }
+        
+        CleanupStack::PopAndDestroy( cmd );
+        }
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::FetchLeafObjectSizeL: End" )
+    }
+
+// ------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::ChildURIListL
+//  Fetches child nodes of a node. these may be either all snap nodes
+//  or leaf nodes under a snap node. 
+// ------------------------------------------------------------------------
+void CNSmlDmBmAdapter::ChildURIListL( const TDesC8& aURI, 
+                                      const TDesC8& aLUID,
+                                      const CArrayFix<TSmlDmMappingInfo>& 
+                                      aPreviousURISegmentList,
+                                      TInt aResultsRef, 
+                                      TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::ChildURIListL: Start" )
+    BMADAPTERLOGSTRING3( "\tChildURIListL  URI: %S, LUID: %S ", 
+                        &aURI, &aLUID )
+                        
+    TInt snapId = MapPredefinedSnapsL( aURI, aLUID );
+    
+    CBufBase* resultList = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( resultList );
+    // get all snap nodes
+    if ( !aURI.Compare(KNSmlDmBMAdapterBM) )
+        {
+        RArray<TUint32> snaps = RArray<TUint32>( KNSmlDmBMGranularity );
+        CleanupClosePushL( snaps );
+        iSettingStore->GetSnapsL( snaps );
+        TInt currentSNAP( -1 );
+        for ( TInt i( 0 ); i < snaps.Count(); i++)
+            {
+            currentSNAP = snaps[i];
+            BMADAPTERLOGSTRING2( "\tSnap id: %d, ", currentSNAP )
+
+            // check that not previously mapped
+            TBool found = EFalse;
+            
+            for ( TInt j( 0 ); j < aPreviousURISegmentList.Count(); j++ )
+                {
+                TSmlDmMappingInfo mapping = aPreviousURISegmentList.At( j );
+                // snap already has mapping
+                if ( currentSNAP == DesToIntL( mapping.iURISegLUID ) )
+                    {
+                    BMADAPTERLOGSTRING2( " URI: %S exists ", &mapping.iURISeg )
+                    found = ETrue;
+                    // add to result list
+                    resultList->InsertL( resultList->Size(), 
+                                         mapping.iURISeg);
+                    break;
+                    }
+                }
+            if ( !found )
+                {
+                // This is new snap -> create URI and mapping and add 
+                // node name to result
+                HBufC8* uri = HBufC8::NewLC( aURI.Length() + 
+                                             KNSmlDmBmSeparator().Length() +
+                                             KSmlMaxURISegLen );
+                    
+                TPtr8 uriPtr = uri->Des(); 
+                uriPtr.Format( aURI );
+                uriPtr.Append( KNSmlDmBmSeparator );
+                uriPtr.Append( KNSmlDmBMSNAPNamePrefix ); 
+                HBufC8* luidBuf = IntToDes8L( currentSNAP );
+                CleanupStack::PushL( luidBuf );
+                uriPtr.Append( *luidBuf );
+
+                Callback().SetMappingL( uriPtr, *luidBuf );
+                resultList->InsertL( resultList->Size(), 
+                                     LastURISeg( uriPtr ) );
+                BMADAPTERLOGSTRING2( "Creating mapping for URI %S ", &uriPtr ) 
+                CleanupStack::PopAndDestroy( luidBuf );
+                CleanupStack::PopAndDestroy( uri );
+                }
+            // insert separator if not last    
+            if ( i < snaps.Count() - 1 )
+                {
+                resultList->InsertL( resultList->Size(), 
+                                     KNSmlDmBmSeparator );
+                }
+            }
+        CleanupStack::PopAndDestroy( &snaps );
+        Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
+        Callback().SetResultsL( aResultsRef, *resultList, KNullDesC8 );
+        }
+    // get child nodes of a snap node
+    else if ( NumOfURISegs( aURI ) == KNsmlDmBmSNAPNodeDepth )
+        {        
+        CSmlDmBmSettingsElement* snap = GetSnapIfBuffered( aURI );
+        // if buffered, add this command to buffer
+        if( snap )
+            {
+            CSmlDmBmCommandElement* cmd = 
+            CSmlDmBmCommandElement::NewLC( EFalse, 
+                                           aStatusRef,
+                                           aResultsRef, 
+                                           CNSmlDmBmAdapter::EGetCmd, 
+                                           KNullDesC8, 
+                                           KNullDesC8 );
+            snap->NodeBuf().AppendL( cmd );
+            CleanupStack::Pop( cmd );
+            BMADAPTERLOGSTRING2( "\tSnap %S found, buffering cmd", 
+                                 snap->MappingName() )
+            }
+        // existing snap must have luid mapped
+        else if( aLUID.Length() > 0 || snapId != KErrNotFound )
+            {
+            CSmlDmBmCommandElement* cmd = 
+            CSmlDmBmCommandElement::NewLC( EFalse, 
+                                           aStatusRef,
+                                           aResultsRef, 
+                                           CNSmlDmBmAdapter::EGetCmd, 
+                                           KNullDesC8, 
+                                           KNullDesC8 );
+            if( snapId == KErrNotFound )
+                {
+                snapId = DesToIntL( aLUID );
+                }
+            
+            iSettingStore->ExecuteCmdL( *cmd, snapId );
+            BMADAPTERLOGSTRING2( "\tCmd executed with status: %d ", 
+                                  cmd->Status() )
+            Callback().SetStatusL( aStatusRef, cmd->Status() );
+            if( cmd->Status() == CSmlDmAdapter::EOk )
+                {
+                resultList->InsertL( 0, *cmd->Data() );
+                Callback().SetResultsL( aResultsRef, 
+                                        *resultList, 
+                                        KNullDesC8 );
+                } 
+            CleanupStack::PopAndDestroy( cmd );
+            }
+        // invalid snap object
+        else
+            {
+            BMADAPTERLOGSTRING( "\tCNSmlDmBmAdapter::ChildURIListL: Error, \
+            invalid snap node" )
+            Callback().SetStatusL( aStatusRef, CSmlDmAdapter::ENotFound );
+            }           
+        }
+    else
+        {
+        BMADAPTERLOGSTRING( "\tChildURIListL: Invalid URI" )
+        }
+    CleanupStack::PopAndDestroy( resultList );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::ChildURIListL: End" )
+    }
+ 
+// --------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::AddNodeObjectL
+//  Adds a snap node. The node is buffered until all data is received.
+// --------------------------------------------------------------------------
+void CNSmlDmBmAdapter::AddNodeObjectL( const TDesC8& aURI, 
+                                       const TDesC8& aParentLUID,
+                                       TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::AddNodeObjectL: Start" )
+    BMADAPTERLOGSTRING3( "\tAddNodeObjectL  \tURI: %S, \tparent LUID: %S,", 
+                        &aURI, &aParentLUID )
+    if ( NumOfURISegs( aURI ) == KNsmlDmBmSNAPNodeDepth )
+        {
+        // if same node already exists command fails
+        CSmlDmBmSettingsElement* setting = GetSnapIfBuffered( aURI );
+        if( setting || aParentLUID.Compare( KNullDesC8) )
+            {
+            BMADAPTERLOGSTRING( "\t Snap exists" )
+            Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EAlreadyExists );
+            }
+        else if ( LastURISeg( aURI ).Length() > KSmlMaxURISegLen )
+            {
+            BMADAPTERLOGSTRING( "\t Node name too long" )
+            Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+            }
+        else
+            {
+            // Store command in buffer for later processing
+            setting = CSmlDmBmSettingsElement::NewLC( aURI );
+            iBuffer.AppendL( setting );
+            CleanupStack::Pop( setting );
+        
+            // store the add node command
+            CSmlDmBmCommandElement* command = 
+            CSmlDmBmCommandElement::NewLC( EFalse, 
+                                           aStatusRef,
+                                           KNSmlDmBmInvalidRef, 
+                                           CNSmlDmBmAdapter::EAddCmd, 
+                                           KNullDesC8, 
+                                           KNullDesC8 );
+            TInt index( iBuffer.Count() - 1 );
+            iBuffer[index]->NodeBuf().AppendL( command ); 
+            CleanupStack::Pop( command );
+            BMADAPTERLOGSTRING( "\t Cmd buffered" )
+            }
+        }
+      
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::AddNodeObjectL: End" )
+    }
+
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::UpdateLeafObjectL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */, 
+                                          const TDesC8& /* aLUID */, 
+                                          RWriteStream*& /* aStream */, 
+                                          const TDesC8& /* aType */, 
+                                          TInt /* aStatusRef */ )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::UpdateLeafObjectL: Start" )
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::UpdateLeafObjectL: End" )
+    }
+
+
+
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::ExecuteCommandL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::ExecuteCommandL( const TDesC8& /* aURI */, 
+                                        const TDesC8& /* aLUID */, 
+                                        const TDesC8& /* aArgument */, 
+                                        const TDesC8& /* aType */, 
+                                        TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::ExecuteCommandL: Start" )
+    Callback().SetStatusL(aStatusRef, CSmlDmAdapter::EError);
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::ExecuteCommandL: End" )
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::ExecuteCommandL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::ExecuteCommandL( const TDesC8& /* aURI */, 
+                                        const TDesC8& /* aLUID */, 
+                                        RWriteStream*& /* aStream */, 
+                                        const TDesC8& /* aType */, 
+                                        TInt aStatusRef )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::ExecuteCommandL: Start" )
+    Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::ExecuteCommandL: End" )
+    }
+ 
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::CopyCommandL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::CopyCommandL( const TDesC8& /* aTargetURI */ , 
+                                     const TDesC8& /* aTargetLUID */ , 
+                                     const TDesC8& /* aSourceURI */ , 
+                                     const TDesC8& /* aSourceLUID */, 
+                                     const TDesC8& /* aType */ , 
+                                     TInt aStatusRef )
+    {
+    //not supported
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CopyCommandL: Sart" )
+    Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CopyCommandL: End" )
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::StartAtomicL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::StartAtomicL()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StartAtomicL: Start" )
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StartAtomicL: End" )
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::CommitAtomicL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::CommitAtomicL()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CommitAtomicL: Start" )
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CommitAtomicL: End" )
+    }
+
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::RollbackAtomicL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::RollbackAtomicL()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::RollbackAtomicL: Start" )
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::RollbackAtomicL: End" )
+    }
+
+TBool CNSmlDmBmAdapter::StreamingSupport( TInt& /* aItemSize */ )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StreamingSupport: Start" )
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StreamingSupport: End" )
+    return EFalse;
+    }
+// -------------------------------------------------------------------------
+//  CNSmlDmBmAdapter::StreamCommittedL
+//  Not supported
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::StreamCommittedL()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StreamCommittedL: Start" )
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StreamCommittedL: End" )
+    }
+
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::CompleteOutstandingCmdsL
+//  CNSmlDmBmAdapter::CompleteOutstandingCmdsL
+// -------------------------------------------------------------------------
+void CNSmlDmBmAdapter::CompleteOutstandingCmdsL()
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CompleteOutstandingCmdsL: Start" )
+    CSmlDmBmSettingsElement* settings( NULL );
+    CSmlDmBmCommandElement* cmd( NULL );
+    TInt err(0);
+    // Read through the buffer and execute commands
+    for ( TInt i(0); i < iBuffer.Count(); )
+        {
+        settings = iBuffer[i];
+        if( settings->NodeBuf().Count() )
+            {
+            // the setting may be executed already if it has been an embedded
+            // snap for another snap
+            if ( !settings->Executed() ) 
+                {
+                //execute commands for snap
+                TRAP( err, iSettingStore->StoreSnapL( *settings )); 
+                } 
+            // if can't recover from error, don't continue processing 
+            // commands
+            if( err == KErrNoMemory || 
+                err == KErrDiskFull )
+                {
+                BMADAPTERLOGSTRING2( "\tCNSmlDmBmAdapter::\
+                CompleteOutstandingCmdsL: Error %d", err )
+                User::Leave( err );
+                }
+            // if this is a new snap and created successfully, map luid
+            if ( !settings->NodeBuf()[0]->Leaf() &&
+                 settings->NodeBuf()[0]->CmdType() == CNSmlDmBmAdapter::EAddCmd && 
+                 settings->NodeBuf()[0]->Executed() &&
+                 settings->NodeBuf()[0]->Status() == CSmlDmAdapter::EOk )
+                {
+                HBufC8* luid = IntToDes8L( settings->Luid() );
+                CleanupStack::PushL( luid );
+                Callback().SetMappingL( *settings->MappingName(), *luid );
+                BMADAPTERLOGSTRING3( "\t Setting mapping %S - %S ",
+                settings->MappingName(), luid )
+                CleanupStack::PopAndDestroy( luid );
+                }
+            // set status for all commands executed and remove the command
+            for ( TInt j( 0 ); j < settings->NodeBuf().Count(); )
+                {
+                
+                cmd = settings->NodeBuf()[j];
+                 
+                // return status values if executed
+                if ( cmd->Executed() )
+                    {
+                    
+                    Callback().SetStatusL( cmd->StatusRef(),
+                                  cmd->Status() );
+                    // for certain errors, don't continue command execution
+                    if( cmd->Status() == CSmlDmAdapter::ENoMemory )
+                        {
+                        // commands are deleted     
+                        iBuffer.ResetAndDestroy();
+                        BMADAPTERLOGSTRING( "\tCmd failed with CSmlDmAdapter::ENoMemory" )
+                        User::Leave( KErrNoMemory );
+                        }
+                   else if( cmd->Status() == CSmlDmAdapter::EDiskFull )
+                        {
+                        // commands are deleted   
+                        iBuffer.ResetAndDestroy();
+                        BMADAPTERLOGSTRING( "\tCmd failed with CSmlDmAdapter::EDiskFull" )
+                        User::Leave( KErrDiskFull );
+                        }
+                   else
+                        {
+                        BMADAPTERLOGSTRING2( 
+                            "\tCmd failed with CSmlDmAdapter::%d", 
+                            cmd->Status() )
+                        }
+                    // for get commands, also return the results
+                   if ( cmd->CmdType() == CNSmlDmBmAdapter::EGetCmd || 
+                        cmd->CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+                       {
+                       CBufBase* result = CBufFlat::NewL( cmd->Data()->Size() );
+                       CleanupStack::PushL( result );
+                       result->InsertL( 0, *cmd->Data() ); 
+                       Callback().SetResultsL( cmd->ResultRef(), 
+                                               *result, 
+                                               KNullDesC8 );
+                       CleanupStack::PopAndDestroy( result );
+                       }
+                   }
+               else
+                   {
+                   Callback().SetStatusL( cmd->StatusRef(),
+                                 CSmlDmAdapter::EError );
+                   }
+               settings->NodeBuf().Remove( j );
+               delete cmd;
+               }
+            }
+            
+        // delete settings element and remove it from buffer 
+        delete settings;
+        iBuffer.Remove( i );
+        }
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::CompleteOutstandingCmdsL: End" )
+    }
+
+
+
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::StoreSnapIfBufferedL
+// If argument snap is found in the buffer iSettingStore->StoreSNAPL is 
+// called 
+// for it and LUID is mapped. SNAP is set as executed.
+// This is called when checking if snap has embedded snap reference to 
+// another 
+// snap which is stored further in the command buffer. 
+// All embedded snap commands of this type are buffered and execution only 
+// happens with CompleteOutstandingCmdsL call. 
+// -------------------------------------------------------------------------
+    
+void CNSmlDmBmAdapter::StoreSnapIfBufferedL( const TDesC8& aURI )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StoreSnapIfBufferedL: Start" )
+    CSmlDmBmSettingsElement* snap = GetSnapIfBuffered( aURI );
+    // if snap is in buffer and is a new snap
+    if( snap && !snap->Luid() )
+        {
+        iSettingStore->StoreSnapL( *snap );
+        // set mapping if succesfully executed
+        if ( snap->NodeBuf()[0]->Executed() &&
+             snap->NodeBuf()[0]->Status() == CSmlDmAdapter::EOk )
+            {
+            HBufC8* luid = IntToDes8L( snap->Luid() );
+            CleanupStack::PushL( luid );
+            Callback().SetMappingL( *snap->MappingName(), *luid);
+            CleanupStack::PopAndDestroy( luid );
+            }
+        }
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::StoreSnapIfBufferedL: End" )
+    }
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::GetSnapUriFromLuidL
+// Returns heap desciptor holding snap node URI matching the argument LUID
+// -------------------------------------------------------------------------
+HBufC8* CNSmlDmBmAdapter::GetSnapUriFromLuidL( const TUint aSnapId )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::GetSnapURIFromLUIDL: Start" )
+    HBufC8* uri( NULL );
+    MSmlDmAdapter::TError err( MSmlDmAdapter::EOk );
+    CBufBase* fetchRes = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( fetchRes );
+    // fetch all snap nodes
+    Callback().FetchLinkL( KNSmlDmBMAdapterBMURI, *fetchRes, err );
+
+    TPtr8 snapNodes = fetchRes->Ptr( 0 );
+
+    TInt numSnaps = NumOfURISegs( snapNodes );
+        
+    // get uri-luid mappings for snap nodes
+    for ( TInt i( 0 ); i < numSnaps; i++ )
+        {
+        TPtrC8 node = LastURISeg( snapNodes );
+
+        HBufC8* uriSeg = HBufC8::NewLC( KNSmlDmBmAdapterURIMaxLength + 
+                                        node.Length());
+        uriSeg->Des().Append( KNSmlDmBMAdapterBM() );
+        uriSeg->Des().Append( KNSmlDmBmSeparator() );
+        uriSeg->Des().Append( node ); 
+
+        HBufC8* luid = Callback().GetLuidAllocL( *uriSeg );
+        CleanupStack::PopAndDestroy( uriSeg );
+        CleanupStack::PushL( luid );
+        // node may not have luid mapped if it's just created
+        if( luid->Size() )
+            {
+            TInt id = DesToIntL( *luid );
+            CleanupStack::PopAndDestroy( luid ); 
+            if ( aSnapId ==  id ) 
+                {
+                uri = HBufC8::NewLC( KNSmlDmBMAdapterBMURI().Size() + 
+                               KNSmlDmBmSeparator().Size() + 
+                               node.Size() );
+
+                uri->Des().Append( KNSmlDmBMAdapterBMURI() );
+                uri->Des().Append( KNSmlDmBmSeparator() );
+                uri->Des().Append( node );
+                break;
+                }
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy( luid );
+            }
+        snapNodes = RemoveLastURISeg( snapNodes );
+        }
+          
+    if( uri )
+        {
+         CleanupStack::Pop( uri );
+        }
+
+    CleanupStack::PopAndDestroy( fetchRes );
+
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::IdArrayToIAPList: End" )
+    return uri;
+    }
+
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::GetIapListL
+// Returns heap desciptor holding a comma separated list of AP node URIs
+// matching the luids in the argument array.
+// -------------------------------------------------------------------------
+HBufC8* CNSmlDmBmAdapter::GetIapListL( const RArray<TUint>& aIdArray )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::GetIapListL: Start" )
+    HBufC8* iapList = HBufC8::NewLC( aIdArray.Count() * 
+                                    ( KNSmlDmBmAdapterAPURIMaxLength + 
+                                      KSmlMaxURISegLen ) );
+    MSmlDmAdapter::TError err;
+    CBufBase* fetchRes = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( fetchRes );
+    // fetch dynamic AP nodes, so that LUID mapping is created
+    Callback().FetchLinkL( KNSmlDmBMAdapterIAPURI, *fetchRes, err );
+
+    // list of all nodes has a trailing '/' unlike regular uris, remove that
+    // for further handling 
+    TPtr8 iapNodes = fetchRes->Ptr( 0 );
+    if ( iapNodes.Length() > 0 && iapNodes[iapNodes.Length() - 1] == '/')
+        {
+        iapNodes = iapNodes.Left( iapNodes.Length() - 1 );
+        }
+
+    TInt numAPs = NumOfURISegs( iapNodes );
+    
+    CArrayFixFlat<TSmlDmMappingInfo>* mappings = 
+        new (ELeave) CArrayFixFlat<TSmlDmMappingInfo>( numAPs * 
+                                                       sizeof( TSmlDmMappingInfo ) );
+    CleanupStack::PushL( mappings );
+    
+   // get uri-luid mappings for all ap nodes
+    HBufC8* luid = NULL;
+    for ( TInt i( 0 ); i < numAPs; i++ )
+        {
+        TSmlDmMappingInfo m;
+        m.iURISeg = LastURISeg( iapNodes );
+        
+        HBufC8* uriSeg = HBufC8::NewLC( KNSmlDmBmAdapterAPURIMaxLength + 
+                                        m.iURISeg.Length() );
+        uriSeg->Des().Replace( 0, 
+                               uriSeg->Length(), 
+                               KNSmlDmBMAdapterIAPNode() );
+        uriSeg->Des().Append( KNSmlDmBmSeparator() );
+        uriSeg->Des().Append( m.iURISeg ); 
+
+        luid = Callback().GetLuidAllocL( *uriSeg );
+        CleanupStack::PopAndDestroy( uriSeg );
+        CleanupStack::PushL( luid );
+        m.iURISegLUID.Set( *luid );
+        mappings->AppendL( m ); 
+        iapNodes = RemoveLastURISeg( iapNodes );
+        }
+        
+    // find out URIs matching argument IAP ids
+    for (TInt i(0); i < aIdArray.Count(); i++)
+        {
+        TBool found = EFalse;
+
+        for ( TInt j( 0 ); j < mappings->Count(); j++ )
+            {
+            if ( aIdArray[i] == DesToIntL( mappings->At( j ).iURISegLUID ) )
+                {
+                // add to result
+                iapList->Des().Append( KNSmlDmBMAdapterIAPURI() );
+                iapList->Des().Append( KNSmlDmBmSeparator() );
+                iapList->Des().Append( mappings->At(j).iURISeg );
+                // not last -> add separator
+                if ( i < aIdArray.Count() - 1 )
+                    {
+                    iapList->Des().Append( KNSmlDmBmUriListSeparator );
+                    }
+                found = ETrue;
+                break;
+                }
+            }
+        if ( ! found )
+            {
+            BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::GetIapListL: \
+            Error IAP matching id not found" )
+            User::Leave( KErrNotFound );
+            }
+        }
+  
+    // cleanup each allocated luid
+    CleanupStack::PopAndDestroy( numAPs ); 
+    CleanupStack::PopAndDestroy( mappings );
+    CleanupStack::PopAndDestroy( fetchRes );
+    CleanupStack::Pop( iapList );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::GetIapListL: End" )
+    return iapList;
+    }
+    
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::GetIdArrayL
+// Returns array holding LUIDs matching the AP node in the argument list.
+// -------------------------------------------------------------------------
+RArray<TUint> CNSmlDmBmAdapter::GetIdArrayL( const TDesC8& aIAPList )
+    {
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::GetIdArrayL: Start" )
+    TPtrC8 uri;
+    RArray<TUint> iaps;
+    CleanupClosePushL( iaps );
+    uri.Set( aIAPList );
+    // fetch AP nodes so that mappings are created
+    MSmlDmAdapter::TError err;
+    CBufBase* fetchRes = CBufFlat::NewL( KSmlMaxURISegLen );
+    CleanupStack::PushL( fetchRes );
+    // fetch dynamic AP nodes, so that LUID mappings are created
+    Callback().FetchLinkL( KNSmlDmBMAdapterIAPURI, *fetchRes, err );
+    
+    for ( TInt i(0), n = NumOfURIs( aIAPList ); i < n; i++ )
+        {
+        TPtrC8 thisURI = FirstURI( uri );
+        // remove ./ from beginning
+        TPtrC8 apUri = thisURI.Mid( KNSmlDmBmAdapterURIPrefix().Length() );
+        HBufC8* luid = Callback().GetLuidAllocL( apUri );
+        CleanupStack::PushL( luid );
+        TInt id = DesToIntL( *luid );
+        CleanupStack::PopAndDestroy( luid );
+        iaps.Append( id );
+        uri.Set( RemoveFirstURI( uri ) );
+        }
+    
+    CleanupStack::PopAndDestroy( fetchRes );
+    CleanupStack::Pop( &iaps );
+    BMADAPTERLOGSTRING( "CNSmlDmBmAdapter::GetIdArrayL: End" )
+    return iaps;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::IntToDes8L
+// Converts integer to 8bit descriptor
+// --------------------------------------------------------------------------
+HBufC8* CNSmlDmBmAdapter::IntToDes8L( TInt aLuid ) const
+    {
+    HBufC8* buf = HBufC8::NewL( KMaxLengthOf32bitInteger ); 
+    TPtr8 ptrBuf = buf->Des();
+
+    // Unless aLuid is casted as TInt64, PC-Lint reports: 
+    // Significant prototype coercion
+    // 
+    ptrBuf.Num( TInt64( aLuid ) );
+    return buf;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::DesToIntL
+// Converts 8bit descriptor to int
+// --------------------------------------------------------------------------
+TUint CNSmlDmBmAdapter::DesToIntL( const TDesC8& aLuid ) const
+    {
+    __UHEAP_MARK;
+    TLex8 lex( aLuid );
+    TUint value( 0 );
+    User::LeaveIfError( lex.Val( value ) );
+    __UHEAP_MARKEND;
+    return value;
+    }
+    
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::DesToBool
+// Converts 8bit descriptor to a boolean value
+// --------------------------------------------------------------------------
+TBool CNSmlDmBmAdapter::DesToBool(const TDesC8& aBoolDes, TBool& aBool ) const
+    {
+    __UHEAP_MARK;
+    if ( !aBoolDes.Compare( KNSmlDmBMBooleanTrue ) )
+        {
+        aBool = ETrue;
+        }
+    else if ( !aBoolDes.Compare( KNSmlDmBMBooleanFalse ) )
+        {
+        aBool = EFalse;
+        }
+    else
+        {
+        __UHEAP_MARKEND;
+        return EFalse;
+        }
+    __UHEAP_MARKEND;
+    return ETrue;
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::BoolToDes8LC
+// Converts boolean value to 8bit descriptor
+// --------------------------------------------------------------------------
+
+HBufC8* CNSmlDmBmAdapter::BoolToDes8LC( TBool aBool) const
+    {
+    HBufC8* ret;
+    if( aBool )
+        {
+        ret = HBufC8::NewLC( KNSmlDmBMBooleanTrue().Size() );
+        ret->Des().Append( KNSmlDmBMBooleanTrue() ); 
+        }
+    else
+        {
+        ret = HBufC8::NewLC( KNSmlDmBMBooleanFalse().Size() );
+        ret->Des().Append( KNSmlDmBMBooleanFalse() ); 
+        }
+    return ret;
+    }
+
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::GetLuidAllocL
+// The function calls the GetLuidAllocL function of the MSmlDmCallback to get
+// the LUID which is mapped to aURI.
+// --------------------------------------------------------------------------
+HBufC8* CNSmlDmBmAdapter::GetLuidAllocL( const TDesC8& aURI )
+    {
+    return Callback().GetLuidAllocL( aURI );
+    }
+
+   
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::GetSnapIfBuffered
+// Returns a pointer to the snap CSmlDmBmSettingsElement object if found in 
+// the buffer 
+// --------------------------------------------------------------------------
+CSmlDmBmSettingsElement* CNSmlDmBmAdapter::GetSnapIfBuffered( const TDesC8& 
+                                                              aMappingName )
+    {
+    CSmlDmBmSettingsElement* settings = NULL;
+    for ( TInt i( 0 ); i<iBuffer.Count(); i++ )
+        {
+        if ( !iBuffer[i]->MappingName()->Compare( aMappingName ) )
+            {
+            settings = iBuffer[i];
+            break;
+            }
+        }
+    return settings;
+    }
+// -------------------------------------------------------------------------
+// CNSmlDmBmAdapter::FirstURI
+// Returns the first URI from a list of URIs
+// -------------------------------------------------------------------------
+TPtrC8 CNSmlDmBmAdapter::FirstURI( const TDesC8& aURIList ) const
+    {
+    __UHEAP_MARK;
+    TInt i;
+    for ( i = 0; i < aURIList.Length(); i++ )
+        {
+        if ( aURIList[i] == ',' )
+            {
+            break;
+            }
+        }
+    if ( i == aURIList.Length() - 1 )
+        {
+        __UHEAP_MARKEND;
+        return aURIList;
+        }
+    else
+        {
+        __UHEAP_MARKEND;
+        return aURIList.Mid( 0, i );
+        }
+    }
+    
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::NumOfURIs
+// Returns the num of uris
+// --------------------------------------------------------------------------
+TInt CNSmlDmBmAdapter::NumOfURIs( const TDesC8& aURIList ) const
+    {
+    __UHEAP_MARK;
+    if ( !aURIList.Length() )
+        {
+        return 0;
+        }
+    TInt numOfURIs( 1 );
+    for ( TInt i(0); i < aURIList.Length(); i++ )
+        {
+        if ( aURIList[i] == ',' )
+            {
+            numOfURIs++;
+            }
+        }
+    __UHEAP_MARKEND;
+    return numOfURIs;
+    }
+    
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::RemoveFirstURI
+// extracts first uri an returns the remaining part of the uri list 
+// --------------------------------------------------------------------------
+TPtrC8 CNSmlDmBmAdapter::RemoveFirstURI( const TDesC8& aURIList ) const
+    {
+    __UHEAP_MARK;
+    TInt i;
+    for ( i = 0; i < aURIList.Length(); i++ )
+        {
+        if ( aURIList[i] == ',' )
+            {
+            break;
+            }
+        }
+    if ( i <  aURIList.Length() ) 
+        {
+        __UHEAP_MARKEND;
+        return aURIList.Mid( i + 1 );
+        }
+    else
+        {
+        __UHEAP_MARKEND;
+        return aURIList.Mid( i ); 
+        }
+        
+    }
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::LastURISeg
+// Returns the last uri segemnt of a uri. 
+// --------------------------------------------------------------------------
+TPtrC8 CNSmlDmBmAdapter::LastURISeg( const TDesC8& aURI ) const
+    {
+    __UHEAP_MARK;
+    TInt i;
+    for ( i=aURI.Length()-1; i >= 0; i-- )
+        {
+        if ( aURI[i]=='/' )
+            {
+            break;
+            }
+        }
+    if ( i==0 )
+        {
+        __UHEAP_MARKEND;
+        return aURI;
+        }
+    else
+        {
+        __UHEAP_MARKEND;
+        return aURI.Mid( i + 1 );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::RemoveLastURISeg
+// returns parent uri, i.e. removes last uri segment
+// --------------------------------------------------------------------------
+TPtrC8 CNSmlDmBmAdapter::RemoveLastURISeg( const TDesC8& aURI ) const
+    {
+    __UHEAP_MARK;
+    TInt i;
+    for ( i = aURI.Length()-1; i >= 0; i-- )
+        {
+        if ( aURI[i]=='/' )
+            {
+            break;
+            }
+        }
+    if ( i > -1 )
+        {
+        __UHEAP_MARKEND;
+        return aURI.Left( i );
+        }
+    else
+        {
+        __UHEAP_MARKEND;
+        return aURI;
+        }
+    
+    }
+
+
+
+// --------------------------------------------------------------------------
+// CNSmlDmBmAdapter::NumOfURISegs
+// Returns the num of uri segs
+// --------------------------------------------------------------------------
+TInt CNSmlDmBmAdapter::NumOfURISegs( const TDesC8& aURI ) const
+    {
+    __UHEAP_MARK;
+    TInt numOfURISegs( 1 );
+    for ( TInt i(0); i < aURI.Length(); i++ )
+        {
+        if ( aURI[i]=='/' )
+            {
+            numOfURISegs++;
+            }
+        }
+    __UHEAP_MARKEND;
+    return numOfURISegs;
+    }
+
+TInt CNSmlDmBmAdapter::MapPredefinedSnapsL( const TDesC8& aURI, const TDesC8& aLUID )
+{
+    TInt snapId( KErrNotFound ); 
+    // If this is an add to pre-defined SNAPs then LUID we get is empty, but we still need
+    // to handle it.
+    if( aLUID.Length() == 0 && ( ( snapId = GetPredefinedSnapIdFromUri( aURI ) ) != KErrNotFound ) )
+        {               
+        // Check if SNAP with given ID exists (from CmManager)
+        iCmManagerExt.OpenL();
+        TRAPD( err, RCmDestinationExt dest = iCmManagerExt.DestinationL( snapId ) );
+        iCmManagerExt.Close();
+        
+        // If exists -> Call SetMapping to set LUID.
+        if( err == KErrNone )
+            {
+            HBufC8* uri = HBufC8::NewLC( KNSmlDmBMAdapterBM().Length() + 
+                                         KNSmlDmBmSeparator().Length() +
+                                         KSmlMaxURISegLen );
+                
+            TPtr8 uriPtr = uri->Des(); 
+            uriPtr.Format( KNSmlDmBMAdapterBM );
+            uriPtr.Append( KNSmlDmBmSeparator );
+            uriPtr.Append( KNSmlDmBMSNAPNamePrefix ); 
+            HBufC8* luidBuf = IntToDes8L( snapId );
+            CleanupStack::PushL( luidBuf );
+            uriPtr.Append( *luidBuf );
+    
+            Callback().SetMappingL( uriPtr, *luidBuf );
+            
+            BMADAPTERLOGSTRING2( "Creating mapping for URI %S ", &uriPtr ) 
+            CleanupStack::PopAndDestroy( luidBuf );
+            CleanupStack::PopAndDestroy( uri );
+            }                                          
+        }                       
+    return snapId;
+}
+
+TInt CNSmlDmBmAdapter::GetPredefinedSnapIdFromUri( const TDesC8& aURI ) const
+    {    
+    TInt ret = KErrNotFound;
+    
+    // First check that URI starts with BearerManagementSNAP
+    TInt startIndex = aURI.Find( KNSmlDmBMAdapterBM );
+    
+    if( startIndex == KErrNotFound )
+        {
+        return KErrNotFound;
+        }
+    
+    // Then assume there is separator
+    startIndex += KNSmlDmBMAdapterBM().Length() + KNSmlDmBmSeparator().Length();
+    
+    if( startIndex >= aURI.Length() )
+        {
+        // No separator. This was an access to ./BearerManagementSNAP
+        return KErrNotFound;
+        }
+    
+    TPtrC8 predefinedUriStart = aURI.Mid( startIndex  );
+    
+    startIndex = predefinedUriStart.Find( KNSmlDmBMSNAPNamePrefix );
+    
+    // Result should be zero ( = start of string)
+    if( startIndex != 0 )
+        {
+        return KErrNotFound;
+        }
+    
+    startIndex += KNSmlDmBMSNAPNamePrefix().Length();     
+    
+    TInt endIndex = 0;
+    
+    endIndex = predefinedUriStart.Find( KNSmlDmBmSeparator );
+    
+    
+    
+    if ( endIndex == KErrNotFound )
+        {
+        TPtrC8 snapId = predefinedUriStart.Mid( startIndex );
+        TRAPD( err, ret = DesToIntL( snapId ) );
+        if( err != KErrNone )
+            {
+            ret = KErrNotFound;
+            }       
+        }
+    else
+        {
+        TPtrC8 snapId = predefinedUriStart.Mid( startIndex, endIndex - startIndex );
+        TRAPD( err, ret = DesToIntL( snapId ) );
+        if( err != KErrNone )
+            {
+            ret = KErrNotFound;
+            }       
+        }    
+    return ret;    
+    }
+
+
+
+//---------------------- CSmlDmBmCommandElement -------------------------//
+
+// --------------------------------------------------------------------------
+// CSmlDmBmCommandElement* CSmlDmBmCommandElement::NewLC
+// --------------------------------------------------------------------------
+
+CSmlDmBmCommandElement* CSmlDmBmCommandElement::NewLC( TBool aLeaf,
+                                                       TInt aStatusRef, 
+                                                       TInt aResultRef, 
+                                                       CNSmlDmBmAdapter::TCommandType aCmdType,
+                                                       const TDesC8& aLastUriSeg, 
+                                                       const TDesC8& aData )
+    {
+    CSmlDmBmCommandElement* self = new (ELeave) CSmlDmBmCommandElement( aLeaf, 
+                                                                        aStatusRef, 
+                                                                        aResultRef, 
+                                                                        aCmdType );
+    CleanupStack::PushL(self);
+    self->ConstructL( aLastUriSeg, aData );
+    return self;
+    }
+    
+// --------------------------------------------------------------------------
+// CSmlDmBmCommandElement::~CSmlDmBmCommandElement
+// --------------------------------------------------------------------------
+CSmlDmBmCommandElement::~CSmlDmBmCommandElement()
+    {
+    delete iLastUriSeg;
+    delete iData;
+    }
+    
+// --------------------------------------------------------------------------
+// CSmlDmBmCommandElement::CSmlDmBmCommandElement
+// --------------------------------------------------------------------------
+CSmlDmBmCommandElement::CSmlDmBmCommandElement( TBool aLeaf,
+                                                TInt aStatusRef, 
+                                                TInt aResultRef, 
+                                                CNSmlDmBmAdapter::TCommandType  aCmdType )
+                                                : iStatus( CSmlDmAdapter::EError ),
+                                                iLeaf( aLeaf ),
+                                                iStatusRef( aStatusRef ),
+                                                iResultRef( aResultRef ),
+                                                iCmdType( aCmdType ),
+                                                iData( NULL )
+                                                
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CSmlDmBmCommandElement::ConstructL
+// --------------------------------------------------------------------------
+void CSmlDmBmCommandElement::ConstructL( const TDesC8& aLastUriSeg, 
+                                         const TDesC8& aData )
+    {
+    iLastUriSeg = aLastUriSeg.AllocL();
+    iData = aData.AllocL();
+    }
+
+//---------------------- CSmlDmBmSettingsElement -------------------------//
+
+// --------------------------------------------------------------------------
+// CSmlDmBmSettingsElement* CSmlDmBmSettingsElement::NewLC
+// --------------------------------------------------------------------------
+CSmlDmBmSettingsElement* CSmlDmBmSettingsElement::NewLC( const TDesC8& aMappingName )
+    {
+    CSmlDmBmSettingsElement* self = new (ELeave) CSmlDmBmSettingsElement();
+    CleanupStack::PushL(self);
+    self->ConstructL( aMappingName );
+    return self;
+    }
+// --------------------------------------------------------------------------
+// CSmlDmBmSettingsElement::~CSmlDmBmSettingsElement
+// --------------------------------------------------------------------------
+CSmlDmBmSettingsElement::~CSmlDmBmSettingsElement()
+    {
+    // deallocate all elements
+    iNodeBuf.ResetAndDestroy();
+    iNodeBuf.Close();
+    delete iMappingName;
+    }
+
+// --------------------------------------------------------------------------
+// CSmlDmBmSettingsElement::CSmlDmBmSettingsElement
+// --------------------------------------------------------------------------
+CSmlDmBmSettingsElement::CSmlDmBmSettingsElement()
+                                                : iExecuted( EFalse ),
+                                                  iLuid( 0 ),
+                                                  iMappingName( NULL ) 
+    {
+    
+    }
+// --------------------------------------------------------------------------
+// CSmlDmBmSettingsElement::ConstructL
+// --------------------------------------------------------------------------
+void CSmlDmBmSettingsElement::ConstructL( const TDesC8& aMappingName )
+    {
+    iMappingName = aMappingName.AllocL();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/src/nsmldmbmadapter.rss	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,45 @@
+CHARACTER_SET UTF8/*
+* Copyright (c) 2006 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:   Resource definitions for project nsmldmbmadapter
+*
+*/
+
+
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO theRegistryInfo
+  {
+  dll_uid = 0x101f6d2f; //The DLL's 3rd UID.
+  interfaces = 
+      {
+      INTERFACE_INFO
+          {
+          interface_uid = 0x102018B4; //DM interface UID
+          implementations = 
+            {
+            IMPLEMENTATION_INFO
+                {
+                implementation_uid = 0x101f6d2f; // BM adapter implementation UID
+                version_no = 1; 
+                display_name = "";
+                default_data = "";
+                opaque_data = "";
+                }
+            };
+          }
+      };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/nsmldmbmadapter/src/nsmldmbmsettingstore.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,851 @@
+/*
+* Copyright (c) 2006 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:   Provides settings management in CommsDat.
+*
+*/
+
+
+
+
+#include <utf.h>
+#include <cmdestinationext.h>
+#include <cmconnectionmethoddef.h>
+#include <cmmanagerdef.h>
+#include <commsdat.h>
+
+#include "nsmldmbmsettingstore.h"
+#include "nsmldmbmadapter.h"
+#include "bmadapterlogger.h"
+
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::NewL
+// -----------------------------------------------------------------------------
+CNSmlDmBmSettingStore* CNSmlDmBmSettingStore::NewL( CNSmlDmBmAdapter * aAdapter )
+    {
+    CNSmlDmBmSettingStore* self = new (ELeave) CNSmlDmBmSettingStore( aAdapter );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::CNSmlDmBmSettingStore
+// -----------------------------------------------------------------------------
+CNSmlDmBmSettingStore::CNSmlDmBmSettingStore( CNSmlDmBmAdapter * aAdapter ) 
+    : iAdapter( aAdapter )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ConstructL
+// -----------------------------------------------------------------------------
+void CNSmlDmBmSettingStore::ConstructL()
+    {
+    iCmManagerExt.OpenL();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::~CNSmlDmBmSettingStore
+// -----------------------------------------------------------------------------
+CNSmlDmBmSettingStore::~CNSmlDmBmSettingStore()
+    {
+    iCmManagerExt.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::StoreSnapL
+// Stores data related to a snap object. Executes commands for the snap and fills 
+// in status and for get commands result values.
+// -----------------------------------------------------------------------------
+void CNSmlDmBmSettingStore::StoreSnapL( CSmlDmBmSettingsElement& aSettings )
+    {
+    // this snap has been handled
+    aSettings.SetExecuted( ETrue );
+
+    // error empty settings object
+    if ( !aSettings.NodeBuf().Count() )
+      {
+      BMADAPTERLOGSTRING( "StoreSnapL: Error, No commands found" )
+        return;
+        }
+       
+    TInt nameCmdInd( -1 );
+    TInt startInd( 0 );
+    RCmDestinationExt snap;
+    TInt snapId( 0 );
+    
+    // New SNAP to be stored, first command is add node
+    if( !aSettings.NodeBuf()[0]->Leaf() && 
+      aSettings.NodeBuf()[0]->CmdType() == CNSmlDmBmAdapter::EAddCmd)
+        {
+        CSmlDmBmCommandElement* snapCmd( NULL );
+        CSmlDmBmCommandElement* nameCmd( NULL );
+      
+        snapCmd = aSettings.NodeBuf()[0];
+        startInd = 1;
+
+        // find name command
+        for ( TInt i( 0 ); i < aSettings.NodeBuf().Count(); i++)
+            {
+            if ( aSettings.NodeBuf()[i]->Leaf() && 
+                 !aSettings.NodeBuf()[i]->LastUriSeg()->Compare( KNSmlDmBMAdapterName ) )
+                {
+                nameCmd = aSettings.NodeBuf()[i];
+                nameCmdInd = i;
+                break;
+                }
+            }
+        // Snap can be created when name cmd exists
+        if ( snapCmd && nameCmd )
+            {
+            HBufC* name = HBufC::NewLC( nameCmd->Data()->Size() );
+            TPtr namePtr = name->Des();
+            CnvUtfConverter::ConvertToUnicodeFromUtf8( namePtr, *nameCmd->Data() );
+            snap = iCmManagerExt.CreateDestinationL( namePtr );
+            CleanupStack::PopAndDestroy( name );
+            CleanupClosePushL( snap );
+                              
+            snap.UpdateL();
+            snapCmd->SetStatus( CSmlDmAdapter::EOk );
+            nameCmd->SetStatus( CSmlDmAdapter::EOk );
+            snapCmd->SetExecuted( ETrue );
+            nameCmd->SetExecuted( ETrue );
+            aSettings.SetLuid( snap.Id() );
+            }
+        else
+            {
+            BMADAPTERLOGSTRING( "StoreSnapL: Error, SNAP doesn't have necessary data and can't be stored" )
+            return;
+            }
+        }
+    // existing SNAP
+    else
+        {
+        snap = iCmManagerExt.DestinationL( aSettings.Luid() );
+        CleanupClosePushL( snap );
+        }
+    snapId = snap.Id();
+    TInt err( KErrNone );
+    // execute all remaining commands for the snap 
+    // starting after add node cmd
+    for ( TInt i( startInd ); i < aSettings.NodeBuf().Count(); i++ )
+        {
+        // name command is already executed -> skipped
+        if ( i != nameCmdInd )
+            {
+            CSmlDmBmCommandElement* currentCmd = aSettings.NodeBuf()[i];
+            // handle leaf commands
+            // leaves are trapped and if possible 
+            // execution continues with remaining commands
+            if ( currentCmd->Leaf() )
+                {
+                // name
+                if ( !currentCmd->LastUriSeg()->Compare( KNSmlDmBMAdapterName() ) )
+                    {
+                    // name is set more than once within same message
+                    TRAP( err, ExecuteNameCmdL( *currentCmd, snap ) );
+                    }
+                // metadata 
+                else if ( !currentCmd->LastUriSeg()->Compare( KNSmlDmBMAdapterMetadata ) )
+                    {
+                    TRAP( err, ExecuteMetadataCmdL( *currentCmd, snap ) );
+                    }
+                // protected
+                else if ( !currentCmd->LastUriSeg()->Compare( KNSmlDmBMAdapterProtected ) )
+                    {
+                    TRAP( err, ExecuteProtectionCmdL( *currentCmd, snap ) );
+                    }
+                // hidden
+                else if ( !currentCmd->LastUriSeg()->Compare( KNSmlDmBMAdapterHidden ) )
+                    {
+                    TRAP( err, ExecuteHiddenCmdL( *currentCmd, snap ) );
+                    }
+                // iap list 
+                else if ( !currentCmd->LastUriSeg()->Compare( KNSmlDmBMAdapterIAPPriorityList ) )
+                    {
+                    TRAP( err, ExecuteIapsCmdL( *currentCmd, snap ) );
+                    }
+                // embedded snap  
+                else if ( !currentCmd->LastUriSeg()->Compare( KNSmlDmBMAdapterEmbeddedSNAP ) )
+                    {
+                    TRAP( err, ExecuteEmbeddedSnapCmdL( *currentCmd, snap ) );
+                    }
+                else
+                    {
+                    // invalid node
+                    BMADAPTERLOGSTRING( "StoreSnapL: Error, Invalid node name" )
+                    currentCmd->SetStatus( CSmlDmAdapter::ENotFound );
+                    err = KErrNone;
+                    }
+                }
+            // snap node    
+            else
+                {
+                TRAP( err, ExecuteSnapCmdL( *currentCmd, snap.Id() ) );
+                // no more commands will be executed
+                // after snap is deleted
+                if( currentCmd->CmdType() == CNSmlDmBmAdapter::EDeleteCmd )
+                    {
+                    break;
+                    }
+                }
+  
+            // handle errors, check if execution may continue
+            if( err != KErrNone )
+                {
+                // cases where not worth continuing
+                // attempt to return status codes however
+                if( err == KErrNoMemory )
+                    {
+                    currentCmd->SetStatus( CSmlDmAdapter::ENoMemory );
+                    currentCmd->SetExecuted( ETrue );
+                    break;
+                    }
+                else if( err == KErrDiskFull )
+                    {
+                    currentCmd->SetStatus( CSmlDmAdapter::EDiskFull );
+                    currentCmd->SetExecuted( ETrue );
+                    break;
+                    }
+                // cases where command execution continues
+                else if( err == KErrNotFound )
+                    {
+                    currentCmd->SetStatus( CSmlDmAdapter::ENotFound );
+                    }
+                else if( err == KErrArgument )
+                    {
+                    currentCmd->SetStatus( CSmlDmAdapter::EInvalidObject );
+                    }
+                else
+                    {
+                    currentCmd->SetStatus( CSmlDmAdapter::EError );
+                    }
+                // if error occurred, reopen snap to dismis any changes
+                // continue with rest of buffered commands    
+                CleanupStack::PopAndDestroy( &snap );
+                snap = iCmManagerExt.DestinationL( snapId );
+                CleanupClosePushL( snap );
+                }
+            // if leaf cmd execution was successful and data written -> update the snap
+            else if( currentCmd->Leaf() &&
+                currentCmd->Status() == CSmlDmAdapter::EOk && 
+                currentCmd->CmdType() != CNSmlDmBmAdapter::EGetCmd && 
+                currentCmd->CmdType() != CNSmlDmBmAdapter::EGetSizeCmd )
+                {
+                snap.UpdateL();
+                }
+            else
+                {
+                BMADAPTERLOGSTRING( 
+                    "StoreSnapL: Leaf cmd execution unsuccessful" )
+                }
+            currentCmd->SetExecuted( ETrue );
+
+            }
+        }
+    CleanupStack::PopAndDestroy( &snap );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteCmdL
+// Executes a single command
+// -----------------------------------------------------------------------------
+void CNSmlDmBmSettingStore::ExecuteCmdL( CSmlDmBmCommandElement& aCmd, TUint aLuid)
+    {
+    if( !aCmd.Leaf() )
+        {
+        ExecuteSnapCmdL( aCmd, aLuid );
+        }
+    else 
+        {
+        // snap can be opened
+        RCmDestinationExt snap = iCmManagerExt.DestinationL( aLuid );
+        CleanupClosePushL( snap );
+        // name
+        if ( !aCmd.LastUriSeg()->Compare( KNSmlDmBMAdapterName ) )
+            {
+            ExecuteNameCmdL( aCmd, snap );
+            }
+        // iap list
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmBMAdapterIAPPriorityList ) )
+            {
+            ExecuteIapsCmdL( aCmd, snap );
+            } 
+        // metadata
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmBMAdapterMetadata ) )
+            {
+            ExecuteMetadataCmdL( aCmd, snap ); 
+            } 
+        // protected
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmBMAdapterProtected ) )
+            {
+            ExecuteProtectionCmdL( aCmd, snap ); 
+            }
+        // hidden 
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmBMAdapterHidden ) )
+            {
+            ExecuteHiddenCmdL( aCmd, snap ); 
+            }
+        // embedded snap
+        else if ( !aCmd.LastUriSeg()->Compare( KNSmlDmBMAdapterEmbeddedSNAP ) )
+            {
+            ExecuteEmbeddedSnapCmdL( aCmd, snap );
+            }
+        else
+            {
+            // invalid node
+            BMADAPTERLOGSTRING( "ExecuteCmdL: Error, Invalid node name" )
+            aCmd.SetStatus( CSmlDmAdapter::ENotFound );
+            }
+        // update snap if necessary              
+        if( aCmd.Status() == CSmlDmAdapter::EOk &&
+            aCmd.CmdType() != CNSmlDmBmAdapter::EGetCmd && 
+            aCmd.CmdType() != CNSmlDmBmAdapter::EGetSizeCmd)
+            {
+            snap.UpdateL();
+            }
+        aCmd.SetExecuted( ETrue );
+        CleanupStack::PopAndDestroy( &snap );
+        }
+    }
+
+   
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::GetSnapsL
+// Fetches all snap ids
+// -----------------------------------------------------------------------------
+void CNSmlDmBmSettingStore::GetSnapsL( RArray<TUint32>& aLUIDArray )
+        {
+        iCmManagerExt.AllDestinationsL( aLUIDArray);
+        }
+ 
+// -----------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteSnapCmdL
+// Executes a command for snap node. Either delete or get, adds are handled 
+// in StoreSNAPL
+// -----------------------------------------------------------------------------
+void CNSmlDmBmSettingStore::ExecuteSnapCmdL( CSmlDmBmCommandElement& aCmd, TUint aLuid )
+    {
+    RCmDestinationExt snap = iCmManagerExt.DestinationL( aLuid );
+    CleanupClosePushL( snap );
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd )
+        {
+        TBool found( EFalse );
+        // get child node list
+
+        // check if snap has embedded snap        
+        for ( TInt i(0), c = snap.ConnectionMethodCount(); i < c; i++ )
+            {
+            RCmConnectionMethodExt cm = snap.ConnectionMethodL( i );
+            if ( cm.GetBoolAttributeL( CMManager::ECmDestination ) )
+                {
+                found = ETrue;
+                break;
+                }
+            }
+        if( found )
+            {
+            aCmd.SetDataL( KNSmlDmBMAllLeafNodes );
+            }
+        else
+            {
+            aCmd.SetDataL( KNSmlDmBMAllLeafNodesNoEmbedded );
+            }
+
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        CleanupStack::PopAndDestroy( &snap );
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EDeleteCmd )
+        {
+        snap.DeleteLD();
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        CleanupStack::Pop( &snap );
+        }
+    else
+        {
+        BMADAPTERLOGSTRING( "ExecuteSnapCmdL: Error, Invalid cmd type" )
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        CleanupStack::PopAndDestroy( &snap );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteIapsCmdL
+// Executes an iap list command (add or get).
+// ---------------------------------------------------------------------------
+//    
+void CNSmlDmBmSettingStore::ExecuteIapsCmdL( CSmlDmBmCommandElement& aCmd, 
+                                             RCmDestinationExt& aSnap )
+    {
+    // for add command replace the list of iaps with the new one
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EAddCmd )
+        {
+        // remove old iaps
+        for( TInt i(0); i < aSnap.ConnectionMethodCount(); )
+            {
+            RCmConnectionMethodExt cm = aSnap.ConnectionMethodL( i );
+            // if iap, remove
+            if ( !cm.GetBoolAttributeL( CMManager::ECmDestination ) )
+                {
+                aSnap.RemoveConnectionMethodL( cm );
+                }
+            // otherwise skip the ebedded snap entry  
+            else
+                {
+                i++;
+                }
+            }
+        // add new list of iaps 
+        RArray<TUint> iaps = iAdapter->GetIdArrayL( *aCmd.Data() );
+        CleanupClosePushL( iaps );
+        TInt wildcard(0);
+        for ( TInt i( 0 ); i < iaps.Count(); i++ )
+            {
+            RCmConnectionMethodExt cm = iCmManagerExt.ConnectionMethodL( iaps[i] );
+            aSnap.AddConnectionMethodL( cm );
+            if ( aSnap.PriorityL( cm ) != CMManager::KDataMobilitySelectionPolicyPriorityWildCard )
+                {
+                // set the priority of iap as it's index in the list
+                // but preceding any iaps with wildcard priority.
+                aSnap.ModifyPriorityL( cm, i - wildcard );
+                }
+            else
+                {
+                wildcard++;
+                }
+            }
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        CleanupStack::PopAndDestroy( &iaps );
+        }
+    // for get command fetch the list of iaps
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd || 
+              aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+        {
+        RArray<TUint> ids;
+        CleanupClosePushL( ids );
+        for ( TInt i(0), c = aSnap.ConnectionMethodCount(); i < c; i++ )
+            {
+            // if not embedded snap or hidden, insert into iap list 
+            // (hidden iaps not handled by internet adapter, so link won't be found)
+            if( !aSnap.ConnectionMethodL(i).GetBoolAttributeL( CMManager::ECmDestination ) &&
+                !aSnap.ConnectionMethodL(i).GetBoolAttributeL( CMManager::ECmHidden ) )
+                {
+                ids.Insert( aSnap.ConnectionMethodL(i).GetIntAttributeL( 
+                                                       CMManager::ECmIapId ), i );
+                }
+            }
+        if ( ids.Count() > 0)
+            {
+            HBufC8* iapList = iAdapter->GetIapListL( ids );
+            CleanupStack::PushL( iapList );
+            aCmd.SetDataL( *iapList );
+            CleanupStack::PopAndDestroy( iapList );
+            }
+        else
+            {
+            aCmd.SetDataL( KNullDesC8 );
+            }
+        CleanupStack::PopAndDestroy( &ids );
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+            {
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            CleanupStack::PushL( size );
+            aCmd.SetDataL( *size );
+            CleanupStack::PopAndDestroy( size );
+            }
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        BMADAPTERLOGSTRING( "ExecuteIapsCmdL: Error, Only Add, Get and Get size commands supported" )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteProtectionCmdL
+// Executes an protected command (add or get).
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmBmSettingStore::ExecuteProtectionCmdL( CSmlDmBmCommandElement& aCmd, 
+                                                   RCmDestinationExt& aSnap )
+    {
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EAddCmd )
+        {
+        __UHEAP_MARK;
+        TInt data( iAdapter->DesToIntL( *aCmd.Data() ) );
+        // is proper protection level
+        if ( data == CMManager::EProtLevel0 )
+            {
+            aSnap.SetProtectionL( CMManager::EProtLevel0 );
+            aCmd.SetStatus( CSmlDmAdapter::EOk );
+            }
+        else if ( data == CMManager::EProtLevel1 )
+            {
+            aSnap.SetProtectionL( CMManager::EProtLevel1 );
+            aCmd.SetStatus( CSmlDmAdapter::EOk );
+            }
+        else if ( data == CMManager::EProtLevel2 )
+            {
+            aSnap.SetProtectionL( CMManager::EProtLevel2 );
+            aCmd.SetStatus( CSmlDmAdapter::EOk );
+            }
+        else
+            {
+            aCmd.SetStatus( CSmlDmAdapter::EInvalidObject );
+            }
+        __UHEAP_MARKEND;
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+        {
+        HBufC8* data = iAdapter->IntToDes8L( aSnap.ProtectionLevel() );
+        CleanupStack::PushL( data );
+        aCmd.SetDataL( *data );
+        CleanupStack::PopAndDestroy( data );
+        
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+            {
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            CleanupStack::PushL( size );
+            aCmd.SetDataL( *size );
+            CleanupStack::PopAndDestroy( size );
+            }
+
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        BMADAPTERLOGSTRING( "ExecuteProtectionCmdL: Error, Only Add, Get and Get size commands supported" )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteHiddenCmdL
+// Executes hidden command (add or get)
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmBmSettingStore::ExecuteHiddenCmdL( CSmlDmBmCommandElement& aCmd, 
+                                               RCmDestinationExt& aSnap )
+    {
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EAddCmd )
+        {
+        __UHEAP_MARK;
+        TBool data; 
+        if( iAdapter->DesToBool( *aCmd.Data(), data ) )
+            {
+            aSnap.SetHiddenL( data );
+            aCmd.SetStatus( CSmlDmAdapter::EOk );
+            }
+        else
+            {
+            aCmd.SetStatus( CSmlDmAdapter::EInvalidObject );
+            }
+        __UHEAP_MARKEND;
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+        {
+        HBufC8* data = iAdapter->BoolToDes8LC( aSnap.IsHidden() );
+        aCmd.SetDataL( *data );
+        CleanupStack::PopAndDestroy( data ); 
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+            {
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            CleanupStack::PushL( size );
+            aCmd.SetDataL( *size );
+            CleanupStack::PopAndDestroy( size );
+            }
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        BMADAPTERLOGSTRING( "ExecuteHiddenCmdL: Error, Only Add, Get and Get size commands supported" )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteMetadataCmdL
+// Executes metadata command (add or get)
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmBmSettingStore::ExecuteMetadataCmdL( CSmlDmBmCommandElement& aCmd, 
+                                                 RCmDestinationExt& aSnap )
+    {
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EAddCmd )
+        {
+        __UHEAP_MARK;
+        
+        TInt data( iAdapter->DesToIntL( *aCmd.Data() ) );
+        // AND with inversed bit masks to check if data 
+        // has bits set that are not defined for metadata
+        if( ( data & 
+              ~CMManager::ESnapMetadataHighlight &
+              ~CMManager::ESnapMetadataHiddenAgent & 
+              ~CMManager::ESnapMetadataPurpose ) )
+            {
+            aCmd.SetStatus( CSmlDmAdapter::EError );
+            }
+        // set value for each metadata bit
+        else
+            {
+            aSnap.SetMetadataL( CMManager::ESnapMetadataHighlight, 
+                                CMManager::ESnapMetadataHighlight & data );
+            aSnap.SetMetadataL( CMManager::ESnapMetadataHiddenAgent, 
+                                CMManager::ESnapMetadataHiddenAgent & data );
+            aSnap.SetMetadataL( CMManager::ESnapMetadataPurpose, 
+                              ( CMManager::ESnapMetadataPurpose & data ) >> KShift8 );
+            aCmd.SetStatus( CSmlDmAdapter::EOk );
+            }
+        __UHEAP_MARKEND;
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+        {
+        // get all metadata values
+        TInt metadata(0);
+        metadata = aSnap.MetadataL( CMManager::ESnapMetadataHighlight ) +
+                   aSnap.MetadataL( CMManager::ESnapMetadataHiddenAgent ) + 
+                 ( aSnap.MetadataL( CMManager::ESnapMetadataPurpose ) << KShift8 );
+        HBufC8* data = iAdapter->IntToDes8L( metadata );
+        CleanupStack::PushL( data );
+        aCmd.SetDataL( *data ); 
+        CleanupStack::PopAndDestroy( data );
+        
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+            {
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            CleanupStack::PushL( size );
+            aCmd.SetDataL( *size );
+            CleanupStack::PopAndDestroy( size );
+            }
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        BMADAPTERLOGSTRING( "ExecuteMetadataCmdL: Error, Only Add, Get and Get size commands supported" )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteEmbeddedSnapCmdL
+// Executes embedded snap command (add, get or delete)
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmBmSettingStore::ExecuteEmbeddedSnapCmdL( CSmlDmBmCommandElement& aCmd, 
+                                                     RCmDestinationExt& aSnap )
+    {
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EAddCmd )
+        {
+        // Remove ./ from beginning of the URI
+        TPtrC8 embeddedUri = aCmd.Data()->Mid( KNSmlDmBmAdapterURIPrefix().Length() );
+
+        // if the embedded snap is still in buffer it's stored here
+        iAdapter->StoreSnapIfBufferedL( embeddedUri );
+        // LUID mapping is assumed done by this time
+
+        // get SNAP id for the URI 
+        HBufC8* luid = iAdapter->GetLuidAllocL( embeddedUri );
+        CleanupStack::PushL( luid );
+        if ( luid->Size() > 0 )
+            {
+            TInt id = iAdapter->DesToIntL( *luid );
+
+            // open snap with the id
+            RCmDestinationExt embedded = iCmManagerExt.DestinationL( id );
+            CleanupClosePushL( embedded );
+
+            // check if snap has an existing embedded snap                       
+            for ( TInt i(0), c = aSnap.ConnectionMethodCount(); i < c; i++ )
+                {
+                RCmConnectionMethodExt cm = aSnap.ConnectionMethodL( i );
+                // remove existing embedded snap before adding new one
+                if ( cm.GetBoolAttributeL( CMManager::ECmDestination ) )
+                    {
+                    aSnap.DeleteConnectionMethodL( cm );
+                    break;
+                }
+            }
+            aSnap.AddEmbeddedDestinationL( embedded ); 
+            CleanupStack::PopAndDestroy( &embedded );
+            aCmd.SetStatus( CSmlDmAdapter::EOk );
+            }
+        else
+            {
+            // no luid for the uri
+            BMADAPTERLOGSTRING( "ExecuteEmbeddedSnapCmdL: No LUID found for embedded snap" )
+            aCmd.SetStatus( CSmlDmAdapter::EInvalidObject );
+            }
+        aCmd.SetExecuted( ETrue );
+        CleanupStack::PopAndDestroy( luid );
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+        {
+        // get destination
+        TInt embeddedId( -1 );
+        for ( TInt i( 0 ), c = aSnap.ConnectionMethodCount(); i < c; i++ )
+            {
+            RCmConnectionMethodExt cm = aSnap.ConnectionMethodL( i );
+            // check if embedded
+            if ( cm.GetBoolAttributeL( CMManager::ECmDestination ) )
+                {
+                // get snap id
+                embeddedId = cm.GetIntAttributeL( CMManager::ECmId );
+
+                // CMManager::ECmId returns element id, 
+                // GetSnapUriFromLuidL needs record id
+                embeddedId = ( embeddedId & KCDMaskShowRecordId ) >> KShift8;
+
+                HBufC8* embeddedUri = iAdapter->GetSnapUriFromLuidL( embeddedId );
+                CleanupStack::PushL( embeddedUri );
+                
+                if( !embeddedUri )
+                    {
+                    embeddedId = -1;
+                    break;
+                    }
+                aCmd.SetDataL( *embeddedUri );
+                CleanupStack::PopAndDestroy( embeddedUri );
+                
+                // for size command, set the command data to be the 
+                // size of the fetched data
+                if( aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+                    {
+                    HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+                    CleanupStack::PushL( size );
+                    aCmd.SetDataL( *size );
+                    CleanupStack::PopAndDestroy( size );
+                    }
+                aCmd.SetStatus( CSmlDmAdapter::EOk );
+                aCmd.SetExecuted( ETrue );
+                break;
+                }
+            }
+        // if no embedded snap exists return not found
+        if ( embeddedId < 0 )
+            {
+            BMADAPTERLOGSTRING( "ExecuteEmbeddedSnapCmdL: Get, No embedded snap found" )
+            aCmd.SetStatus( CSmlDmAdapter::ENotFound );
+            aCmd.SetExecuted( ETrue );
+            }
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EDeleteCmd )
+        {
+        TBool found( EFalse);
+        for ( TInt i( 0 ), c = aSnap.ConnectionMethodCount(); i < c; i++ )
+            {
+            RCmConnectionMethodExt cm = aSnap.ConnectionMethodL( i );
+            // find embedded snap and delete it
+            if ( cm.GetBoolAttributeL( CMManager::ECmDestination ) )
+                {
+                found = ETrue;
+                aSnap.DeleteConnectionMethodL( cm );
+                aCmd.SetStatus( CSmlDmAdapter::EOk );
+                break;
+                }
+            }
+        if ( !found )
+            {
+            BMADAPTERLOGSTRING( "ExecuteEmbeddedSnapCmdL: Delete, No embedded snap found" )
+            aCmd.SetStatus( CSmlDmAdapter::ENotFound );
+            aCmd.SetExecuted( ETrue );
+            }
+        }
+    else    
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        aCmd.SetExecuted( ETrue );
+        BMADAPTERLOGSTRING( "ExecuteEmbeddedSnapCmdL: Error, command not supported" )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CNSmlDmBmSettingStore::ExecuteNameCmdL
+// Executes name command (add or get )
+// ---------------------------------------------------------------------------
+//
+void CNSmlDmBmSettingStore::ExecuteNameCmdL( CSmlDmBmCommandElement& aCmd, 
+                                             RCmDestinationExt& aSnap )
+    {
+    if ( aCmd.CmdType() == CNSmlDmBmAdapter::EAddCmd )
+        {
+        HBufC* name = HBufC::NewLC( aCmd.Data()->Size() );
+        TPtr namePtr = name->Des();
+        CnvUtfConverter::ConvertToUnicodeFromUtf8( namePtr, *aCmd.Data() );
+        aSnap.SetNameL( namePtr );
+        CleanupStack::PopAndDestroy( name );
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        }
+    else if ( aCmd.CmdType() == CNSmlDmBmAdapter::EGetCmd ||
+              aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+        {
+        HBufC* data = aSnap.NameLC();
+        HBufC8* data8 = HBufC8::NewLC( data->Size() );
+        TPtr8 toPtr = data8->Des();
+        CnvUtfConverter::ConvertFromUnicodeToUtf8( toPtr, *data );
+        aCmd.SetDataL( *data8 );
+        CleanupStack::PopAndDestroy( data8 );
+        CleanupStack::PopAndDestroy( data );
+       
+        // for size command, set the command data to be the 
+        // size of the fetched data
+        if( aCmd.CmdType() == CNSmlDmBmAdapter::EGetSizeCmd )
+            {
+            HBufC8* size = iAdapter->IntToDes8L( aCmd.Data()->Size() );
+            CleanupStack::PushL( size );
+            aCmd.SetDataL( *size );
+            CleanupStack::PopAndDestroy( size );
+            }
+        aCmd.SetStatus( CSmlDmAdapter::EOk );
+        aCmd.SetExecuted( ETrue );
+        }
+    else    
+        {
+        // unsupported command
+        // this is checked by framework
+        aCmd.SetStatus( CSmlDmAdapter::EError );
+        BMADAPTERLOGSTRING( "ExecuteEmbeddedSnapCmdL: Error, Only Add, Get and Get size commands supported" )
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/data/wlanctrldcmoadapter.rss	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,49 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include "registryinfo.rh"
+
+// Declares info for two implementations
+RESOURCE REGISTRY_INFO theInfo
+	{
+	// UID for the DLL
+	dll_uid = 0x20022FB5;
+	// Declare array of interface info
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			// UID of interface that is implemented
+			interface_uid = 0x2001FD40;
+			implementations = 
+				{
+				// Info for WlanCtrlDCMOAdapter
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = 0x20022FB4;
+					version_no = 1;
+					display_name = "WlanCtrlDCMOAdapter";
+					default_data = "text/wml||Allow/Disallow Wifi.";
+					opaque_data = "WLAN";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/group/bld.inf	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,32 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+wlanctrldcmoadapter.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/group/wlanctrldcmoadapter.mmp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,43 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <platform_paths.hrh>
+
+//CAPABILITY  	CAP_ECOM_PLUGIN
+CAPABILITY  	CAP_GENERAL_DLL
+TARGET 			wlanctrldcmoadapter.dll
+TARGETTYPE 		PLUGIN
+UID 			0x10009D8D 0x20022FB5
+VENDORID 		VID_DEFAULT
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+
+USERINCLUDE 	../inc 
+
+SOURCEPATH	../data
+START RESOURCE wlanctrldcmoadapter.rss
+TARGET wlanctrldcmoadapter.rsc
+END
+
+LIBRARY 		euser.lib ECom.lib featmgr.lib
+LIBRARY			efsrv.lib commonengine.lib
+
+SOURCEPATH ../src
+SOURCE wlanctrldcmoadapterproxy.cpp wlanctrldcmoadapter.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/inc/wlanctrldcmoadapter.h	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,60 @@
+//
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#ifndef _WlanCtrlDCMOAdapter__
+#define _WlanCtrlDCMOAdapter__
+
+#include "dcmointerface.h"
+#include "dcmoconst.h"
+
+// An implementation of the CDCMOInterface definition
+class CWLanCtrlDCMOAdapter : public CDCMOInterface
+	{
+public:
+	// Standardised safe construction which leaves nothing the cleanup stack.
+	static CWLanCtrlDCMOAdapter* NewL(TAny* aInitParams);
+
+	// Destructor	
+	~CWLanCtrlDCMOAdapter();
+
+	// Implementation of CDCMOInterface
+    virtual TDCMOStatus  GetDCMOPluginIntAttributeValueL( TDCMONode aId, TInt& aValue); 
+    virtual TDCMOStatus  GetDCMOPluginStrAttributeValueL( TDCMONode aId, TDes& aStrValue);
+    virtual TDCMOStatus  SetDCMOPluginIntAttributeValueL( TDCMONode aId, TInt aValue);
+    virtual TDCMOStatus  SetDCMOPluginStrAttributeValueL( TDCMONode aId, const TDes& aStrValue);
+    virtual void GetLocalizedNameL( HBufC*& aLocName );
+	
+private:
+	// Construction
+	CWLanCtrlDCMOAdapter(TAny* aInitParams);
+	void ConstructL();
+	TDCMOStatus MapFeatureControlError( TInt aErrorCode );
+
+private:
+	// Data to pass back from implementation to client
+	HBufC* iProperty;
+	HBufC* iDescription;
+	// Parameters taken from client
+	CDCMOInterface::TDCMOInterfaceInitParams* iInitParams;
+	
+	
+	};  
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/rom/wlanctrldcmoadapter.iby	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,31 @@
+/*
+* ============================================================================
+* Copyright (c) 2009 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:
+*
+* ============================================================================
+*/
+
+#include <bldvariant.hrh>
+
+#ifndef __WLANCTRLDCMOADAPTER_IBY__
+#define __WLANCTRLDCMOADAPTER_IBY__
+
+#ifdef __SYNCML_DM // nothing should be installed from this .iby file if __SYNCML_DM feature is not selected
+
+ECOM_PLUGIN(wlanctrldcmoadapter.dll,wlanctrldcmoadapter.rsc)
+
+#endif // __SYNCML_DM 
+
+#endif //__WLANCTRLDCMOADAPTER_IBY__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/src/wlanctrldcmoadapter.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,208 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <featurecontrol.h>
+#include <featmgr.h>
+#include <stringresourcereader.h>
+#include <data_caging_path_literals.hrh> 
+#include <bautils.h>
+
+#include <dcmo.rsg>
+
+#include "wlanctrldcmoadapter.h"
+
+_LIT( KWlanCtrlProperty, "WLAN" );
+_LIT( KDisableWlanDescription, "Used to enable/disable the WLAN connectivity." ); // Description
+_LIT( KRuntimeResourceFileName, "z:dcmo.rsc" );
+
+TDCMOStatus CWLanCtrlDCMOAdapter::MapFeatureControlError( TInt aErrorCode )
+    {
+    TDCMOStatus status( EDcmoFail );
+    
+    switch ( aErrorCode )
+        {
+        case KErrNone:
+            status = EDcmoSuccess;
+            break;
+        case KErrPermissionDenied:
+        case KErrAccessDenied:
+            status = EDcmoAccessDenied;
+            break;
+        case KErrNotFound:
+            status = EDcmoNotFound;
+            break;
+        default:
+            break;
+        }
+    return status;
+    }
+
+// Construction and destruction functions
+
+CWLanCtrlDCMOAdapter* CWLanCtrlDCMOAdapter::NewL( TAny* aParams )
+	{
+	CWLanCtrlDCMOAdapter* self = new ( ELeave ) CWLanCtrlDCMOAdapter( aParams );  
+	CleanupStack::PushL( self );
+	self->ConstructL(); 
+	CleanupStack::Pop();
+	return self;
+	}
+
+CWLanCtrlDCMOAdapter::~CWLanCtrlDCMOAdapter()
+	{	
+	FeatureManager::UnInitializeLib();
+	
+	delete iProperty;
+	delete iDescription;
+	}
+
+CWLanCtrlDCMOAdapter::CWLanCtrlDCMOAdapter( TAny* aInitParams )
+:  iInitParams( ( CDCMOInterface::TDCMOInterfaceInitParams* ) aInitParams )
+	{
+	// See ConstructL() for initialisation completion.
+	}
+
+void CWLanCtrlDCMOAdapter::ConstructL()
+	{	
+	// Set up the data to pass back
+	iProperty = KWlanCtrlProperty().AllocL();
+	iDescription = KDisableWlanDescription().AllocL();
+	
+    FeatureManager::InitializeLibL();
+
+	}
+
+
+// Implementation of CDCMOInterface
+TDCMOStatus CWLanCtrlDCMOAdapter::SetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt aValue)
+{
+	TDCMOStatus status(EDcmoFail);
+	TInt err( KErrNone );
+	
+	switch( aId )
+	{
+		case EDenyUserEnable:
+		    status = EDcmoNotSupported;
+		    break;
+		case ENotifyUser:
+		    status = EDcmoNotSupported;
+			break;
+		case EEnable:	
+		    {
+            RFeatureControl featureControl;
+            TUid wlanUid( TUid::Uid( KFeatureIdProtocolWlan ) ); 
+            err = featureControl.Connect();
+            
+            if ( err == KErrNone )
+                {
+                if( aValue == 0 )
+                    {
+                    // Disable WLAN
+                    err = featureControl.DisableFeature( wlanUid );
+		            }
+                else if ( aValue == 1 )
+                    {
+                    // Enable WLAN
+                    err = featureControl.EnableFeature( wlanUid );
+                    }
+                status = MapFeatureControlError( err );
+                featureControl.Close();
+                }
+            
+		    }
+		    break;
+		default:
+		    break;
+	}
+	
+	return status;
+}
+
+TDCMOStatus CWLanCtrlDCMOAdapter::GetDCMOPluginIntAttributeValueL(TDCMONode aId, TInt& aValue)
+{
+	TDCMOStatus status( EDcmoSuccess );
+	
+	switch(aId)
+	{
+		case EGroup: 
+		    aValue = EConnectivity;
+		    break;
+		case EAttached:
+		    aValue = EFalse;
+		    break;
+		case EEnabled:	
+		    aValue = FeatureManager::FeatureSupported( KFeatureIdProtocolWlan );		    
+		    break;    
+		case EDenyUserEnable:
+		    aValue = EFalse;
+		    break; 
+		case ENotifyUser:
+		    aValue = ETrue;
+		    break;
+		case EEnable:
+		    status = EDcmoAccessDenied;
+		    break;
+		default:
+		    break;
+	}
+	
+	return status;
+}
+
+TDCMOStatus CWLanCtrlDCMOAdapter::SetDCMOPluginStrAttributeValueL( TDCMONode   /* aId */, 
+                                                                   const TDes& /* aStrValue */ )
+{
+	// Nothing to do
+	TDCMOStatus status( EDcmoFail );
+	
+	return status;	
+}
+
+TDCMOStatus CWLanCtrlDCMOAdapter::GetDCMOPluginStrAttributeValueL( TDCMONode aId, TDes& aStrValue ) 
+{
+	TDCMOStatus status( EDcmoSuccess );
+	switch( aId )
+	{
+		case EProperty: 	
+		    aStrValue = *iProperty;
+		    break;
+		case EDescription:	
+		    aStrValue = *iDescription;
+		    break;
+		default:			
+		    status = EDcmoNotFound;
+		    break;
+	}
+		
+	return status;
+}
+
+void CWLanCtrlDCMOAdapter::GetLocalizedNameL( HBufC*& aLocName )
+    {
+    TFileName myFileName;
+    TParse* parseObj = new(ELeave) TParse();
+    TInt errInt = parseObj->Set( KRuntimeResourceFileName(), &KDC_RESOURCE_FILES_DIR, NULL );
+    myFileName = parseObj->FullName();
+    delete parseObj;
+    CStringResourceReader* resReader = CStringResourceReader::NewL( myFileName );
+    TPtrC buf;
+    buf.Set(resReader->ReadResourceString(R_DM_RUN_TIME_VAR_WLAN)); 
+    aLocName = buf.AllocL() ; 
+    delete resReader;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/omadmextensions/adapters/wlanctrldcmoadapter/src/wlanctrldcmoadapterproxy.cpp	Thu Jan 07 12:39:15 2010 +0200
@@ -0,0 +1,43 @@
+/*
+ * ==============================================================================
+ * Copyright (c) 2009 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:
+ * 
+ * ==============================================================================
+ */
+
+#include <e32std.h>
+#include <implementationproxy.h>
+
+#include "wlanctrldcmoadapter.h"
+
+#ifndef IMPLEMENTATION_PROXY_ENTRY
+#define IMPLEMENTATION_PROXY_ENTRY( aUid, aFuncPtr )  {{aUid},(aFuncPtr)}
+#endif
+
+
+// Map the interface UIDs to implementation factory functions
+const TImplementationProxy ImplementationTable[] = 
+	{
+		IMPLEMENTATION_PROXY_ENTRY(0x20022FB4, CWLanCtrlDCMOAdapter::NewL),
+	};
+
+// Exported proxy for instantiation method resolution
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+	return ImplementationTable;
+	}
+