diff -r 000000000000 -r 33413c0669b9 vpnengine/dmadengine/src/dmadrtnode.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnengine/dmadengine/src/dmadrtnode.cpp Thu Dec 17 09:14:51 2009 +0200 @@ -0,0 +1,169 @@ +/* +* 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: Implementation of CDmAdRtNode. +* +*/ + + +#include "DmAdRtNode.h" +#include "dmadcallback.h" +#include "dmadcommand.h" +#include "dmadutil.h" +#include "vpnlogger.h" + +DMAD_EXPORT_C CDmAdRtNode* CDmAdRtNode::NewL(const TDesC8& aUri, const TDesC8& aLuid, MDmAdCallBack* aCallBack, MDmAdRtNodeDataApi* aRtNodeDataApi) + { + TRACE("CDmAdRtNode::NewL"); + + CDmAdRtNode *self = new (ELeave) CDmAdRtNode(aRtNodeDataApi); + CleanupStack::PushL(self); + self->ConstructL(aUri, aLuid, aCallBack); + CleanupStack::Pop(); // self + return self; + } + +void CDmAdRtNode::ConstructL(const TDesC8& aUri, const TDesC8& aLuid, MDmAdCallBack* aCallBack) + { + TRACE("CDmAdRtNode::ConstructL"); + + DEBUG_LOG1(_L8("aUri: %S"), &aUri); + DEBUG_LOG(_L("aLuid:")); + DEBUG_LOG_HEX(aLuid); + + iCommands = new (ELeave) CArrayPtrFlat(4); + iUri = aUri.AllocL(); + iLuid = aLuid.AllocL(); + iData = iRtNodeDataApi->CreateDmAdRtNodeDataL(aUri, aCallBack); + } + +CDmAdRtNode::CDmAdRtNode(MDmAdRtNodeDataApi* aRtNodeDataApi) + : iRtNodeDataApi(aRtNodeDataApi), iSomeLeafAddedToRtNode(EFalse), iJustFetched(ETrue) + { + TRACE("CDmAdRtNode::CDmAdRtNode"); + } + +DMAD_EXPORT_C CDmAdRtNode::~CDmAdRtNode() + { + TRACE("CDmAdRtNode::~CDmAdRtNode"); + + CDmAdCommand::CleanupOperationDeleteCArrayPtr(iCommands); + delete iUri; + delete iLuid; + iRtNodeDataApi->DeleteDmAdRtNodeData(iData); + } + +DMAD_EXPORT_C TPtrC8 CDmAdRtNode::Uri(void) const + { + TRACE("CDmAdRtNode::Uri"); + + __ASSERT_ALWAYS(iUri != NULL, User::Invariant()); + + TPtrC8 ret(*iUri); + return ret; + } + +DMAD_EXPORT_C TPtrC8 CDmAdRtNode::Luid(void) const + { + TRACE("CDmAdRtNode::Luid"); + + __ASSERT_ALWAYS(iLuid != NULL, User::Invariant()); + + TPtrC8 ret(*iLuid); + return ret; + } + +DMAD_EXPORT_C void CDmAdRtNode::SetLuidL(const TDesC8& aLuid) + { + TRACE("CDmAdRtNode::SetLuidL"); + + DEBUG_LOG1(_L8("Node uri: %S"), iUri); + DEBUG_LOG(_L("aLuid:")); + DEBUG_LOG_HEX(aLuid); + + __ASSERT_ALWAYS(aLuid.Length() > 0, User::Invariant()); + + + delete iLuid; + iLuid = NULL; + + iLuid = aLuid.AllocL(); + } + + +void CDmAdRtNode::CleanupOperationDeleteCArrayPtr(TAny* aPtr) + { + __ASSERT_ALWAYS(aPtr != NULL, User::Invariant()); + + CArrayPtr* array = REINTERPRET_CAST(CArrayPtr*,aPtr); + array->ResetAndDestroy(); + delete array; + } + + +void CDmAdRtNode::AppendCommandL(CDmAdCommand* aCommand) + { + TRACE("CDmAdRtNode::AppendCommandL"); + + iCommands->AppendL(aCommand); + iJustFetched = EFalse; + } + +void CDmAdRtNode::AddLeafObjectL(const TDesC8& aUri, const TDesC8& aObject, TInt aStatusRef) + { + TRACE("CDmAdRtNode::AddLeafObjectL"); + + CDmAdCommand* command = CDmAdCommand::NewLC(aUri, aStatusRef, ETrue); + + iRtNodeDataApi->UpdateLeafDataL(iData, aUri, aObject); + iSomeLeafAddedToRtNode = ETrue; + + AppendCommandL(command); + CleanupStack::Pop(); //command + } + +void CDmAdRtNode::UpdateLeafObjectL(const TDesC8& aUri, const TDesC8& aObject, TInt aStatusRef) + { + TRACE("CDmAdRtNode::UpdateLeafObjectL"); + + CDmAdCommand* command = CDmAdCommand::NewLC(aUri, aStatusRef, ETrue); + + iRtNodeDataApi->UpdateLeafDataL(iData, aUri, aObject); + + AppendCommandL(command); + CleanupStack::Pop(); //command + } + +TBool CDmAdRtNode::IsSomeChild(const TDesC8& aSomeParentUri) const + { + TRACE("CDmAdRtNode::IsSomeChild"); + + TPtrC8 someParentUri(TDmAdUtil::RemoveDotSlash(aSomeParentUri)); + TPtrC8 uri(TDmAdUtil::RemoveDotSlash(*iUri)); + if (uri.Find(someParentUri) == 0) + { + return ETrue; + } + else + { + return EFalse; + } + } + +TBool CDmAdRtNode::AreUriTypesSame(const TDesC8& aUri) + { + TRACE("CDmAdRtNode::AreUriTypesSameL"); + + return iRtNodeDataApi->AreUriTypesSame(iData, aUri); + } +