diff -r 000000000000 -r 33413c0669b9 vpnengine/dmadpki/src/dmadadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/dmadpki/src/dmadadapter.cpp Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,334 @@ +/* +* Copyright (c) 2000-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: PKI OMA DM Adapter +* +*/ + + + +#include +#include + +#include "dmadadapter.h" +#include "dmadadapterimplconst.h" +#include "dmadengine.h" +#include "DmAdStore.h" +#include "dmadddf.h" +#include "dmadrtnodedataapic.h" +#include "vpnlogger.h" + +#if defined(_DEBUG) +_LIT(KDmAdLogFolder,"vpn"); +_LIT(KDmAdLogFile,"dmadpki.log"); +#endif + +//=================================================================================================== + + +#ifndef IMPLEMENTATION_PROXY_ENTRY +#define IMPLEMENTATION_PROXY_ENTRY(aUid, aFuncPtr) {{aUid},(aFuncPtr)} +#endif + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KDmAdImplUid, CDmAdAdapter::NewL) + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + + +//=================================================================================================== + +CDmAdAdapter* CDmAdAdapter::NewL(MSmlDmCallback* aDmCallback) + { + CDmAdAdapter* self = NewLC(aDmCallback); + CleanupStack::Pop(self); + return self; + } + +CDmAdAdapter* CDmAdAdapter::NewLC(MSmlDmCallback* aDmCallback) + { + INITIALIZE_DEBUG_LOG_L(KDmAdLogFolder, KDmAdLogFile); + DEBUG_LOG(_L("LOGGING INITIALIZED")); + + CDmAdAdapter* self = new (ELeave) CDmAdAdapter(aDmCallback); + CleanupStack::PushL(self); + self->ConstructL(aDmCallback); + return self; + } + +void CDmAdAdapter::ConstructL(MSmlDmCallback* aDmCallback) + { + TRACE("CDmAdAdapter::ConstructL"); + + DEBUG_LOG(_L("ConstructL - CallBack (PKI)")); + iCallBack = CDmAdCallBack::NewL(aDmCallback, KDmAdOwnAdUriForGetLuidAllocLFix); + + iStore = CDmAdStore::NewL(iCallBack); + iDdf = CDmAdDdf::NewL(iCallBack, iStore); + + DEBUG_LOG(_L("ConstructL - RtNodeDataApi")); + iRtNodeDataApi = CDmAdRtNodeDataApi::NewL(); + DEBUG_LOG(_L("ConstructL - Engine")); + iEngine = CDmAdEngine::NewL(iCallBack, iStore, iDdf, iRtNodeDataApi); + + } + +CDmAdAdapter::CDmAdAdapter(MSmlDmCallback* aDmCallback) : + CSmlDmAdapter(aDmCallback) + { + } + +CDmAdAdapter::~CDmAdAdapter() + { + DEBUG_LOG(_L("~CDmAdAdapter (PKI)")); + + delete iEngine; + delete iRtNodeDataApi; + delete iDdf; + delete iStore; + delete iCallBack; + + DEBUG_LOG(_L("FINALIZING LOGGING")); + FINALIZE_DEBUG_LOG; + } + +//=================================================================================================== + +void CDmAdAdapter::DDFVersionL(CBufBase& aDDFVersion) + { + TRACE("CDmAdAdapter::DDFVersionL"); + iDdf->BuildDDFVersionL(aDDFVersion); + } + +void CDmAdAdapter::DDFStructureL(MSmlDmDDFObject& aDDF) + { + TRACE("CDmAdAdapter::DDFStructureL"); + iDdf->BuildDDFStructureL(aDDF); + } + + +void CDmAdAdapter::ChildURIListL(const TDesC8& aUri, const TDesC8& aParentLuid, const CArrayFix& aPreviousUriSegmentList, TInt aResultsRef, TInt aStatusRef) + { + TRACE("CDmAdAdapter::ChildURIListL"); + iEngine->ChildURIListL(aUri, aParentLuid, aPreviousUriSegmentList, aResultsRef, aStatusRef); + } + +void CDmAdAdapter::AddNodeObjectL(const TDesC8& aUri, const TDesC8& aParentLuid, TInt aStatusRef) + { + TRACE("CDmAdAdapter::AddNodeObjectL"); + + DEBUG_LOG1(_L8("aUri = %S"), &aUri); + DEBUG_LOG1(_L8("aParentLuid = %S"), &aParentLuid); + DEBUG_LOG1(_L("aStatusRef = %d"), aStatusRef); + + // PKCS#12 check here + TInt status = CheckNodeStatus(aUri); + + if (status == KErrNone) + { + iEngine->AddNodeObjectL(aUri, aParentLuid, aStatusRef); + } + else + { + // Most probable reason for error code is that the + // PKCS#12 node already exists in the LUID mapping + DEBUG_LOG2(_L("Setting status ref %d to %d"), aStatusRef, status); + iCallBack->SetStatusL(aStatusRef, status); + } + } + +TInt CDmAdAdapter::CheckNodeStatus(const TDesC8& aUri) + { + TRACE("CDmAdAdapter::CheckNodeStatusL"); + + // Check whether the object is a PKCS#12 one + TInt ret = aUri.Find(KDmAdOwnAdUriForPKCS12); + + // If ret is >= 0, pkcs12 uri was identified + if (ret >= 0) + { + // See whether the given PKCS#12 object + // already exists + TRAP(ret, CheckPKCS12ExistenceL(aUri)); + } + else + { + // Wasn't a PKCS#12 node, no further checks needed + ret = KErrNone; + } + + DEBUG_LOG1(_L(" Returning with value %d"), ret); + + return ret; + } + +void CDmAdAdapter::CheckPKCS12ExistenceL(const TDesC8& aUri) + { + TRACE("CDmAdAdapter::CheckPKCS12Existence"); + DEBUG_LOG1(_L8(" Testing with URI: '%S'"), &aUri); + + HBufC8* foundUri(NULL); + + // Check whether the "LUID" (actually, just the full URI) + // already exists... + DEBUG_LOG(_L(" Comparing LUID/URI to see whether PKCS#12 node exists")); + foundUri = iCallBack->GetLuidAllocL(aUri); + CleanupStack::PushL(foundUri); + + if (foundUri->Length() > 0) + { + DEBUG_LOG1(_L8(" Found URI: '%S'"), foundUri); + DEBUG_LOG(_L(" PKCS#12 node already exists, no need to add, leaving")); + User::Leave(KErrAlreadyExists); + } + else + { + DEBUG_LOG(_L8(" Found URI: (empty)")); + DEBUG_LOG(_L(" PKCS#12 node is a new one, proceeding with add")); + } + + CleanupStack::PopAndDestroy(foundUri); + } + + +void CDmAdAdapter::UpdateLeafObjectL(const TDesC8& aUri, const TDesC8& aLuid, + const TDesC8& aObject, const TDesC8& aType, + TInt aStatusRef) + { + TRACE("CDmAdAdapter::UpdateLeafObjectL"); + + DEBUG_LOG1(_L8("aUri = %S"), &aUri); + DEBUG_LOG1(_L8("aLuid = %S"), &aLuid); + DEBUG_LOG(_L8("aObject:")); + DEBUG_LOG_HEX(aObject); + DEBUG_LOG1(_L8("aType = %S"), &aType); + DEBUG_LOG1(_L("aStatusRef = %d"), aStatusRef); + + TInt err = CheckNodeStatus(aUri); + + if (err == KErrNone) + { + iEngine->UpdateLeafObjectL(aUri, aLuid, aObject, aType, aStatusRef); + } + else + { + // If this PKCS#12 object already existed, do nothing + iCallBack->SetStatusL(aStatusRef, err); + } + } + +void CDmAdAdapter::FetchLeafObjectL(const TDesC8& aUri, const TDesC8& aLuid, const TDesC8& aType, TInt aResultsRef, TInt aStatusRef) + { + TRACE("CDmAdAdapter::FetchLeafObjectL"); + iEngine->FetchLeafObjectL(aUri, aLuid, aType, aResultsRef, aStatusRef); + } + +void CDmAdAdapter::DeleteObjectL(const TDesC8& aUri, const TDesC8& aLuid, TInt aStatusRef) + { + TRACE("CDmAdAdapter::DeleteObjectL"); + iEngine->DeleteObjectL(aUri, aLuid, aStatusRef); + } + +void CDmAdAdapter::CompleteOutstandingCmdsL() + { + TRACE("CDmAdAdapter::CompleteOutstandingCmdsL"); + iEngine->CompleteOutstandingCmdsL(); + } + +void CDmAdAdapter::UpdateLeafObjectL(const TDesC8& aUri, + const TDesC8& aLuid, + RWriteStream*& aStream, + const TDesC8& aType, + TInt aStatusRef) + { + TRACE("CDmAdAdapter::UpdateLeafObjectL"); + iEngine->UpdateLeafObjectL(aUri, aLuid, aStream, aType, aStatusRef); + } + +void CDmAdAdapter::FetchLeafObjectSizeL(const TDesC8& aUri, + const TDesC8& aLuid, + const TDesC8& aType, + TInt aResultsRef, + TInt aStatusRef) + { + TRACE("CDmAdAdapter::FetchLeafObjectSizeL"); + iEngine->FetchLeafObjectSizeL(aUri, aLuid, aType, aResultsRef, aStatusRef); + } + +void CDmAdAdapter::ExecuteCommandL(const TDesC8& aUri, + const TDesC8& aLuid, + const TDesC8& aArgument, + const TDesC8& aType, + TInt aStatusRef) + { + TRACE("CDmAdAdapter::ExecuteCommandL"); + iEngine->ExecuteCommandL(aUri, aLuid, aArgument, aType, aStatusRef); + } + +void CDmAdAdapter::ExecuteCommandL(const TDesC8& aUri, + const TDesC8& aLuid, + RWriteStream*& aStream, + const TDesC8& aType, + TInt aStatusRef) + { + TRACE("CDmAdAdapter::ExecuteCommandL"); + iEngine->ExecuteCommandL(aUri, aLuid, aStream, aType, aStatusRef); + } + +void CDmAdAdapter::CopyCommandL(const TDesC8& aTargetUri, + const TDesC8& aTargetLuid, + const TDesC8& aSourceUri, + const TDesC8& aSourceLuid, + const TDesC8& aType, + TInt aStatusRef) + { + TRACE("CDmAdAdapter::CopyCommandL"); + iEngine->CopyCommandL(aTargetUri, aTargetLuid, aSourceUri, aSourceLuid, aType, aStatusRef); + } + +void CDmAdAdapter::StartAtomicL() + { + TRACE("CDmAdAdapter::StartAtomicL"); + iEngine->StartAtomicL(); + } + +void CDmAdAdapter::CommitAtomicL() + { + TRACE("CDmAdAdapter::CommitAtomicL"); + iEngine->CommitAtomicL(); + } + +void CDmAdAdapter::RollbackAtomicL() + { + TRACE("CDmAdAdapter::RollbackAtomicL"); + iEngine->RollbackAtomicL(); + } + +TBool CDmAdAdapter::StreamingSupport(TInt& aItemSize) + { + TRACE("CDmAdAdapter::StreamingSupport"); + return iEngine->StreamingSupport(aItemSize); + } + +void CDmAdAdapter::StreamCommittedL() + { + TRACE("CDmAdAdapter::StreamCommittedL"); + iEngine->StreamCommittedL(); + } +