--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwicecandidatehandler/inc/cicecheckhandler.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2007 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:
+*
+*/
+
+
+
+
+#ifndef C_CICECHECKHANDLER_H
+#define C_CICECHECKHANDLER_H
+
+#include <e32base.h>
+#include "natfwconnectivityapidefs.h"
+#include <in_sock.h>
+#include "natfwstunsrvobserver.h"
+#include "micechecklistobserver.h"
+#include "natfwinternaldefs.h" //UNIT_TEST
+
+class CIceSessionData;
+class CIceCheckList;
+class CNATFWSTUNSrvClientSession;
+class MNcmConnectionMultiplexer;
+class CIceConnectionHandler;
+class CIceCandidatePrioritizer;
+class MIceNatPluginEventObs;
+class CNATFWCredentials;
+class CNATFWCandidate;
+class CNATFWCandidatePair;
+
+/**
+ * Manages check lists and listens to incoming checks.
+ *
+ * @lib icecandidatehandler.dll
+ * @since S60 v3.2
+ */
+class CIceCheckHandler
+ :
+ public CBase,
+ public MNATFWStunSrvObserver,
+ public MIceChecklistObserver
+ {
+
+ UNIT_TEST( UT_CIceCheckHandler )
+
+public:
+
+ /** ICE processing state across all media streams */
+ enum TIceProcessingState
+ {
+ EIceRunning = 1, // There is checks in progress
+ EIceCompleted = 2 // All check lists has completed
+ };
+
+ /**
+ * Two-phased constructor.
+ * @param aSessionData Session data
+ * @param aMultiplexer Multiplexer
+ * @param aConnHandler Connection handler
+ * @param aEventObserver Observer for events
+ */
+ static CIceCheckHandler* NewL(
+ CIceSessionData& aSessionData,
+ MNcmConnectionMultiplexer& aMultiplexer,
+ CIceConnectionHandler& aConnHandler,
+ MIceNatPluginEventObs& aEventObserver );
+
+ /**
+ * Two-phased constructor.
+ * @param aSessionData Session data
+ * @param aMultiplexer Multiplexer
+ * @param aConnHandler Connection handler
+ * @param aEventObserver Observer for events
+ */
+ static CIceCheckHandler* NewLC(
+ CIceSessionData& aSessionData,
+ MNcmConnectionMultiplexer& aMultiplexer,
+ CIceConnectionHandler& aConnHandler,
+ MIceNatPluginEventObs& aEventObserver );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CIceCheckHandler();
+
+ /**
+ * Sets local or remote credentials. Local credentials are needed for
+ * incoming STUN-request authentication.
+ *
+ * @since S60 v3.2
+ * @param aCredentials The credentials
+ */
+ void SetCredentialsL( const CNATFWCredentials& aCredentials );
+
+ /**
+ * Start perform connectivity checks. Local & remote candidates and
+ * credentials for them must be stored before starting.
+ *
+ * @since S60 v3.2
+ */
+ void PerformConnectivityChecksL();
+
+ /**
+ * Updates ICE processing with peer selected candidate pairs.
+ *
+ * @since S60 v3.2
+ * @param aPeerSelectedPairs Peer selected candidate pairs
+ */
+ void UpdateIceProcessingL(
+ RPointerArray<CNATFWCandidatePair>& aPeerSelectedPairs );
+
+ /**
+ * Updates ICE processing with updated set of remote candidates.
+ *
+ * @since S60 v3.2
+ * @param aRemoteCands All remote candidates known currently
+ */
+ void UpdateIceProcessingL(
+ RPointerArray<CNATFWCandidate>& aRemoteCands );
+
+ /**
+ * Cleanups all data related to the specified stream collection.
+ *
+ * @since S60 v3.2
+ * @param aCollectionId The collection identifier
+ */
+ void CleanupCollectionData( TUint aCollectionId );
+
+// from base class MNATFWStunSrvObserver
+
+ /**
+ * From MNATFWStunSrvObserver.
+ * Called by NAT FW STUN server when incoming STUN request has come.
+ * If aFromAddr == aPeerAddr relay isn't used.
+ *
+ * @since S60 v3.2
+ * @param aLocalAddr To which local address request came
+ * @param aFromAddr Where request came from as seen by socket
+ * @param aPeerAddr Real remote address where request came from
+ * @param aPriority Priority from request
+ * @param aRemoteFavored Whether candidate pair checked is favored
+ by remote peer
+ */
+ void STUNRequestReceivedL( const TInetAddr& aLocalAddr,
+ const TInetAddr& aFromAddr, const TInetAddr& aPeerAddr,
+ TUint aPriority, TBool aRemoteFavored );
+
+ /**
+ * From MNATFWStunSrvObserver.
+ * Called by NATFW STUN Server if role conflict is present between agents
+ * and local agent needs to change its role.
+ *
+ * @since S60 v3.2
+ * @param aDesiredRole Desired role
+ */
+ void RoleChangeNeeded( TNATFWIceRole aDesiredRole );
+
+// from base class MIceChecklistObserver
+
+ /**
+ * From MIceChecklistObserver.
+ * Indicates that check list has completed, either succesfully or not.
+ *
+ * @since S60 v3.2
+ * @param aChecklist The checklist which was completed
+ * @param aSelectedPairs The selected pairs for components
+ */
+ void ChecklistCompletedL(
+ const CIceCheckList& aChecklist,
+ const RPointerArray<CNATFWCandidatePair>& aSelectedPairs );
+
+ /**
+ * From MIceChecklistObserver.
+ * Indicates that check list has completed, either succesfully or not.
+ *
+ * @since S60 v3.2
+ * @param aChecklist The checklist which was completed
+ * @param aFailedComps The failed components
+ * @param aErrCode The completion code
+ */
+ void ChecklistCompletedL(
+ const CIceCheckList& aChecklist,
+ const RArray<TUint>& aFailedComps,
+ TInt aErrCode );
+
+ /**
+ * From MIceChecklistObserver.
+ * Indicates that those checks in other checklists, which have same
+ * foundation could be now unfrozen as an optimization.
+ *
+ * @since S60 v3.2
+ * @param aChecklist The checklist reporting event
+ * @param aFoundation The foundation
+ */
+ void ComponentsHaveValidPairsL(
+ const CIceCheckList& aChecklist, const TDesC8& aFoundation );
+
+private:
+
+ CIceCheckHandler(
+ CIceSessionData& aSessionData,
+ MNcmConnectionMultiplexer& aMultiplexer,
+ CIceConnectionHandler& aConnHandler,
+ MIceNatPluginEventObs& aEventObserver );
+
+ void ConstructL();
+
+ void FormChecklistsL();
+
+ CIceCheckList* ChecklistByCollectionId( TUint aStreamCollId );
+
+ CIceCheckList* ChecklistByCollectionIdL( TUint aStreamCollId );
+
+ void SetState( TIceProcessingState aState );
+
+ void HandleNewCollectionsL();
+
+ void HandleIceRestartsL();
+
+ TInt NumOfActiveCheckLists();
+
+ void UpdateStunServerParamsL();
+
+ void ExecuteBufferedTriggeredChecksL();
+
+ void UnFreezeCheckListsL(
+ const CIceCheckList& aExcludedList, const TDesC8& aFoundation );
+
+ void UpdateICEProcessingStateL( const CIceCheckList& aCheckList );
+
+ class TIceTriggeredCheckInfo
+ {
+ public:
+ TIceTriggeredCheckInfo( const TInetAddr& aLocalAddr,
+ const TInetAddr& aFromAddr, const TInetAddr& aPeerAddr,
+ TUint aPriority, TBool aRemoteFavored )
+ :
+ iLocalAddr( aLocalAddr ),
+ iFromAddr( aFromAddr ),
+ iPeerAddr( aPeerAddr ),
+ iPriority( aPriority ),
+ iRemoteFavored( aRemoteFavored ) { }
+
+ const TInetAddr& LocalAddr() const { return iLocalAddr; }
+ const TInetAddr& FromAddr() const { return iFromAddr; }
+ const TInetAddr& PeerAddr() const { return iPeerAddr; }
+ TUint Priority() const { return iPriority; }
+ TBool IsRemoteFavored() const { return iRemoteFavored; }
+
+ private:
+
+ TInetAddr iLocalAddr;
+ TInetAddr iFromAddr;
+ TInetAddr iPeerAddr;
+ TUint iPriority;
+ TBool iRemoteFavored;
+ };
+
+private: // data
+
+ /**
+ * ICE processing state across all media streams.
+ */
+ TIceProcessingState iState;
+
+ /**
+ * The session data.
+ * Not own.
+ */
+ CIceSessionData& iSessionData;
+
+ /**
+ * The multiplexer.
+ * Not own.
+ */
+ MNcmConnectionMultiplexer& iMultiplexer;
+
+ /**
+ * The connection handler.
+ * Not own.
+ */
+ CIceConnectionHandler& iConnHandler;
+
+ /**
+ * Event observer for NAT-plugin events.
+ * Not own.
+ */
+ MIceNatPluginEventObs& iEventObserver;
+
+ /**
+ * The checklists.
+ * Own.
+ */
+ RPointerArray<CIceCheckList> iCheckLists;
+
+ /**
+ * STUN server instance used for STUN request receiving.
+ * Own.
+ */
+ CNATFWSTUNSrvClientSession* iStunSrv;
+
+ /**
+ * Current credentials for ICE restart detection.
+ * Own.
+ */
+ RPointerArray<CNATFWCredentials> iCurCredentials;
+
+ /**
+ * Buffered triggered checks.
+ * Own.
+ */
+ RArray<TIceTriggeredCheckInfo> iBufferedChecks;
+ };
+
+#endif // C_CICECHECKHANDLER_H