httpfilters/cookie/ManagerSrc/CookieGroupDataArray.cpp
branchRCL_3
changeset 7 2611c08ee28e
child 18 5f1cd966e0d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/httpfilters/cookie/ManagerSrc/CookieGroupDataArray.cpp	Wed Mar 31 22:32:15 2010 +0300
@@ -0,0 +1,336 @@
+/*
+ * CCookieGroupDataArray.cpp
+ *
+ *  Created on: Nov 24, 2009
+ *      Author: mohanti
+ */
+//System Includes
+#include <e32cmn.h>
+#include <e32base.h>
+
+//User Includes
+#include "CookieGroupDataArray.h"
+#include "CookieGroupData.h"
+#include "GroupIdInfoArray.h"
+#include "CookieArray.h"
+#include "CookieLogger.h"
+
+//Constatnts
+const TInt KCookieArrayGranularity = 10;
+
+
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::NewL
+// ---------------------------------------------------------
+//
+
+CCookieGroupDataArray* CCookieGroupDataArray::NewL()
+    {
+    CCookieGroupDataArray* self = CCookieGroupDataArray::NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::NewLC
+// ---------------------------------------------------------
+//
+
+CCookieGroupDataArray* CCookieGroupDataArray::NewLC()
+    {
+    CCookieGroupDataArray* self = new (ELeave) CCookieGroupDataArray();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::ConstructL
+// ---------------------------------------------------------
+//
+
+void CCookieGroupDataArray::ConstructL()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::ConstructL" ) ) );
+    iCookieGroupData = new (ELeave) RPointerArray<CCookieGroupData>(KCookieArrayGranularity);
+    CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::ConstructL" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::CCookieGroupDataArray
+// ---------------------------------------------------------
+//
+
+CCookieGroupDataArray::CCookieGroupDataArray()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::CCookieGroupDataArray" ) ) );
+    CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::CCookieGroupDataArray" ) ) );
+    }
+// ---------------------------------------------------------
+// CCookieGroupDataArray::~CCookieGroupDataArray
+// ---------------------------------------------------------
+//
+
+CCookieGroupDataArray::~CCookieGroupDataArray()
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::~CCookieGroupDataArray" ) ) );
+    if(iCookieGroupData && Count())
+        {
+         iCookieGroupData->ResetAndDestroy();
+         iCookieGroupData->Close();
+         //delete iCookieGroupData;
+         iCookieGroupData = NULL;
+        }
+    CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::~CCookieGroupDataArray" ) ) );
+    }
+// ---------------------------------------------------------
+// CCookieGroupDataArray::Count
+// ---------------------------------------------------------
+//
+TInt CCookieGroupDataArray::Count()const
+    {
+    return iCookieGroupData->Count(); 
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::FindIndex
+// ---------------------------------------------------------
+//
+TInt CCookieGroupDataArray::FindIndex(TUint32 aGroupId,TInt& aIndex )
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::FindIndex aGroupId = %x" ), aGroupId ) );
+    TInt count = Count();
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::count = %d" ), count ) );
+    for(TInt i=0;i<count;i++)
+        {
+        CCookieGroupData* p = At(i);
+        if( p->GetGroupId() == aGroupId)
+            {
+            aIndex=i;
+            CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::FindIndex found for GroupId %x with Index = %d" )
+                    , aGroupId,aIndex ) );
+            return KErrNone;
+            }
+        }
+     CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::FindIndex NotFound for GroupId %x with Index = %d" )
+             , aGroupId ,aIndex) );    
+     return KErrNotFound;
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::FindIndex
+// ---------------------------------------------------------
+//
+TInt CCookieGroupDataArray::FindIndex(TUint32 aGroupId,TUint32 aAppUid,TInt& aIndex )
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::FindIndex aGroupId = %x,aAppUid = %x" ), aGroupId, aAppUid ) );
+    TInt count = Count();
+    for(TInt i=0;i<count;i++)
+        {
+        CCookieGroupData* p = At(i);
+        TInt appCount = p->TotalAppUid();
+        TInt appUidFound(EFalse);
+        if( p->GetGroupId() == aGroupId)
+            {
+             for(TInt j=0; j<appCount; j++)
+                 {
+                  if (p->GetSharedUid(j)== aAppUid)
+                      appUidFound = ETrue;
+                  break;
+                 }
+             if (appUidFound)
+                 {
+                 aIndex=i;
+                 return KErrNone;
+                 }
+            }
+        }
+     return KErrNotFound;
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::Compress
+// ---------------------------------------------------------
+//
+void CCookieGroupDataArray::AddGroupDataL(CCookieGroupData* aCcookieGroupData)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::AddGroupDataL" ) ) );
+    iCookieGroupData->AppendL(aCcookieGroupData);
+    CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::AddGroupDataL" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::Compress
+// ---------------------------------------------------------
+//
+void CCookieGroupDataArray::Compress()
+    {
+    iCookieGroupData->Compress();
+    }
+
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::operator[]
+// ---------------------------------------------------------
+//
+CCookieGroupData* CCookieGroupDataArray::operator[](TInt aIndex) const
+    {
+    return (*iCookieGroupData)[aIndex];
+    }
+
+  // ---------------------------------------------------------
+  // CCookieGroupDataArray::GetGroupData
+  // ---------------------------------------------------------
+  //
+CCookieGroupData* CCookieGroupDataArray::At(TInt aIndex) const
+    {
+    return (*iCookieGroupData)[ aIndex ];
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::GetGroupData
+// ---------------------------------------------------------
+//
+CCookieGroupData* CCookieGroupDataArray::GetGroupData(TInt aIndex)
+    {
+    return(At(aIndex));
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::GetGroupDataIndexL
+// ---------------------------------------------------------
+//
+void CCookieGroupDataArray::GetGroupDataIndexL(TUint32 aGroupId,TUint32 aAppUid,TBool& aCookieSharableFlag, TInt& aIndex)
+    {
+     CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::GetGroupDataIndexL aGroupId = %x, aAppUid = %x" ), aGroupId, aAppUid ) );
+     TInt count = Count();
+     TBool found(EFalse);
+     CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::GetGroupDataIndexL count = %d" ), count ) );
+     if ( count == 0 )
+         {
+         RArray<TUint32> appUidArray(1);
+         appUidArray.Append(aAppUid);
+         CCookieGroupData* cookiegroupdata = CCookieGroupData::NewL(aGroupId,appUidArray,aCookieSharableFlag);
+         CleanupStack::PushL( cookiegroupdata );
+         AddGroupDataL(cookiegroupdata);
+         aIndex = 0;
+         CleanupStack::Pop(cookiegroupdata);
+         appUidArray.Close();
+         } else {
+                
+                TInt totalappUid = iCookieGroupData->Count();
+                for ( TInt i=0; i<count; i++ )
+                   {
+                    CCookieGroupData* cookiegroupdata = At(i);
+                    if ( cookiegroupdata->GetGroupId() == aGroupId && !(cookiegroupdata->GetCookieSharableFlag()) )
+                      {
+                      found = ETrue;
+                      aIndex = i;
+                      break;
+                      }else if (cookiegroupdata->GetGroupId() == aGroupId && (cookiegroupdata->GetCookieSharableFlag()))
+                          {
+                           TBool groupMatch(ETrue);
+                           TBool sharedUidMatch(EFalse);
+                           TInt total = cookiegroupdata->TotalAppUid();
+                           for(TInt j=0;j<total;j++)
+                              {
+                               if (cookiegroupdata->GetSharedUid(j)== aAppUid)
+                                   {
+                                       sharedUidMatch = ETrue;
+                                       break;
+                                   }
+                              }
+                           if (groupMatch || sharedUidMatch)
+                               {
+                               found = ETrue;
+                               aIndex = i;
+                               break;
+                               }
+                          }
+                          
+                        
+                   CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::GetGroupDataIndexL aGroupId %x and aAppUid %x found at index %d" ), aGroupId, aAppUid, aIndex ) );
+                      }
+                    }
+               if(!found)
+                {
+                 RArray<TUint32> appUidArray(1);
+                 appUidArray.Append(aAppUid);
+                 CCookieGroupData* cookiegroupdata = CCookieGroupData::NewL(aGroupId, appUidArray, aCookieSharableFlag);
+                 CleanupStack::PushL( cookiegroupdata );
+                 AddGroupDataL(cookiegroupdata);
+                 TInt total = Count();
+                 aIndex = total-1;
+                 CleanupStack::Pop(cookiegroupdata);
+                 appUidArray.Close();
+                }
+     CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::GetGroupDataIndexL" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::CookieArray
+// ---------------------------------------------------------
+//
+CCookieArray* CCookieGroupDataArray::CookieArray(TInt aIndex)
+    {
+    CCookieGroupData* cookiegroupdata = At(aIndex);
+    return cookiegroupdata->CookieArray();
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::GetCookies
+// ---------------------------------------------------------
+//
+TInt CCookieGroupDataArray::GetCookies( const TDesC8& aRequestUri,
+                                      RPointerArray<CCookie>& aCookies,TInt aIndex ) const
+    {
+    CCookieArray* cookieArray = At(aIndex)->CookieArray();
+    return cookieArray->GetCookies( aRequestUri, aCookies );
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::Remove
+// ---------------------------------------------------------
+//
+void CCookieGroupDataArray::Remove(TInt aIndex)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray:: Remove %d" ), aIndex ) );
+    delete (*iCookieGroupData)[ aIndex ];
+    iCookieGroupData->Remove(aIndex);
+    iCookieGroupData->Compress();
+    CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::Remove " ) ) );
+    }
+
+// ---------------------------------------------------------
+// CCookieGroupDataArray::DestroyGroupData
+// ---------------------------------------------------------
+//
+TInt CCookieGroupDataArray::DestroyGroupData(TUint32 aGroupId)
+    {
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::DestroyGroupData aGroupId = %x" ), aGroupId ) );
+    TInt count = Count();
+    CLOG( ( EClient, 0, _L( "-> CCookieGroupDataArray::DestroyGroupData count = %d" ), count ) );
+    if (count == 0)
+        {
+         return KErrNotFound;
+        }
+    
+    TBool found(EFalse);
+    for (TInt i=0; i<count; i++)
+        {
+        CCookieGroupData* cookiegroupdata = At(i);
+        if ( cookiegroupdata->GetGroupId() == aGroupId)
+            {
+            found = ETrue;
+            Remove(i);
+            --i;
+            --count;
+            CLOG( ( EClient, 0, _L( "<- CCookieGroupDataArray::DestroyGroupData aGroupId = %x removed from Array" ), aGroupId ) );
+            }
+        }
+    if ( found )
+        return KErrNone;
+	else
+		return KErrNotFound;
+    }