telephonyserverplugins/common_tsy/phonetsy/src/cmmphonefactorytsy.cpp
branchopencode
changeset 32 58332560b319
parent 24 6638e7f4bd8f
--- a/telephonyserverplugins/common_tsy/phonetsy/src/cmmphonefactorytsy.cpp	Thu May 06 15:10:38 2010 +0100
+++ b/telephonyserverplugins/common_tsy/phonetsy/src/cmmphonefactorytsy.cpp	Wed Jun 02 16:33:50 2010 +0100
@@ -14,29 +14,28 @@
 // INCLUDE FILES
 //
 
+
+
 #include <featmgr/featurecontrol.h>
 #include <featureuids.h>
 
-#include <ctsy/mmtsy_names.h>
-#include <ctsy/serviceapi/ctsysatmessagingbase.h>
-
-#include "cmmmessagemanagerbase.h"
 #include "cmmphonefactorytsy.h"
 #include "cmmphonetsy.h"
+#include <ctsy/mmtsy_names.h>
 #include "MmTsy_conf.h"
-
-_LIT(KLtsyIniFile, "ltsydata.ini");
+#include "cmmmessagemanagerbase.h"
+#include <ctsy/serviceapi/ctsysatmessagingbase.h>
 
 #ifdef USING_CTSY_DISPATCHER
-_LIT(KDefaultLicenseeTsyDllName, "ctsydispatcher.dll");
-const TInt KDefaultLicenseeTsyUID3 =  0x10285C38;
-#else
-_LIT(KDefaultLicenseeTsyDllName, "licenseetsy.dll");
-const TInt KDefaultLicenseeTsyUID3 = 0x2000BEE4;
-#endif //USING_CTSY_DISPATCHER
+_LIT(KLicenseeTsyDllName, "licenseetsy.dll");
+_LIT(KCtsyDispatcherDllName, "ctsydispatcher.dll");
+
+const TInt KLicenseeTsyUID3 = 0x2000BEE4;
+const TInt KCtsyDispatcherUID3 =  0x10285C38;
 
 typedef MLtsyFactoryBase*(*TFactoryBaseNewL)();
 
+#endif //USING_CTSY_DISPATCHER
 // ======== MEMBER FUNCTIONS ========
 
 CMmPhoneFactoryTsy::CMmPhoneFactoryTsy()
@@ -63,8 +62,10 @@
 
 CMmPhoneFactoryTsy::~CMmPhoneFactoryTsy()
     {
+#ifdef USING_CTSY_DISPATCHER
     iLoadedLib.Close();
-    }
+#endif //USING_CTSY_DISPATCHER
+	}
 
 // ---------------------------------------------------------------------------
 // CMmPhoneFactoryTsy::NewPhoneL
@@ -81,24 +82,24 @@
     // In case of debug build, print flag info.
 #ifdef TF_LOGGING_ENABLED
     
-    RFeatureControl featureControl;
-    TInt err = featureControl.Open();
-    if (err != KErrNone)
-        {
+	RFeatureControl featureControl;
+	TInt err = featureControl.Open();
+	if (err != KErrNone)
+		{
 TFLOGSTRING("CMmPhoneFactoryTsy::NewPhoneL - failed to connect to FeatMgr");
-        }
-    else if (featureControl.FeatureSupported(NFeature::KCsVideoTelephony) == KFeatureSupported) 
+		}
+	else if (featureControl.FeatureSupported(NFeature::KCsVideoTelephony) == KFeatureSupported) 
         {
 TFLOGSTRING("TSY: __CS_VIDEO_TELEPHONY -flag is on");
         }
-    else if (featureControl.FeatureSupported(NFeature::KEmergencyCallsEnabledInOfflineMode) == KFeatureSupported)
+	else if (featureControl.FeatureSupported(NFeature::KEmergencyCallsEnabledInOfflineMode) == KFeatureSupported)
         {
 TFLOGSTRING("TSY: __COMMON_TSY__EMERGENCY_CALLS_ENABLED_IN_OFFLINE_MODE -flag is on");
         }
 
-    featureControl.Close();
+	featureControl.Close();
 #endif
