vpnengine/dmadengine/src/dmadrtnode.cpp
changeset 0 33413c0669b9
--- /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);
+    }
+