httpfilters/cookie/ManagerSrc/CookieClientData.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 16:17:02 +0300
branchRCL_3
changeset 26 bdd8a827a7de
parent 10 73e95e652591
permissions -rw-r--r--
Revision: 201022 Kit: 2010125

/*
 * CookieClientData.cpp
 *
 *  Created on: Dec 28, 2009
 *      Author: mohanti
 */
//User Includes
#include "CookieClientData.h"
#include "cookie.h"
#include "CookieArray.h"
#include "CookieLogger.h"
#include "CookieCommonConstants.h"
#include <uri8.h>

// ---------------------------------------------------------
// CCookieGroupData::NewL
// ---------------------------------------------------------
//
CCookieClientData* CCookieClientData::NewL(TUint32 aGroupId)
    {
    CCookieClientData* self = CCookieClientData::NewLC(aGroupId);
    CleanupStack::Pop();
    return self;
    }

// ---------------------------------------------------------
// CCookieClientData::NewLC
// ---------------------------------------------------------
//
CCookieClientData* CCookieClientData::NewLC(TUint32 aGroupId)
    {
    CCookieClientData* self = new (ELeave) CCookieClientData(aGroupId);
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }
// ---------------------------------------------------------
// CCookieGroupData::NewL
// ---------------------------------------------------------
//
CCookieClientData* CCookieClientData::NewL(TUint32 aGroupId,TUint32 aWidgetUid,TBool aCookieSharableFlag, TBool aInitFlag)
    {
    CCookieClientData* self = CCookieClientData::NewLC(aGroupId, aWidgetUid, aCookieSharableFlag, aInitFlag);
    CleanupStack::Pop();
    return self;
    }

// ---------------------------------------------------------
// CCookieClientData::NewLC
// ---------------------------------------------------------
//
CCookieClientData* CCookieClientData::NewLC(TUint32 aGroupId,TUint32 aWidgetUid,TBool aCookieSharableFlag, TBool aInitFlag)
    {
    CCookieClientData* self = new (ELeave) CCookieClientData(aGroupId, aWidgetUid, aCookieSharableFlag, aInitFlag);
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }

// ---------------------------------------------------------
// CCookieClientData::CCookieClientData
// ---------------------------------------------------------
//
CCookieClientData::CCookieClientData(TUint32 aGroupId,TUint32 aWidgetUid ,TBool aCookieSharableFlag , TBool aInitFlag)
:iInitFlag(aInitFlag),iCookieSharableFlag(aCookieSharableFlag),iGroupId(aGroupId),iWidgetUid(aWidgetUid)
    {
    
    }
// ---------------------------------------------------------
// CCookieClientData::CCookieClientData
// ---------------------------------------------------------
//
CCookieClientData::CCookieClientData(TUint32 aGroupId):iInitFlag(EFalse),iCookieSharableFlag(EFalse),iGroupId(aGroupId),iWidgetUid(0)
    {
    
    }
// ---------------------------------------------------------
// CCookieGroupData::ConstructL
// ---------------------------------------------------------
//
void CCookieClientData::ConstructL()
    {
    iCookieArray = new (ELeave) CCookieArray;
    }

// ---------------------------------------------------------
// CCookieClientData::~CCookieClientData
// ---------------------------------------------------------
//
CCookieClientData::~CCookieClientData()
    {
    CLOG(( EClient, 0, _L("-> CCookieClientData::~CCookieClientData iCookieArray: 0x%08x"), iCookieArray ));
    delete iCookieArray;
    iCookieArray = NULL;
    CLOG(( EClient, 0, _L("<- CCookieClientData::~CCookieClientData") ));
    }

// ---------------------------------------------------------
// CCookieClientData::StorePersistentCookieL
// ---------------------------------------------------------
//
void CCookieClientData::StorePersistentCookieL( const CCookie* aCookie,
                                                 const TDesC8& aRequestUri,
                                                 const TInt aIndex )
    {
    CLOG(( EClient, 0, _L("-> RCookieManager::StorePersistentCookieL") ));
    if (aIndex == -1)
        {
        iCookieArray->AddL( aCookie, aRequestUri);
        }
    else
        {
        iCookieArray->InsertL( aCookie, aIndex);
        }
    CLOG(( EClient, 0, _L("<- RCookieManager::StorePersistentCookieL") ));
    }

