inc/natfwcandidate.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:20:28 +0100
branchRCL_3
changeset 46 4da1f672912e
parent 0 1bce908db942
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201032 Kit: 201035

/*
* 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
*
*/




#ifndef CNATFWCANDIDATE_H
#define CNATFWCANDIDATE_H

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

/**
 *  Represents candidate transport address (local/remote) for media receival.
 *
 *  @lib natconfw.lib
 *  @since S60 v3.2
 */
class CNATFWCandidate : public CBase
    {

public:

    /** Candidate type based on interface from which candidate is obtained. */
    enum TCandidateType {
        /** Candidate representing private address from local interface. */
        EHost                   = 1,

        /** Candidate representing public address allocated by a NAT as seen
        by used STUN-server. */
        EServerReflexive        = 2,

        /** Candidate representing public address allocated by a NAT as seen
        by the peer. */
        EPeerReflexive          = 3,

        /** Candidate representing public address allocated from STUN-relay
        server. */
        ERelay                  = 4
        };

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

    /**
     * Two-phased constructor.
     */
    IMPORT_C static CNATFWCandidate* NewLC();

    /**
     * Two-phased copy constructor.
     * @param aCandidate        The candidate to copy
     */
    IMPORT_C static CNATFWCandidate* NewL(
        const CNATFWCandidate& aCandidate );

    /**
     * Two-phased copy constructor.
     * @param aCandidate        The candidate to copy
     */
    IMPORT_C static CNATFWCandidate* NewLC(
        const CNATFWCandidate& aCandidate );

    /**
     * Destructor.
     */
    virtual ~CNATFWCandidate();

    /**
     * Returns identifier for the session where candidate belongs to.
     *
     * @since   S60 v3.2
     * @return  The session identifier
     */
    IMPORT_C TUint SessionId() const;

    /**
     * Sets identifier of the session where candidate belongs to.
     *
     * @since   S60 v3.2
     * @param   aId                 The session identifier
     */
    IMPORT_C void SetSessionId( TUint aId );

    /**
     * Returns candidate stream collection identifier.
     *
     * @since   S60 v3.2
     * @return  Stream collection identifier
     */
    IMPORT_C TUint StreamCollectionId() const;

    /**
     * Sets candidate stream collection identifier.
     *
     * @since   S60 v3.2
     * @param   aId                 The stream collection identifier
     */
    IMPORT_C void SetStreamCollectionId( TUint aId );

    /**
     * Returns candidate stream identifier.
     *
     * @since   S60 v3.2
     * @return  Stream identifier
     */
    IMPORT_C TUint StreamId() const;

    /**
     * Sets candidate stream identifier.
     *
     * @since   S60 v3.2
     * @param   aId                 Stream identifier
     */
    IMPORT_C void SetStreamId( TUint aId );

    /**
     * Returns candidate priority.
     *
     * @since   S60 v3.2
     * @return  Candidate priority
     */
    IMPORT_C TUint Priority() const;

    /**
     * Sets candidate prioritity.
     *
     * @since   S60 v3.2
     * @param   aPriority           Candidate priority
     */
    IMPORT_C void SetPriority( TUint aPriority );

    /**
     * Returns candidate transport address. If address is not set or it is
     * available only in FQDN format, address of family KAFUnspec is returned.
     *
     * Addresses in FQDN format can be accessed using TransportDomainAddr()
     * and TransportDomainPort().
     *
     * @since   S60 v3.2
     * @return  Transport address
     */
    IMPORT_C const TInetAddr& TransportAddr() const;

    /**
     * Sets candidate transport address. If the domain address is not set, it
     * will be updated as well.
     *
     * @since   S60 v3.2
     * @param   aAddr               The transport address
     */
    IMPORT_C void SetTransportAddrL( const TInetAddr& aAddr );

     /**
     * Gets transport address in FQDN format. If address is not set or it is
     * available only as an IP-address, an empty descriptor is returned.
     *
     * IP addresses can be accessed using TransportAddr().
     *
     * @since   S60 v3.2
     * @return  Transport address in FQDN format
     */
    IMPORT_C const TDesC8& TransportDomainAddr() const;

    /**
     * Gets transport address port that is associated with the FQDN
     *
     * Port associated with an IP-address can be accessed using
     * TransportAddr().
     *
     * @since   S60 v3.2
     * @return  Port associated with the FQDN
     */
    IMPORT_C TUint TransportDomainPort() const;

    /**
     * Sets candidate transport domain address either in FQDN or IP address
     * format. If the address provided represents a valid IP address, the
     * candidate's transport IP address is updated as well.
     *
     * @since   S60 v3.2
     * @param   aAddr               The transport address
     * @param   aPort               The transport address port
     */
    IMPORT_C void SetTransportDomainAddrL( const TDesC8& aAddr, TUint aPort );

    /**
     * Returns candidate transportprotocol.
     *
     * @since   S60 v3.2
     * @return  Candidate transportprotocol
     */
    IMPORT_C TUint TransportProtocol() const;

    /**
     * Sets candidate transport protocol.
     *
     * @since   S60 v3.2
     * @param   aTransportProtocol  The transport protocol
     */
    IMPORT_C void SetTransportProtocol(
        TUint aTransportProtocol );

    /**
     * Returns base transport address of the candidate.
     *
     * @since   S60 v3.2
     * @return  Base of the candidate
     */
    IMPORT_C const TInetAddr& Base() const;

    /**
     * Sets base transport address of the candidate.
     *
     * @since   S60 v3.2
     * @param   aBase               The base
     */
    IMPORT_C void SetBase( const TInetAddr& aBase );

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

    /**
     * Sets candidate foundation.
     *
     * @since   S60 v3.2
     * @param   aFoundation         The foundation
     */
    IMPORT_C void SetFoundationL( const TDesC8& aFoundation );

    /**
     * Returns type of the candidate.
     *
     * @since   S60 v3.2
     * @return  The type of the candidate
     */
    IMPORT_C CNATFWCandidate::TCandidateType Type() const;

    /**
     * Sets type of the candidate.
     *
     * @since   S60 v3.2
     * @param   aType               The candidate type
     */
    IMPORT_C void SetType( CNATFWCandidate::TCandidateType aType );

    /**
     * Returns component identifier associated with the candidate.
     *
     * @since   S60 v3.2
     * @return  Component identifier
     */
    IMPORT_C TUint ComponentId() const;

    /**
     * Sets component identifier for the candidate.
     *
     * @since   S60 v3.2
     * @param   aComponentId        The component identifier
     */
    IMPORT_C void SetComponentId( TUint aComponentId );

    /**
     * Compares foundations between candidates.
     *
     * @since   S60 v3.2
     * @param   aSource             Source candidate for comparison
     * @param   aTarget             Target candidate for comparison
     * @return  ETrue if canditates are same
     */
    IMPORT_C static TBool CompareFoundations( const CNATFWCandidate& aSource,
        const CNATFWCandidate& aTarget );

    /**
     * Implements TLinearOrder using priority value in comparison.
     *
     * @since   S60 v3.2
     * @param   aC1                 Candidate one
     * @param   aC2                 Candidate two
     * @return  aC1.Priority - aC2.Priority
     */
    IMPORT_C static TInt PriorityOrder( const CNATFWCandidate& aC1,
        const CNATFWCandidate& aC2 );

    /**
     * Makes a copy of given candidate.
     *
     * @since   S60 v3.2
     * @param   aCandidate          The candidate to copy
     */
    IMPORT_C void CopyL( const CNATFWCandidate& aCandidate );

    IMPORT_C TBool operator==(const CNATFWCandidate& aCandidate) const;

    IMPORT_C TBool operator!=(const CNATFWCandidate& aCandidate) const;

private:

    CNATFWCandidate();
    void ConstructL();
    void ConstructL( const CNATFWCandidate& aCa );

private: // data

    /**
     * Session identifier
     */
    TUint iSessionId;

    /**
     * Stream identifier
     */
    TUint iStreamId;

    /**
     * Stream collection identifier
     */
    TUint iStreamCollectionId;

    /**
     * Component identifier
     */
    TUint iComponentId;

    /**
     * Type of the candidate
     */
    TCandidateType iType;

    /**
     * Candidate priority
     */
    TUint iPriority;

    /**
     * Candidate transport address
     */
    TInetAddr iTransportAddr;

    /**
     * Candidate transport domain address
     */
    RBuf8 iTransportDomainAddr;

    /**
     * Candidate transport domain port
     */
    TUint iTransportDomainPort;

    /**
     * Transport protocol
     */
    TUint iTransportProtocol;

    /**
     * Foundation of the candidate
     */
    RBuf8 iFoundation;

    /**
     * Base of the candidate
     */
    TInetAddr iBase;
    };

#endif // CNATFWCANDIDATE_H