diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SampleApp/resolverplugin/Src/SIPExResolverPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SampleApp/resolverplugin/Src/SIPExResolverPlugin.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,151 @@ +// Copyright (c) 2005-2009 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 "SIPExResolverPlugin.h" + +#include + +// SIPEx capabilities - could be also defined in resource of this plugin +// but then length of capablities text is in resource file limited to +// 255 characters. However, defining capabilities in resource file's opaque_data +// field is more efficient way. +_LIT8(KCapabilities, +"\ +\ +\ +\ +\ +\ +\ +\ +"); + +// ----------------------------------------------------------------------------- +// CTTCNResolverPlugin1::NewL +// ----------------------------------------------------------------------------- +// +CSIPExResolverPlugin* CSIPExResolverPlugin::NewL() + { + CSIPExResolverPlugin* self = new ( ELeave ) CSIPExResolverPlugin; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CSIPExResolverPlugin::ConstructL +// ----------------------------------------------------------------------------- +// +void CSIPExResolverPlugin::ConstructL() + { + const TUid KMyImplementationUid = { KSIPExResolverPluginUID }; + + RImplInfoPtrArray infoArray; + REComSession::ListImplementationsL( KSIPResolvedClientIFUid, infoArray ); + CleanupStack::PushL( TCleanupItem( ResetAndDestroy, &infoArray ) ); + + TBool found = EFalse; + for ( TInt i=0; !found && i < infoArray.Count(); i++ ) + { + CImplementationInformation* info = infoArray[ i ]; + if ( info->ImplementationUid() == KMyImplementationUid ) + { + TLex8 lex( info->DataType() ); + TUint value( 0 ); + User::LeaveIfError( lex.Val( value, EHex ) ); + iApplicationUID.iUid = value; + found = ETrue; + } + } + + CleanupStack::PopAndDestroy( 1 ); // infoArray + + if ( !found ) + { + User::Leave( KErrNotFound ); + } + + User::LeaveIfError( iApaSession.Connect() ); + User::LeaveIfError( iApaSession.GetAppInfo( iAppInfo, iApplicationUID ) ); + } + +// ----------------------------------------------------------------------------- +// CSIPExResolverPlugin::~CSIPExResolverPlugin +// ----------------------------------------------------------------------------- +// +CSIPExResolverPlugin::~CSIPExResolverPlugin() + { + iApaSession.Close(); + } + +// ----------------------------------------------------------------------------- +// CSIPExResolverPlugin::ChannelL +// ----------------------------------------------------------------------------- +// +TUid CSIPExResolverPlugin::ChannelL( RStringF /*aMethod*/, + const TDesC8& /*aRequestUri*/, + const RPointerArray& /*aHeaders*/, + const TDesC8& /*aContent*/, + const CSIPContentTypeHeader* /*aContentType*/) + { + return iApplicationUID; + } + + +// ----------------------------------------------------------------------------- +// CSIPExResolverPlugin::ConnectL +// ----------------------------------------------------------------------------- +// +void CSIPExResolverPlugin::ConnectL( TUid aUid ) + { + // Launch app based on uid passed from SIP stack + // + 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 ); + } + +// ----------------------------------------------------------------------------- +// CTTCNResolverPlugin1::Capabilities +// ----------------------------------------------------------------------------- +// +const TDesC8& CSIPExResolverPlugin::Capabilities() + { + return KCapabilities; + } + +// ----------------------------------------------------------------------------- +// CSIPExResolverPlugin::ResetAndDestroy +// ----------------------------------------------------------------------------- +// +void CSIPExResolverPlugin::ResetAndDestroy( TAny* anArray ) + { + RImplInfoPtrArray* array = reinterpret_cast( anArray ); + if (array) + { + array->ResetAndDestroy(); + } + } +