bearermanagement/S60MCPR/inc/s60mcprstates.h
changeset 0 5a93021fdf25
child 2 086aae6fc07e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bearermanagement/S60MCPR/inc/s60mcprstates.h	Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2008-2009 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: S60 MCPR's states
+*
+*/
+
+
+/**
+@file s60mcprstates.h
+S60 MCPR's states.
+*/
+
+#ifndef S60MCPRSTATES_H
+#define S60MCPRSTATES_H
+
+#include <comms-infras/mobilitymcprstates.h>
+#include <comms-infras/ss_nodemessages_legacy.h>
+#include <elements/nm_messages_errorrecovery.h>
+
+#include "s60mcpr.h"
+#include "s60mpmrequests.h"
+
+/**
+ * S60McprState namespace packages all S60 specific state, forks and 
+ * transitions which can be utilized from all S60MCPR activities.
+ */
+namespace S60MCprStates
+    {
+    /**
+     * Network Meta Connection Provider Transition Ids 11000..20000
+     */
+    //const TInt KAwaitAvailabilityNotification = 11000;
+    //const TInt KProcessAvailabilityNotification = 11001;
+    // Transition IDs for ChooseBestIAP
+    const TInt KReselectBestIAPNeeded = 11002;
+    const TInt KChooseBestIAPRequired = 11003;
+    // Transition IDs for ErrorRecoveryRequest
+    const TInt KIgnoreError = 11020;
+    const TInt KRetryConnection = 11021; 
+    const TInt KSetChosenApActive = 11022;
+    const TInt KProcessError = 11023;
+    // Mobility transition ids.
+    const TInt KApplicationRejectedMigration = 11050;
+    const TInt KWaitPolicyServerResponse = 11051;
+    const TInt KInformMigrationAvailable = 11052;
+    const TInt KSendInitialApplicationReject = 11053; 
+    /**
+     * Execution context
+     */
+    typedef MeshMachine::TNodeContext<CS60MetaConnectionProvider, MobilityMCprStates::TContext> TContext;
+    /**
+     * Status change information.
+     * TRANSITION/ACTION: Sends IAP status notification to MPM.
+     * 
+     * Actually the notification is not directly IAP related but without any other
+     * information we must try to interpret the IPCPR status messages. 
+     */
+    DECLARE_SMELEMENT_HEADER( THandleMPMStatusChange, 
+                              MeshMachine::TStateTransition<TContext>, 
+                              NetStateMachine::MStateTransition, 
+                              TContext )
+    void DoL();
+    DECLARE_SMELEMENT_FOOTER( THandleMPMStatusChange )
+    /**
+     * Combined transition that handles the MPM interaction and core functionality. 
+     */
+    DECLARE_AGGREGATED_TRANSITION3( THandleMPMAndCoreDataClientStatusChangeAndDestroyOrphans,
+                                    S60MCprStates::THandleMPMStatusChange,
+                                    PRStates::THandleDataClientStatusChange,
+                                    PRStates::TDestroyOrphanedDataClients )
+
+    /**
+     * Generic ReselectBestIAP state that can be used before JustInTimeSelection.
+     * TRANSITION/ACTION: Sends Reselect IAP request to Policy Server.
+     */
+    DECLARE_SMELEMENT_HEADER( TReselectBestIAP, 
+                              MeshMachine::TStateTransition<TContext>, 
+                              NetStateMachine::MStateTransition, 
+                              TContext )
+    virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TReselectBestIAP )
+
+    /**
+     * TRANSITION/ACTION: Starts ReConnect -activity
+     * Checks the IPProto MCPR tree below and picks the current one
+     * and the active one and makes a reconnect request for them.
+     */
+    DECLARE_SMELEMENT_HEADER( TRequestReConnect, 
+                              MeshMachine::TStateTransition<TContext>, 
+                              NetStateMachine::MStateTransition, 
+                              TContext )
+    virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TRequestReConnect )
+
+    /**
+     * TRANSITION/ACTION: Requests Policy Server to process the error.
+     * The error is taken from the error context or activity error in that order.
+     */
+    DECLARE_SMELEMENT_HEADER( TProcessError, 
+                              MeshMachine::TStateTransition<TContext>, 
+                              NetStateMachine::MStateTransition,
+                              TContext )
+    virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TProcessError )
+    
+    /**
+     * STATE: Waits for valid select or error message.
+     * @return ETrue if message is accepted or error is observed.
+     */
+    DECLARE_SMELEMENT_HEADER( TAwaitingSelectNextLayerCompletedOrError, 
+                              MeshMachine::TState<TContext>, 
+                              NetStateMachine::MState, 
+                              TContext )
+    virtual TBool Accept();
+    DECLARE_SMELEMENT_FOOTER( TAwaitingSelectNextLayerCompletedOrError )
+    
+    /**
+     * STATE: Waits for valid select or error message.
+     * @return ETrue if message is accepted or error is observed.
+     */
+    DECLARE_SMELEMENT_HEADER( TAwaitingReselectBestIAPCompleteOrError, 
+                              MeshMachine::TState<TContext>, 
+                              NetStateMachine::MState, 
+                              TContext )
+    virtual TBool Accept();
+    DECLARE_SMELEMENT_FOOTER( TAwaitingReselectBestIAPCompleteOrError )
+    
+    /**
+     * STATE: Waits for PolicyServer response for the process error request.
+     * @return ETrue if message is accepted.
+     */
+    DECLARE_SMELEMENT_HEADER( TAwaitingProcessErrorCompleteOrError, 
+                              MeshMachine::TState<TContext>, 
+                              NetStateMachine::MState, 
+                              TContext)
+    virtual TBool Accept();
+    DECLARE_SMELEMENT_FOOTER( TAwaitingProcessErrorCompleteOrError )
+    
+    /**
+     * STATE: Waits for ServiceId request. 
+     * @return ETrue if message is accepted. 
+     */
+    DECLARE_SMELEMENT_HEADER( TAwaitingServiceIdRequest, 
+                              MeshMachine::TState<TContext>, 
+                              NetStateMachine::MState, 
+                              TContext )
+    virtual TBool Accept();
+    DECLARE_SMELEMENT_FOOTER( TAwaitingServiceIdRequest )
+
+    /**
+     * TRANSITION/ACTION: Retrieve ServiceId.
+     */
+    DECLARE_SMELEMENT_HEADER( TRetrieveServiceId, 
+                              MeshMachine::TStateTransition<TContext>, 
+                              NetStateMachine::MStateTransition, 
+                              TContext )
+    virtual void DoL();
+    DECLARE_SMELEMENT_FOOTER( TRetrieveServiceId )
+
+    class CS60ErrorRecoveryActivity : public MeshMachine::CNodeRetryActivity
+        {
+        public:
+            CS60ErrorRecoveryActivity( const MeshMachine::TNodeActivity& aActivitySig, 
+                                       MeshMachine::AMMNodeBase& aNode )
+                :   MeshMachine::CNodeRetryActivity( aActivitySig, aNode )
+                {}
+            /**
+             * Error context on which this activity started
+             */
+            Messages::TErrContext iOriginalErrContext;
+        };
+    
+    /**
+     * CReselectBestIAPCb is a callback class that receives the policy server response
+     * and converts PolicyResponse -event into meshmachine compatible message. 
+     * 
+     * PolicyServer wrapper API takes pointer of the class implementing the 
+     * MMPMPolicyRequestsUser -interface. The ownership is passed to the wrapper API
+     * because the answer may be delayed and live longer than the execution context 
+     * of the MCPR.
+     */
+    class CReselectBestIAPCb : public CBase, public MMPMPolicyRequestsUser
+        {
+        public:
+            /**
+             * C++ constructor.
+             * 
+             * @param aNode reference to S60 MCPR running the Activity.
+             * @param aActivity pointer to the Activity that requests for PolicyResponse. 
+             */
+            CReselectBestIAPCb( CS60MetaConnectionProvider& aNode, 
+                                MeshMachine::CNodeActivityBase* aActivity )
+                :   iNode(aNode) 
+                { 
+                iLastRequestOriginator.Open( aNode.SelfInterface(),
+                                             Messages::TNodeCtxId( aActivity->ActivityId(), 
+                                                                   aNode.Id() ));
+                }
+            /**
+             * Called when Policy Server responds to the request.
+             * @param aCompletedRequest contains reference to answer from Policy Server.
+             */
+            virtual void PolicyResponse( PolicyRequest& aCompletedRequest );
+            /**
+             * Interface function that calls CBase-destructor
+             */
+            virtual void Delete() { delete this; }
+        protected:
+            /**
+             * C++ destructor
+             */
+            virtual ~CReselectBestIAPCb() {}
+        private:
+            /**
+             * Valid reference to CS60MetaConnectionProvider
+             */ 
+            CS60MetaConnectionProvider& iNode;
+            /**
+             * Valid reference to request originator.
+             */ 
+            Messages::RRequestOriginator iLastRequestOriginator;
+        };
+    
+    /**
+     * CProcessErrorCb is a callback class that receives the policy server response
+     * and converts PolicyResponse -event into meshmachine compatible message. 
+     * 
+     * PolicyServer wrapper API takes pointer of the class implementing the 
+     * MMPMPolicyRequestsUser -interface. The ownership is passed to the wrapper API
+     * because the answer may be delayed and live longer than the execution context 
+     * of the MCPR.
+     */
+    class CProcessErrorCb
+        :   public CBase, 
+            public MMPMPolicyRequestsUser
+        {
+        public:
+            /**
+             * C++ constructor.
+             * 
+             * @param aNode reference to S60 MCPR running the Activity.
+             * @param aActivity pointer to the Activity that requests for PolicyResponse. 
+             */
+            CProcessErrorCb( CS60MetaConnectionProvider& aNode, 
+                             MeshMachine::CNodeActivityBase* aActivity )
+                :   iNode(aNode) 
+                { 
+                iLastRequestOriginator.Open( aNode.SelfInterface(), 
+                                             Messages::TNodeCtxId( aActivity->ActivityId(), 
+                                                                   aNode.Id() ));
+                }
+            /**
+             * Called when Policy Server responds to the request.
+             * @param aCompletedRequest contains reference to answer from Policy Server.
+             */
+            virtual void PolicyResponse( PolicyRequest& aCompletedRequest );
+            /**
+             * Interface function that calls CBase-destructor
+             */
+            virtual void Delete() { delete this; }
+        protected:
+            /**
+             * C++ destructor
+             */
+            virtual ~CProcessErrorCb() {}
+        private:
+            /**
+             * Valid reference to CS60MetaConnectionProvider
+             */ 
+            CS60MetaConnectionProvider& iNode;
+            /**
+             * Valid reference to request originator.
+             */ 
+            Messages::RRequestOriginator iLastRequestOriginator;
+        };
+
+    } // namespace S60MCprStates
+
+#endif //S60MCPRSTATES_H
+