-    
+	
     // Check if the Phone Name is OK
     if ( KErrNone == aName.CompareF( KMmTsyPhoneName ) )
         {
@@ -106,48 +107,58 @@
 
         // Create Message Manager (the 'core' of the LTSY Plug-in API)
         CMmMessageManagerBase* messageManager = CMmMessageManagerBase::NewL();
-        User::LeaveIfNull(messageManager);
-        CleanupStack::PushL( messageManager );
-        
-        // LTSY Plug-in API successfully created
-TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewL - Starting to open LicenceeTSY");
-        
-        // get TSY message manager callback object
-        MmMessageManagerCallback* callBack = 
-            messageManager->GetMessageManagerCallback();
+        if ( messageManager )
+            {
+	        CleanupStack::PushL( messageManager );
         
-        // Dynamic loading of LTSY
-        MLtsyFactoryBase* ltsyFactory = LoadLibraryL();
+            // LTSY Plug-in API successfully created
+TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewL - Starting to open LicenceeTSY");
+            
+            // get TSY message manager callback object
+            MmMessageManagerCallback* callBack = 
+                messageManager->GetMessageManagerCallback();
+            
+#ifdef USING_CTSY_DISPATCHER
+            iLtsyFactory = LoadLibraryL();
+#else
+            // library entry for LTSY, get base factory object
+            iLtsyFactory = LTsyFactoryL();
+            
+#endif //USING_CTSY_DISPATCHER
+
+            if( iLtsyFactory )
+                {
+                // Get message router from LTSY. All current interface versions
+                // have the same GetMessageRouter defined in version 1.
+                MLtsyFactoryV1* ptr_v1 = 
+                	static_cast<MLtsyFactoryV1*>( iLtsyFactory );
+                        
+                iMessageRouter = ptr_v1->GetMessageRouter( *callBack );
+		        User::LeaveIfNull( iMessageRouter );
         
-        // Get message router from LTSY. All current interface versions
-        // have the same GetMessageRouter defined in version 1.
-        MLtsyFactoryV1* ptr_v1 = 
-            static_cast<MLtsyFactoryV1*>( ltsyFactory );
-                
-        iMessageRouter = ptr_v1->GetMessageRouter( *callBack );
-        User::LeaveIfNull( iMessageRouter );
-
-        // Licencee Tsy successfully created
+		        // Licencee Tsy successfully created
 TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewL -  LicenceeTSY successfully opened");
 
-        // set the pointer to the message router object
-        messageManager->SetMessageRouter( iMessageRouter );
+	            // set the pointer to the message router object
+	            messageManager->SetMessageRouter( iMessageRouter );
 
-        // Ownership of messageManager to be passed to iPhoneTsy.
-        CleanupStack::Pop( messageManager );
-        
-        // Create Phone Tsy (which creates the whole Common TSY)
+	            // Ownership of messageManager passed to iPhoneTsy.
+                CleanupStack::Pop( messageManager );
+	            // Create Phone Tsy (which creates the whole Common TSY)
 TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewL - Starting to open CommonTSY");
-        iPhoneTsy = CMmPhoneTsy::NewL(messageManager, this, ltsyFactory);
+	            iPhoneTsy = CMmPhoneTsy::NewL( 
+	                messageManager, this, iLtsyFactory );
 
-        if ( iPhoneTsy )
-            {
+	            if ( iPhoneTsy )
+	                {
 TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewL - CommonTSY successfully opened");
-            messageManager->SetPhoneTsy( iPhoneTsy );
-            }
-        else
-            {
-TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewL - CommonTSY not opened");
+	                messageManager->SetPhoneTsy( iPhoneTsy );
+	                }
+                }
+            else
+            	{
+    	        CleanupStack::PopAndDestroy( messageManager );
+            	}
             }
         }
 
@@ -278,20 +289,19 @@
         {
 TFLOGSTRING("TSY: CMmPhoneFactoryTsy::NewSimAtk - Starting to open SimAtkTSY");
 
-        // Dynamic loading of LTSY
-        MLtsyFactoryBase* ltsyFactory = NULL;
-        TRAPD(ret, ltsyFactory = LoadLibraryL());
-        if (ret == KErrNone)
+        if( iLtsyFactory )
             {
             // Get SIM ATK TSY messaging service from LicenseeTsy
-            MLtsyFactoryV1* ptr_v1 = static_cast<MLtsyFactoryV1*>( ltsyFactory );
+            MLtsyFactoryV1* ptr_v1 = 
+            	static_cast<MLtsyFactoryV1*>( iLtsyFactory );
      
-#ifdef USING_CTSY_DISPATCHER        
-            satMessaging = ptr_v1->GetSatMessagingService(iPhoneTsy->SmsService());
+#ifdef USING_CTSY_DISPATCHER     	
+           	satMessaging = ptr_v1->GetSatMessagingService( 
+            	iPhoneTsy->SmsService() );
 #else
-            satMessaging = ptr_v1->GetSatMessagingService( );
+           	satMessaging = ptr_v1->GetSatMessagingService( );
 #endif
-            }        
+            }
         }
 
     return satMessaging;
