--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/natfw/natfwclient/src/natfwstream.cpp Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,325 @@
+/*
+* 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:
+*
+*/
+
+
+
+
+#include "mnatfwsocketmediaconnwrapper.h"
+#include "mnatfwconnectivityobserver.h"
+#include "natfwpluginapi.h"
+#include "natfwstream.h"
+#include "natfwsession.h"
+#include "mnatfwregistrationcontroller.h"
+#include "natfwsocketmediaconnwrapper.h"
+#include "cncmconnectionmultiplexer.h"
+#include "cncmportstore.h"
+#include "cnatfwasynccallback.h"
+#include "natfwclientlogs.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::CNATFWStream
+// ---------------------------------------------------------------------------
+//
+CNATFWStream::CNATFWStream(
+ MNATFWRegistrationController& aController,
+ CNcmConnectionMultiplexer& aMultiplexer,
+ CNatFwAsyncCallback& aAsyncCallback,
+ CNATFWSession& aContext,
+ TUint aProtocol, TInt aQoS )
+ :
+ iQoS( aQoS ),
+ iProtocol( aProtocol ),
+ iController( aController ),
+ iMultiplexer( aMultiplexer ),
+ iAsyncCallback( aAsyncCallback ),
+ iContext( aContext )
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::ConstructL()
+ {
+ iStreamId = iMultiplexer.CreateStreamL( iContext.SessionId(),
+ iQoS, iProtocol );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::NewL
+// ---------------------------------------------------------------------------
+//
+CNATFWStream* CNATFWStream::NewL(
+ MNATFWRegistrationController& aController,
+ CNcmConnectionMultiplexer& aMultiplexer,
+ CNatFwAsyncCallback& aAsyncCallback,
+ CNATFWSession& aContext,
+ TUint aProtocol, TInt aQoS )
+ {
+ CNATFWStream* self = CNATFWStream::NewLC( aController, aMultiplexer,
+ aAsyncCallback, aContext, aProtocol, aQoS );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::NewLC
+// ---------------------------------------------------------------------------
+//
+CNATFWStream* CNATFWStream::NewLC(
+ MNATFWRegistrationController& aController,
+ CNcmConnectionMultiplexer& aMultiplexer,
+ CNatFwAsyncCallback& aAsyncCallback,
+ CNATFWSession& aContext,
+ TUint aProtocol, TInt aQoS )
+ {
+ CNATFWStream* self = new ( ELeave ) CNATFWStream( aController,
+ aMultiplexer, aAsyncCallback, aContext, aProtocol, aQoS );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::~CNATFWStream
+// ---------------------------------------------------------------------------
+//
+CNATFWStream::~CNATFWStream()
+ {
+ __NATFWCLIENT("CNATFWStream::~CNATFWStream")
+
+ iPlugin = NULL;
+ TInt err = KErrNone;
+ TRAP( err, iMultiplexer.RemoveStreamL( iStreamId ) );
+
+ __NATFWCLIENT_INT1( "CNATFWStream::~CNATFWStream end, ERR:", err )
+ }
+
+
+// Non-derived function
+
+// ---------------------------------------------------------------------------
+// Return unique identifier of the stream.
+// ---------------------------------------------------------------------------
+//
+TUint CNATFWStream::StreamId() const
+ {
+ return iStreamId;
+ }
+
+// Derived function
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::CreateWrapperL
+// ---------------------------------------------------------------------------
+//
+MNATFWSocketMediaConnWrapper& CNATFWStream::CreateWrapperL( )
+ {
+ __NATFWCLIENT("CNATFWStream::CreateWrapperL")
+
+ CNATFWSocketMediaConnWrapper* wrapper =
+ CNATFWSocketMediaConnWrapper::NewL(
+ iMultiplexer.PortStoreL( iContext.SessionId() ).Port(),
+ iProtocol, iStreamId );
+
+ // Ownership transfered to Connection Multiplexer
+ iMultiplexer.RegisterMediaWrapperL( wrapper );
+ return *wrapper;
+ }
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::SetProtocolPlugin
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::SetProtocolPlugin( CNATFWPluginApi* aPlugin )
+ {
+ __NATFWCLIENT("CNATFWStream::SetProtocolPlugin")
+ iPlugin = aPlugin;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::FetchCandidateL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::FetchCandidateL( TUint aAddrFamily )
+ {
+ __NATFWCLIENT("CNATFWStream::FetchCandidateL")
+ __ASSERT_ALWAYS( iPlugin, User::Leave( KErrNotReady ) );
+
+ iPlugin->FetchCandidateL( iStreamId, 0, aAddrFamily );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::FetchCandidatesL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::FetchCandidatesL( TUint aCollectionId,
+ TUint aComponentId, TUint aAddrFamily )
+ {
+ __NATFWCLIENT("CNATFWStream::FetchCandidatesL")
+ __ASSERT_ALWAYS( iPlugin, User::Leave( KErrNotReady ) );
+
+ iPlugin->FetchCandidatesL(
+ aCollectionId, iStreamId, aComponentId, aAddrFamily );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::SetCredentialsL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::SetCredentialsL(
+ const CNATFWCandidate& aCandidate,
+ const CNATFWCredentials& aCredentials )
+ {
+ __NATFWCLIENT("CNATFWStream::SetCredentialsL")
+ __ASSERT_ALWAYS( iPlugin, User::Leave( KErrNotReady ) );
+
+ iPlugin->SetCredentialsL( aCandidate, aCredentials );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::SetReceivingStateL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::SetReceivingStateL(
+ const CNATFWCandidate& aLocalCandidate,
+ TNATFWStreamingState aState )
+ {
+ TUint connectionForMedia( 0 );
+ iPlugin->GetConnectionIdL( aLocalCandidate, connectionForMedia );
+
+ iPlugin->SetReceivingStateL( aLocalCandidate, aState );
+ iMultiplexer.SetReceivingStateForMediaL(
+ iStreamId, connectionForMedia, aState );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::SetSendingStateL
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::SetSendingStateL(
+ const CNATFWCandidate& aLocalCandidate,
+ TNATFWStreamingState aState, const TInetAddr& aDestAddr )
+ {
+ iDestAddr = aDestAddr;
+ TUint connectionForMedia( 0 );
+ iPlugin->GetConnectionIdL( aLocalCandidate, connectionForMedia );
+
+ iPlugin->SetSendingStateL( aLocalCandidate, aState, aDestAddr );
+ iMultiplexer.SetSendingStateForMediaL(
+ iStreamId, connectionForMedia, aState );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::Notify
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::Notify( TUint aSessionId, TUint aStreamId,
+ MNcmConnectionMultiplexerObserver::TNotifyType aType, TInt aError )
+ {
+ __NATFWCLIENT_INT2(
+ "CNATFWStream::Notify, SESSION:", aSessionId, "STREAM:", aStreamId )
+
+ switch ( aType )
+ {
+ case MNcmConnectionMultiplexerObserver::EReceivingActivated:
+ {
+ __NATFWCLIENT_INT1(
+ "CNATFWStream::Notify, EReceivingActivated, ERR:", aError )
+
+ DoNotify( aSessionId, aStreamId,
+ MNATFWConnectivityObserver::EReceivingActivated, aError );
+ }
+ break;
+
+ case MNcmConnectionMultiplexerObserver::EReceivingDeactivated:
+ {
+ __NATFWCLIENT_INT1(
+ "CNATFWStream::Notify, EReceivingDeactivated, ERR:", aError )
+
+ DoNotify( aSessionId, aStreamId,
+ MNATFWConnectivityObserver::EReceivingDeactivated, aError );
+ }
+ break;
+
+ case MNcmConnectionMultiplexerObserver::ESendingActivated:
+ {
+ __NATFWCLIENT_INT1(
+ "CNATFWStream::Notify, ESendingActivated, ERR:", aError )
+
+ DoNotify( aSessionId, aStreamId,
+ MNATFWConnectivityObserver::ESendingActivated, aError );
+ }
+ break;
+
+ case MNcmConnectionMultiplexerObserver::ESendingDeactivated:
+ {
+ __NATFWCLIENT_INT1(
+ "CNATFWStream::Notify, ESendingDeactivated, ERR:", aError )
+
+ DoNotify( aSessionId, aStreamId,
+ MNATFWConnectivityObserver::ESendingDeactivated, aError );
+ }
+ break;
+
+ case MNcmConnectionMultiplexerObserver::EStreamError:
+ {
+ __NATFWCLIENT_INT1(
+ "CNATFWStream::Notify, EStreamError, ERR:", aError )
+
+ DoNotify( aSessionId, aStreamId,
+ MNATFWConnectivityObserver::EGeneralError, aError );
+ }
+ break;
+
+ default:
+ __NATFWCLIENT("CNATFWStream::Notify, DEFAULT")
+
+ ASSERT( EFalse );
+ break;
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CNATFWStream::DoNotify
+// ---------------------------------------------------------------------------
+//
+void CNATFWStream::DoNotify( TUint aSessionId, TUint aStreamId,
+ MNATFWConnectivityObserver::TNATFWConnectivityEvent aEvent, TInt aError )
+ {
+
+ CNatFwCallbackInfo::TFunction func =
+ static_cast<CNatFwCallbackInfo::TFunction>( aEvent );
+
+ TRAP_IGNORE( iAsyncCallback.MakeCallbackL( iController, func,
+ aSessionId, aStreamId, aError, NULL ) )
+ }
+