diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/src/mcecssessionimplementation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceserver/src/mcecssessionimplementation.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,768 @@ +/* +* 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 "mcecssessionimplementation.h" +#include "mcecssession.h" +#include "mcecssessionreceiver.h" +#include "mcecomaudiocodec.h" +#include "mcecomvideocodec.h" +#include "mcecssubsession.h" +#include "mcesipmanager.h" +#include "mcemediamanager.h" +#include "mcesipdefaults.h" +#include "mcesrvlogs.h" +#include "mceserial.h" +#include "mcecommediasink.h" +#include "mcefilesource.h" +#include "mcecomcamerasource.h" + + + +#define MCE_WRITE( aType, aData )\ + aType writeBuf( aData );\ + aInfo.Copy( writeBuf ); + + +#define MCE_READ( aCastType, aType, aData )\ + aCastType readBuf;\ + readBuf.Copy( aInfo );\ + aType aData = readBuf(); + + +_LIT(KMceApplPrivatePath, "%3Sprivate\\%x\\"); +_LIT(KMceRootPath, "%3S"); + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::NewL +// ----------------------------------------------------------------------------- +// +CMceCsSessionImplementation* CMceCsSessionImplementation::NewL( + CMceSipManager& aManager, + CMceCsSession* aITCProvider ) + { + CMceCsSessionImplementation* self = + CMceCsSessionImplementation::NewLC( aManager, aITCProvider ); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::NewLC +// ----------------------------------------------------------------------------- +// +CMceCsSessionImplementation* CMceCsSessionImplementation::NewLC( + CMceSipManager& aManager, + CMceCsSession* aITCProvider ) + { + CMceCsSessionImplementation* self = + new (ELeave) CMceCsSessionImplementation( aManager, *aITCProvider ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::CMceCsSessionImplementation +// ----------------------------------------------------------------------------- +// +CMceCsSessionImplementation::CMceCsSessionImplementation( + CMceSipManager& aManager, + CMceCsSession& aITCProvider ) +: iManager( aManager ), + iITCProvider( &aITCProvider ) + { + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::ConstructL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::ConstructL () + { + MCESRV_DEBUG("CMceCsSessionImplementation::ConstructL, Entry"); + iDefaults = CMceSipDefaults::NewL(); + MCESRV_DEBUG("CMceCsSessionImplementation::ConstructL, Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::~CMceCsSessionImplementation +// ----------------------------------------------------------------------------- +// +CMceCsSessionImplementation::~CMceCsSessionImplementation() + { + delete iDefaults; + iSubSessions.ResetAndDestroy(); + iSubSessions.Close(); + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::ServerCore +// ----------------------------------------------------------------------------- +// +RPointerArray& CMceCsSessionImplementation::SubSessions() + { + return iSubSessions; + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::SupportedAudioCodecsL +// ----------------------------------------------------------------------------- +// +HBufC8* CMceCsSessionImplementation::SupportedAudioCodecsL() + { + + MCESRV_DEBUG("CMceCsSessionImplementation::SupportedAudioCodecsL, Entry"); + CDesC8ArrayFlat* codecs = NULL; + HBufC8* codecsAsString = NULL; + + RPointerArray supportedCodecs; + CleanupStack::PushL( TCleanupItem( ArrayCleanup, &supportedCodecs ) ); + + iManager.MediaManager().GetCapabilitiesL( supportedCodecs ); + + codecs = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity ); + CleanupStack::PushL( codecs ); + + for ( int i=0;i* codecMsg = + new (ELeave) CMceMsgObject + ( *codec, EMceItcMsgTypeCodec ); + CleanupStack::PushL( codecMsg ); + + codecMsg->EncodeL(); + codecs->AppendL( codecMsg->EncodeBuffer().Ptr(0) ); + CleanupStack::PopAndDestroy( codecMsg ); + } + CMceMsgTextArray* msgCodecs = new (ELeave) CMceMsgTextArray( *codecs ); + CleanupStack::PushL( msgCodecs ); + msgCodecs->EncodeL(); + + codecsAsString = msgCodecs->EncodeBufferCloneL(); + + CleanupStack::PopAndDestroy( msgCodecs ); + CleanupStack::PopAndDestroy( codecs ); + CleanupStack::PopAndDestroy( &supportedCodecs ); //TCleanupItem + + MCESRV_DEBUG("CMceCsSessionImplementation::SupportedAudioCodecsL, Exit"); + + return codecsAsString; + + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::SupportedVideoCodecsL +// ----------------------------------------------------------------------------- +// +HBufC8* CMceCsSessionImplementation::SupportedVideoCodecsL() + { + + MCESRV_DEBUG("CMceCsSessionImplementation::SupportedVideoCodecsL, Entry"); + CDesC8ArrayFlat* codecs = NULL; + HBufC8* codecsAsString = NULL; + + RPointerArray supportedCodecs; + CleanupStack::PushL( TCleanupItem( ArrayCleanup, &supportedCodecs ) ); + + iManager.MediaManager().GetCapabilitiesL( supportedCodecs ); + + codecs = new (ELeave) CDesC8ArrayFlat( KMceArrayGranularity ); + CleanupStack::PushL( codecs ); + + for ( int i=0;i* codecMsg = + new (ELeave) CMceMsgObject + ( *codec, EMceItcMsgTypeCodec ); + CleanupStack::PushL( codecMsg ); + + codecMsg->EncodeL(); + codecs->AppendL( codecMsg->EncodeBuffer().Ptr(0) ); + CleanupStack::PopAndDestroy( codecMsg ); + } + CMceMsgTextArray* msgCodecs = new (ELeave) CMceMsgTextArray( *codecs ); + CleanupStack::PushL( msgCodecs ); + msgCodecs->EncodeL(); + + codecsAsString = msgCodecs->EncodeBufferCloneL(); + + CleanupStack::PopAndDestroy( msgCodecs ); + CleanupStack::PopAndDestroy( codecs ); + CleanupStack::PopAndDestroy( &supportedCodecs ); //TCleanupItem + + MCESRV_DEBUG("CMceCsSessionImplementation::SupportedVideoCodecsL, Exit"); + + return codecsAsString; + + } + + + +// ----------------------------------------------------------------------------- +// CMceCsSession::DoServiceL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::DoServiceL( TMceIds& aIds, TInt aFunction, TPtr8& aInfo ) + { + + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL( read ), Entry"); + + switch( aFunction ) + { + case EMceItcCameraInfo: + { + MCESRV_DEBUG("getting camera info"); + MCE_READ( TMceItcArgTCameraInfo, TMceCameraInfo, cameraInfo ); + iManager.MediaManager().GetCameraInfoL( cameraInfo.iIndex, + cameraInfo.iInfo ); + MCE_WRITE( TMceItcArgTCameraInfo, cameraInfo ); + break; + } + case EMceItcCamerasAvailable: + { + TInt camerasAvailable = KErrNotFound; + iManager.MediaManager().GetCamerasAvailableL( camerasAvailable ); + MCESRV_DEBUG_DVALUE("getting available cameras. #", camerasAvailable ); + MCE_WRITE( TMceItcArgTInt, camerasAvailable ); + break; + } + case EMceItcDisplaysAvailable: + { + TInt displaysAvailable = KErrNotFound; + iManager.MediaManager().GetDisplaysAvailableL( displaysAvailable ); + MCESRV_DEBUG_DVALUE("getting displays available. value", displaysAvailable ); + MCE_WRITE( TMceItcArgTInt, displaysAvailable ); + break; + } + case EMceItcFileInfo: + { + MCESRV_DEBUG("getting file info"); + TMceItcArgTFileInfo readBuf; + readBuf.Copy( aInfo ); + TMceFileInfo& fileInfo = readBuf(); + GetFileInfoL( aIds, fileInfo ); + MCE_WRITE( TMceItcArgTFileInfo, fileInfo ); + break; + } + case EMceItcMaxVolume: + { + TInt maxVolume = KErrNotFound; + iManager.MediaManager().GetMaxVolumeL( maxVolume ); + MCESRV_DEBUG_DVALUE("getting max volume. value", maxVolume ); + MCE_WRITE( TMceItcArgTInt, maxVolume ); + break; + } + case EMceItcMaxGain: + { + TInt maxGain = KErrNotFound; + iManager.MediaManager().GetMaxGainL( maxGain ); + MCESRV_DEBUG_DVALUE("getting max volume. value", maxGain ); + MCE_WRITE( TMceItcArgTInt, maxGain ); + break; + } + default: + { + #ifndef ALLOW_NOT_SUPPORTED_ITC + User::Leave(KErrNotSupported); + #endif + } + } + + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL( read ), Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::DoServiceL +// ----------------------------------------------------------------------------- +// +HBufC8* CMceCsSessionImplementation::DoServiceL( TMceIds& /*aIds*/, TInt /*aFunction*/ ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL(no data), Entry"); + HBufC8* returnMessage = NULL; + #ifndef ALLOW_NOT_SUPPORTED_ITC + User::Leave(KErrNotSupported); + #endif + + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL(no data), Exit"); + + return returnMessage; + + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::DoServiceL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::DoServiceL( TMceIds& /*aIds*/, TInt aFunction, const TDesC8& aInfo ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL( write ), Entry"); + + switch( aFunction ) + { + case EMceItcCancelTranscode: + { + MCESRV_DEBUG("cancelling transcode"); + MCE_READ( TMceItcArgTUint32, TUint32, sessionId ); + iManager.MediaManager().CancelTranscodeFileL( sessionId ); + break; + } + default: + { + #ifndef ALLOW_NOT_SUPPORTED_ITC + User::Leave(KErrNotSupported); + #endif + } + } + + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL( write ), Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::DoServiceL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::DoServiceL( TMceIds& aIds, TInt aFunction, + CMceMsgBase& aMessage ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL( message ), Entry"); + switch( aFunction ) + { + case EMceItcTranscode: + { + MCESRV_DEBUG("transcoding"); + CMceMsgObject* msg = + static_cast*>( &aMessage ); + + CMceComFileSource* file = msg->Object(); + CleanupStack::PushL( file ); + file->iClient = this; + TUint32 sessionId = iManager.MediaManager().TranscodeFileL( file ); + aIds.Set( KMceIdsIndexTCId, sessionId ); + CleanupStack::Pop( file ); + break; + } + case EMceItcTranscodeWithSession: + { + MCESRV_DEBUG("transcoding with session"); + + // Session structure is needed temporarily by mediamanager + // in order to find out output codec types. + // + CMceMsgObject* msg = + static_cast*>( &aMessage ); + + CMceComSession* session = msg->Object(); + CleanupStack::PushL( session ); + + CMceComFileSource* file = NULL; + for( TInt i = 0; session && ( i < session->Streams().Count() ) && !file; i++ ) + { + if ( session->Streams()[ i ]->Source() && + session->Streams()[ i ]->Source()->Type() == KMceFileSource ) + { + file = static_cast( + session->Streams()[ i ]->Source() ); + file->iClient = this; + } + } + __ASSERT_ALWAYS( file, User::Leave( KErrArgument ) ); + TUint32 sessionId = iManager.MediaManager().TranscodeFileL( file ); + aIds.Set( KMceIdsIndexTCId, sessionId ); + + // Filesource was taken in use from session by mediamanager + // (took ownership) and rest can be discarded. File is not deleted + // while deleting session because of ref count increase. + // + file->ReferenceCount()++; + CleanupStack::PopAndDestroy( session ); + break; + } + default: + { + #ifndef ALLOW_NOT_SUPPORTED_ITC + User::Leave(KErrNotSupported); + #endif + } + } + + MCESRV_DEBUG("CMceCsSessionImplementation::DoServiceL( message ), Exit"); + + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::GetFileInfoL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::GetFileInfoL( TMceIds& aIds, + TMceFileInfo& aFileInfo ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Entry"); + + // Save some stack + { + const RMessage2* itcContext = MCE_IDS_ITC_CONTEXT( aIds ); + const TDesC& fileName = aFileInfo.iFileName; + const TDesC& rootPath = PathInfo::PhoneMemoryRootPath(); + TFileName privatePath; + TFileName realRootPath; + + __ASSERT_ALWAYS( MCE_NOT_NULL_PTR( itcContext ) , User::Leave( KErrArgument ) ); + + + TUid clientUId = itcContext->SecureId(); + privatePath.Format(KMceApplPrivatePath, &rootPath, clientUId.iUid ); + realRootPath.Format(KMceRootPath, &rootPath ); + + MCESRV_DEBUG_SVALUE16("CMceCsSessionImplementation::GetFileInfoL, file", fileName ); + MCESRV_DEBUG_SVALUE16("CMceCsSessionImplementation::GetFileInfoL, root", rootPath ); + MCESRV_DEBUG_SVALUE16("CMceCsSessionImplementation::GetFileInfoL, private", privatePath ); + + if( itcContext->HasCapability( ECapabilityAllFiles ) ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Client has AllFiles capability"); + aFileInfo.iAccessRights = TMceFileInfo::EReadWrite; + } + else if( fileName.FindF( rootPath ) == 0 ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Client accessing phone root(data)"); + aFileInfo.iAccessRights = TMceFileInfo::EReadWrite; + } + else if( fileName.FindF( privatePath ) == 0 ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Client accessing private path"); + aFileInfo.iAccessRights = TMceFileInfo::EReadWrite; + } + else if( fileName.FindF( privatePath ) == 0 ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Client accessing private path"); + aFileInfo.iAccessRights = TMceFileInfo::EReadWrite; + } + else if( fileName.FindF( realRootPath ) == KErrNotFound ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Client accessing another drive"); + aFileInfo.iAccessRights = TMceFileInfo::EReadWrite; + } + else + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Permission denied"); + aFileInfo.iAccessRights = TMceFileInfo::EZero; + } + } + + if ( aFileInfo.iDirection >= TMceFileInfo::ERead && + aFileInfo.iAccessRights > TMceFileInfo::EZero ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Getting file info"); + iManager.MediaManager().GetFileInfoL( aFileInfo ); + } + + MCESRV_DEBUG("CMceCsSessionImplementation::GetFileInfoL, Exit"); + } + + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::StoreClientContent +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::StoreClientContent( HBufC8* aClientContent ) + { + delete aClientContent; + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::EventReceived +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::EventReceived( TMceMccComEvent& aEvent ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::EventReceived, Entry"); + + TMceIds ids; + ids.iManagerType = KMceCSSIPSession; + ids.iCallbackID = aEvent.iItcEvent; + ids.iMediaID = aEvent.iStream ? aEvent.iStream->Id() : KMceMediaIdNotAssigned; + ids.iSinkID = aEvent.iSink ? aEvent.iSink->Id() : KMceMediaIdNotAssigned; + ids.iSourceID = aEvent.iSource ? aEvent.iSource->Id() : KMceMediaIdNotAssigned; + ids.iState = aEvent.iItcData; + ids.iStatus = aEvent.iError; + + TRAP_IGNORE( SendToClientL( ids, NULL, NULL ) ); + + MCESRV_DEBUG("CMceCsSessionImplementation::EventReceived, Exit"); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::ArrayCleanup +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::ArrayCleanup(TAny* aArray) + { + RPointerArray* array = + reinterpret_cast*>(aArray); + if (array) + { + array->ResetAndDestroy(); + } + } + + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::SubSessionL +// ----------------------------------------------------------------------------- +// +CMceCsSubSession* CMceCsSessionImplementation::SubSessionL( TUint32 aSessionId ) + { + CMceCsSubSession* subSession = + reinterpret_cast( aSessionId ); + User::LeaveIfError( iSubSessions.Find( subSession ) ); + return subSession; + + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::FindSubSession +// ----------------------------------------------------------------------------- +// +const CMceCsSubSession* + CMceCsSessionImplementation::FindSubSession( TUint32 aDialogId ) + { + CMceCsSubSession* subSession = NULL; + TInt i = 0; + + while ( !subSession && i < iSubSessions.Count() ) + { + subSession = iSubSessions[i++]; + if ( subSession->DialogId() != aDialogId ) + { + subSession = NULL; + } + } + return subSession; + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::CreateSubSessionL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::CreateSubSessionL( TMceIds& aIds, + CDesC8Array& aParams ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::CreateSubSessionL, Entry"); + User::LeaveIfNull( iITCProvider ); + + CMceCsSubSession *subSession = + iManager.CreateSubSessionL( ClientSession(), aIds, aParams ); + + CleanupStack::PushL( subSession ); + iSubSessions.AppendL(subSession); + CleanupStack::Pop(subSession); + + aIds.iSessionID = MCE_SESSION_ID( subSession ); + aIds.iDialogID = subSession->DialogId(); + + MCESRV_DEBUG("CMceCsSessionImplementation::CreateSubSessionL, Exit"); + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::RemoveSubSessionL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::RemoveSubSessionL( TUint32 aSessionId ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::RemoveSubSessionL, Entry"); + MCESRV_DEBUG_DVALUE("id", aSessionId ); + + + CMceCsSubSession* subSession = SubSessionL( aSessionId ); + TInt index = iSubSessions.Find( subSession ); + iSubSessions.Remove( index ); + + if ( !subSession->CanDispose() && + !subSession->Terminate() ) + { + MCESRV_DEBUG("RemoveSubSessionL: could not terminate -> to orphans"); + CleanupStack::PushL( subSession ); + iManager.AddOrphanSubSessionL( subSession ); + CleanupStack::Pop( subSession ); + } + else + { + delete subSession; + } + + MCESRV_DEBUG("CMceCsSessionImplementation::RemoveSubSessionL, Exit"); + + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::RemoveAllSubSessions +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::RemoveAllSubSessions( TBool aMakeOrphan ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::RemoveAllSubSessions, Entry"); + + while( iSubSessions.Count() > 0 ) + { + TBool deleteSS = ETrue; + + CMceCsSubSession* subSession = iSubSessions[ 0 ]; + iSubSessions.Remove( 0 ); + + if ( !subSession->CanDispose() && + !subSession->Terminate() ) + { + if ( aMakeOrphan ) + { + TRAPD( error, iManager.AddOrphanSubSessionL( subSession ) ); + deleteSS = error == KErrNone ? EFalse : ETrue; + } + } + + if ( deleteSS ) + { + delete subSession; + } + } + MCESRV_DEBUG("CMceCsSessionImplementation::RemoveAllSubSessions, Exit"); + } + + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::SendToClientL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::SendToClientL( TMceIds& aIds, + HBufC8* aContext, + HBufC8* aContent ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::SendToClientL, Entry"); + + if ( !IsOrphan() ) + { + CMceCsSessionReceiver* receiver = ClientSession().ReceiverL( aIds ); + TMceIds ids = receiver->Ids(); + ids.Copy( aIds ); + + MCESRV_DEBUG_IDS("IDS", ids ); + + if ( aContent ) + { + receiver->SendToClientL( ids, aContext, aContent ); + } + else if( aContext ) + { + receiver->SendToClientL( ids, aContext ); + } + else + { + receiver->SendToClientL( ids ); + } + } + else + { + MCESRV_DEBUG("SendToClientL: orphan -> no recipient to send"); + delete aContext; + delete aContent; + } + + MCESRV_DEBUG("CMceCsSessionImplementation::SendToClientL, Exit"); + + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::IsOrphan +// ----------------------------------------------------------------------------- +// +TBool CMceCsSessionImplementation::IsOrphan() + { + return MCE_IS_NULL_PTR( iITCProvider ); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::ClientSession +// ----------------------------------------------------------------------------- +// +CMceCsSession& CMceCsSessionImplementation::ClientSession() + { + return *iITCProvider; + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::StoreDefaultHeadersL +// ----------------------------------------------------------------------------- +// +void CMceCsSessionImplementation::StoreDefaultHeadersL( CDesC8Array& aMethods, + CDesC8Array* aHeaders ) + { + iDefaults->StoreDefaultHeadersL( aMethods, aHeaders ); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::DefaultHeaders +// ----------------------------------------------------------------------------- +// +CDesC8Array& CMceCsSessionImplementation::DefaultHeaders( TInt aMethodInd ) + { + return iDefaults->DefaultHeaders( aMethodInd ); + } + +// ----------------------------------------------------------------------------- +// CMceCsSessionImplementation::DefaultHeaders +// ----------------------------------------------------------------------------- +// +HBufC8* CMceCsSessionImplementation::DefaultHeadersL( TDesC8& aMethod ) + { + MCESRV_DEBUG("CMceCsSessionImplementation::DefaultHeadersL, Entry"); + + CDesC8Array& headers = iDefaults->DefaultHeaders( aMethod ); + + CMceMsgTextArray* headersMsg = new (ELeave) CMceMsgTextArray( headers ); + CleanupStack::PushL( headersMsg ); + headersMsg->EncodeL(); + + HBufC8* headersStr = headersMsg->EncodeBufferCloneL(); + + CleanupStack::PopAndDestroy( headersMsg ); + + MCESRV_DEBUG("CMceCsSessionImplementation::DefaultHeadersL, Exit"); + + return headersStr; + + + } + +// End of File