diff -r 000000000000 -r e686773b3f54 logsui/AppSrc/CLogsExtensionLoader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/logsui/AppSrc/CLogsExtensionLoader.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2002 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 for extension dll loader. +* +*/ + + +// INCLUDE FILES +#include "CLogsExtensionLoader.h" +#include "TLogsDummyExtensionFactory.h" +#include "ExtensionUID.h" +#include //KDC_APP_BITMAP_DIR and KDC_SHARED_LIB_DIR +#include + +// MODULE DATA STRUCTURES +typedef MLogsExtensionFactory* (*TExtensionEntryPoint)(); + + +// ================= MEMBER FUNCTIONS ======================= +inline CLogsExtensionLoader::CLogsExtensionLoader() + { + } + +inline void CLogsExtensionLoader::ConstructL() + { + //Tries to load the extension dll and initialise iFactory to point to the loaded dll + TRAPD(err, LoadExtensionDllL()); + + //If dll is not part of rom image then initialise iFactory to point to dummy implementation instead + if (err) + { + if ( iFactory ) + { + iFactory->Release(); + iFactory = NULL; + } + iFactory = TLogsDummyExtensionFactory::NewL(); + } + } + +CLogsExtensionLoader* CLogsExtensionLoader::NewL() + { + CLogsExtensionLoader* self = new (ELeave) CLogsExtensionLoader; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CLogsExtensionLoader::~CLogsExtensionLoader() + { + if ( iFactory ) + { + iFactory->Release(); + iFactory = NULL; + } + iDll.Close(); // This has to be last + } + +//Returns refrence to loaded dll's factory functionality or default implementation +MLogsExtensionFactory& CLogsExtensionLoader::ExtensionFactory() + { + return *iFactory; + } + +TUidType CLogsExtensionLoader::UidType() + { + return TUidType(KNullUid, TUid::Uid(KExtensionDllUID2), KNullUid); + } + +void CLogsExtensionLoader::LoadExtensionDllL() + { + // If voip is not supported then don't try to load the + // extension dll, leave will cause the dummy extension to be + // used instead + if ( !FeatureManager::FeatureSupported(KFeatureIdCommonVoip)) + { + User::Leave(KErrNotFound); + } + else + { + // Set up path+filename for extension dll + TFileName dllFileWithPath; + + dllFileWithPath += KDC_SHARED_LIB_DIR; + dllFileWithPath += KLogsUiExtensionDllFile; + + User::LeaveIfError(iDll.Load(dllFileWithPath, UidType())); + + // Get the 1st entry point from the DLL + TExtensionEntryPoint createExtensionFactoryL = + reinterpret_cast(iDll.Lookup(1)); + + if (!createExtensionFactoryL) + { + User::Leave(KErrNotFound); + } + + // Call the entry point to create the test suite + iFactory = createExtensionFactoryL(); + if (!iFactory) + { + User::Leave(KErrNotFound); + } + } + } + +// End of File