httpfilters/cookie/ManagerSrc/CookieClientDataArray.cpp
branchRCL_3
changeset 7 2611c08ee28e
child 8 73e95e652591
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/httpfilters/cookie/ManagerSrc/CookieClientDataArray.cpp	Wed Mar 31 22:32:15 2010 +0300
@@ -0,0 +1,255 @@
+/*
+ * CookieClientDataArray.cpp
+ *
+ *  Created on: Dec 18, 2009
+ *      Author: mohanti
+ */
+
+//System Includes
+#include <e32cmn.h>
+#include <e32base.h>
+#include <e32std.h>
+
+//User Includes
+#include "CookieClientDataArray.h"
+#include "CookieManagerClient.h"
+#include "CookieArray.h"
+#include "CookieLogger.h"
+#include "CookieClientData.h"
+
+//Constatnts
+const TInt KCookieArrayGranularity = 10;
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::GetInstance
+// ---------------------------------------------------------
+//
+CCookieClientDataArray* CCookieClientDataArray::GetInstance()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::GetInstance" ) ) );
+    CCookieClientDataArray *clientInstance = static_cast<CCookieClientDataArray*> (Dll::Tls());
+    if (!clientInstance)
+        {
+        clientInstance = new (ELeave) CCookieClientDataArray();
+            Dll::SetTls(clientInstance);
+        }
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::GetInstance instance = %x" ),clientInstance ) );
+    return clientInstance;
+    }
+// ---------------------------------------------------------
+// CCookieClientDataArray::DeRef
+// ---------------------------------------------------------
+//
+void CCookieClientDataArray::DeRef()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Deref" ) ) );
+    --iRefCount;
+    if (iRefCount <= 0)
+        {
+        delete iCookieClientData;
+        iCookieClientData = NULL;
+        Dll::SetTls(0);
+        CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Deref deletes iCookieClientData" ) ) );
+        }
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Deref" ) ) );
+    }
+// ---------------------------------------------------------
+// CCookieClientDataArray::ConstructL
+// ---------------------------------------------------------
+//
+CCookieClientDataArray::CCookieClientDataArray():iRefCount(0)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::ConstructL" ) ) );
+    iCookieClientData = new (ELeave) RPointerArray<CCookieClientData>(KCookieArrayGranularity);
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::ConstructL" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::~CCookieClientDataArray
+// ---------------------------------------------------------
+//
+CCookieClientDataArray::~CCookieClientDataArray()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::~CCookieClientDataArray" ) ) );
+    if(iCookieClientData && iCookieClientData->Count())
+        {
+         iCookieClientData->ResetAndDestroy();
+         iCookieClientData->Close();
+         //delete iCookieClientData;
+         iCookieClientData = NULL;
+        }
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::~CCookieClientDataArray" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::Count
+// ---------------------------------------------------------
+//
+TInt CCookieClientDataArray::Count()const
+    {
+     if (iCookieClientData)
+       return iCookieClientData->Count();
+     else 
+       return 0;
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::Compress
+// ---------------------------------------------------------
+//
+void CCookieClientDataArray::AddClientGroupDataL(CCookieClientData* aCookieClientData)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::AddGroupDataL" ) ) );
+    iCookieClientData->AppendL(aCookieClientData);
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::AddGroupDataL" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::Compress
+// ---------------------------------------------------------
+//
+void CCookieClientDataArray::Compress()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Compress" ) ) );
+    iCookieClientData->Compress();
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Compress" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::operator[]
+// ---------------------------------------------------------
+//
+CCookieClientData* CCookieClientDataArray::operator[](TInt aIndex) const
+    {
+    return (*iCookieClientData)[aIndex];
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::At
+// ---------------------------------------------------------
+//
+CCookieClientData* CCookieClientDataArray::At(TInt aIndex) const
+    {
+    return (*iCookieClientData)[ aIndex ];
+    }
+// ---------------------------------------------------------
+// CCookieClientDataArray::Find
+// ---------------------------------------------------------
+//
+CCookieClientData*  CCookieClientDataArray::Find(const TUint32& aGroupId, const TUint32& aWidgetUid )
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Find GroupId = %x, WidgetUid = %x" ),aGroupId,aWidgetUid ) );
+    TInt total = Count();
+    TBool WidgetUidFound = EFalse;
+    TInt index = 0;
+    for ( TInt i = 0;i<total;i++ )
+        {
+         if (At(i)->GetGroupId()== aGroupId && (At(i)->GetCookieSharableFlag()))
+           {
+            WidgetUidFound = ETrue;
+            index = i;
+            break;
+           }
+         else if (At(i)->GetGroupId()== aGroupId && !(At(i)->GetCookieSharableFlag()) 
+            && (At(i)->GetWidgetUid()== aWidgetUid))
+           {
+            WidgetUidFound = ETrue;
+            index = i;
+            break;
+           }
+        }
+  if ( WidgetUidFound )
+      {
+      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Find found with index = %d" ),index ) );
+      return At(index);
+      }
+  else
+      {
+      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Find not found " ) ) );
+      return NULL;
+      }
+    }
+// ---------------------------------------------------------
+// CCookieClientDataArray::FindIndex
+// ---------------------------------------------------------
+//
+TInt CCookieClientDataArray::FindIndex(const TUint32& aGroupId, const TUint32& aWidgetUid,TInt& aIndex )
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::FindIndex GroupId = %x,WidgetUid = %x" )
+            ,aGroupId,aWidgetUid ) );
+    TInt total = Count();
+    TBool WidgetUidFound = EFalse;
+    TInt index = 0;
+    for ( TInt i = 0;i<total;i++ )
+        {
+         if (At(i)->GetGroupId()== aGroupId && (At(i)->GetCookieSharableFlag()))
+           {
+            WidgetUidFound = ETrue;
+            index = i;
+            break;
+           }
+         else if (At(i)->GetGroupId()== aGroupId && !(At(i)->GetCookieSharableFlag()) 
+            && (At(i)->GetWidgetUid()== aWidgetUid))
+           {
+            WidgetUidFound = ETrue;
+            index = i;
+            break;
+           }
+        }
+  if ( WidgetUidFound )
+      {
+      aIndex = index;
+      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::FindIndex found with index = %d" ),index ) );
+      return KErrNone;
+      }
+  else
+      {
+      CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::FindIndex not found " ) ) );
+      return KErrNotFound;
+      }
+    }
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::CookieArray
+// ---------------------------------------------------------
+//
+CCookieArray* CCookieClientDataArray::CookieArray(TInt aIndex)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::CookieArray Index =%d" ),aIndex ) );
+    CCookieClientData* cookieclientdata = At(aIndex);
+    return cookieclientdata->CookieArray();
+    }
+
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::Remove
+// ---------------------------------------------------------
+//
+void CCookieClientDataArray::Remove(TInt aIndex)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::Remove %d" ), aIndex ) );
+    delete (*iCookieClientData)[ aIndex ];
+    iCookieClientData->Remove(aIndex);
+    iCookieClientData->Compress();
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::Remove " )) );
+    }
+
+
+// ---------------------------------------------------------
+// CCookieClientDataArray::DestroyGroupData
+// ---------------------------------------------------------
+//
+TInt CCookieClientDataArray::DestroyClientData(const TUint32 aAppUid)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieClientDataArray::DestroyClientData" ) ) );
+    TUint32 groupid = RProcess().SecureId().iId;
+    TInt index = -1;
+    TInt err = FindIndex(groupid,aAppUid,index);
+    if ( err == KErrNone )
+      {
+       Remove(index);
+      }
+    CLOG( ( EClient, 0, _L( "<- CCookieClientDataArray::DestroyClientData removed index = %d" ),index ) );
+    return err;
+    }
+//EOF