diff -r f5911524345e -r 78867dafe7eb uiservicetab/vimpstengine/src/cvimpstengine.cpp --- a/uiservicetab/vimpstengine/src/cvimpstengine.cpp Fri Feb 19 22:41:11 2010 +0200 +++ b/uiservicetab/vimpstengine/src/cvimpstengine.cpp Fri Mar 12 15:41:33 2010 +0200 @@ -150,19 +150,27 @@ TBool imSupported = IsSubServiceSupportedInternal(TVIMPSTEnums::EIM); requireXimp |= presenceSupported; - requireXimp |= imSupported; - + requireXimp |= imSupported; + + TPtr serviceIdPtr(iServiceName->Des()); + iTableFetcher.GetServiceNameL(aServiceId, serviceIdPtr); + //if either of Presence/IM Subservice supported then we need //to bind to XIMP context. if ( KErrNotFound != ximpAdapterUid && requireXimp ) { - iSessionCntxtObserver = CVIMPSTEngineSessionCntxtObserver::NewL(aServiceId); + TRAPD( err, (iSessionCntxtObserver = CVIMPSTEngineSessionCntxtObserver::NewL(aServiceId))); + TRACE( T_LIT("ConstructL() -1st Creating session context observer: %d"), err ); + if (KErrNotFound == err) + { + TRACE( T_LIT("Ximp impl not found. Calling Logout") ); + iUnInstall = ETrue; + LogoutL(); + TRACE( T_LIT("Logout Called on account of uninstall") ); + return; + } } - TPtr serviceIdPtr( iServiceName->Des() ); - iTableFetcher.GetServiceNameL(aServiceId, serviceIdPtr); - - // iterate the service array for ( TInt index = TVIMPSTEnums::EVoip; index < TVIMPSTEnums::ELast ; index++ ) { @@ -234,7 +242,7 @@ iServiceId(aServiceId), iTableFetcher(aTableFetcher) { - + iUnInstall = EFalse; } // --------------------------------------------------------- @@ -1394,6 +1402,15 @@ { iSessionCntxtObserver->ServerUnBindL(ETrue); } + } +// ------------------------------------------------------- +// CVIMPSTEngine :: IsUnInstalled +// For Description see MVIMPSTEngine +// ------------------------------------------------------- +// +TBool CVIMPSTEngine::IsUnInstalled( ) + { + return iUnInstall; } // End of File