imstutils/imconnectionprovider/src/cicpservicemanager.cpp
branchRCL_3
changeset 22 3104fc151679
parent 21 2b7283837edb
child 23 9a48e301e94b
--- a/imstutils/imconnectionprovider/src/cicpservicemanager.cpp	Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1114 +0,0 @@
-/*
-* Copyright (c) 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 service manager for im
-*
-*/
-
-
-#include "cicpservicemanager.h"	   	// service manager
-
-#include <e32std.h>
-
-
-#include <ximpclient.h>
-#include <ximpcontext.h>
-#include <ximprequestcompleteevent.h>
-#include <ximpcontextstateevent.h>
-#include <ximpidentity.h>
-#include <ximpstatus.h>
-#include <ximpcontextstateevent.h>
-#include <ximpcontextstate.h>
-#include <ximperrors.hrh>
-
-#include <imconversationevent.h> // recieve message
-#include <imconversationinfo.h>
-
-#include <spsettings.h>
-#include <spentry.h>
-#include <spproperty.h>
-#include <spdefinitions.h>
-
-#include "icplogger.h"
-#include "cicpservicerequest.h"
-
-// imcache related includes
-#include    <cimcachefactory.h>
-#include	<mimcacheupdater.h>
-
-//xmppsettings
-#include "xmppparams.h"
-#include "xmppservicesettingsapi.h"
-
-
-/************** Consts ***************/
-const TInt KPropertyMaxLength = 512;
-const TInt KPasswordMaxLength = 50;
-//Received message maximum length is 400 character if received message is longer than 400 character
-//Truncate it to 400 character
-//This must always be in sync with imcvuiapp KReceiveMsgMaxLength
-const TInt KReceiveMsgMaxLength = 400;  
- _LIT(KAt, "@");
- _LIT(KPercentage, "%");
-/***********End of Consts**********************/
-
-
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::CIcpServiceManager()
-// -----------------------------------------------------------------------------
-//
-CIcpServiceManager::CIcpServiceManager( MCchServiceObserver& aServiceObserver ) :
-    iServiceObserver( aServiceObserver ),
-    iOngoingState( ECCHUninitialized )
-	{
-    ICPLOGSTRING( "CIcpServiceManager::CIcpServiceManager");
-	}
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::NewL
-// -----------------------------------------------------------------------------
-//
-CIcpServiceManager* CIcpServiceManager::NewL( MCchServiceObserver& aServiceObserver )
-	{
-    ICPLOGSTRING( "CIcpServiceManager::NewL");
-
-    CIcpServiceManager* self = new ( ELeave ) CIcpServiceManager( aServiceObserver );
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-	}
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::ConstructL
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::ConstructL()
-    {
-    ICPLOGSTRING( "CIcpServiceManager::ConstructL");
-    iCSPSetting = CSPSettings::NewL();
-    iXmppParameters = CXmppSettingsApi::NewL();
-    
-	iOwnUserId = HBufC::NewL(MAX_LENGTH);
-    
-    if ( iPresClient )
-        {
-        delete iPresClient;
-        iPresClient = NULL;
-        }
-    
-    //XIMP Context creation    
-    iPresClient = MXIMPClient::NewClientL();
-    MXIMPContext* tmp = iPresClient->NewPresenceContextLC();
-    iPresenceCtx = tmp;
-    CleanupStack::Pop( ); // iPresenceCtx
-    
-	iAcceptedEventTypes.Reset();
-    iAcceptedEventTypes.AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
-    iAcceptedEventTypes.AppendL( MXIMPContextStateEvent::KInterfaceId );       
-    iAcceptedEventTypes.AppendL( MImConversationEvent::KInterfaceId );
-    
-    
-	TArray< TInt32 > eventFilterArray = iAcceptedEventTypes.Array();
-   	// register this to prsence context   
-    iPresenceCtx->RegisterObserverL( *this, &eventFilterArray );       
-    
-    tmp = NULL;                                                                      
-    
-    ICPLOGSTRING( "CIcpServiceManager::ConstructL Done");  
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::~CIcpServiceManager
-// -----------------------------------------------------------------------------
-//
-CIcpServiceManager::~CIcpServiceManager()
-	{	
-    ICPLOGSTRING( "CIcpServiceManager::~CIcpServiceManager"); 
-    
-    delete iXmppParameters;
-    delete iOwnUserId; 
-    
-    delete iCSPSetting;
-    
-    iAcceptedEventTypes.Reset();
-	iAcceptedEventTypes.Close();
-    
-    iReqIDArray.ResetAndDestroy();
-    
-    delete iPresenceCtx;
-    delete iPresClient;
-    
-    if(iIMCacheFactory)
-	    {
-	    CIMCacheFactory::Release();	
-	    }
-	
-	if (iServiceName)
-		{
-		delete iServiceName;
-		iServiceName = NULL;	
-		}
-	}
-
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::EnableServiceL
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::EnableServiceL( TUint aServiceId,
-                                         TCCHSubserviceType aSubServiceType )
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::EnableServiceL service:%i Type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-	
-	if ( (iOngoingState != ECCHEnabled) && 
-				(iOngoingState != ECCHConnecting) )
-		{
-		//Get the service
-		iServiceId = aServiceId;
-		
-		if (iServiceName)
-			{
-			delete iServiceName;
-			iServiceName = NULL;	
-			}
-
-		iServiceName = HBufC::NewL(KPropertyMaxLength);
-		TPtr serviceIdPtr( iServiceName->Des() );    
-		
-		GetServiceNameL(iServiceId, serviceIdPtr);
-	    
-	    TInt settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId);
-	    
-	    //reset owndata
-	    delete iOwnUserId;    
-	    iOwnUserId = NULL;
-	    iOwnUserId = HBufC::NewL(MAX_LENGTH);
-		TPtr owndataPtr = iOwnUserId->Des();
-	   	
-	    //get the owndata from settingsapi
-	    CXmppSettingsApi* xmppParameters = CXmppSettingsApi::NewLC();    	
-		xmppParameters->GetParamL(settingsId, XmppParams::KXmppParamUsername(), owndataPtr );	
-		CleanupStack::PopAndDestroy(); // xmppParameters
-
-		TInt passwordSet = KErrNotFound;
-		GetConnectionParameter(aServiceId,aSubServiceType,ECchPasswordSet,passwordSet);
-		if(0 ==  iOwnUserId->Length() || !passwordSet)
-		    {
-		    // check the user name if its empty or leave with the KCCHErrorAuthenticationFailed
-            // for the cch ui to show the user name and password query dialog.
-            User::Leave(KCCHErrorAuthenticationFailed);
-		    }
-		
-		//bind to presence context
-		BindL(iServiceId);	
-		iOngoingState = ECCHConnecting; 
-		}
-
-	
-    ICPLOGSTRING( "CIcpServiceManager::EnableServiceL out" );
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::EnableServiceL
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::EnableServiceL( TUint aServiceId,
-                                         TCCHSubserviceType aSubServiceType,
-                                         TUint /*aIapId*/ )
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::EnableServiceL service:%i Type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-    
-    EnableServiceL( aServiceId, aSubServiceType );
-	
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::DisableServiceL
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::DisableServiceL( TUint aServiceId,
-                                          TCCHSubserviceType aSubServiceType  )
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::DisableService service:%i Type:%i", aServiceId, aSubServiceType );
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-
-	
-	// just unbind the context from the oss protocol adaptation plugin
-	if (iOngoingState == ECCHEnabled)	
-		{
-		UnBindL();   
-		iOngoingState = ECCHDisconnecting;  
-		}
-         
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::IsAvailableL
-// -----------------------------------------------------------------------------
-//
-TBool CIcpServiceManager::IsAvailableL( TUint /*aServiceId*/,
-                                        TCCHSubserviceType /*a*/,
-                                        const RArray<TUint32>& /*aIapIdArray*/ ) const
-    {
-    ICPLOGSTRING( "CIcpServiceManager::IsAvailableL" );
-
-    return ETrue;
-    }
- 
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::GetServiceState
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::GetServiceState( TUint aServiceId,
-                                          TCCHSubserviceType aSubServiceType , 
-                                          TCCHSubserviceState& aState ) const
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::GetServiceState service:%i type:%i", aServiceId, aSubServiceType );
-
-	__ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-    
-    TInt result( KErrNone );
-    
-    aState = iOngoingState;        
-    result = iLastReportedError;
-    return result;
-    }
-    
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::GetServiceNetworkInfo
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::GetServiceNetworkInfoL( TUint aServiceId,
-                                                TCCHSubserviceType aSubServiceType,
-                                                TUint32& aSnapId, 
-                                                TUint32& aIapId,
-                                                TBool& aSnapLocked,
-                                                TBool& aPasswordSet) const
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::GetServiceNetworkInfo service:%i type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-	
-	//Please dont remove the below line
-    //otheriwse enable service will not be called
-    //assuming service is down. Hack
-    aSnapId = 0;
-    aIapId = 5;
-    aSnapLocked = ETrue;    
-    // read from setting see, if it is availabe set 1 else 0
-    TInt settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId);            
-    //get the owndata from settingsapi
-    HBufC* password = HBufC::NewLC( KPasswordMaxLength );
-    TPtr  passwordPtr( password->Des() );
-   
-    iXmppParameters->GetParamL((TUint32)settingsId, XmppParams::KXmppParamPassword(), passwordPtr );
-    
-    if( passwordPtr.Length() > 0 )
-        {
-        aPasswordSet = ETrue;
-        }
-    else
-        {
-        aPasswordSet = EFalse;
-        }  
-    CleanupStack::PopAndDestroy();// password 
-    return KErrNone;
-    }
-    
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::SetSnapId
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::SetSnapId( TUint /*aServiceId*/,
-                                    TCCHSubserviceType /*aSubServiceType*/,
-                                    const TUint /*aSnapId*/ )
-    {    
-    return KErrNotSupported;
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::SetIapId
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::SetIapId( TUint /*aServiceId*/,
-                                   TCCHSubserviceType /*aSubServiceType*/,
-                                   TUint /*aIapId*/ )
-    {
-    return KErrNotSupported;
-    }
- 
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::GetServiceInfoL
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::GetServiceInfoL( TUint /*aServiceId*/,
-                                          TCCHSubserviceType /*aSubServiceType*/,
-                                          RBuf& /*aBuffer*/ ) const
-    {    
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::ReserveService
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::SetServiceReserved( TBool /*aReserved*/,
-                                             TUint /*aServiceId*/,
-                                             TCCHSubserviceType /*aSubServiceType*/ )
-    {
-    return KErrNotSupported;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::GetConnectionParameter
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::GetConnectionParameter(TUint aServiceId,
-                         TCCHSubserviceType aSubServiceType, 
-                         TCchConnectionParameter aParameter,
-                         TInt& aValue ) const
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::GetConnectionParameter service:%i type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-    
-    TInt error = KErrBadHandle;
-     
-    switch( aParameter )
-	    {
-	    case ECchIapId:
-		    {
-		    aValue = iIapId;
-		    error = KErrNone;
-		    break;	
-		    }
-		case ECchSnapId:
-		    {
-		    aValue = iSnapId;
-		    error = KErrNone;
-		    break;	
-		    }
-		case ECchSnapLocked:
-		    {
-		    aValue = ETrue;
-		    error = KErrNone;
-		    break;	
-		    } 
-		case ECchPasswordSet:
-		    {
-		    // dont return ETrue simply, check if password length is greater than 0,
-		    // only then return ETrue, else return EFalse.
-		    TBuf<MAX_LENGTH> password;
-		    TInt settingsId = KErrNotFound;
-		    TRAPD(err,settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId));               
-           //get the owndata from settingsapi
-		   if(KErrNone == err)
-		       {
-	           TRAP_IGNORE(iXmppParameters->GetParamL((TUint32)settingsId, 
-	                                               XmppParams::KXmppParamPassword(), password ));
-		       }
-           if( 0 == password.Length())
-               {
-               aValue = EFalse;
-               }
-           else 
-               {
-               aValue = ETrue;
-               }
-		    break;	
-		    } 
-		default :
-			{
-			break;	
-			}  
-		 
-	    }
-    
-   	return error;
-  
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::GetConnectionParameter
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::GetConnectionParameterL(TUint aServiceId,
-                         				TCCHSubserviceType aSubServiceType,  
-                                        TCchConnectionParameter aParameter,
-                                        RBuf& aValue  ) const
-    {
-    
-    ICPLOGSTRING3( "CIcpServiceManager::GetConnectionParameterL service:%i type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-    
-    TInt error = KErrBadHandle;
-     switch( aParameter )
-	    {
-	   	case ECchUsername:
-		    {
-    	    TInt settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId);
-       		TRAP(error,iXmppParameters->GetParamL((TUint32)settingsId, 
-       											XmppParams::KXmppParamUsername(), aValue ));
-		    break;	
-		    }
-	   	case ECchPassword:
-            {
-            TInt settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId);       		
-            //get the owndata from settingsapi
-            TRAP(error,iXmppParameters->GetParamL((TUint32)settingsId, 
-            									XmppParams::KXmppParamPassword(), aValue ));
-            break;  
-            }
-		default :
-			{
-			break;	
-			}  
-		 
-	    }
-    
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpPlugin::SetConnectionParameter
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::SetConnectionParameter( TUint aServiceId,
-                        					TCCHSubserviceType aSubServiceType,  
-                                            TCchConnectionParameter aParameter,
-                                            TInt aValue )
-    {
-    
-    ICPLOGSTRING3( "CIcpServiceManager::SetConnectionParameter service:%i type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-    
-    TInt error = KErrBadHandle;
-	 switch( aParameter )
-	    {
-	  	case ECchIapId:
-		    {
-		    iIapId = aValue ;
-		    error = KErrNone;
-		    break;	
-		    }
-		case ECchSnapId:
-		    {
-		    iSnapId = aValue ;
-		    error = KErrNone;
-		    break;	
-		    }
-	   default :
-			{
-			break;	
-			}  
-		 
-	    }
-    return error;	
-    }
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::SetConnectionParameter
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::SetConnectionParameterL(TUint aServiceId,
-                         					TCCHSubserviceType aSubServiceType,  
-                                            TCchConnectionParameter aParameter,
-                                            const TDesC& aValue )
-    {
-    
-    ICPLOGSTRING3( "CIcpServiceManager::SetConnectionParameterL service:%i type:%i", aServiceId, aSubServiceType );
-    
-    __ASSERT_DEBUG( ValidateSubService(aSubServiceType), User::Panic( KNullDesC, KErrNotFound ) );    
-    __ASSERT_DEBUG( aServiceId > 0, User::Panic( KNullDesC, KErrNotFound ) );
-    
-     switch( aParameter )
-	    {
-	   	case ECchUsername:
-		    {
-            HBufC* userid = NULL;
-            TInt settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId);             
-            if(KErrNotFound == aValue.Find( KAt() ) )
-                {
-                //ownUserIdPtr.Append(KAt());
-                HBufC* domainName = HBufC::NewLC(50);
-                TPtr domainNamePtr = domainName->Des();
-                iXmppParameters->GetParamL((TUint32)settingsId, XmppParams::KXmppParamDomain(), domainNamePtr);                
-                CleanupStack::Pop();//domainName
-                userid = HBufC::NewLC( aValue.Length() + domainName->Length() + KAt().Length() );
-                TPtr useridPtr = userid->Des();
-                useridPtr.Append(aValue);
-                useridPtr.Append(KAt);
-                useridPtr.Append(domainNamePtr);
-                delete domainName;
-                }
-            else
-                {
-                userid = aValue.AllocLC();
-                }
-            TChar at('@');
-            TInt loc = userid->Locate( at );
-            if ( loc<2 )
-                {
-                // There must be at least @ + something in domain part
-                User::Leave( KErrArgument );
-                }
-            if(iOwnUserId)
-                {
-                delete iOwnUserId;
-                iOwnUserId = NULL;
-                }
-            iOwnUserId = userid->AllocL();
-            iXmppParameters->SetParamL((TUint32)settingsId, 
-            								XmppParams::KXmppParamUsername(), *userid);
-            CleanupStack::PopAndDestroy();//userid
-		    break;	
-		    }
-	   	case ECchPassword:
-            {
-            TInt settingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId); 
-            iXmppParameters->SetParamL((TUint32)settingsId, 
-            								XmppParams::KXmppParamPassword(), aValue);
-            break;  
-            }
-		default :
-			{
-			break;	
-			}  
-		 
-	    }
-    
-   
-    }
- 
- 
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::IsReserved
-// -----------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::IsReserved( TUint aServiceId,
-                                     TCCHSubserviceType aSubServiceType ) const
-    {
-    ICPLOGSTRING3( "CIcpServiceManager::IsReserved service: %d type: %d",
-                   aServiceId, aSubServiceType );
-
-    TBool result = EFalse;
-
-    return result;
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::
-// -----------------------------------------------------------------------------
-//      
-void  CIcpServiceManager::BindL(TInt aServiceSettingId)
-	{
-	ICPLOGSTRING2( "CIcpServiceManager[0x%x]::BindL", this );
-	//TUid protocolUid = TUid::Uid( KProtocolUid );
-	TInt propertyId  = GetSPSettingsIntPropertyL( aServiceSettingId, EPropertyPCSPluginId );
-
-	if ( KErrNotFound != propertyId )
-		{
-	    TUid protocolUid = TUid::Uid( propertyId );
-	    	
-		TXIMPRequestId reqId = iPresenceCtx->BindToL( protocolUid, 
-												aServiceSettingId );			
-		CreateRequestL(reqId, TIMConnProviderEnums::ELoginRequest);
-		
-		}
-
-	ICPLOGSTRING( "CIcpServiceManager::BindL end" );
-	}
-	   
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::UnBindL
-// -----------------------------------------------------------------------------
-//      
-void  CIcpServiceManager::UnBindL()
-	{
-	ICPLOGSTRING2( "CIcpServiceManager[0x%x]::UnBindL", this );
-
-	TXIMPRequestId reqId = iPresenceCtx->UnbindL();
-	
-	CreateRequestL(reqId, TIMConnProviderEnums::ELogoutRequest);
-	
-	ICPLOGSTRING( "CIcpServiceManager::UnBindL end" );
-	}  
-
-
-// -----------------------------------------------------------------------------
-// CIcpServiceManager::ProfileEventOccurred
-// -----------------------------------------------------------------------------
-//
-void CIcpServiceManager::HandlePresenceContextEvent( const MXIMPContext& /* aContext */,
-                                     const MXIMPBase& aEvent )
-	{
-	ICPLOGSTRING2( "CIcpServiceManager[0x%x]::HandlePresenceContextEvent", this );
-
-    const TInt32 eventType = aEvent.GetInterfaceId();
-    
-    switch( eventType )
-        {
-        case MXIMPRequestCompleteEvent::KInterfaceId:
-            {
-            ICPLOGSTRING( "::HandlePresenceContextEvent event MximpRequestCompleteEvent start" );
-            const MXIMPRequestCompleteEvent* event =
-                TXIMPGetInterface< const MXIMPRequestCompleteEvent >::From( aEvent, MXIMPBase::EPanicIfUnknown );
-
-            TXIMPRequestId reqId = event->RequestId();
-            
-            const MXIMPStatus& status = event->CompletionResult();
-            
-            TInt err = status.ResultCode();
-            
-			CICPServiceRequest *req = FindRequestId( reqId );
-			
-            if( req->RequestType() == TIMConnProviderEnums::ELoginRequest )
-                {
-                if(KErrNone == err )
-	                {
-		                //login successfull
-	                ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent event bind complete" );
-	                
-	                iOngoingState = ECCHEnabled;
-	                
-	                iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHPresenceSub ),
-	                								 ECCHEnabled, err ); 
-	                								 
-	                iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHIMSub ),
-	                								 ECCHEnabled, err );                       
-	               
-	               	
-	                // create the imcache session ,since now ready to recieve message
-	               if(!iIMCacheFactory) 
-						{
-						
-						TRAP_IGNORE(
-									iIMCacheFactory = CIMCacheFactory::InstanceL() ;
-									iIMCacheUpdater = iIMCacheFactory->CreateUpdaterL(iServiceId, iOwnUserId->Des() ,EFalse) ;
-									);
-						}
-	                
-	                }
-                else
-	                {
-	                TRAP_IGNORE( SetIMDisabledL(iServiceId) );
-	                
-	                TInt cchErr = ConvertXIMPErrToCChErr(err);
-	                iLastReportedError = cchErr;
-	                //login unsuccessfull
-	                ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent event bind complete" );	                
-	                
-					iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHPresenceSub ),
-	                								 ECCHDisabled, cchErr );
-	                								 
-	                iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHIMSub ),
-	                								 ECCHDisabled, cchErr );                       
-	                
-	                iOngoingState = ECCHDisabled;
-	                ICPLOGSTRING2( "CIcpServiceManager::HandlePresenceContextEvent err = %d",err); 
-	                
-		
-	                }               
-               
-                }
-            else if( req->RequestType() == TIMConnProviderEnums::ELogoutRequest )
-                {
-                //Logout is successfull
-                ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent status offline" ); 
-                
-                
-                
-               	// release the imcache, all the conversation will lost here 
-     			if( iIMCacheFactory ) 
-					{
-					CIMCacheFactory::Release();
-					iIMCacheFactory = NULL; // make sure factory is deleted
-					iIMCacheUpdater = NULL;	
-					}
-			
-				// set the status into cenrep
-				
-                ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent status offline end" );
-                }
-                
-              ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent offline end 2" );
-            
-            req->StopWait() ;	
-			RemoveRequestId(reqId);
-			delete req;						
-            
-            break;
-            }
-            
-        case MXIMPContextStateEvent::KInterfaceId:
-        	{
-        	ICPLOGSTRING( "::HandlePresenceContextEvent event MXIMPContextStateEvent start" );
-        	// what do we do with context state event
-        	// state of the context can be associated with the 
-        	const MXIMPContextStateEvent* ctxtStateEvent = 
-            TXIMPGetInterface< const MXIMPContextStateEvent >::From( aEvent, 
-                                                                     MXIMPBase::EPanicIfUnknown );
-            const MXIMPStatus* fwStatus = ctxtStateEvent->StateChangeReason();
-            const MXIMPContextState& cState = ctxtStateEvent->ContextState();
-            MXIMPContextState::TState state = cState.ContextState();          
-            
-            if (MXIMPContextState::EBinding == state)
-	            {
-	            
-	            iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHPresenceSub ),
-	                								 ECCHConnecting, KErrNone ); 
-	                								 
-	             iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHIMSub ),
-	                								 ECCHConnecting, KErrNone ); 	
-	            }
-            else if (MXIMPContextState::EUnbinding == state)
-	            {
-	            
-	            iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHPresenceSub ),
-	                								 ECCHDisconnecting, KErrNone );                 								 
-	            
-	             iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHIMSub ),
-	                								 ECCHDisconnecting, KErrNone ); 	
-	            }
-	        else if (MXIMPContextState::EInactive == state  )
-				{
-			 	// release the imcache, all the conversation will lost here  
-				CIMCacheFactory::Release();
-				iIMCacheFactory = NULL; // make sure factory is deleted
-				iIMCacheUpdater = NULL;
-				iOngoingState = ECCHDisabled;				
-				
-				iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHPresenceSub ),
-                								 ECCHDisabled, KErrNone );
-                								 
-                iServiceObserver.ServiceStateChanged( TServiceSelection( iServiceId, ECCHIMSub ),
-                								 ECCHDisabled, KErrNone ); 	
-				
-				}
-            
-            break;
-        	}
-                
-        case MImConversationEvent::KInterfaceId:
-            {
-            ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent new message recieved star" );
-            const MImConversationEvent* convEvent = 
-            TXIMPGetInterface< const MImConversationEvent >::From
-            (aEvent, MXIMPBase::EPanicIfUnknown);
-            if( iIMCacheUpdater )
-                {
-                TInt count = convEvent->NewTextMessageCount();
-                const MImConversationInfo& convInfo = convEvent->NewTextMessage(0);
-                const MXIMPIdentity& identity = convInfo.MessageId();
-                const TDesC16& msgText = convInfo.TextMessage();
-                ICPLOGSTRING2( "msg txt: %S", &msgText );
-                TInt len = msgText.Length();
-                HBufC* bigmsg = NULL;
-                TRAP_IGNORE( bigmsg = HBufC::NewL(KReceiveMsgMaxLength + 1) ; // 1 for  %
-                if( bigmsg )
-                    {
-                    CleanupStack::PushL(bigmsg) ; // bigmsg
-                    TPtr bigmsgPtr = bigmsg->Des();
-                    //If message is more than 400 character take only first 400 character
-                    //Rest of the message will be lost and 
-                    bigmsgPtr.Append( msgText.Left( KReceiveMsgMaxLength ) ); 
-                    if( len > KReceiveMsgMaxLength)
-                        {
-                        //append % as 401st character to identify on UI that it is a 
-                        //long message which is truncated        
-                        bigmsgPtr.Append(KPercentage); 
-                        }
-                    TPtrC buddyId = identity.Identity();
-                    iIMCacheUpdater->AppendReceiveMessageL( buddyId, bigmsgPtr ) ;
-                    ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent Cache updated" );
-                    CleanupStack::PopAndDestroy(bigmsg); // bigmsg          
-                    }   ); //End TRAP_IGNORE( bigmsg ...
-                }
-            ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent new message recieved end" );
-            break;  
-            }
-
-        
-        default:
-            {
-            break;
-            }
-        }
-        ICPLOGSTRING( "CIcpServiceManager::HandlePresenceContextEvent end" );
-	}
-	
-	
-// ---------------------------------------------------------
-// CIcpServiceManager::FindRequestId
-// 
-// ---------------------------------------------------------		
-CICPServiceRequest* CIcpServiceManager::CreateRequestL(TXIMPRequestId& aRequestId,
-							TIMConnProviderEnums::TRequestTypes aType )
-	{	
-
-	CICPServiceRequest* req = CICPServiceRequest::NewL(aRequestId, aType);
-	CleanupStack::PushL(req);
-	
-	TInt status( iReqIDArray.Append( req ) );
-	User::LeaveIfError( status );		
-	
-	CleanupStack::Pop(req);
-	
-	return req;
-	}
-	
-	
-// ---------------------------------------------------------
-// CIcpServiceManager::FindRequestId
-// 
-// ---------------------------------------------------------		
-CICPServiceRequest* CIcpServiceManager::FindRequestId(TXIMPRequestId& aRequestId )
-	{
-	TInt count = iReqIDArray.Count() ;
-	TXIMPRequestId reqId ;
-	CICPServiceRequest *req = NULL;
-	for (TInt i=0; i < count; i++)
-		{
-		req = iReqIDArray[i] ;
-		
-		reqId = req->GetRequestId() ;
-		
-		if( aRequestId == reqId )			
-			{
-			break ;
-			}
-		}
-	return req ;
-	}
-
-// ---------------------------------------------------------
-// CIcpServiceManager::RemoveRequestId
-// 
-// ---------------------------------------------------------		
-CICPServiceRequest* CIcpServiceManager::RemoveRequestId(TXIMPRequestId& aRequestId )
-	{
-	TInt count = iReqIDArray.Count() ;
-	CICPServiceRequest *req = NULL;
-	for (TInt i=0; i < count; i++)
-		{
-		req = iReqIDArray[i] ;
-		if(req->GetRequestId() == aRequestId)			
-			{
-			iReqIDArray.Remove( i );
-			iReqIDArray.Compress();
-			break ;
-			}
-		}
-		return req ;
-	}
-
-
-// ---------------------------------------------------------------------------
-// CIcpServiceManager::SetIMDisabledL
-// ---------------------------------------------------------------------------
-//
-void CIcpServiceManager::SetIMDisabledL(
-                                TUint32 aServiceId)
-    {
-    ICPLOGSTRING2( "CIcpServiceManager::SetIMDisabledL serviceId = %d",aServiceId); 
-    
-    
-    {
-    //Disable IM Subservice
-    TSPItemType propertyType( EItemTypeIMSubProperty );
-    TServicePropertyName propertyName( ESubPropertyIMEnabled );
-    RPropertyArray subproperties;
-    CleanupClosePushL( subproperties );        
-     
-    // Find correct subservice
-    TInt err( iCSPSetting->FindSubServicePropertiesL( 
-        aServiceId, propertyType, subproperties ) );
-    
-    for ( TInt i( 0 ); i < subproperties.Count(); i++ )
-        {
-        // Read subservice's On/Off information 
-        if ( propertyName == subproperties[ i ]->GetName() )
-            {
-            TOnOff onOff( EOff );                
-            ICPLOGSTRING2( "CIcpServiceManager::SetIMDisabledL subproperties[ i ]->SetValue err = %d",err);
-            subproperties[ i ]->SetValue( onOff );            
-            i = subproperties.Count();               
-            }
-        }    
-    iCSPSetting->AddOrUpdatePropertiesL( aServiceId, subproperties ) ;
-    subproperties.ResetAndDestroy( );
-    CleanupStack::PopAndDestroy( &subproperties );
-    }
-
-	{
-    TSPItemType propertyType( EItemTypePresenceSubProperty );
-    TServicePropertyName propertyName( ESubPropertyPresenceEnabled );
-    RPropertyArray subproperties;
-    CleanupClosePushL( subproperties );        
-     
-    // Find correct subservice
-    TInt err( iCSPSetting->FindSubServicePropertiesL( 
-        aServiceId, propertyType, subproperties ) );
-    
-    for ( TInt i( 0 ); i < subproperties.Count(); i++ )
-        {
-        // Read subservice's On/Off information 
-        if ( propertyName == subproperties[ i ]->GetName() )
-            {
-            TOnOff onOff( EOff );                
-            ICPLOGSTRING2( "CIcpServiceManager::SetIMDisabledL subproperties[ i ]->SetValue err = %d",err);
-            subproperties[ i ]->SetValue( onOff );            
-            i = subproperties.Count();               
-            }
-        }    
-    iCSPSetting->AddOrUpdatePropertiesL( aServiceId, subproperties ) ;
-    subproperties.ResetAndDestroy( );
-    CleanupStack::PopAndDestroy( &subproperties );
-	}
-	
-	
-	}
-	
-
-// ---------------------------------------------------------------------------
-// CIcpServiceManager::ValidateServiceL
-// ---------------------------------------------------------------------------
-//
-TBool CIcpServiceManager::ValidateServiceL( TUint32 aServiceId ) const
-	{
-	
-	TInt presenceSettingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyPresenceSettingsId);
-	TInt imSettingsId = GetSPSettingsIntPropertyL(aServiceId, ESubPropertyIMSettingsId);
-	
-	if ( (KErrNotFound != presenceSettingsId) && (presenceSettingsId == imSettingsId) )
-		{
-		return ETrue;
-		}
-
-	return EFalse;
-	}
-	
-// ---------------------------------------------------------------------------
-// CIcpServiceManager::GetSPSettingsIntPropertyL
-// ---------------------------------------------------------------------------
-//
-TInt CIcpServiceManager::GetSPSettingsIntPropertyL( TUint32 aServiceId, 
-											  TServicePropertyName aPropertyName ) const
-	{
-	TInt tIntProperty = KErrNotFound; 
-	
-    CSPProperty* property = CSPProperty::NewLC();
-    
-    iCSPSetting->FindPropertyL( aServiceId,
-                                aPropertyName,
-                                *property ); 	
-	
-	if ( property )
-        {
-        property->GetValue( tIntProperty );
-        }
-    CleanupStack::PopAndDestroy( property );    
-    
-    return tIntProperty;    
-	}
-	
-// ---------------------------------------------------------------------------
-// CIcpServiceManager::ValidateServiceL
-// ---------------------------------------------------------------------------
-//
-TBool CIcpServiceManager::ValidateSubService( TCCHSubserviceType aSubServiceType ) const
-	{
-	if ( (ECCHUnknown == aSubServiceType) || 
-					(ECCHPresenceSub == aSubServiceType) || 
-						(ECCHIMSub == aSubServiceType) )
-		{
-		return ETrue;	
-		}
-	return EFalse;
-	}	
-	
-
-// ---------------------------------------------------------------------------
-// CIcpServiceManager::GetServiceNameL()
-// ---------------------------------------------------------------------------
-//
-void CIcpServiceManager::GetServiceNameL( TUint32 aServiceId, TDes& aServiceName )
-    {
-    
-    CSPEntry* entry = CSPEntry::NewLC();
-    TRAPD( err, iCSPSetting->FindEntryL( aServiceId, *entry ) );
-    if ( !err )
-        {
-        aServiceName = entry->GetServiceName();
-        }
-    
-    CleanupStack::PopAndDestroy( entry );    
-    
-    }
-
-
-// ---------------------------------------------------------------------------
-// CIcpServiceManager::ConvertXIMPErrToCChErr()
-// ---------------------------------------------------------------------------
-//    
-TInt CIcpServiceManager::ConvertXIMPErrToCChErr(const TInt aXimpErr)
-	{
-
-	TInt returnValue (KErrNone);
-	
-	switch (aXimpErr)
-		{
-		case KXIMPErrServiceGeneralError: 
-		case KXIMPErrServiceShutdown:		
-		case KXIMPErrServiceRequestTypeNotSupported:
-			{
-			returnValue = KCCHErrorLoginFailed;
-			break;
-			}
-
-		case KXIMPErrServiceAuthenticationFailed:
-			{
-			returnValue = KCCHErrorAuthenticationFailed;
-			break;         
-			}		
-
-		default:
-			{
-			break;	
-			}
-		}
-	
-	return 	returnValue;	
-	}
-	
-            		
-// End of file