--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/OperationStepSrc/CCnUiConnOpener.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,406 @@
+/*
+* Copyright (c) 2004 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: Connection opener.
+*
+*/
+
+#ifndef __CCNUICONNOPENER_H
+#define __CCNUICONNOPENER_H
+
+// INCLUDES
+#include <E32base.h>
+#include <impspresenceconnectionuiconstsng.h>
+#include <MPEngNWSessionOperationObserver2.h>
+
+
+//DATA TYPES
+
+/**
+ * Connection closer state enumerations.
+ * These state id's are reported to
+ * given MCnUiOpProgressStateObserver
+ * operation progress observer
+ *
+ * NOTE!! The states ECnOpener_ClosingOwnedSAPConnection &
+ * ECnOpenerClosingInterferingSAPConnection
+ * perform real network operations, but canceling
+ * those isn't supported.
+ */
+enum TCnUiConnOpenerState
+ {
+ ECnOpenerIdle = 0, ///<Idle state, no operation running
+ ECnOpenerOpeningSAPConnection = 1, ///<Waiting the SAP connection to open
+ ECnOpenerProcessingPlugin = 2, ///<Waiting client plug-in processing
+ ECnOpenerClosingOwnedSAPConnection = 3, ///<Waiting the SAP connection to close
+ ECnOpenerClosingInterferingSAPConnection = 4 ///<Waiting the SAP connection to close
+ };
+
+
+
+//FORWARD DECLARATION
+class CIMPSSAPSettings;
+class MCnUiConnectionHandler;
+class MCnUiClientPlugin;
+class MCnUiOpProgressStateObserver;
+class CPEngNWSessionSlotID2;
+class MPEngTransactionStatus2;
+
+// CLASS DECLARATION
+
+/**
+ * Connection opener.
+ * @since 2.1
+ */
+NONSHARABLE_CLASS( CCnUiConnOpener ) : protected CActive,
+ public MPEngNWSessionOperationObserver2
+ {
+private: //helper class
+
+ /**
+ * Private helper class to manager
+ * state information and notify state
+ * observer.
+ * @since 2.1
+ */
+ class TOpenerStateProxy
+ {
+ public: //new methods
+ /**
+ * C++ default constructor.
+ * @param aInitial The initial state.
+ */
+ TOpenerStateProxy( TCnUiConnOpenerState aInitial );
+
+ /**
+ * Sets new state observer. Observer may be NULL.
+ * @since 2.1
+ * @param aObs The observer to set and notify further
+ * state changes.
+ */
+ void SetProgressObserver( MCnUiOpProgressStateObserver* aObs );
+
+ /**
+ * Sets new state and notifies registered observer if any..
+ * @since 2.1
+ * @param aNewState The new state.
+ * @param aClient The client for which the state was entered
+ */
+ void Set( TCnUiConnOpenerState aNewState, TIMPSConnectionClient aClient );
+
+ /**
+ * Gets current state.
+ * @since 2.1
+ * @return The current state.
+ */
+ TCnUiConnOpenerState operator()();
+
+
+ private: //data
+
+ ///<Current state, owned
+ TCnUiConnOpenerState iState ;
+
+ ///<Observer, not owned, may be NULL
+ MCnUiOpProgressStateObserver* iObs;
+ };
+
+
+public: // Two-phased constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCnUiConnOpener* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCnUiConnOpener();
+
+
+private:
+
+ /**
+ * C++ default constructor.
+ */
+ CCnUiConnOpener();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+
+public: // New functions
+
+ /**
+ * Login service.
+ *
+ * @since 2.1
+ * @param aClient The client to login.
+ * @param aSap The SAP to login.
+ * @param aPlugin The client plug-in to use in login processing.
+ * @param aConnHandler The connection handler to use in login
+ * @param aProgressObserver The possible progress observer,
+ * may be NULL.
+ * @return Operation status. This can be either local
+ * error code coming from starting the operation
+ * or real network error code.
+ */
+ TInt MakeLoginForClient( TIMPSConnectionClient aClient,
+ const CIMPSSAPSettings& aSap,
+ MCnUiClientPlugin& aPlugin,
+ MCnUiConnectionHandler& aConnHandler,
+ MCnUiOpProgressStateObserver* aProgressObserver,
+ CPEngNWSessionSlotID2& aNWSessionSlotID );
+
+
+ /**
+ * Cancels the login.
+ *
+ * @since 2.1
+ */
+ void CancelLogin();
+
+public: // Methods from MPEngNWSessionOperationObserver2
+
+ /**
+ * From MPEngNWSessionOperationObserver2.
+ * See it for details.
+ *
+ * @since 3.0
+ */
+ void HandleNWSessionOperationCompleteL(
+ MPEngTransactionStatus2& aStatus,
+ CPEngNWSessionSlot2& aNWSessionSlot,
+ TInt aNWSessionSlotOperation );
+
+ /**
+ * From MPEngNWSessionOperationObserver2.
+ * See it for details.
+ *
+ * @since 3.0
+ */
+ void HandleNWSessionOperationNotifyError(
+ TInt aError,
+ CPEngNWSessionSlot2& aNWSessionSlot,
+ TInt aNWSessionSlotOperation );
+
+public: // methods from CActive
+ /**
+ * From CActive.
+ * @see CActive
+ */
+ void RunL();
+
+ /**
+ * From CActive.
+ * @see CActive
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ * @see CActive
+ */
+ TInt RunError( TInt aError );
+
+ /**
+ * From CActive.
+ * @since S60 v3.0
+ * @see CActive
+ */
+ void Cancel();
+
+ /**
+ * From CActive.
+ * @since S60 v3.0
+ * @see CActive
+ */
+ TBool IsActive() const;
+
+ /**
+ * Verifies SAP compulsory contents.
+ *
+ * @since 2.1
+ * @param aSap The SAP to check
+ * @return KErrNone if has required compulsory settings,
+ * else KConnUiErrorSapMissingCompulsoryFields.
+ */
+ static TInt CheckConnOpenCompulsorySettingsL( const CIMPSSAPSettings& aSap );
+
+private: // New private helper methods
+
+ /**
+ * Waits the started asynchronous steps
+ * to complete using the CActiveSchedulerWait.
+ * @param aWaiter which CActiveSchedulerWait to start
+ *
+ * @since 2.1
+ */
+ void WaitCompletion( CActiveSchedulerWait& aWaiter );
+
+
+ /**
+ * Stops the previously started
+ * CActiveSchedulerWait wait loop.
+ * @param aWaiter which CActiveSchedulerWait to stop
+ *
+ * @since 2.1
+ */
+ void Completed( CActiveSchedulerWait& aWaiter );
+
+
+ /**
+ * Starts the SAP login if needed.
+ *
+ * @since 2.1
+ * @param aCloseOfInterferingConnectionAllowed If ETrue then
+ * possibly existing interfering SAP connection is tried to
+ * close. If EFalse, then it isn't.
+ */
+ void HandleSapConnectionOpenRequestL( TBool aCloseOfInterferingConnectionAllowed );
+
+
+ /**
+ * Issues the real asynhronous SAP
+ * connection open.
+ *
+ * @since 2.1
+ */
+ void IssueConnectionOpenL();
+
+
+ /**
+ * Handles SAP connection succesfully
+ * opened case. Checks has the SAP enough
+ * capabilites for current client etc.
+ *
+ * @since 2.1
+ */
+ void HandleSapConnectionOpenedL();
+
+
+ /**
+ * Issues the client post login processing.
+ *
+ * @since 2.1
+ */
+ void IssuePluginPostLoginProcessingL();
+
+
+ /**
+ * Closes the owned NW connection and sets client logged out
+ * @since 2.1
+ */
+ void UndoConnectionStateChanges();
+
+
+ /**
+ * Issues the connection close.
+ *
+ * Connection close is needed when the
+ * SAP doesn't have enough capabilities
+ * for client or the login is canceled
+ * after the network connection is
+ * succesfully opened.
+ *
+ * @since 2.1
+ */
+ void IssueSapConnectionCloseIfNeededL();
+
+
+ /**
+ * Issues the close of interfering SAP connection.
+ *
+ * Interfering SAP connection is silently closed
+ * when there is noticed to be a open SAP
+ * connection but no known client is
+ * logged in.
+ *
+ * @since 2.1
+ */
+ void IssueCloseOfInterferingSapConnectionL();
+
+
+ /**
+ * Resets previously cached operation
+ * parameters.
+ * @since 2.1
+ */
+ void ResetCachedParameters();
+
+
+ /**
+ * Resets internal state flags.
+ *
+ * @since 2.1
+ */
+ void ResetStateFlags();
+
+ /**
+ * Handles operation completions
+ *
+ * @since 3.0
+ */
+ void HandleOperationCompletionsL();
+
+ /**
+ * Creates a network session slot copy
+ *
+ * @since 3.0
+ */
+ CPEngNWSessionSlotID2* CopyNWSessionSlotL( CPEngNWSessionSlotID2& aSessionSlot );
+
+
+private: // Data
+
+ ///< The internal state proxy, owned
+ TOpenerStateProxy iState;
+
+ ///<Active Scheduler Wait, owned
+ CActiveSchedulerWait iOpenWait;
+
+ ///<Active Scheduler Wait, for PEC waiting, owned
+ CActiveSchedulerWait iCancelWaiter;
+
+ ///<State flag. Did this operation open the SAP connection, owned
+ TBool iOwnsSapConnection;
+
+ ///<State flag. Was this operation canceled, owned
+ TBool iCanceled;
+
+ ///<Cached operation resource, not owned
+ MCnUiConnectionHandler* iConnHandler;
+
+ ///<Cached operation resource, not owned
+ MCnUiClientPlugin* iPlugin;
+
+ ///<Cached operation resource, not owned
+ const CIMPSSAPSettings* iSap;
+
+ ///<Cached operation resource, owned
+ TIMPSConnectionClient iClient;
+
+ MPEngTransactionStatus2* iTransactionStatus;
+ TInt iStatusInt;
+
+ // owns: network session slot id
+ CPEngNWSessionSlotID2* iNWSessionSlotID;
+
+ };
+
+#endif // __CCNUICONNOPENER_H
+
+// End of File