diff -r 000000000000 -r 1bce908db942 natfw/natfwclient/src/natfwstream.cpp --- /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( aEvent ); + + TRAP_IGNORE( iAsyncCallback.MakeCallbackL( iController, func, + aSessionId, aStreamId, aError, NULL ) ) + } +