diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/testdriver/siptester/ttcnresolverplugin/src/CTTCNResolverPluginBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/testdriver/siptester/ttcnresolverplugin/src/CTTCNResolverPluginBase.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,190 @@ +/* +* Copyright (c) 2004 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: Implementation. +* +*/ + +#include "CTTCNResolverPluginBase.h" +#include + + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::ConstructL +// ----------------------------------------------------------------------------- +// +void CTTCNResolverPluginBase::ConstructL() + { + TBool found = EFalse; + + const TUid KMyImplementationUid = { MyUid() }; + + TFileName uidFileName; + ConstructUidFileNameL( _L("c:\\ttcnresolverpluginuid"), + MyUid(), + _L(".txt"), + uidFileName ); + + HBufC8* uidText = ReadFileContentsL( uidFileName ); + if ( uidText ) + { + found = ETrue; + } + else + { + RImplInfoPtrArray infoArray; + REComSession::ListImplementationsL( KSIPResolvedClientIFUid, + infoArray ); + CleanupStack::PushL( TCleanupItem( ResetAndDestroy, &infoArray ) ); + + for (TInt i=0; !found && iImplementationUid() == KMyImplementationUid ) + { + uidText = info->DataType().AllocL(); + found = ETrue; + } + } + + CleanupStack::PopAndDestroy(); // infoArray + } + + if ( found ) + { + CleanupStack::PushL( uidText ); + TLex8 lex( *uidText ); + TUint value( 0 ); + User::LeaveIfError( lex.Val( value, EHex ) ); + iApplicationUID.iUid = value; + CleanupStack::PopAndDestroy( uidText ); + } + else + { + User::Leave( KErrNotFound ); + } + + User::LeaveIfError( iApaSession.Connect() ); + } + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::~CTTCNResolverPluginBase +// ----------------------------------------------------------------------------- +// +CTTCNResolverPluginBase::~CTTCNResolverPluginBase() + { + iApaSession.Close(); + } + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::ChannelL +// ----------------------------------------------------------------------------- +// +TUid CTTCNResolverPluginBase::ChannelL( RStringF /*aMethod*/, + const TDesC8& /*aRequestUri*/, + const RPointerArray& /*aHeaders*/, + const TDesC8& /*aContent*/, + const CSIPContentTypeHeader* /*aContentType*/) + { + return iApplicationUID; + } + + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::ConnectL +// ----------------------------------------------------------------------------- +// +void CTTCNResolverPluginBase::ConnectL( TUid aUid ) + { + TApaAppInfo appInfo; + User::LeaveIfError( iApaSession.GetAppInfo( appInfo, aUid ) ); + CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); + #ifdef EKA2 + cmdLine->SetExecutableNameL( appInfo.iFullName ); + #else + cmdLine->SetLibraryNameL( appInfo.iFullName ); + #endif + User::LeaveIfError( iApaSession.StartApp( *cmdLine ) ); + CleanupStack::PopAndDestroy( cmdLine ); + } + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::ResetAndDestroy +// ----------------------------------------------------------------------------- +// +void CTTCNResolverPluginBase::ResetAndDestroy( TAny* anArray ) + { + RImplInfoPtrArray* array = reinterpret_cast( anArray ); + if (array) + { + array->ResetAndDestroy(); + } + } + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::ReadFileContentsL +// ----------------------------------------------------------------------------- +// +HBufC8* CTTCNResolverPluginBase::ReadFileContentsL( + const TFileName& aFileName ) + { + RFs fs; + User::LeaveIfError( fs.Connect() ); + CleanupClosePushL( fs ); + + RFile file; + TInt err = file.Open( fs, aFileName, EFileRead ); + + HBufC8* fileContents = 0; + + if ( err == KErrNone ) + { + CleanupClosePushL( file ); + + TInt size( 0 ); + + User::LeaveIfError( file.Size( size ) ); + + fileContents = HBufC8::NewLC( size ); + + TPtr8 ptr( fileContents->Des() ); + User::LeaveIfError( file.Read( ptr ) ); + + CleanupStack::Pop( fileContents ); + CleanupStack::PopAndDestroy(); // file + } + + CleanupStack::PopAndDestroy(); // fs + + return fileContents; + } + +// ----------------------------------------------------------------------------- +// CTTCNResolverPluginBase::ConstructUidFileNameL +// ----------------------------------------------------------------------------- +// +void CTTCNResolverPluginBase::ConstructUidFileNameL( + const TDesC& aFilePath, + TInt aUid, + const TDesC& aExtension, + TFileName& aFileName ) + { + __ASSERT_ALWAYS( aFilePath.Length() + aExtension.Length() + 14 <= KMaxFileName, + User::Leave( KErrOverflow ) ); + + aFileName.Copy( aFilePath ); + aFileName.Append( _L("_") ); + aFileName.AppendNum( aUid, EHex ); + aFileName.Append( aExtension ); + } +