diff -r 000000000000 -r 1bce908db942 natfw/natfwicecandidatehandler/inc/ciceconnectivitycheck.h --- /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 +#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