--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoconnutility/connutility/inc/vcxconnutilimpl.h Wed Sep 01 12:20:37 2010 +0100
@@ -0,0 +1,373 @@
+/*
+* 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 the License "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 Class to handle connection creation.*
+*/
+
+
+
+
+#ifndef __VCX_CONNUTILIMPL_H_
+#define __VCX_CONNUTILIMPL_H_
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+
+#include <agentdialog.h>
+
+#include "vcxconnutilpubsubobserver.h"
+#include "vcxconnutilextengineobserver.h"
+
+// FORWARD DECLARATIONS
+class CRepository;
+class CVcxConnUtilEngine;
+class CVcxConnUtilPubSub;
+class CVcxConnectionUtility;
+class CVcxConnUtilWaitSch;
+
+
+// CLASS DECLARATION
+
+/**
+* This class defines operations for handling the networking notifications
+* from the engine class, notifications from the PS and provides a functionality
+* for those.
+*
+*/
+NONSHARABLE_CLASS( CVcxConnUtilImpl) : public CBase,
+ public MConnUtilPubsubObserver,
+ public MConnUtilExtEngineObserver
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Construction.
+ *
+ * @param CVcxConnectionUtility* pointer to main interface class for
+ * for showing dialogs
+ * @return The newly constructed CVcxConnUtilEngine
+ */
+ static CVcxConnUtilImpl* NewL( CVcxConnectionUtility* aUiInterface );
+
+ /**
+ * Construction. Object left to cleanupstack
+ *
+ * @param CVcxConnectionUtility* pointer to main interface class for
+ * for showing dialogs
+ * @return The newly constructed CVcxConnUtilEngine
+ */
+ static CVcxConnUtilImpl* NewLC( CVcxConnectionUtility* aUiInterface );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CVcxConnUtilImpl();
+
+ private:
+
+ /**
+ * constructor.
+ *
+ * @param CVcxConnectionUtility* pointer to main interface class for
+ * for showing dialogs
+ */
+ CVcxConnUtilImpl( CVcxConnectionUtility* aUiInterface );
+
+ /**
+ * default constructor definition.
+ *
+ */
+ CVcxConnUtilImpl( );
+
+ /**
+ * Private 2nd phase construction.
+ */
+ void ConstructL();
+
+ public: // New functions
+
+
+ /**
+ * Returns open IAP, If connection is not opened it will be created
+ *
+ * @param aIapId On return, IAP ID.
+ * @param aSilent If ETrue, tries to open connection silently (without dialogs)
+ *
+ * @return KErrNone or one of the system wide error codes.
+ */
+ TInt GetIap( TUint32& aIapId, TBool aSilent );
+
+ /**
+ * Closes open connection.
+ */
+ void DisconnectL();
+
+ /**
+ * Registers observer
+ *
+ * @param MConnUtilEngineObserver
+ */
+ void RegisterObserverL( MConnUtilEngineObserver* aObserver );
+
+ /**
+ * Removes observer from the array of observers
+ *
+ * @param MConnUtilEngineObserver
+ */
+ void RemoveObserver( MConnUtilEngineObserver* aObserver );
+
+ /**
+ * Returns current connection status
+ *
+ * @return TVCxConnectionStatus
+ */
+ TVCxConnectionStatus EngineConnectionStatus();
+
+ /**
+ * Gets WAP id from IAP id. Leaves with KErrNotFound if no record with given
+ * IAP id is found.
+ *
+ * @return WAP id matching the given IAP id.
+ */
+ TUint32 WapIdFromIapIdL( TUint32 aIapId );
+
+ private: // from MConUtilPubsubObserver
+
+ /**
+ * Notification about pubsub key (integer) value change
+ *
+ * @param aKey PS key informing the change
+ * @param aValue a new value
+ */
+ void ValueChangedL(const TUint32& aKey, const TInt& aValue);
+
+ private: // from MConnUtilExtEngineObserver
+
+ /**
+ * Engine has gotten mobility event about preferred IAP. Utility must requets permission
+ * from it's clients before connection changing can be done.
+ *
+ * @return TBool ETrue if roaming can be allowed from the applicatin.
+ */
+ TBool RequestIsRoamingAllowedL();
+
+ /**
+ * Notification about IAP change due roaming. If this instance
+ * is master, it should change the IAP to Pubsub
+ *
+ */
+ void IapChangedL();
+
+ /**
+ * Method calls video connection utility's wait scheduler to
+ * put current active object to wait with given id.
+ *
+ * @param aWaitId id for the wait
+ */
+ void WaitL( TUint32 aWaitId );
+
+ /**
+ * Method calls video connection utility's wait scheduler to
+ * end wait for given id
+ *
+ * @param aWaitId id for the wait
+ */
+ void EndWait( TUint32 aWaitId );
+
+ /**
+ * Method return ETrue, if this instance is master
+ *
+ * @return TBool ETrue if is master, EFalse if not master
+ */
+ TBool IsMaster();
+
+ private: // New functions
+
+ /**
+ * Method reads Video center's connection related settings
+ * from the cenrep. Method also tries to reinit details inside
+ * conn util engine, if it fails, "always ask" is saved to VC settings
+ *
+ * @return KErrNone or one of the system wide error codes. Method can also leave.
+ */
+ TInt PrepareConnSettings();
+
+ /**
+ * Setups the connection creation prefs for "always ask" situation, and calls engine
+ * to start connection or calls DoCreateConnectionL for other cases.
+ *
+ * @param aSilent If ETrue, tries to open connection silently (without dialogs)
+ *
+ * @return KErrNone or one of the system wide error codes. Method can also leave.
+ */
+ TInt CreateConnection( TBool aSilent );
+
+ /**
+ * Setups and tries to open connection via SNAP.
+ *
+ * @param aSilent If ETrue, tries to open connection silently (without dialogs)
+ * @param aSnapId snap (destination) id to use in connection
+ * @param aMasterConnect If true, mobility object needs to be created for receiving events
+ * from network.
+ *
+ * @return KErrNone or one of the system wide error codes. Method can also leave.
+ */
+ TInt DoCreateConnection( TBool aSilent, TInt32 aSnapId, TBool aMasterConnect );
+
+ /**
+ * After connection staring is finished by the engine, this method is to be called.
+ * Method first checks is connection is ne for this inctance and if it is,
+ * utility's internal connection information is setted up. Method also
+ * calls CheckAndChangeSlaveToMaster to setup this inctance to be master if
+ * one does not yet exist. If this inctance is to be master, connection info
+ * is updated to PS as well.
+ *
+ *
+ * @return KErrNone if connection data filled ok and we are connected.
+ */
+ TInt HandleFinalizeConnection();
+
+ /**
+ * Displays a wait note
+ *
+ * @param aConnectionName name of connection to show on the dialog
+ */
+ void DisplayWaitNote( const TDesC& aConnectionName = KNullDesC );
+
+ /**
+ * closes a wait note
+ *
+ */
+ void CloseWaitNote();
+
+ /**
+ * Method queries all observers and requests roaming status from them.
+ * If all observers accept or there is not observers, PS key EVCxPSNbRoamAccepted
+ * is increased by one. After method ends, PS key EVCxPSNbrRoamResp is increased by
+ * one to notify that one response is ready.
+ *
+ * @return TBool ETrue if roaming is allowed
+ */
+ TBool DoRequestClientRoamingL();
+
+ /**
+ * Method saves iap id and name, snap id and name and connection state
+ * to pubsub.
+ *
+ */
+ void SaveConnectionToPubSubL();
+
+ /**
+ * Method handles changing of slave to master when existing
+ * master is diconnecting. If change has occured, reinits
+ * the connection to be used via snap instead of IAP
+ *
+ */
+ void HandleMasterChangeL();
+
+ /**
+ * Method handles the actual change of this instance to be
+ * master if there is not yet any.
+ *
+ * Changing is protected by semaphore, so only one existing
+ * slave instance can check and possible change it's status
+ * at the time.
+ *
+ * Note that KErrNone does not indicate succesfull status
+ * chenge. Caller should also check if iMaster -value has changed.
+ *
+ * @return TInt KErrNone or one of the system wide error codes,
+ */
+ TInt CheckAndChangeSlaveToMaster();
+
+ /**
+ * Method changes slave instance connection status
+ * based on given value.
+ *
+ * @param aNewStatus new status from master
+ *
+ */
+ void HandleSlaveConnectionStatusL( const TInt& aNewStatus );
+
+ /**
+ * Method checks whether there are enough responses for the roaming
+ * request. If there is sets roaming acceptance status to PS.
+ *
+ * @param aNbrOfResps number of responces received so far
+ *
+ */
+ void HandleRoamingReponsesL( const TInt& aNbrOfResps );
+
+ /**
+ * Method notifies observers about IAP changed event
+ *
+ */
+ void NotifyObserversIAPChanged();
+
+ private: // Data
+
+
+ /**
+ * Interface for UI related functions for connecting utility:
+ * Showing and hiding connection -dialog
+ */
+ CVcxConnectionUtility* iUIInterface;
+
+ /**
+ * Connection utility engine. Handles connection creation, disconnecting and
+ * connection meta data
+ */
+ CVcxConnUtilEngine* iEngine;
+
+ /**
+ * pubsub engine, listens pubsub keys
+ * and notify chenges
+ */
+ CVcxConnUtilPubSub* iPubsub;
+
+ /**
+ * Wait handler for managing all CactiveSchedulerWaits
+ * used by video connection utility
+ */
+ CVcxConnUtilWaitSch* iWaitHandler;
+
+ /**
+ * Array of external network observers.
+ */
+ RArray<MConnUtilEngineObserver*> iObservers;
+
+ /**
+ * Is this instance the master
+ */
+ TBool iMaster;
+
+ /**
+ * Semaphore to prevent concurrency in master / slave switch
+ */
+ RSemaphore iSemaSwitchRole;
+
+ /**
+ * Semaphore to prevent concurrency connection creation
+ */
+ RSemaphore iSemaCreateConn;
+
+ /**
+ * Used curing connection creation to tell active objects
+ * that current connection is new.
+ */
+ TBool iNewConnection;
+ };
+#endif // __VCX_CONNUTILIMPL_H_
+// End of File