natfw/natfwicecandidatehandler/inc/cicesessiondata.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwicecandidatehandler/inc/cicesessiondata.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,442 @@
+/*
+* Copyright (c) 2006-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:    Holds various session related data.
+*
+*/
+
+
+
+
+
+#ifndef CNATFWCANDIDATESTORAGE_H
+#define CNATFWCANDIDATESTORAGE_H
+
+#include <e32base.h>
+#include "natfwcredentials.h"
+#include "natfwconnectivityapidefs.h"
+#include "natfwcandidate.h"
+#include "natfwinternaldefs.h"    //UNIT_TEST
+
+class CIceStreamCollection;
+class MNATFWPluginObserver;
+class TInetAddr;
+
+/**
+ *  Stores all session related data like candidates and credentials.
+ *
+ *  Eliminates redundant candidates and generates foundations for them.
+ *
+ *  @lib icecandidatehandler.dll
+ *  @since S60 v3.2
+ */
+class CIceSessionData : public CBase
+    {
+
+    UNIT_TEST( UT_CIceSessionData )
+    
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aDomain                   Domain used
+     * @param aIapId                    Internet access point identifier
+     */
+    static CIceSessionData* NewL( 
+        const TDesC8& aDomain, TUint32 aIapId );
+
+    /**
+     * Two-phased constructor.
+     * @param aDomain                   Domain used
+     * @param aIapId                    Internet access point identifier
+     */
+    static CIceSessionData* NewLC( 
+        const TDesC8& aDomain, TUint32 aIapId );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CIceSessionData();
+
+   /**
+     * Adds peer reflexive candidate.
+     *
+     * @since   S60 v3.2
+     * @param   aPeerCandidate          Peer reflexive candidate
+     * @param   aIsRemoteCand           Whether candidate is remote one
+     */
+    void AddPeerReflexiveCandidateL( CNATFWCandidate* aPeerCandidate, 
+        TBool aIsRemoteCand );
+
+    /**
+     * Finds local candidate based on transport address info.
+     *
+     * @since   S60 v3.2
+     * @param   aTransportAddr          Transport address
+     * @return  Found candidate or NULL if not found
+     */
+    const CNATFWCandidate* FindLocalCandidate( 
+        const TInetAddr& aTransportAddr ) const;
+
+    /**
+     * Finds local candidate.
+     *
+     * @since   S60 v3.2
+     * @param   aStreamCollectionId     Stream collection identifier
+     * @param   aComponentId            Component identifier
+     * @param   aType                   Candidate type to found
+     * @return  Found candidate or NULL if not found
+     */
+    const CNATFWCandidate* FindLocalCandidate( 
+        TUint aStreamCollectionId,
+        TUint aComponentId,
+        CNATFWCandidate::TCandidateType aType ) const;
+
+    /**
+     * Finds remote candidate based on transport address info.
+     *
+     * @since   S60 v3.2
+     * @param   aTransportAddr          Transport address
+     * @return  Found candidate or NULL if not found 
+     */
+    const CNATFWCandidate* FindRemoteCandidate( 
+        const TInetAddr& aTransportAddr ) const;
+
+    /**
+     * Gets local candidates.
+     *
+     * @since S60 v3.2
+     * @param aStreamCollectionId       Stream collection identifier
+     * @param aStreamId                 Stream identifier
+     * @param aLocalCandidates          Found candidates. Caller is 
+     *      responsible of deleting the contents of the array.
+     */
+    void GetLocalCandidates(
+        const TUint aStreamCollectionId,
+        const TUint aStreamId,
+        RPointerArray<CNATFWCandidate>& aLocalCandidates );
+
+    /**
+     * Gets local candidates.
+     *
+     * @since S60 v3.2
+     * @param aStreamCollectionId       Stream collection identifier
+     * @param aLocalCandidates          Found candidates. Caller is 
+     *      responsible of deleting the contents of the array.
+     */
+    void GetLocalCandidates(
+        const TUint aStreamCollectionId,
+        RPointerArray<CNATFWCandidate>& aLocalCandidates );
+    
+    /**
+     * Gets local candidates.
+     *
+     * @since S60 v3.2
+     * @param aLocalCandidates          Found candidates. Caller is 
+     *      responsible of deleting the contents of the array.
+     */
+    void GetLocalCandidates(
+        RPointerArray<CNATFWCandidate>& aLocalCandidates );
+    
+    /**
+     * Deletes stream collection.
+     *
+     * @since   S60 3.2
+     * @param   aStreamCollectionId     The ID identifying collection
+     */
+    void DeleteCollection( TUint aStreamCollectionId );
+                    
+    /**
+     * Adds new credentials for stream collection.
+     *
+     * @since   S60 3.2
+     * @param   aCredentials         Credentials for stream collection
+     */
+    void AddCredentialsL( 
+        const CNATFWCredentials& aCredentials );
+
+    /**
+     * Returns all credentials used in a session.
+     *
+     * @since   S60 3.2
+     * @return  Credentials list
+     */
+    const RPointerArray<CNATFWCredentials>& Credentials() const;
+    
+    /**
+     * Returns credentials for specified stream and utilization direction.
+     *
+     * @since   S60 3.2
+     * @param   aStreamId               The stream identifier
+     * @param   aDirection              The utilization direction
+     * @return  Credentials
+     */
+    const CNATFWCredentials* Credentials( 
+        TUint aStreamId,
+        CNATFWCredentials::TUtilizationDirection aDirection ) const;
+
+    /**
+     * Adds a remote candidate.
+     *
+     * @since   S60 3.2
+     * @param   aRemoteCandidate        The candidate to add
+     */
+    void AddRemoteCandidateL( CNATFWCandidate* aRemoteCandidate );
+    
+    /**
+     * Gets remote candidates.
+     *
+     * @since   S60 3.2
+     * @param   aStreamCollectionId     Returned candidates have this stream
+     *          collection id
+     * @param   aComponentId            Returned candidates have this component id
+     * @param   aRemoteCandidates candidates are returned in this array.
+     *          Caller is responsible of deleting the contents of the
+     *          array.
+     */
+    void GetRemoteCandidatesL( 
+        TUint aStreamCollectionId,
+        TUint aComponentId,
+        RPointerArray<CNATFWCandidate>& aRemoteCandidates ); 
+                    
+    /**
+     * Adds remote candidates.
+     *
+     * @param   aRemoteCandidates       Remote candidates to add
+     */
+    void AddRemoteCandidatesL( 
+        RPointerArray<CNATFWCandidate>& aRemoteCandidates );
+
+    /**
+     * Gets remote candidates.
+     *
+     * @since   S60 3.2
+     * @param   aStreamCollectionId     Collection where to find candidates
+     * @param   aRemoteCandidates       Returned candidates.
+     *          Caller is responsible of deleting the contents of the
+     *          array.
+     */
+    void GetRemoteCandidatesL( const TUint aStreamCollectionId,
+        RPointerArray<CNATFWCandidate>& aRemoteCandidates );
+
+    /**
+     * Adds a local candidate.
+     *
+     * @since  S60 3.2
+     * @param  aLocalCandidate          The candidate to add
+     * @return ETrue if candidate was redundant
+     */
+    TBool AddLocalCandidateL( CNATFWCandidate* aLocalCandidate );
+    
+    /**
+     * Gets identifiers for all stream collections in a session.
+     * 
+     * @since   S60 3.2
+     * @param   aStreamCollIds          Collection ids returned
+     */                                        
+    void GetStreamCollectionIdsL( 
+        RArray<TUint>& aStreamCollIds ) const;
+    
+    /**
+     * Creates a new stream collection.
+     *
+     * @since   S60 3.2
+     * @param   aStreamCollectionId     The identifier for new collection
+     */
+    void CreateCollectionL( TUint aStreamCollectionId );
+     
+    /**
+     * Returns collection identifier.
+     *
+     * @since   S60 3.2
+     * @param   aStreamCollectionId     The identifier for collection
+     */
+    CIceStreamCollection* CollectionL( TUint aStreamCollectionId );
+
+    /**
+     * Finds collection where specified media component belongs.
+     *
+     * @since   S60 3.2
+     * @param   aStreamId               The media component
+     * @param   aCollectionId           On return collection id
+     * @return  System wide error code
+     */
+    TInt GetCollectionIdForComponent( 
+        TUint aStreamId, TUint& aCollectionId );
+    
+    /**
+     * Cleanups all data related to the specified stream.
+     *
+     * @since   S60 v3.2
+     * @param   aStreamId               The stream identifier
+     */
+    void CleanupStreamData( TUint aStreamId );
+     
+    /**
+     * Removes all local candidates in a session.
+     *
+     * @since   S60 v3.2
+     */
+    void RemoveLocalCandidates();
+
+    /**
+     * Removes all remote candidates in a session.
+     *
+     * @since   S60 v3.2
+     */
+    void RemoveRemoteCandidates();
+
+    /**
+     * Sets new role.
+     *
+     * @since   S60 v3.2
+     * @param   aRole                   The role
+     */    
+    void SetRole( TNATFWIceRole aRole );
+
+    /**
+     * Returns current role.
+     *
+     * @since   S60 v3.2
+     * @return  Current role
+     */
+    TNATFWIceRole Role() const;
+    
+    /**
+     * Sets new tie-breaker value.
+     *
+     * @since   S60 v3.2
+     * @param   aTieBreaker             The tie-breaker value
+     */
+    void SetTieBreaker( TUint64 aTieBreaker );
+
+    /**
+     * Returns current tie-breaker value.
+     *
+     * @since   S60 v3.2
+     * @return  Current tie-breaker
+     */
+    TUint64 TieBreaker() const;
+    
+    /**
+     * Returns domain.
+     *
+     * @since   S60 v3.2
+     * @return  Domain
+     */
+    const TDesC8& Domain() const;
+    
+    /**
+     * Returns internet access point identifier.
+     *
+     * @since   S60 v3.2
+     * @return  Internet access point identifier
+     */
+    TUint32 IapId() const;
+
+    /**
+     * Sets value of the TA timer in milliseconds.
+     *
+     * @since   S60 v3.2
+     * @param   aTaTimerValue           The value for the timer
+     */
+    void SetTaTimerValue( TUint aTaTimerValue );
+
+    /**
+     * Returns value of the TA timer in milliseconds.
+     *
+     * @since   S60 v3.2
+     * @return  TA timer value
+     */
+    TUint TaTimerValue() const;
+    
+private:
+        
+
+    CIceSessionData( TUint32 aIapId );
+
+    void ConstructL( const TDesC8& aDomain );
+
+    TBool IsRedundantCandidate( const CNATFWCandidate& aLocalCandidate,
+        const RPointerArray<CNATFWCandidate>& aCandidateArray ) const;
+
+    void AssignFoundationForCandidateL( CNATFWCandidate& aLocalCandidate );
+
+    CIceStreamCollection* FindStreamCollectionById( 
+        TUint aCollectionId );
+
+    const TDesC8& GenerateRandomIdentifier();
+    
+    void UpdateUserNamesL( CNATFWCredentials& aCredentials );
+
+private: // data
+
+    /**
+     * Tie-breaker used for role conflict determination in the session.
+     */
+    TUint64 iTieBreaker;
+    
+    /**
+     * The current role.
+     */
+    TNATFWIceRole iRole;
+    
+    /**
+     * Domain in which session is created.
+     * Own.
+     */
+    HBufC8* iDomain;
+    
+    /**
+     * Internet access point identifier.
+     */
+    TUint32 iIapId;
+    
+    /**
+     * Stream collections.
+     * Own.
+     */
+    RPointerArray<CIceStreamCollection> iStreamCollections;
+    
+    /**
+     * Credentials.
+     * Own.
+     */
+    RPointerArray<CNATFWCredentials> iCredentialsList;
+    
+    /**
+     * Local candidates resolved so far.
+     * Own.
+     */
+    RPointerArray<CNATFWCandidate> iLocalCandidateList;
+    
+    /**
+     * Remote candidates known.
+     * Own.
+     */
+    RPointerArray<CNATFWCandidate> iRemoteCandidateList;
+    
+    /**
+     * Temporary variable for credentials generation.
+     * Own.
+     */
+    RBuf8 iTempIdentifier;
+
+    /**
+     * Value for the TA timer.
+     */
+    TUint iTaTimerValue;
+    };
+
+
+#endif // CNATFWCANDIDATESTORAGE_H