diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/MobilityCoreProviders/inc/mobilitymcpractivities.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/MobilityCoreProviders/inc/mobilitymcpractivities.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,185 @@ +// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Mobility Meta Connection Provider Activities +// +// + +/** + @file + @internalComponent +*/ + + +#ifndef MOBILITYMCPRACTIVITIES_H +#define MOBILITYMCPRACTIVITIES_H + +#include +#include +#include + +enum TMobilityMCprActivities + { + ECFActivityMCprMobility = ESock::ECFActivityCustom + 1, + }; + +namespace MobilityMCprActivities +{ +DECLARE_EXPORT_ACTIVITY_MAP(mobilityMCprActivities) + + +/////////////////////////////////////////////////////////////////////////////// +//CMobilityActivity +class CMobilityActivity : public MeshMachine::CNodeRetryActivity + { +public: + static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode); + +protected: + CMobilityActivity(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode); + virtual ~CMobilityActivity(); + typedef MeshMachine::TNodeContext TContext; + +private: + TBool EvaluatePreference(TContext& aContext); + void SetHandshakingFlag(); + void ClearHandshakingFlag(); + +private: + ESock::RMetaServiceProviderInterface* iCurrent; + ESock::RMetaServiceProviderInterface* iAvailable; + ESock::RMetaServiceProviderInterface* iCandidate; + const TUint iAvailabilityScoreTreshold; + + +public: + + DECLARE_SMELEMENT_HEADER(TAwaitingCurrentCarrierRejectedOrAvailabilityChange, MeshMachine::TState, NetStateMachine::MState, TContext) + virtual TBool Accept(); + DECLARE_SMELEMENT_FOOTER(TAwaitingCurrentCarrierRejectedOrAvailabilityChange) + + DECLARE_SMELEMENT_HEADER(TNoTagOrAwaitMobility, MeshMachine::TStateFork, NetStateMachine::MStateFork, CMobilityActivity::TContext) + virtual TInt TransitionTag(); + DECLARE_SMELEMENT_FOOTER(TNoTagOrAwaitMobility) + + DECLARE_SMELEMENT_HEADER(TNoTagOrReConnectOrStartMobilityHandshakeBackwards, MeshMachine::TStateFork, NetStateMachine::MStateFork, CMobilityActivity::TContext) + virtual TInt TransitionTag(); + DECLARE_SMELEMENT_FOOTER(TNoTagOrReConnectOrStartMobilityHandshakeBackwards) + + DECLARE_SMELEMENT_HEADER(TNoTagOrStartMobilityHandshakeBackwards, MeshMachine::TStateFork, NetStateMachine::MStateFork, CMobilityActivity::TContext) + virtual TInt TransitionTag(); + DECLARE_SMELEMENT_FOOTER(TNoTagOrStartMobilityHandshakeBackwards) + + DECLARE_SMELEMENT_HEADER(TNoTagOrAwaitMobilityBackwardsOnMobilityTrigger, MeshMachine::TStateFork, NetStateMachine::MStateFork, CMobilityActivity::TContext) + virtual TInt TransitionTag(); + DECLARE_SMELEMENT_FOOTER(TNoTagOrAwaitMobilityBackwardsOnMobilityTrigger) + + DECLARE_SMELEMENT_HEADER(TClearHandshakingFlag, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, CMobilityActivity::TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TClearHandshakingFlag) + + DECLARE_SMELEMENT_HEADER(TSendAvailabilityRequest, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, CMobilityActivity::TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TSendAvailabilityRequest) + + DECLARE_SMELEMENT_HEADER(TInformMigrationAvailableAndSetHandshakingFlag, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, CMobilityActivity::TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TInformMigrationAvailableAndSetHandshakingFlag) + + // For the moment it is sufficient to use the re-connect activity, in the future we may want to + // customise the behavior, for example start the new layer before rebinding it, etc. + DECLARE_SMELEMENT_HEADER(TRequestReConnect, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, CMobilityActivity::TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TRequestReConnect) + + DECLARE_SMELEMENT_HEADER(TInformMigrationCompleted, MeshMachine::TStateTransition, NetStateMachine::MStateTransition, CMobilityActivity::TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TInformMigrationCompleted) + + typedef MeshMachine::TActivitiesIdMutex TActivityErrorRecoveryMutex; + DECLARE_SERIALIZABLE_STATE( + TNoTagOrAwaitMobilityBackwardsOnMobilityTriggerBlockedByErrorRecovery, + TActivityErrorRecoveryMutex, + TNoTagOrAwaitMobilityBackwardsOnMobilityTrigger + ) + + DECLARE_SERIALIZABLE_STATE( + TNoTagOrAwaitMobilityBlockedByErrorRecovery, + TActivityErrorRecoveryMutex, + TNoTagOrAwaitMobility + ) + }; + +/////////////////////////////////////////////////////////////////////////////// +//CConnectionRecoveryActivity +class CConnectionRecoveryActivity : public MeshMachine::CNodeRetryActivity + { +public: + static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode); + void ReplyToOriginators(Messages::TEErrorRecovery::TErrorRecoveryResponse& aCFMessageSig); + +protected: + CConnectionRecoveryActivity(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode); + +public: + Messages::TErrContext iOriginalErrContext; //Error context on which this activity started + +protected: + typedef MeshMachine::TNodeContext TContext; + +public: + DECLARE_SMELEMENT_HEADER(TAwaitingReConnectComplete, MeshMachine::TState, NetStateMachine::MState, TContext) + virtual TBool Accept(); + DECLARE_SMELEMENT_FOOTER(TAwaitingReConnectComplete) + + class TTransitionBase : public MeshMachine::TStateTransition + { + public: + TTransitionBase(TContext& aContext) + : MeshMachine::TStateTransition(aContext) + { + } + + virtual void Error(TInt aError); + }; + + DECLARE_SMELEMENT_HEADER(TStoreErrorContext, CConnectionRecoveryActivity::TTransitionBase, NetStateMachine::MStateTransition, TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TStoreErrorContext) + + DECLARE_SMELEMENT_HEADER(TProcessConnectionStartRecoveryRequest, CConnectionRecoveryActivity::TTransitionBase, NetStateMachine::MStateTransition, TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TProcessConnectionStartRecoveryRequest) + + DECLARE_SMELEMENT_HEADER(TProcessConnectionGoneDownRecoveryRequest, CConnectionRecoveryActivity::TTransitionBase, NetStateMachine::MStateTransition, TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TProcessConnectionGoneDownRecoveryRequest) + + DECLARE_SMELEMENT_HEADER(TSendRetryRecoveryResponse, CConnectionRecoveryActivity::TTransitionBase, NetStateMachine::MStateTransition, TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TSendRetryRecoveryResponse) + + DECLARE_SMELEMENT_HEADER(TSendPropagateRecoveryResponse, CConnectionRecoveryActivity::TTransitionBase, NetStateMachine::MStateTransition, TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TSendPropagateRecoveryResponse) + + DECLARE_SMELEMENT_HEADER(TSendIgnoreRecoveryResponse, CConnectionRecoveryActivity::TTransitionBase, NetStateMachine::MStateTransition, TContext) + virtual void DoL(); + DECLARE_SMELEMENT_FOOTER(TSendIgnoreRecoveryResponse) + }; + +} // namespace MobilityMCprActivities + +#endif // MOBILITYMCPRACTIVITIES_H +