@@ -328,155 +338,48 @@
 
 #ifdef USING_CTSY_DISPATCHER
 TBool CMmPhoneFactoryTsy::UsingCtsyDispatcher()
-    {
-    //function to determine whether the setup is using the CTSY Dispatcher layer.
+	{
+	//function to determine whether the setup is using the CTSY Dispatcher layer.
 #ifdef USING_CTSY_DISPATCHER 
-    return ETrue; 
+	return ETrue; 
 #else
-    return EFalse;
+	return EFalse;
 #endif
-    }
+	}
+
+MLtsyFactoryBase* CMmPhoneFactoryTsy::LoadLibraryL()
+	{
+	//load library.  This can either be LicenseeTsy or CtsyDispatcher dlls
+	TPtrC dllname;
+	TInt uid3_int;
+	if(UsingCtsyDispatcher())
+		{
+		dllname.Set(KCtsyDispatcherDllName);
+		uid3_int = KCtsyDispatcherUID3;
+		}
+	else
+		{
+		dllname.Set(KLicenseeTsyDllName);
+		uid3_int = KLicenseeTsyUID3;
+		}
+	
+	TFLOGSTRING3("TSY: CMmPhoneFactoryTsy::LoadLibraryL - Loading Dll=%S, UID3=0x%x", &dllname, uid3_int);
+	
+	TUidType uid(KNullUid, KNullUid, TUid::Uid(uid3_int));
+	
+	User::LeaveIfError(iLoadedLib.Load(dllname));
+	
+	// Check the Uid3 is as expected
+	if(iLoadedLib.Type()[2]!=TUid::Uid(uid3_int))
+		User::Leave(KErrBadLibraryEntryPoint);
+	
+	TFactoryBaseNewL libEntry=(TFactoryBaseNewL)iLoadedLib.Lookup(1);	
+	MLtsyFactoryBase* factory=(*libEntry)();	// libEntry may leave.
+	
+	return factory;
+	}
 #endif //USING_CTSY_DISPATCHER
 
-// ---------------------------------------------------------------------------
-// CMmPhoneFactoryTsy::LoadLibraryL
-// Dynamically loads a LTSY.
-// ---------------------------------------------------------------------------
-//
-MLtsyFactoryBase* CMmPhoneFactoryTsy::LoadLibraryL()
-    {
-    TPtrC ltsyDllName(0, NULL);
-    TUint ltsyDllUid = 0;
-    
-#ifdef USING_CTSY_DISPATCHER 
-    ltsyDllName.Set(KDefaultLicenseeTsyDllName);
-    ltsyDllUid = KDefaultLicenseeTsyUID3; 
-#else
-    RBuf configData;
-    CleanupClosePushL(configData);
-    ReadConfigFileL(&configData);
-    
-    TRAPD(ret,
-          {
-          ltsyDllName.Set(ReadDllNameFromConfigL(configData));
-          ltsyDllUid = ReadDllUidFromConfigL(configData);
-          });
-    
-    if (ret != KErrNone)
-        {
-        ltsyDllName.Set(KDefaultLicenseeTsyDllName);
-        ltsyDllUid = KDefaultLicenseeTsyUID3;
-        TFLOGSTRING2("TSY: Failed to load LTSY dll details from ini (error: %d), using defaults", ret);
-        }
-#endif
-    
-    TFLOGSTRING3("TSY: CMmPhoneFactoryTsy::LoadLibraryL - Loading Dll=%S, UID3=0x%x", &ltsyDllName, ltsyDllUid);
-    User::LeaveIfError(iLoadedLib.Load(ltsyDllName));
-    
-#ifndef USING_CTSY_DISPATCHER
-    CleanupStack::PopAndDestroy();  // configData
-#endif
-    
-    // Check the Uid3 is as expected
-    if (iLoadedLib.Type()[2] != TUid::Uid(ltsyDllUid))
-        {
-        User::Leave(KErrBadLibraryEntryPoint);
-        }
-    
-    TFactoryBaseNewL libEntry = REINTERPRET_CAST(TFactoryBaseNewL, iLoadedLib.Lookup(1));   
-    MLtsyFactoryBase* factory = (*libEntry)();    // libEntry may leave.
-    
-    User::LeaveIfNull(factory);
-    TFLOGSTRING("TSY: Loaded LTSY");
-    return factory;
-    }
-
-TPtrC CMmPhoneFactoryTsy::ReadDllNameFromConfigL(const TDesC& aConfigData)
-    {
-    _LIT(KLicenseeTsyDllKeyName, "LicenseeTsyDllName");
-    TPtrC dllName = GetValueForKeyL(aConfigData, KLicenseeTsyDllKeyName);
-    TFLOGSTRING2("TSY: Config file: LTSY DLL name = %S", &dllName);
-    return dllName;
-    }
-
-TUint CMmPhoneFactoryTsy::ReadDllUidFromConfigL(const TDesC& aConfigData)
-    {
-    _LIT(KLicenseeTsyUid3, "LicenseeTsyUid3");
+//  End of File
 
-    const TDesC& rawUid = GetValueForKeyL(aConfigData, KLicenseeTsyUid3);
-    // only take the right 8 characters (ie discard the "0x")
-    ASSERT(rawUid.Length() >= 8);
-    TLex lex(rawUid.Right(8));   
-    TUint uid;
-    User::LeaveIfError(lex.Val(uid, EHex));
-    TFLOGSTRING2("TSY: Config file: LTSY UID3 = 0x%x", uid);
-    return uid;
-    }
 
