diff -r 000000000000 -r e6b17d312c8b ximpfw/tsrc/tsrcprotocols/pr_prfwtestprotocol/pr_prfwtestprotocol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ximpfw/tsrc/tsrcprotocols/pr_prfwtestprotocol/pr_prfwtestprotocol.cpp Thu Dec 17 08:54:49 2009 +0200 @@ -0,0 +1,1519 @@ +/* +* Copyright (c) 2006 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: Test Protocol implementation for XIMP Framework + * +*/ + + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "pr_prfwtestprotocol.h" +#include "prfwgeneralwaiter.h" +#include "prfwtestmessaging.h" +#include "prfwtestmessenger.h" +#include "prfwtestfilelogichelper.h" +#include "prfwtestfiletool.h" +#include "ximprequestidbuilder.h" +#include "prfwtestprotocols.h" + + + +const TInt KWaitTime = 1; + +T_XIMPTestConnection::ClientWrapper* T_XIMPTestConnection::ClientWrapper::NewLC( const TDesC& aClientId ) + { + ClientWrapper* self = new ( ELeave ) ClientWrapper; + CleanupStack::PushL( self ); + self->ConstructL( aClientId ); + return self; + } + +void T_XIMPTestConnection::ClientWrapper::ConstructL( const TDesC& aClientId ) + { + iId.CreateL( aClientId ); + } + +void T_XIMPTestConnection::ClientWrapper::InitializeL( MXIMPProtocolConnectionHost& aConnectionHost ) + { + if( !iMessenger ) + { + TLex lex( iId ); + TInt index = 0; + User::LeaveIfError( lex.Val( index ) ); + // TEST CODE + __ASSERT_ALWAYS( index != -1, User::Panic(_L("Protocol"), 666)); + iMessenger = CXIMPTestMessenger::NewForAdaptationSideL( index ); + iPluginIndex = index; + } + + if( !iFileLogicHelper ) + { + iFileLogicHelper = CXIMPTestFileLogicHelper::NewL( aConnectionHost, *iMessenger ); + } + + if( !iFileTool ) + { + // TODO FIX FILETOOL CREATION + iFileTool = CXIMPTestFileTool::NewL( K_PRFW_TST_PROTOCOL_1_IMPLEMENTATION_UID, iId ); + iFileTool->RegisterObserverL( iFileLogicHelper ); + } + } + +T_XIMPTestConnection::ClientWrapper::~ClientWrapper() + { + if( iFileTool && iFileLogicHelper ) + { + iFileTool->UnregisterObserver( iFileLogicHelper ); + } + delete iFileTool; + delete iFileLogicHelper; + delete iMessenger; + + iId.Close(); + } + +// --------------------------------------------------------------------------- +// OrderOfClients() +// --------------------------------------------------------------------------- +// +TInt T_XIMPTestConnection::OrderOfClients( const T_XIMPTestConnection::ClientWrapper& aFirst, + const T_XIMPTestConnection::ClientWrapper& aSecond ) + { + return aFirst.iId.Compare( aSecond.iId ); + } + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// OrderOfConnections() +// --------------------------------------------------------------------------- +// +TInt T_XIMPTestConnection::OrderOfConnections( const T_XIMPTestConnection& aFirst, + const T_XIMPTestConnection& aSecond ) + { + TInt retVal = aFirst.iServerAddress->Compare( *aSecond.iServerAddress ); + if( retVal != 0 ) + { + return retVal; + } + retVal = aFirst.iUserName->Compare( *aSecond.iUserName ); + if( retVal != 0 ) + { + return retVal; + } + + return aFirst.iPassword->Compare( *aSecond.iPassword ); + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::T_XIMPTestConnection() +// --------------------------------------------------------------------------- +// +T_XIMPTestConnection::T_XIMPTestConnection() + { + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::ConstructL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::ConstructL( const MXIMPServiceInfo& aServiceInfo, + const MXIMPContextClientInfo& aClientCtxInfo ) + { + iWaitter = CXIMPTestGeneralWaiter::NewL( this ); + + iAuxTimer = CPeriodic::NewL( CActive::EPriorityIdle ); + + iServerAddress = aServiceInfo.ServiceAddress().AllocL(); + iUserName = aServiceInfo.UserId().AllocL(); + iPassword = aServiceInfo.Password().AllocL(); + iClientId = aClientCtxInfo.ClientId().Identity().AllocL(); + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::NewLC() +// --------------------------------------------------------------------------- +// +T_XIMPTestConnection* T_XIMPTestConnection::NewLC( const MXIMPServiceInfo& aServiceInfo, + const MXIMPContextClientInfo& aClientCtxInfo ) + { + T_XIMPTestConnection* self = new( ELeave ) T_XIMPTestConnection( ); + CleanupStack::PushL( self ); + self->ConstructL( aServiceInfo, aClientCtxInfo ); + return self; + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::NewL() +// --------------------------------------------------------------------------- +// +T_XIMPTestConnection* T_XIMPTestConnection::NewL( const MXIMPServiceInfo& aServiceInfo, + const MXIMPContextClientInfo& aClientCtxInfo ) + { + T_XIMPTestConnection* self = T_XIMPTestConnection::NewLC( aServiceInfo, aClientCtxInfo ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::~T_XIMPTestConnection() +// --------------------------------------------------------------------------- +// +T_XIMPTestConnection::~T_XIMPTestConnection() + { + SetBoolean( EXIMPPlgTestDeath ); + + if ( iAuxTimer ) + { + iAuxTimer->Deque(); + } + delete iAuxTimer; + + delete iWaitter; + + iClients.ResetAndDestroy(); + + delete iServerAddress; + delete iUserName; + delete iPassword; + delete iClientId; + + delete iClientToBeDeleted; + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PrimeHost() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::PrimeHost( MXIMPProtocolConnectionHost& aHost ) + { + iConnectionHost = &aHost; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PresenceFeatures() +// --------------------------------------------------------------------------- +// +MProtocolPresenceFeatures& T_XIMPTestConnection::ProtocolPresenceFeatures() + { + return *this; + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PresenceFeatures() +// --------------------------------------------------------------------------- +// MProtocolImFeatures* ProtocolImFeatures(); +//MProtocolImFeatures* T_XIMPTestConnection::ProtocolImFeatures() +// { +// return NULL; +// } +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::GetProtocolInterface() +// --------------------------------------------------------------------------- +TAny* T_XIMPTestConnection::GetProtocolInterface(TInt aInterfaceId) + { + return NULL ; + } + + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PresenceWatching() +// --------------------------------------------------------------------------- +// +MProtocolPresenceWatching& T_XIMPTestConnection::PresenceWatching() + { + return *this; + } +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PresencePublishing() +// --------------------------------------------------------------------------- +// +MProtocolPresencePublishing& T_XIMPTestConnection::PresencePublishing() + { + return *this; + } +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PresentityGroups() +// --------------------------------------------------------------------------- +// +MProtocolPresentityGroups& T_XIMPTestConnection::PresentityGroups() + { + return *this; + } +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PresenceAuthorization() +// --------------------------------------------------------------------------- +// +MProtocolPresenceAuthorization& T_XIMPTestConnection::PresenceAuthorization() + { + return *this; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::HandleProtocolConnectionHostEvent() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::HandleProtocolConnectionHostEvent( + const MXIMPProtocolConnectionHost& aHost, + const MXIMPBase& aEvent ) + { + if( &aHost != iConnectionHost ) + { + User::Panic(_L("Protocol"), -42 ); + } + + + if( aEvent.GetInterfaceId() == MXIMPProtocolRequestCompleteEvent::KInterfaceId ) + { + const MXIMPProtocolRequestCompleteEvent* eventIf = + TXIMPGetInterface< const MXIMPProtocolRequestCompleteEvent >::From( aEvent, + MXIMPBase::EPanicIfUnknown ); + RDebug::Print( _L(" T_XIMPTestConnection: received ProtocolRequestCompleteEvent with result [%d]"), + eventIf->ResultCode() ); + } + } + + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::OpenSessionL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::OpenSessionL( const MXIMPContextClientInfo& aClientCtxInfo, + TXIMPRequestId aReqId ) + { + iConnectionHost->RegisterObserverL( *this ); + + ClientWrapper* client = ClientWrapper::NewLC( aClientCtxInfo.ClientId().Identity() ); + + TLinearOrder< T_XIMPTestConnection::ClientWrapper > order( T_XIMPTestConnection::OrderOfClients ); + TInt indexOfClient = iClients.FindInOrder( client, order ); + + if( indexOfClient != KErrNotFound ) + { + User::LeaveIfError( indexOfClient ); + CleanupStack::PopAndDestroy(); //id + client = iClients[ indexOfClient ]; + } + else + { + client->InitializeL( *iConnectionHost ); + iCurrentMessenger = client->iMessenger; + } + + PluginAPIMethodCommonL( aReqId ); + + if( indexOfClient == KErrNotFound ) + { + iClients.InsertInOrderL( client, order ); + CleanupStack::Pop(); //id + } + + + SetBooleanToCurrent( EXIMPPlgTestOpenSessionCalled ); + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::OpenSessionL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::OpenSessionL( + const TInt& aSettingsId, + TXIMPRequestId aReqId ) + + { + iConnectionHost->RegisterObserverL( *this ); + + ClientWrapper* client = ClientWrapper::NewLC( _L("0") ); + + TLinearOrder< T_XIMPTestConnection::ClientWrapper > order( T_XIMPTestConnection::OrderOfClients ); + TInt indexOfClient = iClients.FindInOrder( client, order ); + + if( indexOfClient != KErrNotFound ) + { + User::LeaveIfError( indexOfClient ); + CleanupStack::PopAndDestroy(); //id + client = iClients[ indexOfClient ]; + } + else + { + client->InitializeL( *iConnectionHost ); + iCurrentMessenger = client->iMessenger; + } + + PluginAPIMethodCommonL( aReqId ); + + if( indexOfClient == KErrNotFound ) + { + iClients.InsertInOrderL( client, order ); + CleanupStack::Pop(); //id + } + + + SetBooleanToCurrent( EXIMPPlgTestOpenSessionCalled ); + iWaitter->WaitForL( KWaitTime ); + } + + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::CloseSession() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::CloseSession( const MXIMPContextClientInfo& aClientCtxInfo, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + iClientToBeDeleted = NULL; + TInt count = iClients.Count(); + TBool found(EFalse); + for( TInt a = 0; a < count && !iClientToBeDeleted; ++a ) + { + if( aClientCtxInfo.ClientId().Identity().Compare( iClients[ a ]->iId ) == 0 ) + { + iClientToBeDeleted = iClients[ a ]; + iClients.Remove( a ); + found = ETrue; + } + } + + SetBooleanToCurrent( EXIMPPlgTestCloseSessionCalled ); + + if(found) + iWaitter->WaitForL( KWaitTime ); + else + { + MXIMPStatus* status = iConnectionHost->ObjectFactory().NewStatusLC(); + CleanupStack::Pop(); // status. + status->SetResultCode(KErrNone); + iConnectionHost->HandleRequestCompleted( aReqId, status); + } + + + + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::GetSupportedFeaturesL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::GetSupportedFeaturesL( CDesC8Array& aFeatures ) const + { + if ( ! iClients.Count() ) + { + User::LeaveIfError( KErrNotReady ); + } + + // first empty the whole array + aFeatures.Reset(); + + // then add two features there: 1 supported by XIMP, 1 not + aFeatures.AppendL( _L8("feat/pres/pub") ); + aFeatures.AppendL( _L8("feat/worlddomination") ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoSubscribeOwnPresenceL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribeOwnPresenceL( const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestSubscribeOwnPresenceCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUpdateOwnPresenceSubscriptionL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUpdateOwnPresenceSubscriptionPifL( const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUpdateOwnSubscriptionCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoSubscribePresenceWatcherListL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribePresenceWatcherListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestSubscribePresenceWatcherListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoUnsubscribePresenceWatcherListL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribePresenceWatcherListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUnsubscribePresenceWatcherListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoSubscribePresentityGroupListL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribePresentityGroupListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestSubscribeGroupListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUnsubscribePresentityGroupListL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribePresentityGroupListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUnsubscribeGroupListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PublishPresenceL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoPublishOwnPresenceL( + const MPresenceInfo& aPresence, + TXIMPRequestId aReqId ) + { + // With SetupLeave we leave here + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestPublishPresenceCalled ); + + MProtocolPresenceDataHost& presHost = iConnectionHost->ProtocolPresenceDataHost(); + // Set own presence data in data cache + MPresenceInfo* presence = presHost.PresenceObjectFactory().NewPresenceInfoLC(); + TXIMPRequestId reqid = presHost.PublishingDataHost().HandleSubscribedOwnPresenceL( presence ); + CleanupStack::Pop(); //presence + + + if(iCurrentMessenger->GetError()==KErrTimedOut) + { + MXIMPStatus* status1 = iConnectionHost->ObjectFactory().NewStatusLC(); + iConnectionHost->HandleConnectionTerminated(status1); + + CleanupStack::PopAndDestroy(1); + } + + iWaitter->WaitForL( KWaitTime ); + + // TODO when implemented, write the data received for test case verification + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUnsubscribeOwnPresenceL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribeOwnPresenceL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUnsubscribeOwnPresenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoCreatePresentityGroupL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoCreatePresentityGroupL( const MXIMPIdentity& aIdentity, + const TDesC16& aDisplayName, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestCreatePresentityGroupCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoCreatePresentityGroupL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoDeletePresentityGroupL( const MXIMPIdentity& aIdentity, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestDeletePresentityGroupCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoCreatePresentityGroupL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUpdatePresentityGroupDisplayNameL( const MXIMPIdentity& aIdentity, + const TDesC16& aDisplayName, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUpdatePresentityGroupDisplayNameCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoSubscribePresentityPresenceL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribePresentityPresenceL( + const MXIMPIdentity& aIdentity, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestSubscribePresentityPresesenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUpdatePresentityPresenceSubscriptionL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUpdatePresentityPresenceSubscriptionPifL( + const MXIMPIdentity& aIdentity, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUpdatePresentityPresesenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUnsubscribePresentityPresenceL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribePresentityPresenceL( + const MXIMPIdentity& aIdentity, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUnsubscribePresentityPresesenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoSubscribePresentityGroupMembersPresenceL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribePresentityGroupMembersPresenceL( + const MXIMPIdentity& aIdentity, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestSubscribePresentityGroupMembersPresesenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUpdatePresentityPresenceSubscriptionL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUpdatePresentityGroupMembersPresenceSubscriptionPifL( + const MXIMPIdentity& aIdentity, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUpdatePresentityGroupMembersPresesenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::DoUnsubscribePresentityPresenceL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribePresentityGroupMembersPresenceL( + const MXIMPIdentity& aIdentity, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUnsubscribePresentityGroupMembersPresesenceCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + + + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoSubscribePresentityGroupContentL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribePresentityGroupContentL( + const MXIMPIdentity& aGroupId, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestSubscribePresentityGroupContentCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoUnsubscribePresentityGroupContentL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribePresentityGroupContentL( + const MXIMPIdentity& aGroupId, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUnsubscribePresentityGroupContentCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + + } + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoAddPresentityGroupMemberL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoAddPresentityGroupMemberL( + const MXIMPIdentity& aGroupId, + const MXIMPIdentity& aMemberId, + const TDesC16& aMemberDisplayName, + TXIMPRequestId aReqId ) + { + /* + //Req complete parameter template + { + MXIMPRestrictedObjectCollection* collection = + iConnectionHost->ObjectFactory().NewRestrictedObjectCollectionLC(); + + MXIMPIdentity* identityClone = iConnectionHost->ObjectFactory().NewIdentityLC(); + identityClone->SetIdentityL( aMemberId.Identity() ); + + MPresentityGroupMemberInfo* grpMember = + iConnectionHost->ObjectFactory().NewPresentityGroupMemberInfoLC( *identityClone, + _L("AlteredDisplayname") ); + CleanupStack::Pop(); //grpMember + CleanupStack::PopAndDestroy(); //identityClone + + CleanupDeletePushL( grpMember ); + collection->AddOrReplaceTypeL( grpMember ); + CleanupStack::Pop(); //grpMember + + delete iReqCompleteParams; + iReqCompleteParams = NULL; + iReqCompleteParams = collection; + + CleanupStack::Pop(); //collection + } + */ + + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestAddPresentityGroupMemberCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoRemovePresentityGroupMemberL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoRemovePresentityGroupMemberL( + const MXIMPIdentity& aGroupId, + const MXIMPIdentity& aMemberId, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestRemovePresentityGroupMemberCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoUpdatePresentityGroupMemberDisplayNameL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUpdatePresentityGroupMemberDisplayNameL( + const MXIMPIdentity& aGroupId, + const MXIMPIdentity& aMemberId, + const TDesC16& aMemberDisplayName, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + // prepare the message for test code + SetBooleanToCurrent( EXIMPPlgTestUpdatePresentityGroupMemberDisplayNameCalled ); + // TODO when implemented, read the data given by test case and + // generate the required events + iWaitter->WaitForL( KWaitTime ); + } + + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoSubscribePresenceGrantRequestListL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoSubscribePresenceGrantRequestListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestSubscribePresenceGrantRequestListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + +// --------------------------------------------------------------------------- +// From MPscPlugin class. +// T_XIMPTestConnection::DoUnsubscribePresenceGrantRequestListL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::DoUnsubscribePresenceGrantRequestListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUnsubscribePresenceGrantRequestListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + } + + +void T_XIMPTestConnection::DoGrantPresenceForPresentityL( const MXIMPIdentity& aIdentity, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestGrantPresenceForPresentityCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } +void T_XIMPTestConnection::DoGrantPresenceForPresentityGroupMembersL( const MXIMPIdentity& aGroupId, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestGrantPresenceForPresentityGroupMembersCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoGrantPresenceForEveryoneL( const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestGrantPresenceForEveryoneCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + + +void T_XIMPTestConnection::DoUpdatePresenceGrantPifForPresentityL( const MXIMPIdentity& aIdentity, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUpdateGrantPresenceForPresentityCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoUpdatePresenceGrantPifForPresentityGroupMembersL( const MXIMPIdentity& aGroupId, + const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUpdateGrantPresenceForPresentityGroupMembersCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoUpdatePresenceGrantPifForEveryoneL( const MPresenceInfoFilter& aPif, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUpdateGrantPresenceForEveryoneCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + + +void T_XIMPTestConnection::DoWithdrawPresenceGrantFromPresentityL( const MXIMPIdentity& aIdentity, TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestWithdrawPresenceFromPresentityCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoWithdrawPresenceGrantFromEveryoneL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestWithdrawPresenceFromEveryoneCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoWithdrawPresenceGrantFromPresentityGroupMembersL( const MXIMPIdentity& aGroupId, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestWithdrawPresenceFromPresentityGroupMembersCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoSubscribePresenceBlockListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestSubscribePresenceBlockListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + +void T_XIMPTestConnection::DoUnsubscribePresenceBlockListL( TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestUnsubscribePresenceBlockListCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } +void T_XIMPTestConnection::DoBlockPresenceForPresentityL( const MXIMPIdentity& aPresentityId, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestBlockPresenceForPresentityCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } +void T_XIMPTestConnection::DoCancelPresenceBlockFromPresentityL( const MXIMPIdentity& aPresentityId, + TXIMPRequestId aReqId ) + { + PluginAPIMethodCommonL( aReqId ); + + SetBooleanToCurrent( EXIMPPlgTestCancelPresenceBlockFromPresentityCalled ); + + // TODO do something, like in PublishPresence + + iWaitter->WaitForL( KWaitTime ); + + } + + + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::PluginAPIMethodCommonL +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::PluginAPIMethodCommonL( TXIMPRequestId& aOpId ) + { + iReqId = aOpId; + + TInt index = CXIMPTestMessenger::GetPluginIndex(); + TInt count = iClients.Count(); + for( TInt a = 0; a < count; ++a ) + { + if( iClients[ a ]->iPluginIndex == index ) + { + iCurrentMessenger = iClients[ a ]->iMessenger; + } + } + iCurrentMessenger->HandleLeaveL(); + // handle other errors here + if ( iCurrentMessenger->GetBoolean( EXIMPTestPlgBehaveInvalidReqId ) ) + { + // arbitrarily mangle the given request id + TXIMPRequestIdBuilder idBuilder; + idBuilder.SetProtocolId( 123 ); + idBuilder.SetSessionId( 456 ); + idBuilder.SetRequestId( 789 ); + //iReqId = TXIMPRequestId( 123, 456, 789 ); + iReqId = idBuilder.BuildRequestId(); + } + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::WaitCompleted() +// --------------------------------------------------------------------------- +// +void T_XIMPTestConnection::WaitCompleted( TInt /* aRetVal */ ) + { + TInt errorCode = iCurrentMessenger->GetError(); + +/* + if ( iSessionLostFailReconnects ) + { + // fail all reconnects + errorCode = KErrTimedOut; + iConnectedClients = 0; + } +*/ + MXIMPStatus* status = iConnectionHost->ObjectFactory().NewStatusLC(); + CleanupStack::Pop(); // status. + status->SetResultCode( errorCode ); + + MXIMPRestrictedObjectCollection* reqCompleteParams = iCurrentMessenger->GetReqCompleteParams(); + + if( reqCompleteParams ) + { + iConnectionHost->HandleRequestCompleted( iReqId, status, reqCompleteParams ); + reqCompleteParams = NULL; + } + else + { + iConnectionHost->HandleRequestCompleted( iReqId, status ); + } + + if ( iSessionLostFailReconnects ) + { + // doing a sequence of failing reconnects + return; + } + + // check if test code wants us to fake session lost + TInt val = iCurrentMessenger->GetValueFor( EXIMPTestPlgSessionLostStrategy ); + + if ( val != EXIMPPrtValSessionLostEmpty ) + { + // yep, fake session lost + + // reset the old value! otherwise timer will restart upon next operation. + iCurrentMessenger->SetValueFor( EXIMPTestPlgSessionLostStrategy, EXIMPPrtValSessionLostEmpty ); + + iSessionLostReconnect = val == EXIMPPrtValSessionLostReconnect; + iSessionLostFailReconnects = val == EXIMPPrtValSessionLostReconnectExhaustAttempts; + + // start another wait (5 sec) with callback. + TInt time = 1000000 * 5; + TCallBack callback( ReconnectSimulator, this ); + iAuxTimer->Start( time, time, callback ); + } + + delete iClientToBeDeleted; + iClientToBeDeleted = NULL; + + } + +// --------------------------------------------------------------------------- +// RECONNECTION SIMULATOR ROUTINES +// --------------------------------------------------------------------------- +// +TInt T_XIMPTestConnection::ReconnectSimulator( TAny* aMyself ) + { +// (static_cast(aMyself))->DoReconnectSimulator(); + return 0; // ignored by CPeriodic + } + +void T_XIMPTestConnection::DoReconnectSimulator() + { +/* TRAPD( err, DoReconnectSimulatorL() ); + if ( err != KErrNone ) + { + // TODO what to do? is this enough to fail testcode + User::Panic( _L("XIMPTestPrt"), 424242 ); + } + */ + } + +void T_XIMPTestConnection::DoReconnectSimulatorL() + { + iAuxTimer->Cancel(); // must stop it from running again +/* + // connection dies. + iConnectedClients = 0; + + if ( iSessionLostReconnect || iSessionLostFailReconnects ) + { + // tell host to try to reconnect + iConnectionHost->HandleConnectionLost( iStatus ); + } + else + { + // tell host to kill connection + iConnectionHost->HandleConnectionTerminated( iStatus ); + } +*/ + } + +void T_XIMPTestConnection::SetBooleanToCurrent( TXIMPTestPropertyKeys aKey ) + { + if( iCurrentMessenger ) + { + iCurrentMessenger->SetBoolean( aKey ); + } + } + +void T_XIMPTestConnection::SetBoolean( TXIMPTestPropertyKeys aKey ) + { + TInt count = iClients.Count(); + for( TInt a = 0; a < count ; ++a ) + { + iClients[ a ]->iMessenger->SetBoolean( aKey ); + } + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::GetInterface() +// --------------------------------------------------------------------------- +// +TAny* T_XIMPTestConnection::GetInterface( + TInt32 aInterfaceId, + TIfGetOps /* aOptions */ ) + { + if ( aInterfaceId == MXIMPProtocolConnection::KInterfaceId ) + { + // caller wants this interface + MXIMPProtocolConnection* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresencePublishing::KInterfaceId ) + { + // caller wants this interface + MProtocolPresencePublishing* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresenceWatching::KInterfaceId ) + { + // caller wants this interface + MProtocolPresenceWatching* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresenceAuthorization::KInterfaceId ) + { + // caller wants this interface + MProtocolPresenceAuthorization* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresentityGroups::KInterfaceId ) + { + // caller wants this interface + MProtocolPresentityGroups* myIf = this; + return myIf; + } + else if( aInterfaceId == T_XIMPTestConnection::KClassId ) + { + return this; + } + else + { + return NULL; + } + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::GetInterface() +// --------------------------------------------------------------------------- +// +const TAny* T_XIMPTestConnection::GetInterface( + TInt32 aInterfaceId, + TIfGetOps /* aOptions */ ) const + { + if ( aInterfaceId == MXIMPProtocolConnection::KInterfaceId ) + { + // caller wants this interface + const MXIMPProtocolConnection* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresencePublishing::KInterfaceId ) + { + // caller wants this interface + const MProtocolPresencePublishing* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresenceWatching::KInterfaceId ) + { + // caller wants this interface + const MProtocolPresenceWatching* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresenceAuthorization::KInterfaceId ) + { + // caller wants this interface + const MProtocolPresenceAuthorization* myIf = this; + return myIf; + } + else if( aInterfaceId == MProtocolPresentityGroups::KInterfaceId ) + { + // caller wants this interface + const MProtocolPresentityGroups* myIf = this; + return myIf; + } + else if( aInterfaceId == T_XIMPTestConnection::KClassId ) + { + return this; + } + else + { + return NULL; + } + } + +// --------------------------------------------------------------------------- +// T_XIMPTestConnection::GetInterfaceId() +// --------------------------------------------------------------------------- +// +TInt32 T_XIMPTestConnection::GetInterfaceId() const + { + return MXIMPProtocolConnection::KInterfaceId; + } + + +// --------------------------------------------------------------------------- +// Key value pair table to identify correct constructor +// function for the requested interface. +// --------------------------------------------------------------------------- +// +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( K_PRFW_TST_PROTOCOL_1_IMPLEMENTATION_UID, + T_XIMPTestProtocol::NewL ) + }; + + +// --------------------------------------------------------------------------- +// Exported function to return the implementation proxy table +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); + return ImplementationTable; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::T_XIMPTestProtocol() +// --------------------------------------------------------------------------- +// +T_XIMPTestProtocol::T_XIMPTestProtocol() + { + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::ConstructL() +// --------------------------------------------------------------------------- +// +void T_XIMPTestProtocol::ConstructL() + { + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::NewLC() +// --------------------------------------------------------------------------- +// +T_XIMPTestProtocol* T_XIMPTestProtocol::NewLC() + { + T_XIMPTestProtocol* self = new( ELeave ) T_XIMPTestProtocol(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::NewL() +// --------------------------------------------------------------------------- +// +T_XIMPTestProtocol* T_XIMPTestProtocol::NewL() + { + T_XIMPTestProtocol* self = T_XIMPTestProtocol::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::~T_XIMPTestProtocol() +// --------------------------------------------------------------------------- +// +T_XIMPTestProtocol::~T_XIMPTestProtocol() + { + iConnections.Close(); + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::PrimeHost() +// --------------------------------------------------------------------------- +// +void T_XIMPTestProtocol::PrimeHost( MXIMPProtocolPluginHost& aHost ) + { + iHost = &aHost; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::AcquireConnectionL() +// --------------------------------------------------------------------------- +// +MXIMPProtocolConnection& T_XIMPTestProtocol::AcquireConnectionL( + const MXIMPServiceInfo& aServiceInfo, + const MXIMPContextClientInfo& aClientCtxInfo ) + { + T_XIMPTestConnection* newConnection = T_XIMPTestConnection::NewLC( aServiceInfo, aClientCtxInfo ); + TLinearOrder< T_XIMPTestConnection > order( T_XIMPTestConnection::OrderOfConnections ); + TInt index = iConnections.FindInOrder( newConnection, order ); + if( index != KErrNotFound ) + { + User::LeaveIfError( index ); + CleanupStack::PopAndDestroy(); // newConnection + newConnection = iConnections[ index ]; + } + else + { + iConnections.InsertInOrderL( newConnection, order ); + CleanupStack::Pop(); //newConnection + } + return *newConnection; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::ReleaseConnection() +// --------------------------------------------------------------------------- +// +void T_XIMPTestProtocol::ReleaseConnection( MXIMPProtocolConnection& aConnection ) + { + TLinearOrder< T_XIMPTestConnection > order( T_XIMPTestConnection::OrderOfConnections ); + T_XIMPTestConnection* connection = ( T_XIMPTestConnection* )( aConnection.GetInterface( + T_XIMPTestConnection::KClassId, + MXIMPBase::EPanicIfUnknown ) ); + TInt index = iConnections.FindInOrder( connection, order ); + if( index >= 0 ) + { + iConnections.Remove( index ); + } + delete connection; + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::GetInterface() +// --------------------------------------------------------------------------- +// +TAny* T_XIMPTestProtocol::GetInterface( + TInt32 aInterfaceId, + TIfGetOps /* aOptions */ ) + { + if ( aInterfaceId == MXIMPProtocolPlugin::KInterfaceId ) + { + // caller wants this interface + MXIMPProtocolPlugin* myIf = this; + return myIf; + } + else + { + return NULL; + } + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::GetInterface() +// --------------------------------------------------------------------------- +// +const TAny* T_XIMPTestProtocol::GetInterface( + TInt32 aInterfaceId, + TIfGetOps /* aOptions */ ) const + { + if ( aInterfaceId == MXIMPProtocolPlugin::KInterfaceId ) + { + // caller wants this interface + const MXIMPProtocolPlugin* myIf = this; + return myIf; + } + else + { + return NULL; + } + } + +// --------------------------------------------------------------------------- +// T_XIMPTestProtocol::GetInterfaceId() +// --------------------------------------------------------------------------- +// +TInt32 T_XIMPTestProtocol::GetInterfaceId() const + { + return MXIMPProtocolPlugin::KInterfaceId; + } + + + +// End of file +