imservices/ossprotocoladaptation/src/cossprotocolconnectionmanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:49 +0200
changeset 0 e6b17d312c8b
permissions -rw-r--r--
Revision: 200949 Kit: 200951

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

#include "cossprotocolconnectionmanager.h"
#include "cossprotocolservererrorhandler.h"
#include "ccontactsynchandler.h"
#include <e32std.h>
#include <e32base.h>
#include <ximpobjectfactory.h>
#include <ximpprotocolconnectionhost.h>
#include <ximpstatus.h>
#include "xmppservicesettingsapi.h"
#include "xmppparams.h" //from xmppsettingsapi

#include "xmppsettingsfetcher.h"
#include "xmppparameters.h"
#include "waittimer.h"

#include <spsettings.h>
#include <spentry.h>
#include <spproperty.h>

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

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::COSSProtocolConnectionManager()
// ---------------------------------------------------------------------------
//
COSSProtocolConnectionManager::COSSProtocolConnectionManager()
	{
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::ConstructL()
// ---------------------------------------------------------------------------
//
void COSSProtocolConnectionManager::ConstructL()
	{
	iXmppParams = CXmppParameters::NewL();
	iTimer = CWaitTimer::NewL (*this);
	iTimer->StartListeningL();  //start listening message queue updation
	iNotifier = CPresenceNotificationHandler::NewL ( *this );
	iNotifier->StartListeningL();  //start listening presence notifications
	iSearchKeyStore = CSearchKeyStore::NewL();
	iContactManager = COSSContactManager::NewL( *this );
	
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::NewL()
// ---------------------------------------------------------------------------
//
COSSProtocolConnectionManager* COSSProtocolConnectionManager::NewL()
	{

	COSSProtocolConnectionManager* self = new ( ELeave )
									      COSSProtocolConnectionManager();

	CleanupStack::PushL ( self );

	self->ConstructL();
	CleanupStack::Pop ( self );

	return self;
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::~COSSProtocolConnectionManager()
// ---------------------------------------------------------------------------
//
COSSProtocolConnectionManager::~COSSProtocolConnectionManager()
	{
	delete iXmppParams;
	delete iNotifier;
	delete iRecvHandler;
	delete iServerErrorHandler;
	delete iAddNotificationHanlder;
	delete iContactSyncHandler;
	delete iUserName;
	delete iPassword;
	delete iTimer;
	delete iGroupId;
	delete iContactManager;
	delete iSearchKeyStore;
	if(iServiceName)
	    {
	    delete iServiceName;
	    }
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::Username
// ---------------------------------------------------------------------------
//
TDesC& COSSProtocolConnectionManager::UserName()
	{
	return *iUserName;
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::Password
// ---------------------------------------------------------------------------
//
TDesC& COSSProtocolConnectionManager::Password()
	{
	return *iPassword;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GroupID
// ---------------------------------------------------------------------------
//
TDesC& COSSProtocolConnectionManager::GroupId()
	{
	return *iGroupId;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GroupID
// ---------------------------------------------------------------------------
//
void COSSProtocolConnectionManager::SetGroupIDL(TDesC& aGroupId)
	{
	HBufC* tmpId = aGroupId.AllocL();
	delete iGroupId;
	iGroupId=NULL;
	iGroupId = tmpId ;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::XmppParams
// ---------------------------------------------------------------------------
//
CXmppParameters& COSSProtocolConnectionManager::XmppParams()
	{
	return *iXmppParams;
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::DataHandler()
// ---------------------------------------------------------------------------
//
CWaitTimer& COSSProtocolConnectionManager::DataHandler()
	{
	return *iTimer;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::HandleToHost()
// ---------------------------------------------------------------------------
//
MXIMPProtocolConnectionHost& COSSProtocolConnectionManager::HandleToHost()
	{
	return *iHostHandle;
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::SetHost()
// ---------------------------------------------------------------------------
//
void COSSProtocolConnectionManager::SetHost ( MXIMPProtocolConnectionHost& aHost )
	{
	iHostHandle = &aHost;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::SetConnectionParamsL()
// ---------------------------------------------------------------------------
//
void COSSProtocolConnectionManager::SetConnectionParamsL ( const TDesC& aUserName,
        const TDesC& aPassword,
        const TInt32 aServiceId )
	{

	// first store the login parameters

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

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

	SetConnectionParamsL( aServiceId, EFalse );
	}


// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::ManufactureDataHandlerL()
// ---------------------------------------------------------------------------
//
void COSSProtocolConnectionManager::ManufactureDataHandlerL()
	{
	if(!iIsDataHandlerReady)
		{
		iRecvHandler = CReceiveMessageHandler::NewL ( *this );
		iRecvHandler->StartListeningL();//start listening incoming messages
		iServerErrorHandler = COssprotocolServerErrorHandler::NewL ( *this );
		iServerErrorHandler->StartListeningL();//start listening incoming messages
		iAddNotificationHanlder = CAddContactNotificationHandler::NewL ( *this );
		iContactSyncHandler = CContactSyncHandler::NewL(*this);
		iContactSyncHandler->StartListening(); // listening for contacts changes
		iIsDataHandlerReady = ETrue;
		}
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::SetConnectionParamsL
// ---------------------------------------------------------------------------
//
TInt COSSProtocolConnectionManager::SetConnectionParamsL ( const TUint32 aServiceId , TBool aReadNeeded /* = ETrue*/ )
	{
		// Get the service setting id and service name	
	TInt error = KErrNone;
	
	CSPSettings* settings = CSPSettings::NewLC();
	
	if(aReadNeeded)
		{
		TInt settingsId = 0; 
		CSPProperty* property = CSPProperty::NewLC();
		settings->FindPropertyL( aServiceId,
		               			 ESubPropertyIMSettingsId,
		                		*property );    
		if ( property )
			{
			property->GetValue( settingsId );
			}
		// read settings

		error = CXmppSettingsFetcher::ReadSettingsL ( settingsId, *iXmppParams ); //settings id is used to read settings

		CleanupStack::PopAndDestroy(); // property

		}
	// read service name 	
	CSPEntry* entry = CSPEntry::NewLC();
    settings->FindEntryL( aServiceId, *entry ) ;
    
    // set the service name to presence cache updater
    if(iServiceName)
        {
        delete iServiceName;
        iServiceName = NULL;
        }
    iServiceName = entry->GetServiceName().AllocL();
    CleanupStack::PopAndDestroy(2); // entry, settings
    
	return error;
	}
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::PresenceAuthGrantReqList()
// ---------------------------------------------------------------------------
//	
RArray< HBufC >* COSSProtocolConnectionManager::PresenceAuthGrantReqList()
	{
	return &iPresenceAuthGrantReqList;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::ReleaseConnectionL()
// ---------------------------------------------------------------------------
//	
void COSSProtocolConnectionManager::ReleaseConnectionL()
	{
	if( iTimer )
		{
		iTimer->IssueReleaseRequestL();	
		}
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::IsServerDisconnect()
// ---------------------------------------------------------------------------
//	
TBool COSSProtocolConnectionManager::IsServerDisconnect()
	{
	return iTimer->IsServerDisconnect();	
	}
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::SetImHost
// ---------------------------------------------------------------------------
//	
	
void COSSProtocolConnectionManager::SetImHost(MProtocolImDataHost& aHost)
	{
	iHost = &aHost ;
	}	
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GetImHost()
// ---------------------------------------------------------------------------
//
MProtocolImDataHost& COSSProtocolConnectionManager::GetImHost()
	{
	return *iHost;
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GetAddNotificationHandler()
// ---------------------------------------------------------------------------
//
CAddContactNotificationHandler& COSSProtocolConnectionManager::GetAddNotificationHandler()
    {
    return *iAddNotificationHanlder;
    }
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::SetSearchHost
// ---------------------------------------------------------------------------
//		
void COSSProtocolConnectionManager::SetSearchHost(MProtocolSearchDataHost& aSearchHost)
	{
	iSearchHost = &aSearchHost ;
	}	
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GetSearchHost()
// ---------------------------------------------------------------------------
//	
MProtocolSearchDataHost& COSSProtocolConnectionManager::GetSearchHost()
	{
	return *iSearchHost;
	}
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GetSearchKeyStore()
// ---------------------------------------------------------------------------
//	
CSearchKeyStore& COSSProtocolConnectionManager::GetSearchKeyStore()
	{
	return *iSearchKeyStore;		
	}

// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::GetContactManager()
// ---------------------------------------------------------------------------
//
COSSContactManager& COSSProtocolConnectionManager::GetContactManager()
    {
    return *iContactManager;
    }
// ---------------------------------------------------------------------------
// COSSProtocolConnectionManager::ServiceName()
// ---------------------------------------------------------------------------
//
const TDesC& COSSProtocolConnectionManager::ServiceName()
    {
    return *iServiceName;
    }
// End of File