--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwicecandidatehandler/inc/ciceconnectivitycheck.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,325 @@
+/*
+* 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: Performs connectivity check.
+*
+*/
+
+
+
+
+#ifndef C_CICECONNECTIVITYCHECK_H
+#define C_CICECONNECTIVITYCHECK_H
+
+#include <e32base.h>
+#include "ciceconnectionhandler.h"
+#include "miceconncheckobserver.h"
+
+class MIceConnCheckListener;
+class CNATFWCandidatePair;
+class CNATFWCandidate;
+class TInetAddr;
+class CIceSessionData;
+
+/**
+ * Performs periodic and triggered end-to-end connectivity checks.
+ *
+ * Connectivity check consists of STUN-request sending and response
+ * processing.
+ *
+ * @lib icecandidatehandler
+ * @since S60 v3.2
+ */
+class CIceConnectivityCheck
+ :
+ public CBase,
+ public MIceConnCheckObserver
+ {
+
+ UNIT_TEST( UT_CIceConnectivityCheck )
+ UNIT_TEST( UT_CIceCheckList )
+
+public:
+
+ /** ICE check states */
+ enum TIceCheckState
+ {
+ EIceCheckWaiting = 1,
+ EIceCheckInProgress = 2,
+ EIceCheckSucceed = 4,
+ EIceCheckFailed = 8,
+ EIceCheckFrozen = 16
+ };
+
+ /** ICE check types */
+ enum TIceCheckType
+ {
+ EIceCheckTypePeriodic = 1,
+ EIceCheckTypeTriggered = 2,
+ EIceCheckTypeNomination = 3
+ };
+
+ /**
+ * Two-phased constructor.
+ * @param aClient The client issuing check
+ * @param aLocalCand The local candidate
+ * @param aRemoteCand The remote candidate
+ * @param aConnHandler The connection handler
+ * @param aSessionData The session data
+ */
+ static CIceConnectivityCheck* NewL(
+ MIceConnCheckListener& aClient,
+ const CNATFWCandidate& aLocalCand,
+ const CNATFWCandidate& aRemoteCand,
+ CIceConnectionHandler& aConnHandler,
+ CIceSessionData& aSessionData );
+
+ /**
+ * Two-phased constructor.
+ * @param aClient The client issuing check
+ * @param aLocalCand The local candidate
+ * @param aRemoteCand The remote candidate
+ * @param aConnHandler The connection handler
+ * @param aSessionData The session data
+ */
+ static CIceConnectivityCheck* NewLC(
+ MIceConnCheckListener& aClient,
+ const CNATFWCandidate& aLocalCand,
+ const CNATFWCandidate& aRemoteCand,
+ CIceConnectionHandler& aConnHandler,
+ CIceSessionData& aSessionData );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CIceConnectivityCheck();
+
+ /**
+ * Compare priorities of two connectivity checks.
+ *
+ * @since S60 v3.2
+ * @param aA The first check for comparison
+ * @param aB The second check for comparison
+ */
+ static TInt ComparePriorities(
+ const CIceConnectivityCheck& aA,
+ const CIceConnectivityCheck& aB );
+
+ /**
+ * Implements TIdentityRelation regarding transport addresses.
+ *
+ * @since S60 v3.2
+ * @param aItem1 The first item for comparison
+ * @param aItem2 The second item for comparison
+ * @return ETrue if checks match
+ */
+ static TBool MatchAddresses(
+ const CIceConnectivityCheck& aItem1,
+ const CIceConnectivityCheck& aItem2 );
+
+ /**
+ * Initializes the check. After that check is ready to be performed.
+ *
+ * @since S60 v3.2
+ */
+ void Initialize();
+
+ /**
+ * Executes connectivity check.
+ *
+ * @since S60 v3.2
+ * @param aType Connectivity check type
+ * @param aPriority The priority to be included in the check
+ * @param aRtoValue The retransmission timeout value in ms
+ */
+ void PerformConnCheckL( TIceCheckType aType, TUint aPriority,
+ TUint aRtoValue );
+
+ /**
+ * Resends earlier performed connectivity check in order to nominate pair.
+ *
+ * @since S60 v3.2
+ * @param aRtoValue The retransmission timeout value in ms
+ */
+ void PerformNominationL( TUint aRtoValue );
+
+ /**
+ * Return whether check is nominated.
+ *
+ * @since S60 v3.2
+ * @return ETrue if check is nominated
+ */
+ TBool Nominated() const;
+
+ /**
+ * Set information from the remote check received for the same pair.
+ * This information is needed for valid pair construction.
+ *
+ * @since S60 v3.2
+ * @param aPriority Priority of the remote check
+ * @param aFavored Favored status from the remote check
+ */
+ void SetRemoteCheckInfo( TUint aPriority, TBool aFavored );
+
+ /**
+ * Cancels the check.
+ *
+ * @since S60 v3.2
+ */
+ void Cancel();
+
+ /**
+ * Return stream identifier where this check is done.
+ *
+ * @since S60 v3.2
+ * @return Stream identifier
+ */
+ TUint StreamId() const;
+
+ /**
+ * Return identifier of the component for which this check is for.
+ *
+ * @since S60 v3.2
+ * @return Component identifier
+ */
+ TUint ComponentId() const;
+
+ /**
+ * Returns stream collection id of the check.
+ *
+ * @since S60 v3.2
+ * @return Stream collection identifier
+ */
+ TUint StreamCollectionId() const;
+
+ /**
+ * Return current state of the connectivity check.
+ *
+ * @since S60 v3.2
+ * @return Current state
+ */
+ TIceCheckState State() const;
+
+ /**
+ * Return candidate pair validated with this check.
+ *
+ * @since S60 v3.2
+ * @return Validated candidate pair
+ */
+ const CNATFWCandidatePair* ValidatedPair() const;
+
+ /**
+ * Returns candidate pair for which check is created.
+ *
+ * @since S60 v3.2
+ * @return Candidate pair
+ */
+ const CNATFWCandidatePair& CandidatePair() const;
+
+// From base class MIceConnectionObserver
+
+ void ConnCheckCompletedL(
+ TInt aCompletionCode,
+ const TInetAddr& aLocalAddr,
+ const TInetAddr& aPeerAddr,
+ const TInetAddr& aMappedAddr );
+
+private:
+
+ CIceConnectivityCheck(
+ MIceConnCheckListener& aClient,
+ CIceConnectionHandler& aConnHandler,
+ CIceSessionData& aSessionData );
+
+ void ConstructL(
+ const CNATFWCandidate& aLocalCand,
+ const CNATFWCandidate& aRemoteCand );
+
+ CNATFWCandidatePair* CreateValidatedPairL(
+ const TInetAddr& aMappedAddr );
+
+private: // data
+
+ /**
+ * Current state of the ICE check.
+ */
+ TIceCheckState iState;
+
+ /**
+ * Type of the connectivity check.
+ */
+ TIceCheckType iType;
+
+ /**
+ * Priority used with binding request.
+ */
+ TUint iPriority;
+
+ /**
+ * Priority from check which triggered this check.
+ */
+ TUint iRemotePriority;
+
+ /**
+ * Indicates is this pair favored by remote party.
+ */
+ TBool iRemoteFavored;
+
+ /**
+ * Whether check is nominated.
+ */
+ TBool iIsNominated;
+
+ /**
+ * Connection used for connectivity checks.
+ */
+ TUint iConnectionId;
+
+ /**
+ * Indicates that resend has been issued.
+ */
+ TBool iResendInProgress;
+
+ /**
+ * Client notified about a result of the check.
+ * Not own.
+ */
+ MIceConnCheckListener& iClient;
+
+ /**
+ * The connection handler.
+ * Not own.
+ */
+ CIceConnectionHandler& iConnHandler;
+
+ /**
+ * The session data.
+ * Not own.
+ */
+ CIceSessionData& iSessionData;
+
+ /**
+ * Validated candidate pair.
+ * Own.
+ */
+ CNATFWCandidatePair* iValidatedPair;
+
+ /**
+ * Pair to test for connectivity.
+ * Own.
+ */
+ CNATFWCandidatePair* iCandidatePair;
+
+ };
+
+#endif // C_CICECONNECTIVITYCHECK_H