uiservicetab/vimpstengine/src/cvimpstenginesessioncntxtobserver.cpp
changeset 15 81eeb8c83ce5
parent 0 5e5d6b214f4f
--- a/uiservicetab/vimpstengine/src/cvimpstenginesessioncntxtobserver.cpp	Tue Feb 02 10:12:18 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,665 +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: Implementation for CVIMPSTEngineSessionCntxtObserver
-*
-*/
-
-
-#include "cvimpstenginesessioncntxtobserver.h"
-
-
-
-#include "tvimpstenums.h"
-#include "cvimpstenginerequestmapper.h"
-#include "cvimpstenginerequest.h"
-#include "mvimpstenginesearchextentioneventobserver.h"
-#include "mvimpstenginesessioncntxtobserver.h"
-//ximpfw
-#include <presencegrantrequestinfo.h>
-#include <presentitygroupcontentevent.h>
-#include <ximpcontext.h>
-#include <presenceinfofilter.h>
-#include <presencefeatures.h>
-#include <presenceobjectfactory.h>
-#include <presenceinfo.h>
-#include <presenceauthorization.h>
-#include <ximpidentity.h>
-#include <ximpobjectfactory.h>
-#include <searchinfo.h>
-#include <searchevent.h>
-#include <ximpclient.h>
-#include <ximpidentity.h>
-#include <ximpstatus.h>
-#include <ximpcontextstateevent.h>
-#include <ximprequestcompleteevent.h>
-#include <presentitypresenceevent.h>
-#include <presenceblocklistevent.h>
-#include <presencegrantrequestlistevent.h>
-#include <ximpcontextstate.h>
-#include <searchelement.h>
-#include <searchkeysevent.h>
-#include <searchkeyinfo.h>
-#include <ximpfeatureinfo.h>
-
-#include "vimpstdebugtrace.h"
-
-//xmppsettings
-#include "xmppparams.h"
-#include "xmppservicesettingsapi.h"
-
-
-// ============================ MEMBER FUNCTIONS ==============================
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::NewL
-// two phase construction
-// ---------------------------------------------------------
-CVIMPSTEngineSessionCntxtObserver* CVIMPSTEngineSessionCntxtObserver::NewL( TUint32 aServiceId )
-    {
-    CVIMPSTEngineSessionCntxtObserver* self = 
-    					CVIMPSTEngineSessionCntxtObserver::NewLC( aServiceId);
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::NewLC
-// two phase construction
-// ---------------------------------------------------------
-CVIMPSTEngineSessionCntxtObserver* CVIMPSTEngineSessionCntxtObserver::NewLC(TUint32 aServiceId)
-    {
-    CVIMPSTEngineSessionCntxtObserver* self = new 
-    					(ELeave) CVIMPSTEngineSessionCntxtObserver( aServiceId);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::ConstructL
-// two phase construction
-// ---------------------------------------------------------    
-void CVIMPSTEngineSessionCntxtObserver::ConstructL()
-	{
-	iRequestMapper = CVIMPSTEngineRequestMapper::NewL();	
-	iReqResult = KErrNone;
-	iClient = MXIMPClient::NewClientL();               
-    //Create new sink to receive ximp context events
-	iPresenceCtx = iClient->NewPresenceContextLC();
-    // ignore code scanner warning, it gives panic
-    CleanupStack::Pop();// because of LC method    
-	
-	iFeatures = MPresenceFeatures::NewL(iPresenceCtx);
-	
-	//Stores the XIMPFw EventTypes Subscribed for      
-	iAcceptedEventTypes.Reset();
-    iAcceptedEventTypes.AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
-    iAcceptedEventTypes.AppendL( MXIMPContextStateEvent::KInterfaceId );
-    iAcceptedEventTypes.AppendL( MPresentityGroupContentEvent::KInterfaceId );   
-    iAcceptedEventTypes.AppendL( MPresenceGrantRequestListEvent::KInterfaceId );
-	iAcceptedEventTypes.AppendL( MSearchEvent::KInterfaceId );   
-    iAcceptedEventTypes.AppendL( MSearchKeysEvent::KInterfaceId );
-    iAcceptedEventTypes.AppendL( MPresenceBlockListEvent::KInterfaceId );
-	    
-	TArray< TInt32 > eventFilterArray = iAcceptedEventTypes.Array();
-    
-	// register this to prsence context   
-	iPresenceCtx->RegisterObserverL( *this, &eventFilterArray );
-	 
-	}
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::~CVIMPSTEngineSessionCntxtObserver
-// destructor
-// ---------------------------------------------------------
-CVIMPSTEngineSessionCntxtObserver::~CVIMPSTEngineSessionCntxtObserver()
-    {
-    
-    iObserverArray.Reset();
-    iObserverArray.Close();
-    
-    iAcceptedEventTypes.Reset();
-    iAcceptedEventTypes.Close();
-    delete iFeatures;
-    
-    if(iPresenceCtx)
-        {
-        iPresenceCtx->UnregisterObserver( *this );
-        delete  iPresenceCtx;   
-        }
-    
-    delete iClient;           
-    delete iRequestMapper;
-    }
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::CVIMPSTEngineSessionCntxtObserver
-// ---------------------------------------------------------
-CVIMPSTEngineSessionCntxtObserver::CVIMPSTEngineSessionCntxtObserver(TUint32 aServiceId)
-:iServiceId(aServiceId),
- iBindStatus( TVIMPSTEnums::EVIMPSTBindNotDone )
-    {
-    }
-
-// ===========================================================================
-// FROM MPRFWximpCONTEXTOBSERVER
-// ===========================================================================
-//
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::HandlePresenceContextEvent
-// ---------------------------------------------------------
-void CVIMPSTEngineSessionCntxtObserver::HandlePresenceContextEvent( 
-    const MXIMPContext& aContext,
-    const MXIMPBase& aEvent )
-    {
-    TRACE( T_LIT("InsideCallback::HandlePresenceContextEvent start"));
-    TRAP_IGNORE(DoHandlePresenceContextEventL( aContext, aEvent ));
-   	TRACE( T_LIT("InsideCallback::HandlePresenceContextEvent end"));	
-    }    
-
-	
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::GetCompletedReqResult
-// 
-// ---------------------------------------------------------
-TInt CVIMPSTEngineSessionCntxtObserver::GetCompletedReqResult() const
-	{
-	return iReqResult;	
-	}
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::CVIMPSTEngineSessionCntxtObserver
-// 
-// ---------------------------------------------------------
-CVIMPSTEngineRequestMapper* CVIMPSTEngineSessionCntxtObserver::
-											GetRequestMapper() const
-	{
-	return iRequestMapper;	
-	}
-
-
-// ---------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::ContextBindStatus
-// 
-// ---------------------------------------------------------
-TVIMPSTEnums::TVIMPSTBindStatus CVIMPSTEngineSessionCntxtObserver::ContextBindStatus()
-	{
-	return iBindStatus;	
-	}
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::ServerBindL
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTEngineSessionCntxtObserver::ServerBindL(TUid aProtocolUid)
-    {
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::ServerBindL start"));
-    TInt err = KErrNotFound;
-    //Bind context to desired presence service
-    if ( TVIMPSTEnums::EVIMPSTBindDone != iBindStatus )
-        {  
-        TXIMPRequestId operationId = TXIMPRequestId::Null();
-        TRAP( err, operationId = iPresenceCtx->BindToL( 
-                aProtocolUid, iServiceId ) );
-        if ( err )
-            {
-            // XIMP queues all operations except bind operation. If there is
-            // unbind operation pending in ximp side, bind call will leave
-            // with KErrAlreadyExists. Client side is not ideal place to 
-            // handle this type of logic so to work around this problem, this 
-            // case is flagged here. When unbind completes, rebind is done. 
-            // If unbind is called between these operations, flag is set 
-            // ESVCEPresenceBindNotDone to avoid bind if service was disabled
-            TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::ServerBindL err: %d"), err);
-            iBindStatus = TVIMPSTEnums::EVIMPSTBindFailureMode;
-            }
-        else
-            {
-            //create the requestmapper for the corresponidng reuqest id.
-            iRequestMapper->CreateRequestL(operationId,ETrue,EVIMPSTXimpOperationBind);
-            iBindStatus = TVIMPSTEnums::EVIMPSTBindDone; 
-            iFeatureSupported = EVIMPSTFeatureUnknown;
-            TRAP(err,IdentifySupportedFeaturesL());
-            }
-        }
-    else
-        {
-        err = KErrNone;
-        }
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::ServerBindL end"));
-    return err;
-    }
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineVoIPPrecenseHandler::ServerUnBindL
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTEngineSessionCntxtObserver::ServerUnBindL( 
-    TBool aDoUnsubscribe )
-    {
-	TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::ServerUnBind start"));
-	TInt err = KErrNotFound;
-	if ( TVIMPSTEnums::EVIMPSTBindDone == iBindStatus )
-		{
-		if ( aDoUnsubscribe )
-			{
-			iBindStatus = TVIMPSTEnums::EVIMPSTUnBinding;
-			}
-		
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::ServerUnBind - do unbind"));
-		TXIMPRequestId operationId = TXIMPRequestId::Null(); 
-		TRAP( err, operationId = iPresenceCtx->UnbindL());
-		iBindStatus = TVIMPSTEnums::EVIMPSTUnBindWaiting;
-		iRequestMapper->CreateRequestL(operationId,EFalse,EVIMPSTXimpOperationUnBind) ;
-		iBindStatus = TVIMPSTEnums::EVIMPSTBindNotDone;
-		iFeatureSupported = EVIMPSTFeatureUnknown;
-		}
-	else if ( TVIMPSTEnums::EVIMPSTBindFailureMode == iBindStatus )
-		{
-		// Disable flag here. If service is really disabled, we must not
-		// rebind when unbind completes.
-		iBindStatus = TVIMPSTEnums::EVIMPSTBindNotDone;
-		}
-	TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::ServerUnBind end"));
-	return err;
-    } 
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::UriFromXimpOperationLC
-// ---------------------------------------------------------------------------
-//
-HBufC* CVIMPSTEngineSessionCntxtObserver::UriFromXimpOperationLC(const MXIMPBase& aEvent )
-    {
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::UriFromXimpOperationLC start"));
-    const MPresentityPresenceEvent& event =
-            *TXIMPGetInterface< const MPresentityPresenceEvent >::From( 
-                aEvent, MXIMPBase::EPanicIfUnknown );  
-    HBufC* retValue = NULL;
-    retValue = event.PresentityId().Identity().AllocLC();
-    if(!retValue)
-        {
-        retValue = KNullDesC().AllocLC();
-        }
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::UriFromXimpOperationLC end"));
-    return retValue;    
-    }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::DoHandlePresenceContextEventL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineSessionCntxtObserver::DoHandlePresenceContextEventL(
-    const MXIMPContext& aContext,
-    const MXIMPBase& aEvent )
-    {
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::DoHandlePresenceContextEventL start"));
-    const TInt32 eventId = aEvent.GetInterfaceId();
-        
-        switch( aEvent.GetInterfaceId() )
-            {
-            case MXIMPRequestCompleteEvent::KInterfaceId:
-                {
-                
-                TRACE( T_LIT("InsideCallbackswitch::MXIMPRequestCompleteEvent start"));
-                const MXIMPRequestCompleteEvent* event =
-                    TXIMPGetInterface< const MXIMPRequestCompleteEvent >::From( 
-                        aEvent, MXIMPBase::EPanicIfUnknown );
-                
-                iReqResult = event->CompletionResult().ResultCode();
-                const TXIMPRequestId& reqId = event->RequestId();
-                // Note:FindRequestId does not pass the ownership. hanece req
-                // should not be deleted.
-                CVIMPSTEngineRequest *req = iRequestMapper->FindRequestId( reqId );                
-                
-                if ( req )
-                    {                                        
-                    TXimpOperation operation = req->RequestType(); 
-                    
-                    //contact mgmt & search will remove their own requests
-                    //presence subservice should also do the same 
-                    //untill then use the below if check 
-                    //TBD
-                    if ( (operation>EVIMPSTXimpOperationNoOperation)&&
-                    		(operation<=EVIMPSTXimpOperationUnsubscribe) )
-	                    {
-	                    req->StopWait() ;   
-	                    iRequestMapper->RemoveRequestId(reqId);              
-	                    }
-
-                    TInt count = iObserverArray.Count();
-                    
-                    for(TInt i = 0; i < count; i++)
-	                    {
-	                    iObserverArray[i]->HandleSessionContextEventL(aContext,
-	                    						aEvent,
-	                    						operation);
-	                    }
-                    }
-                TRACE( T_LIT("InsideCallbackswitch::MXIMPRequestCompleteEvent end"));    
-                break;
-                }
-
-            case MXIMPContextStateEvent::KInterfaceId:
-                {
-                TRACE( T_LIT("InsideCallbackswitch::MXIMPContextStateEvent"));                
-                break;
-                }
-            case MPresentityPresenceEvent::KInterfaceId:
-                {
-                TRACE( T_LIT("InsideCallbackswitch::::MPresentityPresenceEvent start"));
-                TInt count = iObserverArray.Count();
-                for(TInt i = 0; i < count; i++)
-                    {
-                    iObserverArray[i]->HandleSessionContextEventL(aContext,aEvent);
-                    }
-                TRACE( T_LIT("InsideCallbackswitch::::MPresentityPresenceEvent end"));
-                break;
-                }
-            case MPresentityGroupContentEvent::KInterfaceId:
-               {
-               TRACE( T_LIT("InsideCallbackswitch::::MPresentityGroupContentEvent start"));
-               TInt count = iObserverArray.Count();
-               for(TInt i = 0; i < count; i++)
-                  {
-                  iObserverArray[i]->HandleSessionContextEventL(aContext,aEvent);
-                  }
-               TRACE( T_LIT("InsideCallbackswitch::::MPresentityGroupContentEvent end"));
-               break;  
-               }
-            case MPresenceGrantRequestListEvent::KInterfaceId:
-               {
-               TRACE( T_LIT("InsideCallbackswitch::::MPresentityGroupContentEvent start"));
-               TInt count = iObserverArray.Count();
-               for(TInt i = 0; i < count; i++)
-                  {
-                  iObserverArray[i]->HandleSessionContextEventL(aContext,aEvent);
-                  }               
-               TRACE( T_LIT("InsideCallbackswitch::::MPresentityGroupContentEvent end"));
-               break;
-               }
-           
-            case MSearchEvent::KInterfaceId:
-                {
-                TRACE( T_LIT("InsideCallbackswitch::::MSearchEvent start"));
-
-                TInt count = iObserverArray.Count();
-                for(TInt i = 0; i < count; i++)
-                   {
-                   iObserverArray[i]->HandleSessionContextEventL(aContext,aEvent);
-                   } 
-                TRACE( T_LIT("InsideCallbackswitch::::MSearchEvent end"));
-
-                break;
-                }
-            case MSearchKeysEvent::KInterfaceId:
-                {
-                TRACE( T_LIT("InsideCallbackswitch::::MSearchKeysEvent start"));
-                TInt count = iObserverArray.Count();
-                for(TInt i = 0; i < count; i++)
-                   {
-                   iObserverArray[i]->HandleSessionContextEventL(aContext,aEvent);
-                   } 
-                TRACE( T_LIT("InsideCallbackswitch::::MSearchKeysEvent end"));
-
-                break;
-                }
-            case MPresenceBlockListEvent::KInterfaceId:
-               {
-               TRACE( T_LIT("InsideCallbackswitch::::MPresenceBlockListEvent start"));
-               TInt count = iObserverArray.Count();
-               for(TInt i = 0; i < count; i++)
-                  {
-                  iObserverArray[i]->HandleSessionContextEventL(aContext,aEvent);
-                  } 
-               TRACE( T_LIT("InsideCallbackswitch::::MPresenceBlockListEvent end"));
-               break;
-               }
-              
-            default:
-                {
-                break;
-                }
-            }
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::DoHandlePresenceContextEventL end"));
-    }
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::XimpAuthorizationL
-// ---------------------------------------------------------------------------
-// 
-MPresenceAuthorization& 
-CVIMPSTEngineSessionCntxtObserver::XimpAuthorizationL()
-    {
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ));
-    __ASSERT_ALWAYS( &iFeatures->PresenceAuthorization(), 
-        User::Leave( KErrNotSupported ));
-    return iFeatures->PresenceAuthorization();
-    }
-    
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::XimpPresenceWatchingL
-// ---------------------------------------------------------------------------
-//
-MPresenceWatching& 
-CVIMPSTEngineSessionCntxtObserver::XimpPresenceWatchingL()
-    {
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ));
-    __ASSERT_ALWAYS( &iFeatures->PresenceWatching(), 
-        User::Leave( KErrNotSupported ));
-    return iFeatures->PresenceWatching();
-    }    
-    
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::XimpPresentityGroupsL
-// ---------------------------------------------------------------------------
-//
-MPresentityGroups& 
-CVIMPSTEngineSessionCntxtObserver::XimpPresentityGroupsL()
-    {
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ));
-    __ASSERT_ALWAYS( &iFeatures->PresentityGroups(), 
-        User::Leave( KErrNotSupported ));
-    return iFeatures->PresentityGroups();
-    }        
-    
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::XimpPresencePublishingL
-// ---------------------------------------------------------------------------
-//
-MPresencePublishing& 
-CVIMPSTEngineSessionCntxtObserver::XimpPresencePublishingL()
-    {
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotSupported ));
-    __ASSERT_ALWAYS( &iFeatures->PresencePublishing(), 
-        User::Leave( KErrNotSupported ));
-    return iFeatures->PresencePublishing();
-    }
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::XimpPresenceContext
-// ---------------------------------------------------------------------------
-//
-MXIMPContext& 
-CVIMPSTEngineSessionCntxtObserver::XimpPresenceContextL()
-    {
-    __ASSERT_ALWAYS( iPresenceCtx, User::Leave( KErrNotFound ));
-     return *iPresenceCtx;
-    }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::PresenceObjectFactory
-// ---------------------------------------------------------------------------
-//
-MPresenceObjectFactory& CVIMPSTEngineSessionCntxtObserver::PresenceObjectFactoryL() const
-    {
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotFound ));
-    return iFeatures->PresenceObjectFactory();
-    }
-    
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::PresenceFeaturesL
-// ---------------------------------------------------------------------------
-//
-MPresenceFeatures& CVIMPSTEngineSessionCntxtObserver::PresenceFeaturesL() const
-    {
-    __ASSERT_ALWAYS( iFeatures, User::Leave( KErrNotFound ));
-    return *iFeatures;
-    }
-    
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::RegisterObserver
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineSessionCntxtObserver::RegisterObserver(MVIMPSTEngineSessionCntxtObserver* aObserver)
-    {
-    if (aObserver)
-	    {    	
-	    
-	    TInt index = iObserverArray.Find(aObserver);
-        if( index == KErrNotFound )
-            {
-            iObserverArray.Append( aObserver );   
-            }
-	    }
-    }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::UnRegisterObserver
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineSessionCntxtObserver::UnRegisterObserver(MVIMPSTEngineSessionCntxtObserver* aObserver)
-    {
-    if (aObserver)
-	    {    
-	    TInt index = iObserverArray.Find(aObserver);
-	        
-	    if( index >=0 )
-	        {
-	        iObserverArray.Remove( index );
-	        iObserverArray.Compress();
-	        }
-	    }    
-   }
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::IdentifySupportedFeaturesL
-// ---------------------------------------------------------------------------
-//
-void CVIMPSTEngineSessionCntxtObserver::IdentifySupportedFeaturesL()
-    {
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::IdentifySupportedFeaturesL start"));
-    using namespace NXIMPFeature::Presence;
-    using namespace NXIMPFeature::InstantMessage;
-    using namespace NXIMPFeature::Search;
-    using namespace NXIMPFeature::PresentityGroups;
-    
-   	MXIMPFeatureInfo* ximpCtxFeats = iPresenceCtx->GetContextFeaturesLC();
-    //get the supproted features from ximpfw adaptation.
-    if( ximpCtxFeats )
-        {        
-        CleanupStack::Pop() ; //iXimpctxFeat 
-        
-        const MDesC8Array& supportedFeatures = ximpCtxFeats->FeatureIds();
-        
-        TInt count  = supportedFeatures.MdcaCount();
-				
-		for(TInt index = 0; index < count; index++)
-		    {
-		    TPtrC8 feature = supportedFeatures.MdcaPoint(index);
-		    
-		    if ( !(iFeatureSupported & EVIMPSTFeaturePublish) && !(KPublish().Compare(feature)) )
-			    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeaturePublish;
-			    
-			    }
-		    else if ( !(iFeatureSupported & EVIMPSTFeatureFetch) && !(KFetch().Compare(feature)) )
-		        {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureFetch;
-			    
-			    }
-			else if ( !(iFeatureSupported & EVIMPSTFeatureSubscribe) && !(KSubscribe().Compare(feature)) )			    
-			    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureSubscribe;
-			    
-			    }
-			else if ( !(iFeatureSupported & EVIMPSTFeatureUnsubscribe) && !(KUnsubscribe().Compare(feature)) )			    
-			    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureUnsubscribe;
-			    
-			    }    
-			else if ( !(iFeatureSupported & EVIMPSTFeatureAddContact) && !(KAddContact().Compare(feature)) )			    
-			    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureAddContact;
-			    
-			    }	
-			else if ( !(iFeatureSupported & EVIMPSTFeatureDeleteContact) && !(KDeleteContact().Compare(feature)) )			    
-       		    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureDeleteContact;
-			    
-			    } 
-			else if ( !(iFeatureSupported & EVIMPSTFeatureBlock) && !(KBlock().Compare(feature)) )			    
-        	    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureBlock;
-			    
-			    }
-			else if ( !(iFeatureSupported & EVIMPSTFeatureUnBlock) && !(KUnBlock().Compare(feature)) )			    
-        	    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureUnBlock;
-			    
-			    }
-			else if ( !(iFeatureSupported & EVIMPSTFeatureAvatar) && !(KAvatar().Compare(feature)) )			    
-        	    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureAvatar;
-			    
-			    }
-			else if ( !(iFeatureSupported & EVIMPSTFeatureCreateGroup) && !(KCreate().Compare(feature)) )			    
-        	    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureCreateGroup;
-			    
-			    }    
-			else if ( !(iFeatureSupported & EVIMPSTFeatureDeleteGroup) && !(KDelete().Compare(feature)) )			    
-    		    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureDeleteGroup;
-			    
-			    }
-			else if ( !(iFeatureSupported & EVIMPSTFeatureInstantMessage) && !(KInstantMessage().Compare(feature)) )			    			
-			    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureInstantMessage;
-			    
-			    }  
-			else if ( !(iFeatureSupported & EVIMPSTFeatureSearch) && !(KSearch().Compare(feature)) )			    			
-			    {
-			    iFeatureSupported = iFeatureSupported | EVIMPSTFeatureSearch;
-			    
-			    }			      
-    
-		    }
-    
-    	delete ximpCtxFeats;
-        }
-    TRACE( T_LIT("CVIMPSTEngineSessionCntxtObserver::IdentifySupportedFeaturesL end"));
-    }
-
-
-// ---------------------------------------------------------------------------
-// CVIMPSTEngineSessionCntxtObserver::GetSupportedFeatures
-// ---------------------------------------------------------------------------
-//
-TInt CVIMPSTEngineSessionCntxtObserver::GetSupportedFeatures()
-	{
-	return 	iFeatureSupported;
-	}    
-
-// end of file
-
-