inc/natfwcandidatepair.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 14:59:15 +0300
branchRCL_3
changeset 59 b0e4b01681c5
parent 0 1bce908db942
permissions -rw-r--r--
Revision: 201039 Kit: 201041

/*
* 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:    Candidate pair
*
*/




#ifndef CNATFWCANDIDATEPAIR_H
#define CNATFWCANDIDATEPAIR_H

#include <e32base.h>
#include "natfwconnectivityapidefs.h"

class CNATFWCandidate;
class CNATFWCredentials;

/**
 *  A pairing containing a local candidate and a remote candidate.
 *  
 *  Used with the ICE protocol when making NAT connectivity checks.
 *  
 *  @lib  natconfw.lib
 *  @since S60 v3.2
 */
class CNATFWCandidatePair : public CBase
    {

public:

    /**
     * Two-phased constructor.
     */
    IMPORT_C static CNATFWCandidatePair* NewL();

    /**
     * Two-phased constructor.
     */
    IMPORT_C static CNATFWCandidatePair* NewLC();
    
    /**
     * Two-phased copy constructor.
     * @param   aPair               The pair to copy
     */
    IMPORT_C  static CNATFWCandidatePair* NewL(
        const CNATFWCandidatePair& aPair );

    /**
     * Two-phased copy constructor.
     * @param   aPair               The pair to copy
     */
    IMPORT_C  static CNATFWCandidatePair* NewLC(
        const CNATFWCandidatePair& aPair );
    
    /**
     * Two-phased constructor.
     * @param   aLocalCand          Local candidate
     * @param   aRemoteCand         Remote candidate
     */
    IMPORT_C  static CNATFWCandidatePair* NewL(
        const CNATFWCandidate& aLocalCand,
        const CNATFWCandidate& aRemoteCand );
    
    /**
     * Two-phased constructor.
     * @param   aLocalCand          Local candidate
     * @param   aRemoteCand         Remote candidate
     */
    IMPORT_C  static CNATFWCandidatePair* NewLC(
        const CNATFWCandidate& aLocalCand,
        const CNATFWCandidate& aRemoteCand );
    
    /**
     * Destructor.
     */
    virtual ~CNATFWCandidatePair();

    /**
     * Returns foundation of the candidate pair.
     *
     * @since   S60 v3.2
     * @return  Foundation of candidate pair
     */
    IMPORT_C const TDesC8& Foundation() const;

    /**
     * Sets local candidate.
     *
     * @since   S60 v3.2
     * @param   aCandidate          Local candidate to set
     */
    IMPORT_C void SetLocalCandidateL( const CNATFWCandidate& aCandidate );

    /**
     * Gets local candidate.
     *
     * @since   S60 v3.2
     * @return  Local candidate
     */
    IMPORT_C const CNATFWCandidate& LocalCandidate() const;

    /**
     * Sets remote candidate.
     *
     * @since   S60 v3.2
     * @param   aCandidate          Remote candidate
     */
    IMPORT_C void SetRemoteCandidateL( const CNATFWCandidate& aCandidate );

    /**
     * Gets remote candidate.
     *
     * @since   S60 v3.2
     * @return  Remote candidate
     */
    IMPORT_C const CNATFWCandidate& RemoteCandidate() const;

    /**
     * Sets pair priority.
     *
     * @since   S60 v3.2
     * @param   aPriority new pair priority
     */
    IMPORT_C void SetPriority( const TUint64 aPriority );

    /**
     * Gets pair priority.
     *
     * @since   S60 v3.2
     * @return  Pair priority
     */
    IMPORT_C TUint64 Priority() const;

    /**
     * Sets the candidate pair as selected.
     *
     * @since   S60 v3.2
     * @param   aSelected           ETrue if selected
     */
    IMPORT_C void SetSelected( TBool aSelected );
    
    /**
     * Gets pair selected status (true/false).
     *
     * @since   S60 v3.2
     * @return  Whether candidate pair is selected by ICE algorithm
     */
    IMPORT_C TBool Selected() const;
    
    /**
     * Implements TLinearOrder (descending order) using priority 
     * in comparison.
     *
     * @since   S60 v3.2
     */
    IMPORT_C static TInt PriorityOrder( 
        const CNATFWCandidatePair& aA, const CNATFWCandidatePair& aB );
    
    /**
     * Implements TIdentityRelation regarding all fields.
     *
     * @since   S60 v3.2
     * @param   aItem1              The first item for comparison
     * @param   aItem2              The second item for comparison
     * @return  ETrue if candidate pairs match
     */
    IMPORT_C static TBool Compare( 
        const CNATFWCandidatePair& aItem1, 
        const CNATFWCandidatePair& aItem2 );
    
    /**
     * 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 candidate pairs match
     */
    IMPORT_C static TBool MatchAddresses( 
        const CNATFWCandidatePair& aItem1, 
        const CNATFWCandidatePair& aItem2 );
    
    /**
     * Makes a copy of candidate pair.
     *
     * @since   S60 v3.2
     * @param   aPair               The pair to copy
     */
    IMPORT_C void CopyL( const CNATFWCandidatePair& aPair );

    IMPORT_C TBool operator==(const CNATFWCandidatePair& aCandidate) const;
    
    IMPORT_C TBool operator!=(const CNATFWCandidatePair& aCandidate) const;
    
private:

    CNATFWCandidatePair();
    
    void ConstructL();
    
    void ConstructL( const CNATFWCandidatePair& aPair );
    
    void ConstructL(
        const CNATFWCandidate& aLocalCand,
        const CNATFWCandidate& aRemoteCand );
    
    void UpdateFoundationL();
    
protected: // data

    /**
     * Priority of candidate pair
     */
    TUint64 iPairPriority;

    /**
     * Foundation of candidate pair
     * Own.
     */
    RBuf8 iFoundation;

    /**
     * Local candidate
     * Own.
     */
    CNATFWCandidate* iLocalCand;

    /**
     * Remote candidate
     * Own.
     */
    CNATFWCandidate* iRemoteCand;

    /**
     * Indicates whether the pair is selected
     */
    TBool iSelected;
    
    };


#endif // CNATFWCANDIDATEPAIR_H