diff -r 000000000000 -r 1bce908db942 natfw/natfwclient/inc/natfwstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/natfw/natfwclient/inc/natfwstream.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,264 @@ +/* +* 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: NAT FW stream abstraction +* +*/ + + + + +#ifndef C_CNATFWSTREAMIMPL_H +#define C_CNATFWSTREAMIMPL_H + +#include +#include +#include "natfwconnectivityapidefs.h" +#include "mncmconnectionmultiplexerobserver.h" + +class MNATFWSocketMediaConnWrapper; +class CNATFWCredentials; +class CNATFWCandidate; +class CNcmConnectionMultiplexer; +class MNATFWConnectivityObserver; +class MNATFWRegistrationController; +class CNATFWPluginApi; +class CNATFWSession; +class CNatFwAsyncCallback; + +/** + * NAT FW stream abstraction. + * + * Provides NAT-traversal capable communication channel between local and + * remote sockets. + * + * @lib natconfw.dll + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CNATFWStream ) : public CBase + { + +public: + + static CNATFWStream* NewL( + MNATFWRegistrationController& aController, + CNcmConnectionMultiplexer& aMultiplexer, + CNatFwAsyncCallback& aAsyncCallback, + CNATFWSession& aContext, + TUint aProtocol, TInt aQoS ); + + static CNATFWStream* NewLC( + MNATFWRegistrationController& aController, + CNcmConnectionMultiplexer& aMultiplexer, + CNatFwAsyncCallback& aAsyncCallback, + CNATFWSession& aContext, + TUint aProtocol, TInt aQoS ); + + virtual ~CNATFWStream(); + + /** + * Return unique identifier of the stream. + * + * @since S60 v3.2 + * @return Stream identifier + */ + TUint StreamId() const; + + /** + * Creates a wrapper for the stream. + * + * @since S60 v3.2 + * @return The interface through which the client can configure the wrapper. + */ + MNATFWSocketMediaConnWrapper& CreateWrapperL(); + + /** + * Sets a new NAT-protocol plugin to be used or updates a stored + * protocol plugin. + * + * @since S60 v3.2 + * @param aPlugin The protocol plugin + */ + void SetProtocolPlugin( CNATFWPluginApi* aPlugin ); + + /** + * Resolves public IP address to be used in the communication between + * peers. MNATFWConnectivityObserver::NewLocalCandidateFound + * is called when a public IP has been resolved. + * + * @since S60 v3.2 + * @param aAddrFamily KAFUnspec / KAfInet / KAfInet6 + */ + void FetchCandidateL( TUint aAddrFamily ); + + /** + * ICE spesific function. Fetches IP address candidates for the + * communication between peers. Client is responsible for providing + * mapping between components of media stream through collection ID + * parameter. MNATFWConnectivityObserver::NewLocalCandidateFound + * is called whenever a new candidate has been found. + * + * @since S60 v3.2 + * @param aCollectionId The stream collection id + * @param aComponentId The component identifier + * @param aAddrFamily KAFUnspec / KAfInet / KAfInet6 + */ + void FetchCandidatesL( TUint aCollectionId, TUint aComponentId, + TUint aAddrFamily ); + + /** + * ICE specific function. Set username fragment and corresponding + * password for message signing and authentication with the specified + * candidate. + * + * @since S60 v3.2 + * @param aCandidate The candidate + * @param aCredentials The credentials + */ + void SetCredentialsL( + const CNATFWCandidate& aCandidate, + const CNATFWCredentials& aCredentials ); + + /** + * Enables/disables media receiving for the specified local candidate. + * + * Only those candidates given with MNATFWConnectivityObserver callbacks + * can be controlled. NATFW stream can have only one active candidate + * at a time. In other words, exactly one local candidate can be used + * for media delivery in receiving, sending or both directions. + * + * Receiving must be disabled prior to closing stream so that all + * resources can be freed. + * + * MNATFWConnectivityObserver::Notify is called with event code + * EReceivingActivated/EReceivingDeactivated when state change has + * completed. While activated incoming data is delivered to the media + * engine. + * + * Note: If TURN is used media cannot be delivered until remote address + * is known. + * + * @since S60 v3.2 + * @param aLocalCandidate The local end point for a media + * @param aState The receiving state + */ + void SetReceivingStateL( const CNATFWCandidate& aLocalCandidate, + TNATFWStreamingState aState ); + + /** + * Enables/disables media sending from the specified local candidate. + * + * Only those candidates given with MNATFWConnectivityObserver callbacks + * can be controlled. NATFW stream can have only one active candidate + * at a time. In other words, exactly one local candidate can be used + * for media delivery in receiving, sending or both directions. + * + * Sending must be disabled prior to closing stream so that all + * resources can be freed. + * + * MNATFWConnectivityObserver::Notify is called with event code + * ESendingActivated/ESendingDeactivated when state change has + * completed. While activated outgoing data from media engine is delivered + * to the specified remote address. + * + * @since S60 v3.2 + * @param aLocalCandidate The local end point for a media + * @param aState The sending state + * @param aDestAddr The remote end point for a media + */ + void SetSendingStateL( const CNATFWCandidate& aLocalCandidate, + TNATFWStreamingState aState, const TInetAddr& aDestAddr ); + + /** + * Call initiated by the Multiplexer of stream events. + * + * @since S60 v3.2 + * @param aSessionId The ID identifying session + * @param aStreamId The ID identifying stream + * @param aType The type of the event + * @param aError Error code. + */ + void Notify( TUint aSessionId, TUint aStreamId, + MNcmConnectionMultiplexerObserver::TNotifyType aType, TInt aError ); + +private: + + CNATFWStream( + MNATFWRegistrationController& aController, + CNcmConnectionMultiplexer& aMultiplexer, + CNatFwAsyncCallback& aAsyncCallback, + CNATFWSession& aContext, + TUint aProtocol, + TInt aQoS ); + + void ConstructL(); + + void DoNotify( TUint aSessionId, TUint aStreamId, + MNATFWConnectivityObserver::TNATFWConnectivityEvent aEvent, + TInt aError ); + +private: // data + + /** + * Unique identifier of the stream + */ + TUint iStreamId; + + /** + * Desired quality of service for the stream + */ + TInt iQoS; + + /** + * Remote IP of the other peer + */ + TInetAddr iDestAddr; + + /** + * Transport protocol used with the stream + */ + TUint iProtocol; + + /** + * NAT FW Registration controller + * Not own + */ + MNATFWRegistrationController& iController; + + /** + * Multiplexer + * Not own. + */ + CNcmConnectionMultiplexer& iMultiplexer; + + /** + * Async callback handler + * Not own. + */ + CNatFwAsyncCallback& iAsyncCallback; + + /** + * NAT-protocol plugin to be used + * Not own. + */ + CNATFWPluginApi* iPlugin; + + /** + * Session where stream belongs to + * Not own. + */ + CNATFWSession& iContext; + + }; + +#endif // C_CNATFWSTREAMIMPL_H