diff -r 000000000000 -r 1bce908db942 natfw/natfwicecandidatehandler/inc/cicecheckhandler.h --- /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 +#include "natfwconnectivityapidefs.h" +#include +#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& aPeerSelectedPairs ); + + /** + * Updates ICE processing with updated set of remote candidates. + * + * @since S60 v3.2 + * @param aRemoteCands All remote candidates known currently + */ + void UpdateIceProcessingL( + RPointerArray& 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& 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& 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 iCheckLists; + + /** + * STUN server instance used for STUN request receiving. + * Own. + */ + CNATFWSTUNSrvClientSession* iStunSrv; + + /** + * Current credentials for ICE restart detection. + * Own. + */ + RPointerArray iCurCredentials; + + /** + * Buffered triggered checks. + * Own. + */ + RArray iBufferedChecks; + }; + +#endif // C_CICECHECKHANDLER_H