httpfilters/cookie/ManagerSrc/CookieGroupDataArray.cpp
author hgs
Mon, 04 Oct 2010 15:35:43 +0530
changeset 49 b91bcc4b38e4
parent 27 974c3ee9bf20
permissions -rw-r--r--
201039_01

/*
 * 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)
        {
         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;
    }