--- /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<CDmAdCommand>(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<CDmAdRtNode>* array = REINTERPRET_CAST(CArrayPtr<CDmAdRtNode>*,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);
+ }
+