vpnengine/dmadipsecvpn/src/dmadddf.cpp
changeset 0 33413c0669b9
equal deleted inserted replaced
-1:000000000000 0:33413c0669b9
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Implementation of CDmAdDdf.
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <utf.h>
       
    20 
       
    21 #include "dmadddf.h"
       
    22 #include "dmadeventlog.h"
       
    23 #include "dmadutil.h"
       
    24 #include "vpnlogger.h"
       
    25 
       
    26 CDmAdDdf* CDmAdDdf::NewL(MDmAdCallBack* aDmAdCallBack, CDmAdStore* aStore)
       
    27     {
       
    28     TRACE("CDmAdDdf::NewL");
       
    29     
       
    30     CDmAdDdf* self = NewLC(aDmAdCallBack, aStore);
       
    31     CleanupStack::Pop();
       
    32     return self;
       
    33     }
       
    34 
       
    35 CDmAdDdf* CDmAdDdf::NewLC(MDmAdCallBack* aDmAdCallBack, CDmAdStore* aStore)
       
    36     {
       
    37     CDmAdDdf* self = new (ELeave) CDmAdDdf(aDmAdCallBack, aStore);
       
    38     CleanupStack::PushL(self);
       
    39     self->ConstructL();
       
    40     return self;
       
    41     }
       
    42     
       
    43 void CDmAdDdf::ConstructL(void)
       
    44     {
       
    45     TRACE("CDmAdDdf::ConstructL");
       
    46     }
       
    47 
       
    48 CDmAdDdf::CDmAdDdf(MDmAdCallBack* aDmAdCallBack, CDmAdStore* aStore) :
       
    49    iCallBack(aDmAdCallBack), iStore(aStore)
       
    50     {
       
    51     TRACE("CDmAdDdf::CDmAdDdf");
       
    52     }
       
    53 
       
    54 CDmAdDdf::~CDmAdDdf()
       
    55     {
       
    56     TRACE("CDmAdDdf::~CDmAdDdf");
       
    57     }
       
    58     
       
    59 //===================================================================================================
       
    60     
       
    61 void CDmAdDdf::BuildDDFVersionL(CBufBase& aDDFVersion)
       
    62     {
       
    63     TRACE("CDmAdDdf::BuildDDFVersionL");
       
    64     aDDFVersion.InsertL(0, KDmAdDdfVersion);
       
    65     }
       
    66 
       
    67 void CDmAdDdf::BuildDDFStructureL(MSmlDmDDFObject& aDDF)
       
    68     {
       
    69     TRACE("CDmAdDdf::BuildDDFStructureL");
       
    70     
       
    71     TSmlDmAccessTypes accessTypesExec;
       
    72     accessTypesExec.SetReplace(); // accessTypesExec.SetExec();
       
    73 
       
    74     TSmlDmAccessTypes accessTypesGet;
       
    75     accessTypesGet.SetGet();
       
    76 
       
    77     TSmlDmAccessTypes accessTypesAdd;
       
    78     accessTypesAdd.SetAdd();
       
    79     
       
    80     TSmlDmAccessTypes accessTypesGetAdd;
       
    81     accessTypesGetAdd.SetGet();
       
    82     accessTypesGetAdd.SetAdd();
       
    83     
       
    84     TSmlDmAccessTypes accessTypesGetDelete;
       
    85     accessTypesGetDelete.SetGet();
       
    86     accessTypesGetDelete.SetDelete();
       
    87     
       
    88     TSmlDmAccessTypes accessTypesAll;
       
    89     accessTypesAll.SetGet();
       
    90     accessTypesAll.SetAdd();
       
    91     accessTypesAll.SetDelete();
       
    92     accessTypesAll.SetReplace();
       
    93     
       
    94     TSmlDmAccessTypes accessTypesNoDelete;
       
    95     accessTypesNoDelete.SetGet();
       
    96     accessTypesNoDelete.SetAdd();
       
    97     accessTypesNoDelete.SetReplace();
       
    98 
       
    99     MSmlDmDDFObject* obj;
       
   100     MSmlDmDDFObject* objNokiaIpSecVpn;
       
   101     MSmlDmDDFObject* objIpSecVpnGeneral;
       
   102     MSmlDmDDFObject* objPolicy;
       
   103     MSmlDmDDFObject* objPolicyX;
       
   104     MSmlDmDDFObject* objAp;
       
   105     MSmlDmDDFObject* objApX;
       
   106     MSmlDmDDFObject* objApXPolicyRef;
       
   107 
       
   108 //----------------------------------------------------------------
       
   109     
       
   110     objNokiaIpSecVpn = &TDmAdUtil::AddChildObjectL(aDDF, KDmAdNodeNokiaIpSecVpn);
       
   111     TDmAdUtil::FillNodeInfoL(*objNokiaIpSecVpn,
       
   112                              accessTypesGet,
       
   113                              MSmlDmDDFObject::EOne,
       
   114                              MSmlDmDDFObject::EPermanent,
       
   115                              MSmlDmDDFObject::ENode,
       
   116                              KDmAdDescNodeNokiaIpSecVpn,
       
   117                              ETrue,
       
   118                              KDmAdNokiaIpSecVpnRootTypeProperty);
       
   119     
       
   120 //----------------------------------------------------------------
       
   121     
       
   122     objIpSecVpnGeneral = &TDmAdUtil::AddChildObjectL(*objNokiaIpSecVpn, KDmAdNodeGeneral);
       
   123     TDmAdUtil::FillNodeInfoL(*objIpSecVpnGeneral,
       
   124                              accessTypesGet,
       
   125                              MSmlDmDDFObject::EOne,
       
   126                              MSmlDmDDFObject::EPermanent,
       
   127                              MSmlDmDDFObject::ENode,
       
   128                              KDmAdDescNodeGeneral,
       
   129                              EFalse,
       
   130                              KNullDesC8);
       
   131     
       
   132     obj = &TDmAdUtil::AddChildObjectL(*objIpSecVpnGeneral, KDmAdLeafClientVersion);
       
   133     TDmAdUtil::FillNodeInfoL(*obj,
       
   134                              accessTypesGet,
       
   135                              MSmlDmDDFObject::EOne,
       
   136                              MSmlDmDDFObject::EDynamic,
       
   137                              MSmlDmDDFObject::EChr,
       
   138                              KDmAdDescLeafClientVersion,
       
   139                              EFalse);
       
   140     
       
   141     obj = &TDmAdUtil::AddChildObjectL(*objIpSecVpnGeneral, KDmAdLeafEventLog);
       
   142     TDmAdUtil::FillNodeInfoL(*obj,
       
   143                              accessTypesGetDelete,
       
   144                              MSmlDmDDFObject::EOne,
       
   145                              MSmlDmDDFObject::EDynamic,
       
   146                              MSmlDmDDFObject::EBin,
       
   147                              KDmAdDescLeafEventLog,
       
   148                              EFalse);
       
   149     
       
   150 //----------------------------------------------------------------
       
   151     
       
   152     objPolicy = &TDmAdUtil::AddChildObjectL(*objNokiaIpSecVpn, KDmAdNodePolicy);
       
   153     TDmAdUtil::FillNodeInfoL(*objPolicy,
       
   154                              accessTypesGet,
       
   155                              MSmlDmDDFObject::EOne,
       
   156                              MSmlDmDDFObject::EPermanent,
       
   157                              MSmlDmDDFObject::ENode,
       
   158                              KDmAdDescNodePolicy,
       
   159                              EFalse,
       
   160                              KNullDesC8);
       
   161 
       
   162     
       
   163     objPolicyX = &TDmAdUtil::AddChildObjectL(*objPolicy, KDmAdNodeRt);
       
   164     TDmAdUtil::FillNodeInfoL(*objPolicyX,
       
   165                              accessTypesAll,
       
   166                              MSmlDmDDFObject::EZeroOrMore,
       
   167                              MSmlDmDDFObject::EDynamic,
       
   168                              MSmlDmDDFObject::ENode,
       
   169                              KDmAdDescNodeRt,
       
   170                              EFalse,
       
   171                              KNullDesC8);
       
   172     
       
   173     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafName);
       
   174     TDmAdUtil::FillNodeInfoL(*obj,
       
   175                              accessTypesNoDelete,
       
   176                              MSmlDmDDFObject::EOne,
       
   177                              MSmlDmDDFObject::EDynamic,
       
   178                              MSmlDmDDFObject::EChr,
       
   179                              KDmAdDescLeafName,
       
   180                              EFalse);
       
   181     
       
   182     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafId);
       
   183     TDmAdUtil::FillNodeInfoL(*obj,
       
   184                              accessTypesGetAdd,
       
   185                              MSmlDmDDFObject::EOne,
       
   186                              MSmlDmDDFObject::EDynamic,
       
   187                              MSmlDmDDFObject::EChr,
       
   188                              KDmAdDescLeafId,
       
   189                              EFalse);
       
   190     
       
   191     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafVersion);
       
   192     TDmAdUtil::FillNodeInfoL(*obj,
       
   193                              accessTypesNoDelete,
       
   194                              MSmlDmDDFObject::EZeroOrOne,
       
   195                              MSmlDmDDFObject::EDynamic,
       
   196                              MSmlDmDDFObject::EChr,
       
   197                              KDmAdDescLeafVersion,
       
   198                              EFalse);
       
   199     
       
   200     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafDescription);
       
   201     TDmAdUtil::FillNodeInfoL(*obj,
       
   202                              accessTypesNoDelete,
       
   203                              MSmlDmDDFObject::EZeroOrOne,
       
   204                              MSmlDmDDFObject::EDynamic,
       
   205                              MSmlDmDDFObject::EChr,
       
   206                              KDmAdDescLeafDescription,
       
   207                              EFalse);
       
   208     
       
   209     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafIssuer);
       
   210     TDmAdUtil::FillNodeInfoL(*obj,
       
   211                              accessTypesNoDelete,
       
   212                              MSmlDmDDFObject::EZeroOrOne,
       
   213                              MSmlDmDDFObject::EDynamic,
       
   214                              MSmlDmDDFObject::EChr,
       
   215                              KDmAdDescLeafIssuer,
       
   216                              EFalse);
       
   217     
       
   218     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafContact);
       
   219     TDmAdUtil::FillNodeInfoL(*obj,
       
   220                              accessTypesNoDelete,
       
   221                              MSmlDmDDFObject::EZeroOrOne,
       
   222                              MSmlDmDDFObject::EDynamic,
       
   223                              MSmlDmDDFObject::EChr,
       
   224                              KDmAdDescLeafContact,
       
   225                              EFalse);
       
   226     
       
   227     obj = &TDmAdUtil::AddChildObjectL(*objPolicyX, KDmAdLeafContent);
       
   228     TDmAdUtil::FillNodeInfoL(*obj,
       
   229                              accessTypesNoDelete,
       
   230                              MSmlDmDDFObject::EOne,
       
   231                              MSmlDmDDFObject::EDynamic,
       
   232                              MSmlDmDDFObject::EBin,
       
   233                              KDmAdDescLeafContent,
       
   234                              EFalse);
       
   235     
       
   236     
       
   237 //----------------------------------------------------------------
       
   238     
       
   239     objAp = &TDmAdUtil::AddChildObjectL(*objNokiaIpSecVpn, KDmAdNodeAp);
       
   240     TDmAdUtil::FillNodeInfoL(*objAp,
       
   241                              accessTypesGet,
       
   242                              MSmlDmDDFObject::EOne,
       
   243                              MSmlDmDDFObject::EPermanent,
       
   244                              MSmlDmDDFObject::ENode,
       
   245                              KDmAdDescNodeAp,
       
   246                              EFalse,
       
   247                              KNullDesC8);
       
   248 
       
   249     
       
   250     objApX = &TDmAdUtil::AddChildObjectL(*objAp, KDmAdNodeRt);
       
   251     TDmAdUtil::FillNodeInfoL(*objApX,
       
   252                              accessTypesAll,
       
   253                              MSmlDmDDFObject::EZeroOrMore,
       
   254                              MSmlDmDDFObject::EDynamic,
       
   255                              MSmlDmDDFObject::ENode,
       
   256                              KDmAdDescNodeRt,
       
   257                              EFalse,
       
   258                              KNullDesC8);
       
   259     
       
   260     obj = &TDmAdUtil::AddChildObjectL(*objApX, KDmAdLeafName);
       
   261     TDmAdUtil::FillNodeInfoL(*obj,
       
   262                              accessTypesNoDelete,
       
   263                              MSmlDmDDFObject::EOne,
       
   264                              MSmlDmDDFObject::EDynamic,
       
   265                              MSmlDmDDFObject::EChr,
       
   266                              KDmAdDescLeafName,
       
   267                              EFalse);
       
   268     
       
   269     obj = &TDmAdUtil::AddChildObjectL(*objApX, KDmAdLeafThisRef);
       
   270     TDmAdUtil::FillNodeInfoL(*obj,
       
   271                              accessTypesGet,
       
   272                              MSmlDmDDFObject::EOne,
       
   273                              MSmlDmDDFObject::EDynamic,
       
   274                              MSmlDmDDFObject::EChr,
       
   275                              KDmAdDescLeafThisRef,
       
   276                              EFalse);
       
   277     
       
   278     objApXPolicyRef = &TDmAdUtil::AddChildObjectL(*objApX, KDmAdNodePolicyRef);
       
   279     TDmAdUtil::FillNodeInfoL(*objApXPolicyRef,
       
   280                              accessTypesGetAdd,
       
   281                              MSmlDmDDFObject::EOne,
       
   282                              MSmlDmDDFObject::EDynamic,
       
   283                              MSmlDmDDFObject::ENode,
       
   284                              KDmAdDescNodePolicyRef,
       
   285                              EFalse,
       
   286                              KNullDesC8);
       
   287     
       
   288     obj = &TDmAdUtil::AddChildObjectL(*objApXPolicyRef, KDmAdLeafId);
       
   289     TDmAdUtil::FillNodeInfoL(*obj,
       
   290                              accessTypesNoDelete,
       
   291                              MSmlDmDDFObject::EOne,
       
   292                              MSmlDmDDFObject::EDynamic,
       
   293                              MSmlDmDDFObject::EChr,
       
   294                              KDmAdDescLeafId,
       
   295                              EFalse);
       
   296     
       
   297     obj = &TDmAdUtil::AddChildObjectL(*objApXPolicyRef, KDmAdLeafUri);
       
   298     TDmAdUtil::FillNodeInfoL(*obj,
       
   299                              accessTypesGet,
       
   300                              MSmlDmDDFObject::EOne,
       
   301                              MSmlDmDDFObject::EDynamic,
       
   302                              MSmlDmDDFObject::EChr,
       
   303                              KDmAdDescLeafUri,
       
   304                              EFalse);
       
   305     
       
   306     obj = &TDmAdUtil::AddChildObjectL(*objApX, KDmAdLeafConRef);
       
   307     TDmAdUtil::FillNodeInfoL(*obj,
       
   308                              accessTypesNoDelete,
       
   309                              MSmlDmDDFObject::EOne,
       
   310                              MSmlDmDDFObject::EDynamic,
       
   311                              MSmlDmDDFObject::EChr,
       
   312                              KDmAdDescLeafConRef,
       
   313                              EFalse);
       
   314     
       
   315     }
       
   316     
       
   317 //---------------------------------------------------------------------------------------
       
   318     
       
   319 void CDmAdDdf::NotRtNodeAddNodeObjectL(const TDesC8& /*aUri*/, 
       
   320                                        const TDesC8& /*aParentLuid*/, 
       
   321                                        TInt aStatusRef)
       
   322     {
       
   323     TRACE("CDmAdDdf::NotRtNodeAddNodeObjectL");
       
   324     iCallBack->SetStatusL(aStatusRef, KErrNone);
       
   325     }
       
   326 
       
   327 void CDmAdDdf::NotRtNodeUpdateLeafObjectL(const TDesC8& /*aUri*/, 
       
   328                                           const TDesC8& /*aLuid*/, 
       
   329                                           const TDesC8& /*aObject*/, 
       
   330                                           const TDesC8& /*aType*/, 
       
   331                                           TInt aStatusRef)
       
   332     {
       
   333     TRACE("CDmAdDdf::NotRtNodeUpdateLeafObjectL");
       
   334     iCallBack->SetStatusL(aStatusRef, KErrNone);
       
   335     }
       
   336 
       
   337 TInt CDmAdDdf::NotRtNodeFetchLeafObjectLC(const TDesC8& aUri, 
       
   338                                           const TDesC8& /*aLuid*/, 
       
   339                                           const TDesC8& /*aType*/, 
       
   340                                           CBufBase*& aObject)
       
   341     {
       
   342     TInt status = KErrNotFound;
       
   343     CBufBase* object = CBufFlat::NewL(32);
       
   344     CleanupStack::PushL(object);
       
   345     
       
   346     TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
       
   347     if (lastSeg.Compare(KDmAdLeafClientVersion) == 0)
       
   348         {
       
   349         HBufC8* version = CnvUtfConverter::ConvertFromUnicodeToUtf8L(KVersion);
       
   350         CleanupStack::PushL(version);
       
   351         object->InsertL(0, *version);
       
   352         CleanupStack::PopAndDestroy(); //version
       
   353         status = KErrNone;
       
   354         }
       
   355     else if (lastSeg.Compare(KDmAdLeafEventLog) == 0)
       
   356         {
       
   357         TDmAdEventLog::EventLogL(*object);
       
   358         status = KErrNone;
       
   359         }
       
   360     aObject = object;
       
   361     return status;
       
   362     }
       
   363 
       
   364 void CDmAdDdf::NotRtNodeDeleteObjectL(const TDesC8& aUri, 
       
   365                                       const TDesC8& /*aLuid*/, 
       
   366                                       TInt aStatusRef)
       
   367     {
       
   368     TRACE("CDmAdDdf::NotRtNodeDeleteObjectL");
       
   369     
       
   370     TInt status = KErrNone; //KErrNotFound;
       
   371     TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
       
   372     if (lastSeg.Compare(KDmAdLeafEventLog) == 0)
       
   373         {
       
   374         TDmAdEventLog::DeleteLogL();
       
   375         status = KErrNone;
       
   376         }
       
   377     iCallBack->SetStatusL(aStatusRef, status);
       
   378     }
       
   379     
       
   380 //---------------------------------------------------------------------------------------
       
   381     
       
   382 TBool CDmAdDdf::IsNodeRtNodeL(const TDesC8& aUri)
       
   383     {
       
   384     TRACE("CDmAdDdf::IsNodeRtNodeL");
       
   385     
       
   386     TBool ret = EFalse;
       
   387     TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
       
   388 
       
   389     if (lastSeg.Compare(KDmAdLeafEventLog) == 0) // for DeleteObjectL: In this case this method is called also when URI is leaf (not always node)
       
   390         {
       
   391         return EFalse;
       
   392         }
       
   393     
       
   394     if (lastSeg.Compare(KDmAdNodeNokiaIpSecVpn) == 0 ||
       
   395         lastSeg.Compare(KDmAdNodeGeneral) == 0 ||
       
   396         lastSeg.Compare(KDmAdNodePolicy) == 0 ||
       
   397         lastSeg.Compare(KDmAdNodeAp) == 0 ||
       
   398         lastSeg.Compare(KDmAdNodePolicyRef) == 0)
       
   399         {
       
   400         ret = EFalse;
       
   401         }
       
   402     else
       
   403         {
       
   404         if (TDmAdUtil::NumOfURISegs(aUri) < 2)
       
   405             {
       
   406             DEBUG_LOG(_L("Node not found"));            
       
   407             User::Leave(KErrNotFound);
       
   408             }
       
   409         TPtrC8 prevSeg = TDmAdUtil::LastUriSeg(TDmAdUtil::RemoveLastUriSeg(aUri));
       
   410         if (prevSeg.Compare(KDmAdNodePolicy) == 0 ||
       
   411             prevSeg.Compare(KDmAdNodeAp) == 0)
       
   412             {
       
   413             ret = ETrue;
       
   414             }
       
   415         else
       
   416             {
       
   417             DEBUG_LOG(_L("Node not found"));
       
   418             User::Leave(KErrNotFound);
       
   419             }
       
   420         }
       
   421     return ret;
       
   422     }
       
   423 
       
   424 TBool CDmAdDdf::IsLeafUnderRtNodeL(const TDesC8& aUri)
       
   425     {
       
   426     TRACE("CDmAdDdf::IsLeafUnderRtNodeL");
       
   427     
       
   428     TBool ret = EFalse;
       
   429     TPtrC8 nodeUri(TDmAdUtil::RemoveLastUriSeg(aUri));
       
   430     ret = IsNodeRtNodeL(nodeUri);
       
   431     if (!ret)
       
   432         {
       
   433         TPtrC8 nodeUriSeg = TDmAdUtil::LastUriSeg(nodeUri);
       
   434         if (nodeUriSeg.Compare(KDmAdNodePolicyRef) == 0)
       
   435             {
       
   436             ret = ETrue;
       
   437             }
       
   438         }
       
   439     return ret;
       
   440     }
       
   441 
       
   442 TPtrC8 CDmAdDdf::RtNodeUriForLeafL(const TDesC8& aLeafUri)
       
   443     {
       
   444     TRACE("CDmAdDdf::RtNodeUriForLeafL");
       
   445     
       
   446     TPtrC8 ret;
       
   447     TPtrC8 nodeUri(TDmAdUtil::RemoveLastUriSeg(aLeafUri));
       
   448     TPtrC8 nodeUriSeg(TDmAdUtil::LastUriSeg(nodeUri));
       
   449     TPtrC8 prevNodeUri(TDmAdUtil::RemoveLastUriSeg(nodeUri));
       
   450     TPtrC8 prevNodeUriSeg(TDmAdUtil::LastUriSeg(prevNodeUri));
       
   451     
       
   452     if (prevNodeUriSeg.Compare(KDmAdNodePolicy) == 0 ||
       
   453         prevNodeUriSeg.Compare(KDmAdNodeAp) == 0)
       
   454         {
       
   455         ret.Set(nodeUri);
       
   456         }
       
   457     else if (nodeUriSeg.Compare(KDmAdNodePolicyRef) == 0)
       
   458         {
       
   459         ret.Set(prevNodeUri);
       
   460         }
       
   461     else
       
   462         {
       
   463         DEBUG_LOG(_L("Node not found"));
       
   464         User::Leave(KErrNotFound);
       
   465         }
       
   466     return ret;
       
   467     }
       
   468 
       
   469 TBool CDmAdDdf::IsTopLevelRtNode(const TDesC8& aUri)
       
   470     {
       
   471     TRACE("CDmAdDdf::IsTopLevelRtNode");
       
   472     
       
   473     (void)aUri;
       
   474     return ETrue;
       
   475     }
       
   476 
       
   477 HBufC8* CDmAdDdf::ParentRtNodeUriForRtNodeLC(const TDesC8& /*aUri*/)
       
   478     {
       
   479     DEBUG_LOG(_L("CDmAdDdf::ParentRtNodeUriForRtNodeLC method not implemented"));
       
   480     User::Leave(KErrGeneral);
       
   481     return NULL;
       
   482     }
       
   483 
       
   484 //---------------------------------------------------------------------------------------
       
   485     
       
   486 void CDmAdDdf::BuildChildUriListLC(const TDesC8& aUri, 
       
   487                                    const TDesC8& aParentLuid, 
       
   488                                    const CArrayFix<TSmlDmMappingInfo>& aPreviousUriSegmentList, 
       
   489                                    CBufBase*& aCurrentList)
       
   490     {
       
   491     CBufBase* currentList = CBufFlat::NewL(128);
       
   492     CleanupStack::PushL(currentList);
       
   493 
       
   494     TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
       
   495     if (lastSeg.Compare(KDmAdNodeNokiaIpSecVpn) == 0)
       
   496         {
       
   497         currentList->InsertL(0, KDmAdListOfNokiaIpSecVpnChildren);
       
   498         }
       
   499     else if (lastSeg.Compare(KDmAdNodeGeneral) == 0)
       
   500         {
       
   501         currentList->InsertL(0, KDmAdListOfIpSecVpnGeneralChildren);
       
   502         }
       
   503     else if (lastSeg.Compare(KDmAdNodePolicyRef) == 0)
       
   504         {
       
   505         if (!iStore->FindRtNodeL(aParentLuid, aUri))
       
   506             {
       
   507             DEBUG_LOG(_L("Node not found"));            
       
   508             User::Leave(KErrNotFound);
       
   509             }
       
   510         currentList->InsertL(0, KDmAdListOfPolicyRefChildren);
       
   511         }
       
   512     else if (lastSeg.Compare(KDmAdNodePolicy) == 0 ||
       
   513              lastSeg.Compare(KDmAdNodeAp) == 0)
       
   514         {
       
   515         TDmAdUtil::BuildRtNodeChildUriListL(iCallBack, iStore, aUri, aParentLuid, aPreviousUriSegmentList, *currentList);
       
   516         }
       
   517     else
       
   518         {
       
   519         TPtrC8 prevSeg = TDmAdUtil::LastUriSeg(TDmAdUtil::RemoveLastUriSeg(aUri));
       
   520         if (prevSeg.Compare(KDmAdNodePolicy) == 0 ||
       
   521             prevSeg.Compare(KDmAdNodeAp) == 0)
       
   522             {
       
   523             if (!iStore->FindRtNodeL(aParentLuid, aUri))
       
   524                 {
       
   525                 DEBUG_LOG(_L("Node not found"));       
       
   526                 User::Leave(KErrNotFound);
       
   527                 }
       
   528             
       
   529             if (prevSeg.Compare(KDmAdNodePolicy) == 0)
       
   530                 {
       
   531                 currentList->InsertL(0, KDmAdListOfPolicyXChildren);
       
   532                 }
       
   533             else if (prevSeg.Compare(KDmAdNodeAp) == 0)
       
   534                 {
       
   535                 currentList->InsertL(0, KDmAdListOfApXChildren);
       
   536                 }
       
   537             }
       
   538         else
       
   539             {
       
   540             DEBUG_LOG(_L("Node not found"));       
       
   541             User::Leave(KErrNotFound);
       
   542             }
       
   543         }
       
   544 
       
   545     aCurrentList = currentList;
       
   546     }