--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/dmadpki/src/dmadddf.cpp Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,882 @@
+/*
+* Copyright (c) 2002-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: ddf tree implementation of DmAdPKI
+*
+*/
+
+
+
+#include <utf.h>
+#include <certificateapps.h>
+
+#include "dmadddf.h"
+#include "dmadutil.h"
+#include "vpnlogger.h"
+#include "dmadcertxmldefs.h"
+#include "XwImpl.h"
+
+static const TInt KUserStore = 1;
+static const TInt KDeviceStore = 2;
+
+CDmAdDdf* CDmAdDdf::NewL(MDmAdCallBack* aDmAdCallBack, CDmAdStore* aStore)
+ {
+ TRACE("CDmAdDdf::NewL");
+
+ CDmAdDdf* self = NewLC(aDmAdCallBack, aStore);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CDmAdDdf* CDmAdDdf::NewLC(MDmAdCallBack* aDmAdCallBack, CDmAdStore* aStore)
+ {
+ CDmAdDdf* self = new (ELeave) CDmAdDdf(aDmAdCallBack, aStore);
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+CDmAdDdf::CDmAdDdf(MDmAdCallBack* aDmAdCallBack, CDmAdStore* aStore) :
+ iCallBack(aDmAdCallBack), iStore(aStore)
+ {
+ TRACE("CDmAdDdf::CDmAdDdf");
+ }
+
+CDmAdDdf::~CDmAdDdf()
+ {
+ TRACE("CDmAdDdf::~CDmAdDdf");
+ }
+
+//===================================================================================================
+
+void CDmAdDdf::BuildDDFVersionL(CBufBase& aDDFVersion)
+ {
+ TRACE("CDmAdDdf::BuildDDFVersionL");
+ aDDFVersion.InsertL(0, KDmAdDdfVersion);
+ }
+
+void CDmAdDdf::BuildDDFStructureL(MSmlDmDDFObject& aDDF)
+ {
+ TRACE("CDmAdDdf::BuildDDFStructureL");
+
+ TSmlDmAccessTypes accessTypesExec;
+ accessTypesExec.SetReplace(); // accessTypesExec.SetExec();
+
+ TSmlDmAccessTypes accessTypesGet;
+ accessTypesGet.SetGet();
+
+ TSmlDmAccessTypes accessTypesAdd;
+ accessTypesAdd.SetAdd();
+
+ TSmlDmAccessTypes accessTypesGetAdd;
+ accessTypesGetAdd.SetGet();
+ accessTypesGetAdd.SetAdd();
+
+ TSmlDmAccessTypes accessTypesAll;
+ accessTypesAll.SetGet();
+ accessTypesAll.SetAdd();
+ accessTypesAll.SetDelete();
+ accessTypesAll.SetReplace();
+
+ TSmlDmAccessTypes accessTypesNoDelete;
+ accessTypesNoDelete.SetGet();
+ accessTypesNoDelete.SetAdd();
+ accessTypesNoDelete.SetReplace();
+
+ MSmlDmDDFObject* obj;
+ MSmlDmDDFObject* objNokiaPki;
+ MSmlDmDDFObject* objPkiGeneral;
+ MSmlDmDDFObject* objCert;
+ MSmlDmDDFObject* objCertX;
+ MSmlDmDDFObject* objCertReq;
+ MSmlDmDDFObject* objCertReqX;
+ MSmlDmDDFObject* objPrivKey;
+ MSmlDmDDFObject* objPrivKeyX;
+ MSmlDmDDFObject* objPKCS12;
+ MSmlDmDDFObject* objPKCS12X;
+
+
+//----------------------------------------------------------------
+
+ objNokiaPki = &TDmAdUtil::AddChildObjectL(aDDF, KDmAdNodeNokiaPki);
+ TDmAdUtil::FillNodeInfoL(*objNokiaPki,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeNokiaPki,
+ ETrue,
+ KDmAdNokiaPkiRootTypeProperty);
+
+//----------------------------------------------------------------
+
+
+ obj = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdLeafLogon);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesExec,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENull,
+ KDmAdDescLeafLogon,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdLeafLogoff);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesExec,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENull,
+ KDmAdDescLeafLogoff,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdLeafKeyStore);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesExec,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafKeyStore,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdLeafCertStore);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesExec,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafCertStore,
+ EFalse);
+
+ objPkiGeneral = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdNodeGeneral);
+ TDmAdUtil::FillNodeInfoL(*objPkiGeneral,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeGeneral,
+ EFalse,
+ KNullDesC8);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objPkiGeneral, KDmAdLeafCertApplications);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EXml,
+ KDmAdDescLeafCertApplications,
+ EFalse);
+
+//----------------------------------------------------------------
+
+ objCert = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdNodeCert);
+ TDmAdUtil::FillNodeInfoL(*objCert,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeCert,
+ EFalse,
+ KNullDesC8);
+
+ objCertX = &TDmAdUtil::AddChildObjectL(*objCert, KDmAdNodeRt);
+ TDmAdUtil::FillNodeInfoL(*objCertX,
+ accessTypesAll,
+ MSmlDmDDFObject::EZeroOrMore,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeRt,
+ EFalse,
+ KNullDesC8);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafType);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGetAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafType,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafFormat);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGetAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafFormat,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafSerialNumber);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafSerialNumber,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafIssuerName);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafIssuerName,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafFingerprintAlg);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafFingerprintAlg,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafFingerprintValue);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafFingerprintAlg,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafValidityBegin);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafValidityBegin,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafValidityEnd);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafValidityEnd,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafSubjectName);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafSubjectName,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafSubjectAltName);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafSubjectAltName,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafKeyURI);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafKeyUri,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafKeyId);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafKeyId,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafKeyUsage);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafKeyUsage,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafDeletable);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGetAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBool,
+ KDmAdDescLeafDeletable,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafTrusted);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesNoDelete,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBool,
+ KDmAdDescLeafTrusted,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafApplicability);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesNoDelete,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EXml,
+ KDmAdDescLeafApplicability,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertX, KDmAdLeafContent);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGetAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafContent,
+ EFalse);
+
+
+//----------------------------------------------------------------
+
+ objCertReq = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdNodeCertReq);
+ TDmAdUtil::FillNodeInfoL(*objCertReq,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeCertReq,
+ EFalse,
+ KNullDesC8);
+
+
+ objCertReqX = &TDmAdUtil::AddChildObjectL(*objCertReq, KDmAdNodeRt);
+ TDmAdUtil::FillNodeInfoL(*objCertReqX,
+ accessTypesAll,
+ MSmlDmDDFObject::EZeroOrMore,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeRt,
+ EFalse,
+ KNullDesC8);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertReqX, KDmAdLeafSubjectName);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafSubjectName,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertReqX, KDmAdLeafRfc822Name);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafRfc822Name,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertReqX, KDmAdLeafKeyURI);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafKeyUri,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertReqX, KDmAdLeafKeyLength);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafKeyLength,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objCertReqX, KDmAdLeafContent);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafContent,
+ EFalse);
+
+//----------------------------------------------------------------
+
+ objPrivKey = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdNodePrivKey);
+ TDmAdUtil::FillNodeInfoL(*objPrivKey,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodePrivKey,
+ EFalse,
+ KNullDesC8);
+
+
+ objPrivKeyX = &TDmAdUtil::AddChildObjectL(*objPrivKey, KDmAdNodeRt);
+ TDmAdUtil::FillNodeInfoL(*objPrivKeyX,
+ accessTypesAll,
+ MSmlDmDDFObject::EZeroOrMore,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeRt,
+ EFalse,
+ KNullDesC8);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objPrivKeyX, KDmAdLeafKeyType);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGetAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafKeyType,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objPrivKeyX, KDmAdLeafKeyId);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafKeyId,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objPrivKeyX, KDmAdLeafKeyLength);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesGetAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EInt,
+ KDmAdDescLeafKeyLength,
+ EFalse);
+
+ obj = &TDmAdUtil::AddChildObjectL(*objPrivKeyX, KDmAdLeafContent);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafContent,
+ EFalse);
+
+ //------- PKCS#12 Node definitions -----------------
+
+ DEBUG_LOG(_L("Adding PKCS#12 definitions"));
+
+ // PKCS12 root node
+ objPKCS12 = &TDmAdUtil::AddChildObjectL(*objNokiaPki, KDmAdNodePKCS12);
+ TDmAdUtil::FillNodeInfoL(*objPKCS12,
+ accessTypesGet,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EPermanent,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodePKCS12,
+ EFalse,
+ KNullDesC8);
+
+ // PKCS#12/X node
+ objPKCS12X = &TDmAdUtil::AddChildObjectL(*objPKCS12, KDmAdNodeRt);
+ TDmAdUtil::FillNodeInfoL(*objPKCS12X,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrMore,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::ENode,
+ KDmAdDescNodeRt,
+ EFalse,
+ KNullDesC8);
+
+ // PKCS#12/X/Password leaf node
+ obj = &TDmAdUtil::AddChildObjectL(*objPKCS12X, KDmAdLeafPKCS12Password);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EChr,
+ KDmAdDescLeafPKCS12Password,
+ EFalse);
+
+ // PKCS#12/X/Deletable leaf node
+ obj = &TDmAdUtil::AddChildObjectL(*objPKCS12X, KDmAdLeafDeletable);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBool,
+ KDmAdDescLeafDeletable,
+ EFalse);
+
+ // PKCS#12/X/Applicability leaf node
+ obj = &TDmAdUtil::AddChildObjectL(*objPKCS12X, KDmAdLeafApplicability);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EZeroOrOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EXml,
+ KDmAdDescLeafApplicability,
+ EFalse);
+
+ // PKCS#12/X/Content leaf node
+ obj = &TDmAdUtil::AddChildObjectL(*objPKCS12X, KDmAdLeafContent);
+ TDmAdUtil::FillNodeInfoL(*obj,
+ accessTypesAdd,
+ MSmlDmDDFObject::EOne,
+ MSmlDmDDFObject::EDynamic,
+ MSmlDmDDFObject::EBin,
+ KDmAdDescLeafContent,
+ EFalse);
+
+ DEBUG_LOG(_L("Adding PKCS#12 definitions - COMPLETE"));
+
+ }
+
+//---------------------------------------------------------------------------------------
+
+void CDmAdDdf::NotRtNodeAddNodeObjectL(const TDesC8& /*aUri*/, const TDesC8& /*aParentLuid*/, TInt aStatusRef)
+ {
+ TRACE("CDmAdDdf::NotRtNodeAddNodeObjectL");
+
+ iCallBack->SetStatusL(aStatusRef, KErrNone);
+ }
+
+void CDmAdDdf::NotRtNodeUpdateLeafObjectL(const TDesC8& aUri, const TDesC8& /*aLuid*/, const TDesC8& aObject, const TDesC8& /*aType*/, TInt aStatusRef)
+ {
+ TRACE("CDmAdDdf::NotRtNodeUpdateLeafObjectL");
+
+ TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
+ if (lastSeg.Compare(KDmAdLeafLogon) == 0)
+ {
+ iStore->PkiLogonL();
+ }
+ else if (lastSeg.Compare(KDmAdLeafLogoff) == 0)
+ {
+ iStore->PkiLogoffL();
+ }
+ else if (lastSeg.Compare(KDmAdLeafKeyStore) == 0)
+ {
+ TInt storeFromDm = TDmAdUtil::DesToInt(aObject);
+ TPkiServiceStoreType pkiStoreType = EPkiStoreTypeAny;
+ switch(storeFromDm)
+ {
+ case KUserStore:
+ pkiStoreType = EPkiStoreTypeUser;
+ break;
+ case KDeviceStore:
+ pkiStoreType = EPkiStoreTypeDevice;
+ break;
+ default:
+ User::Leave(KPKIErrNotSupported);
+ break;
+ }
+ iStore->SetStoreTypeL(STORE_KEYSTORE, pkiStoreType);
+ }
+ else if (lastSeg.Compare(KDmAdLeafCertStore) == 0)
+ {
+ TInt storeFromDm = TDmAdUtil::DesToInt(aObject);
+ TPkiServiceStoreType pkiStoreType = EPkiStoreTypeAny;
+ switch(storeFromDm)
+ {
+ case KUserStore:
+ pkiStoreType = EPkiStoreTypeUser;
+ break;
+ case KDeviceStore:
+ pkiStoreType = EPkiStoreTypeDevice;
+ break;
+ default:
+ User::Leave(KPKIErrNotSupported);
+ break;
+ }
+
+ iStore->SetStoreTypeL(STORE_CERTSTORE, pkiStoreType);
+ }
+
+ iCallBack->SetStatusL(aStatusRef, KErrNone);
+ }
+
+TInt CDmAdDdf::NotRtNodeFetchLeafObjectLC(const TDesC8& aUri, const TDesC8& /*aLuid*/, const TDesC8& /*aType*/, CBufBase*& aObject)
+ {
+ TInt status = KErrNotFound;
+ CBufBase* object = CBufFlat::NewL(32);
+ CleanupStack::PushL(object);
+
+ TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
+ if (lastSeg.Compare(KDmAdLeafCertApplications) == 0)
+ {
+
+ CCertificateAppInfoManager* appsMan = CCertificateAppInfoManager::NewLC();
+
+ const RArray<TCertificateAppInfo>& apps = appsMan->Applications();
+ TInt count = apps.Count();
+ CXmlWriter* writer = CXmlWriter::NewL();
+ CleanupStack::PushL(static_cast<CBase*>(writer));
+
+ writer->AddStartTagL(KXmlElemCertApps);
+ for (TInt i=0; i<count; ++i)
+ {
+ const TUid& id = apps[i].Id();
+ const TName& name = apps[i].Name();
+
+ HBufC8* idInt = TDmAdUtil::IntToDes8LC((TInt)id.iUid);
+ HBufC8* name8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L(name);
+ CleanupStack::PushL(name8);
+
+ writer->OpenStartTagL(KXmlElemApp);
+ writer->AddAttributeL(KXmlAttrId, *idInt);
+ writer->AddAttributeL(KXmlAttrName, *name8);
+ writer->CloseStartTagL(ETrue);
+ CleanupStack::PopAndDestroy(2); //name8, idInt
+ }
+ writer->AddEndTagL(KXmlElemCertApps);
+ TPtrC8 docDataPtr(writer->DocPart(0, writer->Length()-1));
+ object->InsertL(object->Size(), docDataPtr);
+
+ DEBUG_LOG(_L("popping writer"));
+ CleanupStack::PopAndDestroy(static_cast<CBase*>(writer));
+ DEBUG_LOG(_L("writer popped"));
+
+ CleanupStack::PopAndDestroy(appsMan);
+ status = KErrNone;
+ }
+ aObject = object;
+ return status;
+ }
+
+void CDmAdDdf::NotRtNodeDeleteObjectL(const TDesC8& /*aUri*/, const TDesC8& /*aLuid*/, TInt aStatusRef)
+ {
+ TRACE("CDmAdDdf::NotRtNodeDeleteObjectL");
+
+ iCallBack->SetStatusL(aStatusRef, KErrNone);
+ }
+
+//---------------------------------------------------------------------------------------
+
+TBool CDmAdDdf::IsNodeRtNodeL(const TDesC8& aUri)
+ {
+ TRACE("CDmAdDdf::IsNodeRtNodeL");
+
+ TBool ret = EFalse;
+ TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
+ if (lastSeg.Compare(KDmAdNodeNokiaPki) == 0 ||
+ lastSeg.Compare(KDmAdNodeGeneral) == 0 ||
+ lastSeg.Compare(KDmAdNodeCert) == 0 ||
+ lastSeg.Compare(KDmAdNodeCertReq) == 0 ||
+ lastSeg.Compare(KDmAdNodePrivKey) == 0 ||
+ lastSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ if(lastSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ DEBUG_LOG(_L("LastSeg == KDmAdNodePKCS12, ret = FALSE"));
+ }
+ ret = EFalse;
+ }
+ else
+ {
+ if (TDmAdUtil::NumOfURISegs(aUri) < 2)
+ {
+ DEBUG_LOG(_L("Number of URI segments is < 2"));
+ User::Leave(KErrNotFound);
+ }
+ TPtrC8 prevSeg = TDmAdUtil::LastUriSeg(TDmAdUtil::RemoveLastUriSeg(aUri));
+ if (prevSeg.Compare(KDmAdNodeCert) == 0 ||
+ prevSeg.Compare(KDmAdNodeCertReq) == 0 ||
+ prevSeg.Compare(KDmAdNodePrivKey) == 0 ||
+ prevSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ if(prevSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ DEBUG_LOG(_L("prevSeg == KDmAdNodePKCS12, ret = TRUE"));
+ }
+ ret = ETrue;
+ }
+ else
+ {
+ DEBUG_LOG(_L("URI segment not found"));
+ User::Leave(KErrNotFound);
+ }
+ }
+ return ret;
+ }
+
+TBool CDmAdDdf::IsLeafUnderRtNodeL(const TDesC8& aUri)
+ {
+ TRACE("CDmAdDdf::IsLeafUnderRtNodeL");
+
+ TBool ret = EFalse;
+ TPtrC8 nodeUri(TDmAdUtil::RemoveLastUriSeg(aUri));
+ ret = IsNodeRtNodeL(nodeUri);
+ return ret;
+ }
+
+
+TPtrC8 CDmAdDdf::RtNodeUriForLeafL(const TDesC8& aLeafUri)
+ {
+ TRACE("CDmAdDdf::RtNodeUriForLeafL");
+
+ TPtrC8 ret;
+ TPtrC8 nodeUri(TDmAdUtil::RemoveLastUriSeg(aLeafUri));
+ TPtrC8 prevNodeUri(TDmAdUtil::RemoveLastUriSeg(nodeUri));
+ TPtrC8 prevNodeUriSeg(TDmAdUtil::LastUriSeg(prevNodeUri));
+
+ if (prevNodeUriSeg.Compare(KDmAdNodeCert) == 0 ||
+ prevNodeUriSeg.Compare(KDmAdNodeCertReq) == 0 ||
+ prevNodeUriSeg.Compare(KDmAdNodePrivKey) == 0 ||
+ prevNodeUriSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ if (prevNodeUriSeg.Compare(KDmAdNodePKCS12) == 0)
+ {
+ DEBUG_LOG(_L("prevNodeUriSeg == KDmAdNodePKCS12"));
+ }
+ ret.Set(nodeUri);
+ }
+ else
+ {
+ DEBUG_LOG(_L("Unknown URI"));
+ User::Leave(KErrNotFound);
+ }
+ return ret;
+ }
+
+TBool CDmAdDdf::IsTopLevelRtNode(const TDesC8& /*aUri*/)
+ {
+ TRACE("CDmAdDdf::IsTopLevelRtNode");
+ return ETrue;
+ }
+
+HBufC8* CDmAdDdf::ParentRtNodeUriForRtNodeLC(const TDesC8& /*aUri*/)
+ {
+ DEBUG_LOG(_L("Method CDmAdDdf::ParentRtNodeUriForRtNodeLC not implemented"));
+ User::Leave(KErrGeneral);
+ return 0;
+ }
+
+//---------------------------------------------------------------------------------------
+
+void CDmAdDdf::BuildChildUriListLC(const TDesC8& aUri, const TDesC8& aParentLuid, const CArrayFix<TSmlDmMappingInfo>& aPreviousUriSegmentList, CBufBase*& aCurrentList)
+ {
+ CBufBase *currentList = CBufFlat::NewL(128);
+ CleanupStack::PushL(currentList);
+
+ TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
+ if (lastSeg.Compare(KDmAdNodeNokiaPki) == 0)
+ {
+ currentList->InsertL(0, KDmAdListOfNokiaPkiChildren);
+ }
+ else if (lastSeg.Compare(KDmAdNodeGeneral) == 0)
+ {
+ currentList->InsertL(0, KDmAdListOfPkiGeneralChildren);
+ }
+ else if (lastSeg.Compare(KDmAdNodeCert) == 0 ||
+ lastSeg.Compare(KDmAdNodeCertReq) == 0 ||
+ lastSeg.Compare(KDmAdNodePrivKey) == 0 ||
+ lastSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ if (lastSeg.Compare(KDmAdNodePKCS12) == 0)
+ {
+ // Special treatment for PKCS12 nodes
+ DEBUG_LOG(_L("lastSeg == KDmAdNodePKCS12"));
+ TPtrC8 lastSeg = TDmAdUtil::LastUriSeg(aUri);
+ TInt slashcount = 0;
+ TInt urisegcount = aPreviousUriSegmentList.Count();
+
+ DEBUG_LOG1(_L(" URI segment count: %d:"), urisegcount);
+
+ for (TInt i=0; i < urisegcount; i++)
+ {
+ const TSmlDmMappingInfo& mappingInfo = aPreviousUriSegmentList.At(i);
+
+ DEBUG_LOG1(_L(" SetResult URI seg entry %d:"), i);
+ DEBUG_LOG1(_L8(" Uri seg: '%S'"), &(mappingInfo.iURISeg));
+ DEBUG_LOG_HEX(mappingInfo.iURISegLUID);
+
+ // Add slash to separate between URIs (no slash after the last one or
+ // before the first one)
+ if ((slashcount > 0) && (slashcount <= urisegcount))
+ {
+ currentList->InsertL(currentList->Size(), KDmAdSeparator);
+ }
+
+ currentList->InsertL(currentList->Size(), mappingInfo.iURISeg);
+ slashcount++;
+ }
+ }
+ else
+ {
+ TDmAdUtil::BuildRtNodeChildUriListL(iCallBack, iStore, aUri, aParentLuid, aPreviousUriSegmentList, *currentList);
+ }
+
+#if 0
+ if (currentList->Size() > 0)
+ {
+ currentList->InsertL(currentList->Size(), KDmAdAppendChildSlashExt);
+ }
+ else
+ {
+ currentList->InsertL(currentList->Size(), KDmAdAppendChildExt);
+ }
+#endif
+ }
+ else
+ {
+ TPtrC8 prevSeg = TDmAdUtil::LastUriSeg(TDmAdUtil::RemoveLastUriSeg(aUri));
+ if (prevSeg.Compare(KDmAdNodeCert) == 0 ||
+ prevSeg.Compare(KDmAdNodeCertReq) == 0 ||
+ prevSeg.Compare(KDmAdNodePrivKey) == 0 ||
+ prevSeg.Compare(KDmAdNodePKCS12) == 0) // Added
+ {
+ if (prevSeg.Compare(KDmAdNodePKCS12) == 0)
+ {
+ DEBUG_LOG(_L("prevSeg == KDmAdNodePKCS12"));
+ }
+ if (!iStore->FindRtNodeL(aParentLuid, aUri))
+ {
+ DEBUG_LOG(_L("Node not found"));
+ User::Leave(KErrNotFound);
+ }
+
+ if (prevSeg.Compare(KDmAdNodeCert) == 0)
+ {
+ currentList->InsertL(0, KDmAdListOfCertXChildren);
+ }
+ else if (prevSeg.Compare(KDmAdNodeCertReq) == 0)
+ {
+ currentList->InsertL(0, KDmAdListOfCertReqXChildren);
+ }
+ else if (prevSeg.Compare(KDmAdNodePrivKey) == 0)
+ {
+ currentList->InsertL(0, KDmAdListOfPrivKeyXChildren);
+ }
+ else if (prevSeg.Compare(KDmAdNodePKCS12) == 0)
+ {
+ DEBUG_LOG(_L("inserting KDmAdListOfPKCS12XChildren to currentList"));
+
+ // Added handler for pkcs#12
+ currentList->InsertL(0, KDmAdListOfPKCS12XChildren);
+ }
+ }
+ else
+ {
+ DEBUG_LOG(_L("Unknown URI"));
+ User::Leave(KErrNotFound);
+ }
+ }
+
+ aCurrentList = currentList;
+ }