-/*static*/
-void CMmPhoneFactoryTsy::ReadConfigFileL(RBuf* aConfigData)
-/**
- * Reads config file from system drive or, if not present, from ROM
- *
- * @param aConfigData This buffer gets created and has the ini file contents loaded into it
- */
-    {
-    RFs fs;
-    User::LeaveIfError(fs.Connect());
-    CleanupClosePushL(fs);
-
-    fs.SetSessionToPrivate(fs.GetSystemDrive());
-
-    RFile configFile;
-    TFLOGSTRING2("TSY: Reading ini file %S", &KLtsyIniFile);
-    TInt ret = configFile.Open(fs, KLtsyIniFile, EFileShareExclusive);
-    if (ret == KErrNotFound)
-        {
-        User::LeaveIfError(fs.SetSessionToPrivate(EDriveZ));
-        User::LeaveIfError(configFile.Open(fs, KLtsyIniFile, EFileShareExclusive));
-        }
-    CleanupClosePushL(configFile);
-
-    TInt configFileSize;
-    User::LeaveIfError(configFile.Size(configFileSize));
-
-    RBuf8 fileBuf;
-    fileBuf.Create(configFileSize);
-    CleanupClosePushL(fileBuf);
-    User::LeaveIfError(configFile.Read(fileBuf));
-
-    aConfigData->CreateL(configFileSize);
-    aConfigData->Copy(fileBuf);
-
-    CleanupStack::PopAndDestroy(3, &fs); // fs, configFile, fileBuf
-    }
-
-/*static*/
-TPtrC CMmPhoneFactoryTsy::GetValueForKeyL(const TDesC& aKeysValues, const TDesC& aKey)
-/**
- * Gets the value for a specified key. The expected format is
- * <pre>
- * key1 value1
- * key2 value2
- * </pre>
- * 
- * However the parsing is flexible enough to allow "key1 =value1" as it allows an equals separator and extra whitespace
- * The value cannot include whitespace, even if quoted.
- */
-    {
-    // this matches the bracket expression in this regexp: \w+\s*=?\s*(\w+)[\s$]
-    TInt startOfKey = aKeysValues.Find(aKey);
-    TLex valueExtractor(aKeysValues);
-    valueExtractor.Inc(startOfKey + aKey.Length());
-    valueExtractor.SkipSpaceAndMark();
-    // allow equals separating key and value
-    if (valueExtractor.Peek() == '=')
-        {
-        valueExtractor.Inc();
-        valueExtractor.SkipSpaceAndMark();
-        }
-    
-    TPtrC value = valueExtractor.NextToken();
-    __ASSERT_ALWAYS(value.Length() > 0, User::Leave(KErrCorrupt));
-    return value;
-    }