presadap12/impsplugin/src/cimpspluginconnectionmanager.cpp
author William Roberts <williamr@symbian.org>
Mon, 08 Mar 2010 21:43:14 +0000
branchCompilerCompatibility
changeset 7 5a77ea18bae8
parent 0 094583676ce7
permissions -rw-r--r--
Create CompilerCompatibility branch

/*
* Copyright (c)  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: IMPS plugin connection manager
*
*/


#include <e32std.h>
#include <e32base.h>
#include <ximpobjectfactory.h>
#include <ximpprotocolconnectionhost.h>
#include <ximpstatus.h>

#include "CImpsPluginConnectionManager.h"
#include "PImpsAdapWVCspVersion.h"

#include "impsdebugprint.h"
#include "CImpsPluginAccessHandler.h"
#include "CImpsPluginPureDataHandler.h"

#include "CImpsPluginLoginRequest.h"
#include "CImpsPluginLogoutRequest.h"





// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::CImpsPluginConnectionManager
// ---------------------------------------------------------------------------
//
CImpsPluginConnectionManager::CImpsPluginConnectionManager()
        : iIapId( 0 )
    {
    IMPS_DP( D_IMPS_LIT( "::CImpsPluginConnectionManager() Start" ) );
    IMPS_DP( D_IMPS_LIT( "::CImpsPluginConnectionManager() End" ) );
    }


// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::ConstructL
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::ConstructL()
    {

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::ConstructL() Start" ) );

    User::LeaveIfError( iImpsClient.Connect() );

    iAccessHandler = CImpsPluginAccessHandler::NewL( iImpsClient );

    iNotifier = CPresenceNotificationHandler::NewL( *this );

    // set the default version to 1.2
    SetVersion( EWVCspV12 );

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::ConstructL() End" ) );
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::ManufactureDataHandlerL
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::ManufactureDataHandlerL()
    {

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::ManufactureDataHandlerL() Start" ) );
    if ( !iIsDataHandlerReady )
        {
        iPureHandler = CImpsPluginPureDataHandler::NewL( iImpsClient, *iAccessHandler );
        iIsDataHandlerReady = ETrue;
        iNotifier->StartListeningL();
        }
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::IsDataHandlerCreatedL
// ---------------------------------------------------------------------------
//
TBool CImpsPluginConnectionManager::IsDataHandlerCreatedL()
    {

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::IsDataHandlerCreatedL() Start-End" ) );

    return iIsDataHandlerReady;
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::NewL()
// ---------------------------------------------------------------------------
//
CImpsPluginConnectionManager* CImpsPluginConnectionManager::NewL()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::NewL() Start" ) );

    CImpsPluginConnectionManager* self = new( ELeave )
    CImpsPluginConnectionManager();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::NewL() End" ) );
    return self;
    }


// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::~CImpsPluginConnectionManager
// ---------------------------------------------------------------------------
//
CImpsPluginConnectionManager::~CImpsPluginConnectionManager()
    {
    IMPS_DP( D_IMPS_LIT( "::~CImpsPluginConnectionManager() Start" ) );

    delete iDisconnectStatusObj;

    delete iServerAddress;
    delete iUserName;
    delete iPassword;
    delete iLoginRequest;
    delete iLogoutRequest;
    delete iNotifier;
    delete iPureHandler;
    delete iAccessHandler;
    // before destory cancel each of the active objects request
    const TInt c = iRequestArray.Count() - 1;
    for ( TInt i = c; i >= 0; i-- )
        {
        delete iRequestArray[ i ];
        }
    iPresenceAuthGrantReqList.Reset();
    iRequestArray.Reset();

    iImpsClient.Close();

    IMPS_DP( D_IMPS_LIT( "::~CImpsPluginConnectionManager() End" ) );
    }

CPresenceNotificationHandler* CImpsPluginConnectionManager::PresNotifier()
    {
    return iNotifier;
    }
// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::IapId
// ---------------------------------------------------------------------------
//
TInt32 CImpsPluginConnectionManager::IapId()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::IapId() Start-End" ) );
    return iIapId;
    }
// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::ServerAddress
// ---------------------------------------------------------------------------
//
TDesC& CImpsPluginConnectionManager::ServerAddress()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::ServerAddress() Start-End" ) );
    return *iServerAddress;
    }


// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::Username
// ---------------------------------------------------------------------------
//
TDesC& CImpsPluginConnectionManager::UserName()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::UserName() Start-End" ) );
    return *iUserName;
    }


// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::Password
// ---------------------------------------------------------------------------
//
TDesC& CImpsPluginConnectionManager::Password()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::Password() Start-End" ) );
    return *iPassword;
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::HandleToHost
// ---------------------------------------------------------------------------
//
MXIMPProtocolConnectionHost& CImpsPluginConnectionManager::HandleToHost()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::HandleToHost() Start-End" ) );
    return *iHostHandle;
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::AccessHandler
// ---------------------------------------------------------------------------
//
CImpsPluginAccessHandler& CImpsPluginConnectionManager::AccessHandler()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::AccessHandler() Start-End" ) );
    return *iAccessHandler;
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::DataHandler
// ---------------------------------------------------------------------------
//
CImpsPluginPureDataHandler& CImpsPluginConnectionManager::DataHandler()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::DataHandler() Start-End" ) );
    return *iPureHandler;
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::SetHost
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::SetHost( MXIMPProtocolConnectionHost& aHost )
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::SetHost() Start" ) );
    iHostHandle = &aHost;
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::SetHost() End" ) );
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::SetConnectionParamsL
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::SetConnectionParamsL( const TDesC& aServerAddress,
                                                         const TDesC& aUserName,
                                                         const TDesC& aPassword,
                                                         const TInt32 aIapId )
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::SetConnectionParamsL() Start" ) );
    // first store the login parameters
    HBufC* tmpBuf = aServerAddress.AllocL();
    delete iServerAddress;
    iServerAddress = tmpBuf;

    tmpBuf = aUserName.AllocL();
    delete iUserName;
    iUserName = tmpBuf;

    tmpBuf = aPassword.AllocL();
    delete iPassword;
    iPassword = tmpBuf;

    iIapId = aIapId;
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::SetConnectionParamsL() End" ) );
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::InitializeStatusL
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::InitializeStatusL()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::InitializeStatusL() Start" ) );

    MXIMPObjectFactory& objFactory = iHostHandle->ObjectFactory();
    iDisconnectStatusObj = objFactory.NewStatusLC();

    CleanupStack::Pop( iDisconnectStatusObj ); //iDisconnectStatusObj

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::InitializeStatusL() End" ) );
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::StatusChangedL
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::StatusChangedL(
    TPEngNWSessionSlotState aNewState,
    TPEngNWSessionSlotEvent aNewEvent )
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::StatusChangedL() Start" ) );

    IMPSPRTPLUGIN_UNUSED_PARAM( aNewState );
    IMPSPRTPLUGIN_UNUSED_PARAM( aNewEvent );

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::StatusChangedL() End" ) );
    }


// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::ReserveSpaceForOneMoreRequestL
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::ReserveSpaceForOneMoreRequestL( )
    {
    IMPS_DP( D_IMPS_LIT( "::ReserveSpaceForOneMoreRequestL() Start" ) );

    TInt count = iRequestArray.Count();

    iRequestArray.Reserve( count + 1 );

    IMPS_DP( D_IMPS_LIT( "::ReserveSpaceForOneMoreRequestL() End" ) );
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::AddRequest
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::AddRequest( CActive* aRequestObject )
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::AddRequest() Start" ) );

    TInt count = iRequestArray.Count();

    TInt error = iRequestArray.Append( aRequestObject );

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::AddRequest() End (%d)" ), error );
    }


// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::Remove
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::Remove( CActive* aRequestObject )
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::Remove() Start" ) );

    TInt index = iRequestArray.Find( aRequestObject );
    if ( index != KErrNotFound )
        {
        iRequestArray.Remove( index );
        }

    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::Remove() End" ) );
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::GetVersion
// ---------------------------------------------------------------------------
//
TImpsAdapWVCspVersion CImpsPluginConnectionManager::GetVersion()
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::GetVersion() Start-End" ) );
    return iCSPVersion;
    }

// ---------------------------------------------------------------------------
// CImpsPluginConnectionManager::Remove
// ---------------------------------------------------------------------------
//
void CImpsPluginConnectionManager::SetVersion( TImpsAdapWVCspVersion aVersion )
    {
    IMPS_DP( D_IMPS_LIT( "CImpsPluginConnectionManager::SetVersion Start-End" ) );

    if ( aVersion == EWVCspV12 )
        {
        iCSPVersion = EWVCspV12;
        }
    else if ( aVersion == EWVCspV13 )
        {
        iCSPVersion = EWVCspV13;
        }
    else if ( aVersion == EWVCspV11 )
        {
        iCSPVersion = EWVCspV11;
        }
    }

RArray< HBufC >* CImpsPluginConnectionManager::PresenceAuthGrantReqList()
    {
    return &iPresenceAuthGrantReqList;
    }




// End of File