natplugins/natpnatfwsdpprovider/inc/nspmediastreamcomponent.h
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/natplugins/natpnatfwsdpprovider/inc/nspmediastreamcomponent.h	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,331 @@
+/*
+* 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:  Media stream component class description
+*
+*/
+
+#ifndef NSPMEDIASTREAMCOMPONENT_H
+#define NSPMEDIASTREAMCOMPONENT_H
+
+#include "nsppluginreturndef.h"
+#include "mnatfwconnectivityobserver.h"
+#include "natfwconnectivityapidefs.h"
+#include "nsputdefinitions.h"
+
+class MNSPControllerIF;
+class MNATFWSocketMediaConnWrapper;
+class CNSPNATFWAsyncState;
+class CNATFWCredentials;
+
+/**
+ *  Objects of this type corresponds NATFW's stream component.
+ *
+ *  Objects of this type handle, and use, NATFW events and interface.
+ *  Calls from session state machine traverse to here, where each object
+ *  determines actions according to state of individual stream component.
+ *	
+ *  @lib natfwsdpprovider.dll
+ *  @since S60 3.2
+ */
+class CNSPMediaStreamComponent : public CBase
+    {
+public: // Constructors and destructor
+
+    /**
+     * A two-phase constructor.
+     */
+    static CNSPMediaStreamComponent* NewL( MNSPControllerIF& aController,
+            TUint aSessionId, TUint aCollectionId, TUint aComponentId,
+            const TDesC8& aAddress, TUint aPort, TUint aProtocol, TUint aMediaTos );
+    
+    /**
+     * A two-phase constructor.
+     */
+    static CNSPMediaStreamComponent* NewLC( MNSPControllerIF& aController,
+            TUint aSessionId, TUint aCollectionId, TUint aComponentId,
+            const TDesC8& aAddress, TUint aPort, TUint aProtocol, TUint aMediaTos );
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CNSPMediaStreamComponent();
+
+
+private: // Constructors and destructor
+
+    CNSPMediaStreamComponent( MNSPControllerIF& aController,
+            TUint aSessionId, TUint aCollectionId, TUint aComponentId );
+    
+    void ConstructL( const TDesC8& aAddress, TUint aPort, TUint aProtocol, TUint aMediaTos );
+
+
+public: // New functions
+
+	/**
+	 * Notifies media stream about NATFW event.
+	 * 
+	 * @since       S60 3.2
+	 * @param       aEvent              The event
+	 * @param       aError              The completion code of the operation
+	 * @param		aData				Event specific data.
+	 * @return      Returns status code, i.e. global error code,
+	 * 				KNatReady or KNatAsync.
+	 */
+	TNatReturnStatus ControlMediaL(
+			MNATFWConnectivityObserver::TNATFWConnectivityEvent aEvent,
+			TInt aError, TAny* aData );
+    
+    /**
+     * This method is used to reset and destroy local candidate objects.
+     *
+     * @since       S60 3.2
+     */
+    void ResetAndDestroyCandidates();
+    
+    /**
+     * This method is used to initiate FetchCandidate - call to NATFW.
+     * Method is STUN specific, only one candidate needed.
+     * 
+     * @since       S60 3.2
+     */
+    void FetchCandidateL();
+    
+    /**
+     * This method is used to initiate FetchCandidates - call to NATFW.
+     * Method is ICE specific.
+     * 
+     * @since       S60 3.2
+     */
+    void FetchCandidatesL();
+    
+    /**
+     * This method is used to initiate PerformCandidateChecks - call
+     * to NATFW. Method is ICE specific.
+     * 
+     * @since       S60 3.2
+     */
+    void PerformCandidateChecksL();
+    
+    /**
+     * This method is used to initiate SetReceiving/SendingStatus - calls
+     * to NATFW. Method is STUN specific.
+     * 
+     * @since       S60 3.2
+     * @param       aAddress            Remote address as descriptor.
+     */
+    void ActivateL( const TDesC8& aAddress, TUint aPort );
+    
+    /**
+     * This method is used to initiate SetReceiving/SendingStatus - calls
+     * to NATFW. Method is ICE specific.
+     * 
+     * @since       S60 3.2
+     */
+    void ActivateL();
+    
+    /**
+     * This method is used to initiate SetReceiving/SendingStatus - calls
+     * to NATFW, to deactivate sending/receiving.
+     * 
+     * @since       S60 3.2
+     */
+    void DeActivateL();
+    
+    /**
+     * Getter method for Peers remote address.
+     */
+    const TDesC8& RemoteAddress() const;
+    
+    /**
+     * Getter method for Peers remote port.
+     */
+    TUint RemotePort() const;
+    
+    /**
+     * Getter method for Stream ID.
+     * 
+     * @since       S60 3.2
+     * @return      The stream collection identifier.
+     */
+    TUint StreamId() const;
+    
+    /**
+     * Getter method for Component ID. Values are: RTP = 1, RTCP = 2
+     *
+     * @since       S60 3.2
+     * @return      The stream collection identifier.
+     */
+    TUint ComponentId() const;
+    
+    /**
+     * This method is used to retrieve a reference to local candidates array,
+     * which is used to enter directly to individual elements.
+     *
+     * @since       S60 3.2
+     * @return      Reference to array that contains stream component
+     *              local candidates.
+     */
+    RPointerArray<CNATFWCandidate>& LocalCandidates();
+    
+    /**
+     * This method is used to receive the result of ICE negotiation, the 
+     * local candidate from working candidate pair.
+     *
+     * @since       S60 3.2
+     * return       Reference to candidate object.
+     */
+    const CNATFWCandidate& IceLocalCandidateL();
+    
+    /**
+     * This method is used to receive the result of ICE negotiation, the
+     * remote candidate from working candidate pair.
+     *
+     * @since       S60 3.2
+     * return       Reference to candidate object.
+     */
+    const CNATFWCandidate& IceRemoteCandidateL();
+    
+    /**
+     * This method is used to get NATFW adresses.
+     *
+     * @since       S60 3.2
+     * @param       aAddress              NATFW local addr.
+     * @param       aPort                 NATFW local port
+     * @return      Returns error code if failure address handling.
+     */
+    TInt OutgoingAddress( TDes8& aAddress, TUint& aPort ) const;
+    
+    /**
+     * This method is used to set Ice credentials to NATFW. Method is 
+     * Ice specific.
+     *
+     * @since       S60 3.2
+     * @param       aCredentials              Credentials object.
+     */
+    void SetCredentialsL( const CNATFWCredentials& aCredentials );
+    
+    /**
+     * This method is used to map component id to a certain stream id.
+     * This method is ICE specific.
+     *
+     * @since       S60 3.2
+     * @param       aCandidate          Candidate object reference.
+     * @return      ETrue if component ids matched.
+     */
+    TBool AttachCandidateL( CNATFWCandidate& aCandidate ) const;
+
+
+private: // New functions
+
+    TNatReturnStatus HandleReceivingActivated( TInt aError );
+    
+    TNatReturnStatus HandleSendingActivated( TInt aError );
+    
+    TNatReturnStatus HandleReceivingDeActivated( TInt aError );
+    
+    TNatReturnStatus HandleSendingDeActivated( TInt aError );
+    
+    TNatReturnStatus HandleFetchingCompleted( TInt aError );
+    
+    TNatReturnStatus HandleConnChecksCompleted( TInt aError );
+    
+    TNatReturnStatus Continue();
+    
+    TNatReturnStatus ErrorOccurred( TInt aError );
+    
+    TBool SuppressRtcpIcmp( TInt aError ) const;
+
+
+private: // data
+
+    /**
+     * Reference to a NATFW API.
+     * Not own.
+     */
+    MNSPControllerIF& iController;
+    
+    /**
+     * Peers transport connection address, stored for conn. updates.
+     */
+    RBuf8 iRemoteAddress;
+    
+    /**
+     * Peers transport connection port, stored for conn. updates.
+     */
+    TUint iRemotePort;
+    
+    /**
+     * Reference to a Session unique identifier.
+     */ 
+    TUint iSessionId;
+    
+    /**
+     * Collection unique identifier, generated locally, used by NAT FW.
+     */
+    TUint iCollectionId;
+    
+    /**
+     * Component Id, separating RTP and RTCP streams from each others.
+     */
+    TUint iComponentId;
+    
+    /**
+     * Stream unique identifier, received from NAT FW.
+     */ 
+    TUint iStreamId;
+    
+    /**
+     * Async call timer id, used only with FetchCandidates - call.
+     */
+    TUint iTimerTransactionId;
+    
+    /**
+     * Default address family as TUint.
+     */
+    TUint iAddrFamily;
+    
+    /**
+     * Media socket connection wrapper, used to inform NAT FW about IP:port.
+     * Not own.
+     */
+    MNATFWSocketMediaConnWrapper* iWrapper;
+    
+    /**
+     * Final candidate-pear pair, only one received from NAT FW.
+     * if differs from NULL, then Own.
+     */
+    CNATFWCandidatePair* iCandidatePair;
+    
+    /**
+     * Array containing local candidate objects, received from NAT FW.
+     * Own.
+     */
+    RPointerArray<CNATFWCandidate> iLocalCandidates;
+    
+    /**
+     * State engine for this stream, updated always in async calls.
+     * Own.
+     */
+    CNSPNATFWAsyncState* iState;
+    
+    /**
+     * Definitions for unit testing.
+     */
+    NSP_UT_DEFINITIONS
+
+    };
+
+#endif // NSPMEDIASTREAMCOMPONENT_H
+
+// end of file