diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmcemediamanager/src/mcenatpluginmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmcemediamanager/src/mcenatpluginmanager.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,448 @@ +/* +* Copyright (c) 2005 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 +#include +#include +#include +#include +#include "mcenatpluginmanager.h" +#include "mcemmlogs.h" +#include "mcecomsession.h" +#include "mceloglineparser.h" + +const TUint KProtocolUdp = 2; + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::NewL +// ----------------------------------------------------------------------------- +// +CMceNatPluginManager* CMceNatPluginManager::NewL() + { + CMceNatPluginManager* self = new (ELeave) CMceNatPluginManager(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceNatPluginManager::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::CMceNatPluginManager +// ----------------------------------------------------------------------------- +// +CMceNatPluginManager::CMceNatPluginManager() + { + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::~CMceNatPluginManager +// ----------------------------------------------------------------------------- +// +CMceNatPluginManager::~CMceNatPluginManager() + { + if( iPlugin ) + { + delete iPlugin; + } + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::GetPluginL +// ----------------------------------------------------------------------------- +// +void CMceNatPluginManager::GetPluginL() + { + MCEMM_DEBUG( "********* CMceNatPluginManager::GetPluginL, Entry" ); + + if ( NULL == iPlugin ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::GetPluginL, INIT" ) + + RImplInfoPtrArray infoArray; + CleanupStack::PushL( TCleanupItem( ResetAndDestroyInfo, &infoArray ) ); + REComSession::ListImplementationsL( KNSPPluginIFUid, infoArray ); + + if ( infoArray.Count() > 0 && infoArray[ 0 ] ) + { + iPlugin = reinterpret_cast< CNSPPlugin* >( + REComSession::CreateImplementationL( + infoArray[0]->ImplementationUid(), + _FOFF( CNSPPlugin, iDtor_ID_Key ) ) ); + } + else + { + User::Leave( KErrNotFound ); + } + CleanupStack::Pop(); // TCleanupItem + infoArray.ResetAndDestroy(); + } + + MCEMM_DEBUG( "********* CMceNatPluginManager::GetPluginL, Exit" ); + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::NewSessionL +// ----------------------------------------------------------------------------- +// +TInt CMceNatPluginManager::NewSessionL( MNSPSessionObserver& aNatSessionObserver, + TUint32 aIapId, const TDesC8& aDomain ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::NewSessionL, Entry" ); + + TUint sessionId( 0 ); + + if ( NULL != iPlugin ) + { + sessionId = iPlugin->NewSessionL( aNatSessionObserver, + aIapId, aDomain, KProtocolUdp ); + } + else + { + User::Leave( KErrNotFound ); + } + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::NewSessionL, Exit, sessionId", + sessionId ); + + return sessionId; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::CloseSessionL +// ----------------------------------------------------------------------------- +// +void CMceNatPluginManager::CloseSessionL( TUint aSessionId ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::CloseSessionL, Entry" ); + + if ( NULL != iPlugin ) + { + iPlugin->CloseSessionL( aSessionId ); + } + else + { + User::Leave( KErrNotFound ); + } + + MCEMM_DEBUG( "********* CMceNatPluginManager::CloseSessionL, Exit" ); + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::CreateOfferL +// ----------------------------------------------------------------------------- +// +TNatReturnStatus CMceNatPluginManager::CreateOfferL( + TUint aSessionId, + CSdpDocument*& aOffer ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::CreateOfferL, Entry" ); + + WriteSdpToLog( _L("Offer on entry"), aOffer ); + + TNatReturnStatus status = KErrNotFound; + + if ( NULL != iPlugin ) + { + status = iPlugin->CreateOfferL( aSessionId, aOffer ); + } + else + { + User::Leave( KErrNotFound ); + } + + WriteSdpToLog( _L("Offer on exit"), aOffer ); + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::CreateOfferL, Exit(status)=", status ); + + return status; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::ResolveL +// ----------------------------------------------------------------------------- +// +TNatReturnStatus CMceNatPluginManager::ResolveL( + TUint aSessionId, + CSdpDocument*& aOffer, + CSdpDocument*& aAnswer ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::ResolveL, Entry" ); + + WriteSdpToLog( _L("Offer on entry"), aOffer ); + + WriteSdpToLog( _L("Answer on entry"), aAnswer ); + + TNatReturnStatus status = KErrNotFound; + + if ( NULL != iPlugin ) + { + status = iPlugin->ResolveL( aSessionId, aOffer, aAnswer ); + } + else + { + User::Leave( KErrNotFound ); + } + + WriteSdpToLog( _L("Offer on exit"), aOffer ); + + WriteSdpToLog( _L("Answer on exit"), aAnswer ); + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::ResolveL, Exit(status)=", status ); + + return status; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::DecodeAnswerL +// ----------------------------------------------------------------------------- +// +TNatReturnStatus CMceNatPluginManager::DecodeAnswerL( + TUint aSessionId, + CSdpDocument*& aAnswer ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::DecodeAnswerL, Entry" ); + + WriteSdpToLog( _L("Answer on entry"), aAnswer ); + + TNatReturnStatus status = KErrNotFound; + + if ( NULL != iPlugin ) + { + status = iPlugin->DecodeAnswerL( aSessionId, aAnswer ); + } + else + { + User::Leave( KErrNotFound ); + } + + WriteSdpToLog( _L("Answer on exit"), aAnswer ); + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::DecodeAnswerL, Exit(status)=", status ); + + return status; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::UpdateL +// ----------------------------------------------------------------------------- +// +void CMceNatPluginManager::UpdateL( TUint aSessionId, CSdpDocument*& aOffer ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::UpdateL, Entry" ); + + WriteSdpToLog( _L("Offer on entry"), aOffer ); + + if ( NULL != iPlugin ) + { + iPlugin->UpdateL( aSessionId, aOffer ); + } + else + { + User::Leave( KErrNotFound ); + } + + WriteSdpToLog( _L("Offer on exit"), aOffer ); + + MCEMM_DEBUG( "********* CMceNatPluginManager::UpdateL, Exit" ); + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::RestartL +// ----------------------------------------------------------------------------- +// +TNatReturnStatus CMceNatPluginManager::RestartL( TUint aSessionId ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::RestartL, Entry" ); + + TNatReturnStatus status = KErrNotFound; + + if ( NULL != iPlugin ) + { + status = iPlugin->RestartL( aSessionId ); + } + else + { + User::Leave( KErrNotFound ); + } + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::RestartL, Exit(status)=", status ); + + return status; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::NatEnabled +// ----------------------------------------------------------------------------- +// +TBool CMceNatPluginManager::NatEnabledL() + { + TRAPD( error, GetPluginL() ); + if(KErrNoMemory == error) + { + User::Leave( KErrNoMemory ); + } + if ( KErrNone == error ) + { + if ( NULL != iPlugin ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::NatEnabled: TRUE" ); + return ETrue; + } + else + { + MCEMM_DEBUG( "********* CMceNatPluginManager::NatEnabled: FALSE" ); + return EFalse; + } + } + else + { + MCEMM_DEBUG( "********* CMceNatPluginManager::NatEnabled: FALSE(ELeave)" ); + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::SetSessionParam +// ----------------------------------------------------------------------------- +// +TInt CMceNatPluginManager::SetSessionParam( + TUint aSessionId, + CNSPPlugin::TNSPSessionParamKey aParamKey, + TUint aParamValue ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::SetSessionParam, Entry" ); + + TInt status = KErrNone; + + if( iPlugin == NULL) + { + status = KErrNotFound; + } + else + { + status = iPlugin->SetSessionParam( aSessionId, aParamKey, aParamValue ); + } + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::SetSessionParam, Exit(status)=", status ); + + return status; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::GetSessionParam +// ----------------------------------------------------------------------------- +// +TInt CMceNatPluginManager::GetSessionParam( + TUint aSessionId, + CNSPPlugin::TNSPSessionParamKey aParamKey ) + { + MCEMM_DEBUG( "********* CMceNatPluginManager::GetSessionParam, Entry" ); + + TInt status = KErrNone; + + if( iPlugin == NULL) + { + status = KErrNotFound; + } + else + { + status = iPlugin->GetSessionParam( aSessionId, aParamKey ); + } + + MCEMM_DEBUG_DVALUE( "********* CMceNatPluginManager::GetSessionParam, Exit(status)=", status ); + + return status; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::WriteSdpToLog +// ----------------------------------------------------------------------------- +// +#ifdef _DEBUG +void CMceNatPluginManager::WriteSdpToLog( + const TDesC& aMsg, + CSdpDocument* aSdp ) + { + if ( aSdp ) + { + MCEMM_DEBUG_SVALUE( "", aMsg ) + CBufBase* buf = NULL; + TRAPD( err, buf = EncodeSdpL( *aSdp ) ) + + if ( err == KErrNone && buf != NULL ) + { + TMceLogLineParser lineParser( buf->Ptr( 0 ), 80 ); + + while ( !lineParser.End() ) + { + MCEMM_DEBUG_SVALUE( "", lineParser.GetLine() ) + } + } + delete buf; + } + else + { + MCEMM_DEBUG( "SDP document NULL" ); + } + } +#else +void CMceNatPluginManager::WriteSdpToLog( const TDesC& /* aMsg */, + CSdpDocument* /* aSdp */ ) + { + + } +#endif + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::EncodeSdpL +// ----------------------------------------------------------------------------- +// +CBufBase* CMceNatPluginManager::EncodeSdpL( + CSdpDocument& aSdp ) + { + CBufFlat* buf = CBufFlat::NewL( 100 ); + CleanupStack::PushL( buf ); + RBufWriteStream writeStream; + writeStream.Open( *buf, 0 ); + aSdp.EncodeL( writeStream ); + writeStream.Close(); + CleanupStack::Pop( buf ); + return buf; + } + +// ----------------------------------------------------------------------------- +// CMceNatPluginManager::ResetAndDestroyInfo +// ----------------------------------------------------------------------------- +// +void CMceNatPluginManager::ResetAndDestroyInfo(TAny* aArray) + { + RPointerArray< CImplementationInformation >* array = + static_cast< RPointerArray< CImplementationInformation >* >( aArray ); + array->ResetAndDestroy(); + } + +// end of file