--- /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 <e32base.h>
+#include <in_sock.h>
+#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