// ---------------------------------------------------------
// RCookieManager::StoreCookieAtClientSideL
// ---------------------------------------------------------
//
void CCookieClientData::StoreCookieAtClientSideL(const CCookie* aCookie,const TDesC8& aUri )
    {
    CLOG(( EClient, 0, _L("-> RCookieManager::StoreCookieAtClientSideL: aUri:%S"), &aUri ));
    //Creates a clone of the passed cookie objects as the ownership of this object is held by Clint of Cookie Manager Dll
    TUriParser8 uriParser;
    
    TInt err = uriParser.Parse( aUri );
    CCookie* clone(NULL);
    if (err !=KErrNone)
        return;
    else
        {
        // first get the details of the current requestUri,
        // that is, Domain, Path and port
        TPtrC8 requestPath( uriParser.IsPresent( EUriPath ) ?
                            uriParser.Extract( EUriPath ) : KNullDesC8() );
        TPtrC8 requestDomain( uriParser.IsPresent( EUriHost ) ?
                            uriParser.Extract( EUriHost ) : KNullDesC8() );
        TPtrC8 requestPort( uriParser.IsPresent( EUriPort ) ?
                uriParser.Extract( EUriPort ) : KCookieDefaultRequestPort() );

        clone = CCookie::CloneL( *aCookie,requestDomain,requestPath,requestPort);
        CleanupStack::PushL( clone );
        }

    //CCookie* clone = CCookie::CloneL( *aCookie,requestDomain,requestPath);
    //CleanupStack::PushL( clone );
  
    TInt index(0);
    CCookieArray* perscookiearray = CookieArray();
        if ( perscookiearray->DoesAlreadyExists( clone, index ) )
        { // must overwrite !!!
        // but first add the new one if needed
        // just not to give a chance of beeing lost...
        // persistence of the cookie will be handled on 
        // saving all cookies to disk
        perscookiearray->MakeRoomForInsertIfNeededL(clone, aUri, index);            
        if(index >=0)
            {
            // insert cookie at valid index 
            //iCookieClientData->StorePersistentCookieL(aCookie,aUri,index);
            StorePersistentCookieL(clone,aUri,index);
            //iCookieClientData->StorePersistentCookieL( aCookie, aUri, index );
            // remove the old cookie
            perscookiearray->Remove( index + 1 );
            }
        else
            {   // invalid index means old cookie has been deleted in the process of making room
                // append the new cookie to the end of array
            //iCookieClientData->StorePersistentCookieL( aCookie, aUri );
            StorePersistentCookieL( clone, aUri );
            }
        }
    else
        { // it is not in the array yet, add it now
        //iCookieClientData->StorePersistentCookieL( aCookie, aUri );
        StorePersistentCookieL( clone, aUri );
        }
    // Cookie supervisor API takes immediate ownership of both cookie and array
    CleanupStack::Pop(clone);
    CLOG(( EClient, 0, _L("<- RCookieManager::StoreCookieAtClientSideL") )); 
    }

// ---------------------------------------------------------
// CCookieGroupData::Count
// ---------------------------------------------------------
//
TInt CCookieClientData::Count()const
    {
    return iCookieArray->Count(); 
    }

// ---------------------------------------------------------

// ---------------------------------------------------------
// CCookieGroupData::GetClientSideCookies
// ---------------------------------------------------------
//
TInt CCookieClientData::GetClientSideCookies(const TDesC8& aRequestUri,RPointerArray<CCookie>& aCookies,TBool& aCookieFound )const
    {
    return iCookieArray->GetCookies(aRequestUri,aCookies,aCookieFound);
    }

// ---------------------------------------------------------
// CCookieGroupData::CookieArray
// ---------------------------------------------------------
//
CCookieArray* CCookieClientData::CookieArray()
    {
    return iCookieArray;
    }
//EOF