# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1283259795 -10800 # Node ID 0aa8cc770c8a5f93876e40337f8a313599a7f0f7 # Parent 453dfc402455eb57fd5f1a993e2b844136286599 Revision: 201032 Kit: 201035 diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backupengine/src/absession.cpp --- a/backupandrestore/backupengine/src/absession.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backupengine/src/absession.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -148,7 +148,12 @@ iCallbackWatchdog = NULL; // Remove this session from the server's session map - Server().RemoveElement(iClientSID); + // Use dynamic_cast in case that ABServer is deconstructing + CABServer *pServer = dynamic_cast(const_cast(CSession2::Server())); + if(pServer) + { + pServer->RemoveElement(iClientSID); + } // Clear up any outstanding message HandleIPCClosingDownCallback(); @@ -159,7 +164,10 @@ // If the client has detached properly, they should // have done this - but just in case. //DoCancelWaitForCallback(); - Server().DropSession(); + if(pServer) + { + pServer->DropSession(); + } } void CABSession::CreateL() diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/backup_public_files_registration.xml --- a/backupandrestore/backuptest/ABTester/data/backup_public_files_registration.xml Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/base_active_backup_registration.xml Binary file backupandrestore/backuptest/ABTester/data/base_active_backup_registration.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/base_active_backup_registration2.xml Binary file backupandrestore/backuptest/ABTester/data/base_active_backup_registration2.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/base_active_backup_registration3.xml Binary file backupandrestore/backuptest/ABTester/data/base_active_backup_registration3.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/incremental_active_backup_registration.xml Binary file backupandrestore/backuptest/ABTester/data/incremental_active_backup_registration.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/passive_backup_registration.xml --- a/backupandrestore/backuptest/ABTester/data/passive_backup_registration.xml Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/data/proxy_active_backup_registration.xml Binary file backupandrestore/backuptest/ABTester/data/proxy_active_backup_registration.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/ABTester/group/abtester.iby --- a/backupandrestore/backuptest/ABTester/group/abtester.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/ABTester/group/abtester.iby Tue Aug 31 16:03:15 2010 +0300 @@ -21,13 +21,13 @@ file=ABI_DIR\BUILD_DIR\abtestclient3.EXE System\programs\abtestclient3.EXE file=ABI_DIR\BUILD_DIR\abtestclient4.EXE System\programs\abtestclient4.EXE -data=DATAZ_\private\0AB7E57C\backup_registration.xml private\0AB7E57C\backup_registration.xml -data=DATAZ_\private\0AB7E57D\backup_registration.xml private\0AB7E57D\backup_registration.xml -data=DATAZ_\private\0AB7E57E\backup_registration.xml private\0AB7E57E\backup_registration.xml -data=DATAZ_\private\0AB7E58A\backup_registration.xml private\0AB7E58A\backup_registration.xml -data=DATAZ_\private\0AB7E58B\backup_registration.xml private\0AB7E58B\backup_registration.xml -data=DATAZ_\private\0AB7E58C\backup_registration.xml private\0AB7E58C\backup_registration.xml +data=DATAZ_\private\0ab7e57c\backup_registration.xml private\0ab7e57c\backup_registration.xml +data=DATAZ_\private\0ab7e57d\backup_registration.xml private\0ab7e57d\backup_registration.xml +data=DATAZ_\private\0ab7e57e\backup_registration.xml private\0ab7e57e\backup_registration.xml +data=DATAZ_\private\0ab7e58a\backup_registration.xml private\0ab7e58a\backup_registration.xml +data=DATAZ_\private\0ab7e58b\backup_registration.xml private\0ab7e58b\backup_registration.xml +data=DATAZ_\private\0ab7e58c\backup_registration.xml private\0ab7e58c\backup_registration.xml -data=DATAZ_\private\0FA00001\backup_registration.xml private\0FA00001\backup_registration.xml +data=DATAZ_\private\0fa00001\backup_registration.xml private\0fa00001\backup_registration.xml #endif diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/Group/bld.inf --- a/backupandrestore/backuptest/burtestserver/Group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/Group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -40,9 +40,8 @@ ../testscripts/test_restorepackage.script z:/testdata/scripts/sbetestdata/test_restorepackage.script ../testscripts/test_increament.script z:/testdata/scripts/sbetestdata/test_increament.script -../testscripts/sbeconfig.xml /epoc32/release/winscw/udeb/z/private/10202d56/sbeconfig.xml -../testscripts/sbeconfig.xml /epoc32/release/winscw/urel/z/private/10202d56/sbeconfig.xml - +../../testdata/armv5/bigexeforbackup.sis /epoc32/data/z/testdata/scripts/sbetestdata/bigexeforbackup.sis +../../testdata/armv5/test_dll_nopublic.sis /epoc32/data/z/testdata/scripts/sbetestdata/test_dll_nopublic.sis PRJ_TESTMMPFILES burtestserver.mmp diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/Group/burtestserver.iby --- a/backupandrestore/backuptest/burtestserver/Group/burtestserver.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/Group/burtestserver.iby Tue Aug 31 16:03:15 2010 +0300 @@ -35,6 +35,10 @@ data=EPOCROOT##Epoc32\data\z\testdata\scripts\sbetestdata\test_activebackuprestore.script testdata\scripts\sbetestdata\test_activebackuprestore.script data=EPOCROOT##Epoc32\data\z\testdata\scripts\sbetestdata\test_increament.script testdata\scripts\sbetestdata\test_increament.script +data=EPOCROOT##Epoc32\data\z\testdata\scripts\sbetestdata\bigexeforbackup.sis testdata\scripts\sbetestdata\bigexeforbackup.sis +data=EPOCROOT##Epoc32\data\z\testdata\scripts\sbetestdata\test_dll_nopublic.sis testdata\scripts\sbetestdata\test_dll_nopublic.sis + + #ifndef __SERIES60_ data=EPOCROOT##Epoc32\data\z\testdata\scripts\sbetestdata\sbeconfig.xml private\10202d56\sbeconfig.xml #endif diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/inc/t_burteststepbase.h --- a/backupandrestore/backuptest/burtestserver/TestSteps/inc/t_burteststepbase.h Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/inc/t_burteststepbase.h Tue Aug 31 16:03:15 2010 +0300 @@ -90,6 +90,9 @@ public: RSIDArray iSidArray; + // add support for exclude sid list + RSIDArray iExcludeSidArray; + private: HBufC* GetIndentation(TInt aLevel); diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/src/t_burteststepbase.cpp --- a/backupandrestore/backuptest/burtestserver/TestSteps/src/t_burteststepbase.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/src/t_burteststepbase.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -63,6 +63,9 @@ iDataOwners.Close(); iSidArray.Close(); + + iExcludeSidArray.Close(); + iJidArray.Close(); iPublicFileNames.Close(); iPrivateFileNames.Close(); @@ -387,6 +390,48 @@ /** Read private file sizes into array */ _LIT(KExpectPrivateFileSizes, "ExpectPrivateFileSizes"); ReadListIntoIntArray(KExpectPrivateFileSizes, delimiter, iPrivateFileSizes); + + // Read Exclude IDs LIST // + TSecureId sid; + TChar ch; + TPtrC list; + + // clear the array + iExcludeSidArray.Reset(); + // read the string + _LIT(KExcludeSIDList, "ExcludeIDs"); + GetStringFromConfig(ConfigSection(), KExcludeSIDList, list); + TLex sidLex(list); + // parse the string + while (!sidLex.Eos()) + { + sidLex.Mark(); + ch=sidLex.Peek(); + + while(!sidLex.Eos() && ( ch=sidLex.Peek() ) != TChar(',')) + sidLex.Inc(); + + if(!sidLex.TokenLength()) + continue; + + TPtrC pToken = sidLex.MarkedToken(); + TLex token(pToken); + + if (pToken.Length() <= KMaxHexLength && token.Val(sid.iId, EHex) == KErrNone) + { + iExcludeSidArray.Append(sid); + _LIT(KFound, "Exclude ID Found in ini file: "); + LogWithSID(LOG_LEVEL4, KFound, sid); + } //if + + if(ch==TChar(',')) + sidLex.Inc(); + + sidLex.SkipSpace(); + + } //while + + } void CBURTestStepBase::ReadListIntoStringArray(const TDesC& aSectionName, const TChar& aDelimiter, RArray& aResultList) @@ -458,7 +503,6 @@ LogWithNum(LOG_LEVEL2,KTempText1, err); iFailures++; } - // Log if (iDataOwners.Count() == 0) { @@ -470,6 +514,30 @@ _LIT(KTempText4, "Number of data owners found on device: "); LogWithNum(LOG_LEVEL3, KTempText4, iDataOwners.Count()); } + + //filter the dataowners per the exclude SID list + for (TInt index = 0; index < iDataOwners.Count(); index++) + { + TSecureId sid = NULL; + sid = ExtractIDL(*iDataOwners[index]); + + if (sid != NULL) + { + TInt position = iExcludeSidArray.Find(sid); + if (position != KErrNotFound) + { + _LIT(KTempText2, "ExcludeID found in list of data owners: "); + LogWithSID(LOG_LEVEL3, KTempText2, sid); + + delete iDataOwners[index]; + iDataOwners[index] = NULL; + iDataOwners.Remove(index); + index--; + } + } + } + + } void CBURTestStepBase::PopulateListOfDataOwnersAsyncL() @@ -510,6 +578,28 @@ _LIT(KTempText4, "Number of data owners found on device: "); LogWithNum(LOG_LEVEL3, KTempText4, iDataOwners.Count()); } + + //filter the dataowners per the exclude SID list + for (TInt index = 0; index < iDataOwners.Count(); index++) + { + TSecureId sid = NULL; + sid = ExtractIDL(*iDataOwners[index]); + + if (sid != NULL) + { + TInt position = iExcludeSidArray.Find(sid); + if (position != KErrNotFound) + { + _LIT(KTempText2, "ExcludeID found in list of data owners: "); + LogWithSID(LOG_LEVEL3, KTempText2, sid); + + delete iDataOwners[index]; + iDataOwners[index] = NULL; + iDataOwners.Remove(index); + index--; + } + } + } } void CBURTestStepBase::SetBURModeL(TBURPartType aBURPartType, TBackupIncType aBackupIncType) @@ -557,8 +647,8 @@ for (TInt index = 0; index < iDataOwners.Count(); index++) { TBool notFound = ETrue; - sid = ExtractIDL(*iDataOwners[index]); - + sid = ExtractIDL(*iDataOwners[index]); + if (sid != NULL) { TInt position = iSidArray.Find(sid); @@ -576,19 +666,22 @@ else // possibly jid { HBufC* pSuiteHash = ExtractJavaIDL(*iDataOwners[index]); - TPtrC suiteHash = pSuiteHash->Des(); - if (iJidArray.Find(suiteHash) != KErrNotFound) - { - _LIT(KTempText3, "Java ID found in list of data owners: "); - LogWithText(LOG_LEVEL3, KTempText3, suiteHash); - notFound = EFalse; - } - else // not found - { - notFound = ETrue; - } - delete pSuiteHash; - pSuiteHash = NULL; + if (pSuiteHash != NULL) + { + TPtrC suiteHash = pSuiteHash->Des(); + if (iJidArray.Find(suiteHash) != KErrNotFound) + { + _LIT(KTempText3, "Java ID found in list of data owners: "); + LogWithText(LOG_LEVEL3, KTempText3, suiteHash); + notFound = EFalse; + } + else // not found + { + notFound = ETrue; + } + delete pSuiteHash; + pSuiteHash = NULL; + } } if (notFound) { @@ -1223,6 +1316,12 @@ j--; total--; } + else + { + // print the status + LogWithSID(LOG_LEVEL3, _L("---The unexpected dataowner status-SID: "),statusArray[j].iSID.iId); + LogWithNum(LOG_LEVEL3,_L("---The unexpected dataowner status-status: "),statusArray[j].iStatus) ; + } } //for statusArray.Reset(); CleanupStack::PopAndDestroy(&statusArray); @@ -1367,8 +1466,25 @@ for (TInt i=0; i < KRetries;) { + + + LogWithNum(LOG_LEVEL3,_L("retryies :"), i); + CheckSIDStatusL(iTransferTypes, readyArray); - + + + LogWithNum(LOG_LEVEL3,_L("readyArray count :"), readyArray.Count()); + + // print all the ready array + for(TInt jj = 0 ; jj < readyArray.Count(); jj++) + { + CSBSIDTransferType* type = CSBSIDTransferType::NewL(readyArray[jj]); + CleanupStack::PushL(type); + + LogWithSID(LOG_LEVEL3, _L("readyArray SIDs : ") , type->SecureIdL()); + CleanupStack::PopAndDestroy(type); + } + if (readyArray.Count()) // dataowners ready { // ========= Supply Data ================ @@ -1389,6 +1505,19 @@ iFailures++; _LIT(KLogNoTrans, "***Error: Some Data Owners were Not Ready or Failed to Connect"); Log(LOG_LEVEL3, KLogNoTrans); + + // print the remenan sids + for( TInt kk = 0 ; kk SecureIdL(); + CleanupStack::PopAndDestroy(sidType); + LogWithSID(LOG_LEVEL3, _L("--iTransferTypes, remanent SIDs : "),id.iId); + } + // } readyArray.ResetAndDestroy(); CleanupStack::PopAndDestroy(&readyArray); @@ -1482,7 +1611,6 @@ { User::Leave(KErrInUse); } - iStatus = KRequestPending; SetActive(); iActiveScheduler->Start(); } diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackup.cpp --- a/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackup.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackup.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -17,7 +17,7 @@ @file @released */ - +#include "W32STD.H" #include "t_teststepbackup.h" namespace bur_ts @@ -145,6 +145,8 @@ Log(LOG_LEVEL2, KLog3); } + _LIT(KLog31, "Checking valid registration..."); + Log(LOG_LEVEL2, KLog31); CheckValidRegistrationL(); _LIT(KLog4, "Saving Data Owners..."); @@ -201,9 +203,13 @@ BackupSystemBaseDataL(); BackupSystemSnapshotDataL(); - //active - BackupActiveBaseDataL(); - BackupActiveSnapshotDataL(); + // do active backup when in partial backup mode + if (iIsPartial) + { + //active + BackupActiveBaseDataL(); + BackupActiveSnapshotDataL(); + } //passive BackupPassiveBaseDataL(); @@ -238,9 +244,13 @@ BackupSystemBaseDataL(); BackupSystemSnapshotDataL(); - // active - BackupActiveIncDataL(); - BackupActiveSnapshotDataL(); + // do active backup when in partial backup mode + if (iIsPartial) + { + //active + BackupActiveIncDataL(); + BackupActiveSnapshotDataL(); + } //passive BackupPassiveIncDataL(); @@ -530,6 +540,10 @@ TRAPD(error, for (TInt i=0; i < KRetries;) { + // + LogWithNum(LOG_LEVEL3,_L("doActiveBackup-retryies :"), i); + + CheckSIDStatusL(transferTypes, iTransferTypes); if (iTransferTypes.Count()) // dataowners ready { @@ -551,7 +565,20 @@ iFailures++; _LIT(KLogNoTrans, "***Error: Some Data Owners were Not Ready or Failed to Connect"); Log(LOG_LEVEL3, KLogNoTrans); - } //if + + + //print the remenant sids + for( TInt kk = 0 ; kk SecureIdL(); + CleanupStack::PopAndDestroy(sidType); + LogWithSID(LOG_LEVEL3, _L("doActiveBackup-transferTypes, remanent SIDs : "),id.iId); + } + } //if transferTypes.ResetAndDestroy(); User::LeaveIfError(error); diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackup2.cpp --- a/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackup2.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackup2.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -204,9 +204,13 @@ BackupSystemBaseDataL(); BackupSystemSnapshotDataL(); - //active - BackupActiveBaseDataL(); - BackupActiveSnapshotDataL(); + // do active backup when in partial backup mode + if (iIsPartial) + { + //active + BackupActiveBaseDataL(); + BackupActiveSnapshotDataL(); + } //passive BackupPassiveBaseDataL(); @@ -241,9 +245,13 @@ BackupSystemBaseDataL(); BackupSystemSnapshotDataL(); - // active - BackupActiveIncDataL(); - BackupActiveSnapshotDataL(); + // do active backup when in partial backup mode + if (iIsPartial) + { + //active + BackupActiveIncDataL(); + BackupActiveSnapshotDataL(); + } //passive BackupPassiveIncDataL(); diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackupasync.cpp --- a/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackupasync.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststepbackupasync.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -148,6 +148,8 @@ Log(LOG_LEVEL2, KLog3); } + _LIT(KLog31, "Checking valid registration..."); + Log(LOG_LEVEL2, KLog31); CheckValidRegistrationL(); _LIT(KLog4, "Saving Data Owners..."); @@ -204,9 +206,12 @@ BackupSystemBaseDataL(); BackupSystemSnapshotDataL(); - //active - BackupActiveBaseDataL(); - BackupActiveSnapshotDataL(); + if (iIsPartial) + { + //active + BackupActiveBaseDataL(); + BackupActiveSnapshotDataL(); + } //passive BackupPassiveBaseDataL(); @@ -251,9 +256,12 @@ BackupSystemBaseDataL(); BackupSystemSnapshotDataL(); - // active - BackupActiveIncDataL(); - BackupActiveSnapshotDataL(); + if (iIsPartial) + { + // active + BackupActiveIncDataL(); + BackupActiveSnapshotDataL(); + } //passive BackupPassiveIncDataL(); diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststeprestore.cpp --- a/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststeprestore.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststeprestore.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -241,9 +241,13 @@ SupplyPassiveSnapshotDataL(); RestorePassiveBaseDataL(); - //active - SupplyActiveSnapshotDataL(); - RestoreActiveBaseDataL(); + // do active restore when in partial restore mode + if (iIsPartial) + { + //active + SupplyActiveSnapshotDataL(); + RestoreActiveBaseDataL(); + } } void CBURTestStepRestore::IncrementalRestoreL() @@ -259,11 +263,14 @@ RestorePassiveBaseDataL(); RestorePassiveIncDataL(); - - //active - SupplyActiveSnapshotDataL(); - RestoreActiveBaseDataL(); - RestoreActiveIncDataL(); + // do active restore when in partial restore mode + if (iIsPartial) + { + //active + SupplyActiveSnapshotDataL(); + RestoreActiveBaseDataL(); + RestoreActiveIncDataL(); + } } diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststeprestoreasync.cpp --- a/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststeprestoreasync.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/TestSteps/src/t_teststeprestoreasync.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -200,9 +200,12 @@ { RestoreJavaMidletDataL(); - // passive - SupplyPassiveSnapshotDataL(); - RestorePassiveBaseDataL(); + if (iIsPartial) + { + // passive + SupplyPassiveSnapshotDataL(); + RestorePassiveBaseDataL(); + } //active SupplyActiveSnapshotDataL(); @@ -216,17 +219,19 @@ */ { RestoreJavaMidletDataL(); - - // passive - SupplyPassiveSnapshotDataL(); - RestorePassiveBaseDataL(); - RestorePassiveIncDataL(); - - - //active - SupplyActiveSnapshotDataL(); - RestoreActiveBaseDataL(); - RestoreActiveIncDataL(); + + // passive + SupplyPassiveSnapshotDataL(); + RestorePassiveBaseDataL(); + RestorePassiveIncDataL(); + + if (iIsPartial) + { + //active + SupplyActiveSnapshotDataL(); + RestoreActiveBaseDataL(); + RestoreActiveIncDataL(); + } } diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/testscripts/test.ini --- a/backupandrestore/backuptest/burtestserver/testscripts/test.ini Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/testscripts/test.ini Tue Aug 31 16:03:15 2010 +0300 @@ -17,12 +17,14 @@ IsPartial=0 BaseOnly=1 DriveList=c +ExcludeIDs=10281d18,101fdf81,2000b4d8,1028246f,1028312B,200286d2,101F51F2,10202BE9,101F99FB,100069CC,20021367,10003A73,101F401D,2002BCC0,1020383E [BACKUP_RESTORE_0040] BackupDir=c:\BackupArchive\ IsPartial=0 BaseOnly=0 DriveList=c +ExcludeIDs=10281d18,101fdf81,2000b4d8,1028246f,1028312B,200286d2,101F51F2,10202BE9,101F99FB,100069CC,20021367,10003A73,101F401D,2002BCC0,1020383E [BACKUP_RESTORE_0050] BackupDir=c:\BackupArchive\ diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/testscripts/test_backuprestore.script --- a/backupandrestore/backuptest/burtestserver/testscripts/test_backuprestore.script Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/testscripts/test_backuprestore.script Tue Aug 31 16:03:15 2010 +0300 @@ -20,8 +20,6 @@ //////////////////////////////////////////////////////////////////////////////////// LOAD_SUITE BURTestServer -DELAY 120000 - PRINT ---------------------------------------------- PRINT Test Backup Restore PRINT ---------------------------------------------- diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/burtestserver/testscripts/test_backuprestoreasync.script --- a/backupandrestore/backuptest/burtestserver/testscripts/test_backuprestoreasync.script Thu Aug 19 10:44:03 2010 +0300 +++ b/backupandrestore/backuptest/burtestserver/testscripts/test_backuprestoreasync.script Tue Aug 31 16:03:15 2010 +0300 @@ -21,8 +21,6 @@ //////////////////////////////////////////////////////////////////////////////////// LOAD_SUITE BURTestServer -DELAY 120000 - PRINT ---------------------------------------------- PRINT Test Backup Restore Async PRINT ---------------------------------------------- diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/testdata/armv5/bigexeforbackup.sis Binary file backupandrestore/backuptest/testdata/armv5/bigexeforbackup.sis has changed diff -r 453dfc402455 -r 0aa8cc770c8a backupandrestore/backuptest/testdata/armv5/test_dll_nopublic.sis Binary file backupandrestore/backuptest/testdata/armv5/test_dll_nopublic.sis has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Info.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Info.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleGetInfoString - Nokia S60-32 v1.0, © Nokia - CFBundleIdentifier - nokia.com.phoneplugin.com.nokia.S6032 - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Nokia S60-32 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 556 - IPHPhoneConduitVersion - 597.0 - IPHPhonePluginUID - 367C0F5C-1E53-44A3-AEA5-54D1EEE12F29 - IPHPluginProviderName - Nokia - IPHPluginSupportURL - http://www.nokia.com/support - IPHPublicPluginVersion - 2.0 - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/MetaClasses.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/MetaClasses.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,329 +0,0 @@ - - - family.com.nokia.S6032 - - InheritsFrom - - family.com.apple.external.all-phones.usb-bt - - Services - - - ServiceName - com.apple.synchro - ServiceClass - IPHSyncMLSyncTransportServiceObexClient - ServiceProperties - - IPHEnginePlist - SyncEngine.plist - SyncProperties2 - PhoneConduit.plist - SyncMLVersion - SyncML11 - SyncMLLargeObjectSupport - - SyncMLNumberOfChangesSupport - - SyncMLRefreshFromServerSupport - - SyncMLRemoteNeedsRelativePaths - - SyncMLBusySignalingSupport - - SyncMLOnlyOneBusySignaling - - SyncMLBusySignalingInterval - 60 - SyncMLSimulateBusySignalingWithEmptySync - - SyncDataClasses - - - com.apple.pimsync.contacts - com.apple.pimsync.calendars - - - DontSyncEventsAfterDateValue.visible - - DontSyncEventsAfterDateValue.default-value - 1month - OnlySyncContactsWithPhoneNumber.visible - - OnlySyncContactsWithPhoneNumber.default-value - - SyncAllDayEventsKey.visible - - SyncAllDayEventsKey.default-value - - DontSyncEventsPriorToDateValue.visible - - DontSyncEventsPriorToDateValue.default-value - 1week - DontSyncEventsPriorToDateIsEnabled.visible - - DontSyncEventsPriorToDateIsEnabled.default-value - - DontSyncEventsAfterDateIsEnabled.visible - - DontSyncEventsAfterDateIsEnabled.default-value - - SyncMLLocalSource - iSync - SyncMLCodec - SyncMLCodecLibWBXML - SyncMLMsgTemporization - 500000 - SyncMLMaxObjSize - 786432 - SyncMLMaxMsgSize - 65535 - BTProtocolService - com.nokia.S6032.protocol.bt.obex.syncml - USBProtocolService - com.nokia.S6032.protocol.usb.obex.syncml - - - - ServiceName - com.nokia.S6032.protocol.usb.obex.syncml - ServiceClass - IPHObexService - ServiceProperties - - ObexTargetUUID - 53 59 4e 43 4d 4c 2d 53 59 4e 43 - ObexTimeOut - 60 - TransportService - com.nokia.S6032.transport.usb.syncml - - - - ServiceName - com.nokia.S6032.protocol.bt.obex.syncml - ServiceClass - IPHObexService - ServiceProperties - - ObexTargetUUID - 53 59 4e 43 4d 4c 2d 53 59 4e 43 - ObexTimeOut - 60 - TransportService - com.nokia.S6032.transport.rfcomm.syncml - - - - ServiceName - com.apple.protocol.usb.AT - ServiceClass - IPHSerialATService - ServiceProperties - - - - ServiceName - com.nokia.S6032.transport.rfcomm.syncml - ServiceClass - IPHRFCOMMChannelService - ServiceProperties - - RFCOMMChannelUUID - 000000020000100080000002ee000002 - - - - ServiceName - com.apple.transport.usb.modem - ServiceClass - IPHUSBCDCChannelService - ServiceProperties - - - - ServiceName - com.nokia.S6032.transport.usb.syncml - ServiceClass - IPHUSBObexChannelService - ServiceProperties - - - - ServiceName - com.apple.pimsync.parser.vCal - ServiceClass - IPHSyncParserService - ServiceProperties - - ParserType - vCal - Encoding - QUOTED-PRINTABLE - FoldingStyle - FoldingNG - Charset - UTF-8 - AllDayEventFormat - AllDayEventFromMidnightTo235900 - vCalRecDropIfUseless - - EscapeSemicolonInNotComponedValues - - EscapeBackslash - - IgnoreProperties - - X-IRMC-LUID - - UntilDateInLocal - - SetUntilTimeWithStartTime - - - - - ServiceName - com.apple.pimsync.parser.vCard - ServiceClass - IPHSyncParserService - ServiceProperties - - ParserType - vCard - Encoding - QUOTED-PRINTABLE - FoldingStyle - FoldingNG - Charset - UTF-8 - EscapeSemicolonInNotComponedValues - - EscapeBackslash - - IgnoreProperties - - X-IRMC-LUID - - PropertyNameMapping - - X-NICKNAME - X-EPOCSECONDNAME - - AddCRLFAfterBase64Folding - - IgnoreSubTypesForThisMainTypes - - CELL - - - - - ServiceName - com.apple.pimsync.contacts - ServiceClass - IPHSyncDataClassService - ServiceProperties - - MimeType - text/x-vcard - ParserService - com.apple.pimsync.parser.vCard - RemoteName - - needsCompanyNameInFirstName - - needsFullAddressInStreetField - - DataClassName - Contacts - needsDeleteAddOnModify - - MaxSyncCmd - 1 - - - - ServiceName - com.apple.pimsync.calendars - ServiceClass - IPHSyncDataClassService - ServiceProperties - - MimeType - text/x-vcalendar - ParserService - com.apple.pimsync.parser.vCal - hasEvent - - RemoteName - - hasAllDayEvents - - hasAllDayFromMidnightTo235900 - - hasVCalRecurrence - - needsToFormatCountToUntilDate - - needsToFormatUntilDateToCount - - hasOneAlarmType - - alarmTypeIsDisplay - - hasTimeZone - - hasTask - - handleAllDayRecurrent - - doNotSyncAlarmIfAfterStartDateTime - - DataClassName - Calendar - allDayInLocalDateTime - - untilDateIsDateOnly - - exDatesAreDateOnly - - doNotSyncAlarmIfCompleted - - dueDateIsDateOnly - - - - - - com.nokia.S6032 - - Identification - - com.apple.usb.vendorid-modelid - 0x0421/0x0500 - com.apple.gmi+gmm - Nokia+Nokia 6290 - - InheritsFrom - - family.com.nokia.S6032 - - Services - - - ServiceName - com.apple.model - ServiceProperties - - ModelName - S60-32 - CompanyName - Nokia - ModelIcon - com.nokia.S6032.tiff - - - - - \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/PhoneConduit.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/PhoneConduit.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,534 +0,0 @@ - - - - - Formatting - - com.apple.calendars.Event - - classification - - mappings - - - mappedValue - PUBLIC - originalValue - public - - - mappedValue - PRIVATE - originalValue - private - - - mappedValue - PRIVATE - originalValue - confidential - - - - description - - charsToStrip - \r,\n - maxLength - 500 - - end date - - location - - charsToStrip - \r,\n - maxLength - 255 - - start date - - summary - - charsToStrip - \r,\n - maxLength - 500 - - - com.apple.calendars.Task - - classification - - mappings - - - mappedValue - PUBLIC - originalValue - public - - - mappedValue - PRIVATE - originalValue - private - - - mappedValue - PRIVATE - originalValue - confidential - - - - completion date - - description - - charsToStrip - \r,\n - maxLength - 255 - - due date - - priority - - mappings - - - mappedValue - - originalValue - 0 - - - mappedValue - 1 - originalValue - 1 - - - mappedValue - 2 - originalValue - 2 - - - mappedValue - 3 - originalValue - 3 - - - mappedValue - 4 - originalValue - 4 - - - mappedValue - 5 - originalValue - 5 - - - mappedValue - 6 - originalValue - 6 - - - mappedValue - 7 - originalValue - 7 - - - mappedValue - 8 - originalValue - 8 - - - mappedValue - 9 - originalValue - 9 - - - - status - - mappings - - - mappedValue - DECLINED - originalValue - cancelled - - - mappedValue - NEEDS ACTION - originalValue - needsaction - - - mappedValue - COMPLETED - originalValue - completed - - - mappedValue - ACCEPTED - originalValue - inprocess - - - mappedValue - - originalValue - none - - - - summary - - charsToStrip - \r,\n - maxLength - 255 - - - com.apple.contacts.Contact - - birthday - - company name - - charsToStrip - \r,\n - maxLength - 255 - - department - - charsToStrip - \r,\n - maxLength - 255 - - first name - - charsToStrip - \r,\n - maxLength - 255 - - image - - maxLength - 0 - - job title - - charsToStrip - \r,\n - maxLength - 255 - - last name - - charsToStrip - \r,\n - maxLength - 255 - - middle name - - charsToStrip - \r,\n - maxLength - 255 - - nickname - - charsToStrip - \r,\n - maxLength - 255 - - notes - - maxLength - 1000 - - suffix - - charsToStrip - \r,\n - maxLength - 255 - - title - - charsToStrip - \r,\n - maxLength - 255 - - - com.apple.contacts.Date - - type - - mappings - - - value - - - com.apple.contacts.Email Address - - type - - mappings - - - mappedValue - WORK - originalValue - work - - - mappedValue - HOME - originalValue - home - - - mappedValue - INTERNET - originalValue - other - - - - value - - charsToStrip - \r,\n - maxLength - 255 - - - com.apple.contacts.Phone Number - - type - - mappings - - - mappedValue - WORK - originalValue - work - - - mappedValue - HOME - originalValue - home - - - mappedValue - CELL - originalValue - mobile - - - mappedValue - FAX - originalValue - work fax - - - mappedValue - FAX - originalValue - home fax - - - mappedValue - - originalValue - other - - - mappedValue - - originalValue - main - - - mappedValue - PAGER - originalValue - pager - - - - value - - charsToKeep - 0123456789+#*pw - maxLength - 255 - - - com.apple.contacts.Related Name - - type - - mappings - - - mappedValue - X-CHILDREN - originalValue - child - - - mappedValue - X-SPOUSE - originalValue - spouse - - - mappedValue - X-ASSISTANT - originalValue - assistant - - - - value - - charsToStrip - \r,\n - maxLength - 255 - - - com.apple.contacts.Street Address - - city - - charsToStrip - \r,\n - maxLength - 255 - - country - - charsToStrip - \r,\n - maxLength - 255 - - postal code - - charsToStrip - \r,\n - maxLength - 255 - - state - - charsToStrip - \r,\n - maxLength - 255 - - street - - charsToStrip - \r,\n - maxLength - 255 - - type - - mappings - - - mappedValue - WORK - originalValue - work - - - mappedValue - HOME - originalValue - home - - - mappedValue - - originalValue - other - - - relationshipConstraint - perSubType - relationshipSize - 1 - - - com.apple.contacts.URL - - type - - mappings - - - mappedValue - WORK - originalValue - work - - - mappedValue - HOME - originalValue - home page - - - mappedValue - HOME - originalValue - home - - - mappedValue - - originalValue - other - - - - value - - charsToStrip - \r,\n - maxLength - 500 - - - - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/SyncEngine.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/SyncEngine.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ - - - - - Entities - - com.apple.calendars.AudioAlarm - - com.apple.syncservices.RecordEntityName - triggerdate - triggerduration - owner - - com.apple.calendars.Calendar - - com.apple.syncservices.RecordEntityName - title - read only - com.apple.PhoneConduitExtension.uid - - com.apple.calendars.DisplayAlarm - - com.apple.syncservices.RecordEntityName - triggerdate - triggerduration - owner - - com.apple.calendars.Event - - com.apple.syncservices.RecordEntityName - original date - all day - exception dates - calendar - recurrences - main event - detached events - audio alarms - display alarms - start date - location - summary - end date - description - classification - - com.apple.calendars.Recurrence - - com.apple.syncservices.RecordEntityName - frequency - count - until - interval - bymonth - byweeknumber - byyearday - bymonthday - bydayfreq - bydaydays - bysetpos - weekstartday - owner - - com.apple.calendars.Task - - com.apple.syncservices.RecordEntityName - due date is date only - calendar - audio alarms - display alarms - status - summary - completion date - description - due date - classification - priority - - com.apple.contacts.Contact - - com.apple.syncservices.RecordEntityName - title - suffix - image - last name - company name - first name - middle name - job title - nickname - notes - department - birthday - email addresses - phone numbers - URLs - street addresses - related names - dates - - com.apple.contacts.Date - - com.apple.syncservices.RecordEntityName - contact - value - type - - com.apple.contacts.Email Address - - com.apple.syncservices.RecordEntityName - contact - value - type - - com.apple.contacts.Phone Number - - com.apple.syncservices.RecordEntityName - contact - value - type - - com.apple.contacts.Related Name - - com.apple.syncservices.RecordEntityName - contact - value - type - - com.apple.contacts.Street Address - - com.apple.syncservices.RecordEntityName - contact - city - state - street - country - type - postal code - - com.apple.contacts.URL - - com.apple.syncservices.RecordEntityName - contact - value - type - - - Type - device - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/com.nokia.S6032.tiff Binary file connectivitymodules/SeCon/apple/S60_RnD_32.phoneplugin/Contents/Resources/com.nokia.S6032.tiff has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Archive.bom Binary file connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Archive.bom has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Archive.pax.gz Binary file connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Archive.pax.gz has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Info.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Info.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ - - - - - CFBundleGetInfoString - 0.0, Copyright 2006 Apple Computer, Inc. - CFBundleIdentifier - com.apple.isyncpluginmaker.phoneplugin - CFBundleShortVersionString - 0.0 - IFMajorVersion - 1 - IFMinorVersion - 0 - IFPkgFlagAllowBackRev - - IFPkgFlagAuthorizationAction - AdminAuthorization - IFPkgFlagBackgroundAlignment - topleft - IFPkgFlagBackgroundScaling - none - IFPkgFlagDefaultLocation - / - IFPkgFlagFollowLinks - - IFPkgFlagInstallFat - - IFPkgFlagInstalledSize - 156 - IFPkgFlagIsRequired - - IFPkgFlagOverwritePermissions - - IFPkgFlagRelocatable - - IFPkgFlagRestartAction - NoRestart - IFPkgFlagRootVolumeOnly - - IFPkgFlagUpdateInstalledLanguages - - IFPkgFormatVersion - 0.10000000149011612 - IFRequirementDicts - - - LabelKey - iSync24Label - MessageKey - iSync2XMessage - SpecArgument - /Applications/iSync.app/Contents/Info.plist - SpecProperty - CFBundleVersion - SpecType - plist - TestObject - 500.134 - TestOperator - ge - TitleKey - iSync24Title - - - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/PkgInfo --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/PkgInfo Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -pkmkrpkg1 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/Description.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/Description.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ - - - - - IFPkgDescriptionDescription - Description of a Phone Plug-in - IFPkgDescriptionTitle - the phone plug-in - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/English.lproj/ReadMe.rtf --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/English.lproj/ReadMe.rtf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs24 \cf0 This package has been built by Nokia Corporation. It will install a phone plugin to enable iSync support for your phone E60} \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/IFRequirement.strings Binary file connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/IFRequirement.strings has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/PhonePlugin.info --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/PhonePlugin.info Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -Title Phone Plug-in -Version -Description -DefaultLocation /Library/PhonePlugins -DeleteWarning - -### Package Flags - -NeedsAuthorization NO -Required YES -Relocatable YES -RequiresReboot NO -UseUserMask NO -OverwritePermissions NO -InstallFat NO -RootVolumeOnly YES -OnlyUpdateInstalledLanguages NO diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/TokenDefinitions.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/TokenDefinitions.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ - - - - - iSyncToken - - - searchPlugin - CommonAppSearch - path - /Applications/iSync.app - identifier - com.apple.isync - - - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/Welcome.rtf --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/Welcome.rtf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf380 -{\fonttbl\f0\fnil\fcharset77 LucidaGrande-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 LucidaGrande; -} -{\colortbl;\red255\green255\blue255;\red1\green1\blue1;} -\vieww9000\viewh8400\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\b\fs24 \cf0 Welcome to the iSync Phone Plug-in for Mac OS X Installer -\f1\b0 \ -\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f2\fs22 \cf0 iSync for Mac OS X is synchronization software that keeps your Address Book contacts and iCal calendar and to-do information in sync between your Mac OS computers and iSync-compatible mobile phones.\ -\ -This installer guides you through the steps necessary to install an iSync Phone Plug-in for Mac OS X. To get started, click Continue. -\f1\fs24 \cf2 \ -} \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/en.lproj/Description.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/en.lproj/Description.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ - - - - - IFPkgDescriptionDescription - - IFPkgDescriptionTitle - 367C0F5C-1E53-44A3-AEA5-54D1EEE12F29-installerRoot - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/package_version --- a/connectivitymodules/SeCon/apple/S60_RnD_32.pkg/Contents/Resources/package_version Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -major: 1 -minor: 0 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.ppdoc/Icon.tiff Binary file connectivitymodules/SeCon/apple/S60_RnD_32.ppdoc/Icon.tiff has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.ppdoc/InstallerReadMe-en.rtf --- a/connectivitymodules/SeCon/apple/S60_RnD_32.ppdoc/InstallerReadMe-en.rtf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs24 \cf0 This package has been built by Nokia Corporation. It will install a phone plugin to enable iSync support for your phone E60} \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/apple/S60_RnD_32.ppdoc/Properties.plist --- a/connectivitymodules/SeCon/apple/S60_RnD_32.ppdoc/Properties.plist Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1358 +0,0 @@ - - - - - TramontaneVersion - 597.0 - UUID - 367C0F5C-1E53-44A3-AEA5-54D1EEE12F29 - properties - - BTOptionsDict - - OBEXTimeout - 60 - TransportType - 0 - synchroScriptConnect - - synchroScriptDisconnect - - - UISettingsOptionsDict - - DontSyncEventsAfterDateIsEnabled - - default - 0 - visible - - - DontSyncEventsAfterDateValue - - default - 1month - visible - - - DontSyncEventsPriorToDateIsEnabled - - default - 0 - visible - - - DontSyncEventsPriorToDateValue - - default - 1week - visible - - - OnlySyncContactsWithPhoneNumber - - default - 1 - visible - - - SyncAllDayEventsKey - - default - 0 - visible - - - - USBOptionsDict - - OBEXTimeout - 60 - identificationCDCChannel - 0 - identificationScriptConnect - - identificationScriptDisconnect - - synchroCDCChannel - 1 - synchroOBEXChannel - 0 - synchroScriptConnect - - synchroScriptDisconnect - - useOBEX - - useOtherCDC - - useSameCDC - - - advancedOptionsSettings - - com_apple_pimsync_contacts - - DataClassName - Contacts - MaxAddAndReplaceCmd - 0 - MaxDeleteCmd - 0 - MaxSyncCmd - 1 - needsDeleteAddOnModify - 1 - - com_apple_pimsync_events - - DataClassName - Calendar - MaxAddAndReplaceCmd - 0 - MaxDeleteCmd - 0 - MaxSyncCmd - 0 - allDayInLocalDateTime - 1 - allowedAlarmRelativeValues - - countValueWhenMissing - 0 - defaultUntilDateWhenMissing - - doNotSyncAlarmForADE - - doNotSyncAlarmIfAfterStartDateTime - 1 - dontSyncEventBeforeDate - - exDatesAreDateOnly - - handleMultiDayRecurrent - - hasAllDayMultiDay - - maxMinutesNbDeltaForAlarm - 0 - needsDeleteAddOnModify - 0 - noNewLines - 0 - onlyAsciiCharacters - - syncAlarmOnlyIfSameDayAsADEStartDate - - untilDateIsDateOnly - 1 - - com_apple_pimsync_parser_vCal - - AllDayCategories - REMINDER - EscapeBackslash - 1 - EscapeSemicolonInNotComponedValues - 1 - EscapeStrings - - ExDatesInLocal - - IgnoreProperties - X-IRMC-LUID - PropertyNameMapping - - SetExDateTimeWithEndTime - - SetExDateTimeWithStartTime - - SetUntilTimeWithEndTime - 0 - SetUntilTimeWithStartTime - 1 - TimedCategories - MEETING - UntilDateInLocal - 1 - - com_apple_pimsync_parser_vCard - - AddCRLFAfterBase64Folding - 1 - IgnoreSubTypesForThisMainTypes - CELL - PropertyNameMapping - - - key - X-NICKNAME - value - X-EPOCSECONDNAME - - - - com_apple_pimsync_tasks - - DataClassName - Tasks - MaxAddAndReplaceCmd - 0 - MaxDeleteCmd - 0 - MaxSyncCmd - 0 - completionDateIsDateOnly - - defaultDueDateValueWhenMissing - - defaultDueDateWhenMissing - - doNotSyncAlarmForTask - - doNotSyncAlarmIfCompleted - 1 - dueDateIsDateOnly - - needsDeleteAddOnModify - - setDueDateToCompletionDateIfCompleted - - - com_apple_synchro - - SyncMLCodec - 0 - SyncMLDoNotTryToDetectPhoneDBReset - - SyncMLLocalSource - iSync - SyncMLMaxMsgSize - 65535 - SyncMLMaxObjSize - 786432 - SyncMLMsgTemporization - 500000 - SyncMLNoPropertiesCapabilitiesInDevInf - - SyncMLSendDevInfIntoPutIfNoGetReceived - 0 - SyncMLUseBinaryWBXMLPublicID - - - - calendarsOptionsDict - - Charset - UTF-8 - FoldingStyle - FoldingNG - RemoteName - / - allDayFormat - 3 - eventRecurrenceEndType - 1 - hasAudioAlarm - - hasDisplayAlarm - - hasEvent - - hasTimeZone - 1 - hasVCalRecurrence - - - contactsOptionsDict - - RemoteName - / - firstAndLastNameInSameField - - needsCompanyNameInFirstName - 0 - needsFullAddressInStreetField - - - documentVersion - 556 - extraOptionsSettings - - familyOptionsDict - - BTAvailable - - BluetoothAvailable - - CGMI - Nokia - CGMM - Nokia 6290 - GMI - Nokia - GMM - Nokia 6290 - ModelID - com.nokia.S6032 - Name - S60-32 - PluginProviderName - Nokia - ProductID - 0x0500 - USBAvailable - - VendorID - 0x0421 - connection - 2 - constructorName - Nokia - domainName - nokia.com - fixedDatabasesNames - 0 - pluginVersion - 1.0 - supportURL - http://www.nokia.com/support - useCGMICGMM - - - javaScriptDict - - btObexConnection - - Value - function prepareChannelForProtocol() -{ - // You can customize this function but do NOT change the signature -} - - btObexDisconnection - - Value - function unprepareChannelForProtocol() -{ - // You can customize this function but do NOT change the signature -} - - usbCdcConnection - - Value - function prepareChannelForProtocol() -{ - // You can customize this function but do NOT change the signature -} - - usbCdcDisconnection - - Value - function unprepareChannelForProtocol() -{ - // You can customize this function but do NOT change the signature -} - - usbObexConnection - - Value - function prepareChannelForProtocol() -{ - // You can customize this function but do NOT change the signature -} - - usbObexDisconnection - - Value - function unprepareChannelForProtocol() -{ - // You can customize this function but do NOT change the signature -} - - - notes - - WW91IGNhbiBzYXZlIGFueSBraW5kIG9mIGluZm9ybWF0aW9uIG9uIHRoZSBw - bHVnaW4gaGVyZS4KVGhleSB3b24ndCBiZSBleHBvcnRlZCBpbiB0aGUgcGx1 - Z2luLg== - - syncFieldsSettings - - com_apple_calendars_Event - - classification - - Activated - - mappings - - - activated - - mappedValue - PUBLIC - originalValue - public - - - activated - - mappedValue - PRIVATE - originalValue - private - - - activated - - mappedValue - PRIVATE - originalValue - confidential - - - - description - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 500 - - end date - - Activated - - - location - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - start date - - Activated - - - summary - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 500 - - - com_apple_calendars_Task - - classification - - Activated - - mappings - - - activated - - mappedValue - PUBLIC - originalValue - public - - - activated - - mappedValue - PRIVATE - originalValue - private - - - activated - - mappedValue - PRIVATE - originalValue - confidential - - - - completion date - - Activated - - - description - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - due date - - Activated - - - priority - - Activated - - mappings - - - activated - - originalValue - 0 - - - activated - - mappedValue - 1 - originalValue - 1 - - - activated - - mappedValue - 2 - originalValue - 2 - - - activated - - mappedValue - 3 - originalValue - 3 - - - activated - - mappedValue - 4 - originalValue - 4 - - - activated - - mappedValue - 5 - originalValue - 5 - - - activated - - mappedValue - 6 - originalValue - 6 - - - activated - - mappedValue - 7 - originalValue - 7 - - - activated - - mappedValue - 8 - originalValue - 8 - - - activated - - mappedValue - 9 - originalValue - 9 - - - - status - - Activated - - mappings - - - activated - - mappedValue - DECLINED - originalValue - cancelled - - - activated - - mappedValue - NEEDS ACTION - originalValue - needsaction - - - activated - - mappedValue - COMPLETED - originalValue - completed - - - activated - - mappedValue - ACCEPTED - originalValue - inprocess - - - activated - - mappedValue - - originalValue - none - - - - summary - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - - com_apple_contacts_Contact - - birthday - - Activated - - - company name - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - department - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - first name - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - image - - Activated - - maxLength - 0 - - job title - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - last name - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - middle name - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - nickname - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - notes - - Activated - - maxLength - 1000 - - suffix - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - title - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - - com_apple_contacts_Date - - IPSGlobalEntity - - Activated - - - type - - Activated - - mappings - - - activated - - mappedValue - X-ANNIVERSARY - originalValue - anniversary - - - activated - - mappedValue - X-DATE - originalValue - other - - - - value - - Activated - - - - com_apple_contacts_Email Address - - IPSGlobalEntity - - Activated - - - type - - Activated - - mappings - - - activated - - mappedValue - WORK - originalValue - work - - - activated - - mappedValue - HOME - originalValue - home - - - activated - - mappedValue - INTERNET - originalValue - other - - - - value - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - - com_apple_contacts_Phone Number - - IPSGlobalEntity - - Activated - - - type - - Activated - - mappings - - - activated - - mappedValue - WORK - originalValue - work - - - activated - - mappedValue - HOME - originalValue - home - - - activated - - mappedValue - CELL - originalValue - mobile - - - activated - - mappedValue - FAX - originalValue - work fax - - - activated - - mappedValue - FAX - originalValue - home fax - - - activated - - mappedValue - - originalValue - other - - - activated - - mappedValue - - originalValue - main - - - activated - - mappedValue - PAGER - originalValue - pager - - - - value - - Activated - - DontNeedCheckBox - - charsFiltering - 2 - charsToKeep - 0123456789+#*pw - maxLength - 255 - - - com_apple_contacts_Related Name - - IPSGlobalEntity - - Activated - - - type - - Activated - - mappings - - - activated - - mappedValue - X-FATHER - originalValue - father - - - activated - - mappedValue - X-MOTHER - originalValue - mother - - - activated - - mappedValue - X-PARENT - originalValue - parent - - - activated - - mappedValue - X-CHILDREN - originalValue - child - - - activated - - mappedValue - X-BROTHER - originalValue - brother - - - activated - - mappedValue - X-SISTER - originalValue - sister - - - activated - - mappedValue - X-FRIEND - originalValue - friend - - - activated - - mappedValue - X-SPOUSE - originalValue - spouse - - - activated - - mappedValue - X-PARTNER - originalValue - partner - - - activated - - mappedValue - X-ASSISTANT - originalValue - assistant - - - activated - - mappedValue - X-MANAGER - originalValue - manager - - - activated - - mappedValue - X-NAME - originalValue - other - - - - value - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - - com_apple_contacts_Street Address - - IPSGlobalEntity - - Activated - - - city - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - country - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - postal code - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - state - - Activated - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - street - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 255 - - type - - Activated - - mappings - - - activated - - mappedValue - WORK - originalValue - work - - - activated - - mappedValue - HOME - originalValue - home - - - activated - - mappedValue - - originalValue - other - - - relationshipLimitKind - 2 - - - com_apple_contacts_URL - - IPSGlobalEntity - - Activated - - - type - - Activated - - mappings - - - activated - - mappedValue - WORK - originalValue - work - - - activated - - mappedValue - HOME - originalValue - home page - - - activated - - mappedValue - HOME - originalValue - home - - - activated - - mappedValue - - originalValue - other - - - - value - - Activated - - DontNeedCheckBox - - charsFiltering - 1 - charsToStrip - \r,\n - maxLength - 500 - - - - syncMLOptionsDict - - SyncMLBusySignalingInterval - 60 - SyncMLBusySignalingSupport - - SyncMLLargeObjectSupport - - SyncMLMaxSyncCmdNbInEncodedMsg - 30 - SyncMLNumberOfChangesSupport - - SyncMLOnlyOneBusySignaling - - SyncMLRefreshFromServerSupport - - SyncMLRemoteNeedsRelativePaths - - SyncMLSimulateBusySignalingWithEmptySync - - SyncMLVersion - SyncML11 - limitSyncCmd - - - tasksOptionsDict - - RemoteName - Tasks - hasDifferentDataclassesForTasksAndEvents - - hasTasks - - - vCalRecSettings - - com_apple_pimsync_events - - handleAllDayRecurrent - - - com_apple_pimsync_parser_vCal - - vCalExDatesSupport - - vCalRecDaily - - vCalRecDailyInterval - - vCalRecDropIfUseless - 1 - vCalRecMaxExDatesNb - 0 - vCalRecMonthlyByDay - - vCalRecMonthlyByDayOnlyOnStartDateMonthDay - - vCalRecMonthlyByDayOnlyOneMonthDay - - vCalRecMonthlyByDayWithMonthDay - - vCalRecMonthlyByPos - - vCalRecMonthlyByPosOnlyOnStartDateWeekDay - - vCalRecMonthlyByPosOnlyOneWeekDay - - vCalRecMonthlyInterval - - vCalRecOnlyForever - - vCalRecWeekly - - vCalRecWeeklyInterval - - vCalRecWeeklyOnlyOnStartDateWeekDay - - vCalRecWeeklyOnlyOneWeekDay - - vCalRecWeeklyWithWeekDay - - vCalRecYearlyByMonth - - vCalRecYearlyByMonthInterval - - vCalRecYearlyByMonthOnlyOnStartDateMonthNumber - - vCalRecYearlyByMonthOnlyOneMonthNumber - - vCalRecYearlyByMonthWithMonthNumber - - - - - version - 0 - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/bwins/catalogspcconnectivitypluginu.def --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/bwins/catalogspcconnectivitypluginu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -EXPORTS - ??1CCatalogsPCConnectivityPlugin@@UAE@XZ @ 1 NONAME ; CCatalogsPCConnectivityPlugin::~CCatalogsPCConnectivityPlugin(void) - ?Close@CCatalogsPCConnectivityPlugin@@QAEXXZ @ 2 NONAME ; void CCatalogsPCConnectivityPlugin::Close(void) - ?Connect@CCatalogsPCConnectivityPlugin@@QAEHXZ @ 3 NONAME ; int CCatalogsPCConnectivityPlugin::Connect(void) - ?GetDataL@CCatalogsPCConnectivityPlugin@@QAEXAAVTDataType@@AAVCBufFlat@@@Z @ 4 NONAME ; void CCatalogsPCConnectivityPlugin::GetDataL(class TDataType &, class CBufFlat &) - ?NewL@CCatalogsPCConnectivityPlugin@@SAPAV1@XZ @ 5 NONAME ; class CCatalogsPCConnectivityPlugin * CCatalogsPCConnectivityPlugin::NewL(void) - ?NewLC@CCatalogsPCConnectivityPlugin@@SAPAV1@XZ @ 6 NONAME ; class CCatalogsPCConnectivityPlugin * CCatalogsPCConnectivityPlugin::NewLC(void) - ?PutDataL@CCatalogsPCConnectivityPlugin@@QAEXABVTDataType@@ABVCBufFlat@@@Z @ 7 NONAME ; void CCatalogsPCConnectivityPlugin::PutDataL(class TDataType const &, class CBufFlat const &) - ?SupportedMimeTypesL@CCatalogsPCConnectivityPlugin@@QAE?AV?$RPointerArray@VTDataType@@@@XZ @ 8 NONAME ; class RPointerArray CCatalogsPCConnectivityPlugin::SupportedMimeTypesL(void) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/eabi/catalogspcconnectivitypluginu.def --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/eabi/catalogspcconnectivitypluginu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -EXPORTS - _ZN29CCatalogsPCConnectivityPlugin19SupportedMimeTypesLEv @ 1 NONAME - _ZN29CCatalogsPCConnectivityPlugin4NewLEv @ 2 NONAME - _ZN29CCatalogsPCConnectivityPlugin5CloseEv @ 3 NONAME - _ZN29CCatalogsPCConnectivityPlugin5NewLCEv @ 4 NONAME - _ZN29CCatalogsPCConnectivityPlugin7ConnectEv @ 5 NONAME - _ZN29CCatalogsPCConnectivityPlugin8GetDataLER9TDataTypeR8CBufFlat @ 6 NONAME - _ZN29CCatalogsPCConnectivityPlugin8PutDataLERK9TDataTypeRK8CBufFlat @ 7 NONAME - _ZN29CCatalogsPCConnectivityPluginD0Ev @ 8 NONAME - _ZN29CCatalogsPCConnectivityPluginD1Ev @ 9 NONAME - _ZN29CCatalogsPCConnectivityPluginD2Ev @ 10 NONAME - _ZTI29CCatalogsPCConnectivityPlugin @ 11 NONAME ; ## - _ZTV29CCatalogsPCConnectivityPlugin @ 12 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/group/bld.inf --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* Copyright (c) 2006-2008 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: Build info file for Catalogs PC Connectivity Plugin -* -*/ - - -PRJ_MMPFILES - -catalogspcconnectivityplugin.mmp - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/group/catalogspcconnectivityplugin.mmp --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/group/catalogspcconnectivityplugin.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 2006-2008 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: Project definition file for project Catalogs PC Connectivity -* Plugin -* -*/ - -#include -#include - -TARGET catalogspcconnectivityplugin.dll -TARGETTYPE dll -UID 0x1000008D 0x10207E73 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src -SOURCE catalogspcconnectivityplugin.cpp -SOURCE catalogspcconnectivityclient.cpp - -USERINCLUDE ../inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY apmime.lib - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/inc/catalogspcconnectivityclient.h --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/inc/catalogspcconnectivityclient.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* -* Copyright (c) 2006 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: This is a client which communicate with the server -* CatalogsEnginePCClientFrontEnd -* -*/ - - -#ifndef R_CATALOGSPCCONNECTIVITYCLIENT_H -#define R_CATALOGSPCCONNECTIVITYCLIENT_H - -#include -#include - -/** - * This client communicate with the server CatalogsEnginePCClientFrontEnd - * - * This class get requests from CatalogsPCConnectivityPlugin. - * Class itself is client in client-server solution. When request - * is received it will start the server (CatalogsEnginePCClientFrontEnd). - * This client class is dummy, the server have all the functionality. - * - * @lib catalogspcconnectivityplugin - * @since S60 v3.1 - */ -class RCatalogsPCConnectivityClient : public RSessionBase - { -public: - - /** - * Constructor - * - * @since S60 v3.1 - */ - RCatalogsPCConnectivityClient(); - - /** - * Destructor - * - * @since S60 v3.1 - */ - ~RCatalogsPCConnectivityClient(); - - /** - * A connection is formed to the Catalogs engine pc client front-end. - * This will start up the front-end server and connect to it - * - * @since S60 v3.1 - * @return TInt Standard error code, KErrNone if connection is formed - * or the connection was formed already - */ - TInt Connect(); - - /** - * The connection to the Catalogs engine front-end is closed - * - * @since S60 v3.1 - */ - void Close(); - - /** - * All MIME types supported by this component can be asked using this method - * - * @since S60 v3.1 - * @return RPointerArray< TDataType > contain all supported MIME types - * RPointerArray TDataTypes have allocated using new, caller - * have to remember to delete them properly - * @exeption Leaves with standard error codes - */ - RPointerArray SupportedMimeTypesL(); - - /** - * A data packet of max length 65535 (0xFFFF) bytes is synchronously - * sent to the Catalogs engine front-end - * Usage: After PutDataL have been called, you have to call GetDataL - * before you can call PutDataL again - * - * @since S60 v3.1 - * @param aMimeType data packet MIME type - * @param aData data buffer to read from - * @exeption Leaves with standard error codes - */ - void PutDataL( const TDataType& aMimeType, - const CBufFlat& aData ); - - /** - * A data packet is synchronously transfered from the Catalogs front-end - * and returned to caller - * Usage: Everytime before calling GetDataL, you have to call PutDataL. - * So you can't call GetData in sequentially. - * - * @since S60 v3.1 - * @param aMimeType data packet MIME type - * @param aData data buffer to write to. Will call ExpandL function - * for aData, but never more than max length 65535 (OxFFFF) - * @return nothing, but parameter aData work as return buffer - * @exeption Leaves with standard error codes - */ - void GetDataL( TDataType& aMimeType, CBufFlat& aData ); - - -private: - -// private functions - - /** - * Returns the earliest version number of the server that we can talk to - * - * @since S60 v3.1 - * @return TVersion Earliest version number we can talk to - */ - TVersion Version() const; - - /** - * Start server if it isn't running already - * - * @since S60 v3.1 - * @return TInt Standard error code, KErrNone if server was running - * already or start was succesfull - */ - TInt StartServer(); - - /** - * Create server process - * - * @since S60 v3.1 - * @return TInt standard error code, KErrNone when creation was success - */ - TInt CreateServerProcess(); - - }; - -#endif // R_CATALOGSPCCONNECTIVITYCLIENT_H - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/inc/catalogspcconnectivitydefines.h --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/inc/catalogspcconnectivitydefines.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2006 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: Server information that the client needs -* -*/ - - -#include - -/** Server name */ -_LIT( KCatalogsPCConnectivityServerName, - "CatalogsPCConnectivityServer" ); - -/** Semaphore that is used when creating a new server */ -_LIT( KCatalogsPCConnectivityServerSemaphoreName, - "CATALOGSPCCONNECTIVITYSemaphore" ); - -/** File that is passed to the new server-process for execution */ -_LIT( KCatalogsPCConnectivityServerFilename, - "catalogsenginepcclientfrontend" ); - -// Default message slot amount in a session -const TUint KCatalogsPCConnectivityDefaultMessageSlots = 255; - -/** Version numbers */ -const TUint KCatalogsPCConnectivityMajorVersionNumber=1; -const TUint KCatalogsPCConnectivityMinorVersionNumber=0; -const TUint KCatalogsPCConnectivityBuildVersionNumber=0; - -/** Function opcodes used in message passing between client and server */ -enum TCatalogsPCConnectivityServRqst - { - ECatalogsPCConnectivitySupportedMimeTypes = 1, - ECatalogsPCConnectivityPutData, - ECatalogsPCConnectivityGetData, - ECatalogsPCConnectivityGetSize - }; - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/inc/catalogspcconnectivityplugin.h --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/inc/catalogspcconnectivityplugin.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2006 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: This plugin enables the Catalogs PC client to communicate -* with the Catalogs engine -* -*/ - - -#ifndef C_CATALOGSPCCONNECTIVITYPLUGIN_H -#define C_CATALOGSPCCONNECTIVITYPLUGIN_H - -#include "catalogspcconnectivityclient.h" - -/** - * Plugin enables Catalogs PC client to communicate with the Catalogs engine - * - * This class get requests from Catalogs PC client. It passes the requests - * to client CatalogsPCConnectivityClient - * - * @lib catalogspcconnectivityplugin - * @since S60 v3.1 - */ -class CCatalogsPCConnectivityPlugin : public CBase - { -public: - - /** - * Standard symbian object construction first phase - * - * @since S60 v3.1 - * @return CCatalogsPCConnectivityPlugin pointer - */ - IMPORT_C static CCatalogsPCConnectivityPlugin* NewL(); - - /** - * Standard symbian object constructing first phase - * - * @since S60 v3.1 - * @return CCatalogsPCConnectivityPlugin pointer - */ - IMPORT_C static CCatalogsPCConnectivityPlugin* NewLC(); - - /** - * Destructor - * - * @since S60 v3.1 - */ - IMPORT_C virtual ~CCatalogsPCConnectivityPlugin(); - - /** - * A connection is formed to the Catalogs engine pc client front-end. - * This will start up the front-end server and connect to it - * - * @return TInt Standard error code, KErrNone if connection is formed - * @since S60 v3.1 - */ - IMPORT_C TInt Connect(); - - /** - * The connection to the Catalogs engine front-end is closed - * - * @since S60 v3.1 - */ - IMPORT_C void Close(); - - /** - * All MIME types supported by this component can be asked using this method - * - * @return RPointerArray contains all supported MIME types. - * The ownership is transferred to the caller. - * Use ResetAndDestroy method to free all allocated memory - * @exeption Leaves with standard error codes - * @since S60 v3.1 - */ - IMPORT_C RPointerArray SupportedMimeTypesL(); - - /** - * A Data packet of max length 65535 (0xFFFF) bytes is synchronously - * sent to the Catalogs engine front-end. - * Usage: After PutDataL has been called, you must call GetDataL - * before you can call PutDataL again - * - * @param aMimeType Data packet MIME type - * @param aData Data buffer to read from - * @exeption Leaves with standard error codes - * KErrNotSupported if not supported MIME type - * @since S60 v3.1 - */ - IMPORT_C void PutDataL( const TDataType& aMimeType, - const CBufFlat& aData ); - - /** - * A data packet is synchronously transfered from the Catalogs front-end - * and returned to caller - * Usage: Everytime before calling GetDataL, you have to call PutDataL. - * You may not call GetData in sequentially. - * - * @since S60 v3.1 - * @param aMimeType MIME type of the received data packet - * @param aData Data buffer to write to. ExpandL function will be called - * with the correct size for aData, but not more than max length - * 65535 (OxFFFF) - * @return The reference parameters contain the return data - * @exeption Leaves with standard error codes - */ - IMPORT_C void GetDataL( TDataType& aMimeType, CBufFlat& aData ); - - -private: - -// private functions - - - /** - * Constructor - * - * @since S60 v3.1 - */ - CCatalogsPCConnectivityPlugin(); - - /** - * Standard symbian object construction second phase - */ - void ConstructL(); - - -private: // data - - /** - * Client that communicate with the CatalogsEnginePCClientFrontEnd - */ - RCatalogsPCConnectivityClient iClient; - - }; - -#endif // C_CATALOGSPCCONNECTIVITYPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/src/catalogspcconnectivityclient.cpp --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/src/catalogspcconnectivityclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,229 +0,0 @@ -/* -* Copyright (c) 2006 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: Client that communicate with CatalogsEnginePCClientFrontEnd -* -*/ - - -#include "catalogspcconnectivityclient.h" -#include "catalogspcconnectivitydefines.h" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -RCatalogsPCConnectivityClient::RCatalogsPCConnectivityClient() - { - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -RCatalogsPCConnectivityClient::~RCatalogsPCConnectivityClient() - { - } - -// --------------------------------------------------------------------------- -// Start server and create session with server -// --------------------------------------------------------------------------- -// -TInt RCatalogsPCConnectivityClient::Connect() - { - TInt err = StartServer(); - - if ( err == KErrNone ) - { - err = CreateSession( - KCatalogsPCConnectivityServerName, - Version(), - KCatalogsPCConnectivityDefaultMessageSlots ); - } - return err; - } - -// --------------------------------------------------------------------------- -// Close session (After session is closed will server be closed too) -// --------------------------------------------------------------------------- -// -void RCatalogsPCConnectivityClient::Close() - { - RHandleBase::Close(); - } - -// --------------------------------------------------------------------------- -// Give MIME types supported by this Module -// --------------------------------------------------------------------------- -// -RPointerArray RCatalogsPCConnectivityClient:: -SupportedMimeTypesL() - { - RPointerArray supportedMIMEs; - TBool isThereMore = ETrue; - TPckgBuf pckgIsThereMore; - TDataType* tempMIME = 0; - TPckgBuf pckgMIME; - - while( isThereMore ) - { - User::LeaveIfError( SendReceive( - ECatalogsPCConnectivitySupportedMimeTypes, - TIpcArgs( &pckgMIME, &pckgIsThereMore ) ) ); - isThereMore = pckgIsThereMore(); - tempMIME = new( ELeave ) TDataType( pckgMIME() ); - User::LeaveIfError( supportedMIMEs.Append( tempMIME ) ); - } - - return supportedMIMEs; - } - -// --------------------------------------------------------------------------- -// Data package from CatalogsPCConnectivityPlugin -// --------------------------------------------------------------------------- -// -void RCatalogsPCConnectivityClient::PutDataL( - const TDataType& aMimeType, const CBufFlat& aData ) - { - TInt size = aData.Size(); - - RBuf8 desData; - desData.CreateL( size ); - desData.CleanupClosePushL(); - aData.Read( 0, desData, size ); - TPckgBuf pckgMIME( aMimeType ); - - User::LeaveIfError( SendReceive( - ECatalogsPCConnectivityPutData, - TIpcArgs( &pckgMIME, &desData, size ) ) ); - - CleanupStack::Pop(); //desData - desData.Close(); - } - -// --------------------------------------------------------------------------- -// Data request from CatalogsPCConnectivityPlugin -// First ask the size from server, then give correct size CBufFlat -// --------------------------------------------------------------------------- -// -void RCatalogsPCConnectivityClient::GetDataL( - TDataType& aMimeType, CBufFlat& aData ) - { - TPckgBuf pckgSize; - TPckgBuf pckgMIME; - - User::LeaveIfError( SendReceive( - ECatalogsPCConnectivityGetSize, - TIpcArgs( &pckgMIME, &pckgSize ) ) ); - - TInt size = pckgSize(); - aMimeType = pckgMIME(); - - RBuf8 desData; - desData.CreateL( size ); - desData.CleanupClosePushL(); - - User::LeaveIfError( SendReceive( - ECatalogsPCConnectivityGetData, - TIpcArgs( &desData ) ) ); - - aData.Reset(); - aData.ExpandL( 0, size ); - aData.Write( 0, desData, size ); - - CleanupStack::Pop(); //desData - desData.Close(); - } - -// --------------------------------------------------------------------------- -// Return version number -// --------------------------------------------------------------------------- -// -TVersion RCatalogsPCConnectivityClient::Version() const - { - return( TVersion( KCatalogsPCConnectivityMajorVersionNumber, - KCatalogsPCConnectivityMinorVersionNumber, - KCatalogsPCConnectivityBuildVersionNumber ) ); - } - -// --------------------------------------------------------------------------- -// Start server if it isn't running already -// --------------------------------------------------------------------------- -// -TInt RCatalogsPCConnectivityClient::StartServer() - { - // Check if the server is already running - TFindServer findServer( KCatalogsPCConnectivityServerName ); - TFullName name; - - TInt result = findServer.Next( name ); - if ( result == KErrNone ) - { - // Server is running - return KErrNone; - } - - // Create a semaphore so we can wait while the server starts - RSemaphore semaphore; - result = semaphore.CreateGlobal( - KCatalogsPCConnectivityServerSemaphoreName, 0 ); - if ( result != KErrNone ) - { - return result; - } - - // Create new Engine service process - result = CreateServerProcess(); - if ( result != KErrNone ) - { - semaphore.Close(); - return result; - } - - // Wait while the server starts - semaphore.Wait(); - - // Semaphore has been signaled, close and return - semaphore.Close(); - - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Create server process -// --------------------------------------------------------------------------- -// -TInt RCatalogsPCConnectivityClient::CreateServerProcess() - { - - RProcess server; - - TInt result = server.Create( - KCatalogsPCConnectivityServerFilename, KNullDesC ); - if ( result != KErrNone ) - { - return result; - } - - // Resume server thread and close handle - server.Resume(); - server.Close(); - - return KErrNone; - } - - -//end diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/catalogspcconnectivityplugin/src/catalogspcconnectivityplugin.cpp --- a/connectivitymodules/SeCon/catalogspcconnectivityplugin/src/catalogspcconnectivityplugin.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -* Copyright (c) 2006 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: This plugin enables the Catalogs PC client to communicate -* with the Catalogs engine -* -*/ - - - -#include "catalogspcconnectivityplugin.h" - - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CCatalogsPCConnectivityPlugin::CCatalogsPCConnectivityPlugin() - { - } - -// --------------------------------------------------------------------------- -// Empty -// --------------------------------------------------------------------------- -// -void CCatalogsPCConnectivityPlugin::ConstructL() - { - } - - -// --------------------------------------------------------------------------- -// Standard symbian object constructing first phase -// --------------------------------------------------------------------------- -// -EXPORT_C CCatalogsPCConnectivityPlugin* CCatalogsPCConnectivityPlugin::NewL() - { - CCatalogsPCConnectivityPlugin* self = - CCatalogsPCConnectivityPlugin::NewLC(); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// Standard symbian object constructing first phase -// --------------------------------------------------------------------------- -// -EXPORT_C CCatalogsPCConnectivityPlugin* CCatalogsPCConnectivityPlugin::NewLC() - { - CCatalogsPCConnectivityPlugin* self = - new( ELeave ) CCatalogsPCConnectivityPlugin; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -EXPORT_C CCatalogsPCConnectivityPlugin::~CCatalogsPCConnectivityPlugin() - { - iClient.Close(); - } - - -// --------------------------------------------------------------------------- -// Connect to Catalogs engine pc client front-end -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCatalogsPCConnectivityPlugin::Connect() - { - return iClient.Connect(); - } - -// --------------------------------------------------------------------------- -// Close the connection to Catalogs engine pc client front-end -// --------------------------------------------------------------------------- -// -EXPORT_C void CCatalogsPCConnectivityPlugin::Close() - { - iClient.Close(); - } - -// --------------------------------------------------------------------------- -// Give all MIME types supported by this component -// --------------------------------------------------------------------------- -// -EXPORT_C RPointerArray CCatalogsPCConnectivityPlugin:: - SupportedMimeTypesL() - { - return iClient.SupportedMimeTypesL(); - } - -// --------------------------------------------------------------------------- -// Data package from PC Client -// --------------------------------------------------------------------------- -// -EXPORT_C void CCatalogsPCConnectivityPlugin::PutDataL( - const TDataType& aMimeType, const CBufFlat& aData ) - { - iClient.PutDataL( aMimeType, aData ); - } - -// --------------------------------------------------------------------------- -// Data request from PC Client -// --------------------------------------------------------------------------- -// -EXPORT_C void CCatalogsPCConnectivityPlugin::GetDataL( - TDataType& aMimeType, CBufFlat& aData ) - { - iClient.GetDataL( aMimeType, aData ); - } - - -// ======== GLOBAL FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Dll entry point -// --------------------------------------------------------------------------- -// -GLDEF_C TInt E32Dll() - { - return( KErrNone ); - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/pcconn/bld/bld.inf --- a/connectivitymodules/SeCon/clients/pcconn/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* 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: -* This file provides the information required for building the -* whole of SConPCConnClient -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -../bld/sconpcconnclient.mmp diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/pcconn/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/clients/pcconn/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -EXPORTS - ??0RSConPCConnSession@@QAE@XZ @ 1 NONAME ; RSConPCConnSession::RSConPCConnSession(void) - ??1RSConPCConnSession@@QAE@XZ @ 2 NONAME ; RSConPCConnSession::~RSConPCConnSession(void) - ?Close@RSConPCConnSession@@QAEXXZ @ 3 NONAME ; void RSConPCConnSession::Close(void) - ?Connect@RSConPCConnSession@@QAEHXZ @ 4 NONAME ; int RSConPCConnSession::Connect(void) - ?GetPacketL@RSConPCConnSession@@QAEHABVTDesC16@@ABVTDesC8@@AAPAVCBufFlat@@@Z @ 5 NONAME ; int RSConPCConnSession::GetPacketL(class TDesC16 const &, class TDesC8 const &, class CBufFlat * &) - ?PutPacketL@RSConPCConnSession@@QAEHABVTDesC16@@ABVTDesC8@@AAPAVCBufFlat@@@Z @ 6 NONAME ; int RSConPCConnSession::PutPacketL(class TDesC16 const &, class TDesC8 const &, class CBufFlat * &) - ?ResetServer@RSConPCConnSession@@QAEHXZ @ 7 NONAME ; int RSConPCConnSession::ResetServer(void) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/pcconn/bld/def/eabiuu.def --- a/connectivitymodules/SeCon/clients/pcconn/bld/def/eabiuu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -EXPORTS - _ZN18RSConPCConnSession10GetPacketLERK7TDesC16RK6TDesC8RP8CBufFlat @ 1 NONAME - _ZN18RSConPCConnSession10PutPacketLERK7TDesC16RK6TDesC8RP8CBufFlat @ 2 NONAME - _ZN18RSConPCConnSession11ResetServerEv @ 3 NONAME - _ZN18RSConPCConnSession5CloseEv @ 4 NONAME - _ZN18RSConPCConnSession7ConnectEv @ 5 NONAME - _ZN18RSConPCConnSessionC1Ev @ 6 NONAME - _ZN18RSConPCConnSessionC2Ev @ 7 NONAME - _ZN18RSConPCConnSessionD1Ev @ 8 NONAME - _ZN18RSConPCConnSessionD2Ev @ 9 NONAME - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/pcconn/bld/sconpcconnclient.mmp --- a/connectivitymodules/SeCon/clients/pcconn/bld/sconpcconnclient.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: Client side of PC Connectivity Server-Client -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_CLIENT_DLL - -TARGET sconpcconnclient.dll -TARGETTYPE dll - -UID 0x10009D8D 0x101F99F7 - -TARGETPATH sys/bin - -#if defined(ARMCC) -DEFFILE ./def/eabiu -#elif defined(WINSCW) -DEFFILE ./def/bwinscw -#elif defined(WINS) -DEFFILE ./def/bwins -#elif defined(ARM) -DEFFILE ./def/bmarm -#endif - - -SOURCEPATH ../src - -SOURCE sconpcconnclient.cpp - -// Client -USERINCLUDE ../inc -USERINCLUDE ../../../inc - -// Server -USERINCLUDE ../../../servers/pcconn/inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY estor.lib // RMemWriteStream -LIBRARY efsrv.lib // Rfs, RFile -DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/pcconn/inc/sconpcconnclient.h --- a/connectivitymodules/SeCon/clients/pcconn/inc/sconpcconnclient.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: PC Connectivity client -* -*/ - - -#ifndef __SCONPCCONNCLIENT_H__ -#define __SCONPCCONNCLIENT_H__ - -// ----------------------------------------------------------------------------- -// class RSConPCConnSession - the client session -// ----------------------------------------------------------------------------- -class RSConPCConnSession : public RSessionBase - { -public: - IMPORT_C RSConPCConnSession(); - IMPORT_C ~RSConPCConnSession(); - - /** - * Starts the server and connects to it - * @param none - * @return KerrNone or an error code - */ - IMPORT_C TInt Connect(); - - /** - * Disconnects from the server and terminates the server - * @param none - * @return none - */ - IMPORT_C void Close(); - - /** - * Passes an OBEX Put -message to the server - * @param none - * @return none - */ - IMPORT_C TInt PutPacketL( const TDesC& aNameHeader, - const TDesC8& aTypeHeader, - CBufFlat*& aBuffer ); - - /** - * Passes an OBEX Get -message to the server - * @param none - * @return none - */ - IMPORT_C TInt GetPacketL( const TDesC& aNameHeader, - const TDesC8& aTypeHeader, - CBufFlat*& aBuffer ); - - /** - * Passes an reset -message to the server - * @param none - * @return none - */ - IMPORT_C TInt ResetServer(); - -private: - TVersion Version() const; - TInt LaunchServer(); - TInt CreateAndSendChunkHandle(); - -private: - RChunk iChunk; - }; - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/pcconn/src/sconpcconnclient.cpp --- a/connectivitymodules/SeCon/clients/pcconn/src/sconpcconnclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,304 +0,0 @@ -/* -* 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: PC Connectivity client -* -*/ - - - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include -#include - -// Client - server -#include "sconpcconnclient.h" -#include "sconpcconnclientserver.h" -#include "debug.h" - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::RSConPCConnSession() -// Default constructor -// ----------------------------------------------------------------------------- -// -EXPORT_C RSConPCConnSession::RSConPCConnSession() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::~RSConPCConnSession() -// Default destructor -// ----------------------------------------------------------------------------- -// -EXPORT_C RSConPCConnSession::~RSConPCConnSession() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::Connect() -// Creates a chunk and server, starts the server connection -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt RSConPCConnSession::Connect() - { - TRACE_FUNC_ENTRY; - - TInt ret ( KErrNone ); - - ret = CreateSession(KSConPCConnServerName,Version()); - - if ( ret == KErrNotFound || ret == KErrServerTerminated ) - { - ret = LaunchServer(); - - if ( ret == KErrNone || ret == KErrAlreadyExists ) - { - ret = CreateSession( KSConPCConnServerName, Version() ); - } - } - - if ( ret == KErrNone ) - { - ret = CreateAndSendChunkHandle(); - if ( ret != KErrNone ) - { - LOGGER_WRITE("CreateAndSendChunkHandle failed, close session"); - Close(); - } - } - - LOGGER_WRITE_1( "RSConPCConnSession::Connect() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::Close() -// Closes the server connection -// ----------------------------------------------------------------------------- -// -EXPORT_C void RSConPCConnSession::Close() - { - TRACE_FUNC_ENTRY; - iChunk.Close(); - RSessionBase::Close(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::Version() -// Returns the version of the client -// ----------------------------------------------------------------------------- -// -TVersion RSConPCConnSession::Version(void) const - { - return (TVersion(KSConPCConnServerVersionMajor, - KSConPCConnServerVersionMinor, - KSConPCConnServerVersionBuild)); - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::Version() -// Forwards a PUT -message to the server -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt RSConPCConnSession::PutPacketL( - const TDesC& aNameHeader, const TDesC8& aTypeHeader, CBufFlat*& aBuffer ) - { - TRACE_FUNC_ENTRY; - - if ( !aBuffer ) - { - return KErrArgument; - } - - if ((aBuffer->Size() + aTypeHeader.Size() + - aNameHeader.Size()) > KSConPCConnChunkMaxSize) - { - LOGGER_WRITE( "RSConPCConnSession::PutPacketL() :\ - WBXML document too big" ); - return KErrTooBig; - } - - TInt ret (KErrNone); - iChunk.Adjust( KSConPCConnChunkMaxSize ); - RMemWriteStream buf( iChunk.Base(), iChunk.Size() ); - - buf.WriteInt32L( aNameHeader.Size() ); - buf.WriteL( aNameHeader ); - - buf.WriteInt32L( aTypeHeader.Size() ); - buf.WriteL( aTypeHeader ); - - // WBXML document - buf.WriteInt32L( aBuffer->Size() ); - buf.WriteL( aBuffer->Ptr(0) ); - buf.CommitL(); - buf.Close(); - - TIpcArgs args; - ret = SendReceive ( EPutMessage, args ); - - LOGGER_WRITE_1( "RSConPCConnSession::PutPacketL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::Version() -// Forwards a GET -message to the server -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt RSConPCConnSession::GetPacketL( - const TDesC& aNameHeader, const TDesC8& aTypeHeader, CBufFlat*& aBuffer ) - { - TRACE_FUNC_ENTRY; - - if ( !aBuffer ) - { - return KErrArgument; - } - - TInt ret (KErrNone); - - iChunk.Adjust( KSConPCConnChunkMaxSize); - RMemWriteStream writeBuf( iChunk.Base(), iChunk.Size() ); - writeBuf.WriteInt32L( aNameHeader.Size() ); - writeBuf.WriteL( aNameHeader ); - - writeBuf.WriteInt32L( aTypeHeader.Size() ); - writeBuf.WriteL( aTypeHeader ); - - writeBuf.CommitL(); - writeBuf.Close(); - - TIpcArgs args; - ret = SendReceive ( EGetMessage, args ); - - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSConPCConnSession::GetPacketL() :\ - Send Receive failed with code %d", ret ); - return ret; - }; - - // copy data from the chunk - RMemReadStream readBuf( iChunk.Base(), iChunk.Size() ); - TInt32 length ( 0 ); - - aBuffer->Reset(); - length = readBuf.ReadInt32L(); - - HBufC8* data = HBufC8::NewLC( length ); - TPtr8 dataPtr = data->Des(); - - readBuf.ReadL( dataPtr, length ); - aBuffer->ExpandL( 0, length ); - aBuffer->Write ( 0, dataPtr ); - - readBuf.Close(); - - CleanupStack::PopAndDestroy(); // data; - - LOGGER_WRITE_1( "RSConPCConnSession::GetPacketL()\ - : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::Version() -// Forwards a Reset -message to the server -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt RSConPCConnSession::ResetServer() - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TIpcArgs args; - ret = SendReceive ( EResetMessage, args ); - LOGGER_WRITE_1( "RSConPCConnSession::ResetServerL(): ret %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::LaunchServer() -// Launches the server -// ----------------------------------------------------------------------------- -// -TInt RSConPCConnSession::LaunchServer() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - // Create server - RProcess p; - ret = p.Create(KSConPCConnServerExe, KNullDesC); - - if ( ret != KErrNone ) - { - // Loading failed. - LOGGER_WRITE_1( "RProcess::Create failed, err: %d", ret ); - return ret; - } - - - TRequestStatus status; - p.Rendezvous( status ); - - if ( status != KRequestPending ) - { - p.Kill(0); // abort startup - p.Close(); - LOGGER_WRITE("Abort startup, return KErrGeneral"); - return KErrGeneral; - } - else - { - p.Resume(); // logon OK - start the server - } - - User::WaitForRequest(status); - - p.Close(); - - LOGGER_WRITE_1( "RSConPCConnSession::LaunchServerL(): returned %d", status.Int() ); - return status.Int(); - } - -// ----------------------------------------------------------------------------- -// RSConPCConnSession::CreateAndSendChunkHandle() -// Creates a chunk and sends a handle to server -// ----------------------------------------------------------------------------- -// -TInt RSConPCConnSession::CreateAndSendChunkHandle() - { - TRACE_FUNC_ENTRY; - TInt err = iChunk.CreateGlobal( KNullDesC, - KSConPCConnChunkSize, - KSConPCConnChunkMaxSize ); - if ( err != KErrNone ) - { - LOGGER_WRITE_1("iChunk.CreateGlobal failed, err: %d", err); - return err; - } - TIpcArgs args; - args.Set( 0, iChunk ); - err = SendReceive( EChunkMessage, args ); - - LOGGER_WRITE_1("RSConPCConnSession::CreateAndSendChunkHandle : returned: %d", err); - return err; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/bwins/sconsyncclientu.def --- a/connectivitymodules/SeCon/clients/syncclient/bwins/sconsyncclientu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -EXPORTS - ??0RSconSyncSession@@QAE@XZ @ 1 NONAME ; RSconSyncSession::RSconSyncSession(void) - ??1CSconDataproviderInfo@@UAE@XZ @ 2 NONAME ; CSconDataproviderInfo::~CSconDataproviderInfo(void) - ??1RSconSyncSession@@QAE@XZ @ 3 NONAME ; RSconSyncSession::~RSconSyncSession(void) - ?AddedItemsL@RSconSyncSession@@QBEXAAV?$RArray@H@@@Z @ 4 NONAME ; void RSconSyncSession::AddedItemsL(class RArray &) const - ?CancelRequest@RSconSyncSession@@QAEXXZ @ 5 NONAME ; void RSconSyncSession::CancelRequest(void) - ?Close@RSconSyncSession@@QAEXXZ @ 6 NONAME ; void RSconSyncSession::Close(void) - ?CloseDataStore@RSconSyncSession@@QBEXXZ @ 7 NONAME ; void RSconSyncSession::CloseDataStore(void) const - ?CommitChangeInfoL@RSconSyncSession@@QAEXABV?$RArray@H@@@Z @ 8 NONAME ; void RSconSyncSession::CommitChangeInfoL(class RArray const &) - ?Connect@RSconSyncSession@@QAEHXZ @ 9 NONAME ; int RSconSyncSession::Connect(void) - ?CreateItemL@RSconSyncSession@@QAEXAAHHABVTDesC8@@11@Z @ 10 NONAME ; void RSconSyncSession::CreateItemL(int &, int, class TDesC8 const &, class TDesC8 const &, class TDesC8 const &) - ?CreateItemL@RSconSyncSession@@QAEXAAV?$TPckg@H@@HABVTDesC8@@11AAVTRequestStatus@@@Z @ 11 NONAME ; void RSconSyncSession::CreateItemL(class TPckg &, int, class TDesC8 const &, class TDesC8 const &, class TDesC8 const &, class TRequestStatus &) - ?DefaultStoreL@CSconDataproviderInfo@@QAEAAVTDesC16@@XZ @ 12 NONAME ; class TDesC16 & CSconDataproviderInfo::DefaultStoreL(void) - ?DeleteAllItems@RSconSyncSession@@QAEXAAVTRequestStatus@@@Z @ 13 NONAME ; void RSconSyncSession::DeleteAllItems(class TRequestStatus &) - ?DeleteItemL@RSconSyncSession@@QAEXH@Z @ 14 NONAME ; void RSconSyncSession::DeleteItemL(int) - ?DeletedItemsL@RSconSyncSession@@QBEXAAV?$RArray@H@@@Z @ 15 NONAME ; void RSconSyncSession::DeletedItemsL(class RArray &) const - ?DisplayNameL@CSconDataproviderInfo@@QAEAAVTDesC16@@XZ @ 16 NONAME ; class TDesC16 & CSconDataproviderInfo::DisplayNameL(void) - ?ExternalizeL@CSconDataproviderInfo@@QBEXAAVRWriteStream@@@Z @ 17 NONAME ; void CSconDataproviderInfo::ExternalizeL(class RWriteStream &) const - ?GetParent@RSconSyncSession@@QAEHHAAH@Z @ 18 NONAME ; int RSconSyncSession::GetParent(int, int &) - ?GetSyncTimeStampL@RSconSyncSession@@QBEXHHAAVTDateTime@@@Z @ 19 NONAME ; void RSconSyncSession::GetSyncTimeStampL(int, int, class TDateTime &) const - ?HasSyncHistoryL@RSconSyncSession@@QBEHXZ @ 20 NONAME ; int RSconSyncSession::HasSyncHistoryL(void) const - ?ImplementationUid@CSconDataproviderInfo@@QBE?AVTUid@@XZ @ 21 NONAME ; class TUid CSconDataproviderInfo::ImplementationUid(void) const - ?InternalizeL@CSconDataproviderInfo@@QAEXAAVRReadStream@@@Z @ 22 NONAME ; void CSconDataproviderInfo::InternalizeL(class RReadStream &) - ?ListAllImplementationsL@RSconSyncSession@@QAEXAAV?$RPointerArray@VCSconDataproviderInfo@@@@@Z @ 23 NONAME ; void RSconSyncSession::ListAllImplementationsL(class RPointerArray &) - ?ListStoresL@CSconDataproviderInfo@@QBEPAVCDesC16Array@@XZ @ 24 NONAME ; class CDesC16Array * CSconDataproviderInfo::ListStoresL(void) const - ?ModifiedItemsL@RSconSyncSession@@QBEXAAV?$RArray@H@@@Z @ 25 NONAME ; void RSconSyncSession::ModifiedItemsL(class RArray &) const - ?MoveItemL@RSconSyncSession@@QAEXHH@Z @ 26 NONAME ; void RSconSyncSession::MoveItemL(int, int) - ?MovedItemsL@RSconSyncSession@@QBEXAAV?$RArray@H@@@Z @ 27 NONAME ; void RSconSyncSession::MovedItemsL(class RArray &) const - ?NewL@CSconDataproviderInfo@@SAPAV1@XZ @ 28 NONAME ; class CSconDataproviderInfo * CSconDataproviderInfo::NewL(void) - ?OpenDataStoreL@RSconSyncSession@@QAEXHABVTDesC16@@H@Z @ 29 NONAME ; void RSconSyncSession::OpenDataStoreL(int, class TDesC16 const &, int) - ?OpenItemL@RSconSyncSession@@QAEXHAAH0AAVTDes8@@1AAVCBufFlat@@@Z @ 30 NONAME ; void RSconSyncSession::OpenItemL(int, int &, int &, class TDes8 &, class TDes8 &, class CBufFlat &) - ?ReplaceItemL@RSconSyncSession@@QAEXHHHABVTDesC8@@@Z @ 31 NONAME ; void RSconSyncSession::ReplaceItemL(int, int, int, class TDesC8 const &) - ?ReplaceItemL@RSconSyncSession@@QAEXHHHABVTDesC8@@AAVTRequestStatus@@@Z @ 32 NONAME ; void RSconSyncSession::ReplaceItemL(int, int, int, class TDesC8 const &, class TRequestStatus &) - ?ResetChangeInfoL@RSconSyncSession@@QAEXXZ @ 33 NONAME ; void RSconSyncSession::ResetChangeInfoL(void) - ?SetDefaultStoreL@CSconDataproviderInfo@@QAEXABVTDesC16@@@Z @ 34 NONAME ; void CSconDataproviderInfo::SetDefaultStoreL(class TDesC16 const &) - ?SetDisplayNameL@CSconDataproviderInfo@@QAEXABVTDesC16@@@Z @ 35 NONAME ; void CSconDataproviderInfo::SetDisplayNameL(class TDesC16 const &) - ?SetImplementationUid@CSconDataproviderInfo@@QAEXVTUid@@@Z @ 36 NONAME ; void CSconDataproviderInfo::SetImplementationUid(class TUid) - ?SetRemoteStoreFormatL@RSconSyncSession@@QAEXABVCSmlDataStoreFormat@@@Z @ 37 NONAME ; void RSconSyncSession::SetRemoteStoreFormatL(class CSmlDataStoreFormat const &) - ?SetStoresL@CSconDataproviderInfo@@QAEXABVCDesC16Array@@@Z @ 38 NONAME ; void CSconDataproviderInfo::SetStoresL(class CDesC16Array const &) - ?SoftDeleteItemL@RSconSyncSession@@QAEXH@Z @ 39 NONAME ; void RSconSyncSession::SoftDeleteItemL(int) - ?SoftDeletedItemsL@RSconSyncSession@@QBEXAAV?$RArray@H@@@Z @ 40 NONAME ; void RSconSyncSession::SoftDeletedItemsL(class RArray &) const - ?StoreFormatL@RSconSyncSession@@QAEPAVCSmlDataStoreFormat@@ABVRStringPool@@@Z @ 41 NONAME ; class CSmlDataStoreFormat * RSconSyncSession::StoreFormatL(class RStringPool const &) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/eabi/sconsyncclientu.def --- a/connectivitymodules/SeCon/clients/syncclient/eabi/sconsyncclientu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -EXPORTS - _ZN16RSconSyncSession11CreateItemLER5TPckgIiEiRK6TDesC8S5_S5_R14TRequestStatus @ 1 NONAME - _ZN16RSconSyncSession11CreateItemLERiiRK6TDesC8S3_S3_ @ 2 NONAME - _ZN16RSconSyncSession11DeleteItemLEi @ 3 NONAME - _ZN16RSconSyncSession12ReplaceItemLEiiiRK6TDesC8 @ 4 NONAME - _ZN16RSconSyncSession12ReplaceItemLEiiiRK6TDesC8R14TRequestStatus @ 5 NONAME - _ZN16RSconSyncSession12StoreFormatLERK11RStringPool @ 6 NONAME - _ZN16RSconSyncSession13CancelRequestEv @ 7 NONAME - _ZN16RSconSyncSession14DeleteAllItemsER14TRequestStatus @ 8 NONAME - _ZN16RSconSyncSession14OpenDataStoreLEiRK7TDesC16i @ 9 NONAME - _ZN16RSconSyncSession15SoftDeleteItemLEi @ 10 NONAME - _ZN16RSconSyncSession16ResetChangeInfoLEv @ 11 NONAME - _ZN16RSconSyncSession17CommitChangeInfoLERK6RArrayIiE @ 12 NONAME - _ZN16RSconSyncSession21SetRemoteStoreFormatLERK19CSmlDataStoreFormat @ 13 NONAME - _ZN16RSconSyncSession23ListAllImplementationsLER13RPointerArrayI21CSconDataproviderInfoE @ 14 NONAME - _ZN16RSconSyncSession5CloseEv @ 15 NONAME - _ZN16RSconSyncSession7ConnectEv @ 16 NONAME - _ZN16RSconSyncSession9GetParentEiRi @ 17 NONAME - _ZN16RSconSyncSession9MoveItemLEii @ 18 NONAME - _ZN16RSconSyncSession9OpenItemLEiRiS0_R5TDes8S2_R8CBufFlat @ 19 NONAME - _ZN16RSconSyncSessionC1Ev @ 20 NONAME - _ZN16RSconSyncSessionC2Ev @ 21 NONAME - _ZN16RSconSyncSessionD1Ev @ 22 NONAME - _ZN16RSconSyncSessionD2Ev @ 23 NONAME - _ZN21CSconDataproviderInfo10SetStoresLERK12CDesC16Array @ 24 NONAME - _ZN21CSconDataproviderInfo12DisplayNameLEv @ 25 NONAME - _ZN21CSconDataproviderInfo12InternalizeLER11RReadStream @ 26 NONAME - _ZN21CSconDataproviderInfo13DefaultStoreLEv @ 27 NONAME - _ZN21CSconDataproviderInfo15SetDisplayNameLERK7TDesC16 @ 28 NONAME - _ZN21CSconDataproviderInfo16SetDefaultStoreLERK7TDesC16 @ 29 NONAME - _ZN21CSconDataproviderInfo20SetImplementationUidE4TUid @ 30 NONAME - _ZN21CSconDataproviderInfo4NewLEv @ 31 NONAME - _ZN21CSconDataproviderInfoD0Ev @ 32 NONAME - _ZN21CSconDataproviderInfoD1Ev @ 33 NONAME - _ZN21CSconDataproviderInfoD2Ev @ 34 NONAME - _ZNK16RSconSyncSession11AddedItemsLER6RArrayIiE @ 35 NONAME - _ZNK16RSconSyncSession11MovedItemsLER6RArrayIiE @ 36 NONAME - _ZNK16RSconSyncSession13DeletedItemsLER6RArrayIiE @ 37 NONAME - _ZNK16RSconSyncSession14CloseDataStoreEv @ 38 NONAME - _ZNK16RSconSyncSession14ModifiedItemsLER6RArrayIiE @ 39 NONAME - _ZNK16RSconSyncSession15HasSyncHistoryLEv @ 40 NONAME - _ZNK16RSconSyncSession17GetSyncTimeStampLEiiR9TDateTime @ 41 NONAME - _ZNK16RSconSyncSession17SoftDeletedItemsLER6RArrayIiE @ 42 NONAME - _ZNK21CSconDataproviderInfo11ListStoresLEv @ 43 NONAME - _ZNK21CSconDataproviderInfo12ExternalizeLER12RWriteStream @ 44 NONAME - _ZNK21CSconDataproviderInfo17ImplementationUidEv @ 45 NONAME - _ZTI21CSconDataproviderInfo @ 46 NONAME ; ## - _ZTV21CSconDataproviderInfo @ 47 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/group/bld.inf --- a/connectivitymodules/SeCon/clients/syncclient/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2009-2010 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: Build information file for project SyncClient -* -*/ - - -PRJ_EXPORTS -../rom/sconsyncclient.iby CORE_APP_LAYER_IBY_EXPORT_PATH(sconsyncclient.iby) - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -sconsyncclient.mmp - -PRJ_TESTMMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/group/sconsyncclient.mmp --- a/connectivitymodules/SeCon/clients/syncclient/group/sconsyncclient.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 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: Client side of sconsyncserver -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -TARGET sconsyncclient.dll -TARGETTYPE dll - -CAPABILITY CAP_CLIENT_DLL - -UID 0x1000008d 0x2001A963 -VENDORID VID_DEFAULT - -SOURCEPATH ../src -SOURCE sconsyncclient.cpp -SOURCE scondataproviderinfo.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../../inc - -// Server -USERINCLUDE ../../../servers/syncserver/inc - - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY estor.lib -LIBRARY bafl.lib -LIBRARY charconv.lib -LIBRARY smlstoreformat.lib -DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/inc/scondataproviderinfo.h --- a/connectivitymodules/SeCon/clients/syncclient/inc/scondataproviderinfo.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 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: CSconDataproviderInfo header -* -*/ - - -#ifndef SCONDATAPROVIDERINFO_H_ -#define SCONDATAPROVIDERINFO_H_ - -#include -#include - -class RWriteStream; -class RReadStream; - -/** - * Contains information about DataSync dataprovider. - */ -class CSconDataproviderInfo : public CBase -{ -public: - IMPORT_C static CSconDataproviderInfo* NewL(); - IMPORT_C ~CSconDataproviderInfo(); - - IMPORT_C void ExternalizeL( RWriteStream& aStream ) const; - IMPORT_C void InternalizeL( RReadStream& aStream ); - - IMPORT_C TUid ImplementationUid() const; - IMPORT_C void SetImplementationUid( const TUid aUid ); - IMPORT_C TDesC& DisplayNameL(); - IMPORT_C void SetDisplayNameL( const TDesC& aName ); - IMPORT_C TDesC& DefaultStoreL(); - IMPORT_C void SetDefaultStoreL( const TDesC& aStore ); - IMPORT_C CDesCArray* ListStoresL() const; - IMPORT_C void SetStoresL( const CDesCArray& aStores ); -private: - CSconDataproviderInfo(); - void ConstructL(); - -private: - TInt iUid; - HBufC* iName; - HBufC* iDefaultStore; - CDesCArrayFlat* iStores; -}; - -typedef RPointerArray RSconDataProviderInfoArray; - -#endif /*SCONDATAPROVIDERINFO_H_*/ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/inc/sconsyncclient.h --- a/connectivitymodules/SeCon/clients/syncclient/inc/sconsyncclient.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 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: RSconSyncSession header -* -*/ - - -#ifndef _SCONSYNCCLIENT_H_ -#define _SCONSYNCCLIENT_H_ - -#include -#include -#include -#include - -#include "scondataproviderinfo.h" - - - -class CNSmlDataItemUidSet; - -class RSconSyncSession : public RSessionBase -{ -public: - IMPORT_C RSconSyncSession(); - IMPORT_C ~RSconSyncSession(); - - IMPORT_C TInt Connect(); - IMPORT_C void Close(); - - IMPORT_C void ListAllImplementationsL( RSconDataProviderInfoArray& aInfoArray ); - - IMPORT_C void OpenDataStoreL( const TSmlDataProviderId aProviderId, const TDesC& aStoreName, const TInt aContextId ); - - IMPORT_C void OpenItemL(TSmlDbItemUid aUid, TBool& aFieldChange, - TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, - CBufFlat& aItemData ); - - IMPORT_C void CreateItemL(TSmlDbItemUid& aUid, TSmlDbItemUid aParent, - const TDesC8& aMimeType, const TDesC8& aMimeVer, const TDesC8& aData); - IMPORT_C void CreateItemL(TPckg& aUidPckg, TSmlDbItemUid aParent, - const TDesC8& aMimeType, const TDesC8& aMimeVer, const TDesC8& aData, - TRequestStatus& aStatus ); - - IMPORT_C void ReplaceItemL(TSmlDbItemUid aUid, TSmlDbItemUid aParent, - TBool aFieldChange, const TDesC8& aData); - IMPORT_C void ReplaceItemL(TSmlDbItemUid aUid, TSmlDbItemUid aParent, - TBool aFieldChange, const TDesC8& aData, - TRequestStatus& aStatus ); - - IMPORT_C void MoveItemL(TSmlDbItemUid aUid, TSmlDbItemUid aNewParent); - IMPORT_C void DeleteItemL(TSmlDbItemUid aUid); - IMPORT_C void SoftDeleteItemL(TSmlDbItemUid aUid); - IMPORT_C void DeleteAllItems( TRequestStatus& aStatus ); - - IMPORT_C TBool HasSyncHistoryL() const; - IMPORT_C void AddedItemsL( RArray& aItems ) const; - IMPORT_C void DeletedItemsL( RArray& aItems ) const; - IMPORT_C void SoftDeletedItemsL( RArray& aItems ) const; - IMPORT_C void ModifiedItemsL( RArray& aItems ) const; - IMPORT_C void MovedItemsL( RArray& aItems ) const; - - IMPORT_C void CloseDataStore() const; - - IMPORT_C void ResetChangeInfoL(); - IMPORT_C void CommitChangeInfoL(const RArray& aItems ); - - IMPORT_C void GetSyncTimeStampL( const TSmlDataProviderId aProviderId, const TInt aContextId, TDateTime& aTimeStamp ) const; - - IMPORT_C CSmlDataStoreFormat* StoreFormatL( const RStringPool& aStringPool ); - IMPORT_C void SetRemoteStoreFormatL( const CSmlDataStoreFormat& aServerDataStoreFormat ); - - - IMPORT_C void CancelRequest(); - - IMPORT_C TInt GetParent( TSmlDbItemUid aUid, TSmlDbItemUid& aParent ); -private: - TInt StartServer(); - TInt CreateAndSendChunkHandle(); -private: - RChunk iChunk; - TIpcArgs iArgs; - -}; - -#endif // _SCONSYNCCLIENT_H_ - -// End of File diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/rom/sconsyncclient.iby --- a/connectivitymodules/SeCon/clients/syncclient/rom/sconsyncclient.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 2010 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: IBY file for SconSyncClient -* -*/ - -#ifndef _SCONSYNCCLIENT_IBY_ -#define _SCONSYNCCLIENT_IBY_ - -#include - -file=ABI_DIR\BUILD_DIR\sconsyncclient.dll SHARED_LIB_DIR\sconsyncclient.dll - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/src/scondataproviderinfo.cpp --- a/connectivitymodules/SeCon/clients/syncclient/src/scondataproviderinfo.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* Copyright (c) 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: CSconDataproviderInfo implementation -* -*/ - - -#include "scondataproviderinfo.h" -#include -#include -#include // for CnvUtfConverter -#include "debug.h" - -CSconDataproviderInfo::CSconDataproviderInfo() - { - } - -EXPORT_C CSconDataproviderInfo::~CSconDataproviderInfo() - { - delete iName; - delete iDefaultStore; - delete iStores; - } - -EXPORT_C CSconDataproviderInfo* CSconDataproviderInfo::NewL() - { - return new (ELeave) CSconDataproviderInfo(); - } - -EXPORT_C void CSconDataproviderInfo::ExternalizeL( RWriteStream& aStream ) const - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("iUid: 0x%x", iUid); - aStream.WriteInt32L( iUid ); - if ( iName ) - { - HBufC8* temp = CnvUtfConverter::ConvertFromUnicodeToUtf8L( iName->Des() ); - CleanupStack::PushL( temp ); - TPtrC8 tempPtr = temp->Des(); - aStream.WriteUint16L( tempPtr.Length() ); - aStream.WriteL( tempPtr ); - CleanupStack::PopAndDestroy( temp ); - } - else - { - aStream.WriteUint16L( 0 ); - } - - if ( iDefaultStore ) - { - HBufC8* temp = CnvUtfConverter::ConvertFromUnicodeToUtf8L( iDefaultStore->Des() ); - CleanupStack::PushL( temp ); - TPtrC8 tempPtr = temp->Des(); - aStream.WriteUint16L( tempPtr.Length() ); - aStream.WriteL( tempPtr ); - CleanupStack::PopAndDestroy( temp ); - } - else - { - aStream.WriteUint16L( 0 ); - } - if ( iStores ) - { - aStream.WriteUint16L( iStores->Count() ); - for ( TInt i=0; iCount(); i++ ) - { - TPtrC storePtr = (*iStores)[i]; - HBufC8* temp = CnvUtfConverter::ConvertFromUnicodeToUtf8L( storePtr ); - CleanupStack::PushL( temp ); - TPtrC8 tempPtr = temp->Des(); - aStream.WriteUint16L( tempPtr.Length() ); - if ( tempPtr.Length() > 0 ) - { - aStream.WriteL( tempPtr ); - } - CleanupStack::PopAndDestroy( temp ); - } - } - else - { - aStream.WriteUint16L( 0 ); - } - aStream.CommitL(); - TRACE_FUNC_EXIT; - } - -EXPORT_C void CSconDataproviderInfo::InternalizeL( RReadStream& aStream ) - { - TRACE_FUNC_ENTRY; - delete iName; - iName = NULL; - delete iDefaultStore; - iDefaultStore = NULL; - delete iStores; - iStores = NULL; - iStores = new ( ELeave ) CDesCArrayFlat( 1 ); - iUid = aStream.ReadInt32L(); - TInt len = aStream.ReadUint16L(); - if ( len > 0 ) - { - HBufC8* tempBuf = HBufC8::NewLC( len ); - TPtr8 tempPtr = tempBuf->Des(); - aStream.ReadL( tempPtr, len ); - - iName = CnvUtfConverter::ConvertToUnicodeFromUtf8L( tempPtr ); - CleanupStack::PopAndDestroy( tempBuf ); - } - - len = aStream.ReadUint16L(); - if ( len > 0 ) - { - HBufC8* tempBuf = HBufC8::NewLC( len ); - TPtr8 tempPtr = tempBuf->Des(); - aStream.ReadL( tempPtr, len ); - - iDefaultStore = CnvUtfConverter::ConvertToUnicodeFromUtf8L( tempPtr ); - CleanupStack::PopAndDestroy( tempBuf ); - } - - TInt storeCount = aStream.ReadUint16L(); - for (TInt i=0; i 0 ) - { - HBufC8* tempBuf8 = HBufC8::NewLC( len ); - TPtr8 tempPtr8 = tempBuf8->Des(); - aStream.ReadL( tempPtr8, len ); - - HBufC* temp = CnvUtfConverter::ConvertToUnicodeFromUtf8L( tempPtr8 ); - CleanupStack::PushL( temp ); - TPtr tempPtr = temp->Des(); - iStores->AppendL( tempPtr ); - CleanupStack::PopAndDestroy( temp ); - CleanupStack::PopAndDestroy( tempBuf8 ); - } - } - TRACE_FUNC_EXIT; - } - -EXPORT_C TUid CSconDataproviderInfo::ImplementationUid() const - { - return TUid::Uid( iUid ); - } - -EXPORT_C void CSconDataproviderInfo::SetImplementationUid( const TUid aUid ) - { - iUid = aUid.iUid; - } - -EXPORT_C TDesC& CSconDataproviderInfo::DisplayNameL() - { - if ( iName ) - { - return *iName; - } - else - { - iName = KNullDesC().AllocL(); - return *iName; - } - } - -EXPORT_C void CSconDataproviderInfo::SetDisplayNameL( const TDesC& aName ) - { - delete iName; - iName = NULL; - iName = aName.AllocL(); - } - -EXPORT_C TDesC& CSconDataproviderInfo::DefaultStoreL() - { - if ( iDefaultStore ) - { - return *iDefaultStore; - } - else - { - iDefaultStore = KNullDesC().AllocL(); - return *iDefaultStore; - } - } - -EXPORT_C void CSconDataproviderInfo::SetDefaultStoreL( const TDesC& aStore ) - { - delete iDefaultStore; - iDefaultStore = NULL; - iDefaultStore = aStore.AllocL(); - } - -EXPORT_C CDesCArray* CSconDataproviderInfo::ListStoresL() const - { - if ( !iStores ) - { - User::Leave( KErrNotFound ); - } - return iStores; - } - -EXPORT_C void CSconDataproviderInfo::SetStoresL( const CDesCArray& aStores ) - { - delete iStores; - iStores = NULL; - iStores = new ( ELeave ) CDesCArrayFlat( 1 ); - for ( TInt i=0; iAppendL( aStores[i] ); - } - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/clients/syncclient/src/sconsyncclient.cpp --- a/connectivitymodules/SeCon/clients/syncclient/src/sconsyncclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,668 +0,0 @@ -/* -* Copyright (c) 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: RSconSyncSession implementation -* -*/ - - -#include "sconsyncclient.h" - -#include -#include - -#include "sconsyncclientserver.h" -#include "debug.h" - -const TInt KSConSyncChunkSize = 0xFFFF; // 65535 bytes; -const TInt KSConSyncChunkMaxSize = 0x400000; // 4194304 bytes - -EXPORT_C RSconSyncSession::RSconSyncSession() - { - TRACE_FUNC; - } - -EXPORT_C RSconSyncSession::~RSconSyncSession() - { - TRACE_FUNC; - } - -EXPORT_C TInt RSconSyncSession::Connect() - { - TRACE_FUNC_ENTRY; - TInt retryCount = 2; - TInt error = KErrNone; - while(retryCount) - { - error = CreateSession(KSconSyncServerName, TVersion(1,0,0)); - if ( error != KErrNotFound && error != KErrServerTerminated ) - { - break; - } - error = StartServer(); - if( error != KErrNone && error != KErrAlreadyExists ) - { - break; - } - --retryCount; - } - - if ( error == KErrNone ) - { - error = CreateAndSendChunkHandle(); - if ( error != KErrNone ) - { - LOGGER_WRITE("CreateAndSendChunkHandle failed, close session"); - Close(); - } - } - TRACE_FUNC_EXIT; - return error; - } - -// ----------------------------------------------------------------------------- -// RSconSyncSession::Close() -// Closes the server connection -// ----------------------------------------------------------------------------- -// -EXPORT_C void RSconSyncSession::Close() - { - TRACE_FUNC_ENTRY; - iChunk.Close(); - RSessionBase::Close(); - TRACE_FUNC_EXIT - } - -EXPORT_C void RSconSyncSession::ListAllImplementationsL( RSconDataProviderInfoArray& aInfoArray ) - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( EListImplementations, args ); - - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::ListAllImplementationsL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - - // copy data from the chunk - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - TInt count( readStream.ReadUint16L() ); - LOGGER_WRITE_1("count: %d", count); - for ( TInt i=0; iInternalizeL( readStream ); - aInfoArray.AppendL( dpInfo ); - CleanupStack::Pop( dpInfo ); - } - - CleanupStack::PopAndDestroy( &readStream ); - - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::OpenDataStoreL( const TSmlDataProviderId aProviderId, const TDesC& aStoreName, TInt aContextId ) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( iChunk.Adjust( - sizeof(TInt32) - + sizeof(TInt32) - + aStoreName.Size() - + sizeof(TInt) )); - - RMemWriteStream writeBuf( iChunk.Base(), iChunk.Size() ); - writeBuf.WriteInt32L( aProviderId ); - - writeBuf.WriteInt32L( aStoreName.Length() ); - writeBuf.WriteL( aStoreName ); - - writeBuf.WriteInt32L( aContextId ); - - writeBuf.CommitL(); - writeBuf.Close(); - - TIpcArgs args; - TInt ret = SendReceive ( EOpenStore, args ); - - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::OpenDataStoreL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::OpenItemL( TSmlDbItemUid aUid, TBool& aFieldChange, - TSmlDbItemUid& aParent, TDes8& aMimeType, TDes8& aMimeVer, CBufFlat& aItemData ) - { - TRACE_FUNC_ENTRY; - TIpcArgs args( aUid ); - TInt ret = SendReceive ( EOpenItem, args ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::OpenItemL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - - // copy data from the chunk - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - TInt32 length ( 0 ); - - aItemData.Reset(); - length = readStream.ReadInt32L(); - - HBufC8* data = HBufC8::NewLC( length ); - TPtr8 dataPtr = data->Des(); - - readStream.ReadL( dataPtr, length ); - aItemData.ExpandL( 0, length ); - aItemData.Write ( 0, dataPtr ); - - CleanupStack::PopAndDestroy( data ); - - aFieldChange = readStream.ReadInt8L(); - - aParent = readStream.ReadInt32L(); - length = readStream.ReadInt32L(); - readStream.ReadL( aMimeType, length ); - - length = readStream.ReadInt32L(); - readStream.ReadL( aMimeVer, length ); - - CleanupStack::PopAndDestroy( &readStream ); - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::CreateItemL(TSmlDbItemUid& aUid/*, TInt aSize*/, - TSmlDbItemUid aParent, const TDesC8& aMimeType, const TDesC8& aMimeVer, - const TDesC8& aData) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( iChunk.Adjust( - sizeof(TInt32) - + sizeof(TInt32) - + aMimeType.Length() - + sizeof(TInt32) - + aMimeVer.Length() - + sizeof(TInt32) - + aData.Length() )); - RMemWriteStream writeBuf( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( writeBuf ); - writeBuf.WriteInt32L( aParent ); - writeBuf.WriteInt32L( aMimeType.Length() ); - writeBuf.WriteL( aMimeType ); - writeBuf.WriteInt32L( aMimeVer.Length() ); - writeBuf.WriteL( aMimeVer ); - writeBuf.WriteInt32L( aData.Length() ); - writeBuf.WriteL( aData ); - - writeBuf.CommitL(); - CleanupStack::PopAndDestroy( &writeBuf ); - - - - TPckg pckg(aUid); - iArgs = TIpcArgs( &pckg ); - - TInt ret = SendReceive ( ECreateItem, iArgs ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::CreateItemL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - LOGGER_WRITE_1("aUid: %d", aUid); - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::CreateItemL(TPckg& aUidPckg, - TSmlDbItemUid aParent, const TDesC8& aMimeType, const TDesC8& aMimeVer, - const TDesC8& aData, TRequestStatus& aStatus) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( iChunk.Adjust( - sizeof(TInt32) - + sizeof(TInt32) - + aMimeType.Length() - + sizeof(TInt32) - + aMimeVer.Length() - + sizeof(TInt32) - + aData.Length() )); - RMemWriteStream writeBuf( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( writeBuf ); - writeBuf.WriteInt32L( aParent ); - writeBuf.WriteInt32L( aMimeType.Length() ); - writeBuf.WriteL( aMimeType ); - writeBuf.WriteInt32L( aMimeVer.Length() ); - writeBuf.WriteL( aMimeVer ); - writeBuf.WriteInt32L( aData.Length() ); - writeBuf.WriteL( aData ); - - writeBuf.CommitL(); - CleanupStack::PopAndDestroy( &writeBuf ); - - iArgs = TIpcArgs( &aUidPckg ); - SendReceive( ECreateItem, iArgs, aStatus ); - - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::ReplaceItemL(TSmlDbItemUid aUid, - TSmlDbItemUid aParent, TBool aFieldChange, const TDesC8& aData) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( iChunk.Adjust( - sizeof(TInt32) - + sizeof(TInt32) - + sizeof(TInt8) - + sizeof(TInt32) - + aData.Length() )); - RMemWriteStream writeBuf( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( writeBuf ); - writeBuf.WriteInt32L( aUid ); - writeBuf.WriteInt32L( aParent ); - writeBuf.WriteInt8L( aFieldChange ); - writeBuf.WriteInt32L( aData.Length() ); - writeBuf.WriteL( aData ); - writeBuf.CommitL(); - CleanupStack::PopAndDestroy( &writeBuf ); - - TIpcArgs args; - TInt ret = SendReceive( EReplaceItem, args ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::ReplaceItemL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::ReplaceItemL(TSmlDbItemUid aUid, - TSmlDbItemUid aParent, TBool aFieldChange, const TDesC8& aData, - TRequestStatus& aStatus) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( iChunk.Adjust( - sizeof(TInt32) - + sizeof(TInt32) - + sizeof(TInt8) - + sizeof(TInt32) - + aData.Length() )); - RMemWriteStream writeBuf( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( writeBuf ); - writeBuf.WriteInt32L( aUid ); - writeBuf.WriteInt32L( aParent ); - writeBuf.WriteInt8L( aFieldChange ); - writeBuf.WriteInt32L( aData.Length() ); - writeBuf.WriteL( aData ); - writeBuf.CommitL(); - CleanupStack::PopAndDestroy( &writeBuf ); - - TIpcArgs args; - SendReceive( EReplaceItem, args, aStatus ); - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::MoveItemL( TSmlDbItemUid aUid, TSmlDbItemUid aNewParent ) - { - TRACE_FUNC_ENTRY; - - TIpcArgs args(aUid, aNewParent); - TInt ret = SendReceive ( EMoveItem, args ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::MoveItemL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::DeleteItemL( TSmlDbItemUid aUid ) - { - TRACE_FUNC_ENTRY; - - TIpcArgs args( aUid ); - TInt ret = SendReceive ( EDeleteItem, args ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::DeleteItemL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - TRACE_FUNC_EXIT; - } - - -EXPORT_C void RSconSyncSession::SoftDeleteItemL( TSmlDbItemUid aUid ) - { - TRACE_FUNC_ENTRY; - - TIpcArgs args( aUid ); - TInt ret = SendReceive ( ESoftDeleteItem, args ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "RSconSyncSession::SoftDeleteItemL() :\ - Send Receive failed with code %d", ret ); - User::Leave( ret ); - }; - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::DeleteAllItems( TRequestStatus& aStatus ) - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - SendReceive( EDeleteAllItems, args, aStatus ); - TRACE_FUNC_EXIT; - } - - -EXPORT_C TBool RSconSyncSession::HasSyncHistoryL() const - { - TRACE_FUNC; - TBool history(EFalse); - TPckg pck(history); - TIpcArgs args(&pck); - TInt ret = SendReceive ( EHasHistory, args ); - User::LeaveIfError( ret ); - TRACE_FUNC_EXIT; - return history; - } - -EXPORT_C void RSconSyncSession::AddedItemsL( RArray& aItems) const - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( EAddedItems, args ); - User::LeaveIfError( ret ); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - aItems.Reset(); - TInt itemCount = readStream.ReadInt32L(); - for (TInt i=0; i& aItems) const - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( EDeletedItems, args ); - User::LeaveIfError( ret ); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - aItems.Reset(); - TInt itemCount = readStream.ReadInt32L(); - for (TInt i=0; i& aItems) const - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( ESoftDeletedItems, args ); - User::LeaveIfError( ret ); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - aItems.Reset(); - TInt itemCount = readStream.ReadInt32L(); - for (TInt i=0; i& aItems) const - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( EModifiedItems, args ); - User::LeaveIfError( ret ); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - aItems.Reset(); - TInt itemCount = readStream.ReadInt32L(); - for (TInt i=0; i& aItems) const - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( EMovedItems, args ); - User::LeaveIfError( ret ); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - aItems.Reset(); - TInt itemCount = readStream.ReadInt32L(); - for (TInt i=0; i& aItems ) - { - TRACE_FUNC_ENTRY; - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - LOGGER_WRITE_1("items count: %d", aItems.Count()); - stream.WriteInt32L( aItems.Count() ); - for (TInt i=0; i < aItems.Count(); i++ ) - { - LOGGER_WRITE("Write item"); - stream.WriteInt32L( aItems[i] ); - } - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - - TIpcArgs args; - TInt ret = SendReceive ( ECommitChangeInfo, args ); - User::LeaveIfError( ret ); - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::GetSyncTimeStampL( const TSmlDataProviderId aProviderId, const TInt aContextId, TDateTime& aTimeStamp ) const - { - TRACE_FUNC_ENTRY; - - TPckg timeBuf( aTimeStamp ); - TIpcArgs args( aProviderId, aContextId, &timeBuf ); - TInt ret = SendReceive ( EGetSyncTimeStamp, args ); - User::LeaveIfError( ret ); - - TRACE_FUNC_EXIT; - } - -EXPORT_C CSmlDataStoreFormat* RSconSyncSession::StoreFormatL( const RStringPool& aStringPool ) - { - TRACE_FUNC_ENTRY; - TIpcArgs args; - TInt ret = SendReceive ( EExportStoreFormat, args ); - User::LeaveIfError( ret ); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - TInt len = readStream.ReadInt32L(); - LOGGER_WRITE_1("data size from server: %d", len); - LOGGER_WRITE("CSmlDataStoreFormat::NewLC"); - CSmlDataStoreFormat* tempStoreFormat = CSmlDataStoreFormat::NewLC( aStringPool, readStream ); - LOGGER_WRITE("CSmlDataStoreFormat::NewLC -ok"); - CleanupStack::Pop( tempStoreFormat ); - - LOGGER_WRITE("PopAndDestroy( &readStream )"); - CleanupStack::PopAndDestroy( &readStream ); - LOGGER_WRITE("return"); - TRACE_FUNC_EXIT; - return tempStoreFormat; - } - -EXPORT_C void RSconSyncSession::SetRemoteStoreFormatL( const CSmlDataStoreFormat& aServerDataStoreFormat ) - { - TRACE_FUNC_ENTRY; - const TInt KMaximumDataStoreFormatSize = 100000; // 100kb should be enought - User::LeaveIfError( iChunk.Adjust( KMaximumDataStoreFormatSize )); - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - - aServerDataStoreFormat.ExternalizeL( stream ); - - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - - TIpcArgs args; - TInt ret = SendReceive ( ESetRemoteStoreFormat, args ); - User::LeaveIfError( ret ); - TRACE_FUNC_EXIT; - } - -EXPORT_C void RSconSyncSession::CancelRequest() - { - TRACE_FUNC_ENTRY; - SendReceive( ECancelRequest, TIpcArgs() ); - TRACE_FUNC_EXIT; - } - -EXPORT_C TInt RSconSyncSession::GetParent( TSmlDbItemUid aUid, TSmlDbItemUid& aParent ) - { - TRACE_FUNC_ENTRY; - TPckg pckg(aParent); - TIpcArgs args( aUid, &pckg ); - TInt ret = SendReceive( EReadParent, args ); - TRACE_FUNC_EXIT; - return ret; - } - -TInt RSconSyncSession::StartServer() - { - TRACE_FUNC_ENTRY; - - RProcess server; - TInt error = server.Create(KSconSyncServerExe, KNullDesC); - if ( error != KErrNone ) - { - return error; - } - // start server and wait for signal before proceeding - TRequestStatus status; - server.Rendezvous(status); - if ( status.Int() != KRequestPending ) - { - server.Kill(0); - } - else - { - server.Resume(); - } - - User::WaitForRequest( status ); - error = server.ExitType() == EExitPanic ? KErrGeneral : status.Int(); - server.Close(); - TRACE_FUNC_EXIT; - return error; - } - -// ----------------------------------------------------------------------------- -// RSconSyncSession::CreateAndSendChunkHandle() -// Creates a chunk and sends a handle to server -// ----------------------------------------------------------------------------- -// -TInt RSconSyncSession::CreateAndSendChunkHandle() - { - TRACE_FUNC_ENTRY; - - TInt err = iChunk.CreateGlobal( KNullDesC, - KSConSyncChunkSize, - KSConSyncChunkMaxSize ); - if ( err != KErrNone ) - { - LOGGER_WRITE_1("iChunk.CreateGlobal failed, err: %d", err); - return err; - } - TIpcArgs args; - args.Set( 0, iChunk ); - err = SendReceive( ESendChunkHandle, args ); - - LOGGER_WRITE_1("RSconSyncSession::CreateAndSendChunkHandle : returned: %d", err); - return err; - } - -// End of File diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/bld/bld.inf --- a/connectivitymodules/SeCon/cntparser/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Contact Parser Client-Server build information file. -* -*/ - - - -PRJ_PLATFORMS -DEFAULT - - -PRJ_MMPFILES -cntparsersrv.mmp -cntparsersrvexe.mmp - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/bld/cntparsersrv.mmp --- a/connectivitymodules/SeCon/cntparser/bld/cntparsersrv.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2002-2008 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: Contact Parser Client -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_CLIENT_DLL - -TARGET cntparserserver.dll -TARGETTYPE dll - -UID 0x10009d8d 0x101F99F8 - -#if defined(ARMCC) -DEFFILE ./def/eabiu -#elif defined(WINSCW) -DEFFILE ./def/bwinscw -#elif defined(WINS) -DEFFILE ./def/bwins -#elif defined(ARM) -DEFFILE ./def/bmarm -#endif - -SOURCEPATH ../src -SOURCE cntparserclient.cpp -SOURCE cntparserinfolog.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY cntmodel.lib -LIBRARY efsrv.lib -LIBRARY estor.lib -LIBRARY versit.lib -LIBRARY vcard.lib -LIBRARY bafl.lib -DEBUGLIBRARY flogger.lib - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/bld/cntparsersrvexe.mmp --- a/connectivitymodules/SeCon/cntparser/bld/cntparsersrvexe.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2002-2008 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: Contact Parser Server -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_SERVER - -TARGET cntparserserverexe.exe -TARGETTYPE exe - -UID 0 0x101F99F9 - -SOURCEPATH ../src -SOURCE cntparserserverexe.cpp -SOURCE cntparserserversession.cpp -SOURCE cntparsercollector.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../inc - -// Default system include paths -APP_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY cntmodel.lib -LIBRARY efsrv.lib -LIBRARY estor.lib -LIBRARY versit.lib -LIBRARY vcard.lib -LIBRARY bafl.lib -DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/cntparser/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -EXPORTS - ??0RCntParserServer@@QAE@XZ @ 1 NONAME ; RCntParserServer::RCntParserServer(void) - ?Cancel@RCntParserServer@@QAEHXZ @ 2 NONAME ; int RCntParserServer::Cancel(void) - ?CancelAll@RCntParserServer@@QAEHXZ @ 3 NONAME ; int RCntParserServer::CancelAll(void) - ?Connect@RCntParserServer@@QAEHXZ @ 4 NONAME ; int RCntParserServer::Connect(void) - ?ContactsParsed@RCntParserServer@@QAEHXZ @ 5 NONAME ; int RCntParserServer::ContactsParsed(void) - ?ContactsSaved@RCntParserServer@@QAEHXZ @ 6 NONAME ; int RCntParserServer::ContactsSaved(void) - ?CreateIrMCL2PhoneBook@RCntParserServer@@QAEHHH@Z @ 7 NONAME ; int RCntParserServer::CreateIrMCL2PhoneBook(int, int) - ?Disconnect@RCntParserServer@@QAEHXZ @ 8 NONAME ; int RCntParserServer::Disconnect(void) - ?MaximumRecords@CCntParserInfoLog@@QBEHXZ @ 9 NONAME ; int CCntParserInfoLog::MaximumRecords(void) const - ?NewL@CCntParserInfoLog@@SAPAV1@XZ @ 10 NONAME ; class CCntParserInfoLog * CCntParserInfoLog::NewL(void) - ?SaveToFileL@CCntParserInfoLog@@QBEXABVTDesC16@@@Z @ 11 NONAME ; void CCntParserInfoLog::SaveToFileL(class TDesC16 const &) const - ?SetMaximumRecords@CCntParserInfoLog@@QAEXH@Z @ 12 NONAME ; void CCntParserInfoLog::SetMaximumRecords(int) - ?SetTotalRecords@CCntParserInfoLog@@QAEXH@Z @ 13 NONAME ; void CCntParserInfoLog::SetTotalRecords(int) - ?TotalNumberOfContacts@RCntParserServer@@QAEHXZ @ 14 NONAME ; int RCntParserServer::TotalNumberOfContacts(void) - ?TotalRecords@CCntParserInfoLog@@QBEHXZ @ 15 NONAME ; int CCntParserInfoLog::TotalRecords(void) const - ?Version@RCntParserServer@@QBE?AVTVersion@@XZ @ 16 NONAME ; class TVersion RCntParserServer::Version(void) const - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/bld/def/eabiuu.def --- a/connectivitymodules/SeCon/cntparser/bld/def/eabiuu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -EXPORTS - _ZN16RCntParserServer10DisconnectEv @ 1 NONAME - _ZN16RCntParserServer13ContactsSavedEv @ 2 NONAME - _ZN16RCntParserServer14ContactsParsedEv @ 3 NONAME - _ZN16RCntParserServer21CreateIrMCL2PhoneBookEii @ 4 NONAME - _ZN16RCntParserServer21TotalNumberOfContactsEv @ 5 NONAME - _ZN16RCntParserServer6CancelEv @ 6 NONAME - _ZN16RCntParserServer7ConnectEv @ 7 NONAME - _ZN16RCntParserServer9CancelAllEv @ 8 NONAME - _ZN16RCntParserServerC1Ev @ 9 NONAME - _ZN16RCntParserServerC2Ev @ 10 NONAME - _ZN17CCntParserInfoLog15SetTotalRecordsEi @ 11 NONAME - _ZN17CCntParserInfoLog17SetMaximumRecordsEi @ 12 NONAME - _ZN17CCntParserInfoLog4NewLEv @ 13 NONAME - _ZNK16RCntParserServer7VersionEv @ 14 NONAME - _ZNK17CCntParserInfoLog11SaveToFileLERK7TDesC16 @ 15 NONAME - _ZNK17CCntParserInfoLog12TotalRecordsEv @ 16 NONAME - _ZNK17CCntParserInfoLog14MaximumRecordsEv @ 17 NONAME - _ZTI17CCntParserInfoLog @ 18 NONAME ; ## - _ZTV17CCntParserInfoLog @ 19 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/clientserver.h --- a/connectivitymodules/SeCon/cntparser/inc/clientserver.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* 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: Contact Parser Server definitions -* -*/ - - -#ifndef __CLIENTSERVER_H__ -#define __CLIENTSERVER_H__ -#include - -// server name -_LIT(KCntParserName,"Contacts Parser"); - -// A version must be specified when creating a session with the server - -const TUint KCntParserMajorVersionNumber=0; -const TUint KCntParserMinorVersionNumber=1; -const TUint KCntParserBuildVersionNumber=1; - -// opcodes used in message passing between client and server -enum TCntParserRqst - { - ECntParserServerCancel, - ECntParserServerClose, - ECntParserServerCreateIrMCL2, - ECntParserServerTotalNumOfContacts, - ECntParserServerDisconnect, - ECntParserServerCntParsed, - ECntParserServerCntSaved, - ECntParserServerCancelAll - }; - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/cntparserclient.h --- a/connectivitymodules/SeCon/cntparser/inc/cntparserclient.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 2002-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: Contact Parser Client -* -*/ - - - -#if !defined(__CNTPARSERCLIENT_H__) -#define __CNTPARSERCLIENT_H__ - -#include -#include - -enum TCntParserConnection -{ - ECntParserNotConnected, - ECntParserConnected -}; - -//********************************** -//RCntParserServer -//********************************** - -class RCntParserServer : public RSessionBase -{ - public: - IMPORT_C RCntParserServer(); - IMPORT_C TInt Connect(); - IMPORT_C TInt Disconnect(); - IMPORT_C TVersion Version() const; - IMPORT_C TInt CreateIrMCL2PhoneBook(TInt aMaxNumberOfContacts, TBool aForced); - IMPORT_C TInt ContactsParsed(); - IMPORT_C TInt ContactsSaved(); - IMPORT_C TInt TotalNumberOfContacts(); - IMPORT_C TInt Cancel(); //cancels phonebook request - IMPORT_C TInt CancelAll(); //cancels all request - - private: - TCntParserConnection iConnected; -}; - - -#endif - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/cntparsercollector.h --- a/connectivitymodules/SeCon/cntparser/inc/cntparsercollector.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* -* Copyright (c) 2002-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: CCntParserCollector header -* -*/ - - - -#ifndef __CNTPARSERCOLLECTOR_H__ -#define __CNTPARSERCOLLECTOR_H__ - -#include -#include - -class CCntParserServer; -class CContactDatabase; -class CContactIdArray; -class CCntFilter; -class CVersitTlsData; - -class CCntParserCollector : public CActive -{ - public: - - CCntParserCollector(); - static CCntParserCollector* NewL(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase); - static CCntParserCollector* NewLC(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase); - virtual ~CCntParserCollector(); - void ConstructL(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase); - TInt CreateIrMCL2FileL(const TDesC& aFileName,TInt aMaxNumberOfContacts,TBool aForced); - void PrepareParserL(); - void ParseCntDatabaseL(); - void DoCancel(); - - TInt CurrentItem(); - TInt Count(); - TInt ContactsSaved(); - - protected: - void RunL(); - TInt RunError(TInt aError); - void ExternalizeCurrentContactL(CContactDatabase* aContactsDb,TInt aCurrentItem,TBool ExternalizeEmpty); - void CloseResources(); - void SaveTotalCountL(); - TInt ReadTotalCountL() const; - TBool ContactCountChanged(); - - private: - CContactDatabase* iContactsDb; //Caller has the ownership - TInt iCurrentItem; - TInt iCount; //Contacts in CDB - TInt iMaxNumberOfContacts; //Max contacts to be parsed (MAXIMUM RECORDS in info.log) - RFileWriteStream iWriter; - CContactIdArray* iIds; //List of ID numbers of contacts - CCntParserServer* iServer; //Caller has the ownership - CCntFilter* iFilter; - CVersitTlsData* iVersitTLS; //For speed optimization - TBool iCancel; - TInt iContactsSaved; - TInt iTotalCount; - - RFs iFsSession; -}; - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/cntparserinfolog.h --- a/connectivitymodules/SeCon/cntparser/inc/cntparserinfolog.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* 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: CCntParserInfoLog header. -* This class is intended to create the INFO.LOG file for RANSI car phone when -* downloading contacts using IrMC L2. The implementation contains only mandatory -* needs and some extension possibilities. This class is RANSI specific and -* should _NOT_ be used by anyone else without a deeper knowledge. -* -*/ - - -#ifndef _CNTPARSERINFOLOG_H_ -#define _CNTPARSERINFOLOG_H_ - - -class CCntParserInfoLog : public CBase -{ - public: - CCntParserInfoLog(); - virtual ~CCntParserInfoLog(); - IMPORT_C static CCntParserInfoLog* NewL(); - void ConstructL(); - - IMPORT_C void SaveToFileL(const TDesC& aFileName) const; - - IMPORT_C void SetTotalRecords(TInt aTotalRecords); - IMPORT_C void SetMaximumRecords(TInt aMaximumRecords); - - IMPORT_C TInt TotalRecords() const; - IMPORT_C TInt MaximumRecords() const; - - private: - - TInt iTotalRecords; - TInt iLastUsedIndex; - TInt iMaximumRecords; -}; - -#endif // _CNTPARSERINFOLOG_H_ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/cntparserserver.h --- a/connectivitymodules/SeCon/cntparser/inc/cntparserserver.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* 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: CCntParserServer header -* -*/ - - -#ifndef __CNTPARSERSERVER_H__ -#define __CNTPARSERSERVER_H__ - -#include -#include - -class CCntParserCollector; -class CContactDatabase; - -_LIT(KTxtServer,"CntParserServerExe.exe"); - -// needed for creating server thread. -const TUint KDefaultHeapSize=0x10000; - -// reasons for server panic -enum TCntParserServerPanic -{ - EBadRequest, - EBadDescriptor, - EMainSchedulerError, - ESvrCreateServer, - ESvrStartServer, - ECreateTrapCleanup, - ENotImplementedYet, -}; - - -//********************************** -//CCntParserServer -//********************************** -class CCntParserServer : public CServer2 -{ - public: - IMPORT_C static CCntParserServer* NewL(); - IMPORT_C virtual ~CCntParserServer(); - static TInt RunServer(); - static void RunServerL(); - void IncreaseSessionCountL(); - void DecreaseSessionCount(); - void Stop(); - - TInt CreateIrMCL2PhoneBookL(const TDesC& path, TInt aMaxNumberOfContacts,TBool aForced); - void PrepareCollectorL(); - TInt ContactsParsed(); - void CancelPhoneBookRequest(); - void CancelAllPhoneBookRequests(); - TInt TotalNumOfContacts(); - TInt ContactsSaved(); - void Disconnect(); - void CompletePhoneBookRequests(TInt aErr); - void SetRequests(TInt aRequests); - - protected: - virtual CSession2* NewSessionL(const TVersion &aVersion, const RMessage2& aMsg) const; - - - protected: - CCntParserServer(); - - - private: - TInt iSessionCount; - TInt iRequests; //How many PB.VCF requests are ongoing, if 0 collector is canceled - - CCntParserCollector* iCollector; - CContactDatabase* iCurrentDatabase; -}; - -//********************************** -//global functions -//********************************** - -// function to panic the server -GLREF_C void PanicServer(TCntParserServerPanic aPanic); - - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/cntparserserversession.h --- a/connectivitymodules/SeCon/cntparser/inc/cntparserserversession.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* 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: CCntParserServerSession header -* -*/ - - -#ifndef __CNTPARSERSERVERSESSION_H__ -#define __CNTPARSERSERVERSESSION_H__ - -#include "clientserver.h" -#include "cntparserclient.h" -#include "cntparserserver.h" -#include "cntparsercollector.h" - -class CCntParserServer; - -//********************************** -//CCntParserServerSession -//********************************** -class CCntParserServerSession : public CSession2 -{ - public: - static CCntParserServerSession* NewL(CCntParserServer* aServer); - virtual ~CCntParserServerSession(); - void ConstructL(CCntParserServer* aServer); - - private: - CCntParserServerSession(); - - public: - virtual void ServiceL(const RMessage2& aMessage); - TInt DispatchMessageL(const RMessage2& aMessage); - void CompletePhoneBookRequest(TInt aErr); - - protected: - // panic the client - void PanicClient(TInt aPanic) const; - - private: - CCntParserServer* iContactsParserSrv; - TBool iPhoneBookRequest; - RMessage2 iPhoneBookRequestMessage; -}; - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/inc/irmcconsts.h --- a/connectivitymodules/SeCon/cntparser/inc/irmcconsts.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* 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: Contact Parser constants -* -*/ - - -#ifndef _IRMCCONSTS_H_ -#define _IRMCCONSTS_H_ - -_LIT(KPhoneBookFilename,"c:\\IrMC\\pb.vcf"); -const TInt KMaximumNumberOfContacts=-1; //-1 == all contacts are transferred -const TInt KPBNotUpdated=1; //Must be grater than 0 -const TInt KPerformComplete=2; //Must be grater than 0 and different than KPBNotUpdated - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/src/cntparserclient.cpp --- a/connectivitymodules/SeCon/cntparser/src/cntparserclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,252 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: RCntParserServer implementation. -* -*/ - - -// needed for client interface -#include "clientserver.h" -#include "cntparserserver.h" -#include "cntparserclient.h" - -#include "debug.h" - -const TUint KDefaultMessageSlots=4; - - -//------------------------------------------------------------ -// RCntParserServer::RCntParserServer() -//------------------------------------------------------------ -EXPORT_C RCntParserServer::RCntParserServer():iConnected(ECntParserNotConnected) - { - } -//------------------------------------------------------------ -// RCntParserServer::Connect() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::Connect() - { - LOGGER_ENTERFN( "RCntParserServer::Connect()" ); - - TInt r = KErrNone; - - if( iConnected == ECntParserNotConnected ) - { - r = CreateSession( KCntParserName, Version(), KDefaultMessageSlots ); - if(r==KErrNone) - { - iConnected=ECntParserConnected; - } - else - { - RProcess p; - TInt err = p.Create(KTxtServer, KNullDesC); - if ( err != KErrNone ) - { - // Loading failed. - return err; - } - TRequestStatus status; - p.Rendezvous( status ); - if( status != KRequestPending ) - { - p.Kill(0); // abort startup - p.Close(); - return KErrGeneral; // status can be KErrNone: don't return status.Int() - } - else - { - p.Resume(); // logon OK - start the server - } - - User::WaitForRequest( status ); - - if( status != KErrNone ) - { - p.Close(); - return status.Int(); - } - - r = CreateSession( KCntParserName, Version() ); - if( r == KErrNone ) - { - iConnected = ECntParserConnected; - } - p.Close(); - } - } - else - { - r = KErrCouldNotConnect; - } - LOGGER_WRITE_1( "RCntParserServer::Connect() : return %d", r ); - return r; - } -//------------------------------------------------------------ -// RCntParserServer::Disconnect() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::Disconnect() - { - LOGGER_ENTERFN( "RCntParserServer::Disconnect()" ); - - TInt res = KErrNone; - if(iConnected==ECntParserConnected) - { - res = SendReceive( ECntParserServerDisconnect, TIpcArgs(NULL) ); - if( res == KErrNone ) - { - iConnected = ECntParserNotConnected; - RSessionBase::Close(); - } - } - else - { - res = KErrCouldNotDisconnect; - } - LOGGER_WRITE_1( "RCntParserServer::CreateIrMCL2PhoneBook() : return %d", res ); - return res; - } -//------------------------------------------------------------ -// RCntParserServer::Version(void) const -//------------------------------------------------------------ -EXPORT_C TVersion RCntParserServer::Version(void) const - { - return(TVersion(KCntParserMajorVersionNumber,KCntParserMinorVersionNumber,KCntParserBuildVersionNumber)); - } -//------------------------------------------------------------ -// RCntParserServer::CreateIrMCL2PhoneBook(TInt aMaxNumberOfContacts, TBool aForced) -//------------------------------------------------------------ -EXPORT_C int RCntParserServer::CreateIrMCL2PhoneBook(TInt aMaxNumberOfContacts, TBool aForced) - { - LOGGER_ENTERFN( "RCntParserServer::CreateIrMCL2PhoneBook()" ); - TInt res(KErrNone); - if( iConnected == ECntParserConnected ) - { - res = SendReceive(ECntParserServerCreateIrMCL2,TIpcArgs(aMaxNumberOfContacts,aForced)); - } - else - { - res = KErrNotReady; - } - LOGGER_WRITE_1( "RCntParserServer::CreateIrMCL2PhoneBook() : return %d", res ); - return res; - } -//------------------------------------------------------------ -// RCntParserServer::ContactsParsed() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::ContactsParsed() - { - LOGGER_ENTERFN( "RCntParserServer::ContactsParsed()" ); - - TInt res=KErrNone; - if( iConnected == ECntParserConnected ) - { - TPckgBuf pckg; - res = SendReceive(ECntParserServerCntParsed,TIpcArgs(&pckg)); - if( res == KErrNone ) - { - res = pckg(); - } - } - else - { - res = KErrNotReady; - } - LOGGER_WRITE_1( "RCntParserServer::ContactsParsed() : return %d", res ); - return res; - } -//------------------------------------------------------------ -// RCntParserServer::TotalNumberOfContacts() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::TotalNumberOfContacts() - { - LOGGER_ENTERFN( "RCntParserServer::TotalNumberOfContacts()" ); - - TInt res = KErrNone; - if( iConnected == ECntParserConnected ) - { - TPckgBuf pckg; - res = SendReceive(ECntParserServerTotalNumOfContacts,TIpcArgs(&pckg)); - if( res == KErrNone) - { - res = pckg(); - } - } - else - { - res = KErrNotReady; - } - LOGGER_WRITE_1( "RCntParserServer::TotalNumberOfContacts() : return %d", res ); - return res; - } -//------------------------------------------------------------ -// RCntParserServer::Cancel() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::Cancel() - { - LOGGER_ENTERFN( "RCntParserServer::Cancel()" ); - - TInt res = KErrNone; - if( iConnected == ECntParserConnected ) - { - res = SendReceive(ECntParserServerCancel,TIpcArgs(NULL)); - } - else - { - res = KErrCancel; - } - LOGGER_WRITE_1( "RCntParserServer::Cancel() : return %d", res ); - return res; - } -//------------------------------------------------------------ -// RCntParserServer::CancelAll() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::CancelAll() - { - LOGGER_ENTERFN( "RCntParserServer::CancelAll()" ); - - TInt res = KErrNone; - if(iConnected==ECntParserConnected) - { - res = SendReceive(ECntParserServerCancelAll,TIpcArgs(NULL)); - } - else - { - res = KErrCancel; - } - LOGGER_WRITE_1( "RCntParserServer::CancelAll() : return %d", res ); - return res; - } -//------------------------------------------------------------ -// RCntParserServer::ContactsSaved() -//------------------------------------------------------------ -EXPORT_C TInt RCntParserServer::ContactsSaved() - { - LOGGER_ENTERFN( "RCntParserServer::ContactsSaved()" ); - - TInt res = KErrNone; - if( iConnected == ECntParserConnected ) - { - TPckgBuf pckg; - SendReceive(ECntParserServerCntSaved,TIpcArgs(&pckg)); - res = pckg(); - } - else - { - res = KErrNotReady; - } - LOGGER_WRITE_1( "RCntParserServer::ContactsSaved() : return %d", res ); - return res; - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/src/cntparsercollector.cpp --- a/connectivitymodules/SeCon/cntparser/src/cntparsercollector.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,620 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: CCntParserCollector implementation. -* -*/ - - - -#include -#include -#include - -#include -#include -#include - -#include "cntparsercollector.h" -#include "cntparserserver.h" -#include "irmcconsts.h" -#include "debug.h" - -//Next values are defined in cntdef.h -const TUid typesToBeSearched[]={{KUidContactFieldPhoneNumberValue},{KUidContactFieldFaxValue}}; - -_LIT( KTotalCountFilePath, "count.txt" ); - -_LIT8( KNameProperty, "N" ); -_LIT8( KTelProperty, "TEL" ); - - -//------------------------------------------------------------ -// CCntParserCollector::CCntParserCollector():CActive( 0 ) -//------------------------------------------------------------ -CCntParserCollector::CCntParserCollector():CActive( 0 ) - { - } -//------------------------------------------------------------ -// CCntParserCollector::~CCntParserCollector() -//------------------------------------------------------------ -CCntParserCollector::~CCntParserCollector() - { - LOGGER_ENTERFN( "CntParserCollector::~CCntParserCollector()" ); - - if( iVersitTLS != NULL ) - { - iVersitTLS->VersitTlsDataClose(); //Close reference - } - LOGGER_WRITE( "CntParserCollector: Versit OK!" ); - - iFsSession.Close(); - LOGGER_WRITE( "CntParserCollector: FsSession OK!" ); - iWriter.Close(); - LOGGER_WRITE( "CntParserCollector: iWriter OK!" ); - delete iFilter; - LOGGER_LEAVEFN( "CntParserCollector::~CCntParserCollector()" ); - } -//------------------------------------------------------------ -// CCntParserCollector::NewL(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase) -//------------------------------------------------------------ -CCntParserCollector* CCntParserCollector::NewL(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase) - { - CCntParserCollector* self=NewLC(aServer, aCurrentDatabase); - CleanupStack::Pop(); - return self; - } -//------------------------------------------------------------ -// CCntParserCollector::NewLC(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase) -//------------------------------------------------------------ -CCntParserCollector* CCntParserCollector::NewLC(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase) - { - CCntParserCollector* self=new (ELeave) CCntParserCollector(); - CleanupStack::PushL( self ); - self->ConstructL( aServer, aCurrentDatabase ); - return self; - } -//------------------------------------------------------------ -// CCntParserCollector::ConstructL(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase) -//------------------------------------------------------------ -void CCntParserCollector::ConstructL(CCntParserServer* aServer,CContactDatabase* aCurrentDatabase) - { - LOGGER_WRITE( "CntParserCollector: ConstructL" ); - - CVersitTlsData& VersitTLS = CVersitTlsData::VersitTlsDataL(); //For speed optimization take a reference to TLS, SEE DESTRUCTOR!! - iVersitTLS = &VersitTLS; - - iServer = aServer; - iContactsDb = aCurrentDatabase; - PrepareParserL(); - - CActiveScheduler::Add(this); - } -//------------------------------------------------------------ -// CCntParserCollector::CreateIrMCL2FileL(const TDesC& aFileName, TInt aMaxNumberOfContacts,TBool aForced) -//------------------------------------------------------------ -TInt CCntParserCollector::CreateIrMCL2FileL(const TDesC& aFileName, TInt aMaxNumberOfContacts,TBool aForced) - { - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL" ); - LOGGER_WRITE_1( "CCntParserCollector::CreateIrMCL2FileL aFileName %S", &aFileName ); - - iMaxNumberOfContacts = aMaxNumberOfContacts; - - CContactIdArray* changedItems; - TTime tTime; - - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: Does the PB.VCF already exist" ); - - //Is there a previously created pb.vcf file? - RFile file; - TInt err = file.Open( iFsSession, aFileName, EFileShareExclusive ); //Open file - if( err == KErrNone ) - { - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: Yes, when created" ); - file.Modified(tTime); //When modified - } - file.Close(); - - err = iWriter.Open( iFsSession, aFileName, EFileShareExclusive ); //Open stream - CleanupClosePushL( iWriter ); //Yes, this is a member variable, but it's considered - - if( err == KErrPathNotFound ) - { - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: dir did not exist, creating..." ); - err = iFsSession.MkDir( aFileName ); - LOGGER_WRITE_1( "CCntParserCollector MkDir returned %d", err ); - if ( err == KErrNone ) - { - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: New file after MkDir" ); - //This is the situation that the file is created for the first time - User::LeaveIfError( iWriter.Create( iFsSession, aFileName, EFileShareExclusive ) ); - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: New file created after MkDir" ); - CleanupStack::Pop(); //iWriter - ParseCntDatabaseL(); //create IrMC L2 stuff - SaveTotalCountL(); - return KErrNone; //File created normally - } - } - if( err == KErrNotFound ) // file does not exist - create it - { - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: New file" ); - - //This is the situation that the file is created for the first time - User::LeaveIfError( iWriter.Create( iFsSession, aFileName, EFileShareExclusive ) ); - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: New file created" ); - CleanupStack::Pop(); //iWriter - ParseCntDatabaseL(); //create IrMC L2 stuff - SaveTotalCountL(); - return KErrNone; //File created normally - } - else - { - if( err != KErrNone ) - { - LOGGER_WRITE_1( "CreateIrMCL2FileL errror leaving %d", err ); - User::Leave(err); - } - iWriter.Close(); - - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: File exists, any changes in CDB?" ); - //The file exists, but are there any changes? - - changedItems = iContactsDb->ContactsChangedSinceL( tTime ); //Create a contactidarray, user takes the ownership - CleanupStack::PushL(changedItems); - - LOGGER_WRITE_1( "CreateIrMCL2FileL changedItems %d", changedItems->Count() ); - LOGGER_WRITE_1( "CreateIrMCL2FileL aForced %d", aForced ); - //Are there changes in any contact - if( changedItems->Count()!=0 || aForced || ContactCountChanged() ) - { - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: Changes in CDB, replace existing PB.VCF" ); - - CleanupStack::PopAndDestroy(changedItems); - - //Create pb.vcf - User::LeaveIfError( iWriter.Replace( iFsSession, aFileName, EFileShareExclusive) ); - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: file replaced" ); - CleanupStack::Pop(); //iWriter - ParseCntDatabaseL(); //create IrMC L2 stuff - SaveTotalCountL(); - return KErrNone; //File created normally - } - - //No changes - CleanupStack::PopAndDestroy(changedItems); - CleanupStack::PopAndDestroy(); - - LOGGER_WRITE( "CntParserCollector: CreateIrMCL2FileL: No Changes in CDB, keep old PB.VCF" ); - } - return KPBNotUpdated; //No error occured, KPBNotUpdated used as return value to tell that the file was not created.. - } -//------------------------------------------------------------ -// CCntParserCollector::ParseCntDatabaseL() -//------------------------------------------------------------ -void CCntParserCollector::ParseCntDatabaseL() - { - LOGGER_WRITE( "CntParserCollector: ParseCntDatabaseL" ); - - iCurrentItem = 0; - iCancel = EFalse; - iContactsSaved = 0; - - //Create owncard (it's always included, even if it's empty) - - TFileName defaultDb; - CContactDatabase::GetDefaultNameL( defaultDb ); - TFileName currentDb; - iContactsDb->GetCurrentDatabase( currentDb ); - - if( defaultDb.CompareF(currentDb) == 0 || currentDb == KNullDesC16 /*|| currentDb.CompareF(KSimDummyDatabase)==0*/) //Is current database also default? - { - LOGGER_WRITE( "CntParserCollector: ParseCntDatabaseL: Using default database" ); - TContactItemId ownCardId = iContactsDb->OwnCardId(); - ExternalizeCurrentContactL( iContactsDb, ownCardId, ETrue); - } - else - { - LOGGER_WRITE( "CntParserCollector: ParseCntDatabaseL: Not using default database" ); - CContactDatabase* db=CContactDatabase::OpenL(); //My contact card is only in default db, so open it - CleanupStack::PushL(db); - - TContactItemId ownCardId = db->OwnCardId(); - ExternalizeCurrentContactL( db, ownCardId, ETrue ); - - CleanupStack::PopAndDestroy( db ); - } - - //Start running RunL method and create everything else.. - TRequestStatus* s = &iStatus; - User::RequestComplete( s, KErrNone ); - SetActive(); - } -//------------------------------------------------------------ -// CCntParserCollector::CloseResources() -//------------------------------------------------------------ -void CCntParserCollector::CloseResources() - { - LOGGER_WRITE( "CntParserCollector: CloseResources: Closing resources (iWriter)" ); - iWriter.Close(); - } -//------------------------------------------------------------ -// CCntParserCollector::PrepareParserL() -//------------------------------------------------------------ -void CCntParserCollector::PrepareParserL() - { - LOGGER_WRITE( "CntParserCollector: PrepareParserL" ); - iFilter = CCntFilter::NewL(); //Filter all contact cards out of others - - iFilter->SetContactFilterTypeALL( EFalse ); - iFilter->SetContactFilterTypeCard( ETrue ); - iContactsDb->FilterDatabaseL( *iFilter ); - - iIds=iFilter->iIds; //Get IDs to filtered contacts - iCount=iIds->Count(); //Get number of contacts to be collected - - User::LeaveIfError( iFsSession.Connect() ); //Connect to the file server - - LOGGER_WRITE_1( "CntParserCollector: PrepareParserL: iCount == %d", iCount); - } -//------------------------------------------------------------ -// CCntParserCollector::RunL() -//------------------------------------------------------------ -void CCntParserCollector::RunL() - { - //MaxNumberOfContacts-1 for OwnCard - if( iCurrentItem < iCount && (iCurrentItem < ( iMaxNumberOfContacts - 1 ) || iMaxNumberOfContacts == -1 ) ) //If no more contacts left or maximum number of contacts already parsed - { - ExternalizeCurrentContactL( iContactsDb, (*iIds)[iCurrentItem], EFalse ); - iCurrentItem++; - TRequestStatus* s = &iStatus; //Let's rerun this RunL method as soon as possible - User::RequestComplete( s, KErrNone ); - SetActive(); - return; - } - iCurrentItem++; //for OwnCard that is created separately - LOGGER_WRITE( "CntParserCollector: RunL: No more items" ); - CloseResources(); - iServer->CompletePhoneBookRequests( KErrNone ); - } -//------------------------------------------------------------ -// CCntParserCollector::ExternalizeCurrentContactL(CContactDatabase* aContactsDb,TInt aCurrentItem,TBool ExternalizeEmpty) -//------------------------------------------------------------ -void CCntParserCollector::ExternalizeCurrentContactL(CContactDatabase* aContactsDb,TInt aCurrentItem,TBool ExternalizeEmpty) - { - CContactItem* ownCard; - - if( aCurrentItem < 0 ) - { - ownCard = CContactCard::NewLC(); - } - else - { - ownCard = aContactsDb->ReadContactLC( aCurrentItem ); //Take a new contact item - } - - CParserVCard* VCard=CParserVCard::NewL(); //Create new VCard - CleanupStack::PushL( VCard ); - - TInt nField = ownCard->CardFields().Find( KUidContactFieldGivenName ); - TInt fField = ownCard->CardFields().Find( KUidContactFieldFamilyName ); - TInt cField = ownCard->CardFields().Find( KUidContactFieldCompanyName ); - - //FOR NAMES - //N: -field always included even if it's empty - CDesC16Array* ValueArray=new (ELeave) CDesCArrayFlat(4); - CleanupStack::PushL( ValueArray ); - CParserPropertyValueCDesCArray* NameValues=new (ELeave) CParserPropertyValueCDesCArray( ValueArray ); - CleanupStack::PushL( NameValues ); - CArrayPtr* parameters=new (ELeave) CArrayPtrFlat(1); - CleanupStack::PushL( parameters ); - - TPtrC fName; - TPtrC nName; - TPtrC cName; - - if( fField != KErrNotFound ) - { - fName.Set( ownCard->CardFields()[fField].TextStorage()->Text() ); - } - if( nField != KErrNotFound ) - { - nName.Set( ownCard->CardFields()[nField].TextStorage()->Text() ); - } - if( cField != KErrNotFound ) - { - cName.Set( ownCard->CardFields()[cField].TextStorage()->Text() ); - } - - if( fName.Length() == 0) - { - fField = KErrNotFound; - } - if(nName.Length()==0) - { - nField = KErrNotFound; - if( fField==KErrNotFound ) - { - ValueArray->AppendL( cName ); - } - else - { - ValueArray->AppendL( fName ); - } - } - else - { - ValueArray->AppendL( fName ); - ValueArray->AppendL( nName ); - } - - VCard->AddPropertyL( CParserProperty::NewL((*NameValues),KNameProperty,parameters) ); //Add name property to VCard (VCard takes the ownership of the property) - CleanupStack::Pop(3); //parameters namevalues valuearray - - TBool isNumber = EFalse; - - TInt typeIndex = 0; - TInt index = -1; //NOTE: +1 added before used first time - - for(;;) //Go through all fields (Number of fields is unknown) - { - index = ownCard->CardFields().FindNext(typesToBeSearched[typeIndex],index+1);//Find next field (of current type) - if( index == KErrNotFound ) //No more phone numbers, move to the next group -> (See TypesToBeSearched) - { - typeIndex++; - if( typeIndex >= (signed) (sizeof(typesToBeSearched) / sizeof(TUid)) ) - { - break; //if no more types to search -> exit FOR-loop - } - - index=ownCard->CardFields().FindNext(typesToBeSearched[typeIndex],0); //Find next field - if( index==KErrNotFound ) - { - break; //No fields -> exit - } - } - - TPtrC number = ownCard->CardFields()[index].TextStorage()->Text(); - if( number.Length() != 0) - { - CDesC16Array* ValueArray2=new (ELeave) CDesCArrayFlat(4); - CleanupStack::PushL( ValueArray2 ); - CParserPropertyValueCDesCArray* NumberValues=new (ELeave) CParserPropertyValueCDesCArray(ValueArray2); - CleanupStack::PushL( NumberValues ); - CArrayPtr* parameters2=new (ELeave) CArrayPtrFlat(1); - CleanupStack::PushL( parameters2 ); - - //Take label name to parameter - - for( TInt i=0;iCardFields()[index].ContentType().FieldTypeCount();i++ ) - { - TFieldType fieldType=ownCard->CardFields()[index].ContentType().FieldType(i); - - if(fieldType==KUidContactFieldVCardMapWORK) parameters2->AppendL(CParserParam::NewL(KVersitParam8Work,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapHOME) parameters2->AppendL(CParserParam::NewL(KVersitParam8Home,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapMSG) parameters2->AppendL(CParserParam::NewL(KVersitParam8Msg,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapVOICE)parameters2->AppendL(CParserParam::NewL(KVersitParam8Voice,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapFAX) parameters2->AppendL(CParserParam::NewL(KVersitParam8Fax,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapPREF) parameters2->AppendL(CParserParam::NewL(KVersitParam8Pref,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapCELL) parameters2->AppendL(CParserParam::NewL(KVersitParam8Cell,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapPAGER)parameters2->AppendL(CParserParam::NewL(KVersitParam8Pager,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapBBS) parameters2->AppendL(CParserParam::NewL(KVersitParam8Bbs,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapMODEM)parameters2->AppendL(CParserParam::NewL(KVersitParam8Modem,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapCAR) parameters2->AppendL(CParserParam::NewL(KVersitParam8Car,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapISDN) parameters2->AppendL(CParserParam::NewL(KVersitParam8Isdn,KNullDesC8)); - if(fieldType==KUidContactFieldVCardMapVIDEO)parameters2->AppendL(CParserParam::NewL(KVersitParam8Video,KNullDesC8)); - } - - ValueArray2->AppendL( number ); - VCard->AddPropertyL(CParserProperty::NewL((*NumberValues),KTelProperty,parameters2)); //VCard takes the ownership of the property - isNumber=ETrue; - - CleanupStack::Pop(3); //parameters2 numbervalues valuearray2 - } - } - - if( (nField!=KErrNotFound) || (fField!=KErrNotFound) || (cField!=KErrNotFound) || isNumber || ExternalizeEmpty ) - { - if( !isNumber ) - { - //Create empty TEL field (required by the specs) - - CDesC16Array* ValueArray3=new (ELeave) CDesCArrayFlat(4); - CleanupStack::PushL(ValueArray3); - CParserPropertyValueCDesCArray* NumberValues2=new (ELeave) CParserPropertyValueCDesCArray(ValueArray3); - CleanupStack::PushL(NumberValues2); - CArrayPtr* parameters3=new (ELeave) CArrayPtrFlat(1); - CleanupStack::PushL(parameters3); - - VCard->AddPropertyL(CParserProperty::NewL((*NumberValues2),KTelProperty,parameters3)); //VCard takes the ownership of the property - - CleanupStack::Pop(3); //parameters3 numbervalues valuearray3 - } - - TRAPD( err, VCard->ExternalizeL( iWriter );) //If there are no name or numbers, then no externalizing.. - //if error then only current contact card is discarded, but others will be still collected.. - if( err == KErrNone ) - { - iContactsSaved++; - } - else - { - LOGGER_WRITE( "CntParserCollector: RunL: Error,VCARD _NOT_ saved" ); - } - } - - aContactsDb->CloseContactL( aCurrentItem ); //Close current contact item - - CleanupStack::PopAndDestroy( VCard ); // VCard and all arrays (parameters2, numvervalues, valuearray2) related to this VCard are deleted through the ownership relations - CleanupStack::PopAndDestroy( ownCard ); - } -//------------------------------------------------------------ -// CCntParserCollector::DoCancel() -//------------------------------------------------------------ -void CCntParserCollector::DoCancel() - { - LOGGER_WRITE( "CntParserCollector: DoCancel" ); - CloseResources(); - } -//------------------------------------------------------------ -// CCntParserCollector::RunError(TInt aError) -//------------------------------------------------------------ -TInt CCntParserCollector::RunError( TInt aError ) - { - LOGGER_WRITE( "CntParserCollector: RunError!" ); - CloseResources(); //JIC - - iServer->CompletePhoneBookRequests( aError ); //complete all requests with an error - return KErrNone; - } -//------------------------------------------------------------ -// CCntParserCollector::CurrentItem() -//------------------------------------------------------------ -TInt CCntParserCollector::CurrentItem() - { - return iCurrentItem; - } -//------------------------------------------------------------ -// CCntParserCollector::Count() -//------------------------------------------------------------ -TInt CCntParserCollector::Count() - { - return iCount; - } -//------------------------------------------------------------ -// CCntParserCollector::ContactsSaved() -//------------------------------------------------------------ -TInt CCntParserCollector::ContactsSaved() - { - return iContactsSaved; - } -//------------------------------------------------------------ -// CCntParserCollector::SaveTotalCountL() const -//------------------------------------------------------------ -void CCntParserCollector::SaveTotalCountL() - { - LOGGER_WRITE( "CntParserCollector: SaveTotalCount begin" ); - - if( iContactsDb ) - { - iTotalCount = iContactsDb->CountL(); - LOGGER_WRITE_1( "CntParserCollector: SaveTotalCount iTotalCount %d", iTotalCount ); - } - - RFs Fs; - RFile writer; - User::LeaveIfError(Fs.Connect()); //Connect to the file server - CleanupClosePushL(Fs); - - User::LeaveIfError(Fs.CreatePrivatePath( EDriveC )); - User::LeaveIfError(Fs.SetSessionToPrivate( EDriveC )); - - User::LeaveIfError(writer.Replace(Fs,KTotalCountFilePath,EFileWrite)); //Open file - CleanupClosePushL(writer); - LOGGER_WRITE( "CntParserCollector: SaveTotalCount file replaced" ); - - // Prepare externalized representation of iTotalCount - TBuf8< 256 > countData; - RDesWriteStream writeStream( countData ); - CleanupClosePushL( writeStream ); - writeStream.WriteInt32L( iTotalCount ); - writeStream.CommitL(); - CleanupStack::PopAndDestroy( &writeStream ); - - // Then write them to the file itself - User::LeaveIfError(writer.Write( countData )); - - CleanupStack::PopAndDestroy(); //writer - CleanupStack::PopAndDestroy(); //Fs - - LOGGER_WRITE( "CntParserCollector: SaveTotalCount end" ); - } -//------------------------------------------------------------ -// CCntParserCollector::ReadTotalCountL() const -//------------------------------------------------------------ -TInt CCntParserCollector::ReadTotalCountL() const - { - LOGGER_WRITE( "CntParserCollector: ReadTotalCount begin" ); - TInt total; - RFs Fs; - RFile reader; - User::LeaveIfError(Fs.Connect()); //Connect to the file server - CleanupClosePushL(Fs); - - User::LeaveIfError(Fs.CreatePrivatePath( EDriveC )); - User::LeaveIfError(Fs.SetSessionToPrivate( EDriveC )); - - User::LeaveIfError(reader.Open(Fs,KTotalCountFilePath,EFileRead)); //Open file - CleanupClosePushL(reader); - LOGGER_WRITE( "CntParserCollector: ReadTotalCount file opened" ); - - RFileReadStream readStream(reader); - readStream.PushL(); - - total = readStream.ReadInt32L(); - - LOGGER_WRITE_1( "CntParserCollector: ReadTotalCount total %d", total ); - - CleanupStack::PopAndDestroy(); //readStream - CleanupStack::PopAndDestroy(); //writer - CleanupStack::PopAndDestroy(); //Fs - LOGGER_WRITE( "CntParserCollector: ReadTotalCount end" ); - return total; - } -//------------------------------------------------------------ -// CCntParserCollector::ContactCountChanged() const -//------------------------------------------------------------ -TBool CCntParserCollector::ContactCountChanged() - { - LOGGER_WRITE( "CntParserCollector: ContactCountChanged begin" ); - TInt oldCount = 0; - TInt err( KErrNone ); - - if( iContactsDb ) - { - TRAP( err, iTotalCount = iContactsDb->CountL() ); - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "iContactsDb->CountL leaved: %d", err ); - LOGGER_WRITE( "CntParserCollector: ContactCountChanged ETrue" ); - return ETrue; - } - LOGGER_WRITE_1( "CntParserCollector: ContactCountChanged iTotalCount %d", iTotalCount ); - } - - TRAP( err, oldCount = ReadTotalCountL() ); - - LOGGER_WRITE_1( "CntParserCollector: ContactCountChanged err %d", err ); - LOGGER_WRITE_1( "CntParserCollector: ContactCountChanged oldCount %d", oldCount ); - LOGGER_WRITE_1( "CntParserCollector: ContactCountChanged iTotalCount %d", iTotalCount ); - - if( err == KErrNone ) - { - if( iTotalCount != oldCount ) - { - LOGGER_WRITE( "CntParserCollector: ContactCountChanged ETrue" ); - return ETrue; - } - else - { - LOGGER_WRITE( "CntParserCollector: ContactCountChanged EFalse" ); - return EFalse; - } - } - else - { - LOGGER_WRITE( "CntParserCollector: ContactCountChanged ETrue" ); - return ETrue; - } - } - -// end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/src/cntparserinfolog.cpp --- a/connectivitymodules/SeCon/cntparser/src/cntparserinfolog.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: CCntParserInfoLog implementation. -* -*/ - - -#include -#include -#include - -#include "cntparserinfolog.h" - -_LIT8(KNewLine,"\r\n"); - -_LIT8(KMaxRecords,"Maximum-Records:"); -_LIT8(KTotalRecords,"Total-Records:"); - -//------------------------------------------------------------ -// CCntParserInfoLog::CCntParserInfoLog() -//------------------------------------------------------------ -CCntParserInfoLog::CCntParserInfoLog() - { - } - -//------------------------------------------------------------ -// CCntParserInfoLog::~CCntParserInfoLog() -//------------------------------------------------------------ -CCntParserInfoLog::~CCntParserInfoLog() - { - } - -//------------------------------------------------------------ -// CCntParserInfoLog::CCntParserInfoLog::NewL() -//------------------------------------------------------------ -EXPORT_C CCntParserInfoLog* CCntParserInfoLog::NewL() - { - CCntParserInfoLog* self=new (ELeave) CCntParserInfoLog(); - return self; - } - -//------------------------------------------------------------ -// CCntParserInfoLog::SaveToFileL(const TDesC& aFileName) const -//------------------------------------------------------------ -EXPORT_C void CCntParserInfoLog::SaveToFileL( const TDesC& aFileName ) const - { - TInt err = KErrNone; - RFs Fs; - RFile writer; - User::LeaveIfError( Fs.Connect() ); //Connect to the file server - CleanupClosePushL( Fs ); - err = writer.Replace( Fs, aFileName, EFileWrite ); //Open file - CleanupClosePushL( writer ); - - if( err == KErrNone ) - { - writer.Write( KMaxRecords ); - - TBuf8<16> numVal; - numVal.Num( iMaximumRecords ); - writer.Write( numVal ); - - writer.Write( KNewLine ); - - writer.Write( KTotalRecords ); - - TBuf8<16> numVal2; - numVal2.Num( iTotalRecords ); - writer.Write( numVal2 ); - } - - CleanupStack::PopAndDestroy(); //writer - CleanupStack::PopAndDestroy(); //Fs - } - -//------------------------------------------------------------ -// CCntParserInfoLog::SetTotalRecords(TInt aTotalRecords) -//------------------------------------------------------------ -EXPORT_C void CCntParserInfoLog::SetTotalRecords(TInt aTotalRecords) - { - iTotalRecords = aTotalRecords; - } - -//------------------------------------------------------------ -// CCntParserInfoLog::SetMaximumRecords(TInt aMaximumRecords) -//------------------------------------------------------------ -EXPORT_C void CCntParserInfoLog::SetMaximumRecords(TInt aMaximumRecords) - { - iMaximumRecords = aMaximumRecords; - } - -//------------------------------------------------------------ -// CCntParserInfoLog::TotalRecords() const -//------------------------------------------------------------ -EXPORT_C TInt CCntParserInfoLog::TotalRecords() const - { - return iTotalRecords; - } - -//------------------------------------------------------------ -// CCntParserInfoLog::MaximumRecords() const -//------------------------------------------------------------ -EXPORT_C TInt CCntParserInfoLog::MaximumRecords() const - { - return iMaximumRecords; - } - -// end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/src/cntparserserverexe.cpp --- a/connectivitymodules/SeCon/cntparser/src/cntparserserverexe.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,322 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: CCntParserServer implementation. -* -*/ - - -#include "clientserver.h" -#include "cntparserserver.h" -#include "cntparserserversession.h" -#include "irmcconsts.h" - -#include "debug.h" - -#include - -//------------------------------------------------------------ -// RunServer -//------------------------------------------------------------ -TInt CCntParserServer::RunServer() - { - LOGGER_ENTERFN( "CCntParserServer::RunServer" ); - - CTrapCleanup* cleanup = CTrapCleanup::New(); - TInt ret( KErrNoMemory ); - if( cleanup ) - { - TRAP( ret, CCntParserServer::RunServerL() ); - delete cleanup; - } - if( ret != KErrNone ) - { - // Signal the client that server creation failed - RProcess::Rendezvous( ret ); - } - LOGGER_LEAVEFN( "CCntParserServer::RunServer" ); - return ret; - } -//------------------------------------------------------------ -// RunServerL -//------------------------------------------------------------ -void CCntParserServer::RunServerL() - { - // Create and install the active scheduler we need - LOGGER_ENTERFN( "CCntParserServer::RunServerL" ); - CActiveScheduler *as=new (ELeave)CActiveScheduler; - CleanupStack::PushL( as ); - CActiveScheduler::Install( as ); - - // Create server - CCntParserServer::NewL(); - - // Initialisation complete, now signal the client - User::LeaveIfError( RThread().RenameMe( KTxtServer ) ); - RProcess::Rendezvous( KErrNone ); - - // Ready to run - CActiveScheduler::Start(); - - // Cleanup the scheduler - CleanupStack::PopAndDestroy( as ); - LOGGER_LEAVEFN( "CCntParserServer::RunServerL" ); - } -//------------------------------------------------------------ -// E32Main() -//------------------------------------------------------------ -TInt E32Main() - { - return CCntParserServer::RunServer(); - } -//------------------------------------------------------------ -// PanicServer(TCntParserServerPanic aPanic) -//------------------------------------------------------------ -GLDEF_C void PanicServer(TCntParserServerPanic aPanic) - { - LOGGER_WRITE( "PANIC SERVER!" ); - _LIT(KTxtServerPanic,"Parser server panic"); - User::Panic( KTxtServerPanic, aPanic ); - } - - -//********************************** -//CCntParserServer -//********************************** - -//------------------------------------------------------------ -// CCntParserServer::CCntParserServer() -//------------------------------------------------------------ -CCntParserServer::CCntParserServer() : CServer2( EPriorityStandard ) - { - } -//------------------------------------------------------------ -// CCntParserServer::~CCntParserServer() -//------------------------------------------------------------ -EXPORT_C CCntParserServer::~CCntParserServer() - { - if( iCollector ) - { - iCollector->Cancel(); - } - delete iCollector; - delete iCurrentDatabase; - LOGGER_WRITE( "CntParserServer: DELETED!" ); - } -//------------------------------------------------------------ -// CCntParserServer* CCntParserServer::NewL() -//------------------------------------------------------------ -EXPORT_C CCntParserServer* CCntParserServer::NewL() - { - LOGGER_WRITE( "CntParserServer: NEW" ); - CCntParserServer* pS=new (ELeave) CCntParserServer(); - CleanupStack::PushL(pS); - pS->StartL( KCntParserName ); - CleanupStack::Pop( pS ); - LOGGER_WRITE( "CntParserServer: Created" ); - return pS; - } -//------------------------------------------------------------ -// CCntParserServer::NewSessionL(const TVersion &aVersion, const RMessage2& /*aMsg*/) const -//------------------------------------------------------------ -CSession2* CCntParserServer::NewSessionL(const TVersion &aVersion, const RMessage2& /*aMsg*/) const - { - LOGGER_WRITE( "CntParserServer: NEW SessionL" ); - // check we're the right version - TVersion v( KCntParserMajorVersionNumber,KCntParserMinorVersionNumber,KCntParserBuildVersionNumber ); - if ( !User::QueryVersionSupported( v,aVersion ) ) - User::Leave( KErrNotSupported ); - CCntParserServerSession* self=CCntParserServerSession::NewL( (CCntParserServer*)this ); - return self; - } -//------------------------------------------------------------ -// CCntParserServer::IncreaseSessionCountL() -//------------------------------------------------------------ -void CCntParserServer::IncreaseSessionCountL() - { - LOGGER_WRITE( "CntParserServer: Increase Session Count" ); - iSessionCount++; - if( iSessionCount == 1 ) //If first session, prepare collector - { - PrepareCollectorL(); - } - } -//------------------------------------------------------------ -// CCntParserServer::DecreaseSessionCount() -//------------------------------------------------------------ -void CCntParserServer::DecreaseSessionCount() - { - LOGGER_WRITE( "CntParserServer: Decrease Session Count" ); - iSessionCount--; - if( iSessionCount==0 ) //if last session is disconnected, delete server - { - Stop(); - } - } -//------------------------------------------------------------ -// CCntParserServer::ContactsParsed() -//------------------------------------------------------------ -TInt CCntParserServer::ContactsParsed() - { - return iCollector->CurrentItem(); - } -//------------------------------------------------------------ -// CCntParserServer::TotalNumOfContacts() -//------------------------------------------------------------ -TInt CCntParserServer::TotalNumOfContacts() - { - //After the PrepareCollector is called, the number of contacts can be returned - return iCollector->Count(); - } -//------------------------------------------------------------ -// CCntParserServer::ContactsSaved() -//------------------------------------------------------------ -TInt CCntParserServer::ContactsSaved() - { - return iCollector->ContactsSaved(); - } -//------------------------------------------------------------ -// CCntParserServer::PrepareCollectorL() -//------------------------------------------------------------ -void CCntParserServer::PrepareCollectorL() - { - LOGGER_WRITE( "CntParserServer: Prepare collectorL: Open Contact Database" ); - - TFileName dbFile; - TFileName defaultDb; - - CContactDatabase::GetDefaultNameL( defaultDb ); - - LOGGER_WRITE( "CntParserServer: Prepare collectorL: GetDefault" ); - - iCurrentDatabase=CContactDatabase::OpenL(); - - LOGGER_WRITE( "CntParserServer: Prepare collectorL: OpenDefault" ); - - iCurrentDatabase->GetCurrentDatabase( dbFile ); //Get selected database - - LOGGER_WRITE( "CntParserServer: Prepare collectorL: CompareDefault" ); - - if( dbFile.CompareF(defaultDb)!=0 && dbFile!=KNullDesC16 /*&& dbFile.CompareF(KSimDummyDatabase)!=0*/) //If the selected database is not the default and something is selected - { - LOGGER_WRITE( "CntParserServer: Prepare collectorL: Close Default" ); - delete iCurrentDatabase; - iCurrentDatabase = NULL; - - LOGGER_WRITE( "CntParserServer: Prepare collectorL: OpenSelected" ); - iCurrentDatabase=CContactDatabase::OpenL( dbFile ); //open the selected one - } - - LOGGER_WRITE( "CntParserServer: Prepare collectorL: Is everything ok?" ); - if( !iCurrentDatabase ) - { - User::Leave( KErrNotFound ); - } - - LOGGER_WRITE( "CntParserServer: Prepare collectorL: Create Collector" ); - iCollector = CCntParserCollector::NewL( this,iCurrentDatabase ); - - iRequests = 0; - } -//------------------------------------------------------------ -// CCntParserServer::CreateIrMCL2PhoneBookL() -//------------------------------------------------------------ -TInt CCntParserServer::CreateIrMCL2PhoneBookL(const TDesC& path, TInt aMaxNumberOfContacts,TBool aForced) - { - LOGGER_WRITE( "CntParserServer: CreateIrMCL2PhoneBookL" ); - - TInt err( KErrNone ); - - iRequests++; - if( iRequests == 1 ) - { - LOGGER_WRITE( "CntParserServer: CreateIrMCL2PhoneBookL: Ready to call collector" ); - - err = iCollector->CreateIrMCL2FileL( path,aMaxNumberOfContacts,aForced ); - if( err==KPBNotUpdated ) - { - iRequests = 0; //If the file exists (no parsing), then more requests can be made - } - } - else - { - return KErrNotReady; - } - return err; - } -//------------------------------------------------------------ -// CCntParserServer::CompletePhoneBookRequests() -//------------------------------------------------------------ -void CCntParserServer::CompletePhoneBookRequests(TInt aErr) //Goes through all the sessions and completes the request - { - LOGGER_WRITE( "CntParserServer: Complete phonebook request" ); - iSessionIter.SetToFirst(); - while( iSessionIter!=NULL ) //Go through all sessions - { - ( (CCntParserServerSession*) (iSessionIter++) )->CompletePhoneBookRequest( aErr ); - } - iRequests = 0; //Collector is ready to start again.. - } -//------------------------------------------------------------ -// CCntParserServer::CancelPhoneBookRequest() -//------------------------------------------------------------ -void CCntParserServer::CancelPhoneBookRequest() - { - if( iRequests == 1 ) - { - iCollector->Cancel(); - } - iRequests--; - } -//------------------------------------------------------------ -// CCntParserServer::CancelAllPhoneBookRequests() -//------------------------------------------------------------ -void CCntParserServer::CancelAllPhoneBookRequests() - { - iCollector->Cancel(); - iRequests = 0; - } -//------------------------------------------------------------ -// CCntParserServer::Disconnect() -//------------------------------------------------------------ -void CCntParserServer::Disconnect() - { - LOGGER_WRITE( "CntParserServer: Disconnect" ); - } -//------------------------------------------------------------ -// CCntParserServer::Stop() -//------------------------------------------------------------ -void CCntParserServer::Stop() - { - LOGGER_ENTERFN( "CntParserServer::Stop()" ); - if( iCollector ) - { - iCollector->Cancel(); - } - delete iCollector; - iCollector = NULL; - delete iCurrentDatabase; - iCurrentDatabase = NULL; - CActiveScheduler::Stop(); - LOGGER_LEAVEFN( "CntParserServer::Stop()" ); - } -//------------------------------------------------------------ -// CCntParserServer::SetRequests() -//------------------------------------------------------------ -void CCntParserServer::SetRequests(TInt aRequests) - { - iRequests=aRequests; - } - - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/cntparser/src/cntparserserversession.cpp --- a/connectivitymodules/SeCon/cntparser/src/cntparserserversession.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/* -* Copyright (c) 2002-2008 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: CCntParserServerSession implementation. -* -*/ - - -#include "cntparserserversession.h" -#include -#include "cntparsercollector.h" -#include "cntparserinfolog.h" -#include "irmcconsts.h" - -#include "debug.h" - -//------------------------------------------------------------ -// CCntParserServerSession::CCntParserServerSession() -//------------------------------------------------------------ -CCntParserServerSession::CCntParserServerSession() - { - } -//------------------------------------------------------------ -// CCntParserServerSession::NewL(CCntParserServer* aServer) -//------------------------------------------------------------ -CCntParserServerSession* CCntParserServerSession::NewL( CCntParserServer* aServer ) - { - LOGGER_ENTERFN( "CntParserServerSession::NewL()" ); - - CCntParserServerSession* self = new( ELeave ) CCntParserServerSession(); - CleanupStack::PushL( self ); - self->ConstructL( aServer ); - CleanupStack::Pop( self ); - LOGGER_LEAVEFN( "CntParserServerSession::NewL()" ); - return self; - } -//------------------------------------------------------------ -// CCntParserServerSession::ConstructL( CCntParserServer* aServer ) -//------------------------------------------------------------ -void CCntParserServerSession::ConstructL( CCntParserServer* aServer ) - { - iContactsParserSrv = aServer; - iContactsParserSrv->IncreaseSessionCountL(); - } -//------------------------------------------------------------ -// CCntParserServerSession::~CCntParserServerSession() -//------------------------------------------------------------ -CCntParserServerSession::~CCntParserServerSession() - { - LOGGER_ENTERFN( "CntParserServerSession::~CCntParserServerSession()" ); - if ( iContactsParserSrv ) - { - iContactsParserSrv->DecreaseSessionCount(); - } - LOGGER_LEAVEFN( "CntParserServerSession::~CCntParserServerSession()" ); - } -//------------------------------------------------------------ -// CCntParserServerSession::ServiceL( const RMessage2& aMessage ) -//------------------------------------------------------------ -void CCntParserServerSession::ServiceL( const RMessage2& aMessage ) - { - LOGGER_WRITE( "CntParserServerSession: ServiceL" ); - - TInt err( KErrNone ); - TInt ret( KErrNone ); - - TRAP( err, ret = DispatchMessageL( aMessage ) ); - - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "CntParserServerSession: ServiceL: Error trapped, complete with ERR code %d", err ); - - iPhoneBookRequest = EFalse; //If requested, then clear request flag - iContactsParserSrv->SetRequests( 0 ); //Reset requests count in server to allow new requests to start.. - aMessage.Complete( err ); //If trap error, complete with it - return; - } - - if ( ret == KErrNone ) - { - LOGGER_WRITE( "CntParserServerSession: ServiceL: No complete" ); - return; - } - - if ( ret == KPerformComplete ) - { - LOGGER_WRITE( "CntParserServerSession: ServiceL: Normal complete" ); - - aMessage.Complete( KErrNone ); - return; - } - - if ( ret == KPBNotUpdated ) - { - LOGGER_WRITE( "CntParserServerSession: ServiceL: Complete (PB not updated)" ); - - iPhoneBookRequest = EFalse; - aMessage.Complete( KPBNotUpdated ); - return; - } - LOGGER_WRITE( "CntParserServerSession: ServiceL: Error, should never come here" ); - aMessage.Complete( KErrGeneral ); - } -//------------------------------------------------------------ -// CCntParserServerSession::CompletePhoneBookRequest( TInt aErr ) -//------------------------------------------------------------ -void CCntParserServerSession::CompletePhoneBookRequest( TInt aErr ) - { - LOGGER_WRITE( "CntParserServerSession: CompletePhoneBookRequest" ); - - if ( iPhoneBookRequest ) //If this session has requested phonebook, then the completion should be done here, as it was not done in ServiceL - { - LOGGER_WRITE( "CntParserServerSession: CompletePhoneBookRequest: collector or cancel" ); - iPhoneBookRequest = EFalse; - iPhoneBookRequestMessage.Complete( aErr ); - } - else - { - LOGGER_WRITE( "CntParserServerSession: CompletePhoneBookRequest: No complete for this session" ); - } - } -//------------------------------------------------------------ -// CCntParserServerSession::DispatchMessageL( const RMessage2 &aMessage ) -//------------------------------------------------------------ -TInt CCntParserServerSession::DispatchMessageL( const RMessage2 &aMessage ) - { - LOGGER_WRITE( "CntParserServerSession: DispatchMessageL" ); - - TInt res( KPerformComplete ); - - switch( aMessage.Function() ) - { - case ECntParserServerCreateIrMCL2: //Create pb.vcf file - { - res = ETrue; - - if ( iPhoneBookRequest == EFalse ) - { - iPhoneBookRequestMessage = aMessage; - iPhoneBookRequest = ETrue; - - TInt sid=aMessage.SecureId(); - TInt MaxNumOfContacts = aMessage.Int0(); - TBool Forced = aMessage.Int1(); - TBuf<8> sidLit; - sidLit.AppendNumFixedWidth( sid, EHex, 8); - TBuf<255> path; - path.Insert( 0, KPhoneBookFilename ); - - res = iContactsParserSrv->CreateIrMCL2PhoneBookL( path, (TInt) MaxNumOfContacts, Forced ); - } - break; - } - case ECntParserServerCntParsed: //How many contacts already parsed - { - TPckgBuf p((TInt) iContactsParserSrv->ContactsParsed()); - aMessage.WriteL( 0, p, 0 ); - break; - } - case ECntParserServerTotalNumOfContacts: //How many contacts total? - { - TPckgBuf p((TInt) iContactsParserSrv->TotalNumOfContacts()); - aMessage.WriteL( 0, p, 0 ); - break; - } - case ECntParserServerDisconnect: //Disconnect session from server - { - iContactsParserSrv->Disconnect(); - break; - } - case ECntParserServerCancel: //Cancel phone book request - { - if (iPhoneBookRequest) - { - iContactsParserSrv->CancelPhoneBookRequest(); - CompletePhoneBookRequest( KErrCancel ); - } - break; - } - case ECntParserServerCntSaved: //How many contacts total? - { - TPckgBuf p((TInt) iContactsParserSrv->ContactsSaved()); - aMessage.WriteL( 0, p, 0 ); - break; - } - case ECntParserServerCancelAll: //Cancel all requests, not just current? - { - iContactsParserSrv->CancelAllPhoneBookRequests(); - break; - } - // requests we don't understand - // so panic the client here, this function also completes the message - default: - { - PanicClient( EBadRequest ); - break; - } - } - return res; - } -//------------------------------------------------------------ -// CCntParserServerSession::PanicClient(TInt aPanic) const -//------------------------------------------------------------ -void CCntParserServerSession::PanicClient(TInt aPanic) const - { - User::Panic( KTxtServer,aPanic ); - } - -// end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/common/conmltask/inc/sconconmltask.h --- a/connectivitymodules/SeCon/common/conmltask/inc/sconconmltask.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,598 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: Header file for ConML tasks -* -*/ - - -#ifndef _SCONCONMLTASK_H_ -#define _SCONCONMLTASK_H_ - -#include -#include - -const TInt KSConTaskPartiallyCompleted( 206 ); -const TInt KMaxPackageNameLength = 128; - -enum TSConMethodName - { - ECancel = 0, - EGetDataOwnerStatus, - EGetDataSize, - EGetStatus, - EInstall, - EListDataOwners, - EListInstalledApps, - EListPublicFiles, - ERequestData, - ESetBURMode, - ESetInstParams, - ESupplyData, - EUninstall, - EUpdateDeviceInfo, - EReboot, - EGetMetadata - }; - -enum TSConInstallMode - { - ESilentInstall = 0, - EUnsilentInstall, - EUnknown - }; - -enum TSConUserPerm - { - EPermReadOnly = 0, - EPermNormal - }; - -enum TSConDOType - { - EActiveDataOwner = 1, - EPassiveDataOwner, - EHybridDataOwner - }; - -enum TSConHasFiles - { - ENoFiles = 0, - EPublicFiles, - ESystemFiles, - EPublicSystemFiles - }; - -enum TSConAppType - { - ESisApplication = 0, - ESisAugmentation, - EJavaApplication, - EWidgetApplication - }; - -enum TSConBurMode - { - ESConBurNormal = 1, // 1 BUR mode - normal - ESConBurBackupFull, // 2 BUR mode – backup full - ESConBurBackupPartial, // 3 BUR mode – backup partial - ESConBurRestoreFull, // 4 BUR mode – restore full - ESConBurRestorePartial // 5 BUR mode – restore partial - }; - -enum TSConIncType - { - ESConNoBackup = 0, // 0 No backup - ESConBackupBase = 100, // 100 Backup – base - ESConBackupIncrement = 200 // 200 Backup - increment - }; - -enum TSConTransferDataType - { - ESConRegistrationData = 1, // 1 RegistrationData - ESConPassiveSnapshotData, // 2 Passive snapshot data - ESConPassiveBaseData, // 3 Passive base data - ESConPassiveIncrementalData,// 4 Passive incremental data - ESConActiveSnapshotData, // 5 Active snapshot data - ESConActiveBaseData, // 6 Active base data - ESConActiveIncrementalData, // 7 Active incremental data - ESConSystemData, // 8 System data - ESConSystemSnapshotData // 9 System snapshot data - }; - -enum TSConDataOwnerStatus - { - ESConUnset = 0, // 0 Unset - ESConNotFound, // 1 Not found - ESConReady, // 2 Ready - ESConNotReady, // 3 Not ready - ESConFailed, // 4 Failed - ESConNotConnected, // 5 Not connected - ESConNotImplemented // 6 Not implemented - }; - - - - -//============================================================ -// class CSConReboot declaration -//============================================================ -NONSHARABLE_CLASS( CSConReboot ) : public CBase - { - public: - CSConReboot(); - ~CSConReboot(); - CSConReboot* CopyL(); - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConDataOwner declaration -//============================================================ -NONSHARABLE_CLASS( CSConDataOwner ) : public CBase - { - public: - CSConDataOwner(); - ~CSConDataOwner(); - CSConDataOwner* CopyL(); - - public: - //dataowner type - TSConDOType iType; - //unique identifier - TUid iUid; - //drive list - TDriveList iDriveList; - //package name - TBuf iPackageName; - //requires reboot - TBool iReqReboot; - //has files - TSConHasFiles iHasFiles; - //supports incremental backup - TBool iSupportsInc; - //supports selective backup - TBool iSupportsSel; - //delay to prepare data - TBool iDelayToPrep; - //size - TUint iSize; - //data owner status - TSConDataOwnerStatus iDataOwnStatus; - //transfer data type - TSConTransferDataType iTransDataType; - //Java hash - HBufC* iJavaHash; - }; - -//============================================================ -// class CSConUpdateDeviceInfo declaration -//============================================================ -NONSHARABLE_CLASS( CSConUpdateDeviceInfo ) : public CBase - { - public: - CSConUpdateDeviceInfo(); - ~CSConUpdateDeviceInfo(); - CSConUpdateDeviceInfo* CopyL(); - - TBuf8<3> iVersion; //version number - TBool iInstallSupp; - TBool iUninstallSupp; - TBool iInstParamsSupp; - TBool iInstAppsSupp; - TBool iDataOwnersSupp; - TBool iSetBURModeSupp; - TBool iGetSizeSupp; - TBool iReqDataSupp; - TBool iSupplyDataSupp; - TBool iRebootSupp; - TInt iMaxObjectSize; //kBytes - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; -//============================================================ -// class CSConInstApp declaration -//============================================================ -NONSHARABLE_CLASS( CSConInstApp ) : public CBase - { - public: - CSConInstApp() {}; - ~CSConInstApp(); - CSConInstApp* CopyL(); - - TFileName iName; - TFileName iParentName; - TFileName iVendor; - TFileName iVersion; - TInt64 iSize; - TSConAppType iType; - TUid iUid; - HBufC* iWidgetBundleId; // Widget bundle identifier like "com.nokia.widget.HelloWorld" - }; - -//============================================================ -// class CSConListInstApps declaration -//============================================================ -NONSHARABLE_CLASS( CSConListInstApps ) : public CBase - { - public: - CSConListInstApps(); - ~CSConListInstApps(); - CSConListInstApps* CopyL(); - - TBool iAllApps; //list all apps - TDriveList iDriveList; //drive list - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - - RPointerArray iApps; //installed apps - }; - -//============================================================ -// class CSConGetStatus declaration -//============================================================ -NONSHARABLE_CLASS( CSConGetStatus ) : public CBase - { - public: - TBool iAll; //list all statuses - TInt iTaskId; //task id - }; - -//============================================================ -// class CSConFile declaration -//============================================================ -NONSHARABLE_CLASS( CSConFile ) : public CBase - { - public: - CSConFile(); - ~CSConFile(); - CSConFile* CopyL(); - - TFileName iPath; //file path + name - TBuf iModified; //modified date - TUint iSize; //file size - TSConUserPerm iUserPerm; //user permission - }; - -//============================================================ -// class CSConInstall declaration -//============================================================ -NONSHARABLE_CLASS( CSConInstall ) : public CBase - { - public: - CSConInstall(); - ~CSConInstall(); - - CSConInstall* CopyL(); - - TFileName iPath; //path to file - TSConInstallMode iMode; //install mode - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConUninstall declaration -//============================================================ -NONSHARABLE_CLASS( CSConUninstall ) : public CBase - { - public: - CSConUninstall(); - ~CSConUninstall(); - - CSConUninstall* CopyL(); - - TFileName iName; // application name - TFileName iVendor; // application vendor - TUid iUid; // application uid - TSConAppType iType; // application type - TSConInstallMode iMode; // install mode - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConListDataOwners declaration -//============================================================ -NONSHARABLE_CLASS( CSConListDataOwners ) : public CBase - { - public: - CSConListDataOwners(); - ~CSConListDataOwners(); - CSConListDataOwners* CopyL(); - void DeleteDataOwners(); - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - - RPointerArray iDataOwners; //data owners - }; - -//============================================================ -// class CSConSetBURMode declaration -//============================================================ -NONSHARABLE_CLASS( CSConSetBURMode ) : public CBase - { - public: - TDriveList iDriveList; //drive list - TSConBurMode iPartialType; //partial backup type - TSConIncType iIncType; //incremental backup type - - CSConSetBURMode(); - ~CSConSetBURMode(); - CSConSetBURMode* CopyL(); - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConGetDataSize declaration -//============================================================ -NONSHARABLE_CLASS( CSConGetDataSize ) : public CBase - { - public: - CSConGetDataSize(); - ~CSConGetDataSize(); - - CSConGetDataSize* CopyL(); - void DeleteDataOwners(); - - public: - RPointerArray iDataOwners; //data owners - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConListPublicFiles declaration -//============================================================ -NONSHARABLE_CLASS( CSConListPublicFiles ) : public CBase - { - public: - CSConListPublicFiles(); - ~CSConListPublicFiles(); - CSConListPublicFiles* CopyL(); - - public: - RPointerArray iFiles; //data owners - RPointerArray iDataOwners; //data owners - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConRequestData declaration -//============================================================ -NONSHARABLE_CLASS( CSConRequestData ) : public CBase - { - public: - CSConRequestData(); - ~CSConRequestData(); - CSConRequestData* CopyL(); - void DeleteDataAndDataOwner(); - - CSConDataOwner* iDataOwner; //data owner - HBufC8* iBackupData; //backup data - TBool iMoreData; //more data - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConGetDataOwnerStatus declaration -//============================================================ -NONSHARABLE_CLASS( CSConGetDataOwnerStatus ) : public CBase - { - public: - CSConGetDataOwnerStatus(); - ~CSConGetDataOwnerStatus(); - CSConGetDataOwnerStatus* CopyL(); - void DeleteDataOwners(); - - public: - RPointerArray iDataOwners; //data owners - - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConSupplyData declaration -//============================================================ -NONSHARABLE_CLASS( CSConSupplyData ) : public CBase - { - public: - CSConSupplyData(); - ~CSConSupplyData(); - CSConSupplyData* CopyL(); - public: - CSConDataOwner* iDataOwner; - HBufC8* iRestoreData; //restore data - TBool iMoreData; //more data - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConGetMetadata declaration -//============================================================ -NONSHARABLE_CLASS( CSConGetMetadata ) : public CBase - { - public: - CSConGetMetadata(); - ~CSConGetMetadata(); - CSConGetMetadata* CopyL(); - public: - TFileName iFilename; - HBufC8* iData; //metadata - TBool iMoreData; //more data - //used only with reply - TBool iComplete; //task complete - TInt iProgress; //task progress - }; - -//============================================================ -// class CSConTask declaration -//============================================================ -NONSHARABLE_CLASS( CSConTask ): public CBase - { - public: - /** - * Two-phase constructor - * @return CSConTask instance - */ - static CSConTask* NewL( TSConMethodName aMethod ); - static CSConTask* NewLC( TSConMethodName aMethod ); - - CSConTask(); - ~CSConTask(); - TSConMethodName GetServiceId() const; - CSConTask* CopyL() const; - TBool GetComplete(); - void SetCompleteValue( TBool aValue ); - TBool GetCompleteValue(); - void SetProgressValue( TInt aValue ); - private: - - void ConstructL( TSConMethodName aMethod ); - public: - //Task - //service id - TSConMethodName iMethod; - //task number - TInt iTaskId; - - //DeviceInfo -params - CSConUpdateDeviceInfo* iDevInfoParams; - //ListInstalledTasks -params - CSConListInstApps* iListAppsParams; - //GetStatus -params - CSConGetStatus* iGetStatusParams; - //Install -params - CSConInstall* iInstallParams; - //Uninstall -params - CSConUninstall* iUninstallParams; - //SetBURMode -params - CSConSetBURMode* iBURModeParams; - //GetDataSize -params - CSConGetDataSize* iGetDataSizeParams; - //RequestData -params - CSConRequestData* iRequestDataParams; - //GetDataOwnerStatus -params - CSConGetDataOwnerStatus* iGetDataOwnerParams; - //SupplyData -params - CSConSupplyData* iSupplyDataParams; - //ListPublicFiles -params - CSConListPublicFiles* iPubFilesParams; - //ListDataOwners -params - CSConListDataOwners* iListDataOwnersParams; - //Reboot -params - CSConReboot* iRebootParams; - //GetMetadata -params - CSConGetMetadata* iGetMetadataParams; - - TInt iCancelTaskId; - TBool iCancelTaskAll; - }; - -//============================================================ -// class CSConTaskReply declaration -//============================================================ -NONSHARABLE_CLASS( CSConTaskReply ) : public CBase - { - public: - CSConTaskReply(); - CSConTaskReply( TSConMethodName aMethod ); - ~CSConTaskReply(); - void InitializeL( const CSConTask& aTask ); - void InitializeL( TSConMethodName aMethod, - TInt aProgress, TBool aComplete ); - CSConTaskReply* CopyAndFreeL(); - void CleanTaskData(); - - public: - //task id number - TInt iTaskId; - //method type - TSConMethodName iMethod; - - //DeviceInfo -params - CSConUpdateDeviceInfo* iDevInfoParams; - //ListInstalledTasks -params - CSConListInstApps* iListAppsParams; - //GetStatus -params - CSConGetStatus* iGetStatusParams; - //Install -params - CSConInstall* iInstallParams; - //Uninstall -params - CSConUninstall* iUninstallParams; - //SetBURMode -params - CSConSetBURMode* iBURModeParams; - //GetDataSize -params - CSConGetDataSize* iGetDataSizeParams; - //RequestData -params - CSConRequestData* iRequestDataParams; - //GetDataOwnerStatus -params - CSConGetDataOwnerStatus* iGetDataOwnerParams; - //SupplyData -params - CSConSupplyData* iSupplyDataParams; - //ListPublicFiles -params - CSConListPublicFiles* iPubFilesParams; - //ListDataOwners -params - CSConListDataOwners* iListDataOwnersParams; - //Reboot -params - CSConReboot* iRebootParams; - //GetMetadata -params - CSConGetMetadata* iGetMetadataParams; - }; - -//============================================================ -// class CSConStatusReply declaration -//============================================================ -NONSHARABLE_CLASS( CSConStatusReply ): public CBase - { - public: - CSConStatusReply(); - ~CSConStatusReply(); - - public: - TBool iNoTasks; //no active tasks - RPointerArray iTasks; - }; - -#endif - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/common/conmltask/src/sconconmltask.cpp --- a/connectivitymodules/SeCon/common/conmltask/src/sconconmltask.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1696 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: ConML Task implementations -* -*/ - - -// INCLUDE FILES - -#include "sconconmltask.h" - -// ----------------------------------------------------------------------------- -// CSConReboot::CSConReboot() -// -// ----------------------------------------------------------------------------- -// -CSConReboot::CSConReboot() : iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConReboot::~CSConReboot() -// -// ----------------------------------------------------------------------------- -// -CSConReboot::~CSConReboot() - { - } - -// ----------------------------------------------------------------------------- -// CSConReboot::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConReboot* CSConReboot::CopyL() - { - CSConReboot* copy = new (ELeave) CSConReboot(); - copy->iComplete = iComplete; - copy->iProgress = iProgress; - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConDataOwner::CSConDataOwner() -// -// ----------------------------------------------------------------------------- -// -CSConDataOwner::CSConDataOwner() - { - iHasFiles = ENoFiles; - iJavaHash = NULL; - iUid.iUid = 0; - - //Initialize iDriveList with zeros - iDriveList.Fill( '\x0' ); - } - -// ----------------------------------------------------------------------------- -// CSConDataOwner::~CSConDataOwner() -// -// ----------------------------------------------------------------------------- -// -CSConDataOwner::~CSConDataOwner() - { - delete iJavaHash; - iJavaHash = NULL; - } - -// ----------------------------------------------------------------------------- -// CSConDataOwner::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConDataOwner* CSConDataOwner::CopyL() - { - CSConDataOwner* copy = new (ELeave) CSConDataOwner(); - copy->iType = iType; - copy->iUid = iUid; - copy->iDriveList.Copy( iDriveList ); - copy->iPackageName = iPackageName; - copy->iReqReboot = iReqReboot; - copy->iHasFiles = iHasFiles; - copy->iSupportsInc = iSupportsInc; - copy->iSupportsSel = iSupportsSel; - copy->iDelayToPrep = iDelayToPrep; - copy->iSize = iSize; - copy->iDataOwnStatus = iDataOwnStatus; - copy->iTransDataType = iTransDataType; - - if ( iJavaHash ) - { - if ( copy->iJavaHash ) - { - delete copy->iJavaHash; - copy->iJavaHash = NULL; - } - copy->iJavaHash = iJavaHash->Alloc(); - } - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConUpdateDeviceInfo::CSConUpdateDeviceInfo() -// -// ----------------------------------------------------------------------------- -// -CSConUpdateDeviceInfo::CSConUpdateDeviceInfo() : - iInstallSupp(EFalse), iUninstallSupp(EFalse), - iInstParamsSupp(EFalse), iInstAppsSupp(EFalse), - iDataOwnersSupp(EFalse), iSetBURModeSupp(EFalse), - iGetSizeSupp(EFalse), iReqDataSupp(EFalse), - iSupplyDataSupp(EFalse), iRebootSupp(EFalse), - iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConUpdateDeviceInfo::~CSConUpdateDeviceInfo() -// -// ----------------------------------------------------------------------------- -// -CSConUpdateDeviceInfo::~CSConUpdateDeviceInfo() - { - } - -// ----------------------------------------------------------------------------- -// CSConUpdateDeviceInfo::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConUpdateDeviceInfo* CSConUpdateDeviceInfo::CopyL() - { - CSConUpdateDeviceInfo* copy = new (ELeave) CSConUpdateDeviceInfo(); - copy->iVersion.Copy( iVersion ); - copy->iInstallSupp = iInstallSupp; - copy->iUninstallSupp = iUninstallSupp; - copy->iInstParamsSupp = iInstParamsSupp; - copy->iInstAppsSupp = iInstAppsSupp; - copy->iDataOwnersSupp = iDataOwnersSupp; - copy->iSetBURModeSupp = iSetBURModeSupp; - copy->iGetSizeSupp = iGetSizeSupp; - copy->iReqDataSupp = iReqDataSupp; - copy->iSupplyDataSupp = iSupplyDataSupp; - copy->iMaxObjectSize = iMaxObjectSize; - copy->iRebootSupp = iRebootSupp; - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -CSConInstApp::~CSConInstApp() - { - delete iWidgetBundleId; - } -// ----------------------------------------------------------------------------- -// CSConInstApp::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConInstApp* CSConInstApp::CopyL() - { - CSConInstApp* copy = new (ELeave) CSConInstApp(); - - copy->iName.Copy( iName ); - copy->iParentName.Copy( iParentName ); - copy->iVendor.Copy( iVendor ); - copy->iVersion.Copy( iVersion ); - copy->iSize = iSize; - copy->iType = iType; - copy->iUid = iUid; - if ( iWidgetBundleId ) - { - copy->iWidgetBundleId = iWidgetBundleId->AllocL(); - } - else - { - copy->iWidgetBundleId = NULL; - } - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConListInstApps::CSConListInstApps() -// -// ----------------------------------------------------------------------------- -// -CSConListInstApps::CSConListInstApps() : iComplete( EFalse ), iProgress( 0 ) - { - //Initialize iDriveList with zeros - iDriveList.Fill( '\x0' ); - } - -// ----------------------------------------------------------------------------- -// CSConListInstApps::~CSConListInstApps() -// -// ----------------------------------------------------------------------------- -// -CSConListInstApps::~CSConListInstApps() - { - iApps.ResetAndDestroy(); - iApps.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConListInstApps::CopyL() -// -// ----------------------------------------------------------------------------- -// -CSConListInstApps* CSConListInstApps::CopyL() - { - CSConListInstApps* copy = new (ELeave) CSConListInstApps(); - copy->iAllApps = iAllApps; - copy->iDriveList = iDriveList; - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - for( TInt i = 0; i < iApps.Count(); i++ ) - { - copy->iApps.Append( iApps[i]->CopyL() ); - } - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConFile::CSConFile -// -// ----------------------------------------------------------------------------- -// -CSConFile::CSConFile() - { - } - -// ----------------------------------------------------------------------------- -// CSConFile::~CSConFile -// -// ----------------------------------------------------------------------------- -// -CSConFile::~CSConFile() - { - - } - -// ----------------------------------------------------------------------------- -// CSConFile::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConFile* CSConFile::CopyL() - { - CSConFile* copy = new (ELeave) CSConFile(); - - copy->iPath.Copy( iPath ); - copy->iModified.Copy( iModified ); - copy->iSize = iSize; - copy->iUserPerm = iUserPerm; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConInstall::CSConInstall() -// -// ----------------------------------------------------------------------------- -// -CSConInstall::CSConInstall() : iMode( EUnknown ), iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConInstall::~CSConInstall() -// -// ----------------------------------------------------------------------------- -// -CSConInstall::~CSConInstall() - { - } - -// ----------------------------------------------------------------------------- -// CSConInstall::CopyL() -// -// ----------------------------------------------------------------------------- -// -CSConInstall* CSConInstall::CopyL() - { - CSConInstall* copy = new (ELeave) CSConInstall(); - copy->iPath = iPath; - copy->iMode = iMode; - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConUninstall::CSConUninstall() -// -// ----------------------------------------------------------------------------- -// -CSConUninstall::CSConUninstall() : iMode( EUnknown ), iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConUninstall::~CSConUninstall() -// -// ----------------------------------------------------------------------------- -// -CSConUninstall::~CSConUninstall() - { - } - -// ----------------------------------------------------------------------------- -// CSConUninstall::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConUninstall* CSConUninstall::CopyL() - { - CSConUninstall* copy = new (ELeave) CSConUninstall(); - copy->iName = iName; - copy->iVendor = iVendor; - copy->iUid = iUid; - copy->iMode = iMode; - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConListDataOwners::CSConListDataOwners() -// -// ----------------------------------------------------------------------------- -// -CSConListDataOwners::CSConListDataOwners() : iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConListDataOwners::~CSConListDataOwners() -// -// ----------------------------------------------------------------------------- -// -CSConListDataOwners::~CSConListDataOwners() - { - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConListDataOwners::CopyL() -// -// ----------------------------------------------------------------------------- -// -CSConListDataOwners* CSConListDataOwners::CopyL() - { - CSConListDataOwners* copy = new (ELeave) CSConListDataOwners(); - CleanupStack::PushL( copy ); - for( TInt i = 0; i < iDataOwners.Count(); i++ ) - { - copy->iDataOwners.Append( iDataOwners[i]->CopyL() ); - } - CleanupStack::Pop( copy ); - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConListDataOwners::DeleteDataOwners() -// -// ----------------------------------------------------------------------------- -// -void CSConListDataOwners::DeleteDataOwners() - { - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CCSConSetBURMode::CSConSetBURMode() -// -// ----------------------------------------------------------------------------- -// -CSConSetBURMode::CSConSetBURMode() : iComplete( EFalse ), iProgress( 0 ) - { - //Initialize iDriveList with zeros - iDriveList.Fill( '\x0' ); - } - -// ----------------------------------------------------------------------------- -// CSConSetBURMode::~CSConSetBURMode() -// -// ----------------------------------------------------------------------------- -// -CSConSetBURMode::~CSConSetBURMode() - { - } - -// ----------------------------------------------------------------------------- -// CSConSetBURMode::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConSetBURMode* CSConSetBURMode::CopyL() - { - CSConSetBURMode* copy = new (ELeave) CSConSetBURMode(); - copy->iDriveList.Copy( iDriveList ); - copy->iPartialType = iPartialType; - copy->iIncType = iIncType; - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConGetDataSize::CSConGetDataSize() -// -// ----------------------------------------------------------------------------- -// -CSConGetDataSize::CSConGetDataSize() : iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConGetDataSize::~CSConGetDataSize() -// -// ----------------------------------------------------------------------------- -// -CSConGetDataSize::~CSConGetDataSize() - { - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConGetDataSize::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConGetDataSize* CSConGetDataSize::CopyL() - { - CSConGetDataSize* copy = new (ELeave) CSConGetDataSize(); - CleanupStack::PushL( copy ); - for( TInt i = 0; i < iDataOwners.Count(); i++ ) - { - copy->iDataOwners.Append( iDataOwners[i]->CopyL() ); - } - CleanupStack::Pop( copy ); - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConGetDataSize::DeleteDataOwners() -// -// ----------------------------------------------------------------------------- -// -void CSConGetDataSize::DeleteDataOwners() - { - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConListPublicFiles::CSConListPublicFiles() -// -// ----------------------------------------------------------------------------- -// -CSConListPublicFiles::CSConListPublicFiles() : iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConListPublicFiles::~CSConListPublicFiles() -// -// ----------------------------------------------------------------------------- -// -CSConListPublicFiles::~CSConListPublicFiles() - { - iFiles.ResetAndDestroy(); - iFiles.Close(); - - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConListPublicFiles::CopyL() -// -// ----------------------------------------------------------------------------- -// -CSConListPublicFiles* CSConListPublicFiles::CopyL() - { - CSConListPublicFiles* copy = new (ELeave) CSConListPublicFiles(); - CleanupStack::PushL( copy ); - for( TInt i = 0; i < iFiles.Count(); i++ ) - { - copy->iFiles.Append( iFiles[i]->CopyL() ); - } - - for( TInt j = 0; j < iDataOwners.Count(); j++ ) - { - copy->iDataOwners.Append( iDataOwners[j]->CopyL() ); - } - CleanupStack::Pop( copy ); - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConRequestData::CSConRequestData() -// -// ----------------------------------------------------------------------------- -// -CSConRequestData::CSConRequestData() : iDataOwner( NULL ), iBackupData( NULL ), - iMoreData( EFalse ), iComplete( EFalse ), iProgress( 0 ) - { - iDataOwner = new CSConDataOwner(); - } - -// ----------------------------------------------------------------------------- -// CSConRequestData::~CSConRequestData() -// -// ----------------------------------------------------------------------------- -// -CSConRequestData::~CSConRequestData() - { - if ( iDataOwner ) - { - delete iDataOwner; - iDataOwner = NULL; - } - - if ( iBackupData ) - { - delete iBackupData; - iBackupData = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CSConRequestData::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConRequestData* CSConRequestData::CopyL() - { - CSConRequestData* copy = new (ELeave) CSConRequestData(); - - if ( iDataOwner ) - { - if ( copy->iDataOwner ) - { - delete copy->iDataOwner; - copy->iDataOwner = NULL; - } - copy->iDataOwner = iDataOwner->CopyL(); - } - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - if ( iBackupData ) - { - if ( copy->iBackupData ) - { - delete copy->iBackupData; - copy->iBackupData = NULL; - } - copy->iBackupData = iBackupData->Alloc(); - } - - copy->iMoreData = iMoreData; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConRequestData::DeleteDataAndDataOwner() -// -// ----------------------------------------------------------------------------- -// -void CSConRequestData::DeleteDataAndDataOwner() - { - if ( iDataOwner ) - { - delete iDataOwner; - iDataOwner = NULL; - } - - if ( iBackupData ) - { - delete iBackupData; - iBackupData = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CSConGetDataOwnerStatus::CSConGetDataOwnerStatus() -// -// ----------------------------------------------------------------------------- -// -CSConGetDataOwnerStatus::CSConGetDataOwnerStatus() : iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConGetDataOwnerStatus::~CSConGetDataOwnerStatus() -// -// ----------------------------------------------------------------------------- -// -CSConGetDataOwnerStatus::~CSConGetDataOwnerStatus() - { - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConGetDataOwnerStatus::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConGetDataOwnerStatus* CSConGetDataOwnerStatus::CopyL() - { - CSConGetDataOwnerStatus* copy = new (ELeave) CSConGetDataOwnerStatus(); - CleanupStack::PushL( copy ); - for( TInt i = 0; i < iDataOwners.Count(); i++ ) - { - copy->iDataOwners.Append( iDataOwners[i]->CopyL() ); - } - CleanupStack::Pop( copy ); - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConGetDataOwnerStatus::DeleteDataOwners() -// -// ----------------------------------------------------------------------------- -// -void CSConGetDataOwnerStatus::DeleteDataOwners() - { - iDataOwners.ResetAndDestroy(); - iDataOwners.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConSupplyData::CSConSupplyData() -// -// ----------------------------------------------------------------------------- -// -CSConSupplyData::CSConSupplyData() : iDataOwner( NULL ), iRestoreData( NULL ), - iComplete( EFalse ), iProgress( 0 ) - { - iDataOwner = new CSConDataOwner(); - } - -// ----------------------------------------------------------------------------- -// CSConSupplyData::~CSConSupplyData() -// -// ----------------------------------------------------------------------------- -// -CSConSupplyData::~CSConSupplyData() - { - if ( iDataOwner ) - { - delete iDataOwner; - iDataOwner = NULL; - } - - if ( iRestoreData ) - { - delete iRestoreData; - iRestoreData = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CSConSupplyData::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConSupplyData* CSConSupplyData::CopyL() - { - CSConSupplyData* copy = new (ELeave) CSConSupplyData(); - CleanupStack::PushL( copy ); - - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - if ( iDataOwner ) - { - if ( copy->iDataOwner ) - { - delete copy->iDataOwner; - copy->iDataOwner = NULL; - } - - copy->iDataOwner = iDataOwner->CopyL(); - } - CleanupStack::Pop( copy ); - - if ( iRestoreData ) - { - if ( copy->iRestoreData ) - { - delete copy->iRestoreData; - copy->iRestoreData = NULL; - } - - copy->iRestoreData = iRestoreData->Alloc(); - } - - copy->iMoreData = iMoreData; - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConGetMetadata::CSConGetMetadata() -// -// ----------------------------------------------------------------------------- -// -CSConGetMetadata::CSConGetMetadata() : iData( NULL ), - iMoreData( EFalse ), iComplete( EFalse ), iProgress( 0 ) - { - } - -// ----------------------------------------------------------------------------- -// CSConGetMetadata::~CSConGetMetadata() -// -// ----------------------------------------------------------------------------- -// -CSConGetMetadata::~CSConGetMetadata() - { - if ( iData ) - { - delete iData; - iData = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CSConGetMetadata::Copy() -// -// ----------------------------------------------------------------------------- -// -CSConGetMetadata* CSConGetMetadata::CopyL() - { - CSConGetMetadata* copy = new (ELeave) CSConGetMetadata(); - - copy->iFilename = iFilename; - - if ( iData ) - { - if ( copy->iData ) - { - delete copy->iData; - copy->iData = NULL; - } - - copy->iData = iData->Alloc(); - } - - copy->iMoreData = iMoreData; - copy->iComplete = iComplete; - copy->iProgress = iProgress; - - return copy; - } - - -// ----------------------------------------------------------------------------- -// CSConTask::NewL( TSConMethodName aMethod ) -// -// ----------------------------------------------------------------------------- -// -CSConTask* CSConTask::NewL( TSConMethodName aMethod ) - { - CSConTask* self = NewLC( aMethod ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConTask::NewLC( TSConMethodName aMethod ) -// -// ----------------------------------------------------------------------------- -// -CSConTask* CSConTask::NewLC( TSConMethodName aMethod ) - { - CSConTask* self = new (ELeave) CSConTask(); - CleanupStack::PushL( self ); - self->ConstructL( aMethod ); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConTask::ConstructL( TSConMethodName aMethod ) -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConTask::ConstructL( TSConMethodName aMethod ) - { - iMethod = aMethod; - - switch( aMethod ) - { - case ECancel : - break; - case EGetDataOwnerStatus : - iGetDataOwnerParams = new (ELeave) CSConGetDataOwnerStatus(); - break; - case EGetDataSize : - iGetDataSizeParams = new (ELeave) CSConGetDataSize(); - break; - case EGetStatus : - iGetStatusParams = new (ELeave) CSConGetStatus(); - break; - case EInstall : - iInstallParams = new (ELeave) CSConInstall(); - break; - case EListDataOwners : - iListDataOwnersParams = new (ELeave) CSConListDataOwners(); - break; - case EListInstalledApps : - iListAppsParams = new (ELeave) CSConListInstApps(); - break; - case EListPublicFiles : - iPubFilesParams = new (ELeave) CSConListPublicFiles(); - break; - case ERequestData : - iRequestDataParams = new (ELeave) CSConRequestData(); - break; - case ESetBURMode : - iBURModeParams = new (ELeave) CSConSetBURMode(); - break; - case ESetInstParams : - break; - case ESupplyData : - iSupplyDataParams = new (ELeave) CSConSupplyData(); - break; - case EUninstall : - iUninstallParams = new (ELeave) CSConUninstall(); - break; - case EUpdateDeviceInfo : - iDevInfoParams = new (ELeave) CSConUpdateDeviceInfo(); - break; - case EReboot : - iRebootParams = new (ELeave) CSConReboot(); - break; - case EGetMetadata : - iGetMetadataParams = new (ELeave) CSConGetMetadata(); - break; - default : - break; - } - } -// ----------------------------------------------------------------------------- -// CSConTask::CSConTask() -// -// ----------------------------------------------------------------------------- -// -CSConTask::CSConTask() - { - } - -// ----------------------------------------------------------------------------- -// CSConTask::~CSConTask() -// -// ----------------------------------------------------------------------------- -// -CSConTask::~CSConTask() - { - delete iDevInfoParams; - delete iListAppsParams; - delete iGetStatusParams; - delete iInstallParams; - delete iUninstallParams; - delete iBURModeParams; - delete iGetDataSizeParams; - delete iRequestDataParams; - delete iGetDataOwnerParams; - delete iSupplyDataParams; - delete iPubFilesParams; - delete iListDataOwnersParams; - delete iRebootParams; - delete iGetMetadataParams; - } - -// ----------------------------------------------------------------------------- -// CSConTask::GetServiceId() const -// -// ----------------------------------------------------------------------------- -// -TSConMethodName CSConTask::GetServiceId() const - { - return iMethod; - } - -// ----------------------------------------------------------------------------- -// CSConTask::Copy() const -// -// ----------------------------------------------------------------------------- -// -CSConTask* CSConTask::CopyL() const - { - CSConTask* copy = new (ELeave) CSConTask(); - copy->iMethod = iMethod; - - if ( iDevInfoParams ) - { - copy->iDevInfoParams = iDevInfoParams->CopyL(); - } - if ( iListAppsParams ) - { - copy->iListAppsParams = iListAppsParams->CopyL(); - } - if ( iGetStatusParams ) - { - - } - if ( iInstallParams ) - { - copy->iInstallParams = iInstallParams->CopyL(); - } - if ( iUninstallParams ) - { - copy->iUninstallParams = iUninstallParams->CopyL(); - } - if ( iBURModeParams ) - { - copy->iBURModeParams = iBURModeParams->CopyL(); - } - if ( iGetDataSizeParams ) - { - copy->iGetDataSizeParams = iGetDataSizeParams->CopyL(); - } - if ( iRequestDataParams ) - { - copy->iRequestDataParams = iRequestDataParams->CopyL(); - } - if ( iGetDataOwnerParams ) - { - copy->iGetDataOwnerParams = iGetDataOwnerParams->CopyL(); - } - if ( iSupplyDataParams ) - { - copy->iSupplyDataParams = iSupplyDataParams->CopyL(); - } - if ( iPubFilesParams ) - { - copy->iPubFilesParams = iPubFilesParams->CopyL(); - } - if ( iListDataOwnersParams ) - { - copy->iListDataOwnersParams = iListDataOwnersParams->CopyL(); - } - if ( iRebootParams ) - { - copy->iRebootParams = iRebootParams->CopyL(); - } - if ( iGetMetadataParams ) - { - copy->iGetMetadataParams = iGetMetadataParams->CopyL(); - } - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConTask::GetComplete() -// -// ----------------------------------------------------------------------------- -// -TBool CSConTask::GetComplete() - { - TBool complete( EFalse ); - - switch( iMethod ) - { - case EInstall : - complete = this->iInstallParams->iComplete; - break; - case EUninstall : - complete = this->iUninstallParams->iComplete; - break; - case EListInstalledApps : - complete = this->iListAppsParams->iComplete; - break; - case ESetInstParams : - break; - case ESetBURMode : - complete = this->iBURModeParams->iComplete; - break; - case EListPublicFiles : - complete = this->iPubFilesParams->iComplete; - break; - case EListDataOwners : - complete = this->iListDataOwnersParams->iComplete; - break; - case EGetDataSize : - complete = this->iGetDataSizeParams->iComplete; - break; - case EReboot : - complete = this->iRebootParams->iComplete; - break; - case ERequestData : - //If task is partially completed, - //it can be removed from the queue - if ( this->iRequestDataParams->iProgress == KSConTaskPartiallyCompleted ) - { - complete = ETrue; - } - else - { - complete = this->iRequestDataParams->iComplete; - } - - break; - case EGetDataOwnerStatus : - complete = this->iGetDataOwnerParams->iComplete; - break; - case ESupplyData : - //If task is partially completed, - //it can be removed from the queue - if ( this->iSupplyDataParams->iProgress == KSConTaskPartiallyCompleted ) - { - complete = ETrue; - } - else - { - complete = this->iSupplyDataParams->iComplete; - } - - break; - case EGetMetadata : - complete = this->iGetMetadataParams->iComplete; - break; - default : - break; - } - - return complete; - } - -// ----------------------------------------------------------------------------- -// CSConTask::SetCompleteValue( TBool aValue ) -// -// ----------------------------------------------------------------------------- -// -void CSConTask::SetCompleteValue( TBool aValue ) - { - switch( iMethod ) - { - case EInstall : - this->iInstallParams->iComplete = aValue; - break; - case EUninstall : - this->iUninstallParams->iComplete = aValue; - break; - case EListInstalledApps : - this->iListAppsParams->iComplete = aValue; - break; - case ESetInstParams : - this->iInstallParams->iComplete = aValue; - break; - case ESetBURMode : - this->iBURModeParams->iComplete = aValue; - break; - case EListPublicFiles : - this->iPubFilesParams->iComplete = aValue; - break; - case EListDataOwners : - this->iListDataOwnersParams->iComplete = aValue; - break; - case EGetDataSize : - this->iGetDataSizeParams->iComplete = aValue; - break; - case EReboot : - this->iRebootParams->iComplete = aValue; - break; - case ERequestData : - this->iRequestDataParams->iComplete = aValue; - break; - case EGetDataOwnerStatus : - this->iGetDataOwnerParams->iComplete = aValue; - break; - case ESupplyData : - this->iSupplyDataParams->iComplete = aValue; - break; - case EGetMetadata : - this->iGetMetadataParams->iComplete = aValue; - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CSConTask::GetCompleteValue() -// -// ----------------------------------------------------------------------------- -// -TBool CSConTask::GetCompleteValue() - { - TBool complete( EFalse ); - - switch( iMethod ) - { - case EInstall : - complete = this->iInstallParams->iComplete; - break; - case EUninstall : - complete = this->iUninstallParams->iComplete; - break; - case EListInstalledApps : - complete = this->iListAppsParams->iComplete; - break; - case ESetInstParams : - complete = this->iInstallParams->iComplete; - break; - case ESetBURMode : - complete = this->iBURModeParams->iComplete; - break; - case EListPublicFiles : - complete = this->iPubFilesParams->iComplete; - break; - case EListDataOwners : - complete = this->iListDataOwnersParams->iComplete; - break; - case EGetDataSize : - complete = this->iGetDataSizeParams->iComplete; - break; - case EReboot : - complete = this->iRebootParams->iComplete; - break; - case ERequestData : - if ( this->iRequestDataParams->iProgress != KSConTaskPartiallyCompleted ) - { - complete = this->iRequestDataParams->iComplete; - } - else - { - complete = ETrue; - } - - break; - case EGetDataOwnerStatus : - complete = this->iGetDataOwnerParams->iComplete; - break; - case ESupplyData : - if ( this->iSupplyDataParams->iProgress != KSConTaskPartiallyCompleted ) - { - complete = this->iSupplyDataParams->iComplete; - } - else - { - complete = ETrue; - } - break; - case EGetMetadata : - complete = this->iGetMetadataParams->iComplete; - break; - default: - break; - } - return complete; - } - -// ----------------------------------------------------------------------------- -// CSConTask::SetProgressValue( TInt aValue ) -// -// ----------------------------------------------------------------------------- -// -void CSConTask::SetProgressValue( TInt aValue ) - { - switch( iMethod ) - { - case EInstall : - this->iInstallParams->iProgress = aValue; - break; - case EUninstall : - this->iUninstallParams->iProgress = aValue; - break; - case EListInstalledApps : - this->iListAppsParams->iProgress = aValue; - break; - case ESetInstParams : - this->iInstallParams->iProgress = aValue; - break; - case ESetBURMode : - this->iBURModeParams->iProgress = aValue; - break; - case EListPublicFiles : - this->iPubFilesParams->iProgress = aValue; - break; - case EListDataOwners : - this->iListDataOwnersParams->iProgress = aValue; - break; - case EGetDataSize : - this->iGetDataSizeParams->iProgress = aValue; - break; - case EReboot : - this->iRebootParams->iProgress = aValue; - break; - case ERequestData : - this->iRequestDataParams->iProgress = aValue; - break; - case EGetDataOwnerStatus : - this->iGetDataOwnerParams->iProgress = aValue; - break; - case ESupplyData : - this->iSupplyDataParams->iProgress = aValue; - break; - case EGetMetadata : - this->iGetMetadataParams->iProgress = aValue; - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::CSConTaskReply() -// -// ----------------------------------------------------------------------------- -// -CSConTaskReply::CSConTaskReply() - { - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::CSConTaskReply( TSConMethodName aMethod ) -// -// ----------------------------------------------------------------------------- -// -CSConTaskReply::CSConTaskReply( TSConMethodName aMethod ) - { - iMethod = aMethod; - switch( aMethod ) - { - case ECancel : - break; - case EGetDataOwnerStatus : - iGetDataOwnerParams = new CSConGetDataOwnerStatus(); - break; - case EGetDataSize : - iGetDataSizeParams = new CSConGetDataSize(); - break; - case EGetStatus : - iGetStatusParams = new CSConGetStatus(); - break; - case EInstall : - iInstallParams = new CSConInstall(); - break; - case EListDataOwners : - iListDataOwnersParams = new CSConListDataOwners(); - break; - case EListInstalledApps : - iListAppsParams = new CSConListInstApps(); - break; - case EListPublicFiles : - iPubFilesParams = new CSConListPublicFiles(); - break; - case ERequestData : - iRequestDataParams = new CSConRequestData(); - break; - case ESetBURMode : - iBURModeParams = new CSConSetBURMode(); - break; - case ESetInstParams : - break; - case ESupplyData : - iSupplyDataParams = new CSConSupplyData(); - break; - case EUninstall : - iUninstallParams = new CSConUninstall(); - break; - case EUpdateDeviceInfo : - iDevInfoParams = new CSConUpdateDeviceInfo(); - break; - case EReboot : - iRebootParams = new CSConReboot(); - break; - case EGetMetadata : - iGetMetadataParams = new CSConGetMetadata(); - break; - default : - break; - } - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::~CSConTaskReply() -// -// ----------------------------------------------------------------------------- -// -CSConTaskReply::~CSConTaskReply() - { - delete iDevInfoParams; - delete iListAppsParams; - delete iGetStatusParams; - delete iInstallParams; - delete iUninstallParams; - delete iBURModeParams; - delete iGetDataSizeParams; - delete iRequestDataParams; - delete iGetDataOwnerParams; - delete iSupplyDataParams; - delete iPubFilesParams; - delete iListDataOwnersParams; - delete iRebootParams; - delete iGetMetadataParams; - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::Initialize( const CSConTask& aTask ) -// -// ----------------------------------------------------------------------------- -// -void CSConTaskReply::InitializeL( const CSConTask& aTask ) - { - iTaskId = aTask.iTaskId; - iMethod = aTask.iMethod; - - if ( iMethod == EInstall ) - { - if ( iInstallParams ) - { - delete iInstallParams; - iInstallParams = NULL; - } - iInstallParams = aTask.iInstallParams->CopyL(); - } - else if ( iMethod == EListInstalledApps ) - { - if ( iListAppsParams ) - { - delete iListAppsParams; - iListAppsParams = NULL; - } - - iListAppsParams = aTask.iListAppsParams->CopyL(); - } - else if ( iMethod == EUninstall ) - { - if ( iUninstallParams ) - { - delete iUninstallParams; - iUninstallParams = NULL; - } - - iUninstallParams = aTask.iUninstallParams->CopyL(); - } - else if ( iMethod == ESetBURMode ) - { - if ( iBURModeParams ) - { - delete iBURModeParams; - iBURModeParams = NULL; - } - - iBURModeParams = aTask.iBURModeParams->CopyL(); - } - else if ( iMethod == EListPublicFiles ) - { - if ( iPubFilesParams ) - { - delete iPubFilesParams; - iPubFilesParams = NULL; - } - - iPubFilesParams = aTask.iPubFilesParams->CopyL(); - } - else if ( iMethod == EListDataOwners ) - { - if ( iListDataOwnersParams ) - { - delete iListDataOwnersParams; - iListDataOwnersParams = NULL; - } - - iListDataOwnersParams = aTask.iListDataOwnersParams->CopyL(); - } - else if ( iMethod == EGetDataSize ) - { - if ( iGetDataSizeParams ) - { - delete iGetDataSizeParams; - iGetDataSizeParams = NULL; - } - - iGetDataSizeParams = aTask.iGetDataSizeParams->CopyL(); - } - else if ( iMethod == EReboot ) - { - if ( iRebootParams ) - { - delete iRebootParams; - iRebootParams = NULL; - } - } - else if ( iMethod == ERequestData ) - { - if ( iRequestDataParams ) - { - delete iRequestDataParams; - iRequestDataParams = NULL; - } - - iRequestDataParams = aTask.iRequestDataParams->CopyL(); - } - else if ( iMethod == EGetDataOwnerStatus ) - { - if ( iGetDataOwnerParams ) - { - delete iGetDataOwnerParams; - iGetDataOwnerParams = NULL; - } - - iGetDataOwnerParams = aTask.iGetDataOwnerParams->CopyL(); - } - else if ( iMethod == ESupplyData ) - { - if ( iSupplyDataParams ) - { - delete iSupplyDataParams; - iSupplyDataParams = NULL; - } - - iSupplyDataParams = aTask.iSupplyDataParams->CopyL(); - } - else if ( iMethod == EGetMetadata ) - { - if ( iGetMetadataParams ) - { - delete iGetMetadataParams; - iGetMetadataParams = NULL; - } - - iGetMetadataParams = aTask.iGetMetadataParams->CopyL(); - } - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::Initialize( TSConMethodName aMethod, -// TInt aProgress, TBool aComplete ) -// -// ----------------------------------------------------------------------------- -// -void CSConTaskReply::InitializeL( TSConMethodName aMethod, - TInt aProgress, TBool aComplete ) - { - iMethod = aMethod; - if ( aMethod == EUpdateDeviceInfo ) - { - if ( !iDevInfoParams ) - { - iDevInfoParams = new (ELeave) CSConUpdateDeviceInfo(); - } - - iDevInfoParams->iComplete = aComplete; - iDevInfoParams->iProgress = aProgress; - } - else if ( aMethod == EReboot ) - { - if ( !iRebootParams ) - { - iRebootParams = new (ELeave) CSConReboot(); - } - - iRebootParams->iComplete = aComplete; - iRebootParams->iProgress = aProgress; - } - else if ( aMethod == EGetMetadata ) - { - if ( !iGetMetadataParams ) - { - iGetMetadataParams = new (ELeave) CSConGetMetadata(); - } - - iGetMetadataParams->iComplete = aComplete; - iGetMetadataParams->iProgress = aProgress; - } - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::CopyAndFree() -// -// ----------------------------------------------------------------------------- -// -CSConTaskReply* CSConTaskReply::CopyAndFreeL() - { - CSConTaskReply* copy = new (ELeave) CSConTaskReply(); - copy->iTaskId = iTaskId; - copy->iMethod = iMethod; - - if ( iDevInfoParams ) - { - copy->iDevInfoParams = iDevInfoParams->CopyL(); - - //free allocated memory - delete iDevInfoParams; - iDevInfoParams = NULL; - } - if ( iListAppsParams ) - { - copy->iListAppsParams = iListAppsParams->CopyL(); - - //free allocated memory - delete iListAppsParams; - iListAppsParams = NULL; - } - if ( iInstallParams ) - { - copy->iInstallParams = iInstallParams->CopyL(); - - //free allocated memory - delete iInstallParams; - iInstallParams = NULL; - } - if ( iUninstallParams ) - { - copy->iUninstallParams = iUninstallParams->CopyL(); - - //free allocated memory - delete iUninstallParams; - iUninstallParams = NULL; - } - if ( iBURModeParams ) - { - copy->iBURModeParams = iBURModeParams->CopyL(); - - //free allocated memory - delete iBURModeParams; - iBURModeParams = NULL; - } - if ( iGetDataSizeParams ) - { - copy->iGetDataSizeParams = iGetDataSizeParams->CopyL(); - - //free allocated memory - delete iGetDataSizeParams; - iGetDataSizeParams = NULL; - } - if ( iRequestDataParams ) - { - copy->iRequestDataParams = iRequestDataParams->CopyL(); - - //free allocated memory - delete iRequestDataParams; - iRequestDataParams = NULL; - } - if ( iGetDataOwnerParams ) - { - copy->iGetDataOwnerParams = iGetDataOwnerParams->CopyL(); - - //free allocated memory - delete iGetDataOwnerParams; - iGetDataOwnerParams = NULL; - } - if ( iSupplyDataParams ) - { - copy->iSupplyDataParams = iSupplyDataParams->CopyL(); - - //free allocated memory - delete iSupplyDataParams; - iSupplyDataParams = NULL; - } - if ( iPubFilesParams ) - { - copy->iPubFilesParams = iPubFilesParams->CopyL(); - - //free allocated memory - delete iPubFilesParams; - iPubFilesParams = NULL; - } - if ( iListDataOwnersParams ) - { - copy->iListDataOwnersParams = iListDataOwnersParams->CopyL(); - - //free allocated memory - delete iListDataOwnersParams; - iListDataOwnersParams = NULL; - } - if ( iRebootParams ) - { - copy->iRebootParams = iRebootParams->CopyL(); - - //free allocated memory - delete iRebootParams; - iRebootParams = NULL; - } - if ( iGetMetadataParams ) - { - copy->iGetMetadataParams = iGetMetadataParams->CopyL(); - - //free allocated memory - delete iGetMetadataParams; - iGetMetadataParams = NULL; - } - - return copy; - } - -// ----------------------------------------------------------------------------- -// CSConTaskReply::CleanTaskData() -// -// ----------------------------------------------------------------------------- -// -void CSConTaskReply::CleanTaskData() - { - switch( iMethod ) - { - case EGetDataSize : - if ( iGetDataSizeParams ) - { - this->iGetDataSizeParams->DeleteDataOwners(); - } - break; - case EGetDataOwnerStatus : - if ( iGetDataOwnerParams ) - { - this->iGetDataOwnerParams->DeleteDataOwners(); - } - break; - case EListDataOwners : - if ( iListDataOwnersParams ) - { - this->iListDataOwnersParams->DeleteDataOwners(); - } - break; - case ERequestData : - if ( iRequestDataParams ) - { - this->iRequestDataParams->DeleteDataAndDataOwner(); - } - break; - default : - break; - } - } - -// ----------------------------------------------------------------------------- -// CSConStatusReply::CSConStatusReply() -// -// ----------------------------------------------------------------------------- -// -CSConStatusReply::CSConStatusReply() : iNoTasks( EFalse ) - { - } - -// ----------------------------------------------------------------------------- -// CSConStatusReply::~CSConStatusReply() -// -// ----------------------------------------------------------------------------- -// -CSConStatusReply::~CSConStatusReply() - { - iTasks.ResetAndDestroy(); - iTasks.Close(); - }; - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/bld.inf --- a/connectivitymodules/SeCon/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* Copyright (c) 2002-2010 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: Build info file for SeCon -* -*/ - -#include - -#include "../catalogspcconnectivityplugin/group/bld.inf" -#include "../cntparser/bld/bld.inf" -#include "../services/csc/bld/bld.inf" -#include "../services/ftp/bld/bld.inf" -#include "../services/pcd/bld/bld.inf" - -#include "../wbxml/conmlhandler/bld/bld.inf" -#include "../servers/pcconn/bld/bld.inf" -#include "../servers/syncserver/group/bld.inf" - -#include "../clients/pcconn/bld/bld.inf" -#include "../clients/syncclient/group/bld.inf" - -#include "../plugins/pcconn/bld/bld.inf" -#include "../plugins/ftp/bld/bld.inf" -#include "../plugins/hapticsconnplugin/group/bld.inf" - -PRJ_EXPORTS - -// Export stub files -stubs/secon_stub.SIS /epoc32/data/z/system/install/secon_stub.SIS -stubs/sconpcconnplugin_stub.SIS /epoc32/data/z/system/install/sconpcconnplugin_stub.SIS -stubs/sconftpplugin_stub.SIS /epoc32/data/z/system/install/sconftpplugin_stub.SIS - -../rom/sconpcd.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sconpcd.iby) -../rom/sconpcconnplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sconpcconnplugin.iby) -../rom/sconpcconnclientserver.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sconpcconnclientserver.iby) -../rom/sconftpresources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(sconftpresources.iby) -../rom/sconftpplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sconftpplugin.iby) -../rom/sconftp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sconftp.iby) -../rom/sconcsc.iby CORE_MW_LAYER_IBY_EXPORT_PATH(sconcsc.iby) -../rom/cntparser.iby CORE_MW_LAYER_IBY_EXPORT_PATH(cntparser.iby) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/createstubs.bat --- a/connectivitymodules/SeCon/group/stubs/createstubs.bat Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -rem -rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -rem All rights reserved. -rem This component and the accompanying materials are made available -rem under the terms of "Eclipse Public License v1.0" -rem which accompanies this distribution, and is available -rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -rem -rem Initial Contributors: -rem Nokia Corporation - initial contribution. -rem -rem Contributors: -rem -rem Description: Batch file for creating needed stub files. -rem - -makesis -s sconftpplugin_stub.pkg -makesis -s sconpcconnplugin_stub.pkg -makesis -s secon_stub.pkg diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/sconftpplugin_stub.SIS Binary file connectivitymodules/SeCon/group/stubs/sconftpplugin_stub.SIS has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/sconftpplugin_stub.pkg --- a/connectivitymodules/SeCon/group/stubs/sconftpplugin_stub.pkg Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -; -; Copyright (c) 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: Sis-stub file for FTP Plugin -; -; Languages -&EN - -; Header -#{"FTP Plugin"},(0x101F9686),1,0,0, TYPE=SA - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - -; Files to install -""-"z:\resource\plugins\sconftpplugin.rsc" -""-"z:\sys\bin\sconftpplugin.dll" diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/sconpcconnplugin_stub.SIS Binary file connectivitymodules/SeCon/group/stubs/sconpcconnplugin_stub.SIS has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/sconpcconnplugin_stub.pkg --- a/connectivitymodules/SeCon/group/stubs/sconpcconnplugin_stub.pkg Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -; -; Copyright (c) 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: Sis-stub file for PCConn Plugin -; -; Languages -&EN - -; Header -#{"PCConn Plugin"},(0x101F9688),1,0,0, TYPE=SA - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - -; Files to install -""-"z:\resource\plugins\sconpcconnplugin.rsc" -""-"z:\sys\bin\sconpcconnplugin.dll" diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/secon_stub.SIS Binary file connectivitymodules/SeCon/group/stubs/secon_stub.SIS has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/group/stubs/secon_stub.pkg --- a/connectivitymodules/SeCon/group/stubs/secon_stub.pkg Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -; -; Copyright (c) 2010 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: Sis-stub file for Service Controllers -; -; Languages -&EN - -; Header -#{"Service Controllers"},(0x101F99F6),1,72,0, TYPE=SA - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - -; Files to install -""-"z:\sys\bin\sconpcconnserver.exe" -""-"z:\sys\bin\sconpcconnclient.dll" -""-"z:\sys\bin\sconpcd.dll" -""-"z:\resource\sconftp.r??" -""-"z:\sys\bin\sconftp.dll" -""-"z:\sys\bin\sconcsc.dll" -""-"z:\sys\bin\sconconmlhandler.dll" -""-"z:\sys\bin\catalogspcconnectivityplugin.dll" -""-"z:\sys\bin\cntparserserver.dll" -""-"z:\sys\bin\cntparserserverexe.exe" diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/inc/debug.h --- a/connectivitymodules/SeCon/inc/debug.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* -* 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: Debug utility for SeCon components. -* -*/ - - -#ifndef _SECON_DEBUG_H -#define _SECON_DEBUG_H - -#ifdef _DEBUG - - #ifdef __WINS__ - // Enable file logging - #define __FLOGGING__ - #endif //__WINS__ - - #include - #ifdef __FLOGGING__ - #include - #include - #endif - - NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow - { - public: - void Overflow(TDes16& /*aDes*/) {} - }; - - NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow - { - public: - void Overflow(TDes8& /*aDes*/) {} - }; - - _LIT( KLogDir, "SECON" ); - _LIT( KLogFile, "SeconDebug.txt" ); - - _LIT(KTracePrefix16, "[SeCon] "); - _LIT8(KTracePrefix8, "[SeCon] "); - _LIT8(KFuncEntryFormat8, "%S : Begin"); - _LIT8(KFuncExitFormat8, "%S : End"); - _LIT8(KFuncReturnFormat8, "%S : End, return: %d"); - _LIT8(KFuncFormat8, "><%S"); - - const TInt KMaxLogLineLength = 512; - - // old function loggin macros - #define LOGGER_ENTERFN( name ) {TRACE_FUNC_ENTRY;} - #define LOGGER_LEAVEFN( name ) {TRACE_FUNC_EXIT;} - - #define LOGGER_WRITE( text ) {_LIT( KTemp, text ); FPrint( KTemp );} - #define LOGGER_WRITE_1( text,par1 ) {_LIT( KTemp, text ); FPrint( KTemp, par1 );} - #define LOGGER_WRITE8_1( text,par1 ) {_LIT8( KTemp, text ); FPrint( KTemp, par1 );} - #define LOGGER_WRITE_2( text,par1,par2 ) {_LIT( KTemp, text ); FPrint( KTemp, par1, par2 );} - #define LOGGER_WRITE_3( text,par1,par2,par3 ) {_LIT( KTemp, text ); FPrint( KTemp, par1, par2, par3 );} - - // New function logging macros - #define TRACE_FUNC_ENTRY {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncEntryFormat8, &ptr8);} - #define TRACE_FUNC_EXIT {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncExitFormat8, &ptr8);} - #define TRACE_FUNC {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncFormat8, &ptr8);} - - #define TRACE_FUNC_RET( number ) {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncReturnFormat8, &ptr8, number);} - // Declare the FPrint function - inline void FPrint( TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list,aFmt); - #ifdef __FLOGGING__ - RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list ); - #endif - TBuf16 theFinalString; - theFinalString.Append(KTracePrefix16); - TOverflowTruncate16 overflow; - theFinalString.AppendFormatList(aFmt,list,&overflow); - RDebug::Print(theFinalString); - } - - // Declare the FPrint function - inline void FPrint(TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list, aFmt); - #ifdef __FLOGGING__ - RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); - #endif - TOverflowTruncate8 overflow; - TBuf8 buf8; - buf8.Append(KTracePrefix8); - buf8.AppendFormatList(aFmt, list, &overflow); - TBuf16 buf16(buf8.Length()); - buf16.Copy(buf8); - TRefByValue tmpFmt(_L("%S")); - RDebug::Print(tmpFmt, &buf16); - } -#else - - // No loggings --> reduced code size - - #define LOGGER_ENTERFN( name ) - #define LOGGER_LEAVEFN( name ) - #define LOGGER_WRITE( text ) - #define LOGGER_WRITE_1( text, par1 ) - #define LOGGER_WRITE8_1( text, par1 ) - #define LOGGER_WRITE_2( text, par1, par2 ) - #define LOGGER_WRITE_3( text, par1, par2, par3 ) - #define TRACE_FUNC_ENTRY - #define TRACE_FUNC_EXIT - #define TRACE_FUNC - #define TRACE_FUNC_RET( number ) - -#endif //_DEBUG - -#endif // SECON_DEBUG_H - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/bld/bld.inf --- a/connectivitymodules/SeCon/plugins/ftp/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* 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: File Transfer Profile Plug-in build information file. -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -sconftpplugin.mmp diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/bld/def/bwinscwU.DEF --- a/connectivitymodules/SeCon/plugins/ftp/bld/def/bwinscwU.DEF Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/bld/def/eabiU.DEF --- a/connectivitymodules/SeCon/plugins/ftp/bld/def/eabiU.DEF Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _Z24ImplementationGroupProxyRi @ 1 NONAME - _ZTI14CSConFTPplugin @ 2 NONAME ; ## - _ZTV14CSConFTPplugin @ 3 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/bld/sconftpplugin.mmp --- a/connectivitymodules/SeCon/plugins/ftp/bld/sconftpplugin.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2002-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: File Transfer Profile Plug-in -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_ECOM_PLUGIN - -TARGET sconftpplugin.dll -TARGETTYPE PLUGIN - -UID 0x10009D8D 0x101F9686 - -SOURCEPATH ../src - -SOURCE sconftpplugin.cpp -SOURCE proxy.cpp -SOURCE sconftppluginutils.cpp -SOURCE sconservicetimer.cpp -SOURCE sconshutdownwatcher.cpp - -START RESOURCE 101f9686.rss - TARGET sconftpplugin.rsc -END - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -USERINCLUDE ../inc -USERINCLUDE ../../../inc -USERINCLUDE ../../../services/ftp/inc - -DEBUGLIBRARY flogger.lib -LIBRARY euser.lib -LIBRARY irobex.lib -LIBRARY ecom.lib -LIBRARY efsrv.lib -LIBRARY bluetooth.lib -LIBRARY esock.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/inc/sconftpplugin.h --- a/connectivitymodules/SeCon/plugins/ftp/inc/sconftpplugin.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,194 +0,0 @@ -/* -* 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: File Transfer Profile Plug-in header file -* -*/ - - -#ifndef _SCONFTPPLUGIN_H -#define _SCONFTPPLUGIN_H - -#include -#include - -#include "sconshutdownwatcher.h" - -// forward declaration -class CSConFTP; -class CSConServiceTimer; -// CLASS DECLARATION - -/* -* File Transfer Profile Plugin class -* -*/ - -class CSConFTPplugin : public CSrcsInterface, public MObexServerNotify, - public MShutdownObserver - { - public: - static CSConFTPplugin* NewL(); - ~CSConFTPplugin(); - - /** - * Returns active status of OBEX session - * @return ETrue if session is active, else EFalse - */ - TBool IsOBEXActive(); - - /** - * Device is shutting down, abort connection. - */ - void NotifyShutdown(); - - private: - /** - * Loads sconftp.dll module - * @return none - */ - void LoadFTPDllL(); - /** - * Closes initialized services - * @return none - */ - void Disconnect(); - /** - * Removes spaces and nulls from the end of the string - * @param aDes String to be formatted - * @return none - */ - void TrimRightSpaceAndNull( TDes8& aDes ) const; - /** - * Current used transfer media (IR,USB,BT) - * @param aMediaType Enumeration indicating the media type - * @return none - */ - void SetMediaType( TSrcsMediaType aMediaType ); - /** - * MObexServerNotify implementation - * @param aError Error code - * @return none - */ - void ErrorIndication( TInt aError ); - /** - * MObexServerNotify implementation - * @return none - */ - void TransportUpIndication(); - /** - * MObexServerNotify implementation - * @return none - */ - void TransportDownIndication(); - /** - * MObexServerNotify implementation - * @param aRemoteInfo Structure containing information used during OBEX - * connection - * @param aInfo Further information about the requested connection - * @return System wide error code that indicates the success of the connection - */ - TInt ObexConnectIndication( const TObexConnectInfo& aRemoteInfo, - const TDesC8& aInfo ); - /** - * MObexServerNotify implementation - * @param aInfo Contains information about the disconnection - * @return none - */ - void ObexDisconnectIndication( const TDesC8& aInfo ); - /** - * MObexServerNotify implementation - * @return CObexBaseObject-derived object, which the object being put - * will be parsed into. - */ - CObexBufObject* PutRequestIndication(); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * PUT packet operation. - */ - TInt PutPacketIndication(); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * PUT packet operation. - */ - TInt PutCompleteIndication(); - /** - * MObexServerNotify implementation - * @param aRequiredObject Details about the object the remote client - * has requested - * @returnObject to return to the client - */ - CObexBufObject* GetRequestIndication( CObexBaseObject - *aRequiredObject ); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * GET packet operation. - */ - TInt GetPacketIndication(); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * GET packet operation. - */ - TInt GetCompleteIndication(); - /** - * MObexServerNotify implementation - * @param aPathInfo SETPATH command parameters - * @param aInfo Not currently used - * @return System wide error code indicating the success of the - * setpath command. - */ - TInt SetPathIndication( const CObex::TSetPathInfo& aPathInfo, - const TDesC8& aInfo ); - /** - * SetObexServer - * @param aObexServer pass obex server pointer to sevice controller - * @return System wide error code. - */ - TInt SetObexServer( CObexServer* aObexServer ); - /** - * MObexServerNotify implementation - * @return none - */ - void AbortIndication(); - - void ConstructL(); - CSConFTPplugin(); - - private: - RLibrary iFTPlib; - CObexBufObject* iObject; - CBufFlat* iBuffer; - CSConFTP* iFTPHandler; - TInt iPutError; - TBool iSessionActive; - CSConServiceTimer* iServiceTimer; - TBool iStartTimer; - TSrcsMediaType iMediaType; - CObexFileObject* iFileObject; - TBool iPutPacketIndicationCalled; - CShutdownWatcher* iShutdownWatcher; - TBool iShutdownInProgress; - CObexServer* iObexServer; - RSocketServ iSocketServer; - RBTPhysicalLinkAdapter iLinkAdapter; - private: - // Friend class is used,because existing impelentation has been working - // properly. Avoiding re-design. - friend class CSConServiceTimer; - }; - -#endif // SCONPCCONNPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/inc/sconftppluginutils.h --- a/connectivitymodules/SeCon/plugins/ftp/inc/sconftppluginutils.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: File Transfer Profile Plug-in Utils header -* -*/ - - -#ifndef _SCONFTPPLUGINUTILS_H -#define _SCONFTPPLUGINUTILS_H - -#include -//============================================================ -// Class TFTPpluginUtils declaration -//============================================================ -class TFTPpluginUtils - { - public: - /** - * Converts Symbian error code to OBEX error code - * @param aError The error code - * @return The converted error code - */ - static TInt ConvertFTPResponseCode( TInt aError ); - }; - -#endif // _SCONFTPPLUGINUTILS_H \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/inc/sconservicetimer.h --- a/connectivitymodules/SeCon/plugins/ftp/inc/sconservicetimer.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: File Transfer Profile Plug-in Service Timer Header file -* -*/ - - -#ifndef _SCONSERVICETIMER_H -#define _SCONSERVICETIMER_H - -#include - -class CSConFTPplugin; - - -//============================================================ -// Class CSConServiceTimer declaration -//============================================================ - -NONSHARABLE_CLASS ( CSConServiceTimer ) : public CActive - { - public: - CSConServiceTimer( CSConFTPplugin* aEngine, TInt aValue ); - void ConstructL(); - ~CSConServiceTimer(); - - /** - * Starts the timer - * @return none - */ - void StartTimer(); - /** - * Stops the timer - * @return none - */ - void StopTimer(); - - private: - void DoCancel(); - void RunL(); - - private: - RTimer iTimer; - CSConFTPplugin* iEngine; - TInt iValue; - }; - -#endif //_SCONSERVICETIMER_H - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/inc/sconshutdownwatcher.h --- a/connectivitymodules/SeCon/plugins/ftp/inc/sconshutdownwatcher.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* -* Copyright (c) 2007 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: Power shutdown -watcher header file -* -*/ - - -#ifndef _SCONSHUTDOWNWATCHER_H -#define _SCONSHUTDOWNWATCHER_H - - -#include -#include - -//============================================================ -// Class MShutdownObserver declaration -//============================================================ -class MShutdownObserver - { -public: - virtual void NotifyShutdown()=0; - }; - -//============================================================ -// Class CShutdownWatcher declaration -//============================================================ -NONSHARABLE_CLASS ( CShutdownWatcher ) : public CActive - { - public: - static CShutdownWatcher* NewL( MShutdownObserver* aObserver ); - ~CShutdownWatcher(); - - /** - * Starts to watch shutdown status - * @return none - */ - void StartShutdownWatcher(); - - private: - //construct/destruct - CShutdownWatcher( MShutdownObserver* aObserver ); - void ConstructL(); - - // from CActive - void DoCancel(); - void RunL(); - - private: - MShutdownObserver* iObserver; - RProperty iProperty; - }; - -#endif //_SCONSHUTDOWNWATCHER_H - -// End of file \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/src/101f9686.rss --- a/connectivitymodules/SeCon/plugins/ftp/src/101f9686.rss Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: File Transfer Profile Plug-in resource file -* -*/ - - -#include "ecom/registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x101F9686; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x101F7C8C; - implementations = - { - // Info for CSConFTPplugin - IMPLEMENTATION_INFO - { - implementation_uid = 0x101F9687; - version_no = 1; - display_name = "OBEX File Transfer"; - default_data = "OBEX/BT"; - - // - // opaque_data contains parameters used by following API calls in SRCS: - // 1. Setup USB interface string descriptor in Unicode; - // 2. TInt CObex::SetLocalWho(const TDesC8& aInfo); - // 3. TInt CBTConnection::RegisterSecuritySettingsL( TUint aService, - // TInt aProtocol, - // TInt aChannel, - // TBool aAuthenticate, - // TBool aAuthorise, - // TBool aEncrypt ); - // opaque_data = "@0||@1||@2||@3||@4||@5||@6" - // @0 aStrDesc e.g. "OBEX File Transfer" - // @1 aInfo e.g. KFolderBrowsingID, "\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09" - // @2 aService e.g. KBTSecurityUidFileTransfer, 0x1106 - // @3 aProtocol e.g. KSolBtRFCOMM, 0x1013 - // @4 aAuthenticate e.g. EFalse, 0 - // @5 aAuthorise e.g. EFalse, 0 - // @6 aEncrypt e.g. EFalse, 0 - // - opaque_data = "OBEX File Transfer||\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09||0x1106||0x1013||1||1||1"; - } - }; - } - }; - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/src/proxy.cpp --- a/connectivitymodules/SeCon/plugins/ftp/src/proxy.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: File Transfer Profile Plug-in proxy implementation -* -*/ - - -// INCLUDE FILES - -#include -#include - -#include "sconftpplugin.h" - -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(0x101F9687, CSConFTPplugin::NewL) - }; - -// ----------------------------------------------------------------------------- -// TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) -// Exported proxy for instantiation method resolution -// ----------------------------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( - TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - - return ImplementationTable; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/src/sconftpplugin.cpp --- a/connectivitymodules/SeCon/plugins/ftp/src/sconftpplugin.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,880 +0,0 @@ -/* -* 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: File Transfer Profile Plug-in implementation -* -*/ - - -// INCLUDE FILES - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include "sconftpplugin.h" -#include "sconftp.h" -#include "sconftppluginutils.h" -#include "sconservicetimer.h" -#include "debug.h" - - -// CONSTANTS -_LIT(KSConFTPLibName, "sconftp.dll"); -const TInt KSConFTPUidValue = 0x10009D8D; -const TUid KSConFTPUid = {KSConFTPUidValue}; - -// Folder listing type from IrObex specification -_LIT8( KSConFolderListType, "x-obex/folder-listing" ); - -_LIT( K_C_ROOT, "C:\\" ); -const TInt KSConBufSize = 262144; // 256KB -// Time (in milliseconds) for the timer -const TInt KSConTimeOutValue = 60000000; -// Flags used to indicate SetPath commands -const TInt KSConNULLSetPath = 0x00; - -const TInt KSConHeaderMaxLength = 256; - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConFTPplugin* CSConFTPplugin::NewL() - { - TRACE_FUNC_ENTRY; - CSConFTPplugin* self = new ( ELeave ) CSConFTPplugin(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return( self ); - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::~CSConFTPplugin() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConFTPplugin::~CSConFTPplugin() - { - TRACE_FUNC_ENTRY; - - // Disconnect from services. - Disconnect(); - - if ( iFTPHandler ) - { - delete iFTPHandler; - iFTPHandler = NULL; - iFTPlib.Close(); - } - - delete iBuffer; - iBuffer = NULL; - delete iObject; - iObject = NULL; - - if ( iServiceTimer ) - { - iServiceTimer->Cancel(); - } - - delete iServiceTimer; - iServiceTimer = NULL; - - if ( iFileObject ) - { - delete iFileObject; - iFileObject = NULL; - } - - - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::IsOBEXActive() -// Returns active status of OBEX session -// ----------------------------------------------------------------------------- -// -TBool CSConFTPplugin::IsOBEXActive() - { - TRACE_FUNC; - return iSessionActive; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::NotifyShutdown() -// System is shutting down -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::NotifyShutdown() - { - TRACE_FUNC; - iShutdownInProgress = ETrue; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::LoadFTPDllL() -// Loads sconftp.dll module -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::LoadFTPDllL() - { - TRACE_FUNC_ENTRY; - // Dynamically load DLL - User::LeaveIfError( iFTPlib.Load( KSConFTPLibName ) ); - if ( iFTPlib.Type()[1] != KSConFTPUid ) - { - LOGGER_WRITE( "KSConFTPUidValue incorrect" ); - iFTPlib.Close(); - User::Leave( KErrNotFound ); - } - TSConCreateCSConFTPFunc CreateCSConFTPL = - (TSConCreateCSConFTPFunc)iFTPlib.Lookup(1); - iFTPHandler = (CSConFTP*)CreateCSConFTPL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::Disconnect() -// Closes initialized services -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::Disconnect() - { - TRACE_FUNC_ENTRY; - - iLinkAdapter.Close(); - iSocketServer.Close(); - - if ( iStartTimer != EFalse ) - { - iServiceTimer->Cancel(); - iServiceTimer->StartTimer(); - } - - delete iObject; - iObject = NULL; - - if ( iFileObject ) - { - delete iFileObject; - iFileObject = NULL; - } - if ( iFTPHandler ) - { - delete iFTPHandler; - iFTPHandler = NULL; - iFTPlib.Close(); - } - - TRACE_FUNC_EXIT - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::ErrorIndication( TInt aError ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::ErrorIndication( TInt aError ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aError : %d", aError ); - - if ( iFTPHandler ) - { - iFTPHandler->AbortFileTransfer( iObject ); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - if ( iFileObject ) - { - iFileObject->Reset(); - delete iFileObject; - iFileObject = NULL; - } - - // Keep compiler happy - (void)aError; - - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err2 = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err2 ); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::AbortIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::AbortIndication() - { - TRACE_FUNC_ENTRY; - if ( iFTPHandler ) - { - iFTPHandler->AbortFileTransfer( iObject ); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - if ( iFileObject ) - { - iFileObject->Reset(); - delete iFileObject; - iFileObject = NULL; - } - - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::TransportUpIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::TransportUpIndication() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::ObexConnectIndication( const TObexConnectInfo& aRemoteInfo, -// const TDesC8& aInfo ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::ObexConnectIndication( - const TObexConnectInfo& /*aRemoteInfo*/, - const TDesC8& /*aInfo*/ ) - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - iStartTimer = ETrue; - - if ( iMediaType == ESrcsMediaBT && iObexServer ) - { - TSockAddr remoteAddr; - iObexServer->RemoteAddr( remoteAddr ); - - TBTSockAddr btSockAddr( remoteAddr ); - TBTDevAddr devAddr = btSockAddr.BTAddr(); - - err = iSocketServer.Connect(); - LOGGER_WRITE_1("iSocketServer.Connect err: %d", err ); - if ( !err ) - { - err = iLinkAdapter.Open( iSocketServer, devAddr ); - LOGGER_WRITE_1("iLinkAdapter.Open err: %d", err ); - } - // Ignore all BT link errors - err = KErrNone; - } - - if ( err == KErrNone && !iFTPHandler ) - { - TRAP( err, LoadFTPDllL() ); - LOGGER_WRITE_1( "LoadFTPDllL returned : %d", err ); - } - - if ( err == KErrNone ) - { - iFTPHandler->SetProfile( EStandard ); - LOGGER_WRITE( "CSConFTPplugin::ObexConnectIndication() : iServiceTimer->StopTimer()" ); - iServiceTimer->Cancel(); - iServiceTimer->StopTimer(); - } - - TRACE_FUNC_EXIT; - LOGGER_WRITE_1( "CSConFTPplugin::ObexConnectIndication returned %d", err ); - return TFTPpluginUtils::ConvertFTPResponseCode( err ); - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::ObexDisconnectIndication( const TDesC8& ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::ObexDisconnectIndication( const TDesC8& ) - { - TRACE_FUNC_ENTRY; - Disconnect(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::TransportDownIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::TransportDownIndication() - { - TRACE_FUNC_ENTRY; - Disconnect(); - if ( iBuffer ) - { - iBuffer->Reset(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::PutRequestIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -CObexBufObject* CSConFTPplugin::PutRequestIndication() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt err( KErrNone ); - iPutError = KErrNone; - - if ( iBuffer ) - { - iBuffer->Reset(); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - TRAP( err, iObject = CObexBufObject::NewL ( iBuffer ) ); - - if ( err != KErrNone ) - { - return NULL; - } - - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - return NULL; - } - - TRAP( err, ret = iFTPHandler->PutFileObjectInitL( iObject, iBuffer ) ); - - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "iFTPHandler->PutFileObjectInitL() leaves: %d", err ); - return NULL; - } - if ( ret != KErrNone ) - { - LOGGER_WRITE_1( "PutFileObjectInitL failed - returning error in next PutPacketIndication : %d", ret ); - iPutError = ret; - } - iPutPacketIndicationCalled = EFalse; - - if ( !iShutdownWatcher ) - { - TRAP( err, iShutdownWatcher = CShutdownWatcher::NewL( this ) ); - if ( err == KErrNone ) - { - iShutdownWatcher->StartShutdownWatcher(); - } - else - { - LOGGER_WRITE_1( "CShutdownWatcher::NewL leaves: %d", err ); - } - } - - if ( iLinkAdapter.IsOpen() ) - { - // request active BT mode (high power mode) - err = iLinkAdapter.ActivateActiveRequester(); - LOGGER_WRITE_1( "iLinkAdapter.ActivateActiveRequester() err: %d", err ); - } - - TRACE_FUNC_EXIT; - return( iObject ); - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::PutPacketIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::PutPacketIndication() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - // always normal file transfer - if ( (TInt)iObject->Length() > 0 ) - { - if ( !iPutPacketIndicationCalled ) - { - // This is first check, need to check only once - TFileName path; - iFTPHandler->GetPath( path ); - if ( path.CompareF( K_C_ROOT ) == 0 ) - { - // path forbidden - ret = KErrAccessDenied; - } - else - { - if ( iPutError != KErrNone ) - { - ret = iPutError; - LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication() : PutError : %d", iPutError ); - } - else - { - // check required free space - // if filesize is small ( <65k ) it fits into one package and its already saved to filesystem. - // if file is larger, need to check is there enought free space in device. - - const TUint32 filesize = iObject->Length(); - LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication() filesize %d", filesize ); - LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication() iObject->BytesReceived() %d", iObject->BytesReceived() ); - if ( filesize > iObject->BytesReceived() ) - { - LOGGER_WRITE( "CSConFTPplugin::PutPacketIndication() : check freespace" ); - // file does not fit into one obex packet, check is there enought free space in current drive - if ( iFTPHandler->IsCurrentDiskSpaceBelowCritical( filesize ) ) - { - LOGGER_WRITE( "CSConFTPplugin::PutPacketIndication() : returning KErrNoMemory" ); - ret = KErrNoMemory; - } - } - } - } - } - - if ( iShutdownInProgress ) - { - LOGGER_WRITE( "ShutdownInProgress, abort" ); - ret = KErrDisconnected; - } - } - - if ( !iPutPacketIndicationCalled ) - { - // Need to check only once - iPutPacketIndicationCalled = ETrue; - - //Check if filename is too long. - TFileName path; - iFTPHandler->GetPath( path ); - if ( ret == KErrNone && path.Length() + iObject->Name().Length() > KMaxFileName ) - { - LOGGER_WRITE_1( "Name length overflow! : %d", path.Length() + iObject->Name().Length() ); - ret = KErrBadName; - } - } - - if ( ret != KErrNone ) - { - if ( iFTPHandler ) - { - iFTPHandler->AbortFileTransfer( iObject ); - } - - delete iObject; - iObject = NULL; - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - } - - LOGGER_WRITE_1( "CSConFTPplugin::PutPacketIndication returned: %d", ret ); - return TFTPpluginUtils::ConvertFTPResponseCode( ret ); - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::PutCompleteIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::PutCompleteIndication() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt err( KErrNone ); - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err2 = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err2 ); - } - - TObexHeaderMask validHdrs = iObject->ValidHeaders(); - TTime time = iObject->Time(); - - // shutdownWatcher is not needed anymore - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - TInt size = iObject->BytesReceived(); - - if (!(validHdrs & KObexHdrTime)) - { - LOGGER_WRITE( "CSConFTPplugin::PutCompleteIndication() no valid time header received - using hometime" ); - time.HomeTime(); - TRAP( ret, iObject->SetTimeL(time) ); - LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication SetTimeL %d", ret ); - } - - if ( ( validHdrs & KObexHdrBody ) || ( validHdrs & KObexHdrEndOfBody ) ) - { - LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : number of received bytes %d", size ); - TSConUsedMedia media( ESConNoMedia ); - - switch ( iMediaType ) - { - case ESrcsMediaBT: - media = ESConBTMedia; - break; - case ESrcsMediaIrDA: - media = ESConIRMedia; - break; - case ESrcsMediaUSB: - media = ESConUSBMedia; - break; - default: - media = ESConNoMedia; - break; - } - iFTPHandler->SetUsedMedia( media ); - - TRAP( ret, err = - this->iFTPHandler->PutFileObjectFinalizeL( iObject ) ); - LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication :PutFileObjectL %d", ret ); - } - else - { - LOGGER_WRITE( "CSConFTPplugin::PutCompleteIndication() : Delete starts" ); - TRAP( ret, err = this->iFTPHandler->DeleteObjectL( iObject->Name() ) ); - LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : DeleteObjectL %d", ret ); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - iFTPHandler->DeleteTempFile(); - - if ( ret != KErrNone ) - { - LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : returned %d", ret ); - return TFTPpluginUtils::ConvertFTPResponseCode( ret ); - } - - LOGGER_WRITE_1( "CSConFTPplugin::PutCompleteIndication : returned %d", err ); - return TFTPpluginUtils::ConvertFTPResponseCode( err ); - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::GetRequestIndication( CObexBaseObject* aRequiredObject ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -CObexBufObject* CSConFTPplugin::GetRequestIndication( - CObexBaseObject* aRequiredObject ) - { - TRACE_FUNC_ENTRY; - CObexBufObject* bufObject(NULL); - if ( aRequiredObject->Type().Length() > KSConHeaderMaxLength ) - { - LOGGER_WRITE("TypeHeader too big"); - return NULL; - } - if ( aRequiredObject->Name().Length() > KMaxFileName ) - { - LOGGER_WRITE("NameHeader is too long"); - return NULL; - } - TInt ret( KErrNone ); - TInt err( KErrNone ); - TBuf8 typeHeader( aRequiredObject->Type() ); - TrimRightSpaceAndNull( typeHeader ); - LOGGER_WRITE8_1("type: %S", &typeHeader); - LOGGER_WRITE_1("name: %S", &aRequiredObject->Name()); - - iBuffer->Reset(); - - delete iObject; - iObject = NULL; - - TRAP( err, iObject = CObexBufObject::NewL ( iBuffer ) ); - if ( err != KErrNone ) - { - return NULL; - } - - // Client requests folder listing - if ( typeHeader == KSConFolderListType ) - { - LOGGER_WRITE( "Client requests folder listning" ); - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - return NULL; - } - - TRAP( err, ret = iFTPHandler->GetFolderObjectL( iObject ) ); - LOGGER_WRITE_1( "iFTPHandler->GetFolderObjectL() returned: %d", ret ); - if ( err == KErrNone && ret == KErrNone ) - { - bufObject = iObject; - } - else - { - LOGGER_WRITE_1( "CSConFTPplugin::GetRequestIndication : Leavecode returned %d", err ); - return NULL; - } - } - - // Client requests a file - else - { - if ( iFileObject ) - { - delete iFileObject; - iFileObject = NULL; - } - - TRAP( err, iFileObject = CObexFileObject::NewL() ); - if ( err != KErrNone ) - { - LOGGER_WRITE( "Creating iFileObject has failed" ); - return NULL; - } - iFileObject->Reset(); - TRAP( err, iFileObject->SetNameL( aRequiredObject->Name() ) ); - - if ( err == KErrNone ) - { - if ( !iFTPHandler ) - { - LOGGER_WRITE( "CSConFTPplugin::GetRequestIndication() Creating iFTPHandler has failed" ); - return NULL; - } - - TRAP( err, ret = - this->iFTPHandler->GetFileObjectL( iFileObject ) ); - LOGGER_WRITE_1( "CSConFTPplugin::GetRequestIndication : GetFileObjectL returned %d", ret ); - } - if ( err == KErrNone && ret == KErrNone ) - { - bufObject = (CObexBufObject*)iFileObject; - } - else - { - LOGGER_WRITE_1( "CSConFTPplugin::GetRequestIndication : Leavecode %d", err ); - return NULL; - } - } - if ( bufObject && iLinkAdapter.IsOpen() ) - { - // request active BT mode (high power mode) - err = iLinkAdapter.ActivateActiveRequester(); - LOGGER_WRITE_1( "iLinkAdapter.ActivateActiveRequester() err: %d", err ); - } - return bufObject; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::GetPacketIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::GetPacketIndication() - { - TRACE_FUNC; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::GetCompleteIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::GetCompleteIndication() - { - TRACE_FUNC_ENTRY; - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - - TInt ret( KErrNone ); - if ( iFileObject ) - { - iFileObject->Reset(); - delete iFileObject; - iFileObject = NULL; - } - - LOGGER_WRITE_1( "CSConFTPplugin::GetCompleteIndication() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, -// const TDesC8& aInfo ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, - const TDesC8& /*aInfo*/ ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt err( KErrNone ); - - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - return TFTPpluginUtils::ConvertFTPResponseCode( KErrNoMemory ); - } - - if ( aPathInfo.iFlags == KSConNULLSetPath ) - { - TRAP( err, ret = this->iFTPHandler->CreateFolderL( aPathInfo.iName ) ); - } - else - { - TRAP( err, ret = this->iFTPHandler->SetPathL( aPathInfo.iName, - aPathInfo.iFlags ) ); - } - - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "CSConFTPplugin::SetPathIndication : returned %d", err ); - return TFTPpluginUtils::ConvertFTPResponseCode( err ); - } - LOGGER_WRITE_1( "CSConFTPplugin::SetPathIndication : returned %d", ret ); - return TFTPpluginUtils::ConvertFTPResponseCode( ret ); - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::TrimRightSpaceAndNull( TDes8& aDes ) const -// Removes spaces and nulls from the end of the string -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::TrimRightSpaceAndNull( TDes8& aDes ) const - { - TRACE_FUNC; - aDes.TrimRight(); - if ( aDes.Length() > 0 ) - { - if ( !aDes[aDes.Length() - 1] ) - { - aDes.SetLength( aDes.Length() - 1 ); - } - } - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::SetMediaType ( TSrcsMediaType aMediaType ) -// Current used transfer media (IR,USB,BT) -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::SetMediaType ( TSrcsMediaType aMediaType ) - { - TRACE_FUNC; - iMediaType = aMediaType; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::CSConFTPplugin() -// Constructor -// ----------------------------------------------------------------------------- -// -CSConFTPplugin::CSConFTPplugin() - { - TRACE_FUNC; - iBuffer = NULL; - iObject = NULL; - iFileObject = NULL; - iSessionActive = EFalse; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConFTPplugin::ConstructL() - { - TRACE_FUNC_ENTRY; - iBuffer = CBufFlat::NewL( KSConBufSize ); - iObject = CObexBufObject::NewL ( iBuffer ); - iServiceTimer = new (ELeave) CSConServiceTimer( this, KSConTimeOutValue ); - iServiceTimer->ConstructL(); - CActiveScheduler::Add( iServiceTimer ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTPplugin::SetObexServer( CObexServer* aObexServer ) -// SetObexServer -// ----------------------------------------------------------------------------- -// -TInt CSConFTPplugin::SetObexServer( CObexServer* aObexServer ) - { - iObexServer = aObexServer; - TInt ret = iObexServer->Start(this); - LOGGER_WRITE_1( "CSConFTPplugin::SetObexServer() ret: %d", ret ); - return ret; - } - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/src/sconftppluginutils.cpp --- a/connectivitymodules/SeCon/plugins/ftp/src/sconftppluginutils.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: File Transfer Profile Plug-in utilities -* -*/ - - -// INCLUDE FILES -#include -#include "sconftppluginutils.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// TFTPpluginUtils::ConvertFTPResponseCode( TInt aError ) -// Converts Symbian error code to OBEX error code -// ----------------------------------------------------------------------------- -// -TInt TFTPpluginUtils::ConvertFTPResponseCode( TInt aError ) - { - LOGGER_WRITE_1( "TFTPpluginUtils::ConvertFTPResponseCode : begin Code %d", aError ); - TInt obexErr ( KErrIrObexRespBadRequest ); - switch( aError ) - { - case KErrNone: - obexErr = KErrNone; - break; - case KErrNotFound: - obexErr = KErrIrObexRespNotFound; - break; - case KErrGeneral: - case KErrCancel: - obexErr = KErrIrObexRespBadRequest; - break; - case KErrNoMemory: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrNotSupported: - obexErr = KErrIrObexRespNotImplemented; - break; - case KErrArgument: - case KErrTotalLossOfPrecision: - case KErrBadHandle: - case KErrOverflow: - case KErrUnderflow: - case KErrAlreadyExists: - obexErr = KErrIrObexRespConflict; - break; - case KErrPathNotFound: - case KErrDied: - obexErr = KErrIrObexRespNotFound; - break; - case KErrInUse: - obexErr = KErrIrObexRespTimedOut; - break; - case KErrServerTerminated: - obexErr = KErrIrObexRespNotFound; - break; - case KErrServerBusy: - case KErrCompletion: - case KErrNotReady: - case KErrUnknown: - case KErrCorrupt: - obexErr = KErrIrObexRespForbidden; - break; - case KErrAccessDenied: - case KErrLocked: - obexErr = KErrIrObexRespUnauthorized; - break; - case KErrWrite: - case KErrDisMounted: - case KErrEof: - obexErr = KErrIrObexRespForbidden; - break; - case KErrDiskFull: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrBadDriver: - case KErrBadName: - obexErr = KErrIrObexRespPreCondFailed; - break; - case KErrCommsLineFail: - case KErrCommsFrame: - case KErrCommsOverrun: - case KErrCommsParity: - case KErrTimedOut: - case KErrCouldNotConnect: - case KErrCouldNotDisconnect: - case KErrBadLibraryEntryPoint: - case KErrBadDescriptor: - case KErrAbort: - obexErr = KErrIrObexRespForbidden; - break; - case KErrTooBig: - obexErr = KErrIrObexRespReqEntityTooLarge; - break; - case KErrDivideByZero: - case KErrBadPower: - case KErrDirFull: - case KErrHardwareNotAvailable: - obexErr = KErrIrObexRespForbidden; - break; - case KErrDisconnected: // System is shutting down - obexErr = KErrIrObexRespMethodNotAllowed; - break; - default: - obexErr = KErrIrObexRespBadRequest; - break; - }; - LOGGER_WRITE_1( "TFTPpluginUtils::ConvertFTPResponseCode : returned %d", obexErr ); - return obexErr; -}; - -//End of file - - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/src/sconservicetimer.cpp --- a/connectivitymodules/SeCon/plugins/ftp/src/sconservicetimer.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: File Transfer Profile Plug-in Service Timer implementation -* -*/ - - -// INCLUDE FILES - -#include "sconservicetimer.h" -#include "sconftpplugin.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::CSConServiceTimer( CSConFTPplugin* aEngine, TInt aValue ) -// Constuctor -// ----------------------------------------------------------------------------- -// -CSConServiceTimer::CSConServiceTimer( CSConFTPplugin* aEngine, TInt aValue ) - : CActive( EPriorityStandard ), iEngine( aEngine ), iValue( aValue ) {} - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::ConstructL() - { - LOGGER_ENTERFN( "CSConServiceTimer::ConstructL()" ); - // create a thread-relative timer - User::LeaveIfError( iTimer.CreateLocal() ); - LOGGER_LEAVEFN( "CSConServiceTimer::ConstructL()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::~CSConServiceTimer() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConServiceTimer::~CSConServiceTimer() - { - LOGGER_ENTERFN( "CSConServiceTimer::~CSConServiceTimer()" ); - iTimer.Close(); - LOGGER_LEAVEFN( "CSConServiceTimer::~CSConServiceTimer()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::~CSConServiceTimer() -// Starts the timer -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::StartTimer() - { - LOGGER_ENTERFN( "CSConServiceTimer::StartTimer()" ); - if( !IsActive() ) - { - LOGGER_WRITE( "CSConServiceTimer::StartTimer() : !IsActive()" ); - iTimer.After( iStatus, TTimeIntervalMicroSeconds32( iValue ) ); - iEngine->iSessionActive = ETrue; - SetActive(); - LOGGER_WRITE( "CSConServiceTimer::StartTimer() : SetActive()" ); - } - LOGGER_LEAVEFN( "CSConServiceTimer::StartTimer()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::StopTimer() -// StopTimer() -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::StopTimer() - { - LOGGER_ENTERFN( "CSConServiceTimer::StopTimer()" ); - iEngine->iSessionActive = ETrue; - LOGGER_WRITE( "CSConServiceTimer::StopTimer() : iSessionActive = ETrue" ); - LOGGER_LEAVEFN( "CSConServiceTimer::StopTimer()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::DoCancel() -// Cancels the timer -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::DoCancel() - { - LOGGER_ENTERFN( "CSConServiceTimer::DoCancel()" ); - iTimer.Cancel(); - LOGGER_LEAVEFN( "CSConServiceTimer::DoCancel()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::RunL() -// Executed when timer is triggered -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::RunL() - { - LOGGER_ENTERFN( "CSConServiceTimer::RunL()" ); - iEngine->iSessionActive = EFalse; - LOGGER_WRITE( "CSConServiceTimer::RunL() : iSessionActive = EFalse" ); - iEngine->iStartTimer = EFalse; - LOGGER_WRITE( "CSConServiceTimer::RunL() : iStartTimer = EFalse " ); - LOGGER_LEAVEFN( "CSConServiceTimer::RunL()" ); - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/ftp/src/sconshutdownwatcher.cpp --- a/connectivitymodules/SeCon/plugins/ftp/src/sconshutdownwatcher.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* Copyright (c) 2007 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: Power shutdown -watcher implementation -* -*/ - - -// INCLUDE FILES - -#include "sconshutdownwatcher.h" -#include "debug.h" - -#include - - - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::NewL( MShutdownObserver* aObserver ) -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CShutdownWatcher* CShutdownWatcher::NewL( MShutdownObserver* aObserver ) - { - LOGGER_ENTERFN( "CShutdownWatcher::NewL()" ); - CShutdownWatcher* self = new (ELeave) CShutdownWatcher( aObserver ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - LOGGER_LEAVEFN( "CShutdownWatcher::NewL()" ); - return self; - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::~CShutdownWatcher() -// Destructor -// ----------------------------------------------------------------------------- -// -CShutdownWatcher::~CShutdownWatcher() - { - LOGGER_ENTERFN( "CShutdownWatcher::~CShutdownWatcher()" ); - Cancel(); - iProperty.Close(); - LOGGER_LEAVEFN( "CShutdownWatcher::~CShutdownWatcher()" ); - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::StartShutdownWatcher() -// Starts to watch shutdown status -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::StartShutdownWatcher() - { - LOGGER_ENTERFN( "CShutdownWatcher::StartShutdownWatcher()" ); - TInt status; - TInt err = iProperty.Get( KPSUidStartup, KPSGlobalSystemState, status ); - LOGGER_WRITE_2( "CShutdownWatcher::StartShutdownWatcher() :\ - err %d, KPSGlobalSystemState status %d", err, status); - if ( err == KErrNone ) - { - if ( status == ESwStateShuttingDown ) - { - LOGGER_WRITE( "Call NotifyShutdown" ); - iObserver->NotifyShutdown(); - return; - } - } - - err = iProperty.Attach( KPSUidStartup, KPSGlobalSystemState ); - LOGGER_WRITE_1( "CShutdownWatcher::StartShutdownWatcher() :\ - iProperty.Attach( KPSUidStartup, KPSGlobalSystemState ) : err %d", err ); - iProperty.Subscribe( iStatus ); - LOGGER_WRITE( "CShutdownWatcher::StartShutdownWatcher() :\ - iProperty.Subscribe( iStatus ) : ok" ); - SetActive(); - - LOGGER_LEAVEFN( "CShutdownWatcher::StartShutdownWatcher()" ); - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::DoCancel() -// Executed when CActive is canceled. -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::DoCancel() - { - LOGGER_ENTERFN( "CShutdownWatcher::DoCancel()" ); - iProperty.Cancel(); - LOGGER_LEAVEFN( "CShutdownWatcher::DoCancel()" ); - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::RunL() -// Executed when disk watcher is triggered -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::RunL() - { - LOGGER_ENTERFN( "CShutdownWatcher::RunL()" ); - TInt status; - iProperty.Get( status ); - LOGGER_WRITE_1( "CShutdownWatcher::RunL() : status %d", status ); - - if ( status == ESwStateShuttingDown ) - { - LOGGER_WRITE( "Call NotifyShutdown" ); - iObserver->NotifyShutdown(); - return; - } - - iProperty.Cancel(); - iProperty.Close(); - - LOGGER_LEAVEFN( "CShutdownWatcher::RunL()" ); - } - - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::CShutdownWatcher( MShutdownObserver* aObserver ) -// Default constructor -// ----------------------------------------------------------------------------- -// -CShutdownWatcher::CShutdownWatcher( MShutdownObserver* aObserver ) -: CActive(EPriorityStandard), - iObserver(aObserver) - { - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::ConstructL() - { - LOGGER_ENTERFN( "CShutdownWatcher::ConstructL()" ); - CActiveScheduler::Add(this); - LOGGER_LEAVEFN( "CShutdownWatcher::ConstructL()" ); - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/data/2001FE54.rss --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/data/2001FE54.rss Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2001 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: Plugin info file. -* -*/ - - -#include "ecom/registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x2001FE54; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x101F7C8C; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = 0x2001FE53; - version_no = 1; - display_name = "Haptics Bridge"; - default_data = "OBEX/USB||OBEX/BT"; - // - // opaque_data contains parameters used by following API calls in SRCS: - // 1. Setup USB interface string descriptor in Unicode; - // 2. TInt CObex::SetLocalWho(const TDesC8& aInfo); - // 3. TInt CBTConnection::RegisterSecuritySettingsL( TUint aService, - // TInt aProtocol, - // TInt aChannel, - // TBool aAuthenticate, - // TBool aAuthorise, - // TBool aEncrypt ); - // opaque_data = "@0||@1||@2||@3||@4||@5||@6" - // @0 aStrDesc e.g. "PC Connectivity" - // @1 aInfo e.g. KFolderBrowsingID, "\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09" - // @2 aService e.g. KBTSecurityUidFileTransfer, 0x1106 - // @3 aProtocol e.g. KSolBtRFCOMM, 0x1013 - // @4 aAuthenticate e.g. EFalse, 0 - // @5 aAuthorise e.g. EFalse, 0 - // @6 aEncrypt e.g. EFalse, 0 - // - opaque_data = "Haptics Bridge|"\ - "|\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09|"\ - "|0x2001E2B5|"\ - "|0x1013|"\ - "|0|"\ - "|1|"\ - "|0|"\ - "|0xffff|"\ - "|0xffff"; - } - }; - } - }; - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/group/bld.inf --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 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: Haptics connection plugin build file. -* -*/ - -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../rom/hapticsconnplugin.iby CORE_IBY_EXPORT_PATH(mw, hapticsconnplugin.iby) - -PRJ_MMPFILES -hapticsconnplugin.mmp - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/group/hapticsconnplugin.mmp --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/group/hapticsconnplugin.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 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: Haptics connection plugin project definition file. -* -*/ - - -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_ECOM_PLUGIN - -TARGET hapticsconnplugin.dll -TARGETTYPE PLUGIN - -UID 0x10009D8D 0x2001FE54 - -SOURCEPATH ../src - -SOURCE hapticsconnplugin.cpp -SOURCE hapticsconntimer.cpp -SOURCE hapticsmsghandler.cpp -SOURCE hapticsbridgeclient.cpp -SOURCE proxy.cpp - -SOURCEPATH ../data - -START RESOURCE 2001FE54.rss - TARGET hapticsconnplugin.rsc -END - -MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE /epoc32/include/stdapis - -USERINCLUDE ../inc - -LIBRARY flogger.lib -LIBRARY euser.lib -LIBRARY ecom.lib -LIBRARY efsrv.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY platformenv.lib -LIBRARY irobex.lib -LIBRARY hwrmhapticspacketizer.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsbridgeclient.h --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsbridgeclient.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -/* -* Copyright (c) 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: Client interface to haptics server for haptics bridge -* commands. -* -*/ - - -#ifndef C_HAPTICSBRIDGECLIENT_H -#define C_HAPTICSBRIDGECLIENT_H - -#include - -class CHWRMHapticsPacketizer; - -class RHapticsBridgeClient : public RSessionBase -{ -public: - /** - * Constructor - */ - RHapticsBridgeClient(); - - /** - * Destructor - */ - virtual ~RHapticsBridgeClient(); - -public: - /** - * Create a connection to haptics server. - */ - TInt Connect(); - - /** - * Close the connection to haptics server. - */ - void Close(); - - /** - * Send message to haptics server. - * @param aReqData Data request to be sent to haptics server. - * @param aRetDataPckg Returned data from haptics server. - * @return KErrNone if sent succesfully, otherwise system wide error code. - */ - TInt SendBridgeBuffer( const TDesC8& aReqData, TDes8& aRetDataPckg ); - - /** - * Sends a message clean-up commend to haptics server. - */ - void CleanUp(); - - -private: - - /** - * Returns the version of the haptics server. - * @return Version. - */ - TVersion ServerVersion() const; - - /** - * Starts the server process if it is not already running. - * @return KErrNone on success, otherwise a system error code. - */ - TInt StartServer() const; - - /** - * Handles the device opening request. - * @param aResponse Reference to a descriptor containing the response - * received from haptics server. - */ - void HandleOpenDeviceResponseL( const TDesC8& aResponse ); - - /** - * Opens the haptic effect ("vibra") device. - * @return KErrNone on success, otherwise a system error code. - */ - TInt OpenHapticsDevice(); - -private: - - /** - * Haptic packetizer. - * Owned. - */ - CHWRMHapticsPacketizer* iPacketizer; -}; - -#endif // C_HAPTICSBRIDGECLIENT_H \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsconnplugin.h --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsconnplugin.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* -* Copyright (c) 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: Haptics OBEX connection plugin. -* -*/ - - -#ifndef C_HAPTICSCONNPLUGIN_H -#define C_HAPTICSCONNPLUGIN_H - -#include -#include - -class CHapticsMsgHandler; - -class CHapticsConnPlugin : public CSrcsInterface - { - public: - /** - * 2-phased constructor. - */ - static CHapticsConnPlugin* NewL(); - - /** - * Destructor. - */ - virtual ~CHapticsConnPlugin(); - - /** - * From CSrcsInterface. - * @see CSrcsInterface. - */ - TBool IsOBEXActive(); - - private: - /** - * 2nd phase constructor. - */ - void ConstructL(); - - /** - * Constructor. - */ - CHapticsConnPlugin(); - - private: - /** - * Component to handle messages between file systen and - * haptics server. - * Own. - */ - CHapticsMsgHandler* iMsgHandler; - }; - -#endif // C_HAPTICSCONNPLUGIN_H \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsconntimer.h --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsconntimer.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 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: Connection shutdown timer for haptics server connection. -* -*/ - - -#ifndef C_HAPTICSCONNTIMER_H -#define C_HAPTICSCONNTIMER_H - -#include - -#include "hapticsmsghandler.h" - -NONSHARABLE_CLASS ( CHapticsConnTimer ) : public CTimer - { - public: - /** - * 2-phased constructor. - */ - static CHapticsConnTimer* NewL( MHapticsConnectionShutdown* aCallback ); - - /** - * Destructor. - */ - virtual ~CHapticsConnTimer(); - - /** - * Starts the timer - */ - void Start(); - - private: // From CActive. - /** - * Notifies client on timeout. - */ - void RunL(); - - private: - /** - * Constructor. - */ - CHapticsConnTimer( MHapticsConnectionShutdown* aCallback ); - - /** - * 2nd phase constructor. - */ - void ConstructL(); - - private: - /** - * Callback interface to notify about timeout. - * Not own. - */ - MHapticsConnectionShutdown* iCallback; - }; - -#endif // C_HAPTICSCONNTIMER_H - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsconntrace.h --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsconntrace.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* -* Copyright (c) 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: Haptics conn plugin debug trace macro definition header file. -* -*/ -#ifndef HAPTICSCONNTRACE_H -#define HAPTICSCONNTRACE_H - -#include -#include -#include -#include -#include - -/** - * Writes formatted string data to a file using RFileLogger. - * - * @param aFmt Value-referenced descriptor containing the formatted string. - */ -inline void HwrmWriteFormat( TRefByValue aFmt, ... ) - { - _LIT( KDir, "Hwrm" ); - _LIT( KName, "Hwres.log" ); - - // take the ellipsis parameters - VA_LIST args; - VA_START( args, aFmt ); - RFileLogger::WriteFormat( KDir, KName, EFileLoggingModeAppend, aFmt, args ); - VA_END( args ); - } - -/** - * Writes data dump in hex format in "[ 00 01 FF ]" style. - * - * @param aPrefix Descriptor containing the string to be appended in - * front of the actual data dump. - * @param aData An 8-bit descriptor containing the data buffer for which - * the data dump is written. - */ -inline void DataDumpTrace( const TDesC& aPrefix, const TDesC8& aData ) - { - _LIT( KSATraceDataDumpStart, " [ " ); - _LIT( KSATraceDataDumpLineAlign, " " ); - _LIT( KSATraceDataDumpStop, " ] " ); - _LIT( KSATraceDataDumpValue, "%02x " ); - const TInt KSASDataDumpTraceBytesPerLine = 10; - - HBufC* buffer = HBufC::New( 255 ); - - if ( buffer != NULL ) - { - buffer->Des().Copy( aPrefix ); - buffer->Des().Append( KSATraceDataDumpStart ); - for ( TInt i = 0; i < aData.Length(); i++) - { - buffer->Des().AppendFormat( KSATraceDataDumpValue, aData[i] ); - - if( ( i % KSASDataDumpTraceBytesPerLine == ( KSASDataDumpTraceBytesPerLine - 1 ) ) && - ( i + 1 < aData.Length() ) ) - { - RDebug::Print( buffer->Des() ); - - buffer->Des().Copy( aPrefix); - buffer->Des().Append( KSATraceDataDumpLineAlign ); - } - } - buffer->Des().Append( KSATraceDataDumpStop ); - - RDebug::Print( buffer->Des() ); - - } - - delete buffer; - } - -#ifdef _DEBUG - - #ifdef USE_FILE_LOGGING - - #define COMPONENT_TRACE( a ) HwrmWriteFormat a - #define API_TRACE( a ) HwrmWriteFormat a - #define DATADUMP_TRACE( a, b ) - - #else - - #define COMPONENT_TRACE( a ) RDebug::Print a - #define API_TRACE( a ) RDebug::Print a - #define DATADUMP_TRACE( a, b ) DataDumpTrace( a, b ) - - #endif // #ifdef USE_FILE_LOGGING - -#else // #ifdef _DEBUG - - #define COMPONENT_TRACE( a ) - #define API_TRACE( a ) - #define DATADUMP_TRACE( a, b ) - -#endif //#ifdef _DEBUG -#endif //#ifndef HAPTICSCONNTRACE_H - - -// End of File diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsmsghandler.h --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/inc/hapticsmsghandler.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/* -* Copyright (c) 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: Handles messaging between file system and haptics -* client interface. -* -*/ - - -#ifndef C_HAPTICSMSGHANDLER_H -#define C_HAPTICSMSGHANDLER_H - -#include -#include -#include - -#include "hapticsbridgeclient.h" - -class CHapticsConnTimer; - -/** - * Interface to notify about connection timeout. - */ -class MHapticsConnectionShutdown - { - public: - /** - * Called to notify about connection timeout. - */ - virtual void NotifyShutdown() = 0; - - }; - -/** - * Helper class for Bridge functionality for handling RFs (File Session) - * change notifications for VibeTonz request file. - * - * @since S60 5.1 - */ -class CHapticsMsgHandler : public CActive, - public MHapticsConnectionShutdown - { -public: - /** - * 2-phased constructor. - */ - static CHapticsMsgHandler* NewL(); - - /** - * Destructor - */ - virtual ~CHapticsMsgHandler(); - - /** - * Method for starting the listening for change notifications - */ - void StartNotifier(); - - /** - * From MHapticsConnectionShutdown. - * Called to notify about connection timeout. - */ - void NotifyShutdown(); - -protected: // From CActive. - /** - * @see CActive - */ - void RunL(); - /** - * @see CActive - */ - TInt RunError(TInt aError); - /** - * @see CActive - */ - void DoCancel(); - -private: - - /** - * Constructor - */ - CHapticsMsgHandler(); - - /** - * Two-phase construction ConstructL - */ - void ConstructL(); - - /** - * Method for connecting to file system. Also sets the paths and - * creates directories (if not already exists). - */ - void ConnectToFilesystemL(); - - /** - * Helper for clearing the possible left-over request file from - * previous runs. - */ - void ClearRequestFile(); - -private: // data - - /** - * File server session through which all file server related - * services are requested. - */ - RFs iFs; - - /** - * Buffer for the request file data - */ - HBufC8* iReqBuf; - - /** - * The RHapticsBridgeClient object that is responsible for further - * handling of received Bridge commands - */ - RHapticsBridgeClient iClient; - - CHapticsConnTimer* iConnectionTimeout; - - }; - -#endif // C_HAPTICSMSGHANDLER_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/rom/hapticsconnplugin.iby --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/rom/hapticsconnplugin.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 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: IBY file for Haptics conn plugin. -* -*/ - - -#ifndef HAPTICSCONNPLUGIN_IBY -#define HAPTICSCONNPLUGIN_IBY - -#include - -ECOM_PLUGIN(hapticsconnplugin.dll,hapticsconnplugin.rsc) - -#endif // HAPTICSCONNPLUGIN_IBY diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsbridgeclient.cpp --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsbridgeclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,317 +0,0 @@ -/* -* Copyright (c) 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: Client interface to haptics server for haptics bridge -* commands. -* -*/ - - -#include -#include -#include // KDC_PROGRAMS_DIR -#include -#include -#include - -#include "hapticsbridgeclient.h" -#include "hapticsconntrace.h" - -const TInt KServerVersionMajor = 1; -const TInt KServerVersionMinor = 1; -const TInt KServerVersionBuild = 1; -_LIT( KServerProcessName, "!hwrmhapticsserver" ); -_LIT( KServerExeName, "hwrmhapticsserver.exe" ); -const TInt KAsyncMsgSlots = 10; - -const TInt KHWRMHapticsServiceCommand = 2001; -const TInt KHWRMHapticsOpenActuatorCommand = 2004; -const TInt KHWRMHapticsCleanupCommand = 2008; -const TInt KHWRMHapticsBridgeCommand = 2011; - -// -------------------------------------------------------------------------- -// Simple constructor -// -// -------------------------------------------------------------------------- -// -RHapticsBridgeClient::RHapticsBridgeClient() - { - TRAP_IGNORE( iPacketizer = - CHWRMHapticsPacketizer::NewL( EHWRMLogicalActuatorAny ) ); - } - -// -------------------------------------------------------------------------- -// Simple destructor -// -// -------------------------------------------------------------------------- -// -RHapticsBridgeClient::~RHapticsBridgeClient() - { - delete iPacketizer; - } - -// -------------------------------------------------------------------------- -// Method for connecting (creating a new session) with Haptics Server -// -// -------------------------------------------------------------------------- -// -TInt RHapticsBridgeClient::Connect() - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::Connect()" ) ) ); - TInt ret = CreateSession( KServerProcessName, - ServerVersion(), - KAsyncMsgSlots ); - if ( ret != KErrNone ) - { - ret = StartServer(); - if ( ret == KErrNone ) - { - ret = CreateSession( KServerProcessName, - ServerVersion(), - KAsyncMsgSlots ); - COMPONENT_TRACE(_L("RHapticsBridgeClient::Connect(), Session created")); - } - } - - // Initialize server components. - if ( ret == KErrNone ) - { - ret = SendReceive( KHWRMHapticsServiceCommand ); - } - - // Open the haptic effect ("vibra") device. - if ( ret == KErrNone ) - { - ret = OpenHapticsDevice(); - } - - - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::Connect - return(%d)" ), ret ) ); - return ret; - } - -// -------------------------------------------------------------------------- -// Method for starting Haptics Server (if not already running) -// -// -------------------------------------------------------------------------- -// -TInt RHapticsBridgeClient::StartServer() const - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::StartServer()" ) ) ); - - TParse parser; - parser.Set( KServerExeName, &KDC_PROGRAMS_DIR, NULL ); - - RProcess server; - TInt ret = server.Create( parser.FullName(), KNullDesC ); - - if ( ret != KErrNone ) // Loading failed. - { - return ret; - } - - TRequestStatus status; - server.Rendezvous( status ); - - if ( status != KRequestPending ) - { - server.Kill( 0 ); // Abort startup. - server.Close(); - return KErrGeneral; - } - else - { - server.Resume(); // Logon OK - start the server. - } - - User::WaitForRequest( status ); - server.Close(); - - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::StartServer() - return %d" ), status.Int() ) ); - return status.Int(); - } - -// -------------------------------------------------------------------------- -// Method for closing session to haptics server. -// -// -------------------------------------------------------------------------- -// -void RHapticsBridgeClient::Close() - { - RSessionBase::Close(); - } - -// -------------------------------------------------------------------------- -// Getter method for server version. -// -// -------------------------------------------------------------------------- -// -TVersion RHapticsBridgeClient::ServerVersion() const - { - return TVersion( KServerVersionMajor, - KServerVersionMinor, - KServerVersionBuild ); - } - -// -------------------------------------------------------------------------- -// Method for sending commands to Haptics Server. -// -// -------------------------------------------------------------------------- -// -TInt RHapticsBridgeClient::SendBridgeBuffer( const TDesC8& aReqData, TDes8& aRetDataPckg ) - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::SendBridgeBufferL() - Begin" ) ) ); - - TInt retVal( KErrDisconnected ); - if ( iHandle ) - { - TInt vibeStatus(0); - TPckg vibeStatusPckg( vibeStatus ); - retVal = SendReceive( KHWRMHapticsBridgeCommand, - TIpcArgs( &aReqData, - &vibeStatusPckg, - &aRetDataPckg ) ); - - if ( retVal == KErrNone ) - { - TRAP( retVal, HandleOpenDeviceResponseL( aRetDataPckg ) ); - } - } - - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::SendBridgeBufferL() - End (%d)" ), retVal ) ); - return retVal; - } - -// -------------------------------------------------------------------------- -// Method for cleaning up session to Haptics Server. -// -// -------------------------------------------------------------------------- -// -void RHapticsBridgeClient::CleanUp() - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::CleanUp() - Begin" ) ) ); - if ( iHandle ) - { - SendReceive ( KHWRMHapticsCleanupCommand ); - } - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::CleanUp() - End" ) ) ); - } - -// -------------------------------------------------------------------------- -// Method for handling Open Device responses (basically for requesting the -// setting of the license key). -// -// -------------------------------------------------------------------------- -// -void RHapticsBridgeClient::HandleOpenDeviceResponseL( const TDesC8& aResponse ) - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::HandleOpenDeviceResponse() - Begin" ) ) ); - TInt err( KErrNone ); - if ( !iPacketizer ) - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::HandleOpenDeviceResponse() - No Packetizer!" ) ) ); - User::Leave( KErrGeneral ); - } - else - { - const TUint8* pRsp ( aResponse.Ptr() ); - if ( 0x12 == pRsp[0] && 0x00 == pRsp[1] && 0x00 == pRsp[2] ) - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::HandleOpenDeviceResponse() - OPEN DEVICE RESPONSE handling" ) ) ); - iPacketizer->DecodeMessageL( aResponse, err ); - if ( !err ) - { - RBuf8 reqBuf; - err = iPacketizer->EncSetPlatformLicenseKeyReq( - iPacketizer->DeviceHandle(), reqBuf ); - if ( !err ) - { - TBuf8<50> dummyRetBuf; - TInt dummyStatus; - TPckg dummyStatusPckg( dummyStatus ); - err = SendReceive( KHWRMHapticsBridgeCommand, - TIpcArgs ( &reqBuf, - &dummyStatusPckg, - &dummyRetBuf ) ); - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::HandleOpenDeviceResponse() - Sent set license command (%d)"), err ) ); - } - reqBuf.Close(); - } - User::LeaveIfError( err ); - } - } - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::HandleOpenDeviceResponse() - End" ) ) ); - } - - -// -------------------------------------------------------------------------- -// Method for opening haptics device. This is needed since there's possibility -// that no other haptics client has opened the device prior to this bridge -// connectivity. This method also call set license key, i.e., completes the -// device opening. -// -// -------------------------------------------------------------------------- -// -TInt RHapticsBridgeClient::OpenHapticsDevice() - { - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - Begin" ) ) ); - TInt err( KErrGeneral ); - if ( iPacketizer ) - { - RBuf8 openDevReqBuf; - RBuf8 setLicenseReqBuf; - TBuf8<50> setLicenseRspBuf; - TInt dummyStatus; - TPckg dummyStatusPckg( dummyStatus ); - - err = iPacketizer->EncOpenDeviceReq( EHWRMLogicalActuatorAny, - openDevReqBuf ); - - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - EncOpenDevice (%d)" ), err ) ); - if ( !err ) - { - TInt deviceHandle; - TPckg deviceHandlePckg( deviceHandle ); - err = SendReceive( KHWRMHapticsOpenActuatorCommand, - TIpcArgs ( &openDevReqBuf, - &deviceHandlePckg, - EHWRMLogicalActuatorAny ) ); - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - Send OpenDevice (%d)" ), err ) ); - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - Device handle = %d" ), deviceHandle ) ); - if ( !err ) - { - err = iPacketizer->EncSetPlatformLicenseKeyReq( - deviceHandle, setLicenseReqBuf ); - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - EncSetEmptyLicenseKey (%d)" ), err ) ); - if ( !err ) - { - TBuf8<50> dummyRspBuf; - TInt dummyStatus; - TPckg dummyStatusPckg( dummyStatus ); - err = SendReceive( KHWRMHapticsBridgeCommand, - TIpcArgs ( &setLicenseReqBuf, - &dummyStatusPckg, - &dummyRspBuf ) ); - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - Send SetLicense (%d)" ), err ) ); - } - } - } - - openDevReqBuf.Close(); - setLicenseReqBuf.Close(); - } - COMPONENT_TRACE( ( _L( "RHapticsBridgeClient::OpenHapticsDevice - End (err=%d)" ),err ) ); - return err; - } - -// eof diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsconnplugin.cpp --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsconnplugin.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* Copyright (c) 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: Haptics OBEX connection plugin. -* -*/ - - -#include "hapticsconnplugin.h" -#include "hapticsmsghandler.h" -#include "hapticsconntrace.h" - -// ----------------------------------------------------------------------------- -// CHapticsConnPlugin::NewL() -// Two-phase constructing -// ----------------------------------------------------------------------------- -// -CHapticsConnPlugin* CHapticsConnPlugin::NewL() - { - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::NewL - Begin" ) ) ); - CHapticsConnPlugin* self = new ( ELeave ) CHapticsConnPlugin(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::NewL - End" ) ) ); - return( self ); - } - -// ----------------------------------------------------------------------------- -// CHapticsConnPlugin::ConstructL() -// -// ----------------------------------------------------------------------------- -// -void CHapticsConnPlugin::ConstructL() - { - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::ConstructL() - Begin" ) ) ); - iMsgHandler = CHapticsMsgHandler::NewL(); - iMsgHandler->StartNotifier(); - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::ConstructL() - End" ))); - } - -// ----------------------------------------------------------------------------- -// CHapticsConnPlugin::~CHapticsConnPlugin() -// Destructor -// ----------------------------------------------------------------------------- -// -CHapticsConnPlugin::~CHapticsConnPlugin() - { - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::~CHapticsConnPlugin() - Begin" ) ) ); - delete iMsgHandler; - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::~CHapticsConnPlugin() - End" ) ) ); - } - -// ----------------------------------------------------------------------------- -// CHapticsConnPlugin::CHapticsConnPlugin() -// Constructor -// ----------------------------------------------------------------------------- -// -CHapticsConnPlugin::CHapticsConnPlugin() - { - } - -// ----------------------------------------------------------------------------- -// CHapticsConnPlugin::IsOBEXActive() -// -// ----------------------------------------------------------------------------- -// -TBool CHapticsConnPlugin::IsOBEXActive() - { - COMPONENT_TRACE( ( _L( "CHapticsConnPlugin::IsOBEXActive" ) )); - return ETrue; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsconntimer.cpp --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsconntimer.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* Copyright (c) 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: Connection shutdown timer for haptics server connection. -* -*/ - - -#include "hapticsconntimer.h" - -const TInt KHapticsConnectionTimeout = 30000000; // 30 sec. - -// --------------------------------------------------------------------------- -// Two phased constructor. -// --------------------------------------------------------------------------- -// -CHapticsConnTimer* CHapticsConnTimer::NewL( MHapticsConnectionShutdown* aCallback ) - { - CHapticsConnTimer* self = new ( ELeave ) CHapticsConnTimer(aCallback); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CHapticsConnTimer::~CHapticsConnTimer() - { - } - -// --------------------------------------------------------------------------- -// Activates this timer. -// --------------------------------------------------------------------------- -// -void CHapticsConnTimer::Start() - { - After( KHapticsConnectionTimeout ); - } - -// --------------------------------------------------------------------------- -// Constructor of the shutdown timer. -// --------------------------------------------------------------------------- -// -CHapticsConnTimer::CHapticsConnTimer( MHapticsConnectionShutdown* aCallback ) - : CTimer( EPriorityStandard ), iCallback(aCallback) - { - CActiveScheduler::Add( this ); - } - -// --------------------------------------------------------------------------- -// Second phase construction. -// --------------------------------------------------------------------------- -// -void CHapticsConnTimer::ConstructL() - { - CTimer::ConstructL(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CHapticsConnTimer::RunL() - { - iCallback->NotifyShutdown(); - } - -// End of File diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsmsghandler.cpp --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/src/hapticsmsghandler.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,255 +0,0 @@ -/* -* Copyright (c) 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: Handles messaging between file system and haptics -* client interface. -* -*/ - - -#include -#include -#include -#include - -#include "hapticsmsghandler.h" -#include "hapticsconntimer.h" -#include "hapticsconntrace.h" - -_LIT( KVibeTonzFolder,"VibeTonz\\" ); -_LIT( KSourceFileName,"VibeTonzDataReq" ); -_LIT( KTargetFileName,"VibeTonzDataRsp" ); - -// --------------------------------------------------------------------------- -// CHapticsMsgHandler* CHapticsMsgHandler::NewL() -// --------------------------------------------------------------------------- -// -CHapticsMsgHandler* CHapticsMsgHandler::NewL() - { - CHapticsMsgHandler* self = new (ELeave) CHapticsMsgHandler(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Default C++ constructor -// --------------------------------------------------------------------------- -// -CHapticsMsgHandler::CHapticsMsgHandler () : CActive( EPriorityStandard ) - { - } - -// --------------------------------------------------------------------------- -// void CHapticsMsgHandler::ConstructL() -// --------------------------------------------------------------------------- -// -void CHapticsMsgHandler::ConstructL() - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::ConstructL - Begin") ) ); - CActiveScheduler::Add( this ); - ConnectToFilesystemL(); - iConnectionTimeout = CHapticsConnTimer::NewL(this); - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::ConstructL - End") ) ); - } - -// --------------------------------------------------------------------------- -// CHapticsMsgHandler::~CHapticsMsgHandler() -// --------------------------------------------------------------------------- -// -CHapticsMsgHandler::~CHapticsMsgHandler() - { - Cancel(); - - if ( iConnectionTimeout ) - { - iConnectionTimeout->Cancel(); - delete iConnectionTimeout; - } - - delete iReqBuf; - - iClient.Close(); - iFs.Close(); - } - -// --------------------------------------------------------------------------- -// void ClearRequestFile() -// --------------------------------------------------------------------------- -// -void CHapticsMsgHandler::ClearRequestFile() - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::ClearRequestFile - Begin") ) ); - - TFindFile findDataFile( iFs ); - - TFileName sourcefile = PathInfo::PhoneMemoryRootPath(); - sourcefile.Append( PathInfo::OthersPath() ); - sourcefile.Append( KVibeTonzFolder ); - sourcefile.Append( KSourceFileName ); - - if( findDataFile.FindByDir( sourcefile, KNullDesC ) == KErrNone ) - { - COMPONENT_TRACE( _L("CHapticsMsgHandler::ClearRequestFile - Deleting REQ file") ); - iFs.Delete( KSourceFileName ); - } - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::ClearRequestFile - End") ) ); - } -// --------------------------------------------------------------------------- -// void ConnectToFilesystem() -// --------------------------------------------------------------------------- -// -void CHapticsMsgHandler::ConnectToFilesystemL() - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::ConnectToFilesystemL - Begin") ) ); - User::LeaveIfError( iFs.Connect() ); - - TFileName sessionPath = PathInfo::PhoneMemoryRootPath(); - sessionPath.Append( PathInfo::OthersPath() ); - sessionPath.Append( KVibeTonzFolder ); - TBool folderExists = BaflUtils::FolderExists( iFs, sessionPath ); - - if( folderExists ) - { - User::LeaveIfError( iFs.SetSessionPath( sessionPath ) ); - ClearRequestFile(); - } - else - { - User::LeaveIfError( iFs.MkDir( sessionPath ) ); - User::LeaveIfError( iFs.SetSessionPath( sessionPath ) ); - } - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::ConnectToFilesystemL - End") ) ); - } - -// --------------------------------------------------------------------------- -// CHapticsMsgHandler::StartNotifier() -// --------------------------------------------------------------------------- -// -void CHapticsMsgHandler::StartNotifier() - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::StartNotifier - Begin" ) ) ); - if ( !IsActive() ) - { - TFileName sessionPath = PathInfo::PhoneMemoryRootPath(); - sessionPath.Append( PathInfo::OthersPath() ); - sessionPath.Append( KVibeTonzFolder ); - iFs.NotifyChange( ENotifyAll, iStatus, sessionPath ); - SetActive(); - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::StartNotifier - Started" ) ) ); - } - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::StartNotifier - End" ) ) ); - } - -// --------------------------------------------------------------------------- -// CHapticsMsgHandler::RunL() -// --------------------------------------------------------------------------- -// -void CHapticsMsgHandler::RunL() - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::RunL - Begin" ) ) ); - - StartNotifier(); // re-subscribe for change notifications. - - TFindFile findDataFile(iFs); - TFileName sourcefileName = PathInfo::PhoneMemoryRootPath(); - sourcefileName.Append( PathInfo::OthersPath() ); - sourcefileName.Append( KVibeTonzFolder ); - sourcefileName.Append( KSourceFileName ); - - if( findDataFile.FindByDir( sourcefileName, KNullDesC ) == KErrNone ) - { - COMPONENT_TRACE( ( _L("CHapticsMsgHandler::RunL - found request file") ) ); - - RFile sourceFile; - TInt sourceFileSize; - - User::LeaveIfError( sourceFile.Open( iFs, sourcefileName, EFileShareAny ) ); - CleanupClosePushL( sourceFile ); - sourceFile.Size( sourceFileSize ); - - iReqBuf = HBufC8::NewL( sourceFileSize ); - TPtr8 reqBufPtr = iReqBuf->Des(); - sourceFile.Read( reqBufPtr ); - CleanupStack::PopAndDestroy( &sourceFile ); - - ClearRequestFile(); - - DATADUMP_TRACE( _L("CHapticsMsgHandler::RunL - request data dump:"), reqBufPtr ); - - if ( !iClient.Handle() ) - { - User::LeaveIfError( iClient.Connect() ); - } - - TBuf8<256> retData; - TInt bridgeErr = iClient.SendBridgeBuffer( reqBufPtr, retData ); - - delete iReqBuf; - iReqBuf = NULL; - - if ( bridgeErr == KErrNone ) - { - iConnectionTimeout->Cancel(); - iConnectionTimeout->Start(); - - DATADUMP_TRACE( _L("CHapticsMsgHandler::RunL - response data dump:"), retData ); - RFile targetFile; - targetFile.Replace( iFs, KTargetFileName, EFileWrite ); - targetFile.Write( retData ); - targetFile.Close(); - } - } - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::RunL - End" ) ) ); - } - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -TInt CHapticsMsgHandler::RunError( TInt aError ) - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::RunError: %d" ), aError ) ); - return aError; - } - -// ----------------------------------------------------------------------------- -// -// -// ----------------------------------------------------------------------------- -// -void CHapticsMsgHandler::DoCancel() - { - COMPONENT_TRACE( ( _L( "Inside CHapticsMsgHandler::DoCancel" ) ) ); - if ( IsActive() ) - { - iFs.NotifyChangeCancel( iStatus ); - } - } - -// ----------------------------------------------------------------------------- -// CHapticsConnPlugin::CHapticsConnPlugin() -// Constructor -// ----------------------------------------------------------------------------- -// -void CHapticsMsgHandler::NotifyShutdown() - { - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::NotifyShutdown - Begin" ) ) ); - iClient.CleanUp(); - iClient.Close(); - COMPONENT_TRACE( ( _L( "CHapticsMsgHandler::NotifyShutdown - End" ) ) ); - } - -// end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/hapticsconnplugin/src/proxy.cpp --- a/connectivitymodules/SeCon/plugins/hapticsconnplugin/src/proxy.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 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: Implementation proxy for haptics connection plugin. -* -*/ - - -#include -#include - -#include "hapticsconnplugin.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY( 0x2001FE53, CHapticsConnPlugin::NewL ) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - - return ImplementationTable; - } - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/bld/bld.inf --- a/connectivitymodules/SeCon/plugins/pcconn/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in build information file. -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -sconpcconnplugin.mmp diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/plugins/pcconn/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/bld/def/eabiu.def --- a/connectivitymodules/SeCon/plugins/pcconn/bld/def/eabiu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _Z24ImplementationGroupProxyRi @ 1 NONAME - _ZTI17CSConPCConnplugin @ 2 NONAME ; ## - _ZTV17CSConPCConnplugin @ 3 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/bld/sconpcconnplugin.mmp --- a/connectivitymodules/SeCon/plugins/pcconn/bld/sconpcconnplugin.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* 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: PC Connectivity Plug-in MMP file -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_ECOM_PLUGIN - -TARGET sconpcconnplugin.dll -TARGETTYPE PLUGIN - -UID 0x10009D8D 0x101F9688 - -SOURCEPATH ../src - -SOURCE sconpcconnplugin.cpp -SOURCE proxy.cpp -SOURCE sconpcconnpluginutils.cpp -SOURCE sconservicetimer.cpp -SOURCE sconshutdownwatcher.cpp - -START RESOURCE 101f9688.rss - TARGET sconpcconnplugin.rsc -END - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -USERINCLUDE ../inc -USERINCLUDE ../../../inc -USERINCLUDE ../../../clients/pcconn/inc -USERINCLUDE ../../../servers/pcconn/inc -USERINCLUDE ../../../services/ftp/inc -USERINCLUDE ../../../catalogspcconnectivityplugin/inc - -DEBUGLIBRARY flogger.lib -LIBRARY sconpcconnclient.lib -LIBRARY euser.lib -LIBRARY irobex.lib -LIBRARY ecom.lib -LIBRARY efsrv.lib -LIBRARY bafl.lib -LIBRARY catalogspcconnectivityplugin.lib -LIBRARY apmime.lib -LIBRARY bluetooth.lib -LIBRARY esock.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/inc/sconpcconnplugin.h --- a/connectivitymodules/SeCon/plugins/pcconn/inc/sconpcconnplugin.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -/* -* 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: PC Connectivity plugin header file -* -*/ - -#ifndef _SCONPCCONNPLUGIN_H -#define _SCONPCCONNPLUGIN_H - -#include -#include -#include - -#include "sconpcconnclient.h" -#include "sconshutdownwatcher.h" - -// forward declaration -class CSConFTP; -class CSConServiceTimer; -class CCatalogsPCConnectivityPlugin; - - - -class CSConPCConnplugin : public CSrcsInterface, public MObexServerNotify, - public MShutdownObserver - { - public: - static CSConPCConnplugin* NewL(); - virtual ~CSConPCConnplugin(); - - /** - * Returns active status of OBEX session - * @return ETrue if session is active, else EFalse - */ - TBool IsOBEXActive(); - - /** - * Device is shutting down, abort connection. - */ - void NotifyShutdown(); - - private: - /** - * Loads sconftp.dll module - * @return none - */ - void LoadFTPDllL(); - /** - * Closes initialized services - * @return none - */ - void Disconnect(); - /** - * Removes spaces and nulls from the end of the string - * @param aDes String to be formatted - * @return none - */ - void TrimRightSpaceAndNull( TDes8& aDes ) const; - /** - * Current used transfer media (IR,USB,BT) - * @param aMediaType Enumeration indicating the media type - * @return none - */ - void SetMediaType( TSrcsMediaType aMediaType ); - /** - * MObexServerNotify implementation - * @param aError Error code - * @return none - */ - void ErrorIndication( TInt aError ); - /** - * MObexServerNotify implementation - * @return none - */ - void TransportUpIndication(); - /** - * MObexServerNotify implementation - * @return none - */ - void TransportDownIndication(); - /** - * MObexServerNotify implementation - * @param aRemoteInfo Structure containing information used during OBEX - * connection - * @param aInfo Further information about the requested connection - * @return System wide error code that indicates the success of the connection - */ - TInt ObexConnectIndication( const TObexConnectInfo& aRemoteInfo, - const TDesC8& aInfo ); - /** - * MObexServerNotify implementation - * @param aInfo Contains information about the disconnection - * @return none - */ - void ObexDisconnectIndication( const TDesC8& aInfo ); - /** - * MObexServerNotify implementation - * @return CObexBaseObject-derived object, which the object being put - * will be parsed into. - */ - CObexBufObject* PutRequestIndication(); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * PUT packet operation. - */ - TInt PutPacketIndication(); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * PUT packet operation. - */ - TInt PutCompleteIndication(); - /** - * MObexServerNotify implementation - * @param aRequiredObject Details about the object the remote client - * has requested - * @returnObject to return to the client - */ - CObexBufObject* GetRequestIndication( CObexBaseObject - *aRequiredObject ); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * GET packet operation. - */ - TInt GetPacketIndication(); - /** - * MObexServerNotify implementation - * @return System wide error code that indicates the success of the - * GET packet operation. - */ - TInt GetCompleteIndication(); - /** - * MObexServerNotify implementation - * @param aPathInfo SETPATH command parameters - * @param aInfo Not currently used - * @return System wide error code indicating the success of the - * setpath command. - */ - TInt SetPathIndication( const CObex::TSetPathInfo& aPathInfo, - const TDesC8& aInfo ); - /** - * SetObexServer - * @param aObexServer pass obex server pointer to sevice controller - * @return System wide error code. - */ - TInt SetObexServer( CObexServer* aObexServer ); - /** - * MObexServerNotify implementation - * @return none - */ - void AbortIndication(); - /** - * Checks if mime type belongs to Catalogs - * @return TBool - */ - TBool IsCatalogsMimeType( TDataType aMime ); - - void ConstructL(); - CSConPCConnplugin(); - - /** - * Handles PCD object. Used for advanced file handling. - * @param aDescriptionHeader Contains command code and destination filename - * @param aNameHeader Source filename - * @return System wide error code. - */ - TInt HandlePCDObjectPut( const TDesC& aDescriptionHeader, const TDesC& aNameHeader ); - - /** - * Get Capbility object or ConML message from PCConnServer - * @param aNameHeader Name information. - * @param aTypeHeader Object type header. ConML or Capability object type - * @return none - */ - void HandleGetPCConnObjectL( const TDesC& aNameHeader, const TDesC8& aTypeHeader ); - - /** - * Get Catalogs object - * @param aTypeHeader Object type header. - * @return none - */ - void HandleGetCatalogsObjectL( const TDesC8& aTypeHeader ); - - /** - * Get file object - * @param aNameHeader requested filename. - * @return none - */ - void HandleGetFileObjectL( const TDesC& aNameHeader ); - - private: - RLibrary iFTPlib; - CObexBufObject* iObject; - CBufFlat* iBuffer; - CSConFTP* iFTPHandler; - TInt iPutError; - TBool iSessionActive; - CSConServiceTimer* iServiceTimer; - TBool iStartTimer; - TSrcsMediaType iMediaType; - CObexFileObject* iFileObject; - RSConPCConnSession iPCConnSession; - TBool iPCConnSessionConnected; - CCatalogsPCConnectivityPlugin* iCatalogs; - TBool iCatalogsConnected; - HBufC8* iCatalogsMimeType; - RPointerArray iMimeArray; - TBool iCatalogsMimeTypesExist; - TBool iPutPacketIndicationCalled; - CShutdownWatcher* iShutdownWatcher; - TBool iShutdownInProgress; - CObexServer* iObexServer; - RSocketServ iSocketServer; - RBTPhysicalLinkAdapter iLinkAdapter; - private: - // Friend class is used,because existing impelentation has been working - // properly. Avoiding re-design. - friend class CSConServiceTimer; - }; - -#endif // SCONPCCONNPLUGIN_H \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/inc/sconpcconnpluginutils.h --- a/connectivitymodules/SeCon/plugins/pcconn/inc/sconpcconnpluginutils.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in Utils header -* -*/ - - -#ifndef _SCONPCCONNPLUGINUTILS_H -#define _SCONPCCONNPLUGINUTILS_H - -#include -//============================================================ -// Class TPCConnpluginUtils declaration -//============================================================ -class TPCConnpluginUtils - { - public: - /** - * Converts Symbian error code to OBEX error code - * @param aError The error code - * @return The converted error code - */ - static TInt ConvertPCDResponseCode( TInt aError ); - /** - * Converts Symbian error code to OBEX error code - * @param aError The error code - * @return The converted error code - */ - static TInt ConvertFTPResponseCode( TInt aError ); - - /** - * Converts Symbian error code to OBEX error code - * @param aError The error code - * @return The converted error code - */ - static TInt ConvertObexMoveResponseCode( TInt aError ); - }; - -#endif //_SCONPCCONNPLUGINUTILS_H - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/inc/sconservicetimer.h --- a/connectivitymodules/SeCon/plugins/pcconn/inc/sconservicetimer.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in Service Timer Header file -* -*/ - - -#ifndef _SCONSERVICETIMER_H -#define _SCONSERVICETIMER_H - -#include - -class CSConPCConnplugin; - - -//============================================================ -// Class CSConServiceTimer declaration -//============================================================ - -NONSHARABLE_CLASS ( CSConServiceTimer ) : public CActive - { - public: - CSConServiceTimer( CSConPCConnplugin* aEngine, TInt aValue ); - void ConstructL(); - ~CSConServiceTimer(); - - /** - * Starts the timer - * @return none - */ - void StartTimer(); - /** - * Stops the timer - * @return none - */ - void StopTimer(); - - private: - void DoCancel(); - void RunL(); - - private: - RTimer iTimer; - CSConPCConnplugin* iEngine; - TInt iValue; - }; - -#endif //_SCONSERVICETIMER_H - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/inc/sconshutdownwatcher.h --- a/connectivitymodules/SeCon/plugins/pcconn/inc/sconshutdownwatcher.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* -* Copyright (c) 2007 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: Power shutdown -watcher header file -* -*/ - - -#ifndef _SCONSHUTDOWNWATCHER_H -#define _SCONSHUTDOWNWATCHER_H - - -#include -#include - -//============================================================ -// Class MShutdownObserver declaration -//============================================================ -class MShutdownObserver - { -public: - virtual void NotifyShutdown()=0; - }; - -//============================================================ -// Class CShutdownWatcher declaration -//============================================================ -NONSHARABLE_CLASS ( CShutdownWatcher ) : public CActive - { - public: - static CShutdownWatcher* NewL( MShutdownObserver* aObserver ); - ~CShutdownWatcher(); - - /** - * Starts to watch shutdown status - * @return none - */ - void StartShutdownWatcher(); - - private: - //construct/destruct - CShutdownWatcher( MShutdownObserver* aObserver ); - void ConstructL(); - - // from CActive - void DoCancel(); - void RunL(); - - private: - MShutdownObserver* iObserver; - RProperty iProperty; - }; - -#endif //_SCONSHUTDOWNWATCHER_H - -// End of file \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/src/101f9688.rss --- a/connectivitymodules/SeCon/plugins/pcconn/src/101f9688.rss Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in resource file -* -*/ - - -#include "ecom/registryinfo.rh" - -// Declares info for two implementations -RESOURCE REGISTRY_INFO theInfo - { - // UID for the DLL - dll_uid = 0x101F9688; - // Declare array of interface info - interfaces = - { - INTERFACE_INFO - { - // UID of interface that is implemented - interface_uid = 0x101F7C8C; - implementations = - { - // Info for CSConPCConnplugin - IMPLEMENTATION_INFO - { - implementation_uid = 0x101F9689; - version_no = 1; - display_name = "PC Suite Services"; - default_data = "OBEX/USB||OBEX/BT||OBEX/IrDA"; - - // - // opaque_data contains parameters used by following API calls in SRCS: - // 1. Setup USB interface string descriptor in Unicode; - // 2. TInt CObex::SetLocalWho(const TDesC8& aInfo); - // 3. TInt CBTConnection::RegisterSecuritySettingsL( TUint aService, - // TInt aProtocol, - // TInt aChannel, - // TBool aAuthenticate, - // TBool aAuthorise, - // TBool aEncrypt ); - // opaque_data = "@0||@1||@2||@3||@4||@5||@6" - // @0 aStrDesc e.g. "PC Connectivity" - // @1 aInfo e.g. KFolderBrowsingID, "\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09" - // @2 aService e.g. KBTSecurityUidFileTransfer, 0x1106 - // @3 aProtocol e.g. KSolBtRFCOMM, 0x1013 - // @4 aAuthenticate e.g. EFalse, 0 - // @5 aAuthorise e.g. EFalse, 0 - // @6 aEncrypt e.g. EFalse, 0 - // - opaque_data = "PC Suite Services||\xF9\xEC\x7B\xC4\x95\x3C\x11\xd2\x98\x4E\x52\x54\x00\xDC\x9E\x09||0x000050050000100080000002EE000001||0x1013||1||1||1||0xffff||0xffff"; - } - }; - } - }; - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/src/proxy.cpp --- a/connectivitymodules/SeCon/plugins/pcconn/src/proxy.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in proxy implementation -* -*/ - - - -#include -#include - -#include "sconpcconnplugin.h" - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(0x101F9689, CSConPCConnplugin::NewL) - }; - -// Exported proxy for instantiation method resolution -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - - return ImplementationTable; - } - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/src/sconpcconnplugin.cpp --- a/connectivitymodules/SeCon/plugins/pcconn/src/sconpcconnplugin.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1254 +0,0 @@ -/* -* 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: PC Connectivity Plug-in implementation -* -*/ - - -// INCLUDE FILES - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include "sconpcconnplugin.h" -#include "sconftp.h" -#include "sconpcconnpluginutils.h" -#include "sconservicetimer.h" -#include "catalogspcconnectivityplugin.h" -#include "debug.h" - - -// CONSTANTS -_LIT(KSConFTPLibName, "sconftp.dll"); -const TInt KSConFTPUidValue = 0x10009D8D; -const TUid KSConFTPUid = {KSConFTPUidValue}; - -// Folder listing type from IrObex specification -_LIT8( KSConFolderListType, "x-obex/folder-listing" ); -// Folder listing type from IrObex specification -_LIT8( KSConCapabilityObjectType, "x-obex/capability" ); -// PCD types -_LIT8( KSConPCDObjectType, "application/vnd.nokia.pcd" ); -_LIT8( KSConPCDXMLObjectType, "application/vnd.nokia.conml+xml" ); -_LIT8( KSConPCDWBXMLObjectType, "application/vnd.nokia.conml+wbxml" ); -_LIT8( KSConPCDXMLObjectType2, "application/vnd.nokia.pcd+xml" ); -_LIT8( KSConPCDWBXMLObjectType2, "application/vnd.nokia.pcd+wbxml" ); -_LIT( K_C_ROOT, "C:\\" ); - -// PCD header commands -const TInt KSCon_PCD_TAG = 0x003A; -const TInt KSCon_PCD_CMD_COPY = 0x0037; -const TInt KSCon_PCD_CMD_MOVE_OR_RENAME = 0x0038; -const TInt KSCon_PCD_CMD_SET_PERMISSION = 0x0039; -// PCD header parameters -const TInt KSCon_PCD_PAR_FULL_PERMISSION = 0x0040; -const TInt KSCon_PCD_PAR_READ_ONLY_PERMISSION = 0x0041; - - -const TInt KSConBufSize = 262144; // 256KB -// Time (in milliseconds) for the timer -const TInt KSConTimeOutValue = 180000000; -// Flags used to indicate SetPath commands -const TInt KSConNULLSetPath = 0x00; - -const TInt KSConHeaderMaxLength = 256; - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::NewL() -// Two-phase constructing -// ----------------------------------------------------------------------------- -// -CSConPCConnplugin* CSConPCConnplugin::NewL() - { - TRACE_FUNC_ENTRY; - CSConPCConnplugin* self = new ( ELeave ) CSConPCConnplugin(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return( self ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::~CSConPCConnplugin() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConPCConnplugin::~CSConPCConnplugin() - { - TRACE_FUNC_ENTRY; - - // Disconnect from services. - Disconnect(); - - delete iBuffer; - iBuffer = NULL; - - if ( iServiceTimer ) - { - iServiceTimer->Cancel(); - } - - delete iServiceTimer; - iServiceTimer = NULL; - - delete iCatalogs; - iCatalogs = NULL; - delete iCatalogsMimeType; - iCatalogsMimeType = NULL; - - iMimeArray.Reset(); - iMimeArray.Close(); - - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::IsOBEXActive() -// Returns active status of OBEX session -// ----------------------------------------------------------------------------- -// -TBool CSConPCConnplugin::IsOBEXActive() - { - TRACE_FUNC; - return iSessionActive; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::NotifyShutdown() -// System is shutting down -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::NotifyShutdown() - { - TRACE_FUNC; - iShutdownInProgress = ETrue; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::LoadFTPDllL() -// Loads sconftp.dll module -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::LoadFTPDllL() - { - TRACE_FUNC_ENTRY; - // Dynamically load DLL - User::LeaveIfError( iFTPlib.Load( KSConFTPLibName ) ); - if ( iFTPlib.Type()[1] != KSConFTPUid ) - { - LOGGER_WRITE( "KSConFTPUidValue incorrect" ); - iFTPlib.Close(); - User::Leave( KErrNotFound ); - } - TSConCreateCSConFTPFunc CreateCSConFTPL = - (TSConCreateCSConFTPFunc)iFTPlib.Lookup(1); - iFTPHandler = (CSConFTP*)CreateCSConFTPL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::Disconnect() -// Closes initialized services -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::Disconnect() - { - TRACE_FUNC_ENTRY; - - iLinkAdapter.Close(); - iSocketServer.Close(); - - //Disconnect from server - iPCConnSession.Close(); - iPCConnSessionConnected = EFalse; - - if ( iStartTimer != EFalse ) - { - iServiceTimer->Cancel(); - iServiceTimer->StartTimer(); - } - - delete iObject; - iObject = NULL; - - if ( iFTPHandler ) - { - delete iFTPHandler; - iFTPHandler = NULL; - iFTPlib.Close(); - } - if ( iFileObject ) - { - delete iFileObject; - iFileObject = NULL; - } - if ( iCatalogsConnected ) - { - iCatalogs->Close(); - iCatalogsConnected = EFalse; - iCatalogsMimeTypesExist = EFalse; - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::ErrorIndication( TInt aError ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::ErrorIndication( TInt aError ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aError : %d", aError ); - - if ( iFTPHandler ) - { - iFTPHandler->AbortFileTransfer( iObject ); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - if ( iFileObject ) - { - iFileObject->Reset(); - delete iFileObject; - iFileObject = NULL; - } - - if ( iPCConnSessionConnected ) - { - iPCConnSession.ResetServer(); - } - - // Keep compiler happy - (void)aError; - - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::AbortIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::AbortIndication() - { - TRACE_FUNC_ENTRY; - - if ( iFTPHandler ) - { - iFTPHandler->AbortFileTransfer( iObject ); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - if ( iFileObject ) - { - iFileObject->Reset(); - delete iFileObject; - iFileObject = NULL; - } - - if ( iPCConnSessionConnected ) - { - iPCConnSession.ResetServer(); - } - - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::TransportUpIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::TransportUpIndication() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::ObexConnectIndication( const TObexConnectInfo& -// aRemoteInfo, const TDesC8& aInfo ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::ObexConnectIndication( const TObexConnectInfo& - /*aRemoteInfo*/, const TDesC8& /*aInfo*/ ) - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - TInt catalogsErr( KErrNone ); - iStartTimer = ETrue; - - if ( iMediaType == ESrcsMediaBT && iObexServer ) - { - TSockAddr remoteAddr; - iObexServer->RemoteAddr( remoteAddr ); - - TBTSockAddr btSockAddr( remoteAddr ); - TBTDevAddr devAddr = btSockAddr.BTAddr(); - - err = iSocketServer.Connect(); - LOGGER_WRITE_1("iSocketServer.Connect err: %d", err ); - if ( !err ) - { - err = iLinkAdapter.Open( iSocketServer, devAddr ); - LOGGER_WRITE_1("iLinkAdapter.Open err: %d", err ); - } - // Ignore all BT link errors - err = KErrNone; - } - - //Connect to server - if ( !iPCConnSessionConnected ) - { - LOGGER_WRITE("Try to connect to iPCConnSession"); - err = iPCConnSession.Connect(); - LOGGER_WRITE_1( "iPCConnSession.Connect returned : %d", err ); - if ( err == KErrNone ) - { - iPCConnSessionConnected = ETrue; - } - } - - if ( err == KErrNone && !iFTPHandler ) - { - TRAP( err, LoadFTPDllL() ); - LOGGER_WRITE_1( "LoadFTPDllL returned : %d", err ); - } - - if ( err == KErrNone ) - { - iFTPHandler->SetProfile( EProprietary ); - LOGGER_WRITE( "iServiceTimer->StopTimer()" ); - iServiceTimer->Cancel(); - iServiceTimer->StopTimer(); - } - - if ( !iCatalogsConnected ) - { - LOGGER_WRITE( "CSConPCConnplugin::ObexConnectIndication() before iCatalogs->Connect()" ); - catalogsErr = iCatalogs->Connect(); - LOGGER_WRITE_1( "CSConPCConnplugin::ObexConnectIndication() iCatalogs->Connect() err: %d", catalogsErr ); - if ( catalogsErr == KErrNone ) - { - LOGGER_WRITE( "CSConPCConnplugin::ObexConnectIndication() iCatalogs->Connect() success" ); - iCatalogsConnected = ETrue; - TRAPD( ret, iMimeArray = iCatalogs->SupportedMimeTypesL() ); - if ( ret == KErrNone ) - { - LOGGER_WRITE_1( "iCatalogs->SupportedMimeTypesL count: %d", iMimeArray.Count() ); - iCatalogsMimeTypesExist = ETrue; - } - } - } - TRACE_FUNC_EXIT; - return TPCConnpluginUtils::ConvertFTPResponseCode( err ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::ObexDisconnectIndication( const TDesC8& ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::ObexDisconnectIndication( const TDesC8& ) - { - TRACE_FUNC_ENTRY; - Disconnect(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::TransportDownIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::TransportDownIndication() - { - TRACE_FUNC_ENTRY; - Disconnect(); - if ( iBuffer ) - { - iBuffer->Reset(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::PutRequestIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -CObexBufObject* CSConPCConnplugin::PutRequestIndication() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt err( KErrNone ); - iPutError = KErrNone; - - if ( iBuffer ) - { - iBuffer->Reset(); - } - - if ( iObject ) - { - delete iObject; - iObject = NULL; - } - - TRAP( err, iObject = CObexBufObject::NewL ( iBuffer ) ); - - if ( err != KErrNone ) - { - return NULL; - } - - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - return NULL; - } - - TRAP( err, ret = iFTPHandler->PutFileObjectInitL( iObject, iBuffer ) ); - - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "iFTPHandler->PutFileObjectInitL() leaves: %d", err ); - return NULL; - } - if ( ret != KErrNone ) - { - LOGGER_WRITE_1( "PutFileObjectInitL failed - returning error in next PutPacketIndication : %d", ret ); - iPutError = ret; - } - iPutPacketIndicationCalled = EFalse; - - if ( !iShutdownWatcher ) - { - TRAP( err, iShutdownWatcher = CShutdownWatcher::NewL( this ) ); - if ( err == KErrNone ) - { - iShutdownWatcher->StartShutdownWatcher(); - } - else - { - LOGGER_WRITE_1( "CShutdownWatcher::NewL leaves: %d", err ); - } - } - - if ( iLinkAdapter.IsOpen() ) - { - // request active BT mode (high power mode) - err = iLinkAdapter.ActivateActiveRequester(); - LOGGER_WRITE_1( "iLinkAdapter.ActivateActiveRequester() err: %d", err ); - } - - TRACE_FUNC_EXIT; - return( iObject ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::PutPacketIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::PutPacketIndication() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - TBool catalogsMime( EFalse ); - if ( iObject->Type().Length() > KSConHeaderMaxLength ) - { - LOGGER_WRITE("TypeHeader too big, return KErrNotSupported"); - return TPCConnpluginUtils::ConvertFTPResponseCode( KErrNotSupported ); - } - TBuf8 typeHeader( iObject->Type() ); - TrimRightSpaceAndNull( typeHeader ); - - if ( iCatalogsConnected && IsCatalogsMimeType( TDataType( typeHeader ) ) ) - { - catalogsMime = ETrue; - } - - if ( (TInt)iObject->Length() > 0 - && typeHeader != KSConPCDWBXMLObjectType - && typeHeader != KSConPCDWBXMLObjectType2 - && !catalogsMime - && typeHeader != KSConPCDObjectType ) - { - // normal file transfer - if ( !iPutPacketIndicationCalled ) - { - // This is first check, need to check only once - - TFileName path; - iFTPHandler->GetPath( path ); - if ( path.CompareF( K_C_ROOT ) == 0 ) - { - // path forbidden - ret = KErrAccessDenied; - } - else - { - if ( iPutError != KErrNone ) - { - ret = iPutError; - LOGGER_WRITE_1( "CSConPCConnplugin::PutPacketIndication() : PutError : %d", iPutError ); - } - else - { - // check required free space - // if filesize is small ( <65k ) it fits into one package and its already saved to filesystem. - // if file is larger, need to check is there enought free space in device. - - const TUint32 filesize = iObject->Length(); - LOGGER_WRITE_1( "CSConPCConnplugin::PutPacketIndication() filesize %d", filesize ); - LOGGER_WRITE_1( "CSConPCConnplugin::PutPacketIndication() iObject->BytesReceived() %d", iObject->BytesReceived() ); - if ( filesize > iObject->BytesReceived() ) - { - LOGGER_WRITE( "CSConPCConnplugin::PutPacketIndication() : check freespace" ); - // file does not fit into one obex packet, check is there enought free space in current drive - if ( iFTPHandler->IsCurrentDiskSpaceBelowCritical( filesize ) ) - { - LOGGER_WRITE( "CSConPCConnplugin::PutPacketIndication() : returning KErrNoMemory" ); - ret = KErrNoMemory; - } - } - } - } - } - - if ( iShutdownInProgress ) - { - LOGGER_WRITE( "ShutdownInProgress, abort" ); - ret = KErrDisconnected; - } - } - - if ( !iPutPacketIndicationCalled ) - { - // Need to check only once - iPutPacketIndicationCalled = ETrue; - - //Check if filename is too long. - TFileName path; - iFTPHandler->GetPath( path ); - if ( ret == KErrNone && path.Length() + iObject->Name().Length() > KMaxFileName ) - { - LOGGER_WRITE_1( "Name length overflow! : %d", path.Length() + iObject->Name().Length() ); - ret = KErrBadName; - } - } - - if ( ret != KErrNone ) - { - if ( iFTPHandler ) - { - iFTPHandler->AbortFileTransfer( iObject ); - } - - delete iObject; - iObject = NULL; - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - } - - LOGGER_WRITE_1( "CSConPCConnplugin::PutPacketIndication(): ret %d", ret ); - return TPCConnpluginUtils::ConvertFTPResponseCode( ret ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::PutCompleteIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::PutCompleteIndication() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt err( KErrNone ); - - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err2 = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err2 ); - } - - if ( iObject->Type().Length() > KSConHeaderMaxLength ) - { - LOGGER_WRITE("TypeHeader too big, return KErrNotSupported"); - delete iObject; - iObject = NULL; - - iFTPHandler->DeleteTempFile(); - return TPCConnpluginUtils::ConvertPCDResponseCode( KErrNotSupported ); - } - if ( iObject->Name().Length() > KSConHeaderMaxLength ) - { - LOGGER_WRITE("NameHeader too big, return KErrNotSupported"); - delete iObject; - iObject = NULL; - - iFTPHandler->DeleteTempFile(); - return TPCConnpluginUtils::ConvertPCDResponseCode( KErrNotSupported ); - } - - // check if ConML signal is received - TBuf8 typeHeader( iObject->Type() ); - TBuf nameHeader( iObject->Name() ); - TrimRightSpaceAndNull( typeHeader ); - LOGGER_WRITE8_1("type: %S", &typeHeader); - LOGGER_WRITE_1("name: %S", &nameHeader); - LOGGER_WRITE_1("description: %S", &iObject->Description()); - TInt size = iObject->BytesReceived(); - TTime time = iObject->Time(); - - // shutdownWatcher is not needed anymore - delete iShutdownWatcher; - iShutdownWatcher = NULL; - - if ( IsCatalogsMimeType( TDataType( typeHeader ) ) ) - { - if ( iCatalogsConnected ) - { - LOGGER_WRITE( "iCatalogs->PutDataL" ); - TRAP( err, iCatalogs->PutDataL( typeHeader, *iBuffer ) ); - LOGGER_WRITE_1( "iCatalogs->PutDataL : %d", err ); - if ( err == KErrServerTerminated ) - { - err = iCatalogs->Connect(); - LOGGER_WRITE_1( "CSConPCConnplugin::PutCompleteIndication() iCatalogs->Connect() err: %d", err ); - if ( err == KErrNone ) - { - LOGGER_WRITE( "iCatalogs->PutDataL" ); - TRAP( err, iCatalogs->PutDataL( typeHeader, *iBuffer ) ); - LOGGER_WRITE_1( "iCatalogs->PutDataL : %d", err ); - } - } - } - else - { - LOGGER_WRITE( "Catalogs mime type recognised - failing due no connection" ); - err = KErrNotSupported; - } - - delete iObject; - iObject = NULL; - - iFTPHandler->DeleteTempFile(); - return TPCConnpluginUtils::ConvertPCDResponseCode( err ); - } - - if ( typeHeader == KSConPCDObjectType ) - { - LOGGER_WRITE( "CSConPCConnplugin::PutCompleteIndication KSConPCDObjectType" ); - err = HandlePCDObjectPut( iObject->Description(), iObject->Name() ); - delete iObject; - iObject = NULL; - - iFTPHandler->DeleteTempFile(); - LOGGER_WRITE_1( "CSConPCConnplugin::PutCompleteIndication() end, err: %d", err ); - return TPCConnpluginUtils::ConvertObexMoveResponseCode( err ); - } - - if ( typeHeader != KSConPCDWBXMLObjectType && - typeHeader != KSConPCDWBXMLObjectType2 ) - { - TObexHeaderMask validHdrs = iObject->ValidHeaders(); - if ( ( validHdrs & KObexHdrBody ) || ( validHdrs & KObexHdrEndOfBody ) ) - { - LOGGER_WRITE( "CSConPCConnplugin::PutCompleteIndication() normal filetransfer" ); - LOGGER_WRITE_1( "Number of received bytes : %d", size ); - TSConUsedMedia media( ESConNoMedia ); - - switch( iMediaType ) - { - case ESrcsMediaBT : - media = ESConBTMedia; - break; - case ESrcsMediaIrDA : - media = ESConIRMedia; - break; - case ESrcsMediaUSB : - media = ESConUSBMedia; - break; - default : - media = ESConNoMedia; - break; - } - - iFTPHandler->SetUsedMedia( media ); - - TRAP( ret, err = iFTPHandler->PutFileObjectFinalizeL( iObject ) ); - LOGGER_WRITE_1( "PutFileObjectL() returned : %d", ret ); - } - else - { - LOGGER_WRITE( "Delete starts" ); - TRAP( ret, err = iFTPHandler->DeleteObjectL( iObject->Name() ) ); - LOGGER_WRITE_1( "DeleteObjectL() returned : %d", ret ); - } - } - - delete iObject; - iObject = NULL; - - if ( typeHeader == KSConPCDWBXMLObjectType || - typeHeader == KSConPCDWBXMLObjectType2 ) - { - LOGGER_WRITE( "CSConPCConnplugin::PutCompleteIndication() ReadWBXMLDataL" ); - TRAP( ret, err = iFTPHandler->ReadWBXMLDataL( iBuffer ) ); - - if ( err == KErrNone && ret == KErrNone ) - { - TRAP( ret, err = iPCConnSession.PutPacketL( nameHeader, - typeHeader, iBuffer ) ); - LOGGER_WRITE_1( "iPCConnSession.PutPacketL() leaveCode : %d", ret ); - LOGGER_WRITE_1( "iPCConnSession.PutPacketL() returned : %d", err ); - } - - iFTPHandler->DeleteTempFile(); - - return TPCConnpluginUtils::ConvertPCDResponseCode( err ); - } - - iFTPHandler->DeleteTempFile(); - - TRACE_FUNC_EXIT; - if ( ret != KErrNone ) - { - return TPCConnpluginUtils::ConvertFTPResponseCode( ret ); - } - return TPCConnpluginUtils::ConvertFTPResponseCode( err ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::GetRequestIndication( CObexBaseObject* aRequiredObject ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -CObexBufObject* CSConPCConnplugin::GetRequestIndication( CObexBaseObject* - aRequiredObject ) - { - TRACE_FUNC_ENTRY; - CObexBufObject* bufObject(NULL); - if ( aRequiredObject->Type().Length() > KSConHeaderMaxLength ) - { - LOGGER_WRITE("TypeHeader too big"); - return NULL; - } - if ( aRequiredObject->Name().Length() > KMaxFileName ) - { - LOGGER_WRITE("NameHeader is too long"); - return NULL; - } - TInt ret( KErrNone ); - TInt err( KErrNone ); - TBuf8 typeHeader( aRequiredObject->Type() ); - TrimRightSpaceAndNull( typeHeader ); - LOGGER_WRITE8_1("type: %S", &typeHeader); - LOGGER_WRITE_1("name: %S", &aRequiredObject->Name()); - - iBuffer->Reset(); - - delete iObject; - iObject = NULL; - - TRAP( err, iObject = CObexBufObject::NewL ( iBuffer ) ); - if ( err != KErrNone ) - { - return NULL; - } - - // Client requests folder listing - if ( typeHeader == KSConFolderListType ) - { - LOGGER_WRITE( "Client requests folder listning" ); - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - return NULL; - } - - TRAP( err, ret = iFTPHandler->GetFolderObjectL( iObject ) ); - LOGGER_WRITE_1( "iFTPHandler->GetFolderObjectL() returned: %d", ret ); - if ( err == KErrNone && ret == KErrNone ) - { - bufObject = iObject; - } - else - { - return NULL; - } - } - // Client requests capability object or ConML packet - else if ( typeHeader == KSConCapabilityObjectType - || typeHeader == KSConPCDWBXMLObjectType - || typeHeader == KSConPCDWBXMLObjectType2) - { - LOGGER_WRITE( "Client requests capability object or ConML packet" ); - // HandleGetPCConnObjectL will set some data to iObject, or leaves if error occurs - TRAP( err, HandleGetPCConnObjectL( aRequiredObject->Name(), typeHeader ) ); - - if ( err == KErrNone ) - { - bufObject = iObject; - } - else - { - LOGGER_WRITE_1("Get PCConn object failed, err: %d", err); - return NULL; - } - } - // Client requests file conversion - else if ( typeHeader == KSConPCDObjectType ) - { - LOGGER_WRITE("request of KSConPCDObjectType is not supported.") - return NULL; - } - // catalogs - else if ( IsCatalogsMimeType( TDataType( typeHeader ) ) ) - { - TRAP( err, HandleGetCatalogsObjectL( typeHeader ) ); - if ( err == KErrNone ) - { - bufObject = iObject; - } - else - { - LOGGER_WRITE_1("Get catalogs object failed, err: %d", err); - return NULL; - } - } - // Client requests file - else - { - LOGGER_WRITE( "Client requests file" ); - TRAP( err, HandleGetFileObjectL( aRequiredObject->Name() ) ); - if ( err == KErrNone ) - { - bufObject = (CObexBufObject*)iFileObject; - } - else - { - LOGGER_WRITE_1("Get file object failed, err: %d", err); - return NULL; - } - } - if ( bufObject && iLinkAdapter.IsOpen() ) - { - // request active BT mode (high power mode) - err = iLinkAdapter.ActivateActiveRequester(); - LOGGER_WRITE_1( "iLinkAdapter.ActivateActiveRequester() err: %d", err ); - } - return bufObject; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::GetPacketIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::GetPacketIndication() - { - TRACE_FUNC; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::GetCompleteIndication() -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::GetCompleteIndication() - { - TRACE_FUNC_ENTRY; - if ( iLinkAdapter.IsOpen() ) - { - // Cancel ActivateActiveRequester & allow going to low power mode - TInt err = iLinkAdapter.CancelLowPowerModeRequester(); - LOGGER_WRITE_1( "iLinkAdapter.CancelLowPowerModeRequester() err: %d", err ); - } - - TInt ret( KErrNone ); - if ( iFileObject ) - { - iFileObject->Reset(); - delete iFileObject; - iFileObject = NULL; - } - - LOGGER_WRITE_1( "CSConPCConnplugin::GetCompleteIndication() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, -// const TDesC8& aInfo ) -// MObexServerNotify implementation -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::SetPathIndication( const CObex::TSetPathInfo& aPathInfo, - const TDesC8& /*aInfo*/ ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt err( KErrNone ); - - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - return TPCConnpluginUtils::ConvertFTPResponseCode( KErrNoMemory ); - } - - if ( aPathInfo.iFlags == KSConNULLSetPath ) - { - TRAP( err, ret = this->iFTPHandler->CreateFolderL( aPathInfo.iName ) ); - } - else - { - TRAP( err, ret = this->iFTPHandler->SetPathL( aPathInfo.iName, - aPathInfo.iFlags ) ); - } - - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "CSConPCConnplugin::SetPathIndication : returned %d", err ); - return TPCConnpluginUtils::ConvertFTPResponseCode( err ); - } - LOGGER_WRITE_1( "CSConPCConnplugin::SetPathIndication : returned %d", ret ); - return TPCConnpluginUtils::ConvertFTPResponseCode( ret ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::TrimRightSpaceAndNull( TDes8& aDes ) const -// Removes spaces and nulls from the end of the string -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::TrimRightSpaceAndNull( TDes8& aDes ) const - { - TRACE_FUNC; - aDes.TrimRight(); - if ( aDes.Length() > 0 ) - { - if ( !aDes[aDes.Length() - 1] ) - { - aDes.SetLength( aDes.Length() - 1 ); - } - } - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::SetMediaType( TSrcsMediaType aMediaType ) -// Current used transfer media (IR,USB,BT) -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::SetMediaType( TSrcsMediaType aMediaType ) - { - TRACE_FUNC; - iMediaType = aMediaType; - } -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::TBool IsCatalogsMimeType( TDataType aMime ) -// Checks if mime type belogs to Catalogs -// ----------------------------------------------------------------------------- -// -TBool CSConPCConnplugin::IsCatalogsMimeType( TDataType aMime ) - { - TRACE_FUNC_ENTRY; - TBool result = EFalse; - - if ( !iCatalogsConnected - && aMime.Des8() != KSConPCDObjectType - && aMime.Des8() != KSConPCDXMLObjectType - && aMime.Des8() != KSConPCDWBXMLObjectType - && aMime.Des8() != KSConPCDXMLObjectType2 - && aMime.Des8() != KSConPCDWBXMLObjectType2 - ) - { - // Catalogs never connected and not secon mime type - // Try to connect to catalogs to get catalogstypes - TInt catalogsErr = iCatalogs->Connect(); - LOGGER_WRITE_1( "CSConPCConnplugin::IsCatalogsMimeType() iCatalogs->Connect() err: %d", catalogsErr ); - if ( catalogsErr == KErrNone ) - { - LOGGER_WRITE( "CSConPCConnplugin::IsCatalogsMimeType() iCatalogs->Connect() success" ); - iCatalogsConnected = ETrue; - TRAPD( ret, iMimeArray = iCatalogs->SupportedMimeTypesL() ); - if ( ret == KErrNone ) - { - LOGGER_WRITE_1( "iCatalogs->SupportedMimeTypesL count: %d", iMimeArray.Count() ); - iCatalogsMimeTypesExist = ETrue; - } - } - } - - if ( iCatalogsMimeTypesExist ) - { - // Compare to supported values - for ( TInt j = 0; j < iMimeArray.Count(); j++ ) - { - if ( (*iMimeArray[j]) == aMime ) - { - LOGGER_WRITE( "CSConPCConnplugin::IsCatalogsMimeTypeL returns TRUE" ); - result = ETrue; - break; - } - } - } - TRACE_FUNC_EXIT; - return result; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::CSConPCConnplugin() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConPCConnplugin::CSConPCConnplugin() - { - TRACE_FUNC; - iBuffer = NULL; - iObject = NULL; - iFileObject = NULL; - iSessionActive = EFalse; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::ConstructL() - { - TRACE_FUNC_ENTRY; - iBuffer = CBufFlat::NewL( KSConBufSize ); - iObject = CObexBufObject::NewL ( iBuffer ); - iServiceTimer = new (ELeave) CSConServiceTimer( this, KSConTimeOutValue ); - iServiceTimer->ConstructL(); - CActiveScheduler::Add( iServiceTimer ); - - // catalogs - iCatalogs = CCatalogsPCConnectivityPlugin::NewL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::SetObexServer( CObexServer* aObexServer ) -// SetObexServer -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::SetObexServer( CObexServer* aObexServer ) - { - iObexServer = aObexServer; - TInt ret = iObexServer->Start(this); - LOGGER_WRITE_1( "CSConPCConnplugin::SetObexServer() ret: %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::HandlePCDObjectPut -// Handles PCD object. Used for advanced file handling. -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnplugin::HandlePCDObjectPut( const TDesC& aDescriptionHeader, - const TDesC& aNameHeader ) - { - TRACE_FUNC_ENTRY; - TInt err( KErrNotSupported); - if ( aDescriptionHeader.Length() >= 3 ) - { - TInt commandTag = aDescriptionHeader[0]; - TInt commandID = aDescriptionHeader[1]; - TInt commandParam1 = aDescriptionHeader[2]; - - TPtrC destination; - if ( aDescriptionHeader.Length() >= 3 ) - { - destination.Set( aDescriptionHeader.Mid(3) ); - } - TPtrC source; - if ( aNameHeader.Length() >= 1 ) - { - // remove ":" character from beginning - source.Set( aNameHeader.Mid(1) ); - } - - if ( commandTag == KSCon_PCD_TAG ) - { - LOGGER_WRITE( "CSConPCConnplugin::HandlePCDObjectPut KSCon_PCD_TAG found" ); - switch (commandID) - { - case KSCon_PCD_CMD_COPY: - err = iFTPHandler->CopyFile( source, destination ); - break; - - case KSCon_PCD_CMD_MOVE_OR_RENAME: - err = iFTPHandler->MoveFile( source, destination ); - break; - - case KSCon_PCD_CMD_SET_PERMISSION: - if ( commandParam1 == KSCon_PCD_PAR_FULL_PERMISSION ) - { - err = iFTPHandler->SetReadOnly( source, EFalse ); - } - else if ( commandParam1 == KSCon_PCD_PAR_READ_ONLY_PERMISSION ) - { - err = iFTPHandler->SetReadOnly( source, ETrue ); - } - else - { - err = KErrNotSupported; - } - break; - - default: - LOGGER_WRITE( "CSConPCConnplugin::HandlePCDObjectPut unknown commandID" ); - err = KErrNotSupported; - break; - } - - } - - } - TRACE_FUNC_EXIT; - return err; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::HandleGetPCConnObjectL -// Get Capbility object or ConML message from PCConnServer -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::HandleGetPCConnObjectL( const TDesC& aNameHeader, - const TDesC8& aTypeHeader ) - { - TRACE_FUNC_ENTRY; - if ( !iPCConnSessionConnected ) - { - LOGGER_WRITE( "ERROR, iPCConnSession was not connected" ); - User::Leave( KErrNotReady ); - } - TInt err = iPCConnSession.GetPacketL( aNameHeader, aTypeHeader, iBuffer ); - LOGGER_WRITE_1( "iPCConnSession.GetPacketL() returned: %d", err ); - User::LeaveIfError( err ); - iObject->SetDataBufL( iBuffer ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::HandleGetCatalogsObjectL -// Get Catalogs object -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::HandleGetCatalogsObjectL( const TDesC8& aTypeHeader ) - { - TRACE_FUNC_ENTRY; - TInt err(KErrNone); - if ( !iCatalogsConnected ) - { - LOGGER_WRITE( "catalogs mime type recognised - failing due to no connection" ); - User::Leave( KErrNotReady ); - } - else - { - LOGGER_WRITE( "iCatalogs->GetDataL" ); - TDataType mime( aTypeHeader ); - TRAP( err, iCatalogs->GetDataL( mime, *iBuffer ) ); - LOGGER_WRITE_1( "iCatalogs->GetDataL : %d", err ); - if ( err == KErrServerTerminated ) - { - // server was terminated, try to reconnect - err = iCatalogs->Connect(); - LOGGER_WRITE_1( "iCatalogs->Connect() err: %d", err ); - User::LeaveIfError( err ); - LOGGER_WRITE( "iCatalogs->GetDataL" ); - iCatalogs->GetDataL( mime, *iBuffer ); - } - } - User::LeaveIfError( err ); - iObject->SetDataBufL( iBuffer ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnplugin::HandleGetFileObjectL -// Get file object -// ----------------------------------------------------------------------------- -// -void CSConPCConnplugin::HandleGetFileObjectL( const TDesC& aNameHeader ) - { - TRACE_FUNC_ENTRY; - delete iFileObject; - iFileObject = NULL; - iFileObject = CObexFileObject::NewL(); - - iFileObject->Reset(); - iFileObject->SetNameL( aNameHeader ); - - if ( !iFTPHandler ) - { - LOGGER_WRITE( "Creating iFTPHandler has failed" ); - User::Leave( KErrNotReady ); - } - - TInt err = iFTPHandler->GetFileObjectL( iFileObject ); - User::LeaveIfError( err ); - TRACE_FUNC_EXIT; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/src/sconpcconnpluginutils.cpp --- a/connectivitymodules/SeCon/plugins/pcconn/src/sconpcconnpluginutils.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,274 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in Utils implementation -* -*/ - - -// INCLUDE FILES -#include -#include "sconpcconnpluginutils.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// TPCConnpluginUtils::ConvertFTPResponseCode( TInt aError ) -// Converts Symbian error code to OBEX error code -// ----------------------------------------------------------------------------- -// -TInt TPCConnpluginUtils::ConvertFTPResponseCode( TInt aError ) - { - LOGGER_WRITE_1( "TPCConnpluginUtils::ConvertFTPResponseCode( TInt aError )\ - : begin, aError: %d", aError ); - TInt obexErr ( KErrIrObexRespBadRequest ); - switch( aError ) - { - case KErrNone: - obexErr = KErrNone; - break; - case KErrNotFound: - obexErr = KErrIrObexRespNotFound; - break; - case KErrGeneral: - case KErrCancel: - obexErr = KErrIrObexRespBadRequest; - break; - case KErrNoMemory: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrNotSupported: - obexErr = KErrIrObexRespNotImplemented; - break; - case KErrArgument: - case KErrTotalLossOfPrecision: - case KErrBadHandle: - case KErrOverflow: - case KErrUnderflow: - case KErrAlreadyExists: - obexErr = KErrIrObexRespConflict; - break; - case KErrPathNotFound: - case KErrDied: - obexErr = KErrIrObexRespNotFound; - break; - case KErrInUse: - obexErr = KErrIrObexRespTimedOut; - break; - case KErrServerTerminated: - obexErr = KErrIrObexRespNotFound; - break; - case KErrServerBusy: - case KErrCompletion: - case KErrNotReady: - case KErrUnknown: - case KErrCorrupt: - obexErr = KErrIrObexRespForbidden; - break; - case KErrAccessDenied: - case KErrLocked: - obexErr = KErrIrObexRespUnauthorized; - break; - case KErrWrite: - case KErrDisMounted: - case KErrEof: - obexErr = KErrIrObexRespForbidden; - break; - case KErrDiskFull: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrBadDriver: - case KErrBadName: - obexErr = KErrIrObexRespPreCondFailed; - break; - case KErrCommsLineFail: - case KErrCommsFrame: - case KErrCommsOverrun: - case KErrCommsParity: - case KErrTimedOut: - case KErrCouldNotConnect: - case KErrCouldNotDisconnect: - case KErrBadLibraryEntryPoint: - case KErrBadDescriptor: - case KErrAbort: - obexErr = KErrIrObexRespForbidden; - break; - case KErrTooBig: - obexErr = KErrIrObexRespReqEntityTooLarge; - break; - case KErrDivideByZero: - case KErrBadPower: - case KErrDirFull: - case KErrHardwareNotAvailable: - obexErr = KErrIrObexRespForbidden; - break; - case KErrDisconnected: // System is shutting down - obexErr = KErrIrObexRespMethodNotAllowed; - break; - default: - obexErr = KErrIrObexRespBadRequest; - break; - }; - LOGGER_WRITE_1( "TPCConnpluginUtils::ConvertFTPResponseCode( \ - TInt aError ) returned : %d", obexErr ); - return obexErr; -}; - -// ----------------------------------------------------------------------------- -// TPCConnpluginUtils::ConvertPCDResponseCode( TInt aError ) -// Converts Symbian error code to OBEX error code -// ----------------------------------------------------------------------------- -// -TInt TPCConnpluginUtils::ConvertPCDResponseCode( TInt aError ) - { - LOGGER_WRITE_1( "TPCConnpluginUtils::ConvertPCDResponseCode( TInt \ - aError ) : begin, aError: %d", aError ); - - TInt obexErr ( KErrIrObexRespInternalError ); - switch( aError ) - { - case KErrNone: - obexErr = KErrNone; - break; - case KErrNotFound: - obexErr = KErrIrObexRespNotFound; - break; - case KErrGeneral: - case KErrCancel: - obexErr = KErrIrObexRespInternalError; - break; - case KErrNoMemory: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrNotSupported: - obexErr = KErrIrObexRespUnsupMediaType; - break; - case KErrArgument: - case KErrTotalLossOfPrecision: - case KErrBadHandle: - case KErrOverflow: - case KErrUnderflow: - obexErr = KErrIrObexRespPreCondFailed; - break; - case KErrAlreadyExists: - obexErr = KErrIrObexRespConflict; - break; - case KErrPathNotFound: - case KErrDied: - case KErrInUse: - obexErr = KErrIrObexRespTimedOut; - break; - case KErrServerTerminated: - obexErr = KErrIrObexRespPreCondFailed; - break; - case KErrServerBusy: - obexErr = KErrIrObexRespConflict; - break; - case KErrCompletion: - case KErrNotReady: - case KErrUnknown: - case KErrCorrupt: - obexErr = KErrIrObexRespInternalError; - break; - case KErrAccessDenied: - case KErrLocked: - obexErr = KErrIrObexRespUnauthorized; - break; - case KErrWrite: - case KErrDisMounted: - case KErrEof: - obexErr = KErrIrObexRespInternalError; - break; - case KErrDiskFull: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrBadDriver: - case KErrBadName: - obexErr = KErrIrObexRespNotFound; - break; - case KErrCommsLineFail: - case KErrCommsFrame: - case KErrCommsOverrun: - case KErrCommsParity: - case KErrTimedOut: - case KErrCouldNotConnect: - case KErrCouldNotDisconnect: - case KErrBadLibraryEntryPoint: - case KErrBadDescriptor: - case KErrAbort: - case KErrTooBig: - case KErrDivideByZero: - case KErrBadPower: - case KErrDirFull: - case KErrHardwareNotAvailable: - obexErr = KErrIrObexRespInternalError; - break; - default: - obexErr = KErrIrObexRespInternalError; - break; - }; - LOGGER_WRITE_1( "TPCConnpluginUtils::ConvertPCDResponseCode(\ - TInt aError ) returned : %d", obexErr ); - return obexErr; -}; - -// ----------------------------------------------------------------------------- -// TPCConnpluginUtils::ConvertObexMoveResponseCode( TInt aError ) -// Converts Symbian error code to OBEX error code -// ----------------------------------------------------------------------------- -// -TInt TPCConnpluginUtils::ConvertObexMoveResponseCode( TInt aError ) - { - LOGGER_WRITE_1( "TPCConnpluginUtils::ConvertObexMoveResponseCode( TInt \ - aError ) : begin, aError: %d", aError ); - - TInt obexErr ( KErrIrObexRespInternalError ); - switch( aError ) - { - case KErrNone: - obexErr = KErrIrObexRespSuccess; - break; - case KErrNotFound: - case KErrPathNotFound: - obexErr = KErrIrObexRespNotFound; - break; - case KErrAccessDenied: - obexErr = KErrIrObexRespForbidden; - break; - case KErrNoMemory: - case KErrDiskFull: - obexErr = KErrIrObexRespDatabaseFull; - break; - case KErrInUse: - case KErrLocked: - obexErr = KErrIrObexRespConflict; - break; - case KErrNotSupported: - obexErr = KErrIrObexRespNotImplemented; - break; - case KErrAlreadyExists: - obexErr = KErrIrObexRespNotModified; - break; - - default: - obexErr = KErrIrObexRespInternalError; - break; - }; - LOGGER_WRITE_1( "TPCConnpluginUtils::ConvertObexMoveResponseCode(\ - TInt aError ) returned : %d", obexErr ); - return obexErr; -}; - -//End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/src/sconservicetimer.cpp --- a/connectivitymodules/SeCon/plugins/pcconn/src/sconservicetimer.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: PC Connectivity Plug-in Service Timer implementation -* -*/ - - -// INCLUDE FILES - -#include "sconservicetimer.h" -#include "sconpcconnplugin.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::CSConServiceTimer( CSConPCConnplugin* aEngine, TInt aValue ) -// Constuctor -// ----------------------------------------------------------------------------- -// -CSConServiceTimer::CSConServiceTimer( CSConPCConnplugin* aEngine, TInt aValue ) - : CActive( EPriorityStandard ), iEngine( aEngine ), iValue( aValue ) {} - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::ConstructL() - { - LOGGER_ENTERFN( "CSConServiceTimer::ConstructL()" ); - // create a thread-relative timer - User::LeaveIfError( iTimer.CreateLocal() ); - LOGGER_LEAVEFN( "CSConServiceTimer::ConstructL()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::~CSConServiceTimer() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConServiceTimer::~CSConServiceTimer() - { - LOGGER_ENTERFN( "CSConServiceTimer::~CSConServiceTimer()" ); - iTimer.Close(); - LOGGER_LEAVEFN( "CSConServiceTimer::~CSConServiceTimer()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::~CSConServiceTimer() -// Starts the timer -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::StartTimer() - { - LOGGER_ENTERFN( "CSConServiceTimer::StartTimer()" ); - if( !IsActive() ) - { - LOGGER_WRITE( "CSConServiceTimer::StartTimer() : !IsActive()" ); - iTimer.After( iStatus, TTimeIntervalMicroSeconds32( iValue ) ); - iEngine->iSessionActive = ETrue; - SetActive(); - LOGGER_WRITE( "CSConServiceTimer::StartTimer() : SetActive()" ); - } - LOGGER_LEAVEFN( "CSConServiceTimer::StartTimer()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::StopTimer() -// StopTimer() -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::StopTimer() - { - LOGGER_ENTERFN( "CSConServiceTimer::StopTimer()" ); - iEngine->iSessionActive = ETrue; - LOGGER_WRITE( "CSConServiceTimer::StopTimer() : iSessionActive = ETrue" ); - LOGGER_LEAVEFN( "CSConServiceTimer::StopTimer()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::DoCancel() -// Cancels the timer -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::DoCancel() - { - LOGGER_ENTERFN( "CSConServiceTimer::DoCancel()" ); - iTimer.Cancel(); - LOGGER_LEAVEFN( "CSConServiceTimer::DoCancel()" ); - } - -// ----------------------------------------------------------------------------- -// CSConServiceTimer::RunL() -// Executed when timer is triggered -// ----------------------------------------------------------------------------- -// -void CSConServiceTimer::RunL() - { - LOGGER_ENTERFN( "CSConServiceTimer::RunL()" ); - iEngine->iSessionActive = EFalse; - LOGGER_WRITE( "CSConServiceTimer::RunL() : iSessionActive = EFalse" ); - iEngine->iStartTimer = EFalse; - LOGGER_WRITE( "CSConServiceTimer::RunL() : iStartTimer = EFalse " ); - LOGGER_LEAVEFN( "CSConServiceTimer::RunL()" ); - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/plugins/pcconn/src/sconshutdownwatcher.cpp --- a/connectivitymodules/SeCon/plugins/pcconn/src/sconshutdownwatcher.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* Copyright (c) 2007 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: Power shutdown -watcher implementation -* -*/ - - -// INCLUDE FILES - -#include "sconshutdownwatcher.h" -#include "debug.h" - -#include - - - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::NewL( MShutdownObserver* aObserver ) -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CShutdownWatcher* CShutdownWatcher::NewL( MShutdownObserver* aObserver ) - { - LOGGER_ENTERFN( "CShutdownWatcher::NewL()" ); - CShutdownWatcher* self = new (ELeave) CShutdownWatcher( aObserver ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - LOGGER_LEAVEFN( "CShutdownWatcher::NewL()" ); - return self; - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::~CShutdownWatcher() -// Destructor -// ----------------------------------------------------------------------------- -// -CShutdownWatcher::~CShutdownWatcher() - { - LOGGER_ENTERFN( "CShutdownWatcher::~CShutdownWatcher()" ); - Cancel(); - iProperty.Close(); - LOGGER_LEAVEFN( "CShutdownWatcher::~CShutdownWatcher()" ); - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::StartShutdownWatcher() -// Starts to watch shutdown status -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::StartShutdownWatcher() - { - LOGGER_ENTERFN( "CShutdownWatcher::StartShutdownWatcher()" ); - TInt status; - TInt err = iProperty.Get( KPSUidStartup, KPSGlobalSystemState, status ); - LOGGER_WRITE_2( "CShutdownWatcher::StartShutdownWatcher() :\ - err %d, KPSGlobalSystemState status %d",err, status); - if ( err == KErrNone ) - { - if ( status == ESwStateShuttingDown ) - { - LOGGER_WRITE( "Call NotifyShutdown" ); - iObserver->NotifyShutdown(); - return; - } - } - - err = iProperty.Attach( KPSUidStartup, KPSGlobalSystemState ); - LOGGER_WRITE_1( "CShutdownWatcher::StartShutdownWatcher() :\ - iProperty.Attach( KPSUidStartup, KPSGlobalSystemState ) : err %d", err ); - iProperty.Subscribe( iStatus ); - LOGGER_WRITE( "CShutdownWatcher::StartShutdownWatcher() :\ - iProperty.Subscribe( iStatus ) : ok" ); - SetActive(); - - LOGGER_LEAVEFN( "CShutdownWatcher::StartShutdownWatcher()" ); - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::DoCancel() -// Executed when CActive is canceled. -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::DoCancel() - { - LOGGER_ENTERFN( "CShutdownWatcher::DoCancel()" ); - iProperty.Cancel(); - LOGGER_LEAVEFN( "CShutdownWatcher::DoCancel()" ); - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::RunL() -// Executed when disk watcher is triggered -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::RunL() - { - LOGGER_ENTERFN( "CShutdownWatcher::RunL()" ); - TInt status; - iProperty.Get( status ); - LOGGER_WRITE_1( "CShutdownWatcher::RunL() : status %d", status ); - - if ( status == ESwStateShuttingDown ) - { - LOGGER_WRITE( "Call NotifyShutdown" ); - iObserver->NotifyShutdown(); - return; - } - - iProperty.Cancel(); - iProperty.Close(); - - LOGGER_LEAVEFN( "CShutdownWatcher::RunL()" ); - } - - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::CShutdownWatcher( MShutdownObserver* aObserver ) -// Default constructor -// ----------------------------------------------------------------------------- -// -CShutdownWatcher::CShutdownWatcher( MShutdownObserver* aObserver ) -: CActive(EPriorityStandard), - iObserver(aObserver) - { - } - -// ----------------------------------------------------------------------------- -// CShutdownWatcher::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CShutdownWatcher::ConstructL() - { - LOGGER_ENTERFN( "CShutdownWatcher::ConstructL()" ); - CActiveScheduler::Add(this); - LOGGER_LEAVEFN( "CShutdownWatcher::ConstructL()" ); - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/cntparser.iby --- a/connectivitymodules/SeCon/rom/cntparser.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -/* -* Copyright (c) 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: Image description file for Contact Parser Client and Server. -* -*/ - - -file=ABI_DIR\BUILD_DIR\cntparserserverexe.exe PROGRAMS_DIR\cntparserserverexe.exe -file=ABI_DIR\BUILD_DIR\cntparserserver.dll SHARED_LIB_DIR\cntparserserver.dll - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconcsc.iby --- a/connectivitymodules/SeCon/rom/sconcsc.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* 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: Image description file for project SConCSC -* -*/ - - -#ifndef __SCONCSC_IBY__ -#define __SCONCSC_IBY__ -//file content - -file=ABI_DIR\BUILD_DIR\sconcsc.dll SHARED_LIB_DIR\sconcsc.dll -data=ZPRIVATE\101F99F6\capability\101F9698.xml PRIVATE\101F99F6\capability\101F9698.xml -data=ZPRIVATE\101F99F6\capability\fwdcomp.xml PRIVATE\101F99F6\capability\fwdcomp.xml -data=ZPRIVATE\101F99F6\capability\101F99F6.xml PRIVATE\101F99F6\capability\101F99F6.xml -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconftp.iby --- a/connectivitymodules/SeCon/rom/sconftp.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 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: Image description file for CSConFTP -* -*/ - - -#ifndef __SCONFTP_IBY__ -#define __SCONFTP_IBY__ -//file content - -file=ABI_DIR\BUILD_DIR\sconftp.dll SHARED_LIB_DIR\sconftp.dll - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconftpplugin.iby --- a/connectivitymodules/SeCon/rom/sconftpplugin.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 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: Image description file for FTPplugin -* -*/ - - -#ifndef __SCONFTP_PLUGIN_IBY__ -#define __SCONFTP_PLUGIN_IBY__ -//file content - -ECOM_PLUGIN(sconftpplugin.dll,101F9686.RSC) - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconftpresources.iby --- a/connectivitymodules/SeCon/rom/sconftpresources.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* Copyright (c) 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: Image description file for SConFTP resources. -* -*/ - -#ifndef __SCONFTP_RESOURCE_IBY__ -#define __SCONFTP_RESOURCE_IBY__ - -data=DATAZ_\RESOURCE_FILES_DIR\sconftp.rsc RESOURCE_FILES_DIR\sconftp.rsc - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconpcconnclientserver.iby --- a/connectivitymodules/SeCon/rom/sconpcconnclientserver.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: Image description file for project PCCONNClientServer -* -*/ - - -#ifndef __SCONPCCONNCLIENTSERVER_IBY__ -#define __SCONPCCONNCLIENTSERVER_IBY__ -//file content - -file=ABI_DIR\BUILD_DIR\sconconmlhandler.dll SHARED_LIB_DIR\sconconmlhandler.dll - -file=ABI_DIR\BUILD_DIR\sconpcconnserver.exe PROGRAMS_DIR\sconpcconnserver.exe -file=ABI_DIR\BUILD_DIR\sconpcconnclient.dll SHARED_LIB_DIR\sconpcconnclient.dll - -// stub files -data=ZSYSTEM\install\secon_stub.sis system\install\secon_stub.sis -data=ZSYSTEM\install\sconpcconnplugin_stub.sis system\install\sconpcconnplugin_stub.sis -data=ZSYSTEM\install\sconftpplugin_stub.sis system\install\sconftpplugin_stub.sis - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconpcconnplugin.iby --- a/connectivitymodules/SeCon/rom/sconpcconnplugin.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 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: Image description file for PC Connectivity Plug-in. -* -*/ -#ifndef __SCONPCCONN_PLUGIN_IBY__ -#define __SCONPCCONN_PLUGIN_IBY__ -//file content - -ECOM_PLUGIN(sconpcconnplugin.dll,101F9688.RSC) - -file=ABI_DIR\BUILD_DIR\catalogspcconnectivityplugin.dll SHARED_LIB_DIR\catalogspcconnectivityplugin.dll - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/rom/sconpcd.iby --- a/connectivitymodules/SeCon/rom/sconpcd.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 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: Image description file for SConPCD. -* -*/ -#ifndef __SCONPCD_IBY__ -#define __SCONPCD_IBY__ -//file content - -file=ABI_DIR\BUILD_DIR\sconpcd.dll system\libs\sconpcd.dll - -data=ZPRIVATE\10202D56\sbeconfig.xml PRIVATE\10202D56\sbeconfig.xml - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/bld/bld.inf --- a/connectivitymodules/SeCon/servers/pcconn/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* 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: Build information file for project PCConnServer -* -*/ - - -PRJ_EXPORTS - - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -sconpcconnserver.mmp diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/bld/sconpcconnserver.mmp --- a/connectivitymodules/SeCon/servers/pcconn/bld/sconpcconnserver.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: PC Connectivity Server -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_SERVER TrustedUI - -TARGET sconpcconnserver.exe -TARGETTYPE exe - -EPOCSTACKSIZE 0x10000 -EPOCHEAPSIZE 0x10000 0x1000000 // heap memory 16MB - -UID 0 0x101F99F6 - -// Server -SOURCEPATH ../src -SOURCE sconpcconnserver.cpp -SOURCE sconimsireader.cpp -SOURCE sconfolderlister.cpp -SOURCE sconbtengine.cpp - -// ConML -SOURCEPATH ../../../wbxml/conmlhandler/src -SOURCE sconconmldtd.cpp -SOURCE sconxmlelement.cpp - -SOURCEPATH ../../../common/conmltask/src -SOURCE sconconmltask.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../../inc -USERINCLUDE ../../../common/conmltask/inc -USERINCLUDE ../../../services/pcd/inc -USERINCLUDE ../../../services/csc/inc -USERINCLUDE ../../../services/oviaccounthandler/inc -USERINCLUDE ../../../wbxml/conmlhandler/inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY estor.lib // RMemWriteStream, RMemReadStream -LIBRARY efsrv.lib // Rfs, RFile -LIBRARY charconv.lib // For Unicode conversion -LIBRARY etel3rdparty.lib -LIBRARY platformenv.lib // For pathinfo -LIBRARY directorylocalizer.lib // For localizing directories -LIBRARY centralrepository.lib -LIBRARY commonengine.lib // For resource reader -LIBRARY bafl.lib // Basic Application Framework Library -LIBRARY btengdevman.lib -LIBRARY btmanclient.lib -LIBRARY btdevice.lib -LIBRARY bluetooth.lib -LIBRARY btengsettings.lib -DEBUGLIBRARY flogger.lib - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/inc/sconbtengine.h --- a/connectivitymodules/SeCon/servers/pcconn/inc/sconbtengine.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 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: CSconBtEngine declaration -* -*/ - - - -#ifndef SCONBTENGINE_H_ -#define SCONBTENGINE_H_ - -#include -#include -#include -#include -#include - -const TInt KCenRepAddrBufSize = 2 * KBTDevAddrSize; - -class CSconBtEngine : public CBase, - public MBTEngDevManObserver, - public MBTEngSettingsObserver - { -public: - static CSconBtEngine* NewL(); - ~CSconBtEngine(); - - void ReadBTInfoL( RBufWriteStream& aStream ); - - void SetBtAuthorizedL( const TDesC& aBtDevAddress, TBool aAuthorized ); - - TInt SetBtPowerState( TBool aPower ); - - TInt SetBtName( const TDesC& aBtName ); - -protected: - // From MBTEngDevManObserver - void HandleDevManComplete( TInt aErr ); - void HandleGetDevicesComplete( TInt aErr, - CBTDeviceArray* aDeviceArray ); - - // From MBTEngSettingsObserver - void PowerStateChanged( TBTPowerStateValue aState ); - void VisibilityModeChanged( TBTVisibilityMode aState ); - -private: - CSconBtEngine(); - void ConstructL(); - - void PrintDevicesL(); - -private: - enum TState - { - EIdle, - ERequestBtInfo, - EChangeBtState, - EChangeAuthorized - }; - TState iState; - TInt iOperationError; - CActiveSchedulerWait iWait; - RBufWriteStream* iStream; - CBTEngDevMan* iBtEng; - CBTDeviceArray* iBtDevArray; - CBTEngSettings* iBtSettings; - TBool iAuthorizedValue; - TBuf iBtAddress; - }; - -#endif /* SCONBTENGINE_H_ */ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/inc/sconfolderlister.h --- a/connectivitymodules/SeCon/servers/pcconn/inc/sconfolderlister.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/* -* Copyright (c) 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: CSconFolderLister declaration -* -*/ - - -#ifndef CSCONFOLDERLISTER_H -#define CSCONFOLDERLISTER_H - -// INCLUDES -#include -#include -#include // For RMemReadStream -#include -// CLASS DECLARATION - -class TSconDriveInfoEntry - { -public: - TUint8 iDriveType; - TUint8 iDriveTypeCount; - TInt64 iSize; - TInt64 iFree; - }; - -class TSconDriveInfo : public TSconDriveInfoEntry - { -public: - TUint iDriveStatus; - TBuf16<2> iDriveLetter; - TUint iDriveAttr; - TBufC iVolumeName; - }; - - -class CSconFolderEntry : public CBase - { -public: - static CSconFolderEntry* NewLC(); - static CSconFolderEntry* NewLC( const TEntry& aEntry ); - ~CSconFolderEntry(); -private: - CSconFolderEntry(); - void ConstructL( const TEntry& aEntry ); - -public: - TUint iAtt; - TTime iModified; - HBufC *iName; - HBufC *iLabel; - TBool iDriveInfoEntryExists; - TSconDriveInfoEntry iDriveInfoEntry; - }; - - -class CDirectoryLocalizer; - -/** - * CSconFolderLister - * - */ -class CSconFolderLister : public CBase - { -public: - // Constructors and destructor - - /** - * Destructor. - */ - ~CSconFolderLister(); - - /** - * Two-phased constructor. - */ - static CSconFolderLister* NewL( RFs& aFs ); - - /** - * - * @param aStream - * @param aStartPath - * @param aLevelsToSearch -1 = Search all levels, 0 = Search only current level, 1..N Search N levels - */ - void GenerateFolderListL( RBufWriteStream& aStream, const TDesC& aStartPath, const TInt aLevelsToSearch ); - -private: - - void ListAllDrivesL( RBufWriteStream& aStream, const TInt aLevelsToSearch ); - void ListDriveAndPathL( RBufWriteStream& aStream, TInt aDrive, const TDesC& aStartPath, const TInt aLevelsToSearch ); - - void ExportDriveL( RBufWriteStream& aStream, const TSconDriveInfo& aDriveInfo, - const TDesC& aPathName, const TInt aLevelsToSearch ); - - /** - * - * @param aStream - * @param aPathName - */ - void ExportPathL( RBufWriteStream& aStream, const TDesC& aPathName, - const CSconFolderEntry& aEntry, const TBool aLocalize, const TInt aLevelsToSearch ); - - void GetDriveTypeNumberL( TInt aDrive , TUint driveStatus, TInt& aTypeNumber); - - /** - * Constructor for performing 1st stage construction - */ - CSconFolderLister( RFs& aFs ); - - /** - * EPOC default constructor for performing 2nd stage construction - */ - void ConstructL(); - - TBool IsDirectoryPrintable( const TDesC& aParentPath, const TEntry& aFolderEntry ); - - void GetLocalizedVolumeNameL( CSconFolderEntry& aDriveEntry ); -private: - RFs& iFs; - TInt iFolders; - TInt iFiles; - TInt iCriticalLevel; - CDirectoryLocalizer* iLocalizer; - }; - -#endif // CSCONFOLDERLISTER_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/inc/sconimsireader.h --- a/connectivitymodules/SeCon/servers/pcconn/inc/sconimsireader.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2009-2010 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: Imsi reader -* -*/ - - -#ifndef __SCONIMSIREADER_H__ -#define __SCONIMSIREADER_H__ - -#include -#include - -enum TImsiReaderStatus - { - EIdle, - ERequestingImsi, - ERequestingNetworkStatus - }; - -class CSconImsiReader : public CActive - { - public: - - static TInt GetImsiL( TDes& aImsi ); - - static TInt GetNetworkStatusL( CTelephony::TRegistrationStatus& aRegistrationStatus ); - - private: - CSconImsiReader( TDes& aImsi, CTelephony::TRegistrationStatus& aRegistrationStatus ); - void ConstructL(); - ~CSconImsiReader(); - - void RequestImsi(); - void RequestNetworkStatus(); - - private: // From CActive - - void RunL(); - void DoCancel(); - - private: // data - TDes& iImsi; - CTelephony::TRegistrationStatus& iNetworkStatus; - CTelephony* iTelephony; - CTelephony::TSubscriberIdV1 iSubscriberIdV1; - CTelephony::TSubscriberIdV1Pckg iSubscriberIdV1Pckg; - - CTelephony::TNetworkRegistrationV1 iNetworkRegistrationV1; - CTelephony::TNetworkRegistrationV1Pckg iNetworkRegistrationV1Pckg; - TImsiReaderStatus iImsiReaderStatus; - }; - -#endif // __SCONIMSIREADER_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/inc/sconpcconnclientserver.h --- a/connectivitymodules/SeCon/servers/pcconn/inc/sconpcconnclientserver.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/* -* Copyright (c) 2005-2006 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: PC Connectivity server client -* -*/ - - - - -#ifndef __SCONPCCONNCLIENTSERVER_H__ -#define __SCONPCCONNCLIENTSERVER_H__ - -#include - -// for debugging ConML messages and capability objects -//#define DEBUG_XML - - -// reasons for server panic -enum TPCConnServPanic - { - E_BadRequest = 1, - E_DispatchRequest, - E_InvalidClient, - E_CleanupCreate, - E_MainSchedulerError - }; - - -// server related constants -_LIT( KSConPCConnServerName,"SConPCConnServer" ); -_LIT( KSConPCConnServerExe, "SConPCConnServer.exe" ); - -// client -_LIT( KSConPCConnClientDll, "SConPCConnClient.dll" ); - - -// Chunk -const TUint KSConPCConnChunkSize = 128; -const TUint KSConPCConnChunkMaxSize = 65536; -const TUint KSConPCConnBufferMaxSize = 65000; - -// Version number -const TUint KSConPCConnServerVersionMajor = 1; -const TUint KSConPCConnServerVersionMinor = 0; -const TUint KSConPCConnServerVersionBuild = 1; - - -// Function codes - -enum TRequest -{ - EPutMessage, - EGetMessage, - EResetMessage, - EChunkMessage -}; - -#endif // __SCONPCCONNCLIENTSERVER_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/inc/sconpcconnserver.h --- a/connectivitymodules/SeCon/servers/pcconn/inc/sconpcconnserver.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -/* -* 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: PC Connectivity server -* -*/ - - -#ifndef __SCONPCCONNSERVER_H__ -#define __SCONPCCONNSERVER_H__ - -#include "sconconmlhandler.h" -#include "sconconmltask.h" - - -class CSConPCD; -class CSConCSC; -class CSConConMLParser; - -const TUint KSConDefaultHeapSize=0x10000; -const TInt KSConFirstDrive = 65; - -_LIT8 ( KParamNameSilent, "Silent" ); - - -// PCD Handler Dll -_LIT(KSConPCDLibName, "sconpcd.dll"); -const TInt KSConPCDUidValue = 0x10009D8D; -const TUid KSConPCDUid = {KSConPCDUidValue}; - -// CSC Handler Dll -_LIT(KSConCSCLibName, "sconcsc.dll"); -const TInt KSConCSCUidValue = 0x10009D8D; -const TUid KSConCSCUid = {KSConCSCUidValue}; - -// ConML Handler Dll -_LIT (KSConConMLHandlerLibName, "sconconmlhandler.dll"); -const TInt KSConConMLHandlerUidValue = 0x10009D8D; -const TUid KSConConMLHandlerUid = {KSConConMLHandlerUidValue}; - -// debug file for put and get messages -_LIT ( KSConConMLDebugFile, "c:\\data\\handler_result.txt"); - -// Secure ids -_LIT_SECURE_ID(KSConPCConnClientSecureId,0x101F7C87); - -// PCD types -_LIT8( KSConPCDXMLObjectType, "application/vnd.nokia.conml+xml" ); -_LIT8( KSConPCDXMLObjectType2, "application/vnd.nokia.pcd+xml" ); -_LIT8( KSConPCDWBXMLObjectType, "application/vnd.nokia.conml+wbxml" ); -_LIT8( KSConPCDWBXMLObjectType2, "application/vnd.nokia.pcd+wbxml" ); - -// CSC types -_LIT8( KSConCapabilityObjectType, "x-obex/capability" ); - -// Drives -_LIT( KSConNoDrive, "\x0" ); -_LIT( KSConDriveExists, "\x1" ); - -// user permissions -_LIT8( KSConPermReadOnly, "R" ); -_LIT8( KSConPermNormal, "RW" ); -// Java hash id for ConML -_LIT8( KSConJavaHashId, "JAVA_"); - -_LIT8( KSConAppInfoSeparator, "#" ); - -//********************************** -//CSConPCConnServer - PC Connectivity Server -//********************************** - -class CSConPCConnServer : public CServer2 - { -public: - // From CServer2 - IMPORT_C static CSConPCConnServer* NewLC(); - IMPORT_C ~CSConPCConnServer(); - - /** - * Function to start the server - * @param none - * @return Error code - */ - static TInt RunServer(); - - /** - * Function to start the server - * @param none - * @return none - */ - static void RunServerL(); - - /** - * Increments session count. - * @param none - * @return none - */ - void IncSessionCount(); - - /** - * Decrements session count. - * When count reaches zero, stops active scheduler - * @param none - * @return none - */ - void DecSessionCount(); - - -protected: - virtual CSession2* NewSessionL( const TVersion &aVersion, - const RMessage2& aMessage) const; - -private: - CSConPCConnServer(); - - TInt iSessionCount; - - }; - - -class CSconFolderLister; -class CSconBtEngine; - -//********************************** -//CSConPCConnSession - Server session class, handles the requested operations -//********************************** -class CSConPCConnSession : public CSession2, public MWBXMLConMLCallback - { - -public: - static CSConPCConnSession* NewL(CSConPCConnServer& aServer); - - /** - * From CSession2 - */ - void ServiceL( const RMessage2 &aMessage); - -private: - void DispatchRequestL( const RMessage2 &aMessage); - void LoadPCDDllL(); - void LoadCSCDllL(); - void LoadConMLHandlerDllL(); - -protected: - // Callback funktion for WBXML parsing - void ConMLL ( ConML_ConMLPtr_t aContent ); - -private: - void ConstructL(); - CSConPCConnSession ( CSConPCConnServer& aServer); - ~CSConPCConnSession(); - - TInt HandlePutMessageL(); - TInt HandleGetMessageL(); - TInt HandleWBXMLGetRequestL( const TDesC& aFileName ); - TInt HandleResetMessage(); - TInt HandleChunkMessage( const RMessage2& aMessage ); - TInt OptionsFromExecuteL ( ConML_ExecutePtr_t aContent ); - TInt TaskCancelL(ConML_CancelPtr_t aContent); - TInt TaskGetStatusL(ConML_GetStatusPtr_t aContent ); - TInt TaskInstallL( ConML_InstallPtr_t aContent ); - TInt TaskUnInstallL( ConML_UnInstallPtr_t aContent ); - void SplitL( const TDesC8& aText, const TChar aSeparator, RArray& aArray ); - TInt TaskListInstalledAppsL( ConML_ListInstalledAppsPtr_t aContent ); - TInt TaskListDataOwnersL(); - TInt TaskSetBURModeL( ConML_SetBURModePtr_t aContent ); - TInt TaskGetDataSizeL( ConML_GetDataSizePtr_t aContent ); - TInt TaskRequestDataL( ConML_RequestDataPtr_t aContent ); - TInt TaskUpdateDeviceInfoL( ConML_UpdateDeviceInfoPtr_t aContent ); - TInt TaskListPublicFilesL( ConML_ListPublicFilesPtr_t aContent ); - TInt TaskGetDataOwnerStatusL( ConML_GetDataOwnerStatusPtr_t aContent ); - TInt TaskSupplyDataL ( ConML_SupplyDataPtr_t aContent ); - TInt TaskRebootL(); - TInt TaskGetMetadataL( ConML_GetMetadataPtr_t aContent ); - void AppendStatusL( ConML_ConMLPtr_t aContent, CSConStatusReply* reply ); - void AppendUpdateDeviceInfoResultsL( ConML_ResultsPtr_t aContent, - CSConUpdateDeviceInfo* aResult ); - void AppendSetBURModeResultsL ( ConML_ResultsPtr_t aContent, - CSConSetBURMode* aResult ); - void AppendListInstalledAppsResultsL ( ConML_ResultsPtr_t aContent, - CSConListInstApps* aResult ); - void AppendListPublicFilesResultsL ( ConML_ResultsPtr_t aContent, - CSConListPublicFiles* aResult ); - void AppendRequestDataResultsL( ConML_ResultsPtr_t aContent, - CSConRequestData* aResult ); - void AppendSupplyDataResultsL( ConML_ResultsPtr_t aContent, - CSConSupplyData* aResult ); - void AppendInstallResultsL( ConML_ResultsPtr_t aContent, - CSConInstall* aResult ); - void AppendUninstallResultsL( ConML_ResultsPtr_t aContent, - CSConUninstall* aResult ); - void AppendListDataOwnersResultsL ( ConML_ResultsPtr_t aContent, - CSConListDataOwners* aResult ); - void AppendGetDataOwnerStatusResultsL ( ConML_ResultsPtr_t aContent, - CSConGetDataOwnerStatus* aResult ); - void AppendGetDataSizeResultsL ( ConML_ResultsPtr_t aContent, - CSConGetDataSize* aResult ); - void AppendGetMetadataResultsL ( ConML_ResultsPtr_t aContent, - CSConGetMetadata* aResult ); - void AppendProgressL ( ConML_ResultsPtr_t aContent, TInt progress ); - void AppendDrivesL( ConML_DrivesPtr_t aContent, TDriveList aDrives ); - TDriveList DriveList( ConML_DriveListPtr_t aContent ); - TDesC8& IntToDesLC( const TInt& anInt); - TDesC8& DriveNumToDesLC( const TInt& anInt ); - TDesC8& BufToDesLC( const TDesC& aBuf ); - TDesC8& UidToDesLC( const TUid& aUid ); - TUid DesToUid ( const TDesC8& aDes ); - TInt DesToInt( const TDesC8& aDes); - TBool HasDrives( TDriveList& aDrive ); - TDesC8& HashToDesLC( const TDesC& aBuf ); - TPtr DesToHashLC( const TDesC8& aDes ); - TBool IsJavaHash( const TDesC8& aDes ); - - TInt ReadOviAccountInfoL( RWriteStream& aAccountInfoStream ); - -// data -private: - CSConPCConnServer& iServer; - - RLibrary iPCDlib; - RLibrary iCSClib; - RLibrary iConMLHandlerLib; - - CSConPCD* iPCDHandler; - CSConCSC* iCSCHandler; - CSConConMLHandler* iConMLHandler; - - RChunk iChunk; - CBufFlat* iBuffer; - TInt iResult; - - CSconFolderLister* iFolderLister; - RFs iFs; - CSconBtEngine* iBtEngine; - }; - -#endif // __SCONPCCONNSERVER_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/src/sconbtengine.cpp --- a/connectivitymodules/SeCon/servers/pcconn/src/sconbtengine.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,415 +0,0 @@ -/* -* Copyright (c) 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: CSconBtEngine implementation -* -*/ - - - -#include -#include - -#include -#include -#include - -#include "sconbtengine.h" -#include "debug.h" - -CSconBtEngine* CSconBtEngine::NewL() - { - TRACE_FUNC; - CSconBtEngine* self = new (ELeave) CSconBtEngine(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -CSconBtEngine::~CSconBtEngine() - { - TRACE_FUNC; - if ( iBtEng ) - { - iBtEng->Cancel(); - delete iBtEng; - } - - delete iBtSettings; - } - -CSconBtEngine::CSconBtEngine() - { - } - -void CSconBtEngine::ConstructL() - { - iBtEng = CBTEngDevMan::NewL( this ); - iBtSettings = CBTEngSettings::NewL( this ); - iState = EIdle; - } - -void CSconBtEngine::ReadBTInfoL( RBufWriteStream& aStream ) - { - TRACE_FUNC_ENTRY; - if ( iState != EIdle ) - { - User::Leave( KErrInUse ); - } - iStream = &aStream; - iOperationError = KErrNone; - - // Write local name (8 bit name length + unicode name) - TBuf<100> localName; - TInt err = iBtSettings->GetLocalName( localName ); - User::LeaveIfError( err ); - LOGGER_WRITE_1("localName: %S", &localName); - iStream->WriteUint8L( localName.Length() ); - iStream->WriteL( localName, localName.Length() ); - - if ( iBtAddress.Length() == 0 ) - { - LOGGER_WRITE("Try to read bt address"); - - CRepository* cenRep = NULL; - // Use TRAP to catch a leave if the CenRep key does not exist. - TRAP( err, cenRep = CRepository::NewL( KCRUidBluetoothLocalDeviceAddress ) ); - CleanupStack::PushL( cenRep ); - if( !err ) - { - err = cenRep->Get( KBTLocalDeviceAddress, iBtAddress ); - LOGGER_WRITE_1("cenRep->Get err: %d", err); - } - CleanupStack::PopAndDestroy( cenRep ); - - if ( err ) - { - iBtAddress.Zero(); - } - } - - // Write bt address (8 bit addr length + unicode address) - if ( iBtAddress.Length() > 0 ) - { - LOGGER_WRITE_1("btAddr: %S", &iBtAddress); - iStream->WriteUint8L( iBtAddress.Length() ); - iStream->WriteL( iBtAddress, iBtAddress.Length() ); - } - else - { - iStream->WriteUint8L( 0 ); - } - - // Write BT Power State (8-bit, 0=Off, 1=On) - TBTPowerStateValue state; - err = iBtSettings->GetPowerState( state ); - User::LeaveIfError( err ); - LOGGER_WRITE_1("PowerState: %d", state); - iStream->WriteUint8L( state ); - - // Get device info - TBTRegistrySearch crit; - crit.FindAll(); - if ( !iBtDevArray ) - { - LOGGER_WRITE("create arr"); - iBtDevArray = new (ELeave) CBTDeviceArray(5); - LOGGER_WRITE("create arr -ok"); - } - else - { - iBtDevArray->ResetAndDestroy(); - } - err = iBtEng->GetDevices( crit, iBtDevArray ); - LOGGER_WRITE_1("GetDevices err: %d", err); - User::LeaveIfError( err ); - iState = ERequestBtInfo; - - // Wait until completed - iWait.Start(); - iState = EIdle; - if ( iOperationError ) - { - LOGGER_WRITE_1("Operation failed, leave %d", iOperationError); - User::Leave( iOperationError ); - } - TRACE_FUNC_EXIT; - } - -void CSconBtEngine::SetBtAuthorizedL( const TDesC& aBtDevAddress, TBool aAuthorized ) - { - TRACE_FUNC_ENTRY; - if ( iState != EIdle ) - { - User::Leave( KErrInUse ); - } - - TBTRegistrySearch crit; - TBTDevAddr addr; - addr.SetReadable( aBtDevAddress ); - crit.FindAddress( addr ); - - if ( !iBtDevArray ) - { - LOGGER_WRITE("create arr"); - iBtDevArray = new (ELeave) CBTDeviceArray(5); - LOGGER_WRITE("create arr -ok"); - } - else - { - iBtDevArray->ResetAndDestroy(); - } - TInt err = iBtEng->GetDevices( crit, iBtDevArray ); - LOGGER_WRITE_1("GetDevices err: %d", err); - User::LeaveIfError( err ); - iState = EChangeAuthorized; - iOperationError = KErrNone; - iAuthorizedValue = aAuthorized; - - // Wait until completed - iWait.Start(); - iState = EIdle; - if ( iOperationError ) - { - LOGGER_WRITE_1("Operation failed, leave %d", iOperationError); - User::Leave( iOperationError ); - - } - - TRACE_FUNC_EXIT; - } - -TInt CSconBtEngine::SetBtPowerState( TBool aPower ) - { - TRACE_FUNC_ENTRY; - if ( iState != EIdle ) - { - return KErrInUse; - } - - TBTPowerStateValue state; - iOperationError = iBtSettings->GetPowerState( state ); - if ( iOperationError ) - { - return iOperationError; - } - else if ( ( aPower && state == EBTPowerOn ) - || ( !aPower && state == EBTPowerOff ) ) - { - // No need to change state - return KErrNone; - } - - state = EBTPowerOff; - if ( aPower ) - { - state = EBTPowerOn; - } - iOperationError = iBtSettings->SetPowerState( state ); - if ( iOperationError ) - { - return iOperationError; - } - iState = EChangeBtState; - - // Wait until completed - iWait.Start(); - - iState = EIdle; - TRACE_FUNC_RET( iOperationError ); - return iOperationError; - } - -TInt CSconBtEngine::SetBtName( const TDesC& aBtName ) - { - LOGGER_WRITE_1("SetBtName aBtName: %S", &aBtName); - TInt err = iBtSettings->SetLocalName( static_cast( aBtName ) ); - TRACE_FUNC_RET( err ); - return err; - } - -// From MBTEngDevManObserver -void CSconBtEngine::HandleDevManComplete( TInt aErr ) - { - TRACE_FUNC; - LOGGER_WRITE_1("aErr: %d", aErr ); - if ( iState == EChangeAuthorized ) - { - if ( iWait.IsStarted() ) - { - iOperationError = aErr; - iWait.AsyncStop(); - } - } - - } - -void CSconBtEngine::HandleGetDevicesComplete( TInt aErr, - CBTDeviceArray* aDeviceArray ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aErr: %d", aErr); - //iBtReqOngoing = EFalse; - if ( iState == ERequestBtInfo ) - { - // Continue to write devices info - TRAP( iOperationError, PrintDevicesL() ); - LOGGER_WRITE_1("PrintDevicesL err: %d", iOperationError); - - if ( iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - } - else if ( iState == EChangeAuthorized ) - { - iOperationError = aErr; - if ( !aErr && aDeviceArray->Count() == 1 ) - { - CBTDevice* btRef = aDeviceArray->At(0); - TBTDeviceSecurity devSec = btRef->GlobalSecurity(); - if ( btRef->IsPaired() && !devSec.Banned() ) - { - LOGGER_WRITE8_1("btAdrr: %S", &btRef->BDAddr().Des() ); - CBTDevice* btDevice = CBTDevice::NewLC( btRef->BDAddr() ); - - btDevice->SetPaired( ETrue ); - - btDevice->SetDeviceNameL( btRef->DeviceName() ); - btDevice->SetFriendlyNameL( btRef->FriendlyName() ); - LOGGER_WRITE8_1("name: %S", &btRef->DeviceName()); - LOGGER_WRITE8_1("FriendlyName: %S", &btRef->FriendlyName()); - - LOGGER_WRITE_1("iAuthorizedValue: %d", iAuthorizedValue); - // Set as authorized and store the device - TBTDeviceSecurity security; - security.SetNoAuthenticate( EFalse ); - security.SetNoAuthorise( iAuthorizedValue ); - security.SetBanned( EFalse ); - - btDevice->SetGlobalSecurity (security ); - - //iOperationError = iBtEng->ModifyDevice(*aDeviceArray->At(0)); - iOperationError = iBtEng->ModifyDevice( *btDevice ); - LOGGER_WRITE_1( "ModifyDevice err: %d", iOperationError ); - CleanupStack::PopAndDestroy( btDevice ); - } - else - { - LOGGER_WRITE("Device was not paired or it's banned") - iOperationError = KErrAccessDenied; - } - } - - // If error occured stop waiting, otherwise continue waiting until - // HandleDevManComplete has been called - if ( iOperationError && iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - } - TRACE_FUNC_EXIT; - } - -void CSconBtEngine::PrintDevicesL() - { - TRACE_FUNC_ENTRY; - // calculate devices count - TInt devCount(0); - - for ( TInt i=0 ; iCount(); i++ ) - { - CBTDevice* device = iBtDevArray->At(i); - // show only paired and banned devices - if ( device->IsPaired() || device->GlobalSecurity().Banned() ) - { - devCount++; - } - } - - // Print info - iStream->WriteUint8L( devCount ); - - for ( TInt i=0 ; iCount(); i++ ) - { - CBTDevice* device = iBtDevArray->At(i); - - const TBTDeviceSecurity btSec = device->GlobalSecurity(); - - // show only paired and banned devices - if ( device->IsPaired() || btSec.Banned() ) - { - LOGGER_WRITE_1("IsValidDeviceName: %d", device->IsValidDeviceName()); - const TDesC8& deviceName = device->DeviceName(); - LOGGER_WRITE8_1("DeviceName: %S", &deviceName ); - iStream->WriteUint8L( deviceName.Length() ); - iStream->WriteL( deviceName, deviceName.Length() ); - - LOGGER_WRITE_1("IsValidFriendlyName: %d", device->IsValidFriendlyName()); - LOGGER_WRITE_1("FriendlyName: %S", &device->FriendlyName() ); - - const TBTDevAddr& addr = device->BDAddr(); - - TBuf<100> readable; - addr.GetReadable( readable ); - LOGGER_WRITE_1("readable addr: %S", &readable); - iStream->WriteUint8L( readable.Length() ); - iStream->WriteL( readable, readable.Length() ); - - LOGGER_WRITE_1("paired: %d", device->IsPaired() ); - LOGGER_WRITE_1("IsValidPaired: %d", device->IsValidPaired() ); - TUint8 paired(0); - if ( device->IsPaired() && device->IsValidPaired() ) - { - paired = 1; - } - iStream->WriteUint8L( paired ); - - TUint8 noAuthorise(0); - if ( btSec.NoAuthorise() ) - { - noAuthorise = 1; - } - iStream->WriteUint8L( noAuthorise ); - - TUint8 banned(0); - if ( btSec.Banned() ) - { - banned = 1; - } - iStream->WriteUint8L( banned ); - - LOGGER_WRITE(""); - } - } - iStream->CommitL(); - iStream = NULL; //delete reference only - TRACE_FUNC_EXIT; - } - -// From MBTEngSettingsObserver -void CSconBtEngine::PowerStateChanged( TBTPowerStateValue /*aState*/ ) - { - TRACE_FUNC; - if ( iState == EChangeBtState && iWait.IsStarted() ) - { - iWait.AsyncStop(); - } - - } - -void CSconBtEngine::VisibilityModeChanged( TBTVisibilityMode /*aState*/ ) - { - TRACE_FUNC; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/src/sconfolderlister.cpp --- a/connectivitymodules/SeCon/servers/pcconn/src/sconfolderlister.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,717 +0,0 @@ -/* -* Copyright (c) 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: CSconFolderLister implementation -* -*/ - - -#include "sconfolderlister.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" - -const TUint16 KFormatVersion( 1 ); - -// Obex package size -const TInt KPackageSize = 65536; - -const TInt KMaxLevelsToSearch = 80; - -_LIT( KSConResourceName, "z:\\Resource\\sconftp.rsc" ); - -CSconFolderEntry* CSconFolderEntry::NewLC() - { - CSconFolderEntry* self = new (ELeave) CSconFolderEntry(); - CleanupStack::PushL( self ); - return self; - } -CSconFolderEntry* CSconFolderEntry::NewLC( const TEntry& aEntry ) - { - CSconFolderEntry* self = new (ELeave) CSconFolderEntry(); - CleanupStack::PushL( self ); - self->ConstructL( aEntry ); - return self; - } -CSconFolderEntry::CSconFolderEntry() - { - } -CSconFolderEntry::~CSconFolderEntry() - { - delete iName; - delete iLabel; - } - - -void CSconFolderEntry::ConstructL( const TEntry& aEntry ) - { - iAtt = aEntry.iAtt; - iModified = aEntry.iModified.Int64(); - iName = aEntry.iName.AllocL(); - } - -CSconFolderLister::CSconFolderLister( RFs& aFs ) : iFs(aFs) - { - // No implementation required - } - -CSconFolderLister::~CSconFolderLister() - { - TRACE_FUNC; - delete iLocalizer; - } - -CSconFolderLister* CSconFolderLister::NewL( RFs& aFs ) - { - TRACE_FUNC_ENTRY; - CSconFolderLister* self = new (ELeave) CSconFolderLister( aFs ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -void CSconFolderLister::ConstructL() - { - TRACE_FUNC_ENTRY; - - iLocalizer = CDirectoryLocalizer::NewL(); - - // set free memory up to critical level for all drives - CRepository* repository = CRepository::NewLC( KCRUidDiskLevel ); - TInt iCriticalLevel(0); - User::LeaveIfError( repository->Get( KDiskCriticalThreshold, iCriticalLevel ) ); - CleanupStack::PopAndDestroy( repository ); - iCriticalLevel += KPackageSize; // add obex package size to critical level - TRACE_FUNC_EXIT; - } - - -void CSconFolderLister::GenerateFolderListL( RBufWriteStream& aStream, const TDesC& aStartPath, - const TInt aLevelsToSearch ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aStartPath: %S", &aStartPath ); - LOGGER_WRITE_1("aLevelsToSearch: %d", aLevelsToSearch ); - TInt levelsToSearch = aLevelsToSearch; - if ( levelsToSearch > KMaxLevelsToSearch || levelsToSearch == KErrNotFound ) - levelsToSearch = KMaxLevelsToSearch; - iFolders = 0; - iFiles = 0; - const TInt KDriveNameLength( 3 ); - - if ( aStartPath.CompareF( _L("\\") ) == 0 ) - { - LOGGER_WRITE("List all drives"); - aStream.WriteUint16L( KFormatVersion ); - ListAllDrivesL( aStream, levelsToSearch ); - } - else if ( aStartPath.Length() >= KDriveNameLength ) - { - if ( aStartPath.Length() > KDriveNameLength ) - { - // check root path permissions, is listing allowed - TPtrC path = aStartPath.Mid(KDriveNameLength); - LOGGER_WRITE_1("pathFromRoot: %S", &path); - TInt pathEndMark = path.Locate(TChar('\\')); - if ( pathEndMark == KErrNotFound ) - { - User::Leave( KErrArgument ); - } - //"private\" locate = 7" - TPtrC pathName = aStartPath.Left( KDriveNameLength+pathEndMark ); - LOGGER_WRITE_1("pathName: %S", &path); - TEntry pathEntry; - User::LeaveIfError( iFs.Entry(pathName, pathEntry) ); - - TBool printable = IsDirectoryPrintable( aStartPath.Left(3), pathEntry ); - if ( !printable ) - { - // access denied - LOGGER_WRITE("Access denied!"); - User::Leave( KErrAccessDenied ); - } - User::LeaveIfError( iFs.Entry(aStartPath, pathEntry) ); - if ( pathEntry.IsSystem() ) - { - // access denied - LOGGER_WRITE("System folder, Access denied!"); - User::Leave( KErrAccessDenied ); - } - } - - - aStream.WriteUint16L( KFormatVersion ); - - TInt drive; - User::LeaveIfError( iFs.CharToDrive( aStartPath[0], drive) ); - ListDriveAndPathL( aStream, drive, aStartPath, levelsToSearch); - - } - else - { - LOGGER_WRITE("aStartPath KErrArgument"); - User::Leave( KErrArgument ); - } - - - LOGGER_WRITE_1("iFolders: %d", iFolders); - LOGGER_WRITE_1("iFiles: %d", iFiles); - TRACE_FUNC_EXIT; - } - -void CSconFolderLister::ListAllDrivesL( RBufWriteStream& aStream, const TInt aLevelsToSearch ) - { - TRACE_FUNC_ENTRY; - TInt devDriveCount = 0; - TInt mmcDriveCount = 0; - TChar driveLetter; - TBuf8<1> driveBuf; - RArray sconDriveInfo(5); - - // Write all drives to folderlisting object - TDriveList driveList; - // Get all drives that are visible to the user. - TInt driveCount; - User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount ) ); - - for( TInt i = EDriveA; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, i, driveStatus ) ); - //LOGGER_WRITE_1( "DriveInfo for drive: %d", i); - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt - || (driveStatus & DriveInfo::EDriveRemote) ) - { - //LOGGER_WRITE_1( "skip drive %d", i); - continue; - } - - User::LeaveIfError( iFs.DriveToChar( i, driveLetter ) ); - //Letter to uppercase form. - driveLetter.UpperCase(); - - TSconDriveInfo info; - info.iDriveStatus = driveStatus; - info.iDriveLetter.Zero(); - info.iDriveLetter.Append( driveLetter ); - info.iDriveLetter.Append( _L(":") ); - - - info.iDriveAttr = KEntryAttNormal; // ReadWrite - - if( driveStatus & DriveInfo::EDriveInternal && devDriveCount==0 ) - { - //permission always R for first internal drive - info.iDriveAttr = KEntryAttReadOnly; - } - - //memory type - if( driveStatus & DriveInfo::EDriveInternal ) - { - LOGGER_WRITE( "DriveInfo::EDriveInternal" ); - devDriveCount++; - info.iDriveType = DriveInfo::EDriveInternal; // =1 - info.iDriveTypeCount = devDriveCount; - - } - else if( driveStatus & DriveInfo::EDriveRemovable ) - { - LOGGER_WRITE( "DriveInfo::EDriveRemovable" ); - mmcDriveCount++; - info.iDriveType = DriveInfo::EDriveRemovable;; // =2 - info.iDriveTypeCount = mmcDriveCount; - } - - TVolumeInfo volumeInfo; - User::LeaveIfError( iFs.Volume( volumeInfo, i) ); - - info.iVolumeName = volumeInfo.iName; - if ( volumeInfo.iFree > iCriticalLevel ) - { - volumeInfo.iFree = volumeInfo.iFree - iCriticalLevel; - } - else - { - volumeInfo.iFree = 0; - } - - info.iFree = volumeInfo.iFree; - info.iSize = volumeInfo.iSize; - - - sconDriveInfo.AppendL( info ); - - } - } - - LOGGER_WRITE_1("Drives: %d", sconDriveInfo.Count()); - aStream.WriteUint8L( sconDriveInfo.Count() ); - for ( TInt i=0; i < sconDriveInfo.Count(); i++ ) - { - - TBuf<3> path(KNullDesC); - path.Copy(sconDriveInfo[i].iDriveLetter); - path.Append(_L("\\")); - - ExportDriveL( aStream, sconDriveInfo[i], path, aLevelsToSearch); - } - sconDriveInfo.Close(); - TRACE_FUNC_EXIT; - } - -void CSconFolderLister::ListDriveAndPathL( RBufWriteStream& aStream, TInt aDrive, const TDesC& aStartPath, const TInt aLevelsToSearch ) - { - TRACE_FUNC_ENTRY; - TVolumeInfo volumeInfo; - User::LeaveIfError( iFs.Volume(volumeInfo, aDrive) ); - TInt driveCount(0); - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, aDrive, driveStatus ) ); - GetDriveTypeNumberL( aDrive, driveStatus, driveCount ); - - - TSconDriveInfo info; - info.iDriveLetter.Copy( aStartPath.Left(2) ); - info.iVolumeName = volumeInfo.iName; - - info.iDriveAttr = KEntryAttNormal; // ReadWrite - if( driveStatus & DriveInfo::EDriveInternal && driveCount==0 ) - { - //permission always R for first internal drive - info.iDriveAttr = KEntryAttReadOnly; - } - info.iDriveType = 0; - if( driveStatus & DriveInfo::EDriveInternal ) - { - info.iDriveType = DriveInfo::EDriveInternal; // =1 - } - else if( driveStatus & DriveInfo::EDriveRemovable ) - { - info.iDriveType = DriveInfo::EDriveRemovable;; // =2 - } - - if ( volumeInfo.iFree > iCriticalLevel ) - { - volumeInfo.iFree = volumeInfo.iFree - iCriticalLevel; - } - else - { - volumeInfo.iFree = 0; - } - - info.iFree = volumeInfo.iFree; - info.iSize = volumeInfo.iSize; - - aStream.WriteUint8L( 1 ); - ExportDriveL( aStream, info, aStartPath, aLevelsToSearch); - - TRACE_FUNC_EXIT; - } - -void CSconFolderLister::ExportDriveL( RBufWriteStream& aStream, const TSconDriveInfo& aDriveInfo, - const TDesC& aPathName, const TInt aLevelsToSearch ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("Drive: %S", &aDriveInfo.iDriveLetter); - LOGGER_WRITE_1("aLevelsToSearch: %d", aLevelsToSearch ); - - CSconFolderEntry* driveEntry = CSconFolderEntry::NewLC(); - driveEntry->iName = aDriveInfo.iDriveLetter.AllocL(); - - if ( driveEntry->iLabel ) - { - LOGGER_WRITE_1("Label: %S", &driveEntry->iLabel->Des()); - } - driveEntry->iAtt = aDriveInfo.iDriveAttr; - - driveEntry->iDriveInfoEntryExists = ETrue; - driveEntry->iDriveInfoEntry.iDriveType = aDriveInfo.iDriveType; - driveEntry->iDriveInfoEntry.iDriveTypeCount = aDriveInfo.iDriveTypeCount; - - driveEntry->iDriveInfoEntry.iFree = aDriveInfo.iFree; - driveEntry->iDriveInfoEntry.iSize = aDriveInfo.iSize; - - driveEntry->iLabel = aDriveInfo.iVolumeName.AllocL(); - GetLocalizedVolumeNameL( *driveEntry ); - - ExportPathL( aStream, aPathName, *driveEntry, ETrue, aLevelsToSearch ); - CleanupStack::PopAndDestroy( driveEntry ); - TRACE_FUNC_EXIT; - } - -void CSconFolderLister::GetLocalizedVolumeNameL( CSconFolderEntry& aDriveEntry ) - { - TRACE_FUNC_ENTRY; - // Get localized names - if ( aDriveEntry.iDriveInfoEntry.iDriveType == DriveInfo::EDriveInternal - && aDriveEntry.iDriveInfoEntry.iDriveTypeCount > 1 ) - { - LOGGER_WRITE("Internal mass memory"); - // internal second memory (Mass memory) - TFileName file( KSConResourceName ); - BaflUtils::NearestLanguageFile( iFs, file ); - - CStringResourceReader* reader = CStringResourceReader::NewL( file ); - if ( aDriveEntry.iLabel ) - { - delete aDriveEntry.iLabel; - aDriveEntry.iLabel = NULL; - } - aDriveEntry.iLabel = reader->ReadResourceString( R_SECON_VALUE_MASS_STORAGE ).AllocL(); - delete reader; - } - else if ( aDriveEntry.iLabel && aDriveEntry.iLabel->Length()>0 ) - { - LOGGER_WRITE("Use normal volume label"); - - } - else - { - TFileName file( KSConResourceName ); - BaflUtils::NearestLanguageFile( iFs, file ); - CStringResourceReader* reader = CStringResourceReader::NewL( file ); - if (aDriveEntry.iLabel) - { - delete aDriveEntry.iLabel; - aDriveEntry.iLabel = NULL; - } - if ( aDriveEntry.iDriveInfoEntry.iDriveType == DriveInfo::EDriveRemovable ) - { - LOGGER_WRITE("EDriveRemovable"); - // read default MMC name - aDriveEntry.iLabel = reader->ReadResourceString( R_SECON_VALUE_MMC ).AllocL(); - } - else - { - LOGGER_WRITE("EDriveInternal"); - // read default DEV name - aDriveEntry.iLabel = reader->ReadResourceString( R_SECON_VALUE_DEVICE ).AllocL(); - } - delete reader; - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSconFolderLister::GetDriveTypeNumberL() -// -// ----------------------------------------------------------------------------- -// -void CSconFolderLister::GetDriveTypeNumberL( TInt aDrive, TUint aDriveStatus , TInt& aTypeNumber) - { - TRACE_FUNC_ENTRY; - aTypeNumber = 0; - - //TUint driveStatus; - // - // if true, search internal drives, else search removable drives - TBool searchInternalDrives = (aDriveStatus & DriveInfo::EDriveInternal); - - TInt driveCount; - TDriveList driveList; - - User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount ) ); - - for( TInt i = EDriveA; i <= aDrive; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, i, driveStatus ) ); - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt ) - { - LOGGER_WRITE( "not present or corrupted" ); - continue; - } - - if( driveStatus & DriveInfo::EDriveInternal ) - { - if( searchInternalDrives ) - { - aTypeNumber++; - } - } - else if( driveStatus & DriveInfo::EDriveRemovable ) - { - if( !searchInternalDrives ) - { - aTypeNumber++; - } - } - } - } - TRACE_FUNC_EXIT; - } - - -void CSconFolderLister::ExportPathL( RBufWriteStream& aStream, const TDesC& aPathName, - const CSconFolderEntry& aEntry, const TBool aLocalize, const TInt aLevelsToSearch ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aPathName: %S", &aPathName ); - LOGGER_WRITE_1("aLevelsToSearch: %d", aLevelsToSearch ); - - LOGGER_WRITE_1("aEntry.iName: %S", &aEntry.iName->Des() ); - - TBool localized(EFalse); - - // foldername length + name - aStream.WriteUint8L( aEntry.iName->Length() ); - aStream.WriteL( aEntry.iName->Des() ); - - TUint att = aEntry.iAtt; - - if ( aEntry.iLabel && aEntry.iLabel->Length() > 0 ) - { - aStream.WriteUint8L( aEntry.iLabel->Length() ); - aStream.WriteL( aEntry.iLabel->Des() ); - } - else - { - if ( aLocalize ) - { - // initialize Localizer - iLocalizer->SetFullPath( aPathName ); - localized = iLocalizer->IsLocalized(); - } - - if( localized ) - { - const TDesC& localizedName = iLocalizer->LocalizedName(); - aStream.WriteUint8L( localizedName.Length() ); - aStream.WriteL( localizedName ); - LOGGER_WRITE_1("LocalizedName: %S", &localizedName ); - } - else if ( aPathName.CompareF(_L("C:\\Data\\")) == 0 ) - { - TFileName file( KSConResourceName ); - - BaflUtils::NearestLanguageFile( iFs, file ); - - CStringResourceReader* reader = CStringResourceReader::NewL( file ); - CleanupStack::PushL( reader ); - - const TDesC& localizedName = reader->ReadResourceString( R_SECON_DATA_FOLDER ); - aStream.WriteUint8L( localizedName.Length() ); - aStream.WriteL( localizedName ); - LOGGER_WRITE_1("LocalizedName: %S", &localizedName ); - - CleanupStack::PopAndDestroy( reader ); - localized = ETrue; - } - else - { - aStream.WriteUint8L( 0 ); - } - // attributes - if ( localized ) - { - // localized folder, set readonly flag - att = att | KEntryAttReadOnly; - } - } - - if ( aPathName.Length() == 3 && aLocalize ) - { - // enable subfolder localization, even when root cannot be localized - localized = ETrue; - } - - // DriveInfoEntry - if ( aEntry.iDriveInfoEntryExists ) - { - aStream.WriteUint8L( 1 ); - aStream.WriteUint8L( aEntry.iDriveInfoEntry.iDriveType ); - aStream.WriteUint8L( aEntry.iDriveInfoEntry.iDriveTypeCount ); - aStream << aEntry.iDriveInfoEntry.iFree; - aStream << aEntry.iDriveInfoEntry.iSize; - } - else - { - aStream.WriteUint8L( 0 ); - } - - - // modified time - TDateTime time = aEntry.iModified.DateTime(); - aStream.WriteInt16L( time.Year() ); - aStream.WriteInt8L( time.Month()+1 ); // range 1...12 - aStream.WriteInt8L( time.Day()+1 ); - aStream.WriteInt8L( time.Hour() ); - aStream.WriteInt8L( time.Minute() ); - aStream.WriteInt8L( time.Second() ); - - // write attribute - aStream.WriteUint32L( att ); - - - if ( aLevelsToSearch == 0 ) - { - // don't list directory content - LOGGER_WRITE("Not listing directory content"); - aStream.WriteInt16L( 0 ); // files count - aStream.WriteInt16L( 0 ); // directory count - return; - } - - CDir *fileList = 0; - CDir *dirList = 0; - - // show normal and hidden files and folders - TUint entryAttMask = KEntryAttNormal | KEntryAttHidden; - - // get folders and files - TInt err = iFs.GetDir( aPathName, entryAttMask, ESortByName, - fileList, dirList ); - - if ( err ) - { - LOGGER_WRITE_1( "ParseFolderListL GetDir returned: %d", err ); - User::Leave( err ); - } - - CleanupStack::PushL( dirList ); - CleanupStack::PushL( fileList ); - - - LOGGER_WRITE_1("files: %d", fileList->Count()); - aStream.WriteUint16L( fileList->Count() ); - - // Print files to folder listing object - for( TInt i = 0; i < fileList->Count(); i++ ) - { - const TEntry& fileEntry = ( *fileList )[i]; - iFiles++; - LOGGER_WRITE_1("fileEntry.iName: %S", &fileEntry.iName); - // filename length + name - aStream.WriteUint8L( fileEntry.iName.Length() ); - aStream.WriteL( fileEntry.iName ); - - // modified time - TDateTime time = fileEntry.iModified.DateTime(); - aStream.WriteInt16L( time.Year() ); - aStream.WriteInt8L( time.Month()+1 ); // range 1...12 - aStream.WriteInt8L( time.Day()+1 ); - aStream.WriteInt8L( time.Hour() ); - aStream.WriteInt8L( time.Minute() ); - aStream.WriteInt8L( time.Second() ); - - // attributes - aStream.WriteUint32L( fileEntry.iAtt ); - - // file size - aStream.WriteUint32L( fileEntry.iSize ); - } - CleanupStack::PopAndDestroy( fileList ); - - - // calculate ow many directories we are going to list - TInt directoryCount(0); - for( TInt i = 0; i < dirList->Count(); i++ ) - { - if ( IsDirectoryPrintable(aPathName, ( *dirList )[i] ) ) - { - directoryCount++; - } - } - LOGGER_WRITE_1("directories: %d", directoryCount); - aStream.WriteUint16L( directoryCount ); - - HBufC* fullpath = HBufC::NewL( KMaxPath ); - TPtr fullpathPtr = fullpath->Des(); - CleanupStack::PushL( fullpath ); - - // Print folders to folder listing object - for( TInt i = 0; i < dirList->Count(); i++ ) - { - const TEntry& folderEntry = ( *dirList )[i]; - if ( !IsDirectoryPrintable(aPathName, folderEntry) ) - { - continue; - } - iFolders++; - - fullpathPtr.Copy( aPathName ); - fullpathPtr.Append( folderEntry.iName ); - fullpathPtr.Append( _L("\\") ); - CSconFolderEntry* subFolderEntry = CSconFolderEntry::NewLC( folderEntry ); - if ( aLevelsToSearch == KErrNotFound ) - { - ExportPathL( aStream, fullpathPtr, *subFolderEntry, localized, aLevelsToSearch); - } - else - { - ExportPathL( aStream, fullpathPtr, *subFolderEntry, localized, aLevelsToSearch-1); - } - CleanupStack::PopAndDestroy( subFolderEntry ); - } - CleanupStack::PopAndDestroy( fullpath ); - CleanupStack::PopAndDestroy( dirList ); - - TRACE_FUNC_EXIT; - } -TBool CSconFolderLister::IsDirectoryPrintable( const TDesC& aParentPath, const TEntry& aFolderEntry ) - { - if ( aFolderEntry.IsSystem() ) - { - LOGGER_WRITE_1("folder '%S' was system folder", &aFolderEntry.iName); - return EFalse; - } - if ( aParentPath.Length() == 3 ) - { - if ( aParentPath.FindF(_L("C:\\")) == 0 && aFolderEntry.iName.CompareF(_L("data")) != 0 ) - { - // C root not visible, exept Data folder - LOGGER_WRITE_1("folder '%S' not visible to user in c-root", &aFolderEntry.iName); - return EFalse; - } - - if ( aFolderEntry.iName.CompareF(_L("private")) == 0 ) - { - LOGGER_WRITE_1("folder '%S' not visible to user", &aFolderEntry.iName); - return EFalse; - } - else if ( aFolderEntry.iName.CompareF(_L("sys")) == 0 ) - { - LOGGER_WRITE_1("folder '%S' not visible to user", &aFolderEntry.iName); - return EFalse; - } - else if ( aFolderEntry.iName.CompareF(_L("system")) == 0 ) - { - LOGGER_WRITE_1("folder '%S' not visible to user", &aFolderEntry.iName); - return EFalse; - } - else if ( aFolderEntry.iName.CompareF(_L("resource")) == 0 ) - { - LOGGER_WRITE_1("folder '%S' not visible to user", &aFolderEntry.iName); - return EFalse; - } - } - return ETrue; - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/src/sconimsireader.cpp --- a/connectivitymodules/SeCon/servers/pcconn/src/sconimsireader.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* Copyright (c) 2009-2010 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: CSconImsiReader implementation -* -*/ - - -#include "sconimsireader.h" -#include "debug.h" - -TInt CSconImsiReader::GetImsiL( TDes& aImsi ) - { - TRACE_FUNC_ENTRY; - CTelephony::TRegistrationStatus temp; - CSconImsiReader* self = new (ELeave) CSconImsiReader(aImsi, temp); - CleanupStack::PushL(self); - self->ConstructL(); - - self->RequestImsi(); - - TInt err = self->iStatus.Int(); - CleanupStack::PopAndDestroy(self); - TRACE_FUNC_RET(err); - return err; - } - -TInt CSconImsiReader::GetNetworkStatusL( CTelephony::TRegistrationStatus& aRegistrationStatus ) - { - TRACE_FUNC_ENTRY; - TBuf temp; - CSconImsiReader* self = new (ELeave) CSconImsiReader(temp, aRegistrationStatus); - CleanupStack::PushL(self); - self->ConstructL(); - - self->RequestNetworkStatus(); - - TInt err = self->iStatus.Int(); - CleanupStack::PopAndDestroy(self); - TRACE_FUNC_RET(err); - return err; - } - -void CSconImsiReader::ConstructL() - { - TRACE_FUNC_ENTRY; - iTelephony = CTelephony::NewL(); - CActiveScheduler::Add(this); - TRACE_FUNC_EXIT; - } - -void CSconImsiReader::RequestImsi() - { - iImsiReaderStatus = ERequestingImsi; - iTelephony->GetSubscriberId(iStatus,iSubscriberIdV1Pckg); - SetActive(); - CActiveScheduler::Start(); - } - -void CSconImsiReader::RequestNetworkStatus() - { - iImsiReaderStatus = ERequestingNetworkStatus; - iTelephony->GetNetworkRegistrationStatus(iStatus, iNetworkRegistrationV1Pckg); - SetActive(); - CActiveScheduler::Start(); - } - -CSconImsiReader::~CSconImsiReader() - { - TRACE_FUNC_ENTRY; - delete iTelephony; - TRACE_FUNC_EXIT; - } - -CSconImsiReader::CSconImsiReader(TDes& aImsi, CTelephony::TRegistrationStatus& aRegistrationStatus): CActive(EPriorityStandard), - iImsi(aImsi), iNetworkStatus(aRegistrationStatus), iSubscriberIdV1Pckg(iSubscriberIdV1), iNetworkRegistrationV1Pckg(iNetworkRegistrationV1) - { - } - -void CSconImsiReader::RunL() - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("iStatus: %d", iStatus.Int() ); - if ( iStatus == KErrNone ) - { - if ( iImsiReaderStatus == ERequestingImsi ) - { - iImsi = iSubscriberIdV1.iSubscriberId; - LOGGER_WRITE_1("iImsi: %S", &iImsi); - } - else if ( iImsiReaderStatus == ERequestingNetworkStatus ) - { - iNetworkStatus = iNetworkRegistrationV1.iRegStatus; - LOGGER_WRITE_1( "iNetworkStatus: %d", (TInt)iNetworkStatus); - } - } - CActiveScheduler::Stop(); - TRACE_FUNC_EXIT; - } - -void CSconImsiReader::DoCancel() - { - TRACE_FUNC_ENTRY; - if ( iImsiReaderStatus == ERequestingImsi ) - { - iTelephony->CancelAsync( CTelephony::EGetSubscriberIdCancel ); - } - else if ( iImsiReaderStatus == ERequestingNetworkStatus ) - { - iTelephony->CancelAsync( CTelephony::EGetNetworkRegistrationStatusCancel ); - } - TRACE_FUNC_EXIT; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/pcconn/src/sconpcconnserver.cpp --- a/connectivitymodules/SeCon/servers/pcconn/src/sconpcconnserver.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3028 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: PC Connectivity server -* -*/ - - -#include // For RMemReadStream -#include -#include -#include - -#include "sconpcconnclientserver.h" -#include "sconpcconnserver.h" -#include "sconpcd.h" -#include "sconcsc.h" -#include "sconconmlhandler.h" -#include "sconimsireader.h" -#include "sconoviaccounthandler.h" -#include "sconfolderlister.h" -#include "sconbtengine.h" -#include "debug.h" - -#ifdef DEBUG_XML -#include -_LIT8( KTimeFormat, "%02d:%02d:%02d.%03d" ); -_LIT8( KXmlBegin, "\nXML:\n" ); -#endif - -_LIT( KSCONGetMetadataRequest, "METADATA:" ); -_LIT8( KSCONSyncRequest, "SYNC:" ); -_LIT( KSCONReadImsi, "READIMSI"); -_LIT( KSCONReadNetworkInfo, "READNETWORKINFO"); -_LIT( KSCONReadOviAccount, "READOVIACCOUNT"); -_LIT( KSCONListPath, "LISTP:"); -_LIT( KSCONReadBtInfo, "READBTINFO" ); -_LIT( KSCONSetBtPower, "SETBTPOWER:" ); -_LIT( KSCONSetBtName, "SETBTNAME:" ); -_LIT( KSCONSetBtAuthorized, "SETBTAUTHORIZED:" ); - -//------------------------------------------------------------ -// Global functions -//------------------------------------------------------------ - -// ----------------------------------------------------------------------------- -// E32Main() -// Entry point -// ----------------------------------------------------------------------------- -// -TInt E32Main() - { - TRACE_FUNC_ENTRY; - __UHEAP_MARK; - TInt error( KErrNone ); - error = CSConPCConnServer::RunServer(); - __UHEAP_MARKEND; - TRACE_FUNC_EXIT; - return error; - } - -// ----------------------------------------------------------------------------- -// PanicServer() -// Panics the server with panic reason aPanic -// ----------------------------------------------------------------------------- -// -GLDEF_C void PanicServer(TPCConnServPanic aPanic) - { - LOGGER_WRITE_1( "CSConPCConnSession::PanicServer() : Panic code %d", aPanic ); - _LIT(KTxtServerPanic,"PCConn server panic"); - User::Panic(KTxtServerPanic,aPanic); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::CSConPCConnServer () -// Default constructor - can not leave -// ----------------------------------------------------------------------------- -// -CSConPCConnServer::CSConPCConnServer () : CServer2( EPriorityStandard) - { - LOGGER_WRITE( "* * * * CSConPCConnServer * * * *" ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::~CSConPCConnServer() -// Default destructor -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConPCConnServer::~CSConPCConnServer() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::NewLC() -// Creates a new instance of CSConPCConnServer -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConPCConnServer* CSConPCConnServer::NewLC() - { - TRACE_FUNC_ENTRY; - CSConPCConnServer* self = new (ELeave) CSConPCConnServer(); - CleanupStack::PushL( self ); - self->StartL( KSConPCConnServerName ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::NewSessionL() -// Creates a new session to the client -// ----------------------------------------------------------------------------- -// -CSession2* CSConPCConnServer::NewSessionL( - const TVersion &aVersion, const RMessage2& /*aMessage*/ ) const - { - TRACE_FUNC_ENTRY; - - // check version - TVersion version( KSConPCConnServerVersionMajor, - KSConPCConnServerVersionMinor, - KSConPCConnServerVersionBuild); - - if (!User::QueryVersionSupported(version, aVersion)) - { - User::Leave(KErrNotSupported); - } - - // check client identity - RThread client; - Message().Client( client ); - TSecureId clientId = client.SecureId(); - - if ( clientId != KSConPCConnClientSecureId ) - { - LOGGER_WRITE( "CSConPCConnServer::NewSessionL() : Secure ID does not match" ); -#ifndef __WINS__ - LOGGER_WRITE( "Leave KErrAccessDenied"); - User::Leave( KErrAccessDenied ); -#else - // does not leave on WINS environment. Easier to run module tests. - LOGGER_WRITE( "Not leaving on WINS environment" ); -#endif - } - - TRACE_FUNC_EXIT; - return CSConPCConnSession::NewL( *CONST_CAST( CSConPCConnServer*, this)); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::RunServer() -// Starts the server -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnServer::RunServer() - { - TRACE_FUNC_ENTRY; - - CTrapCleanup* cleanup = CTrapCleanup::New(); - TInt ret = KErrNoMemory; - if( cleanup ) - { - TRAP( ret, CSConPCConnServer::RunServerL( ) ); - delete cleanup; - } - if( ret != KErrNone ) - { - // Signal the client that server creation failed - RProcess::Rendezvous( ret ); - } - TRACE_FUNC_EXIT; - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::RunServerL() -// Starts the server -// ----------------------------------------------------------------------------- -// -void CSConPCConnServer::RunServerL() - { - // Create and install the active scheduler we need - TRACE_FUNC_ENTRY; - CActiveScheduler *as=new (ELeave)CActiveScheduler; - CleanupStack::PushL( as ); - CActiveScheduler::Install( as ); - - // Create server - CSConPCConnServer* server = CSConPCConnServer::NewLC(); - - // Initialisation complete, now signal the client - User::LeaveIfError( RThread().RenameMe( KSConPCConnServerName ) ); - RProcess::Rendezvous( KErrNone ); - - // Ready to run - CActiveScheduler::Start(); - - // Cleanup the scheduler - CleanupStack::PopAndDestroy( 2, as ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::IncSessionCount() -// Increments session count -// ----------------------------------------------------------------------------- -// -void CSConPCConnServer::IncSessionCount() - { - TRACE_FUNC_ENTRY; - iSessionCount++; - LOGGER_WRITE_1( "There are now %d sessions", iSessionCount ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnServer::DecSessionCount() -// Decrements session count -// ----------------------------------------------------------------------------- -// -void CSConPCConnServer::DecSessionCount() - { - TRACE_FUNC_ENTRY; - iSessionCount--; - LOGGER_WRITE_1( "There are still %d sessions", iSessionCount ); - if ( iSessionCount < 1 ) - { - Cancel(); - CActiveScheduler::Stop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::CSConPCConnSession() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConPCConnSession::CSConPCConnSession ( - CSConPCConnServer& aServer ) : iServer (aServer) - { - TRACE_FUNC_ENTRY; - iServer.IncSessionCount(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::CSConPCConnSession() -// Default destructor - frees resources -// ----------------------------------------------------------------------------- -// -CSConPCConnSession::~CSConPCConnSession() - { - TRACE_FUNC_ENTRY; - - iServer.DecSessionCount(); - - if ( iConMLHandler ) - { - delete iConMLHandler; - iConMLHandler = NULL; - iConMLHandlerLib.Close(); - } - - if ( iPCDHandler ) - { - delete iPCDHandler; - iPCDHandler = NULL; - iPCDlib.Close(); - } - - if ( iCSCHandler ) - { - delete iCSCHandler; - iCSCHandler = NULL; - iCSClib.Close(); - } - - if ( iBuffer ) - { - delete iBuffer; - iBuffer = NULL; - } - - iChunk.Close(); - delete iFolderLister; - - iFs.Close(); - - delete iBtEngine; - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::NewL() -// Creates a new instance of CSConPCConnSession -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConPCConnSession *CSConPCConnSession::NewL( - CSConPCConnServer& aServer) - { - TRACE_FUNC_ENTRY; - CSConPCConnSession* self = new ( ELeave ) CSConPCConnSession(aServer); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::ConstructL() -// 2nd phase constructor -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::ConstructL() - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - iResult = KErrNone; - - User::LeaveIfError( iFs.Connect() ); - -#ifdef DEBUG_XML - // create log file - - RFile file; - TInt err = file.Create ( iFs, KSConConMLDebugFile, EFileWrite ); - if( err == KErrNone ) - { - // file created, close it - file.Close(); - } -#endif - - // initialize buffer - iBuffer = CBufFlat::NewL ( KSConPCConnBufferMaxSize ); - - // load handlers - if ( !iPCDHandler ) - { - TRAP( ret, LoadPCDDllL() ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "CSConPCConnSession::ConstructL() : PCD load failed with error code %d", ret ); - User::Leave( ret ); - } - } - - if ( !iCSCHandler ) - { - TRAP( ret, LoadCSCDllL() ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "CSConPCConnSession::ConstructL() : CSC dll load failed with error code %d", ret ); - User::Leave ( ret ); - } - } - - // Load parser - if ( !iConMLHandler ) - { - TRAPD( ret, LoadConMLHandlerDllL() ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "CSConPCConnSession::ConstructL() : Parser dll load failed with error code %d", ret ); - User::Leave ( ret ); - } - } - - iFolderLister = CSconFolderLister::NewL( iFs ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::ServiceL() -// Gets the client's request -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::ServiceL( const RMessage2 &aMessage) - { - TRACE_FUNC_ENTRY; - TRAPD(err,DispatchRequestL(aMessage) ); - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "CSConPCConnSession::ServiceL() : leave code %d", err ); - PanicServer( E_DispatchRequest ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::DispatchRequestL() -// Identifies an IPC command from the client -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::DispatchRequestL(const RMessage2 &aMessage) - { - TRACE_FUNC_ENTRY; - - TInt ret (KErrNone); - - switch (aMessage.Function()) - { - case EPutMessage: - LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EPutMessage" ); - ret = HandlePutMessageL(); - break; - - case EGetMessage: - LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EGetMessage" ); - ret = HandleGetMessageL(); - break; - - case EResetMessage: - LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EResetMessage" ); - ret = HandleResetMessage(); - break; - - case EChunkMessage: - LOGGER_WRITE( "CSConPCConnSession::DispatchRequestL() : EChunkMessage" ); - ret = HandleChunkMessage( aMessage ); - break; - - default: - PanicServer (E_BadRequest); - break; - } - - aMessage.Complete( ret ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::HandlePutMessageL() -// Handles a PUT -type message from the client -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::HandlePutMessageL() - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL() : begin : Heap count : %d", User::Heap().Count() ); - TInt ret ( KErrNone ); - - if ( !iPCDHandler ) - { - TRAP( ret, LoadPCDDllL() ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL (): PCD dll load failed with error code %d", ret ); - return ( ret ); - } - } - - if ( ! iConMLHandler ) - { - TRAP ( ret, LoadConMLHandlerDllL() ); - if ( ret != KErrNone ) - { - LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL (): ConML Handler dll load failed with error code %d", ret ); - return ( ret ); - } - } - - TInt length ( 0 ); - - RMemReadStream buf( iChunk.Base(), iChunk.Size() ); - - - iBuffer->Reset(); - - length = buf.ReadInt32L(); - HBufC8* name8 = HBufC8::NewLC( length ); - TPtr8 namePtr8 = name8->Des(); - buf.ReadL( namePtr8, length); - - const TUint8* ptr8 = namePtr8.Ptr(); - const TUint16* ptr16 = reinterpret_cast( ptr8 ); - TPtrC namePtr; - namePtr.Set( ptr16, length/2 ); - - length = buf.ReadInt32L(); - HBufC8* type = HBufC8::NewLC( length ); - TPtr8 typePtr = type->Des(); - buf.ReadL( typePtr, length); - - // WBXML Document - length = buf.ReadInt32L(); - HBufC8* data = HBufC8::NewLC( length ); - TPtr8 dataPtr = data->Des(); - - buf.ReadL( dataPtr, length ); - iBuffer->ResizeL( length ); - iBuffer->Write( 0, dataPtr ); - - buf.Close(); - -#ifdef DEBUG_XML - - RFile file; - if ( file.Open( iFs, KSConConMLDebugFile, EFileWrite ) == KErrNone ) - { - RFileWriteStream fws; - TInt fileSize; - file.Size( fileSize ); - - TTime now; - now.HomeTime(); - TDateTime time = now.DateTime(); - TBuf8<16> timeLine; - timeLine.Format (KTimeFormat, time.Hour(), time.Minute(), - time.Second(), time.MicroSecond() ); - - fws.Attach( file, fileSize ); - fws.PushL(); - fws.WriteL( timeLine ); - _LIT8( KPutMessage, "__________PUT-MESSAGE \nWBXML:\n" ); - fws.WriteL( KPutMessage ); - fws.WriteL( iBuffer->Ptr(0), iBuffer->Size() ); - TRAP_IGNORE( fws.CommitL() ); - fws.Close(); - - CleanupStack::PopAndDestroy( &fws ); - } - file.Close(); -#endif - if ( ( ( typePtr.CompareC( KSConPCDWBXMLObjectType)== KErrNone ) || - ( typePtr.CompareC( KSConPCDWBXMLObjectType2 )== KErrNone ) ) - && namePtr8.Find(KSCONSyncRequest) == 0 ) - { - LOGGER_WRITE_1("Sync request: %S", &namePtr); - RBufReadStream stream( *iBuffer ); - - CleanupClosePushL( stream ); - TRAP( ret, iPCDHandler->HandlePutSyncRequestL( namePtr8, stream )); - if ( ret ) - { - LOGGER_WRITE_1("HandlePutSyncRequestL() Leaved with %d", ret); - } - - CleanupStack::PopAndDestroy( &stream ); - } - else if ( ( typePtr.Compare( KSConPCDWBXMLObjectType ) == KErrNone) || - ( typePtr.Compare( KSConPCDWBXMLObjectType2 )== KErrNone) ) - { - LOGGER_WRITE( "CSConPCConnSession::HandlePutMessageL() : Object type PCD " ); - TRAPD( err, ret = iConMLHandler->ParseDocumentL( *iBuffer, this ) ); - if ( err != KErrNone ) - { - ret = err; - } - if ( ret == KErrNone ) - { - // Possible error code returned from PCCS - ret = iResult; - } - } - else - { - LOGGER_WRITE( "Object type not regognized " ); - ret = KErrNotSupported; - } - CleanupStack::PopAndDestroy( data ); - CleanupStack::PopAndDestroy( type ); - CleanupStack::PopAndDestroy( name8 ); - LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL() end : Heap count : %d", User::Heap().Count() ); - LOGGER_WRITE_1( "CSConPCConnSession::HandlePutMessageL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::HandleGetMessageL() -// Handles a GET -type message from the client -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::HandleGetMessageL() - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - - if ( !iCSCHandler ) - { - TRAP( ret, LoadCSCDllL() ); - if ( ret != KErrNone) - { - LOGGER_WRITE_1( "CSConPCConnSession::HandleGetMessageL() : CSC dll load failed with error code %d", ret ); - return ret; - } - } - - TInt32 length ( 0 ); - RMemReadStream readBuf( iChunk.Base(), iChunk.Size() ); - iBuffer->Reset(); - - length = readBuf.ReadInt32L(); - HBufC8* name = HBufC8::NewLC( length ); - TPtr8 namePtr8 = name->Des(); - readBuf.ReadL( namePtr8, length); - namePtr8.SetLength( length ); - LOGGER_WRITE8_1("namePtr: %S", &namePtr8); - - const TUint8* ptr8 = namePtr8.Ptr(); - const TUint16* ptr16 = reinterpret_cast( ptr8 ); - TPtrC namePtr; - namePtr.Set( ptr16, length/2 ); - - length = readBuf.ReadInt32L(); - HBufC8* type = HBufC8::NewLC( length ); - TPtr8 typePtr = type->Des(); - readBuf.ReadL( typePtr, length); - - readBuf.Close(); - - if ( typePtr.Compare( KSConCapabilityObjectType ) == KErrNone ) - { - ret = iCSCHandler->CapabilityObject( *iBuffer ); - -#ifdef DEBUG_XML - - RFile file; - if ( file.Open(iFs, KSConConMLDebugFile, EFileWrite ) == KErrNone ) - { - RFileWriteStream fws; - TInt fileSize; - file.Size ( fileSize ); - TTime now; - now.HomeTime(); - TDateTime time = now.DateTime(); - TBuf8<16> timeLine; - timeLine.Format( KTimeFormat, time.Hour(), time.Minute(), - time.Second(), time.MicroSecond() ); - - fws.Attach ( file, fileSize); - fws.PushL(); - fws.WriteL( timeLine ); - _LIT8( KGetMessage, "__________GET -MESSAGE - Capability Object \n " ); - fws.WriteL( KGetMessage ); - fws.WriteL( iBuffer->Ptr(0), iBuffer->Size() ); - TRAP_IGNORE( fws.CommitL() ); - fws.Close(); - - CleanupStack::PopAndDestroy( &fws ); - } - file.Close(); -#endif - - } - else if ( typePtr.CompareC( KSConPCDWBXMLObjectType) == KErrNone ) - { - if ( namePtr8.Find(KSCONSyncRequest) == 0 ) // 8-bit search - { - LOGGER_WRITE("Sync request"); - - RBufWriteStream stream( *iBuffer ); - - CleanupClosePushL( stream ); - - TRAP( ret, iPCDHandler->HandleGetSyncRequestL( namePtr8, stream, iChunk.MaxSize() - sizeof(TInt32) )); - if ( ret ) - { - LOGGER_WRITE_1("HandleGetSyncRequestL() Leaved with %d", ret); - } - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - - LOGGER_WRITE_1("iBuffer size: %d", iBuffer->Size()); - - } - else if ( namePtr.Find(KSCONReadImsi) == 0 ) // 16-bit search - { - LOGGER_WRITE("Read IMSI"); - TBuf imsi; - ret = CSconImsiReader::GetImsiL( imsi ); - - if ( ret == KErrNone ) - { - TBuf8 imsi8; - User::LeaveIfError( CnvUtfConverter::ConvertFromUnicodeToUtf8(imsi8,imsi) ); - - iBuffer->ResizeL( imsi8.Length() ); - iBuffer->Write( 0, imsi8 ); - } - else - { - // Change error code more generic - ret = KErrNotFound; - } - } - else if ( namePtr.Find(KSCONReadNetworkInfo) == 0 ) // 16-bit search - { - LOGGER_WRITE("Read NetworkInfo"); - CTelephony::TRegistrationStatus regStatus; - ret = CSconImsiReader::GetNetworkStatusL( regStatus ); - - if ( ret == KErrNone ) - { - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - stream.WriteInt8L( regStatus ); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - } - else - { - // Change error code more generic - ret = KErrNotFound; - } - } - else if ( namePtr.Find(KSCONReadOviAccount) == 0 ) - { - LOGGER_WRITE("Read Ovi account"); - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - - ret = ReadOviAccountInfoL( stream ); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - - } - else if ( namePtr.Find(KSCONListPath) == 0 ) - { - LOGGER_WRITE("List path"); - // LISTP:0:pathname - if ( namePtr.Length() > KSCONListPath().Length()+2) - { - TPtrC pathname = namePtr.Mid( KSCONListPath().Length()+2 ); - - const TUint16 levelsChar = namePtr[ KSCONListPath().Length() ]; - TInt level(KErrNotFound); - if ( levelsChar >= TChar('0') ) - { - level = levelsChar - TChar('0'); - } - - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - TRAP( ret, iFolderLister->GenerateFolderListL( stream, pathname, level )); - LOGGER_WRITE_1("GenerateFolderListL leaved with err: %d", ret); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - } - else - { - ret = KErrArgument; - } - - } - else if ( namePtr.Find(KSCONReadBtInfo) == 0 ) - { - LOGGER_WRITE( "Read BT info"); - if ( !iBtEngine ) - { - iBtEngine = CSconBtEngine::NewL(); - } - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - TRAP( ret, iBtEngine->ReadBTInfoL( stream ) ); - LOGGER_WRITE_1("ReadBTInfoL leaved with err: %d", ret); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - } - else if ( namePtr.Find(KSCONSetBtPower) == 0 ) - { - LOGGER_WRITE( "Change BT Power state"); - if ( namePtr.Length() == KSCONSetBtPower().Length()+1 ) - { - const TUint16 lastChar = namePtr[ KSCONSetBtPower().Length() ]; - TBool changeBtOn; - if ( lastChar == TChar('0') ) - { - changeBtOn = EFalse; - } - else if ( lastChar == TChar('1') ) - { - changeBtOn = ETrue; - } - else - { - ret = KErrArgument; - } - - if ( !ret ) - { - if ( !iBtEngine ) - { - iBtEngine = CSconBtEngine::NewL(); - } - TInt err = iBtEngine->SetBtPowerState( changeBtOn ); - - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - stream.WriteInt32L( err ); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - } - } - else - { - ret = KErrArgument; - } - } - else if ( namePtr.Find(KSCONSetBtName) == 0 ) - { - LOGGER_WRITE( "Set BT Name"); - TPtrC btName = namePtr.Mid( KSCONSetBtName().Length() ); - TInt err = iBtEngine->SetBtName( btName ); - - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - stream.WriteInt32L( err ); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - } - else if ( namePtr.Find(KSCONSetBtAuthorized) == 0 ) - { - LOGGER_WRITE( "Set BT Authorized"); - ret = KErrArgument; - // SETBTAUTHORIZED:0:00245f8d6a26 - // 1. param = auth. state ("0"=off, "1"=true) - // 2. param = bt address (hex string) - - if ( namePtr.Length() > KSCONSetBtAuthorized().Length()+2) - { - TPtrC btAddr = namePtr.Mid( KSCONSetBtAuthorized().Length()+2 ); - - const TUint16 authStateChar = namePtr[ KSCONSetBtAuthorized().Length() ]; - TBool authorize(EFalse); - if ( authStateChar == TChar('0') ) - { - authorize = EFalse; - ret = KErrNone; - } - else if ( authStateChar == TChar('1') ) - { - authorize = ETrue; - ret = KErrNone; - } - - if ( !iBtEngine ) - { - iBtEngine = CSconBtEngine::NewL(); - } - TRAPD(err, iBtEngine->SetBtAuthorizedL( btAddr, authorize ) ); - - RBufWriteStream stream( *iBuffer ); - CleanupClosePushL( stream ); - stream.WriteInt32L( err ); - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - } - - } - else - { - ret = HandleWBXMLGetRequestL( namePtr ); - } - } - else - { - LOGGER_WRITE( "CSConPCConnSession::HandleGetMessageL() : Header type not regognized " ); - ret = KErrNotSupported; - } - - CleanupStack::PopAndDestroy( 2 ); // name, type - - if ( ret != KErrNone ) - { - return ret; - } - - length = iBuffer->Size(); - - if ( sizeof(TInt32) + length > iChunk.Size() ) - { - // need to resize chunk - TInt err = iChunk.Adjust( sizeof(TInt32) + length ); - LOGGER_WRITE_2("iChunk.Adjust( %d ) err: %d", sizeof(TInt32) + length, err); - if ( err ) - { - iBuffer->Reset(); - LOGGER_WRITE_1( "CSConPCConnSession::HandleGetMessageL() : returned %d", ret ); - return err; - } - } - - // copy data to chunk - RMemWriteStream writeBuf ( iChunk.Base(), iChunk.Size() ); - - if ( length > 0 ) - { - writeBuf.WriteInt32L( length ); - writeBuf.WriteL( iBuffer->Ptr(0), length ); - writeBuf.CommitL(); - } - else - { - writeBuf.WriteInt32L( 0 ); - } - writeBuf.CommitL(); - writeBuf.Close(); - iBuffer->Reset(); - LOGGER_WRITE_1( "CSConPCConnSession::HandleGetMessageL() : returned %d", ret ); - return ( ret ); - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::HandleWBXMLGetRequestL() -// Handles a ConML(wbxml) Get request from the client -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::HandleWBXMLGetRequestL( const TDesC& aFileName ) - { - TRACE_FUNC_ENTRY; - TInt ret(KErrNone); - if ( aFileName.Find(KSCONGetMetadataRequest) == 0 ) - { - // ConML get metadata request --> Create metadata task - LOGGER_WRITE( "ConML GetMetadataRequest" ); - TPtrC filename = aFileName.Mid( KSCONGetMetadataRequest().Length() ); - - TSConMethodName method ( EGetMetadata ); - CSConTask* task = CSConTask::NewLC( method ); - - if ( filename.Length() > task->iGetMetadataParams->iFilename.MaxLength() ) - { - User::Leave( KErrTooBig ); - } - task->iGetMetadataParams->iFilename = filename; - - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1("iPCDHandler->PutTaskL ret: %d", ret); - } - else if ( aFileName.Length() > 0 ) - { - LOGGER_WRITE("Error: aFilename does not match to any definitions"); - TRACE_FUNC_RET( KErrArgument ); - return KErrArgument; - } - - // Get reply - LOGGER_WRITE( "CSConPCConnSession::HandleGetMessageL() before ConML GetReplyL" ); - CSConStatusReply* reply = iPCDHandler->GetReply(); - CleanupStack::PushL( reply ); - - ConML_ConMLPtr_t content = new ( ELeave ) ConML_ConML_t(); - CleanupStack::PushL( content ); - - AppendStatusL( content, reply ); - ret = iConMLHandler->GenerateDocument( content ); - - CleanupStack::PopAndDestroy( content ); - CleanupStack::PopAndDestroy( reply ); - - TPtrC8 ptr( iConMLHandler->WBXMLDocument() ); - LOGGER_WRITE_1("ptr.Size(): %d", ptr.Size()); - iBuffer->ResizeL( ptr.Size() ); - iBuffer->Write( 0, ptr ); - -#ifdef DEBUG_XML - RFile file; - if ( file.Open( iFs, KSConConMLDebugFile, EFileWrite) == KErrNone ) - { - RFileWriteStream fws; - TInt fileSize; - file.Size ( fileSize ); - fws.Attach ( file, fileSize); - fws.PushL(); - TTime now; - now.HomeTime(); - TDateTime time = now.DateTime(); - TBuf8<16> timeLine; - timeLine.Format( KTimeFormat, time.Hour(), time.Minute(), - time.Second(), time.MicroSecond() ); - - fws.WriteL( timeLine ); - _LIT8( KGetMessage, "__________GET -MESSAGE" ); - fws.WriteL( KGetMessage ); - fws.WriteL(KXmlBegin); - fws.WriteL(iConMLHandler->XMLDocument().Ptr(), - iConMLHandler->XMLDocument().Length()); - fws.WriteL(_L("\n\n")); - TRAP_IGNORE( fws.CommitL() ); - fws.Close(); - CleanupStack::PopAndDestroy( &fws ); - } - - file.Close(); -#endif - TRACE_FUNC_RET(ret); - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::ReadOviAccountInfoL() -// Reads ovi account information to stream -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::ReadOviAccountInfoL( RWriteStream& aAccountInfoStream ) - { - TRACE_FUNC_ENTRY; - RLibrary oviaccounthandlerLib; - CleanupClosePushL( oviaccounthandlerLib ); - // Dynamically load DLL - TInt err = oviaccounthandlerLib.Load( KSconOviAccountHandlerDllName ); - if ( err ) - { - LOGGER_WRITE_1("oviaccounthandlerLib.Load err: %d", err); - err = KErrNotSupported; - } - else if( oviaccounthandlerLib.Type()[1] != KSconOviAccountHandlerDllUid ) - { - LOGGER_WRITE_1( "KSconOviAccountHandlerDllUid incorrect... (0x%08X)",oviaccounthandlerLib.Type()[1].iUid ); - err = KErrNotSupported; - } - - if ( err == KErrNone ) - { - TSConCreateCSconOviAccountHandlerFunc CreateCSconOviAccountHandlerL = - (TSConCreateCSconOviAccountHandlerFunc)oviaccounthandlerLib.Lookup(1); - - CSconOviAccountHandler* oviAccountHandler = (CSconOviAccountHandler*)CreateCSconOviAccountHandlerL(); - - TRAP(err, oviAccountHandler->GetOviAccountDetailsL( aAccountInfoStream ) ); - LOGGER_WRITE_1("GetOviAccountDetailsL err: %d", err); - - delete oviAccountHandler; - oviAccountHandler = NULL; - - if ( err ) - { - // change error code - err = KErrNotFound; - } - } - else - { - err = KErrNotSupported; - } - - CleanupStack::PopAndDestroy( &oviaccounthandlerLib ); - TRACE_FUNC_EXIT; - return err; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::HandleResetMessage() -// Resets the PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::HandleResetMessage() - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - - // reset PCD - if ( iPCDHandler ) - { - iPCDHandler->ResetPCD(); - } - - LOGGER_WRITE_1( "CSConPCConnSession::HandleResetMessage() : ret %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::HandleChunkMessage( const RMessage2& aMessage ) -// Receives the chunk handle from the client -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::HandleChunkMessage( const RMessage2& aMessage ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - - ret = iChunk.Open( aMessage, 0, EFalse ); - - LOGGER_WRITE_1( "CSConPCConnSession::HandleChunkMessageL() : ret %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::LoadPCDDllL() -// Loads the PCCS service -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::LoadPCDDllL() - { - TRACE_FUNC_ENTRY; - - // Dynamically load DLL - User::LeaveIfError( iPCDlib.Load( KSConPCDLibName ) ); - if( iPCDlib.Type()[1] != KSConPCDUid ) - { - LOGGER_WRITE( "CSConPCConnSession::LoadPCDDllL() : KSConPCDUidValue incorrect..." ); - iPCDlib.Close(); - User::Leave( KErrNotFound ); - } - TSConCreateCSConPCDFunc CreateCSConPCDL = - (TSConCreateCSConPCDFunc)iPCDlib.Lookup(1); - - iPCDHandler = (CSConPCD*)CreateCSConPCDL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::LoadCSCDllL() -// Loads the CSC service -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::LoadCSCDllL() - { - TRACE_FUNC_ENTRY; - // Dynamically load DLL - User::LeaveIfError( iCSClib.Load( KSConCSCLibName ) ); - if( iCSClib.Type()[1] != KSConCSCUid ) - { - LOGGER_WRITE( "CSConPCConnSession::LoadCSCDllL() : KSConCSCUidValue incorrect" ); - iCSClib.Close(); - User::Leave( KErrNotFound ); - } - TSConCreateCSConCSCFunc CreateCSConCSCL = - (TSConCreateCSConCSCFunc)iCSClib.Lookup(1); - - iCSCHandler = (CSConCSC*)CreateCSConCSCL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::LoadConMLHandlerDllL() -// Loads the ConML handler -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::LoadConMLHandlerDllL() - { - TRACE_FUNC_ENTRY; - // Dynamically load DLL - User::LeaveIfError( iConMLHandlerLib.Load( KSConConMLHandlerLibName ) ); - if ( iConMLHandlerLib.Type()[1] != KSConConMLHandlerUid ) - { - LOGGER_WRITE( "CSConPCConnSession::LoadConMLHandlerDllL() : KSConConMLHandlerUidValue incorrect" ); - iConMLHandlerLib.Close(); - User::Leave( KErrNotFound ); - } - TSConCreateCSConConMLHandlerFunc CreateCSConConMLHandlerL = - (TSConCreateCSConConMLHandlerFunc)iConMLHandlerLib.Lookup(1); - - iConMLHandler = (CSConConMLHandler*)CreateCSConConMLHandlerL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::ConMLL() -// Callback function for ConML handler - parsed data processing starts -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::ConMLL( ConML_ConMLPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - -#ifdef DEBUG_XML - iConMLHandler->GenerateDocument( aContent ); - RFile file; - if ( file.Open(iFs, KSConConMLDebugFile, EFileWrite) == KErrNone ) - { - RFileWriteStream fws; - TInt fileSize; - file.Size( fileSize ); - fws.Attach ( file, fileSize ); - fws.PushL(); - - TTime now; - now.HomeTime(); - TDateTime time = now.DateTime(); - TBuf8<16> timeLine; - timeLine.Format (KTimeFormat, time.Hour(), time.Minute(), - time.Second(), time.MicroSecond() ); - - fws.WriteL( timeLine ); - _LIT8( KPutMessage, "__________PUT-MESSAGE" ); - fws.WriteL( KPutMessage ); - fws.WriteL( KXmlBegin ); - fws.WriteL( iConMLHandler->XMLDocument().Ptr(), - iConMLHandler->XMLDocument().Length()); - fws.WriteL(_L("\n\n")); - TRAP_IGNORE( fws.CommitL() ); - fws.Close(); - CleanupStack::PopAndDestroy( &fws ); - } - file.Close(); - -#endif - - - if ( aContent ) - { - if ( aContent->execute ) - { - ret = OptionsFromExecuteL( aContent->execute ); - } - else if ( aContent->cancel ) - { - ret = TaskCancelL( aContent->cancel ); - } - else if ( aContent->getStatus ) - { - ret = TaskGetStatusL ( aContent->getStatus ); - } - else - { - LOGGER_WRITE( "CSConPCConnSession::ConML() : No appropriate content in ConML -element " ); - ret = KErrArgument; - } - } - else - { - ret = KErrArgument; - } - - // store result for later use - iResult = ret; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::OptionsFromExecuteL() -// Handles data of an execute -element -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::OptionsFromExecuteL(ConML_ExecutePtr_t aContent ) - { - TRACE_FUNC_ENTRY; - - TInt ret ( KErrNone ); - if ( aContent->updateDeviceInfo ) - { - ret = TaskUpdateDeviceInfoL( aContent->updateDeviceInfo); - } - else if ( aContent->listInstalledApps ) - { - ret = TaskListInstalledAppsL( aContent->listInstalledApps); - } - else if ( aContent->install ) - { - ret = TaskInstallL( aContent->install ); - } - else if ( aContent->unInstall ) - { - ret = TaskUnInstallL( aContent->unInstall ); - } - else if ( aContent->listDataOwners ) - { - ret = TaskListDataOwnersL(); - } - else if ( aContent->setBurMode ) - { - ret = TaskSetBURModeL( aContent->setBurMode ); - } - else if ( aContent->getDataSize ) - { - ret = TaskGetDataSizeL( aContent->getDataSize ); - } - else if ( aContent->requestData ) - { - ret = TaskRequestDataL( aContent->requestData ); - } - else if ( aContent->listPublicFiles ) - { - ret = TaskListPublicFilesL( aContent->listPublicFiles ); - } - else if ( aContent->reboot ) - { - ret = TaskRebootL(); - } - else if ( aContent->getDataOwnerStatus ) - { - ret = TaskGetDataOwnerStatusL( aContent->getDataOwnerStatus ); - } - else if ( aContent->supplyData ) - { - ret = TaskSupplyDataL( aContent->supplyData ); - } - else if ( aContent->getMetadata ) - { - ret = TaskGetMetadataL( aContent->getMetadata ); - } - else - { - LOGGER_WRITE( "CSConPCConnSession::OptionsFromExecute() : No content " ); - ret = KErrNotSupported; - } - LOGGER_WRITE_1( "CSConPCConnSession::OptionsFromExecute() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskCancelL(ConML_CancelPtr_t aContent) -// Sends a Cancel -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskCancelL( ConML_CancelPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( ECancel ); - CSConTask* task = CSConTask::NewLC( method ); - if ( aContent->all ) - { - task->iCancelTaskAll = ETrue; - } - if ( aContent->id ) - { - task->iCancelTaskId = ( DesToInt( aContent->id->Data() )); - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskCancelL() : returned %d", ret ); - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskGetStatusL() -// Sends a Get Status -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskGetStatusL( ConML_GetStatusPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EGetStatus ); - CSConTask* task = CSConTask::NewLC( method ); - if ( aContent->all ) - { - task->iGetStatusParams->iAll = ETrue; - } - if ( aContent->id) - { - task->iGetStatusParams->iTaskId = ( DesToInt( aContent->id->Data() )); - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskGetStatusL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskInstallL() -// Sends an Install -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskInstallL( ConML_InstallPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EInstall ); - CSConTask* task = CSConTask::NewLC( method); - task->iInstallParams->iMode = EUnknown; - if ( aContent->name ) - { - // Unicode conversion from 8-bit to 16-bit - CnvUtfConverter::ConvertToUnicodeFromUtf8(task->iInstallParams->iPath, - aContent->name->Data()); - } - if ( aContent->instParams ) - { - if ( aContent->instParams->param ) - { - for ( ConML_ParamListPtr_t p = aContent->instParams->param; - p && p->data; p = p->next) - { - LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : Parameters found " ); - if ( p->data->name ) - { - LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : name param found " ); - TPtrC8 silent(KParamNameSilent); - - TInt comp = Mem::Compare((TUint8*)p->data->name->content, (TInt)p->data->name->length, silent.Ptr(), silent.Length()); - if( comp == 0) - { - // "Silent"-param found - LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : Silent-param found " ); - if ( p->data->value ) - { - TPtrC8 dataValue((TUint8*)p->data->value->content, (TInt)p->data->value->length); - TInt value = DesToInt( dataValue ); - if (value == 1) - { - LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : ESilentInstall " ); - task->iInstallParams->iMode = ESilentInstall; - } - else if( value == 0 ) - { - LOGGER_WRITE( "CSConPCConnSession::TaskInstallL() : EUnsilentInstall " ); - task->iInstallParams->iMode = EUnsilentInstall; - } - } - } - } - } - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskInstallL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskUnInstallL() -// Sends an Uninstall -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskUnInstallL( ConML_UnInstallPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EUninstall ); - CSConTask* task = CSConTask::NewLC( method ); - task->iUninstallParams->iMode = EUnknown; - - if ( aContent->applications->application) - { - for ( ConML_ApplicationListPtr_t p = - aContent->applications->application; p && p->data; p = p->next ) - { - if ( p->data ) - { - if ( p->data->name ) - { - // get application name - HBufC* nameBuf = CnvUtfConverter::ConvertToUnicodeFromUtf8L( p->data->name->Data() ); - task->iUninstallParams->iName.Copy( nameBuf->Des() ); - delete nameBuf; - nameBuf = NULL; - } - if ( p->data->uid ) - { - // parse uid: UID # Type # Size # Version # Vendor # Parent app. name # - // only UID and Vendor are needed from whole uid-field. - LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : start parsing uid " ); - - TPtrC8 buf( p->data->uid->Data() ); - - RArray arr(6); - CleanupClosePushL( arr ); - TBuf8<1> separator(KSConAppInfoSeparator); - - SplitL(buf, separator[0], arr); - if ( arr.Count() >= 5 ) - { - task->iUninstallParams->iUid = DesToUid( arr[0] ); - task->iUninstallParams->iType = (TSConAppType)DesToInt( arr[1] ); - HBufC* vendorBuf = CnvUtfConverter::ConvertToUnicodeFromUtf8L( arr[4] ); - task->iUninstallParams->iVendor.Copy( vendorBuf->Des() ); - delete vendorBuf; - vendorBuf = NULL; - } - CleanupStack::PopAndDestroy( &arr ); - - - } // endif p->data->uid - } - } - } - - if ( aContent->instParams) - { - if ( aContent->instParams->param ) - { - for ( ConML_ParamListPtr_t p = aContent->instParams->param; - p && p->data; p = p->next ) - { - LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : Parameters found " ); - if ( p->data->name ) - { - LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : name param found " ); - TPtrC8 silent(KParamNameSilent); - - TInt comp = Mem::Compare((TUint8*)p->data->name->content, (TInt)p->data->name->length, silent.Ptr(), silent.Length()); - if( comp == 0) - { - // "Silent"-param found - LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : Silent-param found " ); - if ( p->data->value ) - { - TPtrC8 dataValue((TUint8*)p->data->value->content, (TInt)p->data->value->length); - TInt value = DesToInt( dataValue ); - if ( value == 1 ) - { - LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : ESilentInstall " ); - task->iUninstallParams->iMode = ESilentInstall; - } - else if ( value == 0 ) - { - LOGGER_WRITE( "CSConPCConnSession::TaskUnInstallL() : EUnsilentInstall " ); - task->iUninstallParams->iMode = EUnsilentInstall; - } - } - } - } - } - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskUnInstallL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::SplitL(const TDesC& aText, const TChar aSeparator, -// RArray& aArray) -// Function splits string (eg "name1, name2, name3") into substrings. -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::SplitL(const TDesC8& aText, const TChar aSeparator, - RArray& aArray) - { - TRACE_FUNC_ENTRY; - TPtrC8 ptr; - ptr.Set(aText); - - for (;;) - { - TInt pos=ptr.Locate(aSeparator); - if (pos==KErrNotFound) - { - aArray.AppendL(ptr); - break; - } - - TPtrC8 subStr=ptr.Left(pos); // get pos characters starting from position 0 - aArray.AppendL(subStr); - - if (!(ptr.Length()>pos+1)) - { - break; - } - - ptr.Set(ptr.Mid(pos+1));// get all characters starting from position pos+1 - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskListInstalledAppsL() -// Sends a List installed apps -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskListInstalledAppsL( - ConML_ListInstalledAppsPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EListInstalledApps ); - CSConTask* task = CSConTask::NewLC( method ); - if( aContent-> drives ) - { - task->iListAppsParams->iDriveList = DriveList( aContent->drives->drive); - } - if ( aContent->all ) - { - task->iListAppsParams->iAllApps = ETrue; - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskListInstalledAppsL() : returned %d", ret); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskListDataOwnersL() -// Sends a List data owners -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskListDataOwnersL() - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EListDataOwners ); - CSConTask* task = CSConTask::NewLC( method ); - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskListDataOwnersL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskSetBURModeL() -// Sends a Set BUR mode -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskSetBURModeL(ConML_SetBURModePtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( ESetBURMode ); - CSConTask* task = CSConTask::NewLC( method ); - if ( aContent->drives ) - { - task->iBURModeParams->iDriveList = DriveList( aContent->drives->drive); - } - if ( aContent->partialType ) - { - TInt intValue = DesToInt( aContent->partialType->Data() ); - task->iBURModeParams->iPartialType = static_cast (intValue) ; - } - if ( aContent->incType ) - { - TInt intValue = DesToInt( aContent->incType->Data() ); - task->iBURModeParams->iIncType = static_cast (intValue) ; - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskSetBURModeL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskGetDataSizeL() -// Sends a Get data size -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskGetDataSizeL(ConML_GetDataSizePtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EGetDataSize ); - CSConTask* task = CSConTask::NewLC( method ); - if ( aContent->dataOwners ) - { - for ( ConML_SIDListPtr_t p = aContent->dataOwners->sid; - p && p->data; p=p->next ) - { - CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner(); - CleanupStack::PushL( dataOwner ); - if ( p->data->type ) - { - dataOwner->iType = TSConDOType (DesToInt( - p->data->type->Data() )); - } - if (p->data->uid ) - { - if( !IsJavaHash( p->data->uid->Data() ) ) - { - dataOwner->iUid = DesToUid( p->data->uid->Data() ); - } - else - { - TPtr hashPtr = DesToHashLC( p->data->uid->Data() ); - dataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() ); - dataOwner->iJavaHash->Des().Copy( hashPtr ); - CleanupStack::PopAndDestroy(); //DesToHashLC() - } - } - if ( p->data->drives ) - { - dataOwner->iDriveList = DriveList ( p->data->drives->drive ); - } - if ( p->data->transferDataType ) - { - TInt intValue = DesToInt( p->data->transferDataType->Data() ); - dataOwner->iTransDataType = static_cast (intValue); - } - task->iGetDataSizeParams->iDataOwners.AppendL( dataOwner ); - CleanupStack::Pop( dataOwner ); - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskGetDataSizeL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskRequestDataL() -// Sends a Request data -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskRequestDataL(ConML_RequestDataPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( ERequestData ); - CSConTask* task = CSConTask::NewLC( method ); - if ( aContent ) - { - if ( aContent->sid ) - { - for ( ConML_SIDListPtr_t p=aContent->sid; p && p->data; p=p->next ) - { - if ( p->data->type ) - { - task->iRequestDataParams->iDataOwner->iType = - TSConDOType ( DesToInt ( p->data->type->Data() ) ); - } - if ( p->data->uid ) - { - if( !IsJavaHash( p->data->uid->Data() ) ) - { - task->iRequestDataParams->iDataOwner->iUid = DesToUid( - p->data->uid->Data() ); - } - else - { - TPtr hashPtr = DesToHashLC( p->data->uid->Data() ); - task->iRequestDataParams->iDataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() ); - task->iRequestDataParams->iDataOwner->iJavaHash->Des().Copy( hashPtr ); - CleanupStack::PopAndDestroy(); //DesToHashLC() - } - } - if ( p->data->drives ) - { - task->iRequestDataParams->iDataOwner->iDriveList = - DriveList ( p->data->drives->drive ); - } - if ( p->data->transferDataType ) - { - TInt intValue = DesToInt( p->data->transferDataType->Data() ); - task->iRequestDataParams->iDataOwner->iTransDataType = - static_cast (intValue); - } - } - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskRequestDataL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskUpdateDeviceInfoL() -// Sends a Update device info -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskUpdateDeviceInfoL( - ConML_UpdateDeviceInfoPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EUpdateDeviceInfo ); - CSConTask* task = CSConTask::NewLC( method ); - - if ( aContent->deviceInfo) - { - ConML_DeviceInfoPtr_t dPtr = aContent->deviceInfo; - if ( dPtr->version ) - { - task->iDevInfoParams->iVersion.Copy( dPtr->version->Data()); - } - if ( dPtr->maxObjectSize ) - { - task->iDevInfoParams->iMaxObjectSize = DesToInt( - dPtr->maxObjectSize->Data()); - } - if ( dPtr->supportedMethods ) - { - ConML_SupportedMethodsPtr_t smPtr = dPtr->supportedMethods; - if ( smPtr->install ) - { - task->iDevInfoParams->iInstallSupp = ETrue; - } - if ( smPtr->unInstall ) - { - task->iDevInfoParams->iUninstallSupp = ETrue; - } - if ( smPtr->listInstalledApps ) - { - task->iDevInfoParams->iInstAppsSupp = ETrue; - } - if ( smPtr->listDataOwners ) - { - task->iDevInfoParams->iDataOwnersSupp = ETrue; - } - if ( smPtr->setBurMode ) - { - task->iDevInfoParams->iSetBURModeSupp = ETrue; - } - if ( smPtr->getDataSize ) - { - task->iDevInfoParams->iGetSizeSupp = ETrue; - } - if ( smPtr->requestData ) - { - task->iDevInfoParams->iReqDataSupp = ETrue; - } - if ( smPtr->supplyData ) - { - task->iDevInfoParams->iSupplyDataSupp = ETrue; - } - if ( smPtr->reboot ) - { - task->iDevInfoParams->iRebootSupp = ETrue; - } - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskUpdateDeviceInfoL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskListPublicFilesL() -// Sends a List public files -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskListPublicFilesL( - ConML_ListPublicFilesPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EListPublicFiles ); - CSConTask* task = CSConTask::NewLC( method ); - if ( aContent->sid ) - { - for ( ConML_SIDListPtr_t p = aContent->sid; p && p->data; p = p->next ) - { - CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner(); - CleanupStack::PushL( dataOwner ); - if ( p->data->type ) - { - dataOwner->iType = TSConDOType ( DesToInt( - p->data->type->Data() ) ); - } - if ( p->data->uid ) - { - if( !IsJavaHash( p->data->uid->Data() ) ) - { - dataOwner->iUid = DesToUid( p->data->uid->Data() ); - } - else - { - TPtr hashPtr = DesToHashLC( p->data->uid->Data() ); - dataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() ); - dataOwner->iJavaHash->Des().Copy( hashPtr ); - CleanupStack::PopAndDestroy(); //DesToHashLC() - } - } - if ( p->data->drives ) - { - dataOwner->iDriveList = DriveList ( p->data->drives->drive ); - } - if ( p->data->packageInfo && p->data->packageInfo->name ) - { - // Unicode conversion from 8-bit to 16-bit - CnvUtfConverter::ConvertToUnicodeFromUtf8( - dataOwner->iPackageName, - p->data->packageInfo->name->Data()); - } - task->iPubFilesParams->iDataOwners.AppendL( dataOwner ); - CleanupStack::Pop( dataOwner ); - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskListPublicFilesL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskSupplyDataL() -// Sends a Supply data -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskSupplyDataL ( ConML_SupplyDataPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( ESupplyData ); - CSConTask* task = CSConTask::NewLC( method ); - if (aContent ) - { - for ( ConML_SIDListPtr_t p = aContent->sid; p && p->data; p = p->next ) - { - if ( p->data->type ) - { - task->iSupplyDataParams->iDataOwner->iType = - TSConDOType ( DesToInt( p->data->type->Data() ) ); - } - if ( p->data->uid ) - { - if( !IsJavaHash( p->data->uid->Data() ) ) - { - task->iSupplyDataParams->iDataOwner->iUid = DesToUid( - p->data->uid->Data() ); - } - else - { - TPtr hashPtr = DesToHashLC( p->data->uid->Data() ); - task->iSupplyDataParams->iDataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() ); - task->iSupplyDataParams->iDataOwner->iJavaHash->Des().Copy( hashPtr ); - CleanupStack::PopAndDestroy(); //DesToHashLC() - } - } - if ( p->data->drives ) - { - task->iSupplyDataParams->iDataOwner->iDriveList = - DriveList ( p->data->drives->drive ); - } - if ( p->data->transferDataType ) - { - TInt intValue = DesToInt ( p->data->transferDataType->Data() ); - task->iSupplyDataParams->iDataOwner->iTransDataType = - static_cast (intValue); - } - if ( p->data->data ) - { - task->iSupplyDataParams->iRestoreData = HBufC8::NewL( - p->data->data->Data().Size() ); - *task->iSupplyDataParams->iRestoreData = p->data->data->Data(); - } - if ( p->data->moreData ) - { - task->iSupplyDataParams->iMoreData = ETrue; - } - else - { - task->iSupplyDataParams->iMoreData = EFalse; - } - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskSupplyDataL() : returned %d", ret ); - return ret; -} - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskGetDataOwnerStatusL() -// Sends a Get data owner status -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskGetDataOwnerStatusL - ( ConML_GetDataOwnerStatusPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EGetDataOwnerStatus ); - CSConTask* task = CSConTask::NewLC( method ); - - if ( aContent->dataOwners ) - { - for ( ConML_SIDListPtr_t p = aContent->dataOwners->sid; - p && p->data; p=p->next ) - { - CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner(); - CleanupStack::PushL( dataOwner ); - if ( p->data->type ) - { - dataOwner->iType = TSConDOType (DesToInt( - p->data->type->Data() )); - } - if ( p->data->uid ) - { - if( !IsJavaHash( p->data->uid->Data() ) ) - { - dataOwner->iUid = DesToUid( p->data->uid->Data() ); - } - else - { - TPtr hashPtr = DesToHashLC( p->data->uid->Data() ); - dataOwner->iJavaHash = HBufC::NewL( hashPtr.Size() ); - dataOwner->iJavaHash->Des().Copy( hashPtr ); - CleanupStack::PopAndDestroy(); //DesToHashLC() - } - } - task->iGetDataOwnerParams->iDataOwners.AppendL( dataOwner ); - CleanupStack::Pop( dataOwner ); - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskGetDataOwnerStatusL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskRebootL() -// Sends a Reboot -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskRebootL( ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EReboot ); - CSConTask* task = CSConTask::NewLC( method ); - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskRebootL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskGetMetadataL() -// Sends a GetMetadata -task to PCCS service -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::TaskGetMetadataL( ConML_GetMetadataPtr_t aContent ) - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - TSConMethodName method ( EGetMetadata ); - CSConTask* task = CSConTask::NewLC( method ); - if( aContent ) - { - if ( aContent->filename ) - { - // Unicode conversion from 8-bit to 16-bit - CnvUtfConverter::ConvertToUnicodeFromUtf8(task->iGetMetadataParams->iFilename, - aContent->filename->Data()); - } - } - ret = iPCDHandler->PutTaskL( task ); - CleanupStack::Pop( task ); - LOGGER_WRITE_1( "CSConPCConnSession::TaskGetMetadataL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::TaskRebootL() -// Appends a status element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendStatusL( - ConML_ConMLPtr_t aContent, CSConStatusReply* reply ) - { - TRACE_FUNC_ENTRY; - - if ( !reply ) - { - LOGGER_WRITE( "CSConPCConnSession::AppendStatus() : No data in reply!" ); - return; - } - aContent->status = new ( ELeave ) ConML_Status_t(); - - if ( reply->iTasks.Count() > 0 ) - { - for ( TInt i=0; i < reply->iTasks.Count(); i ++) - { - ConML_TaskListPtr_t task = new ( ELeave ) ConML_TaskList_t(); - CleanupStack::PushL( task ); - GenericListAddL ( &aContent->status->task, task ); - CleanupStack::Pop(); // task - - task->data = new ( ELeave ) ConML_Task_t(); - task->data->id = new ( ELeave ) pcdata_t(); - task->data->id->SetDataL ( IntToDesLC(reply->iTasks[i]->iTaskId) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - TSConMethodName method ( reply->iTasks[i]->iMethod ); - - switch ( method ) - { - case EUpdateDeviceInfo: - task->data->updateDeviceInfo = - new ( ELeave ) ConML_UpdateDeviceInfo_t(); - task->data->updateDeviceInfo->results = - new ( ELeave ) ConML_Results_t(); - AppendUpdateDeviceInfoResultsL( - task->data->updateDeviceInfo->results, - reply->iTasks[i]->iDevInfoParams ); - break; - - case ESetBURMode: - task->data->setBurMode = - new ( ELeave ) ConML_SetBURMode_t(); - task->data->setBurMode->results = - new ( ELeave) ConML_Results_t(); - AppendSetBURModeResultsL( - task->data->setBurMode->results, - reply->iTasks[i]->iBURModeParams ); - break; - - case EListInstalledApps: - task->data->listInstalledApps = - new ( ELeave ) ConML_ListInstalledApps_t(); - task->data->listInstalledApps->results = - new ( ELeave ) ConML_Results_t(); - AppendListInstalledAppsResultsL( - task->data->listInstalledApps->results, - reply->iTasks[i]->iListAppsParams); - break; - - case EInstall: - task->data->install = new ( ELeave ) ConML_Install_t(); - task->data->install->results = - new ( ELeave ) ConML_Results_t(); - AppendInstallResultsL( - task->data->install->results, - reply->iTasks[i]->iInstallParams ); - break; - - case EUninstall: - task->data->unInstall = new ( ELeave ) ConML_UnInstall_t(); - task->data->unInstall->results = - new ( ELeave ) ConML_Results_t(); - AppendUninstallResultsL( - task->data->unInstall->results, - reply->iTasks[i]->iUninstallParams ); - break; - - case EListDataOwners: - task->data->listDataOwners = - new ( ELeave ) ConML_ListDataOwners_t(); - task->data->listDataOwners->results = - new ( ELeave ) ConML_Results_t(); - AppendListDataOwnersResultsL( - task->data->listDataOwners->results, - reply->iTasks[i]->iListDataOwnersParams ); - break; - - case EGetDataOwnerStatus: - task->data->getDataOwnerStatus = - new ( ELeave ) ConML_GetDataOwnerStatus_t(); - task->data->getDataOwnerStatus->results = - new ( ELeave ) ConML_Results_t(); - AppendGetDataOwnerStatusResultsL( - task->data->getDataOwnerStatus->results, - reply->iTasks[i]->iGetDataOwnerParams); - break; - - case EGetDataSize: - task->data->getDataSize = - new ( ELeave ) ConML_GetDataSize_t(); - task->data->getDataSize->results = - new ( ELeave ) ConML_Results_t(); - AppendGetDataSizeResultsL( - task->data->getDataSize->results, - reply->iTasks[i]->iGetDataSizeParams ); - break; - - case EListPublicFiles: - task->data->listPublicFiles = - new ( ELeave ) ConML_ListPublicFiles_t(); - task->data->listPublicFiles->results = - new ( ELeave ) ConML_Results_t(); - AppendListPublicFilesResultsL ( - task->data->listPublicFiles->results, - reply->iTasks[i]->iPubFilesParams ); - break; - - case ERequestData: - task->data->requestData = - new ( ELeave ) ConML_RequestData_t(); - task->data->requestData->results = - new ( ELeave ) ConML_Results_t(); - AppendRequestDataResultsL( - task->data->requestData->results, - reply->iTasks[i]->iRequestDataParams ); - break; - - case ESupplyData: - task->data->supplyData = - new ( ELeave ) ConML_SupplyData_t(); - task->data->supplyData->results = - new ( ELeave ) ConML_Results_t(); - AppendSupplyDataResultsL ( - task->data->supplyData->results, - reply->iTasks[i]->iSupplyDataParams ); - break; - - case EGetMetadata: - task->data->getMetadata = - new ( ELeave ) ConML_GetMetadata_t(); - task->data->getMetadata->results = - new ( ELeave ) ConML_Results_t(); - AppendGetMetadataResultsL ( - task->data->getMetadata->results, - reply->iTasks[i]->iGetMetadataParams ); - break; - - default: - LOGGER_WRITE_1( "CSConPCConnSession:: AppendStatus() : Unknown method %d ", method ); - break; - } - } - } - else - { - LOGGER_WRITE( "CSConPCConnSession::AppendStatus() : No Task " ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendUpdateDeviceInfoResultsL() -// Appends a update device info -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendUpdateDeviceInfoResultsL - ( ConML_ResultsPtr_t aContent, CSConUpdateDeviceInfo* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL ( aContent, aResult->iProgress ); - - aContent->deviceInfo = new ( ELeave ) ConML_DeviceInfo_t(); - aContent->deviceInfo->version = new ( ELeave ) pcdata_t(); - aContent->deviceInfo->version->SetDataL ( aResult->iVersion ); - - aContent->deviceInfo->supportedMethods = - new ( ELeave ) ConML_SupportedMethods_t(); - - if ( aResult->iInstallSupp ) - { - aContent->deviceInfo->supportedMethods->install = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iUninstallSupp ) - { - aContent->deviceInfo->supportedMethods->unInstall = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iInstAppsSupp ) - { - aContent->deviceInfo->supportedMethods->listInstalledApps = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iDataOwnersSupp ) - { - aContent->deviceInfo->supportedMethods->listDataOwners = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iSetBURModeSupp ) - { - aContent->deviceInfo->supportedMethods->setBurMode = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iGetSizeSupp ) - { - aContent->deviceInfo->supportedMethods->getDataSize = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iReqDataSupp ) - { - aContent->deviceInfo->supportedMethods->requestData = - new (ELeave ) pcdata_t(); - } - if ( aResult->iSupplyDataSupp ) - { - aContent->deviceInfo->supportedMethods->supplyData = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iRebootSupp ) - { - aContent->deviceInfo->supportedMethods->reboot = - new ( ELeave ) pcdata_t(); - } - aContent->deviceInfo->maxObjectSize = new ( ELeave ) pcdata_t(); - aContent->deviceInfo->maxObjectSize->SetDataL ( IntToDesLC( - aResult->iMaxObjectSize )); - CleanupStack::PopAndDestroy(); // IntToDesLC - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendSetBURModeResultsL() -// Appends a Set BUR mode -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendSetBURModeResultsL ( - ConML_ResultsPtr_t aContent, CSConSetBURMode* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL ( aContent, aResult->iProgress ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendListInstalledAppsResultsL() -// Appends a List installed apps -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendListInstalledAppsResultsL ( - ConML_ResultsPtr_t aContent, CSConListInstApps* aResult ) - { - TRACE_FUNC_ENTRY; - - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL ( aContent, aResult->iProgress ); - - if ( aResult->iApps.Count() > 0 ) - { - // 6 * KMaxFileName should be enought - // ( 5 items of TFileName and uid + type + size + 7* "#" ) - HBufC8* buf = HBufC8::NewLC( 6 * KMaxFileName ); - TPtr8 ptrBuf = buf->Des(); - - aContent->applications = new ( ELeave ) ConML_Applications_t(); - for ( TInt i=0; iiApps.Count(); i++) - { - ConML_ApplicationListPtr_t app = - new ( ELeave )ConML_ApplicationList_t(); - CleanupStack::PushL ( app ); - GenericListAddL ( &aContent->applications->application, app ); - CleanupStack::Pop(); // app - - app->data = new ( ELeave ) ConML_Application_t(); - app->data->name = new ( ELeave ) pcdata_t(); - app->data->name->SetDataL( BufToDesLC( - aResult->iApps[i]->iName)); - CleanupStack::PopAndDestroy(); // BufToDesLC - - // create uid: UID # Type # Size # Version # Vendor # Parent app. name # WidgetBundleId # - LOGGER_WRITE( "CSConPCConnSession::AppendListInstalledAppsResultsL() : Create Uid" ); - - ptrBuf.Copy( UidToDesLC( aResult->iApps[i]->iUid ) ); - CleanupStack::PopAndDestroy(); // UidToDesLC - - ptrBuf.Append( KSConAppInfoSeparator ); - - ptrBuf.Append( IntToDesLC(aResult->iApps[i]->iType )); - CleanupStack::PopAndDestroy(); // IntToDesLC - - ptrBuf.Append( KSConAppInfoSeparator ); - - ptrBuf.Append( IntToDesLC(aResult->iApps[i]->iSize ) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - - ptrBuf.Append( KSConAppInfoSeparator ); - ptrBuf.Append( aResult->iApps[i]->iVersion ); - - ptrBuf.Append( KSConAppInfoSeparator ); - ptrBuf.Append( BufToDesLC( aResult->iApps[i]->iVendor ) ); - CleanupStack::PopAndDestroy(); // BufToDesLC - - ptrBuf.Append( KSConAppInfoSeparator ); - ptrBuf.Append( BufToDesLC( aResult->iApps[i]->iParentName ) ); - CleanupStack::PopAndDestroy(); // BufToDesLC - - ptrBuf.Append( KSConAppInfoSeparator ); - if (aResult->iApps[i]->iWidgetBundleId) - { - ptrBuf.Append( BufToDesLC( *aResult->iApps[i]->iWidgetBundleId ) ); - CleanupStack::PopAndDestroy(); // BufToDesLC - } - - ptrBuf.Append( KSConAppInfoSeparator ); - - LOGGER_WRITE( "CSConPCConnSession::AppendListInstalledAppsResultsL() : set data" ); - app->data->uid = new ( ELeave ) pcdata_t(); - app->data->uid->SetDataL( *buf ); - - LOGGER_WRITE( "CSConPCConnSession::AppendListInstalledAppsResultsL() : Info added" ); - } - CleanupStack::PopAndDestroy(buf); - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendListPublicFilesResultsL() -// Appends a List public files -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendListPublicFilesResultsL ( - ConML_ResultsPtr_t aContent, CSConListPublicFiles* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL ( aContent, aResult->iProgress ); - - if ( aResult->iFiles.Count() > 0 ) - { - aContent->files = new ( ELeave ) ConML_Files_t(); - for ( TInt i=0;iiFiles.Count(); i++ ) - { - ConML_FileListPtr_t file = new ( ELeave ) ConML_FileList_t(); - CleanupStack::PushL( file ); - GenericListAddL ( &aContent->files->file, file ); - CleanupStack::Pop(); // file - - file->data = new ( ELeave ) ConML_File_t(); - file->data->name = new ( ELeave ) pcdata_t(); - file->data->name->SetDataL( BufToDesLC ( - aResult->iFiles[i]->iPath ) ); - CleanupStack::PopAndDestroy(); // BufToDesLC - - file->data->modified = new ( ELeave ) pcdata_t(); - file->data->modified->SetDataL( BufToDesLC ( - aResult->iFiles[i]->iModified ) ); - CleanupStack::PopAndDestroy(); // BufToDesLC - - file->data->size = new ( ELeave ) pcdata_t(); - file->data->size->SetDataL( IntToDesLC ( - aResult->iFiles[i]->iSize ) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - - file->data->userPerm = new ( ELeave ) pcdata_t(); - switch ( aResult->iFiles[i]->iUserPerm ) - { - case EPermReadOnly: - file->data->userPerm->SetDataL ( KSConPermReadOnly ); - break; - - case EPermNormal: - file->data->userPerm->SetDataL ( KSConPermNormal ); - break; - - default: - LOGGER_WRITE( "CSConPCConnSession:: AppendListPublicFilesResultsL() : Unknown userPerm! " ); - break; - } - } - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendRequestDataResultsL() -// Appends a Request data -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendRequestDataResultsL( - ConML_ResultsPtr_t aContent, CSConRequestData* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL ( aContent, aResult->iProgress ); - - if ( aResult->iMoreData ) - { - aContent->moreData = new ( ELeave ) pcdata_t(); - } - if ( aResult->iBackupData ) - { - aContent->data = new ( ELeave ) pcdata_t(); - aContent->data->SetDataL( aResult->iBackupData->Des() ); - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendSupplyDataResultsL() -// Appends a Supply data -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendSupplyDataResultsL( - ConML_ResultsPtr_t aContent, CSConSupplyData* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL( aContent, aResult->iProgress ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendInstallResultsL() -// Appends an Install -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendInstallResultsL( - ConML_ResultsPtr_t aContent, CSConInstall* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL( aContent, aResult->iProgress ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendUninstallResultsL() -// Appends an Uninstall -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendUninstallResultsL( - ConML_ResultsPtr_t aContent, CSConUninstall* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - LOGGER_WRITE( "CSConPCConnSession::AppendUninstallResultsL() Complete" ); - aContent->complete = new ( ELeave ) pcdata_t(); - } - LOGGER_WRITE_1( "CSConPCConnSession::AppendUninstallResultsL() iProgress: %d", aResult->iProgress ); - AppendProgressL( aContent, aResult->iProgress ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendListDataOwnersResultsL() -// Appends a List data owners -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendListDataOwnersResultsL ( - ConML_ResultsPtr_t aContent, CSConListDataOwners* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL( aContent, aResult->iProgress ); - - if ( aResult->iDataOwners.Count() > 0 ) - { - aContent->dataOwners = new ( ELeave ) ConML_DataOwners_t(); - for ( TInt i=0; i < aResult->iDataOwners.Count(); i ++) - { - ConML_SIDListPtr_t sid = new ( ELeave ) ConML_SIDList_t(); - CleanupStack::PushL( sid ); - GenericListAddL ( &aContent->dataOwners->sid, sid ); - CleanupStack::Pop(); - - sid->data = new ( ELeave ) ConML_SID_t(); - - sid->data->type = new ( ELeave ) pcdata_t(); - sid->data->type->SetDataL ( IntToDesLC ( - aResult->iDataOwners[i]->iType) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - - sid->data->uid = new ( ELeave ) pcdata_t(); - - if( aResult->iDataOwners[i]->iUid.iUid ) - { - sid->data->uid->SetDataL ( UidToDesLC ( - aResult->iDataOwners[i]->iUid ) ); - CleanupStack::PopAndDestroy(); // UidToDesLC - } - - if( aResult->iDataOwners[i]->iJavaHash ) - { - sid->data->uid->SetDataL ( HashToDesLC ( - aResult->iDataOwners[i]->iJavaHash->Des() ) ); - CleanupStack::PopAndDestroy(); // HashToDesLC - } - - if ( HasDrives ( aResult->iDataOwners[i]->iDriveList ) ) - { - sid->data->drives = new ( ELeave ) ConML_Drives_t(); - AppendDrivesL ( sid->data->drives, - aResult->iDataOwners[i]->iDriveList ); - } - - if ( aResult->iDataOwners[i]->iPackageName.Length() > 0 ) - { - sid->data->packageInfo = - new ( ELeave ) ConML_PackageInfo_t(); - sid->data->packageInfo->name = new ( ELeave ) pcdata_t(); - sid->data->packageInfo->name->SetDataL ( BufToDesLC ( - aResult->iDataOwners[i]->iPackageName ) ); - - CleanupStack::PopAndDestroy(); // BufToDesLC - } - - if ( aResult->iDataOwners[i]->iHasFiles || - aResult->iDataOwners[i]->iSupportsInc || - aResult->iDataOwners[i]->iDelayToPrep || - aResult->iDataOwners[i]->iReqReboot ) - { - sid->data->burOptions = new ( ELeave ) ConML_BUROptions_t(); - if ( aResult->iDataOwners[i]->iHasFiles ) - { - sid->data->burOptions->hasFiles = - new ( ELeave ) pcdata_t(); - sid->data->burOptions->hasFiles->SetDataL( IntToDesLC( - aResult->iDataOwners[i]->iHasFiles )); - - CleanupStack::PopAndDestroy(); // IntToDesLC - } - if ( aResult->iDataOwners[i]->iSupportsInc ) - { - sid->data->burOptions->supportsInc = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iDataOwners[i]->iDelayToPrep ) - { - sid->data->burOptions->delayToPrepareData = - new ( ELeave ) pcdata_t(); - } - if ( aResult->iDataOwners[i]->iReqReboot ) - { - sid->data->burOptions->requiresReboot = - new ( ELeave ) pcdata_t(); - } - } - } - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendGetDataOwnerStatusResultsL() -// Appends a Get data owner status -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendGetDataOwnerStatusResultsL - ( ConML_ResultsPtr_t aContent, CSConGetDataOwnerStatus* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL( aContent, aResult->iProgress ); - - if ( aResult->iDataOwners.Count() > 0 ) - { - aContent->dataOwners = new ( ELeave ) ConML_DataOwners_t(); - for ( TInt i=0; i < aResult->iDataOwners.Count(); i ++) - { - ConML_SIDListPtr_t sid = new ( ELeave ) ConML_SIDList_t(); - CleanupStack::PushL( sid ); - GenericListAddL ( &aContent->dataOwners->sid, sid ); - CleanupStack::Pop(); - - sid->data = new ( ELeave ) ConML_SID_t(); - - sid->data->type = new ( ELeave ) pcdata_t(); - sid->data->type->SetDataL ( IntToDesLC ( - aResult->iDataOwners[i]->iType) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - - sid->data->uid = new ( ELeave ) pcdata_t(); - sid->data->uid->SetDataL ( UidToDesLC ( - aResult->iDataOwners[i]->iUid ) ); - CleanupStack::PopAndDestroy(); // UidToDesLC - - sid->data->dataOwnerStatus = new ( ELeave ) pcdata_t(); - sid->data->dataOwnerStatus->SetDataL ( IntToDesLC( - aResult->iDataOwners[i]->iDataOwnStatus )); - - CleanupStack::PopAndDestroy(); // IntToDesLC - } - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendGetDataSizeResultsL() -// Appends a Get data owner size -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendGetDataSizeResultsL ( - ConML_ResultsPtr_t aContent, CSConGetDataSize* aResult ) - { - TRACE_FUNC_ENTRY; - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - } - AppendProgressL( aContent, aResult->iProgress ); - - if ( aResult->iDataOwners.Count() > 0 ) - { - aContent->dataOwners = new ( ELeave ) ConML_DataOwners_t(); - - for ( TInt i=0; i< aResult->iDataOwners.Count(); i++ ) - { - ConML_SIDListPtr_t sid = new ( ELeave ) ConML_SIDList_t(); - CleanupStack::PushL( sid ); - GenericListAddL ( &aContent->dataOwners->sid, sid ); - CleanupStack::Pop(); - - sid->data = new ( ELeave ) ConML_SID_t(); - - sid->data->type = new ( ELeave ) pcdata_t(); - sid->data->type->SetDataL ( IntToDesLC ( - aResult->iDataOwners[i]->iType) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - - sid->data->uid = new ( ELeave ) pcdata_t(); - - if( aResult->iDataOwners[i]->iUid.iUid ) - { - sid->data->uid->SetDataL ( UidToDesLC ( - aResult->iDataOwners[i]->iUid ) ); - CleanupStack::PopAndDestroy(); // UidToDesLC - } - - if( aResult->iDataOwners[i]->iJavaHash ) - { - sid->data->uid->SetDataL ( HashToDesLC ( - aResult->iDataOwners[i]->iJavaHash->Des() ) ); - CleanupStack::PopAndDestroy(); // HashToDesLC - } - - if ( HasDrives ( aResult->iDataOwners[i]->iDriveList ) ) - { - sid->data->drives = new ( ELeave ) ConML_Drives_t(); - AppendDrivesL ( sid->data->drives, - aResult->iDataOwners[i]->iDriveList ); - } - - sid->data->size = new ( ELeave ) pcdata_t(); - sid->data->size->SetDataL( IntToDesLC( - aResult->iDataOwners[i]->iSize ) ); - CleanupStack::PopAndDestroy(); // IntToDesLC - - sid->data->transferDataType = new ( ELeave ) pcdata_t(); - sid->data->transferDataType->SetDataL( IntToDesLC( - aResult->iDataOwners[i]->iTransDataType ) ); - - CleanupStack::PopAndDestroy(); // IntToDesLC - } - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendGetMetadataResultsL() -// Appends a GetMetadata -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendGetMetadataResultsL( - ConML_ResultsPtr_t aContent, CSConGetMetadata* aResult ) - { - TRACE_FUNC_ENTRY; - - if ( aResult ) - { - if ( aResult->iComplete ) - { - aContent->complete = new ( ELeave ) pcdata_t(); - - // add filename only if task is completed - aContent->filename = new ( ELeave ) pcdata_t(); - aContent->filename->SetDataL( BufToDesLC(aResult->iFilename ) ); - CleanupStack::PopAndDestroy(); // BufToDesLC - } - AppendProgressL( aContent, aResult->iProgress ); - - if ( aResult->iData ) - { - aContent->data = new ( ELeave ) pcdata_t(); - aContent->data->SetDataL( aResult->iData->Des() ); - } - - if ( aResult->iMoreData ) - { - aContent->moreData = new ( ELeave ) pcdata_t(); - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendProgressL() -// Appends a Progress -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendProgressL ( - ConML_ResultsPtr_t aContent, TInt progress ) - { - TRACE_FUNC_ENTRY; - aContent->progress = new ( ELeave ) ConML_Progress_t(); - aContent->progress->value = new ( ELeave ) pcdata_t(); - aContent->progress->value->SetDataL ( IntToDesLC ( progress )); - CleanupStack::PopAndDestroy(); // IntToDesLC - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::AppendDrivesL() -// Appends a Drives -element from the reply data of PCCS -// ----------------------------------------------------------------------------- -// -void CSConPCConnSession::AppendDrivesL( - ConML_DrivesPtr_t aContent, TDriveList aDrives ) - { - TRACE_FUNC_ENTRY; - - for ( TInt i = 0; idrive, drive ); - CleanupStack::Pop(); // drive - - drive->data = new ( ELeave ) ConML_Drive_t(); - drive->data->name = new ( ELeave ) pcdata_t(); - drive->data->name->SetDataL( DriveNumToDesLC(i+KSConFirstDrive )); - CleanupStack::PopAndDestroy(); // IntToDesLC - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::DriveList() -// Converts an Drives -element to TDriveList -// ----------------------------------------------------------------------------- -// -TDriveList CSConPCConnSession::DriveList( ConML_DriveListPtr_t aContent ) - { - TBuf8 driveBuf; - TDriveList driveList; - - for ( ConML_DriveListPtr_t p = aContent; p && p->data; p = p->next ) - { - if ( p->data->name ) - { - driveBuf.Append( p->data->name->Data() ); - } - } - - for ( TInt i = 0; iDes(); - ptrBuf.Num(anInt); - return *buf; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::DriveNumToDesLC() -// Convers a drive number to equivalent drive letter -// ----------------------------------------------------------------------------- -// -TDesC8& CSConPCConnSession::DriveNumToDesLC( const TInt& anInt ) - { - TChar mark ( anInt ); - HBufC8* buf = HBufC8::NewLC(1); - TPtr8 ptrBuf = buf->Des(); - ptrBuf.Append(mark); - return *buf; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::BufToDesLC() -// converts a buffer to descriptor -// ----------------------------------------------------------------------------- -// -TDesC8& CSConPCConnSession::BufToDesLC( const TDesC& aBuf) - { - HBufC8* buf = CnvUtfConverter::ConvertFromUnicodeToUtf8L( aBuf ); - CleanupStack::PushL( buf ); - return *buf; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::UidToDesLC() -// converts an UID to a descriptor -// ----------------------------------------------------------------------------- -// -TDesC8& CSConPCConnSession::UidToDesLC( const TUid& aUid ) - { - HBufC8* buf = HBufC8::NewLC(10); - TPtr8 ptrBuf = buf->Des(); - ptrBuf.Copy (aUid.Name().Mid(1, 8) ); - return *buf; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::DesToUid() -// converts a descriptor to a UID value -// ----------------------------------------------------------------------------- -// -TUid CSConPCConnSession::DesToUid ( const TDesC8& aDes ) - { - TLex8 lex( aDes ); - TUint32 value; - lex.Val( value, EHex ); - TUid uid = TUid::Uid( value ); - return uid; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::DesToInt() -// converts a descriptor to a integer value -// ----------------------------------------------------------------------------- -// -TInt CSConPCConnSession::DesToInt( const TDesC8& aDes) - { - TLex8 lex(aDes); - TInt value = 0; - lex.Val(value); - return value; - } - -// ----------------------------------------------------------------------------- -// CSConPCConnSession::HasDrives() -// Returns ETrue if at least one drive is found from the given TDriveList -// ----------------------------------------------------------------------------- -// -TBool CSConPCConnSession::HasDrives( TDriveList& aDrive ) - { - TBool hasDrives ( EFalse ); - for ( TInt i = 0; iDes(); - // Unicode conversion from 16-bit to 8-bit - CnvUtfConverter::ConvertFromUnicodeToUtf8(ptrBuf, aBuf); - //Add JAVA_ identifier to the begining of the hash - ptrBuf.Insert(0, KSConJavaHashId); - return *buf; - } -// ----------------------------------------------------------------------------- -// CSConPCConnSession::DesToHashLC() -// converts descriptor to Java hash -// ----------------------------------------------------------------------------- -// -TPtr CSConPCConnSession::DesToHashLC( const TDesC8& aDes ) - { - HBufC* buf = HBufC::NewLC(aDes.Size()); - TPtr ptrBuf = buf->Des(); - // Unicode conversion from 8-bit to 16-bit - CnvUtfConverter::ConvertToUnicodeFromUtf8(ptrBuf, aDes); - //Delete JAVA_ - ptrBuf.Delete(0, KSConJavaHashId().Length()); - return ptrBuf; - } -// ----------------------------------------------------------------------------- -// CSConPCConnSession::IsJavaHash() -// Returns ETrue if descriptor is Java hash, else EFalse -// ----------------------------------------------------------------------------- -// -TBool CSConPCConnSession::IsJavaHash( const TDesC8& aDes ) - { - if ( aDes.FindC(KSConJavaHashId) == 0 ) - { - return ETrue; - } - else - { - return EFalse; - } - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/group/bld.inf --- a/connectivitymodules/SeCon/servers/syncserver/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2009-2010 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: Build information file for project SyncServer -* -*/ - - -PRJ_EXPORTS -../rom/sconsyncserver.iby CORE_APP_LAYER_IBY_EXPORT_PATH(sconsyncserver.iby) - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -sconsyncserver.mmp - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/group/sconsyncserver.mmp --- a/connectivitymodules/SeCon/servers/syncserver/group/sconsyncserver.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 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: sconsyncserver mmp file -* -*/ - - -#include -#include - - -TARGET sconsyncserver.exe -TARGETTYPE exe - -// Same capabilities than in DS Ui application -CAPABILITY LocalServices ReadUserData WriteUserData ReadDeviceData WriteDeviceData NetworkServices UserEnvironment ProtServ SwEvent NetworkControl Location - -UID 0x0 0x2001A964 -VENDORID VID_DEFAULT - -EPOCSTACKSIZE 0x2000 -EPOCHEAPSIZE 0x500 0x800000 // minimum and maximum heap sizes - -SOURCEPATH ../src -SOURCE sconsyncserver.cpp -SOURCE sconsyncsession.cpp -SOURCE sconsyncrelationship.cpp -SOURCE sconasynchandler.cpp -SOURCE cscontimeout.cpp - -// common components (dataproviderinfo) -SOURCEPATH ../../../clients/syncclient/src -USERINCLUDE ../../../clients/syncclient/inc -SOURCE scondataproviderinfo.cpp - -USERINCLUDE ..\inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -DEBUGLIBRARY flogger.lib -LIBRARY euser.lib -LIBRARY efsrv.lib -LIBRARY bafl.lib -LIBRARY ecom.lib -LIBRARY estor.lib // CDictionaryFileStore -LIBRARY smldataprovider.lib -LIBRARY nsmlchangefinder.lib -LIBRARY smlstoreformat.lib -LIBRARY charconv.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/cscontimeout.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/cscontimeout.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 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: CCSconTimeOut header file -* -*/ - - -#ifndef CSCONTIMEOUT_H -#define CSCONTIMEOUT_H - -#include // For CActive, link against: euser.lib -#include // For RTimer, link against: euser.lib - -class MTimeOutObserver - { -public: - virtual void TimeOut() = 0; - }; - -class CCSconTimeOut : public CActive - { -public: - // Cancel and destroy - ~CCSconTimeOut(); - - // Two-phased constructor. - static CCSconTimeOut* NewL( MTimeOutObserver& aTimeOutObserver ); - -public: - // New functions - // Function for making the timeout request - void Start(TTimeIntervalMicroSeconds32 aDelay); - -private: - // C++ constructor - CCSconTimeOut( MTimeOutObserver& aTimeOutObserver ); - - // Second-phase constructor - void ConstructL(); - -private: - // From CActive - // Handle completion - void RunL(); - - // How to cancel me - void DoCancel(); - - // Override to handle leaves from RunL(). Default implementation causes - // the active scheduler to panic. - TInt RunError(TInt aError); - -private: - enum TCSconTimeOutState - { - EUninitialized, // Uninitialized - EInitialized, // Initalized - EError - // Error condition - }; - -private: - TInt iState; // State of the active object - RTimer iTimer; // Provides async timing service - MTimeOutObserver& iTimeOutObserver; - }; - -#endif // CSCONTIMEOUT_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/debug.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/debug.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -/* -* Copyright (c) 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: Debug utility for SyncServer -* -*/ - - -#ifndef _SECON_DEBUG_H -#define _SECON_DEBUG_H - -#ifdef _DEBUG - - // File logging - #define __FLOGGING__ - - #include - #ifdef __FLOGGING__ - #include - #include - #endif - - NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow - { - public: - void Overflow(TDes16& /*aDes*/) {} - }; - - NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow - { - public: - void Overflow(TDes8& /*aDes*/) {} - }; - - _LIT( KLogDir, "SECON" ); - _LIT( KLogFile, "SeconDebug.txt" ); - - _LIT(KTracePrefix16, "[SeConSync] "); - _LIT8(KTracePrefix8, "[SeConSync] "); - _LIT8(KFuncEntryFormat8, "%S : Begin"); - _LIT8(KFuncExitFormat8, "%S : End"); - _LIT8(KFuncFormat8, "><%S"); - - const TInt KMaxLogLineLength = 512; - - // old function loggin macros - #define FLOG(a) {FPrint(a);} - #define FLOG_1(a,b) {FPrint(a,b);} - #define FLOG_2(a,b,c) {FPrint(a,b,c);} - #define FTRACE(a) {a;} - #define LOGGER_ENTERFN( name ) {TRACE_FUNC_ENTRY;} - #define LOGGER_LEAVEFN( name ) {TRACE_FUNC_EXIT;} - - #define LOGGER_WRITE( text ) {_LIT( KTemp, text ); FPrint( KTemp );} - #define LOGGER_WRITE_1( text,par1 ) {_LIT( KTemp, text ); FPrint( KTemp, par1 );} - #define LOGGER_WRITE8_1( text,par1 ) {_LIT8( KTemp, text ); FPrint( KTemp, par1 );} - #define LOGGER_WRITE_2( text,par1,par2 ) {_LIT( KTemp, text ); FPrint( KTemp, par1, par2 );} - #define LOGGER_WRITE_3( text,par1,par2,par3 ) {_LIT( KTemp, text ); FPrint( KTemp, par1, par2, par3 );} - - // New function logging macros - #define TRACE_FUNC_ENTRY {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncEntryFormat8, &ptr8);} - #define TRACE_FUNC_EXIT {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncExitFormat8, &ptr8);} - #define TRACE_FUNC {TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); FPrint(KFuncFormat8, &ptr8);} - - // Declare the FPrint function - inline void FPrint( TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list,aFmt); - #ifdef __FLOGGING__ - RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list ); - #endif - TBuf16 theFinalString; - theFinalString.Append(KTracePrefix16); - TOverflowTruncate16 overflow; - theFinalString.AppendFormatList(aFmt,list,&overflow); - RDebug::Print(theFinalString); - } - - // Declare the FPrint function - inline void FPrint(TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list, aFmt); - #ifdef __FLOGGING__ - RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); - #endif - TOverflowTruncate8 overflow; - TBuf8 buf8; - buf8.Append(KTracePrefix8); - buf8.AppendFormatList(aFmt, list, &overflow); - TBuf16 buf16(buf8.Length()); - buf16.Copy(buf8); - TRefByValue tmpFmt(_L("%S")); - RDebug::Print(tmpFmt, &buf16); - } -#else - - // No loggings --> reduced code size - #define FLOG(a) - #define FLOG_1(a,b) - #define FLOG_2(a,b,c) - #define FTRACE(a) - #define LOGGER_ENTERFN( name ) - #define LOGGER_LEAVEFN( name ) - #define LOGGER_WRITE( text ) - #define LOGGER_WRITE_1( text, par1 ) - #define LOGGER_WRITE8_1( text, par1 ) - #define LOGGER_WRITE_2( text, par1, par2 ) - #define LOGGER_WRITE_3( text, par1, par2, par3 ) - #define TRACE_FUNC_ENTRY - #define TRACE_FUNC_EXIT - #define TRACE_FUNC - -#endif //_DEBUG - -#endif // SECON_DEBUG_H - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/logdatastoreformat.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/logdatastoreformat.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* -* Copyright (c) 2010 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: Simple class for tracing datastore format -* -*/ - -#ifndef LOGDATASTOREFORMAT_H_ -#define LOGDATASTOREFORMAT_H_ - -// -#include "debug.h" - -NONSHARABLE_CLASS(TLogDataStoreFormat) - { - public: -#ifndef _DEBUG -// does nothing on release version -static void TLogDataStoreFormat::LogDataStoreFormatL( const TDesC& /*aLogInfo*/, const CSmlDataStoreFormat& /*aDataStoreFormat*/ ) - { - } -#else -static void TLogDataStoreFormat::LogDataStoreFormatL( const TDesC& aLogInfo, const CSmlDataStoreFormat& aDataStoreFormat ) - { - LOGGER_WRITE_1("LogDataStoreFormatL, aLogInfo: %S", &aLogInfo); - LOGGER_WRITE_1("DisplayName: %S", &aDataStoreFormat.DisplayName()); - TBool hasMaxSize = aDataStoreFormat.IsSupported( CSmlDataStoreFormat::EOptionHasMaxSize ); - TBool hasMaxItems = aDataStoreFormat.IsSupported( CSmlDataStoreFormat::EOptionHasMaxItems ); - TBool hierarcial = aDataStoreFormat.IsSupported( CSmlDataStoreFormat::EOptionHierarchial ); - LOGGER_WRITE_1("hasMaxSize: %d", (TInt)hasMaxSize); - LOGGER_WRITE_1("hasMaxItems: %d", (TInt)hasMaxItems); - LOGGER_WRITE_1("hierarcial: %d", (TInt)hierarcial); - LOGGER_WRITE_1("MimeFormatCount: %d", aDataStoreFormat.MimeFormatCount()); - for ( TInt i = 0; i < aDataStoreFormat.MimeFormatCount(); i++) - { - LOGGER_WRITE_1(" MimeFormat(%d)",i); - const CSmlMimeFormat& mimeformat = aDataStoreFormat.MimeFormat(i); - LOGGER_WRITE8_1(" MimeType: %S", &mimeformat.MimeType().DesC()); - LOGGER_WRITE8_1(" MimeVersion: %S", &mimeformat.MimeVersion().DesC()); - LOGGER_WRITE_1( " FieldLevel, bool: %d", (TInt) mimeformat.FieldLevel()); - LOGGER_WRITE_1( " PropertyCount: %d", mimeformat.PropertyCount()); - for ( TInt j=0; j -#include - -#include -#include - -#include "cscontimeout.h" - -class CSmlDataStore; -class CSconSyncRelationship; -class CSmlDataProvider; -class CNSmlDataItemUidSet; -class CSmlDataStoreFormat; - -NONSHARABLE_CLASS ( CSconAsyncHandler ): public CActive, MTimeOutObserver -{ -public: - static CSconAsyncHandler* NewL(); - ~CSconAsyncHandler(); - void HandleServiceL( const RMessage2& aMessage ); - -private: // From CActive - void RunL(); - TInt RunError(TInt aError); - void DoCancel(); - -private: // From MTimeOutObserver - void TimeOut(); - -private: - - CSconAsyncHandler(); - void ConstructL(); - - void HandleChunkMessage(); - void ListAllImplementationsL(); - void OpenStoreL(); - - void OpenItemL(); - void OpenItemCompletedL( TInt aError ); - - void CreateItemL(); - void CreateItemCompletedL( TInt aError ); - void ReplaceItemL(); - void ReplaceItemCompletedL( TInt aError ); - void MoveItemL(); - void DeleteItemL(); - void SoftDeleteItemL(); - void DeleteAllItemsL(); - void ReadParentL(); - void ReadParentCompletedL( TInt aError ); - - void HasHistoryL(); - void AddedItemsL(); - void DeletedItemsL(); - void SoftDeletedItemsL(); - void ModifiedItemsL(); - void MovedItemsL(); - //void ListChangesL(); - void ResetChangeInfoL(); - void CommitChangeInfoL(); - void CloseStore(); - - void SetSyncTimeStampL(); - void GetSyncTimeStampL(); - - void ExportStoreFormatL(); - void SetRemoteStoreFormatL(); - - void LeaveIfNoInstanceL(); - - void DoCloseStore(); - - void CleanOldStoresL(); - void CompleteRequest( TInt aError ); -private: - RChunk iChunk; - - RStringPool iStringPool; - CSmlDataStoreFormat* iStoreFormat; - CSmlDataProvider* iDataProvider; - CSmlDataStore* iDataStore; - CSconSyncRelationship* iContext; - RFs iFs; - RMessage2 iMessage; - - // for committing changes - CNSmlDataItemUidSet* iItems; - - // for opening item - TBool iFieldChange; - TInt iSize; - TInt iParent; - TBuf8<64> iMimeType; - TBuf8<64> iMimeVer; - - // for creating item - TSmlDbItemUid iNewItem; - HBufC8* iWriteData; - TBool iCommitInProgress; - - CCSconTimeOut* iTimeOut; - TBool iForceCancel; -}; - -#endif /*SCONASYNCHANDLER_H_*/ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/sconsyncclientserver.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/sconsyncclientserver.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 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: Sync Client-Server header -* -*/ - - -#ifndef SCONSYNCCLIENTSERVER_H -#define SCONSYNCCLIENTSERVER_H - -#include - -_LIT(KSconSyncServerName, "sconsyncserver"); -_LIT(KSconSyncServerExe, "sconsyncserver.exe"); - - -enum TService -{ - ESendChunkHandle, - ECancelRequest, - EListImplementations, - - EOpenStore, - EOpenItem, - ECreateItem, - EReplaceItem, - EMoveItem, - EDeleteItem, - ESoftDeleteItem, - EDeleteAllItems, - EReadParent, - - EHasHistory, - EAddedItems, - EDeletedItems, - ESoftDeletedItems, - EModifiedItems, - EMovedItems, - - //EListChanges, - EResetChangeInfo, - ECommitChangeInfo, - - ECloseStore, - ESetSyncTimeStamp, - EGetSyncTimeStamp, - EExportStoreFormat, - ESetRemoteStoreFormat, - - EMaxService // Not an actual service -}; - -#endif // SCONSYNCCLIENTSERVER_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/sconsyncrelationship.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/sconsyncrelationship.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncRelationship header -* -*/ - - -#ifndef SCONSYNCRELATIONSHIP_H_ -#define SCONSYNCRELATIONSHIP_H_ - -#include -#include -#include -#include -#include - -class CDictionaryFileStore; - -NONSHARABLE_CLASS ( CSconSyncRelationship ) : public CBase, public MSmlSyncRelationship - { -public: - /** - * Creates CSconSyncRelationship object. - * @param aFs reference to open RFs connection - * @param aRelationUid uniqueID for each server-client pair - * @return new CSconSyncRelationship object - */ - static CSconSyncRelationship* NewL( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aProviderId ); - ~CSconSyncRelationship(); - - static void SetTimeStampL( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aId ); - static void GetTimeStampL( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aId, TDateTime& aTimeStamp ); - -public: // From MSmlSyncRelationship - - /** - * Returns the unique identifier for the synchronisation relationship. - * - * @return A unique identifier for the sync relationship. - */ - TSmlSyncTaskKey SyncTaskKey() const; - - /** - * Opens a specified stream for reading, and places an item on the cleanup stack to close it. - * - * @param aReadStream On return, an open read stream - * @param aStreamUid The UID of the stream to open for reading. - */ - void OpenReadStreamLC(RReadStream& aReadStream, TUid aStreamUid); - - /** - * Opens the specified stream, or creates a new one if it does not exist, and places an item on the cleanup stack to close it. - * - * @param aWriteStream On return, an open write stream - * @param aStreamUid The UID of the stream to open or create - */ - void OpenWriteStreamLC(RWriteStream& aWriteStream, TUid aStreamUid); - - /** - * Tests if the specified stream identified exists in the store. - * - * @param aStreamUid The stream UID - * @return Non-zero if the stream exists, otherwise EFalse. - */ - TBool IsStreamPresentL(TUid aStreamUid) const; - -private: - CSconSyncRelationship( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aProviderId ); - void ConstructL(); - -private: - - CDictionaryFileStore* iDictionaryStore; - RFs& iFs; - TUid iID; - TSmlDataProviderId iProviderId; - }; - -#endif /*SCONSYNCRELATIONSHIP_H_*/ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/sconsyncserver.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/sconsyncserver.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncServer header -* -*/ - - -#ifndef __SCONSYNCSERVER_H__ -#define __SCONSYNCSERVER_H__ - -#include - -class CSconSyncServer : public CPolicyServer -{ -public: - static CSconSyncServer* NewL(); - static CSconSyncServer* NewLC(); - virtual ~CSconSyncServer(); - - void AddSession(); - void RemoveSession(); - -private: - CSconSyncServer(); - void ConstructL(); - - CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const; - TInt RunError(TInt aError); - -private: - TInt iSessionCount; - -}; - -#endif // __SCONSYNCSERVER_H__ \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/inc/sconsyncsession.h --- a/connectivitymodules/SeCon/servers/syncserver/inc/sconsyncsession.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncSession header -* -*/ - - -#ifndef __SCONSYNCSESSION_H__ -#define __SCONSYNCSESSION_H__ - -#include - - -class CSconSyncServer; -class CSconAsyncHandler; - -class CSconSyncSession : public CSession2 - { -public: - static CSconSyncSession* NewL(); - - void CreateL(); - -private: - CSconSyncSession(); - ~CSconSyncSession(); - void ConstructL(); - - CSconSyncServer& Server(); - void ServiceL(const RMessage2& aMessage); - -private: - CSconAsyncHandler* iAsyncHandler; - }; - -#endif // __SCONSYNCSESSION_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/rom/sconsyncserver.iby --- a/connectivitymodules/SeCon/servers/syncserver/rom/sconsyncserver.iby Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2010 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: IBY file for SconSyncServer -* -*/ - -#ifndef _SCONSYNCSERVER_IBY_ -#define _SCONSYNCSERVER_IBY_ - -#include - -//file content -file=ABI_DIR\BUILD_DIR\sconsyncserver.exe PROGRAMS_DIR\sconsyncserver.exe - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/src/cscontimeout.cpp --- a/connectivitymodules/SeCon/servers/syncserver/src/cscontimeout.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* -* Copyright (c) 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: CCSconTimeOut implementation -* -*/ - -#include "cscontimeout.h" - -CCSconTimeOut::CCSconTimeOut( MTimeOutObserver& aTimeOutObserver ) : - CActive(EPriorityStandard), // Standard priority - iTimeOutObserver(aTimeOutObserver) - { - } - - -CCSconTimeOut* CCSconTimeOut::NewL( MTimeOutObserver& aTimeOutObserver ) - { - CCSconTimeOut* self = new (ELeave) CCSconTimeOut( aTimeOutObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -void CCSconTimeOut::ConstructL() - { - User::LeaveIfError(iTimer.CreateLocal()); // Initialize timer - CActiveScheduler::Add(this); // Add to scheduler - } - -CCSconTimeOut::~CCSconTimeOut() - { - Cancel(); // Cancel any request, if outstanding - iTimer.Close(); // Destroy the RTimer object - // Delete instance variables if any - } - -void CCSconTimeOut::DoCancel() - { - iTimer.Cancel(); - } - -void CCSconTimeOut::Start(TTimeIntervalMicroSeconds32 aDelay) - { - Cancel(); // Cancel any request, just to be sure - iState = EUninitialized; - iTimer.After(iStatus, aDelay); // Set for later - SetActive(); // Tell scheduler a request is active - } - -void CCSconTimeOut::RunL() - { - /*if (iState == EUninitialized) - { - // Do something the first time RunL() is called - iState = EInitialized; - } - else if (iState != EError) - { - // Do something - } - iTimer.After(iStatus, 1000000); // Set for 1 sec later - SetActive(); // Tell scheduler a request is active*/ - if ( iState == KErrNone ) - { - iTimeOutObserver.TimeOut(); - } - - } - -TInt CCSconTimeOut::RunError(TInt aError) - { - return aError; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/src/sconasynchandler.cpp --- a/connectivitymodules/SeCon/servers/syncserver/src/sconasynchandler.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1179 +0,0 @@ -/* -* Copyright (c) 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: CSconAsyncHandler implementation -* -*/ - - -#include "sconasynchandler.h" - -#include -#include -#include -#include -#include -#include -#include - -#include "sconsyncclientserver.h" -#include "sconsyncrelationship.h" -#include "scondataproviderinfo.h" -#include "debug.h" -#include "logdatastoreformat.h" - -// Data Store interface implementation Uid. -// Load all plugins with this uid. -const TUid KDSEcomIFUid = {0x101F4D3A}; - -const TInt KDefaultExpandSize = 1024; - -// one store per computer, max store count. -const TInt KMaxStoresCount = 10; - -const TInt KDefaultTimeOutInMicroSeconds = 30 * 1000000; // 30 seconds -const TInt KDeleteAllTimeOutInMicroSeconds = 300 * 1000000; // 5 minutes -const TInt KOpenStoreTimeOutInMicroSeconds = 180 * 1000000; // 180 seconds - -CSconAsyncHandler::~CSconAsyncHandler() - { - TRACE_FUNC_ENTRY; - Cancel(); - DoCloseStore(); - delete iItems; - delete iWriteData; - delete iDataStore; - delete iDataProvider; - delete iContext; - delete iStoreFormat; - iStringPool.Close(); - iFs.Close(); - REComSession::FinalClose(); - iChunk.Close(); - delete iTimeOut; - TRACE_FUNC_EXIT; - } - -CSconAsyncHandler::CSconAsyncHandler(): CActive( EPriorityStandard ) - { - TRACE_FUNC; - CActiveScheduler::Add( this ); - } - -CSconAsyncHandler* CSconAsyncHandler::NewL() - { - TRACE_FUNC; - CSconAsyncHandler* self = new(ELeave) CSconAsyncHandler(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -void CSconAsyncHandler::ConstructL() - { - TRACE_FUNC; - User::LeaveIfError( iFs.Connect() ); - TInt err = iFs.CreatePrivatePath( EDriveC ); - LOGGER_WRITE_1("CreatePrivatePath err: %d", err); - iStringPool.OpenL(); - iTimeOut = CCSconTimeOut::NewL( *this ); - } - -// ----------------------------------------------------------------------------- -// CSconAsyncHandler::HandleServiceL() -// Handles the client request -// ----------------------------------------------------------------------------- -// -void CSconAsyncHandler::HandleServiceL( const RMessage2& aMessage ) - { - TRACE_FUNC_ENTRY; - if ( aMessage.Function() == ECancelRequest ) - { - LOGGER_WRITE("ECancelRequest"); - if ( IsActive() ) - { - Cancel(); - LOGGER_WRITE("iMessage.Complete( KErrCancel )"); - CompleteRequest( KErrCancel ); - } - - LOGGER_WRITE("aMessage.Complete( KErrNone )"); - aMessage.Complete( KErrNone ); - TRACE_FUNC_EXIT; - return; - } - - iTimeOut->Start( KDefaultTimeOutInMicroSeconds ); - - iMessage = aMessage; - switch ( aMessage.Function() ) - { - case ESendChunkHandle: - LOGGER_WRITE( "CSconSyncSession::ServiceL() : ESendChunkHandle" ); - HandleChunkMessage(); - break; - - case EListImplementations: - LOGGER_WRITE( "CSconSyncSession::ServiceL() : EListImplementations" ); - ListAllImplementationsL(); - break; - - case EOpenStore: - LOGGER_WRITE( "CSconSyncSession::ServiceL() : EOpenStore" ); - iTimeOut->Start( KOpenStoreTimeOutInMicroSeconds ); - OpenStoreL(); - break; - - case EOpenItem: - OpenItemL(); - break; - case ECreateItem: - CreateItemL(); - break; - case EReplaceItem: - ReplaceItemL(); - break; - case EMoveItem: - MoveItemL(); - break; - case EDeleteItem: - DeleteItemL(); - break; - case ESoftDeleteItem: - SoftDeleteItemL(); - break; - case EDeleteAllItems: - iTimeOut->Start( KDeleteAllTimeOutInMicroSeconds ); - DeleteAllItemsL(); - break; - case EReadParent: - ReadParentL(); - break; - - case EHasHistory: - HasHistoryL(); - break; - case EAddedItems: - AddedItemsL(); - break; - case EDeletedItems: - DeletedItemsL(); - break; - case ESoftDeletedItems: - SoftDeletedItemsL(); - break; - case EModifiedItems: - ModifiedItemsL(); - break; - case EMovedItems: - MovedItemsL(); - break; - case EResetChangeInfo: - ResetChangeInfoL(); - break; - case ECommitChangeInfo: - CommitChangeInfoL(); - break; - case ECloseStore: - CloseStore(); - break; - case ESetSyncTimeStamp: - SetSyncTimeStampL(); - break; - case EGetSyncTimeStamp: - GetSyncTimeStampL(); - break; - case EExportStoreFormat: - ExportStoreFormatL(); - break; - case ESetRemoteStoreFormat: - SetRemoteStoreFormatL(); - break; - - default: - aMessage.Complete(KErrNotSupported); - break; - } - TRACE_FUNC_EXIT; - } - - -void CSconAsyncHandler::RunL() - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("iStatus.Int(): %d", iStatus.Int()); - switch ( iMessage.Function() ) - { - case EOpenStore: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EOpenStore" ); - CompleteRequest( iStatus.Int() ); - break; - - case EOpenItem: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EOpenItem" ); - OpenItemCompletedL( iStatus.Int() ); - break; - - case ECreateItem: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : ECreateItem" ); - if (!iCommitInProgress) - { - // Write data to item - CreateItemCompletedL( iStatus.Int() ); - } - else - { - // commit is done, all ready - LOGGER_WRITE( "CSconAsyncHandler::RunL() : ECreateItem, commit done" ); - TPckg pckg(iNewItem); - iMessage.WriteL( 0, pckg, 0); - CompleteRequest( iStatus.Int() ); - } - break; - - case EReplaceItem: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EReplaceItem" ); - if (!iCommitInProgress) - { - // Write data to item - ReplaceItemCompletedL( iStatus.Int() ); - } - else - { - // commit is done, all ready - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EReplaceItem, commit done" ); - CompleteRequest( iStatus.Int() ); - } - break; - - case EMoveItem: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EMoveItem" ); - CompleteRequest( iStatus.Int() ); - break; - - case EDeleteItem: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EDeleteItem" ); - CompleteRequest( iStatus.Int() ); - break; - - case ESoftDeleteItem: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : ESoftDeleteItem" ); - CompleteRequest( iStatus.Int() ); - break; - - case EDeleteAllItems: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EDeleteAllItems" ); - CompleteRequest( iStatus.Int() ); - break; - - case EReadParent: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EReadParent" ); - ReadParentCompletedL( iStatus.Int() ); - break; - - case EResetChangeInfo: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : EResetChangeInfo" ); - CompleteRequest( iStatus.Int() ); - break; - - case ECommitChangeInfo: - LOGGER_WRITE( "CSconAsyncHandler::RunL() : ECommitChangeInfo" ); - delete iItems; - iItems = NULL; - CompleteRequest( iStatus.Int() ); - break; - - default: - LOGGER_WRITE("Not asynchronous function") - CompleteRequest( KErrNotSupported ); - break; - } - TRACE_FUNC_EXIT; - } - -TInt CSconAsyncHandler::RunError(TInt aError) - { - LOGGER_WRITE_1("CSconAsyncHandler::RunError() aError: %d", aError); - delete iItems; - iItems = NULL; - delete iWriteData; - iWriteData = NULL; - - if ( IsActive() ) - { - LOGGER_WRITE("IsActive"); - //iDataStore->CancelRequest(); - Cancel(); - } - - if ( iDataStore && iMessage.Function() == EOpenItem ) - { - LOGGER_WRITE( "CSconAsyncHandler::RunError() : EOpenItem" ); - iDataStore->CloseItem(); - } - - CompleteRequest( aError ); - aError = KErrNone; - LOGGER_WRITE_1("CSconAsyncHandler::RunError() : Return %d", aError); - return aError; - //return KErrNone;//aError; - } - -void CSconAsyncHandler::DoCancel() - { - TRACE_FUNC_ENTRY; - iDataStore->CancelRequest(); - iTimeOut->Cancel(); - - if ( iStatus == KRequestPending ) - { - LOGGER_WRITE( "iStatus == KRequestPending" ); - } - - if ( iDataStore && iMessage.Function() == EOpenItem ) - { - LOGGER_WRITE( "CSconAsyncHandler::RunError() : EOpenItem" ); - iDataStore->CloseItem(); - } - - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::TimeOut() - { - TRACE_FUNC_ENTRY; - if ( IsActive() ) - { - Cancel(); - CompleteRequest( KErrCancel ); - } - TRACE_FUNC_EXIT; - } - - -void CSconAsyncHandler::HandleChunkMessage() - { - TRACE_FUNC_ENTRY; - TInt ret ( KErrNone ); - - ret = iChunk.Open( iMessage, 0, EFalse ); - - LOGGER_WRITE_1( "CSconAsyncHandler::HandleChunkMessageL() : ret %d", ret ); - CompleteRequest( ret ); - } - - - -void CSconAsyncHandler::ListAllImplementationsL() - { - TRACE_FUNC_ENTRY; - - RImplInfoPtrArray implInfoArray; - CleanupResetAndDestroyPushL( implInfoArray ); - REComSession::ListImplementationsL( KDSEcomIFUid, implInfoArray ); - - const TInt KDataproviderInfoSize = 250; // 250 bytes should be enought - TInt requiredSize = implInfoArray.Count() * KDataproviderInfoSize; - if ( iChunk.Size() < requiredSize ) - { - User::LeaveIfError( iChunk.Adjust( requiredSize ) ); - } - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - - RSconDataProviderInfoArray dpInfoArray; - CleanupResetAndDestroyPushL( dpInfoArray ); - - // Collect information from dataproviders - for ( TInt i=0; i < implInfoArray.Count(); i++ ) - { - LOGGER_WRITE_1("implInfoArray: %d",i); - CImplementationInformation& implInfo = *implInfoArray[i]; - - CSmlDataProvider* dp(NULL); - TRAPD( err, dp = CSmlDataProvider::NewL( implInfo.ImplementationUid().iUid ) ); - LOGGER_WRITE_2("CSmlDataProvider::NewL, uid(0x%08x) err: %d",implInfo.ImplementationUid().iUid, err ); - if ( !err ) - { - CleanupStack::PushL( dp ); - - CSconDataproviderInfo *dpInfo = CSconDataproviderInfo::NewL(); - CleanupStack::PushL( dpInfo ); - - dpInfo->SetImplementationUid( implInfo.ImplementationUid() ); - LOGGER_WRITE_1("ImplementationUid: 0x%08x", implInfo.ImplementationUid().iUid ); - dpInfo->SetDisplayNameL( implInfo.DisplayName() ); - LOGGER_WRITE_1("DisplayName: %S", &implInfo.DisplayName() ); - - dpInfo->SetDefaultStoreL( dp->DefaultStoreL() ); - LOGGER_WRITE_1("DefaultStoreL: %S", &dp->DefaultStoreL() ); - CDesCArray* stores = dp->ListStoresLC(); - dpInfo->SetStoresL( *stores ); - CleanupStack::PopAndDestroy( stores ); - - dpInfoArray.AppendL( dpInfo ); - CleanupStack::Pop( dpInfo ); - - CleanupStack::PopAndDestroy( dp ); - } - } - - // Wrtie to stream - stream.WriteUint16L( dpInfoArray.Count() ); - for ( TInt i = 0; i < dpInfoArray.Count(); i++ ) - { - CSconDataproviderInfo& dpInfo = *dpInfoArray[i]; - dpInfo.ExternalizeL( stream ); - } - - stream.CommitL(); - - CleanupStack::PopAndDestroy( &dpInfoArray ); - CleanupStack::PopAndDestroy( &stream ); - CleanupStack::PopAndDestroy( &implInfoArray ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::OpenStoreL() - { - TRACE_FUNC_ENTRY; - if ( iDataStore ) - { - LOGGER_WRITE("Warning: Previous DataStore was not closed properly."); - DoCloseStore(); - } - - // copy data from the chunk - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - TSmlDataProviderId providerId = readStream.ReadUint32L(); - LOGGER_WRITE_1("providerId: 0x%08x", providerId); - - TInt len = readStream.ReadUint32L(); - HBufC* storeName = HBufC::NewLC(len); - TPtr storeNamePtr = storeName->Des(); - readStream.ReadL(storeNamePtr, len); - LOGGER_WRITE_1("storeName: %S", &storeNamePtr); - - TInt contextUid = readStream.ReadUint32L(); - - LOGGER_WRITE_1("contextIdentifier: 0x%08x", contextUid); - - LOGGER_WRITE("Open provider"); - delete iDataProvider; - iDataProvider = NULL; - iDataProvider = CSmlDataProvider::NewL( providerId ); - - delete iContext; - iContext = NULL; - - delete iStoreFormat; - iStoreFormat = NULL; - - LOGGER_WRITE("Create context"); - iContext = CSconSyncRelationship::NewL( iFs, TUid::Uid(contextUid), providerId ); - - - LOGGER_WRITE("Create NewStoreInstanceLC"); - iDataStore = iDataProvider->NewStoreInstanceLC(); - CleanupStack::Pop( iDataStore ); - - SetActive(); - iStatus = KRequestPending; - LOGGER_WRITE("OpenL"); - TRAPD(err, iDataStore->OpenL(storeNamePtr,*iContext, iStatus)); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->OpenL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - - CleanupStack::PopAndDestroy( storeName ); - CleanupStack::PopAndDestroy( &readStream ); - - TRACE_FUNC_EXIT; - } - - -void CSconAsyncHandler::OpenItemL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - if ( IsActive() ) - { - LOGGER_WRITE("Was still in Active"); - Cancel(); - } - - TSmlDbItemUid itemUid = iMessage.Int0(); - LOGGER_WRITE_1("Open item: %d", itemUid); - - // set default values - iFieldChange = EFalse; - iSize = 0; - iParent = 0; - iMimeType.Copy(KNullDesC); - iMimeVer.Copy(KNullDesC); - - SetActive(); - LOGGER_WRITE("iDataStore->OpenItemL"); - iStatus = KRequestPending; - TRAPD( err, iDataStore->OpenItemL(itemUid,iFieldChange,iSize,iParent,iMimeType,iMimeVer,iStatus)); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->OpenItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::OpenItemCompletedL( TInt aError ) - { - TRACE_FUNC_ENTRY; - // item opened, now read it - if ( aError ) - { - CompleteRequest( aError ); - return; - } - LeaveIfNoInstanceL(); - - LOGGER_WRITE_1("item size: %d", iSize); - - TInt totalObjectSize( 0 ); - totalObjectSize+= sizeof(TInt32); // data length - totalObjectSize+= iSize; // data - totalObjectSize+= sizeof(TInt8); // iFieldChange - totalObjectSize+= sizeof(TInt32); // iParent - totalObjectSize+= sizeof(TInt32); // iMimeType - totalObjectSize+= iMimeType.Length(); // iMimeType - totalObjectSize+= sizeof(TInt32); // iMimeVer - totalObjectSize+= iMimeVer.Length(); // iMimeType - - LOGGER_WRITE_1("iChunk.Size(): %d", iChunk.Size()); - LOGGER_WRITE_1("iChunk.MaxSize(): %d", iChunk.MaxSize()); - LOGGER_WRITE_1("totalObjectSize: %d", totalObjectSize); - - if ( iChunk.Size() < totalObjectSize ) - { - LOGGER_WRITE("adjust chunk"); - TInt err = iChunk.Adjust( totalObjectSize ); - LOGGER_WRITE_1("Chunk.Adjust err: %d", err); - User::LeaveIfError( err ); - } - LOGGER_WRITE_1("new Chunk size: %d", iChunk.Size()); - LOGGER_WRITE_1("new ChunkMaxSize(): %d", iChunk.MaxSize()); - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - - LOGGER_WRITE("ReadItemL"); - HBufC8* tempBuf = HBufC8::NewLC(iSize); - TPtr8 tempPtr = tempBuf->Des(); - - TUint8* ptr = (TUint8*) tempPtr.Ptr(); - - TPtr8 tempPtr2( ptr, 0, iSize ); - LOGGER_WRITE_1( "tempPtr2.Size(): %d", tempPtr2.Size()); - iDataStore->ReadItemL( tempPtr2 ); - LOGGER_WRITE("ReadItemL -ok"); - - LOGGER_WRITE_1("readed Length: %d", tempPtr2.Length() ); - LOGGER_WRITE_1("readed Size: %d", tempPtr2.Size() ); - - LOGGER_WRITE8_1("iMimeType: %S", &iMimeType ); - LOGGER_WRITE_1("iMimeType.Length(): %d", iMimeType.Length() ); - LOGGER_WRITE_1("iMimeType Size: %d", iMimeType.Size() ); - - LOGGER_WRITE8_1("iMimeVer: %S", &iMimeVer ); - LOGGER_WRITE_1("iMimeVer.Length(): %d", iMimeVer.Length() ); - LOGGER_WRITE_1("iMimeVer Size: %d", iMimeVer.Size() ); - - iDataStore->CloseItem(); - LOGGER_WRITE("Write to chunk"); - stream.WriteInt32L( tempPtr2.Length() ); - stream.WriteL( tempPtr2 ); - CleanupStack::PopAndDestroy( tempBuf ); - - stream.WriteInt8L( (TInt)iFieldChange ); - stream.WriteInt32L( iParent ); - stream.WriteInt32L( iMimeType.Length() ); - stream.WriteL( iMimeType ); - stream.WriteInt32L( iMimeVer.Length() ); - stream.WriteL( iMimeVer ); - - stream.CommitL(); - LOGGER_WRITE("Writed ok"); - CleanupStack::PopAndDestroy( &stream ); - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::CreateItemL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - iCommitInProgress = EFalse; - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - TSmlDbItemUid parent = readStream.ReadUint32L(); - TInt len = readStream.ReadUint32L(); - readStream.ReadL(iMimeType, len); - len = readStream.ReadUint32L(); - readStream.ReadL(iMimeVer, len); - len = readStream.ReadUint32L(); - delete iWriteData; - iWriteData = NULL; - iWriteData = HBufC8::New(len); - TPtr8 dataPtr = iWriteData->Des(); - readStream.ReadL(dataPtr, len); - CleanupStack::PopAndDestroy( &readStream ); - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->CreateItemL( iNewItem, dataPtr.Size(), parent, iMimeType, iMimeVer, iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->CreateItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::CreateItemCompletedL( TInt aError ) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( aError ); - LeaveIfNoInstanceL(); - // CreateItem completed, now we must write the data to the created item and commit it. - - iDataStore->WriteItemL( iWriteData->Des() ); - delete iWriteData; - iWriteData = NULL; - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->CommitItemL( iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->CommitItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - iCommitInProgress = ETrue; - - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ReplaceItemL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - - iCommitInProgress = EFalse; - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - TSmlDbItemUid uid = readStream.ReadUint32L(); - TSmlDbItemUid parent = readStream.ReadUint32L(); - TBool fieldChange = readStream.ReadUint8L(); - TInt len = readStream.ReadUint32L(); - delete iWriteData; - iWriteData = NULL; - iWriteData = HBufC8::New(len); - TPtr8 dataPtr = iWriteData->Des(); - readStream.ReadL(dataPtr, len); - - CleanupStack::PopAndDestroy( &readStream ); - SetActive(); - iStatus = KRequestPending; - TRAPD(err,iDataStore->ReplaceItemL( uid,dataPtr.Size(),parent,fieldChange, iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->CommitItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ReplaceItemCompletedL( TInt aError ) - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( aError ); - LeaveIfNoInstanceL(); - // CreateItem completed, now we must write the data to the created item and commit it. - - iDataStore->WriteItemL( iWriteData->Des() ); - delete iWriteData; - iWriteData = NULL; - - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->CommitItemL( iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->CommitItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - iCommitInProgress = ETrue; - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::MoveItemL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - TSmlDbItemUid uid = iMessage.Int0(); - TSmlDbItemUid newParent = iMessage.Int1(); - LOGGER_WRITE_1( "uid: %d", uid ); - LOGGER_WRITE_1( "newParent: %d", newParent ); - - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->MoveItemL( uid, newParent, iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->MoveItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::DeleteItemL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - - TSmlDbItemUid uid = iMessage.Int0(); - LOGGER_WRITE_1( "uid: %d", uid ); - - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->DeleteItemL( uid, iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->DeleteItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::SoftDeleteItemL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - - TSmlDbItemUid uid = iMessage.Int0(); - LOGGER_WRITE_1( "uid: %d", uid ); - - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->SoftDeleteItemL( uid, iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->SoftDeleteItemL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::DeleteAllItemsL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->DeleteAllItemsL( iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->DeleteAllItemsL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ReadParentL() - { - TRACE_FUNC_ENTRY; - OpenItemL(); - - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ReadParentCompletedL( TInt aError ) - { - TRACE_FUNC_ENTRY; - // item opened, now read it - if ( aError ) - { - CompleteRequest( aError ); - return; - } - LeaveIfNoInstanceL(); - - iDataStore->CloseItem(); - - TPckg pckg(iParent); - iMessage.WriteL( 1, pckg, 0); - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::HasHistoryL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - TBool hasHistory = iDataStore->HasSyncHistory(); - - TPckgC pckg(hasHistory); - iMessage.WriteL( 0, pckg, 0); - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::AddedItemsL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - const MSmlDataItemUidSet& items = iDataStore->AddedItems(); - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - items.ExternalizeL( stream ); - CleanupStack::PopAndDestroy( &stream ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::DeletedItemsL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - const MSmlDataItemUidSet& items = iDataStore->DeletedItems(); - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - items.ExternalizeL( stream ); - CleanupStack::PopAndDestroy( &stream ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::SoftDeletedItemsL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - const MSmlDataItemUidSet& items = iDataStore->SoftDeletedItems(); - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - items.ExternalizeL( stream ); - CleanupStack::PopAndDestroy( &stream ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ModifiedItemsL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - const MSmlDataItemUidSet& items = iDataStore->ModifiedItems(); - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - items.ExternalizeL( stream ); - CleanupStack::PopAndDestroy( &stream ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::MovedItemsL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - const MSmlDataItemUidSet& items = iDataStore->MovedItems(); - - RMemWriteStream stream ( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( stream ); - items.ExternalizeL( stream ); - CleanupStack::PopAndDestroy( &stream ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ResetChangeInfoL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->ResetChangeInfoL( iStatus )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->ResetChangeInfoL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::CommitChangeInfoL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - if ( iItems ) - { - delete iItems; - iItems = NULL; - } - iItems = new (ELeave) CNSmlDataItemUidSet(); - iItems->InternalizeL( readStream ); - - CleanupStack::PopAndDestroy( &readStream ); - - SetActive(); - iStatus = KRequestPending; - TRAPD(err, iDataStore->CommitChangeInfoL( iStatus, *iItems )); - if ( err ) - { - // we are on active state, call request completed (RunL) - LOGGER_WRITE_1("iDataStore->CommitChangeInfoL leaved with err: %d", err); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, err ); - } - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::CloseStore() - { - TRACE_FUNC_ENTRY; - DoCloseStore(); - REComSession::FinalClose(); - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::SetSyncTimeStampL() - { - TRACE_FUNC_ENTRY; - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - TInt relationId = readStream.ReadInt32L(); - TInt providerId = readStream.ReadInt32L(); - CleanupStack::PopAndDestroy( &readStream ); - - CSconSyncRelationship::SetTimeStampL( iFs, TUid::Uid(relationId), providerId); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::GetSyncTimeStampL() - { - TRACE_FUNC_ENTRY; - TInt providerId = iMessage.Int0(); - TInt relationId = iMessage.Int1(); - - TDateTime time; - CSconSyncRelationship::GetTimeStampL( iFs, TUid::Uid(relationId), providerId, time); - - // write timestamp - TPckgC timeBuf(time); - iMessage.WriteL( 2, timeBuf, 0); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::ExportStoreFormatL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - if ( !iDataProvider ) - { - User::Leave( KErrNotReady ); - } - CBufFlat* buffer = CBufFlat::NewL( KDefaultExpandSize ); - CleanupStack::PushL( buffer ); - RBufWriteStream stream( *buffer ); - CleanupClosePushL( stream ); - - const CSmlDataStoreFormat& storeFormat = iDataProvider->StoreFormatL(); - TRAP_IGNORE( TLogDataStoreFormat::LogDataStoreFormatL( _L("iDataProvider->StoreFormatL()"), storeFormat )); - - storeFormat.ExternalizeL( stream ); - - stream.CommitL(); - CleanupStack::PopAndDestroy( &stream ); - buffer->Compress(); - - RMemWriteStream chunkStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( chunkStream ); - - chunkStream.WriteInt32L( buffer->Size() ); - chunkStream.WriteL( buffer->Ptr(0), buffer->Size()); - chunkStream.CommitL(); - CleanupStack::PopAndDestroy( &chunkStream ); - - CleanupStack::PopAndDestroy( buffer ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::SetRemoteStoreFormatL() - { - TRACE_FUNC_ENTRY; - LeaveIfNoInstanceL(); - - RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); - CleanupClosePushL( readStream ); - - if ( iStoreFormat ) - { - delete iStoreFormat; - iStoreFormat = NULL; - } - iStoreFormat = CSmlDataStoreFormat::NewLC( iStringPool, readStream); - CleanupStack::Pop( iStoreFormat ); - TRAP_IGNORE( TLogDataStoreFormat::LogDataStoreFormatL( _L("iDataProvider->SetRemoteStoreFormatL()"), *iStoreFormat )); - iDataStore->SetRemoteStoreFormatL( *iStoreFormat ); - - CleanupStack::PopAndDestroy( &readStream ); - - CompleteRequest( KErrNone ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::LeaveIfNoInstanceL() - { - if ( !iDataStore ) - { - LOGGER_WRITE("DataStore instance was not ready, leaving KErrNotReady"); - User::Leave( KErrNotReady ); - } - } - -void CSconAsyncHandler::DoCloseStore() - { - TRACE_FUNC_ENTRY; - delete iItems; - iItems = NULL; - delete iWriteData; - iWriteData = NULL; - if ( iDataProvider && iContext ) - { - TInt providerId = iDataProvider->Identifier(); - TInt contextId = iContext->SyncTaskKey(); - TRAP_IGNORE( CSconSyncRelationship::SetTimeStampL( iFs, TUid::Uid(contextId), providerId) ); - } - delete iDataStore; - iDataStore = NULL; - delete iDataProvider; - iDataProvider = NULL; - delete iContext; - iContext = NULL; - delete iStoreFormat; - iStoreFormat = NULL; - - CleanOldStoresL(); - - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::CleanOldStoresL() - { - TRACE_FUNC_ENTRY; - TFileName path; - User::LeaveIfError( iFs.PrivatePath( path ) ); - CDir* dir; - iFs.GetDir( path, KEntryAttNormal, ESortByDate, dir ); - CleanupStack::PushL( dir ); - TInt storesCount(0); - LOGGER_WRITE_1("count: %d", dir->Count() ); - for ( TInt i=dir->Count()-1; i >= 0; i-- ) - { - LOGGER_WRITE_1("dir[%d]", i); - TEntry entry = (*dir)[i]; - LOGGER_WRITE_1("file: %S", &entry.iName); - _LIT(KContextStoreName, "contextstore"); - _LIT(KTimeStoreName, "timestore"); - if ( entry.iName.Find(KContextStoreName) == 0 ) - { - storesCount++; - LOGGER_WRITE_1("storeNro: %d", storesCount); -#ifdef _DEBUG - TTime time = entry.iModified; - TDateTime dt = time.DateTime(); - _LIT(KFormat, "%d.%d %02d:%02d"); - TFileName mod; - mod.Format(KFormat, dt.Day()+1, dt.Month()+1, dt.Hour()+1,dt.Minute() ); - LOGGER_WRITE_1("time: %S", &mod); -#endif - if ( storesCount > KMaxStoresCount ) - { - LOGGER_WRITE_1("delete contextstore: '%S'", &entry.iName ); - iFs.Delete( entry.iName ); - TFileName timeStoreFile; - timeStoreFile = entry.iName.Right(15); - timeStoreFile.Insert(0, KTimeStoreName); - LOGGER_WRITE_1("delete timeStoreFile: %S", &timeStoreFile); - iFs.Delete( timeStoreFile ); - } - } - - } - CleanupStack::PopAndDestroy( dir ); - TRACE_FUNC_EXIT; - } - -void CSconAsyncHandler::CompleteRequest( TInt aError ) - { - TRACE_FUNC; - iTimeOut->Cancel(); - LOGGER_WRITE_1("iMessage.Complete( %d )", aError); - iMessage.Complete( aError ); - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/src/sconsyncrelationship.cpp --- a/connectivitymodules/SeCon/servers/syncserver/src/sconsyncrelationship.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncRelationship implementation -* -*/ - - -#include "sconsyncrelationship.h" -#include -#include - -#include "debug.h" - -_LIT(KContextStore, "contextstore_0x%08x.dat"); -_LIT(KTimeStore, "timestore_0x%08x.dat"); - -CSconSyncRelationship::~CSconSyncRelationship() - { - TRACE_FUNC_ENTRY; - if ( iDictionaryStore ) - { - iDictionaryStore->Commit(); - delete iDictionaryStore; - } - TRACE_FUNC_EXIT; - } - -CSconSyncRelationship::CSconSyncRelationship( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aProviderId ) - : iFs(aFs), iID(aRelationUid), iProviderId(aProviderId) - { - TRACE_FUNC; - - } - -CSconSyncRelationship* CSconSyncRelationship::NewL( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aProviderId ) - { - TRACE_FUNC_ENTRY; - CSconSyncRelationship* self = new (ELeave) CSconSyncRelationship( aFs, aRelationUid, aProviderId ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -void CSconSyncRelationship::SetTimeStampL( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aId ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aRelationUid: 0x%08x", aRelationUid.iUid ); - LOGGER_WRITE_1("aId: 0x%08x", aId ); - aFs.SetSessionToPrivate( EDriveC ); - TFileName file; - file.Format(KTimeStore, aRelationUid.iUid); - CDictionaryFileStore* dictionaryStore = CDictionaryFileStore::OpenLC(aFs, file, TUid::Uid(0x0001)); - - RDictionaryWriteStream stream; - stream.AssignLC( *dictionaryStore, TUid::Uid(aId) ); - - TTime time; - time.UniversalTime(); - - TDateTime dateTime = time.DateTime(); - TPckgBuf timeBuf(dateTime); - - stream.WriteL( timeBuf ); - stream.CommitL(); - - CleanupStack::PopAndDestroy( &stream ); //AssingLC - dictionaryStore->Commit(); - CleanupStack::PopAndDestroy( dictionaryStore ); - TRACE_FUNC_EXIT; - } - -void CSconSyncRelationship::GetTimeStampL( RFs& aFs, TUid aRelationUid, TSmlDataProviderId aId, TDateTime& aTimeStamp ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aRelationUid: 0x%08x", aRelationUid.iUid ); - LOGGER_WRITE_1("aId: 0x%08x", aId ); - User::LeaveIfError( aFs.SetSessionToPrivate( EDriveC ) ); - TFileName file; - file.Format(KTimeStore, aRelationUid.iUid); - CDictionaryFileStore* dictionaryStore = CDictionaryFileStore::OpenLC(aFs, file, TUid::Uid(0x0001)); - TBool present = dictionaryStore->IsPresentL( TUid::Uid(aId) ); - if ( !present ) - { - LOGGER_WRITE("Stream was not present"); - User::Leave(KErrNotFound); - } - RDictionaryReadStream stream; - stream.OpenLC( *dictionaryStore, TUid::Uid(aId) ); - TPckgBuf timeBuf; - stream.ReadL( timeBuf ); - aTimeStamp = timeBuf(); - CleanupStack::PopAndDestroy(); //OpenLC - CleanupStack::PopAndDestroy( dictionaryStore ); - - TRACE_FUNC_EXIT; - } - -void CSconSyncRelationship::ConstructL() - { - TRACE_FUNC_ENTRY; - iFs.SetSessionToPrivate( EDriveC ); - TFileName file; - file.Format(KContextStore, iID.iUid); - iDictionaryStore = CDictionaryFileStore::OpenL( - iFs, file, TUid::Uid(0x0001)); - - TRACE_FUNC_EXIT; - } - - -TSmlSyncTaskKey CSconSyncRelationship::SyncTaskKey() const - { - TRACE_FUNC; - return static_cast(iID.iUid); - } - -void CSconSyncRelationship::OpenReadStreamLC(RReadStream& aReadStream, TUid aStreamUid) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aStreamUid: 0x%08x", aStreamUid); - TUid streamUid(aStreamUid); - if ( aStreamUid.iUid == KNSmlDefaultSnapshotStreamUID ) - { - LOGGER_WRITE_1(" Default stream uid was used, use provider uid (0x%08x) as stream uid", iProviderId); - streamUid.iUid = iProviderId; - } - if ( !IsStreamPresentL( streamUid ) ) - { - LOGGER_WRITE("Stream was not present"); - User::Leave(KErrNotFound); - } - - - static_cast(aReadStream).OpenLC( - *iDictionaryStore, streamUid ); - TRACE_FUNC_EXIT; - } - -void CSconSyncRelationship::OpenWriteStreamLC(RWriteStream& aWriteStream, TUid aStreamUid) - { - TRACE_FUNC_ENTRY; - - LOGGER_WRITE_1("aStreamUid: 0x%08x", aStreamUid); - TUid streamUid(aStreamUid); - if ( aStreamUid.iUid == KNSmlDefaultSnapshotStreamUID ) - { - LOGGER_WRITE_1(" Default stream uid was used, use provider uid (0x%08x) as stream uid", iProviderId); - streamUid.iUid = iProviderId; - } - static_cast(aWriteStream).AssignLC( - *iDictionaryStore, streamUid ); - TRACE_FUNC_EXIT; - } - -TBool CSconSyncRelationship::IsStreamPresentL(TUid aStreamUid) const - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aStreamUid: 0x%08x", aStreamUid.iUid ); - TUid streamUid(aStreamUid); - if ( aStreamUid.iUid == KNSmlDefaultSnapshotStreamUID ) - { - LOGGER_WRITE_1(" Default stream uid was used, use provider uid (0x%08x) as stream uid", iProviderId); - streamUid.iUid = iProviderId; - } - TBool present = iDictionaryStore->IsPresentL( streamUid ); - LOGGER_WRITE_1("CSconSyncRelationship::IsStreamPresentL() return: %d",(TInt)present); - return present; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/src/sconsyncserver.cpp --- a/connectivitymodules/SeCon/servers/syncserver/src/sconsyncserver.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncServer implementation -* -*/ - - -#include "sconsyncserver.h" -#include "sconsyncclientserver.h" - -#include "sconsyncsession.h" -#include "debug.h" - -const TInt KSConPCConnServerUid = 0x101F99F6; - -// Security policy -const TUint KServerPolicyRangeCount = 2; - -const TInt KServerPolicyRanges[KServerPolicyRangeCount] = - { - 0, // range is 0 inclusive - EMaxService // range is 1-KMaxTInt inclusive - }; - -const TUint8 KServerPolicyElementsIndex[KServerPolicyRangeCount] = - { - 0, // applies to 0th range - CPolicyServer::ENotSupported // applies to 1st range - }; - -const CPolicyServer::TPolicyElement KServerPolicyElements[] = - { - { _INIT_SECURITY_POLICY_S0(KSConPCConnServerUid) /*_INIT_SECURITY_POLICY_C1(ECapabilityReadDeviceData)*/, CPolicyServer::EFailClient } - }; - -const CPolicyServer::TPolicy KServerPolicy = - { - 0 /*CPolicyServer::EAlwaysPass*/, // specifies all connect attempts should pass - KServerPolicyRangeCount, - KServerPolicyRanges, - KServerPolicyElementsIndex, - KServerPolicyElements - }; - - -CSconSyncServer* CSconSyncServer::NewL() - { - CSconSyncServer* self = NewLC(); - CleanupStack::Pop(self); - return self; - } - -CSconSyncServer* CSconSyncServer::NewLC() - { - CSconSyncServer* self = new(ELeave) CSconSyncServer(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CSconSyncServer::CSconSyncServer() : - CPolicyServer(EPriorityStandard, KServerPolicy, ESharableSessions) - { - } - -void CSconSyncServer::ConstructL() - { - TRACE_FUNC_ENTRY; - TInt error = Start(KSconSyncServerName); - - if (error != KErrNone) - { - User::Panic(KSconSyncServerName, error); - } - TRACE_FUNC_EXIT; - } - -CSconSyncServer::~CSconSyncServer() - { - TRACE_FUNC; - } - -CSession2* CSconSyncServer::NewSessionL(const TVersion& aVersion, const RMessage2& /*aMessage*/) const - { - TRACE_FUNC; - TVersion v(1,0,0); - if ( !User::QueryVersionSupported(v,aVersion) ) - { - TVersionName vname = aVersion.Name(); - LOGGER_WRITE_1("Client has wrong version: %S", &vname); - User::Leave( KErrNotSupported ); - } - - return CSconSyncSession::NewL(); - } - -TInt CSconSyncServer::RunError(TInt aError) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aError: %d", aError); - // Bad descriptor implies bad client - if (aError == KErrBadDescriptor) - { - Message().Panic(KSconSyncServerName, aError); - } - else - { - Message().Complete(aError); - } - - // Continue handling requests - ReStart(); - TRACE_FUNC_EXIT; - return KErrNone; - } - -void CSconSyncServer::AddSession() - { - ++iSessionCount; - LOGGER_WRITE_1("CSconSyncServer::AddSession(), iSessionCount: %d", iSessionCount); - } - -void CSconSyncServer::RemoveSession() - { - --iSessionCount; - LOGGER_WRITE_1("CSconSyncServer::RemoveSession(), iSessionCount: %d", iSessionCount); - if (iSessionCount == 0) - { - CActiveScheduler::Stop(); - } - } - -LOCAL_C void ExeMainL() - { - TRACE_FUNC_ENTRY; - // Install active scheduler - CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; - CleanupStack::PushL(scheduler); - CActiveScheduler::Install(scheduler); - - CSconSyncServer::NewLC(); - - User::LeaveIfError(User::RenameThread(KSconSyncServerName)); - RProcess::Rendezvous(KErrNone); - - CActiveScheduler::Start(); - - CleanupStack::PopAndDestroy(); // CSconSyncServer - CleanupStack::PopAndDestroy(); // CActiveScheduler - TRACE_FUNC_EXIT; - } - -GLDEF_C TInt E32Main() - { - TRACE_FUNC_ENTRY; - __UHEAP_MARK; - CTrapCleanup* cleanup = CTrapCleanup::New(); - - TRAPD(error, ExeMainL()); - __ASSERT_ALWAYS(!error, User::Panic(KSconSyncServerName, error)); - - delete cleanup; - __UHEAP_MARKEND; - TRACE_FUNC_EXIT; - return 0; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/servers/syncserver/src/sconsyncsession.cpp --- a/connectivitymodules/SeCon/servers/syncserver/src/sconsyncsession.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncSession implementation -* -*/ - - -#include "sconsyncsession.h" - -#include "sconsyncserver.h" -#include "sconsyncclientserver.h" -#include "sconasynchandler.h" -#include "debug.h" - - -CSconSyncSession::CSconSyncSession() - { - TRACE_FUNC; - } - -CSconSyncSession* CSconSyncSession::NewL() - { - TRACE_FUNC; - CSconSyncSession* self = new(ELeave) CSconSyncSession(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -void CSconSyncSession::ConstructL() - { - TRACE_FUNC_ENTRY; - iAsyncHandler = CSconAsyncHandler::NewL(); - TRACE_FUNC_EXIT; - } - -void CSconSyncSession::CreateL() - { - TRACE_FUNC; - Server().AddSession(); - } - -CSconSyncSession::~CSconSyncSession() - { - TRACE_FUNC_ENTRY; - delete iAsyncHandler; - - Server().RemoveSession(); - - TRACE_FUNC_EXIT; - } - -CSconSyncServer& CSconSyncSession::Server() - { - return *static_cast(const_cast(CSession2::Server())); - } - - -// ----------------------------------------------------------------------------- -// CSconSyncSession::ServiceL() -// Handles the client request -// ----------------------------------------------------------------------------- -// -void CSconSyncSession::ServiceL(const RMessage2& aMessage) - { - TRACE_FUNC_ENTRY; - - TRAPD( err, iAsyncHandler->HandleServiceL( aMessage )); - if ( err ) - { - LOGGER_WRITE_1("iAsyncHandler->HandleServiceL leaved: %d", err); - if ( iAsyncHandler->IsActive() ) - { - LOGGER_WRITE(" and it was active -> Cancel it"); - iAsyncHandler->Cancel(); - } - // do server error processing - User::Leave( err ); - } - - TRACE_FUNC_EXIT; - } - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/101F9698.xml Binary file connectivitymodules/SeCon/services/csc/bld/101F9698.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/101F99F6.xml Binary file connectivitymodules/SeCon/services/csc/bld/101F99F6.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/bld.inf --- a/connectivitymodules/SeCon/services/csc/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: Capability Object Module bld.inf file -* -*/ - - -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -./101F9698.xml Z:/private/101F99F6/capability/101F9698.xml -./fwdcomp.xml Z:/private/101F99F6/capability/fwdcomp.xml -./101F99F6.xml Z:/private/101F99F6/capability/101F99F6.xml - -PRJ_MMPFILES -sconcsc.mmp diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/services/csc/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?CreateCSConCSCL@@YAPAVCSConCSC@@XZ @ 1 NONAME ; class CSConCSC * CreateCSConCSCL(void) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/def/eabiuu.def --- a/connectivitymodules/SeCon/services/csc/bld/def/eabiuu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _Z15CreateCSConCSCLv @ 1 NONAME - _ZTI8CSConCSC @ 2 NONAME ; ## - _ZTV8CSConCSC @ 3 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/fwdcomp.xml Binary file connectivitymodules/SeCon/services/csc/bld/fwdcomp.xml has changed diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/bld/sconcsc.mmp --- a/connectivitymodules/SeCon/services/csc/bld/sconcsc.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* 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: Capability Object Module mmp file -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_GENERAL_DLL - -TARGETPATH sys/bin - -TARGET sconcsc.dll -TARGETTYPE DLL -UID 0x10009D8D 0x101F9698 - -#if defined(ARMCC) -DEFFILE ./def/eabiu -#elif defined(WINSCW) -DEFFILE ./def/bwinscw -#elif defined(WINS) -DEFFILE ./def/bwins -#elif defined(ARM) -DEFFILE ./def/bmarm -#endif - -SOURCEPATH ../src -SOURCE sconcsc.cpp -SOURCE capinfo.cpp -SOURCE caputils.cpp -SOURCE caplist.cpp -SOURCE stringlist.cpp -SOURCE capparser.cpp -SOURCE sconsyncservice.cpp -SOURCE sconversioninfo.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../../inc - -// Default system include paths for middleware layer modules. -//MW_LAYER_SYSTEMINCLUDE -APP_LAYER_SYSTEMINCLUDE - -DEBUGLIBRARY flogger.lib -LIBRARY euser.lib -LIBRARY efsrv.lib -LIBRARY bafl.lib -LIBRARY sysutil.lib -LIBRARY etel.lib -LIBRARY etelmm.lib -LIBRARY hal.lib -LIBRARY platformenv.lib -LIBRARY charconv.lib -LIBRARY centralrepository.lib -LIBRARY apgrfx.lib -LIBRARY apparc.lib -LIBRARY sisregistryclient.lib -LIBRARY SyncMLClientAPI.lib -LIBRARY javaregistryclient.lib -LIBRARY sysversioninfo.lib -LIBRARY Etel3rdParty.lib -LIBRARY platformver.lib - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/capability.h --- a/connectivitymodules/SeCon/services/csc/inc/capability.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,483 +0,0 @@ -/* -* Copyright (c) 2002-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: Capability service controller -* -*/ - - -#ifndef _CAPABILITY_H_ -#define _CAPABILITY_H_ - -#include - -// -// string sizes -// -const TInt KBufSize(128); -const TInt KTagSize(64); -const TInt KMaxSize(512); - -const TInt KNestingLimit(10); - -// -// this directory contains xml-format files for -// Service-elements -// -_LIT(KCapabilityDirC, "c:\\private\\101F99F6\\capability\\"); -_LIT(KCapabilityDirCImport, "c:\\private\\101F99F6\\import\\"); -_LIT(KCapabilityDirZ, "z:\\private\\101F99F6\\capability\\"); - -// -// folder service constants -// -_LIT(KFolderServiceName, "Folder-Browsing"); -_LIT(KFolderServiceUid, "F9EC7BC4-953c-11d2-984E-525400DC9E09"); -_LIT(KFolderServiceVersion, "1.0"); -_LIT(KFolderServiceType, "x-obex/folder-listing"); -_LIT(KFolderMemoryTypeTag, "MemType"); -_LIT(KFolderNameTag, "Folder"); - -_LIT(KFolderImages, "Images"); -_LIT(KFolderGraphics, "Graphics"); -_LIT(KFolderTones, "Tones"); -_LIT(KFolderMusic, "Music"); -_LIT(KFolderVideos, "Videos"); -_LIT(KFolderInstalls, "Installs"); - -_LIT( KSyncSolutionsServiceName, "SyncSolutions" ); -_LIT( KSyncSolutionsServiceVersion, "1.0" ); -_LIT( KSyncCalendar, "Calendar" ); -_LIT( KSyncContacts, "Contacts" ); -_LIT( KSyncSms, "Sms" ); -_LIT( KSyncBookmark, "Bookmark" ); - -_LIT( KDesktopSync, "DesktopSync" ); - -enum TFolderTypes - { - EFolderImages, - EFolderGraphics, - EFolderTones, - EFolderMusic, - EFolderVideos, - EFolderInstalls - }; - - -// -// misc capabily document strings -// -_LIT(KServiceHeader, ""); -_LIT(KXmlVersion, ""); -_LIT(KComment1, ""); -_LIT(KDocType, ""); -_LIT(KRootBegin, ""); -_LIT(KRootEnd, ""); -_LIT(KCommentBegin, ""); -_LIT(KFormatText, " "); -_LIT(KXmlExtension, ".xml"); - - -// -// manufacturers -// -_LIT(KManufacturerNokia, "Nokia"); -_LIT(KManufacturerEricsson, "Ericsson"); -_LIT(KManufacturerMotorola, "Motorola"); -_LIT(KManufacturerPanasonic, "Panasonic"); -_LIT(KManufacturerPsion, "Psion"); -_LIT(KManufacturerIntel, "Intel"); -_LIT(KManufacturerCogent, "Cogent"); -_LIT(KManufacturerCirrus, "Cirrus"); -_LIT(KManufacturerLinkup, "Linkup"); -_LIT(KManufacturerTexasInstruments, "TexasInstruments"); - - -// -// media types (TMediaType in e32std.h) -// -_LIT(KMediaMMC, "MMC"); // memory card -_LIT(KMediaFlash, "DEV"); // device memory - -// -// TElementType contains all element types used in -// capabilty xml document -// -// -enum TElementType - { - ECapability, - EGeneral, - EManufacturer, - EModel, - ESN, - EOEM, - ESW, - EFW, - EHW, - ELanguage, - EMemory, - EMemType, - ELocation, - EFree, - EUsed, - EShared, - EFileSize, - EFolderSize, - EFileNLen, - EFolderNLen, - ECaseSenN, - - EExt, - EXNam, - EXVal, - - EObject, - EType, - EName_Ext, - ESize, - - EAccess, - EProtocol, - EEndpoint, - ETarget, - - EInbox, - EService, - EName, - EUUID, - EVersion, - - EAttVersion, - EAttDate, - - EAttCurrentNetwork, - EAttHomeNetwork, - EAttCountryCode - }; - - - - -// -// KXmlTokens contains all tokens (=tags) used in -// capabilty xml document -// -// - -typedef const TText* TTag; -NONSHARABLE_STRUCT( TXmlToken ) - { - TInt id; - TTag tag; - }; - -const TXmlToken KXmlTokens[] = - { - {ECapability, _S("Capability")}, - {EGeneral, _S("General")}, - {EManufacturer, _S("Manufacturer")}, - {EModel, _S("Model")}, - {ESN, _S("SN")}, - {EOEM, _S("OEM")}, - {ESW, _S("SW")}, - {EFW, _S("FW")}, - {EHW, _S("HW")}, - {ELanguage, _S("Language")}, - {EMemory, _S("Memory")}, - {EMemType, _S("MemType")}, - {ELocation, _S("Location")}, - {EFree, _S("Free")}, - {EUsed, _S("Used")}, - {EShared, _S("Shared")}, - {EFileSize, _S("FileSize")}, - {EFolderSize, _S("FolderSize")}, - {EFileNLen, _S("FileNLen")}, - {EFolderNLen, _S("FolderNLen")}, - {ECaseSenN, _S("CaseSenN")}, - {EExt, _S("Ext")}, - {EXNam, _S("XNam")}, - {EXVal, _S("XVal")}, - {EObject, _S("Object")}, - {EType, _S("Type")}, - {EName_Ext, _S("Name_Ext")}, - {ESize, _S("Size")}, - {EAccess, _S("Access")}, - {EProtocol, _S("Protocol")}, - {EEndpoint, _S("Endpoint")}, - {ETarget, _S("Target")}, - {EInbox, _S("Inbox")}, - {EService, _S("Service")}, - {EName, _S("Name")}, - {EUUID, _S("UUID")}, - {EVersion, _S("Version")}, - {EXNam, _S("XNam")}, - {EXVal, _S("XVal")}, - {EAttVersion, _S("Version")}, - {EAttDate, _S("Date")}, - {EAttCurrentNetwork,_S("CurrentNetwork")}, - {EAttHomeNetwork, _S("HomeNetwork")}, - {EAttCountryCode, _S("CountryCode")} - }; - -#define NUMXMLTOKENS (sizeof(KXmlTokens)/sizeof(TXmlToken)) - - - - -// -// string array to convert symbian TLanguage enums to -// ISO 639 language codes -// -// See "http://www.sil.org/iso639-3/default.asp" -// - -typedef const TText* TLangString; -NONSHARABLE_STRUCT( TLangStringStruct ) - { - TInt id; - TLangString lang; - }; - -/** - * Language mapping table. - */ -const TLangStringStruct KLangStrings[] = - { - {ELangEnglish, _S("en")}, - {ELangFrench, _S("fr")}, - {ELangGerman, _S("de")}, - {ELangSpanish, _S("es")}, - {ELangItalian, _S("it")}, - {ELangSwedish, _S("sv")}, - {ELangDanish, _S("da")}, - {ELangNorwegian, _S("no")}, - {ELangFinnish, _S("fi")}, - - {ELangAmerican, _S("en_US")}, - {ELangSwissFrench, _S("fr_CH")}, - {ELangSwissGerman, _S("de_CH")}, - {ELangPortuguese, _S("pt")}, - {ELangTurkish, _S("tr")}, - {ELangIcelandic, _S("is")}, - {ELangRussian, _S("ru")}, - {ELangHungarian, _S("hu")}, - {ELangDutch, _S("nl")}, - - {ELangBelgianFlemish, _S("nl_BE")}, - {ELangAustralian, _S("aus")}, - {ELangBelgianFrench, _S("fr_BE")}, - {ELangAustrian, _S("de_AT")}, - {ELangNewZealand, _S("en_NZ")}, - {ELangInternationalFrench, _S("fr")}, - {ELangCzech, _S("cs")}, - {ELangSlovak, _S("sk")}, - {ELangPolish, _S("pl")}, - - {ELangSlovenian, _S("sl")}, - {ELangTaiwanChinese, _S("zh_TW")}, - {ELangHongKongChinese, _S("zh_HK")}, - {ELangPrcChinese, _S("zh_CN")}, - {ELangJapanese, _S("ja")}, - {ELangThai, _S("th")}, - {ELangAfrikaans, _S("af")}, - {ELangAlbanian, _S("sq")}, - {ELangAmharic, _S("am")}, - - {ELangArabic, _S("ar")}, - {ELangArmenian, _S("hy")}, - {ELangTagalog, _S("tl")}, - {ELangBelarussian, _S("be")}, - {ELangBengali, _S("bn")}, - {ELangBulgarian, _S("bg")}, - {ELangBurmese, _S("my")}, - {ELangCatalan, _S("ca")}, - {ELangCroatian, _S("hr")}, - - {ELangCanadianEnglish, _S("en_CA")}, - {ELangInternationalEnglish, _S("en")}, - {ELangSouthAfricanEnglish, _S("en_ZA")}, - {ELangEstonian, _S("et")}, - {ELangFarsi, _S("fa")}, - {ELangCanadianFrench, _S("fr_CA")}, - {ELangScotsGaelic, _S("gd")}, - {ELangGeorgian, _S("ka")}, - {ELangGreek, _S("el")}, - - {ELangCyprusGreek, _S("el_CY")}, - {ELangGujarati, _S("gu")}, - {ELangHebrew, _S("he")}, - {ELangHindi, _S("hi")}, - {ELangIndonesian, _S("id")}, - {ELangIrish, _S("ga")}, - {ELangSwissItalian, _S("it_CH")}, - {ELangKannada, _S("kn")}, - {ELangKazakh, _S("kk")}, - - {ELangKhmer, _S("km")}, - {ELangKorean, _S("ko")}, - {ELangLao, _S("lo")}, - {ELangLatvian, _S("lv")}, - {ELangLithuanian, _S("lt")}, - {ELangMacedonian, _S("mk")}, - {ELangMalay, _S("ms")}, - {ELangMalayalam, _S("ml")}, - {ELangMarathi, _S("mr")}, - - {ELangMoldavian, _S("mo")}, - {ELangMongolian, _S("mn")}, - {ELangNorwegianNynorsk, _S("nn")}, - {ELangBrazilianPortuguese, _S("pt_BR")}, - {ELangPunjabi, _S("pa")}, - {ELangRomanian, _S("ro")}, - {ELangSerbian, _S("sr")}, - {ELangSinhalese, _S("si")}, - {ELangSomali, _S("so")}, - - {ELangInternationalSpanish, _S("es")}, - {ELangLatinAmericanSpanish, _S("es_US")}, - {ELangSwahili, _S("sw")}, - {ELangFinlandSwedish, _S("sv_FI")}, - {ELangReserved1, _S("en")}, - {ELangTamil, _S("ta")}, - {ELangTelugu, _S("te")}, - {ELangTibetan, _S("bo")}, - {ELangTigrinya, _S("ti")}, - - {ELangCyprusTurkish, _S("tr_CY")}, - {ELangTurkmen, _S("tk")}, - {ELangUkrainian, _S("uk")}, - {ELangUrdu, _S("ur")}, - {ELangReserved2, _S("en")}, - {ELangVietnamese, _S("vi")}, - {ELangWelsh, _S("cy")}, - {ELangZulu, _S("zu")}, - {ELangOther, _S("other")}, - - {ELangManufacturerEnglish, _S("en")}, - {ELangSouthSotho, _S("st")}, - {ELangBasque, _S("eu")}, - {ELangGalician, _S("gl")}, - {ELangJavanese, _S("jv")}, - {ELangMaithili, _S("bh")}, - {ELangAzerbaijani_Latin, _S("az")}, - {ELangAzerbaijani_Cyrillic, _S("az")}, - {ELangOriya, _S("or")}, - {ELangBhojpuri, _S("bh")}, - {ELangSundanese, _S("su")}, - {ELangKurdish_Latin, _S("ku")}, - {ELangKurdish_Arabic, _S("ku")}, - {ELangPashto, _S("ps")}, - {ELangHausa, _S("ha")}, - {ELangOromo, _S("om")}, - {ELangUzbek_Latin, _S("uz")}, - {ELangUzbek_Cyrillic, _S("uz")}, - {ELangSindhi_Arabic, _S("sd")}, - {ELangSindhi_Devanagari, _S("sd")}, - {ELangYoruba, _S("yo")}, - {ELangCebuano, _S("ceb")}, - {ELangIgbo, _S("ig")}, - {ELangMalagasy, _S("mg")}, - {ELangNepali, _S("ne")}, - {ELangAssamese, _S("as")}, - {ELangShona, _S("sn")}, - {ELangZhuang, _S("za")}, - {ELangMadurese, _S("mad")}, - - {ELangEnglish_Apac, _S("en")}, - {ELangEnglish_Taiwan, _S("en")}, - {ELangEnglish_HongKong, _S("en")}, - {ELangEnglish_Prc, _S("en")}, - {ELangEnglish_Japan, _S("en")}, - {ELangEnglish_Thailand, _S("en")}, - - {ELangFulfulde, _S("ff")}, - {ELangTamazight, _S("ber")}, - {ELangBolivianQuechua, _S("qu")}, - {ELangPeruQuechua, _S("qu")}, - {ELangEcuadorQuechua, _S("qu")}, - {ELangTajik_Cyrillic, _S("tg")}, - {ELangTajik_PersoArabic, _S("tg")}, - {ELangNyanja, _S("ny")}, - {ELangHaitianCreole, _S("ht")}, - {ELangLombard, _S("lmo")}, - {ELangKoongo, _S("kg")}, - {ELangAkan, _S("ak")}, - {ELangHmong, _S("hmn")}, - {ELangYi, _S("ii")}, - {ELangTshiluba, _S("lu")}, - {ELangIlocano, _S("ilo")}, - {ELangUyghur, _S("ug")}, - {ELangNeapolitan, _S("nap")}, - {ELangRwanda, _S("rw")}, - {ELangXhosa, _S("xh")}, - {ELangBalochi, _S("bal")}, - {ElangHiligaynon, _S("hil")}, - {ELangMinangkabau, _S("min")}, - {ELangMakhuwa, _S("vmw")}, - {ELangSantali, _S("sat")}, - {ELangGikuyu, _S("ki")}, - {ELangMoore, _S("mos")}, - {ELangGuarani, _S("gnHI")}, - {ELangRundi, _S("ru")}, - {ELangRomani_Latin, _S("rom")}, - {ELangRomani_Cyrillic, _S("rom")}, - {ELangTswana, _S("tn")}, - {ELangKanuri, _S("kr")}, - {ELangKashmiri_Devanagari, _S("ks")}, - {ELangKashmiri_PersoArabic, _S("ks")}, - {ELangUmbundu, _S("umb")}, - {ELangKonkani, _S("kok")}, - {ELangBalinese, _S("ban")}, - {ELangNorthernSotho, _S("nso")}, - {ELangWolof, _S("wo")}, - {ELangBemba, _S("bmy")}, - {ELangTsonga, _S("ts")}, - {ELangYiddish, _S("yi")}, - {ELangKirghiz, _S("ky")}, - {ELangGanda, _S("lg")}, - {ELangSoga, _S("xog")}, - {ELangMbundu, _S("kmb")}, - {ELangBambara, _S("bm")}, - {ELangCentralAymara, _S("ay")}, - {ELangZarma, _S("dje")}, - {ELangLingala, _S("ln")}, - {ELangBashkir, _S("ba")}, - {ELangChuvash, _S("cv")}, - {ELangSwati, _S("ss")}, - {ELangTatar, _S("tt")}, - {ELangSouthernNdebele, _S("nr")}, - {ELangSardinian, _S("sc")}, - {ELangScots, _S("sco")}, - {ELangMeitei, _S("mni")}, - {ELangWalloon, _S("wa")}, - {ELangKabardian, _S("kbd")}, - {ELangMazanderani, _S("mzn")}, - {ELangGilaki, _S("glk")}, - {ELangShan, _S("shn")}, - {ELangLuyia, _S("luy")}, - {ELanguageLuo, _S("luo")}, - {ELangSukuma, _S(" suk")}, - {ELangAceh, _S("ace")}, - {ELangMalay_Apac, _S("ms")} - }; - -#define NUMLANGSTRINGS (sizeof(KLangStrings)/sizeof(TLangStringStruct)) - - - - -#endif // capability.h - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/capinfo.h --- a/connectivitymodules/SeCon/services/csc/inc/capinfo.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* -* Copyright (c) 2002-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: Capability service controller -* -*/ - - -#ifndef _CAPINFO_H_ -#define _CAPINFO_H_ - -#include -#include - -#include "caputils.h" - -// -// CCapInfo creates capability document -// -// - -class CCapList; -class CStringList; -class TSConSolutionInfo; -class CSconVersionInfo; - -NONSHARABLE_CLASS( CCapInfo ) : public CBase -{ -public: - static CCapInfo* NewL(); - ~CCapInfo(); -private: - CCapInfo(); - void ConstructL(); - -public: - void CapabilityDocumentL( CBufFlat* aBuf ); - -private: - CCapList* CapList(); - void SetCapabilityBuf( CBufFlat* aBuf ); - - void GeneralInfoL(); - void MemoryInfoL(); - void WriteMemoryInfoL( TMemoryInfo& aInfo ); - void ServiceInfoL( const TDesC& aDir, const RArray& aExcludeList, - RArray& aFilesAdded ); - void FolderServiceL(); - - void SyncSolutionsServiceL(); - void WriteSyncSolutionsServiceL( const TSConSolutionInfo& aCalendar, - const TSConSolutionInfo& aContact, - const TSConSolutionInfo& aSms, - const TSConSolutionInfo& aBookmark ); - void WriteSolutionTagL( const TDesC& aContentName, const TSConSolutionInfo& aSolution ); - - void WriteFolderL( const TDesC& aType, const TDesC& aFullName, const TDesC& aMemory ); - - void WriteValueL( TInt aId, const TDesC& aValue ); - void WriteBigValueL( TInt aId, const TDesC& aValue ); - void WriteValueL( TInt aId, TInt64 aValue ); - void WriteTagL( TInt aId, TInt aType ); - void WriteAttributeL( TInt aId, const TDesC& aVersion, const TDesC& aDate ); - void WriteL( const TDesC& aText ); - - void WriteFromListL( CStringList* aList ); - void WriteNewLineL(); - - void FormatElement( TDes& aText ); - void AddFormatText( TDes& aText, TInt aNum ) const; - -private: - RFs iFsSession; // has - CCapList* iCapList; // has - HBufC8* iHeapBuf; // has - TBuf iBuf; - TIdStack iIdStack; - - CBufFlat* iCapabilityBuf; // uses - CSconVersionInfo* iSconInfo; -}; - -#endif // CCapability - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/caplist.h --- a/connectivitymodules/SeCon/services/csc/inc/caplist.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: CCapList header file. -* -*/ - - -#ifndef _CAPLIST_H_ -#define _CAPLIST_H_ - -// INCLUDES - -#include -#include -#include "stringlist.h" - -// -// Class CCapList -// -NONSHARABLE_CLASS( CCapList ) : public CBase -{ -public: - /** - * Two-phase constructor. - * @return CCapList instance - */ - static CCapList* NewL(); - /** - * Destructor - * @return none - */ - ~CCapList(); - -private: - /** - * Constructor - * @return none - */ - CCapList(); - /** - * Initializes the member data - * @return none - */ - void ConstructL(); - /** - * Operator = - * @param aList The data to be copied - * @return none - */ - void operator=(const CCapList& aList); // not allowed - -public: - /** - * Returns the list - * @return The CStringList object - */ - CStringList* List(); - -public: - /** - * Find element - * @param aId - * @param aType - * @param aIndex (Default=0) - * @return position - */ - TInt Find(TInt aId, TInt aType, TInt aIndex=0); - /** - * Find from mark - * @param aId - * @param aType - * @return position - */ - TInt FindFromMark(TInt aId, TInt aType); - /** - * Finds service xml-file identification header. This header must be the first - * line in every service file. - * @return ETrue if service header found - */ - TBool FindServiceHeader(); - /** - * Find service - * @param aList The source list - * @return ETrue if Service is found - */ - TBool FindServiceL(CStringList* aList); - -private: - CStringList* iList; // has -}; - -#endif - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/capparser.h --- a/connectivitymodules/SeCon/services/csc/inc/capparser.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,296 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: CapParser header file -* -*/ - - - -#ifndef _CAPPARSER_H_ -#define _CAPPARSER_H_ - -// INCLUDES - -#include -#include - -// -// Class CapParser -// -NONSHARABLE_CLASS( CapParser ) - { - -public: - /** - * Parses element's id and type (eg. "" -> EMemory, EElementBegin) - * @param aText - * @param aId - * @param aType - * @return none - */ - static void ParseElement(const TDesC& aText, TInt& aId, TInt& aType); - -public: - /** - * Constructs element with value (eg. "23456"). - * @param aText - * @param aId - * @param aValue - * @return none - */ - static void MakeElementL(TDes& aText, TInt aId, const TDesC& aValue); - /** - * Constructs element without value (eg. "" or ""). - * @param aText - * @param aId - * @param aType - * @return none - */ - static void MakeElementL(TDes& aText, TInt aId, TInt aType); - /** - * Constructs element with attributes "Version" and "Date"(eg. - * ""). - * @param aText - * @param aId - * @param aVersion - * @param aDate - * @return none - */ - static void MakeElementL(TDes& aText, TInt aId, const TDesC& aVersion, - const TDesC& aDate); - /** - * Constructs element with attributes - * @param aText - * @param aId - * @param aAttributes - * @return none - */ - static void MakeElementL(TDes& aText, TInt aId, CDesCArrayFlat* aAttributes); - -public: - /** - * Returns capability element id (eg. EMemory). - * @param aText - * @return none - */ - static TInt ElementId(const TDesC& aText); - /** - * Returns capability element tag (eg. "Memory"). - * @param aText - * @param aId - * @return none - */ - static void GetTagL(TDes& aText, TInt aId); - -private: - /** - * Replaces special characters to xml compliant. - * @param aText - * @param aValue - * @return none - */ - static void ReplaceSpecialCharsL( TDes& aText, const TDesC& aValue ); - }; - - -// -// Class TXmlParser -// -NONSHARABLE_CLASS( TXmlParser ) - { - -public: - enum TElementType - { - EElementValue, - EElementBegin, - EElementEnd, - EElementEmpty, - EElementAtt, - EElementComment, - EElementVersion, - EElementDocType, - EElementUnknown - }; - - -public: - /** - * Sets a tag - * @param aText The tag - * @return none - */ - void Set(const TDesC& aText); - /** - * Returns type - * @return type - */ - TInt Type() const; - /** - * Returns a pointer to a tag - * @return The tag pointer - */ - TPtrC Tag() const; - /** - * Gets the tag - * @param aText The tag buffer - * @return none - */ - void GetTag(TDes& aText) const; - -private: - /** - * Parses value (eg. en) - * @return Operation success - */ - TBool ElementValue(); - /** - * Parses beginning tag (eg. ) - * @return Operation success - */ - TBool ElementBegin(); - /** - * Parses ending tag (eg. ) - * @return Operation success - */ - TBool ElementEnd(); - /** - * Parses empty element (eg. ) - * @return Operation success - */ - TBool ElementEmpty(); - /** - * Parses attribute element (eg. ) - * Note: Attribute values cannot contain equals (=) or quotations (") - * @return Operation success - */ - TBool ElementAtt(); - /** - * Identifies comment element (""). - * @return Operation success - */ - TBool ElementComment(); - /** - * Parses unknown elements - * @return Operation success - */ - TBool ElementUnknown(); - /** - * Identifies version element ("") - * @return Operation success - */ - TBool ElementVersion(); - /** - * Identifies document type element - * (""). - * @return Operation success - */ - TBool ElementDocType(); - -private: - /** - * Inits the parser - * @return none - */ - void Init(); - /** - * Parses xml-element. - * @return none - */ - void Parse(); - -public: - /** - * Validates the character - * @param aChar The char to be validated. - * @return ETrue if the char is valid - */ - static TBool ValidChar(const TChar aChar); - /** - * Validates the tag - * @param aText The tag to be validated. - * @return ETrue if the tag is valid - */ - static TBool ValidTag(const TDesC& aText); - /** - * Returns the number of characters (aChar) - * @param aText The buffer - * @param aChar The character - * @return The number of characters - */ - static TInt Count(const TDesC& aText, const TChar aChar); - /** - * Returns the position of the first non space character - * @param aText The buffer - * @return The position - */ - static TInt FirstNonSpace(const TDesC& aText); - /** - * Returns the position of the last non space character - * @param aText The buffer - * @return The position - */ - static TInt LastNonSpace(const TDesC& aText); - /** - * Function returns a sub-string between aPos1 and aPos2 - * @param aText The buffer - * @param aText Start position - * @param aText End position - * @return The pointer to the substring - */ - static TPtrC SubStr(const TDesC& aText, TInt aPos1, TInt aPos2); - /** - * Function performs string copy with length checking. - * @param aTarget Target buffer - * @param aSource Source buffer - * @return none - */ - static void StrCopy(TDes& aTarget, const TDesC& aSource); - -private: - /** - * Returns a string - * @return A pointer to a string - */ - TPtrC Str() const; - /** - * Trimmer function - * @return none - */ - void TrimOriginal(); - /** - * Function returns sub string between aPos1 and aPos2 - * @param aPos1 Start position - * @param aPos2 End posiotion - * @return none - */ - TPtrC SubStr(TInt pos1, TInt pos2); - -private: - TPtrC iOriginal; - TPtrC iText; - TPtrC iTag; - TPtrC iValue; - TInt iType; - - TInt iSlash; - TInt iFirst; - TInt iLast; - }; - -#endif - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/caputils.h --- a/connectivitymodules/SeCon/services/csc/inc/caputils.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,252 +0,0 @@ -/* -* 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: CapUtil header file -* -*/ - - -// INCLUDES - -#ifndef _CAPUTILS_H_ -#define _CAPUTILS_H_ - -#include "capability.h" - -class RFs; - -// -// TMemoryInfo -// -NONSHARABLE_CLASS( TMemoryInfo ) - { -public: - TChar iDriveLetter; - TInt iDriveNum; - TBuf<16> iLocation; - TInt64 iFree; - TInt64 iUsed; - TBool iShared; - TInt64 iFileSize; - TInt64 iFolderSize; - TInt iFileNameSize; - TInt iFolderNameSize; - TBool iCaseSensitivity; - TUint iDriveStatus; - TInt iMemNr; - }; - -// -// CapUtil -// -NONSHARABLE_CLASS( CapUtil ) - { -public: - /** - * Gets default root path from pathinfo. - * @param aText - * @param aType - * @return none - */ - static void GetDefaultRootPathL( RFs& aFs, TDes& aRootPath ); - - /** - * Gets memory type. - * @param aFs - * @param aMemoryType - * @param aDrive - * @return none - */ - static void GetMemoryType( RFs& aFs, TDes& aMemoryType, const TInt aDrive ); - - /** - * Gets language - * @param aText - * @return none - */ - static void GetLanguage( TDes& aText ); - - /** - * Gets SW version, SW version date and device model from SysUtil. - * @param aVersion SW version - * @param aDate SW date - * @param aModel Device model - * @return none - */ - static void GetSWVersionL( TDes& aVersion, TDes& aDate, TDes& aModel ); - - /** - * Gets phone manufacturer from HAL. In case manufacturer is not known, - * empty value is used. - * @param aText Manufacturer - * @return none - */ - static void GetManufacturer( TDes& aText ); - - /** - * Get memory information for one drive. - * @param aFs RFs handle - * @param aDriveNumber drive number - * @param aInfo Memory information - * @return none - */ - static void GetMemoryInfoL( const RFs& aFs, const TInt aDriveNumber, TMemoryInfo& aInfo ); - - /** - * Initializes TMemoryInfo. - * @param aInfo TMemoryInfo to be initialized - * @return none - */ - static void InitMemoryInfo( TMemoryInfo& aInfo ); - - /** - * Get language string for aId. - * @param aId Language id - * @param aText Language text - * @return none - */ - static void GetLanguageString( TLanguage aId, TDes& aText ); - - /** - * Finds all files in aDir. - * @param aFs RFs handle - * @param aDir Directory - * @param aList List of files in directory - * @return none - */ - static void GetFileListL( const RFs& aFs, const TDesC& aDir, - RArray& aList ); - - - /** - * Gets operator name, country code, network ID - * @param aLongName - * @param aCountryCode - * @param aNetworkID - * @return none - */ - static void GetOperatorNameL( TDes& aLongName, TDes& aCountryCode, TDes& aNetworkID ); - - /** - * Creates a panic - * @param aReason Panic code - * @return none - */ - static void Panic( TInt aReason ); - - /** - * String copy with lenght check. - * @param aTarget Target string - * @param aSource Source string - * @return none - */ - static void StrCopy( TDes& aTarget, const TDesC& aSource ); - - /** - * Function converts ínteger to string. - * @param aText string - * @param aNum integer - * @return none - */ - static void IntToStr( TDes& aText, TInt64 aNum ); - - /** - * Function converts string to integer. If string cannot be converted, - * error code is returned. - * @param aText string - * @param aNum integer - * @return error code - */ - static TInt StrToInt( const TDesC& aText, TInt& aNum ); - - /** - * Function splits string (eg "name1, name2, name3") into substrings. - * @param aText string - * @param aSeparator separator character - * @param aArray substrings - * @return none - */ - static void SplitL( const TDesC& aText, const TChar aSeparator, - RArray& aArray ); - - /** - * Constructs capability date as string - * @param aText string - * @param aTime time object - * @return none - */ - static void CapabilityDate( TDes& aText, const TTime aTime ); - - /** - * Function parses date string of the format "dd-mm-yy". - * @param aText string - * @return time object - */ - static TTime ParseDateL( const TDesC& aText ); - - /** - * Function return TMonth presentation of integer - * @param aNum - * @return TMonth object - */ - static TMonth Month( TInt aNum ); - - /** - * Function checks file extension. - * @param aFile File name - * @param aExt extension - * @return boolean - */ - static TBool CheckFileType( const TDesC& aFile, const TDesC& aExt ); - }; - -// -// TIdStack -// -NONSHARABLE_CLASS( TIdStack ) - { -public: - - /** - * Push id to the stack - * @param aId Id number - * @return none - */ - void Push( TInt aId ); - - /** - * Pop id from the stack - * @return id - */ - TInt Pop(); - - /** - * Size of the stack - * @return size - */ - TInt Size() const; - - /** - * Reset the stack. - * @return none - */ - void Reset(); - -private: - TInt iPos; - TFixedArray iArray; - }; - -#endif // CapUtils.h - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/sconcsc.h --- a/connectivitymodules/SeCon/services/csc/inc/sconcsc.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* 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: CSConCSC header file -* -*/ - - -// INCLUDES - -#ifndef _SCONCSC_H_ -#define _SCONCSC_H_ - -#include - -class CCapInfo; - -//============================================================ -// Class CSConCSC declaration -//============================================================ -class CSConCSC : public CBase -{ -public: - static CSConCSC* NewL(); - ~CSConCSC(); - -public: - // Creates capability object and places it into aBuf. - // Returns system error code - virtual TInt CapabilityObject( CBufFlat& aBuf ); - -private: - void CapabilityObjectL( CBufFlat& aBuf ); - - CSConCSC(); - virtual void ConstructL(); - -private: // data - CCapInfo* iCapInfo; - -}; - -IMPORT_C CSConCSC* CreateCSConCSCL(); -typedef CSConCSC* (*TSConCreateCSConCSCFunc) (); - - -#endif // SCONCSC - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/sconsyncservice.h --- a/connectivitymodules/SeCon/services/csc/inc/sconsyncservice.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* -* Copyright (c) 2007 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: CSConSyncService header file. -* -*/ - - -#ifndef _SCONSYNCSERVICE_H_ -#define _SCONSYNCSERVICE_H_ - -#include -#include // RApaLsSession -#include - - -class TApaAppInfo; -class RApaLsSession; -class CRepository; - - -class TSConSolutionInfo - { - public: - TSConSolutionInfo():iTime(0){} - public: - TFileName iSolutionName; - TUint iUid; - TTime iTime; - }; - -/** - * This class provides information about active sync solutions. - * - * @code - * CSConSyncService *syncService = CSConSyncService::NewLC(); - * SConSolutionInfo solutionInfo; - * syncService->GetSolutionL( KSeconCalendarUid, solutionInfo ); - * CleanupStack::PopAndDestroy( syncService ); - * @endcode - * - * @since S60 v5.0 - */ -NONSHARABLE_CLASS( CSConSyncService ) : public CBase - { - public: - static CSConSyncService* NewLC(); - ~CSConSyncService(); - - /** - * Populate SolutionInfo according to content type. - * - * @since S60 v5.0 - * @param aSeconContentType Contenttype to be readed - * @param aSolutionInfo contains founded solution info, - * solution info is empty if not found - * @return none - */ - void GetSolutionL( const TUint aSeconContentType, TSConSolutionInfo& aSolutionInfo ); - - private: - - CSConSyncService(); - void ConstructL(); - - // Return correct providerId according to content type. - TSmlDataProviderId ProviderId( const TUint32 aSeconContentType ) const; - - // Parse time from text - TInt ParseTimestamp( TTime& aTime, const TDesC& aTimestamp ) const; - - // Get application caption. - void GetApplicationCaptionL( TDes& aCaption, const TUid aAppUid ); - - // Search UID from installed applications, return app caption - void GetInstPackageCaptionL( TDes& aCaption, const TUid aPackageUid ); - - // Gets last used profile for selected provider - void GetLastUsedProfileNameL( TDes& aProfileName, TTime& aTime, - const TSmlDataProviderId& aDataProviderId ); - - // Gets last sync time for certain profile and provider. - void GetLastSyncTimeL( TTime& aTime, const TSmlProfileId aSyncProfileId, - const TSmlDataProviderId aDataProviderId ); - - // Gets provider task id from profile - void GetProviderTaskL( TSmlTaskId& aProviderTask, - RSyncMLDataSyncProfile& aSyncProfile, - const TSmlDataProviderId aDataProviderId ) const; - - // Gets latest historyJob where task is correct. - const CSyncMLHistoryJob* LatestHistoryJob( RSyncMLHistoryLog& aHistoryLog, - TInt aTaskId ) const; - - // Returns ETrue if task exists in HistoryJob. - TBool TaskExist( const CSyncMLHistoryJob* aHistoryJob, TInt aTaskId ) const; - - private: // data - TBool iApaSessionConnected; - RApaLsSession iApaSession; - TBool iSyncSessionOpened; - RSyncMLSession iSyncSession; - CRepository* iRepository; - }; - -#endif // _SCONSYNCSERVICE_H_ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/sconversioninfo.h --- a/connectivitymodules/SeCon/services/csc/inc/sconversioninfo.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* -* Copyright (c) 2008-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: Handles version fetching -* -*/ - - -#ifndef SCONVERSIONINFO_H_ -#define SCONVERSIONINFO_H_ - -#include -#include -#include -#include -#include - -const TInt KSconSWVersionSize = 50; -const TInt KSconDateSize = 16; -const TInt KMaxLangSize = 5; - -NONSHARABLE_CLASS( CSconVersionInfo ) : public CBase -{ -public: - CSconVersionInfo(); - ~CSconVersionInfo(); - - static CSconVersionInfo* NewL(); - - /** - * - * @param aFs RFs session - * @return none. - */ - void FetchInfoL( RFs& aFs ); - - /** - * Is all data ready. - * @return ETrue if FetchInfoL has been called succesfully. - */ - TBool IsReady(); - - /** - * Get symbian version. FetchInfoL must be called first - * @param aSymbianVersion symbian version - * @return error code. - */ - TInt GetSymbianVersion( SysVersionInfo::TSymbianOSVersion& aSymbianVersion ); - - /** - * Get S60 platform version. FetchInfoL must be called first - * @param aS60Version S60 platform version - * @return error code. - */ - TInt GetS60Version( VersionInfo::TPlatformVersion& aS60Version ); - -public: // data - - /** Contains the manufacturer name. For example "Nokia". */ - HBufC* iManufacturer; - - /** Contains the phone model sales name. For example "N01". */ - HBufC* iModel; - - /** Contains the product code name. For example "RM-1". */ - HBufC* iProduct; - - /** Contains the product revision. For example "01". */ - HBufC* iRevision; - - TBuf< KSconDateSize > iDate; - - HBufC* iSWVersion; - - /** Phone serial number (IMEI or ESN), in character string format. */ - HBufC* iSerialNumber; - - TBuf iLanguage; - - HBufC* iSysVersionInfo; - - HBufC* iLangVersion; - - HBufC* iLangSWVersion; - - HBufC* iOPVersion; - - TSize iScreenSize; - - HBufC* iProductCode; - - TInt iDesktopSyncError; - TInt iDesktopSync; - -private: - TBool iInfoFetched; // ETrue if FetchInfoL has been called succesfully. - - TInt iSymbianVersionError; - SysVersionInfo::TSymbianOSVersion iSymbianVersion; - - TInt iS60VersionError; - VersionInfo::TPlatformVersion iS60Version; - -}; - -#endif /*SCONVERSIONINFO_H_*/ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/inc/stringlist.h --- a/connectivitymodules/SeCon/services/csc/inc/stringlist.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,142 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: CStringList header file -* -*/ - - -#ifndef _STRINGLIST_H_ -#define _STRINGLIST_H_ - -// INCLUDES - -#include -#include // for CDesCArrayFlat -#include - -// -// CStringList is used for storing lines of text. -// -NONSHARABLE_CLASS( CStringList ) : public CBase -{ -public: - /** - * Two-phase constructor. The created instance is placed to cleanup stack - * @param aFileName Default KNullDesC - * @return CStringList instance - */ - static CStringList* NewLC(); - /** - * Two-phase constructor. - * @param aFileName Default KNullDesC - * @return CStringList instance - */ - static CStringList* NewL(); - /** - * Destructor - * @return none - */ - ~CStringList(); - -public: - /** - * Returns the count of lines - * @return The count - */ - TInt Count() const; - /** - * Returns pointer to the string - * @param aIndex The position - * @return String pointer - */ - TPtrC16 ReadPtr(TInt aIndex); - /** - * Copies a string / strings - * @param aSource Source buffer - * @param aStart A start position - * @param aStop A stop position - * @return none - */ - void CopyL(CStringList* aSource, TInt aStart, TInt aStop); - /** - * Resets iLines - * @return none - */ - void Reset(); - /** - * Returns the mark - * @return Mark value - */ - TInt Mark() const; - /** - * Sets mark - * @param aMark The mark value - * @return none - */ - void SetMark(TInt aMark); - /** - * Read strings from file. - * @param aText The tag buffer - * @return none - */ - void ReadFromFileL( RFs& aFs, const TDesC& aName ); - -private: - /** - * Default constuctor - * @return none - */ - CStringList(); - /** - * Initializes member data - * @param aFileName The file name - * @return none - */ - void ConstructL(); - /** - * Creates a panic - * @param aPanic Panic code - * @return none - */ - void Panic(TInt aPanic) const; - /** - * Copies the string - * @param aTarget Target string - * @param aSource Source string - * @return ETrue if successful - */ - TBool StrCopy(TDes& aTarget, const TDesC& aSource) const; - /** - * Writes a string - * @param aText The string - * @return none - */ - void WriteL(const TDesC& aText); - /** - * Internalizes from file - * @param aFileName The name of the file - * @return none - */ - void InternalizeL( RFs& aFs, const TDesC& aFileName ); - -private: - TInt iMark; - CDesCArrayFlat* iLines; -}; - -#endif - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/capinfo.cpp --- a/connectivitymodules/SeCon/services/csc/src/capinfo.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1031 +0,0 @@ -/* -* 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: CCapInfo implementation -* -*/ - - -// INCLUDE FILES - -#include -#include -#include // for PathInfo::SoundsPath -#include -#include "sconsyncservice.h" -#include "capinfo.h" -#include "caplist.h" -#include "capparser.h" -#include "caputils.h" -#include "stringlist.h" -#include "sconversioninfo.h" -#include "debug.h" - - -_LIT8( KLineFeed, "\r\n" ); - -const TInt KDefaultArrayGranularity = 5; - - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CCapInfo::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CCapInfo* CCapInfo::NewL() - { - TRACE_FUNC_ENTRY; - CCapInfo* self = new (ELeave) CCapInfo(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(self); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::~CCapInfo() -// Destructor -// ----------------------------------------------------------------------------- -// -CCapInfo::~CCapInfo() - { - TRACE_FUNC_ENTRY; - iFsSession.Close(); - delete iHeapBuf; - delete iCapList; - delete iSconInfo; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::CapabilityDocumentL(CBufFlat* aBuf) -// Creates capability xml document end places it in aBuf -// ----------------------------------------------------------------------------- -// -void CCapInfo::CapabilityDocumentL(CBufFlat* aBuf) - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - - // set buffer where capability document is written - SetCapabilityBuf( aBuf ); - - WriteL( KXmlVersion ); - WriteL( KComment1 ); - WriteL( KDocType ); - WriteL( KRootBegin ); - - - // - // general - // - TRAP( err, GeneralInfoL() ); - if ( err != KErrNone ) - { - LOGGER_WRITE_1( "GeneralInfoL failed : %d", err ); - User::Leave( err ); - } - - - // - // services - // - // Search service files first from C-drive, and then from Z - // Do not add same files twice. - - RArray excludeList( KDefaultArrayGranularity ); - CleanupClosePushL( excludeList ); - RArray filesAdded( KDefaultArrayGranularity ); - CleanupClosePushL( filesAdded ); - - //read service files from C Import folder - TRAP( err, ServiceInfoL( KCapabilityDirCImport, excludeList, filesAdded ) ); - LOGGER_WRITE_1( "ServiceInfoL(KCapabilityDirCImport) returned : %d", err ); - for ( TInt i=0; iFetchInfoL( iFsSession )); - LOGGER_WRITE_1("sconInfo->FetchInfoL() Leaved: %d", err); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::CCapInfo() -// Constuctor -// ----------------------------------------------------------------------------- -// -CCapInfo::CCapInfo() - { - } - -// ----------------------------------------------------------------------------- -// CCapInfo::CapList() -// Returns caplist -// ----------------------------------------------------------------------------- -// -CCapList* CCapInfo::CapList() - { - TRACE_FUNC; - __ASSERT_DEBUG(iCapList, CapUtil::Panic(KErrGeneral)); - return iCapList; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::SetCapabilityBuf( CBufFlat* aBuf ) -// Set capability buffer -// ----------------------------------------------------------------------------- -// -void CCapInfo::SetCapabilityBuf( CBufFlat* aBuf ) - { - TRACE_FUNC; - iCapabilityBuf=aBuf; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::GeneralInfoL() -// Write general device capability information. -// ----------------------------------------------------------------------------- -// -void CCapInfo::GeneralInfoL() - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - TBuf buf; - TBuf longName; - TBuf coutryCode; - TBuf networkID; - - WriteTagL(EGeneral, TXmlParser::EElementBegin); - - if ( !iSconInfo->IsReady() ) - { - LOGGER_WRITE("iSconInfo wasn't ready, call iSconInfo->FetchInfoL"); - iSconInfo->FetchInfoL( iFsSession ); - } - - if ( iSconInfo->iManufacturer ) - { - WriteValueL( EManufacturer, *iSconInfo->iManufacturer ); - } - - if ( iSconInfo->iProduct ) - { - WriteValueL( EModel, *iSconInfo->iProduct ); - } - - // serial number - if ( iSconInfo->iSerialNumber ) - { - WriteValueL( ESN, *iSconInfo->iSerialNumber ); - } - - // software version - if ( iSconInfo->iSWVersion ) - { - WriteAttributeL( ESW, *iSconInfo->iSWVersion, iSconInfo->iDate ); - } - - // language - WriteValueL( ELanguage, iSconInfo->iLanguage ); - - // this must succeed - do not trap - MemoryInfoL(); - - // Operator - TRAP( err, CapUtil::GetOperatorNameL( longName, coutryCode, networkID ) ); - LOGGER_WRITE_1( "CapUtil::GGetOperatorNameL returned : %d", err ); - if( err == KErrNone ) - { - LOGGER_WRITE_3( "CSConFsHandler::GetOperatorNameL longName = %S coutryCode = %S networkID = %S", &longName, &coutryCode, &networkID ); - _LIT( KNetworkInfo, "NetworkInfo" ); - _LIT( KCurrentNetwork, "CurrentNetwork=" ); - _LIT( KCountryCode, "CountryCode=" ); - _LIT( KNetworkID, "NetworkID=" ); - - WriteTagL( EExt, TXmlParser::EElementBegin ); - WriteValueL( EXNam, KNetworkInfo ); - - // write CurrentNetwork - buf.Copy( KCurrentNetwork ); - buf.Append( longName ); - WriteValueL( EXVal, buf ); - - // write CountryCode - buf.Copy( KCountryCode ); - buf.Append( coutryCode ); - WriteValueL( EXVal, buf ); - - // write NetworkID - buf.Copy( KNetworkID ); - buf.Append( networkID ); - WriteValueL( EXVal, buf ); - - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - if ( iSconInfo->iModel ) - { - // print modelname (phone model sales name. For example "N01".) - WriteTagL( EExt, TXmlParser::EElementBegin ); - _LIT(KModelName, "ModelName"); - WriteValueL( EXNam, KModelName ); - WriteValueL( EXVal, *iSconInfo->iModel ); - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - if ( iSconInfo->iProductCode ) - { - // print productcode - WriteTagL( EExt, TXmlParser::EElementBegin ); - _LIT( KProductCode, "ProductCode" ); - WriteValueL( EXNam, KProductCode ); - WriteValueL( EXVal, *iSconInfo->iProductCode ); - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - - // print advanced info - WriteTagL( EExt, TXmlParser::EElementBegin ); - _LIT(KAdvancedDeviceInfo, "AdvancedDeviceInfo"); - WriteValueL( EXNam, KAdvancedDeviceInfo ); - - TBuf temp; - - if ( iSconInfo->iRevision ) - { - // product revision. For example "01" - _LIT( KRevision, "Revision=" ); - temp.Copy( KRevision ); - temp.Append( *iSconInfo->iRevision ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - - if ( iSconInfo->iSysVersionInfo ) - { - _LIT( KFWVersion, "FWVersion=" ); - temp.Copy( KFWVersion ); - temp.Append( *iSconInfo->iSysVersionInfo ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - SysVersionInfo::TSymbianOSVersion osVersion; - err = iSconInfo->GetSymbianVersion( osVersion ); - LOGGER_WRITE_1("TSymbianOSVersion info error: %d", err) - if ( !err ) - { - // Now osVersion contains the Symbian OS version information - _LIT( KSymbianOSVersion, "SymbianOSVersion=%d.%d" ); - temp.Format( KSymbianOSVersion, - osVersion.iMajorVersion, - osVersion.iMinorVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - - WriteValueL( EXVal, temp ); - } - - VersionInfo::TPlatformVersion platformVersion; - err = iSconInfo->GetS60Version( platformVersion ); - if ( !err ) - { - _LIT( KS60Version, "S60PlatformVersion=%d.%d" ); - temp.Format( KS60Version, - platformVersion.iMajorVersion, - platformVersion.iMinorVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - - if ( iSconInfo->iLangVersion ) - { - _LIT( KLangVersion, "LangVersion=" ); - temp.Copy( KLangVersion ); - temp.Append( *iSconInfo->iLangVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - if ( iSconInfo->iLangSWVersion ) - { - _LIT( KLangSWVersion, "LangSWVersion=" ); - temp.Copy( KLangSWVersion ); - temp.Append( *iSconInfo->iLangSWVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - if ( iSconInfo->iOPVersion ) - { - // CustomerVersion - _LIT( KOPVersion, "OPVersion=" ); - temp.Copy( KOPVersion ); - temp.Append( *iSconInfo->iOPVersion ); - LOGGER_WRITE_1( "CCapInfo::GeneralInfoL() : %S ", &temp ); - WriteValueL( EXVal, temp ); - } - - // screen size - LOGGER_WRITE_2("Size, width: %d, height: %d", - iSconInfo->iScreenSize.iWidth, - iSconInfo->iScreenSize.iHeight ); - _LIT( KWidth, "ScreenWidth=%d" ); - _LIT( KHeight, "ScreenHeight=%d" ); - - temp.Format( KWidth, iSconInfo->iScreenSize.iWidth ); - WriteValueL( EXVal, temp ); - - temp.Format( KHeight, iSconInfo->iScreenSize.iHeight ); - WriteValueL( EXVal, temp ); - - WriteTagL( EExt, TXmlParser::EElementEnd ); - // end of advanced info - - WriteTagL(EGeneral, TXmlParser::EElementEnd); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::MemoryInfoL() -// Create memory info for all drives (RAM excluded). -// ----------------------------------------------------------------------------- -// -void CCapInfo::MemoryInfoL() - { - TRACE_FUNC_ENTRY; - - TMemoryInfo info; - TInt devDriveCount = 0; - TInt mmcDriveCount = 0; - - //Write all drivers to folderlisting object - TDriveList driveList; - // Get all drives that are visible to the user. - TInt driveCount; - User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFsSession, driveList, driveCount ) ); - - for( TInt i = EDriveA; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - TInt err = DriveInfo::GetDriveStatus( iFsSession, i, driveStatus ); - if( err ) - { - LOGGER_WRITE_1( "CCapInfo::MemoryInfoL() : DriveInfo::GetDriveStatus: %d", i); - continue; - } - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt - || (driveStatus & DriveInfo::EDriveRemote) ) - { - LOGGER_WRITE_1( "skip drive %d", i); - continue; - } - - TRAP( err, CapUtil::GetMemoryInfoL( iFsSession, i, info )); - if ( err ) - { - LOGGER_WRITE_1( "CapUtil::GetMemoryInfoL() : Leaved with: %d", err); - continue; - } - - info.iDriveStatus = driveStatus; - if( driveStatus & DriveInfo::EDriveInternal ) - { - // if internal (DEV) drive, save drive number - devDriveCount++; - info.iMemNr = devDriveCount; - } - else if ( driveStatus & DriveInfo::EDriveRemovable ) - { - // if removable (MMC) drive, save drive number - mmcDriveCount++; - info.iMemNr = mmcDriveCount; - } - else - { - // was not internal or removable, skip. - LOGGER_WRITE( "CCapInfo::MemoryInfoL() : not internal or removable, skip." ); - continue; - } - - WriteMemoryInfoL(info); - - } - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::MemoryInfoL(TMemoryInfo& aInfo) -// Create memory info for all drives (RAM excluded). -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteMemoryInfoL(TMemoryInfo& aInfo) - { - TRACE_FUNC_ENTRY; - TBuf buf; - - WriteTagL(EMemory, TXmlParser::EElementBegin); - - if( aInfo.iDriveStatus & DriveInfo::EDriveInternal ) - { - buf = KMediaFlash; - } - else - { - buf = KMediaMMC; // memory card (MMC) - } - - if( aInfo.iMemNr > 1 ) - { - // append memory number DEV2, MMC2.. - buf.AppendNum( aInfo.iMemNr ); - } - - WriteValueL(EMemType, buf); - WriteValueL(ELocation, aInfo.iLocation); - WriteValueL(EFree, aInfo.iFree); - WriteValueL(EUsed, aInfo.iUsed); - - WriteValueL(EFileNLen, aInfo.iFileNameSize); - - WriteTagL(EMemory, TXmlParser::EElementEnd); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::ServiceInfoL(const TDesC& aDir) -// Reads service xml-files from directory and writes them into capability -// document. -// ----------------------------------------------------------------------------- -// -void CCapInfo::ServiceInfoL(const TDesC& aDir, const RArray& aExcludeList, - RArray& aFilesAdded) - { - TRACE_FUNC_ENTRY; - CCapList* capList=CapList(); - - RArray array( KDefaultArrayGranularity ); - CleanupClosePushL(array); - - CStringList* stringList=CStringList::NewLC(); - - CapUtil::GetFileListL(iFsSession, aDir, array); - - _LIT(KFormat, "%S%S"); - TFileName name; - TInt count=array.Count(); - for (TInt i=0; iList()->Reset(); - capList->List()->ReadFromFileL( iFsSession, name ); - if (capList->FindServiceL(stringList)) - { - WriteNewLineL(); - WriteFromListL(stringList); - - User::LeaveIfError( aFilesAdded.Append(array[i]) ); - LOGGER_WRITE_1( "File '%S' added to list", &array[i] ); - } - } - } - - CleanupStack::PopAndDestroy(stringList); - CleanupStack::PopAndDestroy(&array); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::FolderServiceL() -// Writes folder service. Notice that this service is created in code because -// pathinfo component is used to get folder names. -// ----------------------------------------------------------------------------- -// -void CCapInfo::FolderServiceL() - { - TRACE_FUNC_ENTRY; - TBuf rootPath; - TBuf memoryType(KNullDesC); - TFileName folderName; - _LIT( KFormat, "%S%S" ); - - WriteNewLineL(); - WriteTagL(EService, TXmlParser::EElementBegin); - - WriteValueL(EName, KFolderServiceName); - WriteValueL(EUUID, KFolderServiceUid); - WriteValueL(EVersion, KFolderServiceVersion); - - WriteTagL(EObject, TXmlParser::EElementBegin); - WriteValueL(EType, KFolderServiceType); - WriteTagL(EObject, TXmlParser::EElementEnd); - TInt drive; - TInt err; - - CapUtil::GetDefaultRootPathL( iFsSession, rootPath ); - if( rootPath.Length() > 0 ) - { - err = iFsSession.CharToDrive( rootPath[0], drive ); - if( err == KErrNone ) - { - CapUtil::GetMemoryType( iFsSession, memoryType, drive ); - } - } - - // EFolderImages - folderName.Format( KFormat, &rootPath, &PathInfo::ImagesPath() ); - WriteFolderL( KFolderImages, folderName, memoryType ); - - // EFolderGraphics - folderName.Format( KFormat, &rootPath, &PathInfo::ImagesPath() ); - WriteFolderL(KFolderGraphics, folderName, memoryType); - - // EFolderTones - folderName.Format( KFormat, &rootPath, &PathInfo::DigitalSoundsPath() ); - WriteFolderL(KFolderTones, folderName, memoryType); - - // EFolderMusic - folderName.Format( KFormat, &rootPath, &PathInfo::SoundsPath() ); - WriteFolderL(KFolderMusic, folderName, memoryType); - - // EFolderVideos - folderName.Format( KFormat, &rootPath, &PathInfo::VideosPath() ); - WriteFolderL(KFolderVideos, folderName, memoryType); - - // EFolderInstalls - folderName.Format( KFormat, &rootPath, &PathInfo::InstallsPath() ); - WriteFolderL(KFolderInstalls, folderName, memoryType); - - - WriteTagL(EService, TXmlParser::EElementEnd); - WriteNewLineL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::SyncSolutionsServiceL() -// Reads last used syncSolutions from cenrep and writes to capability object -// ----------------------------------------------------------------------------- -// -void CCapInfo::SyncSolutionsServiceL() - { - TRACE_FUNC_ENTRY; - TSConSolutionInfo calendar; - TSConSolutionInfo contact; - TSConSolutionInfo sms; - TSConSolutionInfo bookmark; - - CSConSyncService *syncService = CSConSyncService::NewLC(); - syncService->GetSolutionL( KSeconCalendarUid, calendar ); - syncService->GetSolutionL( KSeconContactsUid, contact ); - syncService->GetSolutionL( KSeconSmsUid, sms ); - syncService->GetSolutionL( KSeconBookmarkUid, bookmark ); - CleanupStack::PopAndDestroy( syncService ); - - WriteSyncSolutionsServiceL( calendar, contact, sms, bookmark ); - - TRACE_FUNC_EXIT; - } - - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteSyncSolutionsServiceL() -// Writes SyncSolutionsService data to capability object. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteSyncSolutionsServiceL( const TSConSolutionInfo& aCalendar, - const TSConSolutionInfo& aContact, - const TSConSolutionInfo& aSms, - const TSConSolutionInfo& aBookmark) - { - TRACE_FUNC_ENTRY; - - WriteTagL( EService, TXmlParser::EElementBegin ); - - WriteValueL( EName, KSyncSolutionsServiceName ); - WriteValueL( EVersion, KSyncSolutionsServiceVersion ); - - if ( aCalendar.iUid != 0 ) - { - WriteSolutionTagL( KSyncCalendar, aCalendar ); - } - - if ( aContact.iUid != 0 ) - { - WriteSolutionTagL( KSyncContacts, aContact ); - } - - if ( aSms.iUid != 0 ) - { - WriteSolutionTagL( KSyncSms, aSms ); - } - - if ( aBookmark.iUid != 0 ) - { - WriteSolutionTagL( KSyncBookmark, aBookmark ); - } - - /* - * - * DesktopSync - * - * - * - */ - if ( !iSconInfo->iDesktopSyncError ) - { - WriteTagL( EExt, TXmlParser::EElementBegin ); - WriteValueL( EXNam, KDesktopSync ); - - TBuf buffer; - buffer.AppendNum( iSconInfo->iDesktopSync ); - - WriteValueL( EXVal, buffer ); - WriteTagL( EExt, TXmlParser::EElementEnd ); - } - - - - WriteTagL( EService, TXmlParser::EElementEnd ); - TRACE_FUNC_EXIT; - } - - - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteSolutionTagL() -// Writes SyncSolutionsService solution data to capability object. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteSolutionTagL( const TDesC& aContentName, - const TSConSolutionInfo& aSolution ) - { - TRACE_FUNC_ENTRY; - _LIT( KFormatUID, "UID=0x%08x" ); - _LIT( KFormatName, "Name=%S" ); - _LIT( KFormatDate, "Timestamp=%04d%02d%02dT%02d%02d%02dZ" ); - - WriteTagL( EExt, TXmlParser::EElementBegin ); - WriteValueL( EXNam, aContentName ); - - TFileName temp; - temp.Format( KFormatUID, aSolution.iUid ); - WriteValueL( EXVal, temp ); - - temp.Format( KFormatName, &aSolution.iSolutionName ); - WriteValueL( EXVal, temp ); - - if ( aSolution.iTime.Int64() != 0 ) - { - // write time - TDateTime time = aSolution.iTime.DateTime(); - temp.Format( KFormatDate, time.Year(), time.Month() + 1, - time.Day() + 1, time.Hour(), time.Minute(), time.Second() ); - WriteValueL( EXVal, temp ); - - } - - - WriteTagL( EExt, TXmlParser::EElementEnd ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteFolderL(const TDesC& aType, const TDesC& aFullName, -// const TDesC& aMemory) -// Writes one folder name element. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteFolderL(const TDesC& aType, const TDesC& aFullName, - const TDesC& aMemory) - { - TRACE_FUNC_ENTRY; - _LIT(KFormat, "%S=%S"); - - TBuf buf; - const TInt KReservedSize = 10; - if ( aFullName.Length() + KReservedSize > KBufSize ) - { - return; - } - buf.Format(KFormat, &KFolderNameTag, &aFullName); - - - WriteTagL(EExt, TXmlParser::EElementBegin); - - WriteValueL(EXNam, aType); - WriteValueL(EXVal, buf); - - buf.Format(KFormat, &KFolderMemoryTypeTag, &aMemory); - WriteValueL(EXVal, buf); - - - WriteTagL(EExt, TXmlParser::EElementEnd); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteL(const TDesC& aText) -// Writes one element to capability buffer. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteL(const TDesC& aText) - { - if (aText.Length() > iBuf.MaxLength()) - { - User::Leave(KErrTooBig); - } - - - iBuf=aText; - iBuf.Trim(); - FormatElement(iBuf); - TPtr8 ptr = iHeapBuf->Des(); - - if ( iBuf.Length()+2 > ptr.MaxLength() ) - { - User::Leave(KErrTooBig); - } - - //unicode conversion - HBufC8* convBuf = HBufC8::NewLC( iBuf.Size() ); - TPtr8 convPtr = convBuf->Des(); - - CnvUtfConverter::ConvertFromUnicodeToUtf8(convPtr, iBuf); - - ptr.Copy(convPtr); - ptr.Append( KLineFeed ); // linefeed - - CleanupStack::PopAndDestroy( convBuf ); - - TInt pos=iCapabilityBuf->Size(); - iCapabilityBuf->InsertL(pos, ptr); - - iBuf=KNullDesC; - } - -void CCapInfo::WriteNewLineL() - { - TInt pos=iCapabilityBuf->Size(); - iCapabilityBuf->InsertL(pos, KLineFeed ); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteValueL(TInt aId, const TDesC& aValue) -// Constructs element with value (eg en) -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteValueL(TInt aId, const TDesC& aValue) - { - // empty values not written to capability object - if (aValue.Length()<1) - { - LOGGER_WRITE( "WriteValueL: value is empty" ); - return; - } - - TBuf buf; - - TRAPD(err, CapParser::MakeElementL(buf, aId, aValue)); - if (err==KErrNone) - { - WriteL(buf); - } - else if (err==KErrTooBig) - { - WriteBigValueL(aId, aValue); - } - else - { - User::Leave(err); - } - - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteBigValueL(TInt aId, const TDesC& aValue) -// Constructs element with value -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteBigValueL(TInt aId, const TDesC& aValue) - { - HBufC* hBuf=HBufC::NewL(aValue.Length()+KBufSize); - CleanupStack::PushL(hBuf); - - TPtr pBuf(hBuf->Des()); - CapParser::MakeElementL(pBuf, aId, aValue); - WriteL(*hBuf); - - CleanupStack::PopAndDestroy(hBuf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteValueL(TInt aId, TInt64 aValue) -// Constructs element with integer value -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteValueL(TInt aId, TInt64 aValue) - { - TBuf buf; - TBuf value; - CapUtil::IntToStr(value, aValue); - CapParser::MakeElementL(buf, aId, value); - WriteL(buf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteTagL(TInt aId, TInt aType) -// Constructs element without value (eg ) -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteTagL(TInt aId, TInt aType) - { - TBuf buf; - CapParser::MakeElementL(buf, aId, aType); - WriteL(buf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteAttributeL(TInt aId, const TDesC& aVersion, const TDesC& aDate) -// Constructs element with attributes "Version" and "Date" -// (eg ) -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteAttributeL(TInt aId, const TDesC& aVersion, - const TDesC& aDate) - { - // empty values not written to capability object - if (aVersion.Length()<1 && aDate.Length()<1) - { - LOGGER_WRITE( "WriteAttributeL: attributes are empty" ); - return; - } - - TBuf buf; - CapParser::MakeElementL(buf, aId, aVersion, aDate); - WriteL(buf); - } - -// ----------------------------------------------------------------------------- -// CCapInfo::WriteFromListL(CStringList* aList) -// Writes elements from list to capability buffer. -// ----------------------------------------------------------------------------- -// -void CCapInfo::WriteFromListL(CStringList* aList) - { - TInt count=aList->Count(); - - for (TInt i=0; iReadPtr(i)); - } - } - -// ----------------------------------------------------------------------------- -// CCapInfo::FormatElement(TDes& aText) -// Function adds indentation spaces to capability elements to improve -// readability. -// ----------------------------------------------------------------------------- -// -void CCapInfo::FormatElement(TDes& aText) - { - TXmlParser parser; - - parser.Set(aText); - TInt type=parser.Type(); - TBuf tag; - parser.GetTag(tag); - - if (type==TXmlParser::EElementEnd) - { - TInt id1=CapParser::ElementId(tag); - TInt id2=iIdStack.Pop(); - - __ASSERT_DEBUG(id1==id2, CapUtil::Panic(KErrGeneral)); - id1=0; - id2=0; - } - - AddFormatText(aText, iIdStack.Size()); - - if (type==TXmlParser::EElementBegin) - { - TInt id1=CapParser::ElementId(tag); - iIdStack.Push(id1); - } - } - -// ----------------------------------------------------------------------------- -// CCapInfo::AddFormatText( TDes& aText, TInt aNum ) const -// Adds format text -// ----------------------------------------------------------------------------- -// -void CCapInfo::AddFormatText( TDes& aText, TInt aNum ) const - { - TBuf buf; - buf = KNullDesC; - - if ( aNum > KNestingLimit ) - { - aNum = KNestingLimit; - } - - for ( TInt i=0; ibuf.Length() ) - { - aText.Insert( 0, buf ); - } - } - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/caplist.cpp --- a/connectivitymodules/SeCon/services/csc/src/caplist.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: CCapList implementation -* -*/ - - -// INCLUDE FILES - -#include "caplist.h" -#include "caputils.h" -#include "capparser.h" -#include "capability.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CCapList::NewL() -// Two-phase constructor. -// ----------------------------------------------------------------------------- -// -CCapList* CCapList::NewL() - { - CCapList* self = new(ELeave) CCapList(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CCapList::~CCapList() -// Gets phone serial number from etel. -// ----------------------------------------------------------------------------- -// -CCapList::~CCapList() - { - delete iList; - } - -// ----------------------------------------------------------------------------- -// CCapList::CCapList() -// Constructor -// ----------------------------------------------------------------------------- -// -CCapList::CCapList() - { - } - -// ----------------------------------------------------------------------------- -// CCapList::ConstructL() -// Initializes the member data -// ----------------------------------------------------------------------------- -// -void CCapList::ConstructL() - { - iList = CStringList::NewL(); - } - -// ----------------------------------------------------------------------------- -// CCapList::List() -// Returns the list -// ----------------------------------------------------------------------------- -// -CStringList* CCapList::List() - { - __ASSERT_DEBUG(iList, CapUtil::Panic(KErrGeneral)); - return iList; - } - -// ----------------------------------------------------------------------------- -// CCapList::FindFromMark(TInt aId, TInt aType) -// Find from mark -// ----------------------------------------------------------------------------- -// -TInt CCapList::FindFromMark(TInt aId, TInt aType) - { - TInt mark = List()->Mark(); - TInt count= List()->Count(); - - if ( mark >= count ) - { - return KErrNotFound; - } - - TInt index=Find(aId, aType, mark); - if ( index == KErrNotFound ) - { - return KErrNotFound; - } - - - __ASSERT_DEBUG(index>=mark, CapUtil::Panic(KErrGeneral)); - - List()->SetMark(index+1); - return index; - } - -// ----------------------------------------------------------------------------- -// CCapList::FindServiceHeader() -// Finds service xml-file identification header. This header must be the first -// line in every service file. -// ----------------------------------------------------------------------------- -// -TBool CCapList::FindServiceHeader() - { - TRACE_FUNC_ENTRY; - if (List()->Count()<1) - { - LOGGER_WRITE( "CCapList::FindServiceHeader() : returned EFalse" ); - return EFalse; - } - - TBuf buf; - TPtrC ptr=List()->ReadPtr(0); - CapUtil::StrCopy(buf, ptr); - buf.Trim(); - if (buf.Compare(KServiceHeader)==0) - { - LOGGER_WRITE( "CCapList::FindServiceHeader() : returned ETrue" ); - return ETrue; - } - else - { - LOGGER_WRITE( "CCapList::FindServiceHeader() : returned EFalse" ); - return EFalse; - } - } - -// ----------------------------------------------------------------------------- -// CCapList::FindServiceL(CStringList* aList) -// Find service -// ----------------------------------------------------------------------------- -// -TBool CCapList::FindServiceL(CStringList* aList) - { - TRACE_FUNC_ENTRY; - aList->Reset(); - List()->SetMark(0); - - if (!FindServiceHeader()) - { - LOGGER_WRITE( "CCapList::FindServiceL(CStringList* aList) : returned EFalse" ); - return EFalse; - } - - - for (;;) - { - TInt start=FindFromMark(EService, TXmlParser::EElementBegin); - TInt stop=FindFromMark(EService, TXmlParser::EElementEnd); - - if (start==KErrNotFound || stop==KErrNotFound || start>=stop) - { - break; - } - - aList->CopyL(List(), start, stop); - } - - if (aList->Count()>0) - { - LOGGER_WRITE( "CCapList::FindServiceL(CStringList* aList) : returned ETrue" ); - return ETrue; - } - - LOGGER_WRITE( "CCapList::FindServiceL(CStringList* aList) : returned EFalse" ); - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CCapList::Find(TInt aId, TInt aType, TInt aIndex) -// Find element -// ----------------------------------------------------------------------------- -// -TInt CCapList::Find(TInt aId, TInt aType, TInt aIndex) - { - TInt count=List()->Count(); - if (aIndex<0 || aIndex>=count) - { - CapUtil::Panic(KErrArgument); - } - - for (TInt i=aIndex; iReadPtr(i); - - TInt id=0; - TInt type=0; - - CapParser::ParseElement(ptr, id, type); - if (type==TXmlParser::EElementUnknown) - { - continue; // invalid capability element - } - - if (id==aId && aType==type) - { - return i; - } - } - return KErrNotFound; - } - - -// End of files diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/capparser.cpp --- a/connectivitymodules/SeCon/services/csc/src/capparser.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,766 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: CapParser implementation -* -*/ - - -// INCLUDE FILES - -#include "capparser.h" -#include "caputils.h" - -const char KFind1 = '&'; -const char KFind2 = '<'; -const char KFind3 = '>'; -const char KFind4 = '"'; -const char KFind5 = '\''; - -_LIT( KReplace1, "&" ); -_LIT( KReplace2, "<" ); -_LIT( KReplace3, ">" ); -_LIT( KReplace4, """ ); -_LIT( KReplace5, "'" ); - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CapParser::GetTagL(TDes& aText, TInt aId) -// Returns capability element tag (eg. "Memory") -// ----------------------------------------------------------------------------- -// -void CapParser::GetTagL(TDes& aText, TInt aId) - { - aText=KNullDesC; - - TInt count=NUMXMLTOKENS; - for (TInt i=0; ibuf; - TInt count=NUMXMLTOKENS; - for (TInt i=0; i" -> EMemory, EElementBegin) -// ----------------------------------------------------------------------------- -// -void CapParser::ParseElement(const TDesC& aText, TInt& aId, TInt& aType) - { - TXmlParser parse; - aId=KErrNotFound; - - parse.Set(aText); - aType=parse.Type(); - if (aType==TXmlParser::EElementUnknown) - { - return; - } - - TPtrC ptr=parse.Tag(); - aId=ElementId(ptr); - } - -// ----------------------------------------------------------------------------- -// CapParser::MakeElementL(TDes& aText, TInt aId, const TDesC& aValue) -// Constructs element with value (eg. "23456"). -// ----------------------------------------------------------------------------- -// -void CapParser::MakeElementL(TDes& aText, TInt aId, const TDesC& aValue) - { - aText=KNullDesC; - ReplaceSpecialCharsL( aText, aValue ); - - TBuf buf; - MakeElementL( buf, aId, TXmlParser::EElementBegin ); - - TInt len = aText.Length() + buf.Length() + buf.Length() + 1; - if ( len > aText.MaxLength()) - { - User::Leave(KErrTooBig); - } - - aText.Insert( 0, buf ); - MakeElementL( buf, aId, TXmlParser::EElementEnd ); - aText.Append( buf ); - } - -// ----------------------------------------------------------------------------- -// CapParser::MakeElementL(TDes& aText, TInt aId, TInt aType) -// Constructs element without value (eg. "" or ""). -// ----------------------------------------------------------------------------- -// -void CapParser::MakeElementL(TDes& aText, TInt aId, TInt aType) - { - _LIT(KFormat1, "<%S>"); - _LIT(KFormat2, ""); - _LIT(KFormat3, "<%S/>"); - - aText=KNullDesC; - TBuf buf; - GetTagL(buf, aId); - - switch(aType) - { - case TXmlParser::EElementBegin: - aText.Format(KFormat1, &buf); - break; - case TXmlParser::EElementEnd: - aText.Format(KFormat2, &buf); - break; - case TXmlParser::EElementEmpty: - aText.Format(KFormat3, &buf); - break; - default: - CapUtil::Panic(KErrArgument); - break; - } - } - -// ----------------------------------------------------------------------------- -// CapParser::MakeElementL(TDes& aText, TInt aId, const TDesC& aVersion, -// const TDesC& aDate) -// Constructs element with attributes "Version" and "Date"(eg. -// ""). -// ----------------------------------------------------------------------------- -// -void CapParser::MakeElementL(TDes& aText, TInt aId, const TDesC& aVersion, - const TDesC& aDate) - { - _LIT(KFormat1, "<%S %S=\"%S\" %S=\"%S\"/>"); - _LIT(KFormat2, "<%S %S=\"%S\"/>"); - - aText=KNullDesC; - - TBuf element; - TBuf versionTag; - TBuf dateTag; - - GetTagL(element, aId); - GetTagL(versionTag, EAttVersion); - GetTagL(dateTag, EAttDate); - - if (aDate.Length()>0) - { - aText.Format(KFormat1, &element, &versionTag, &aVersion, &dateTag, - &aDate); - } - else - { - aText.Format(KFormat2, &element, &versionTag, &aVersion); - } - } - -// ----------------------------------------------------------------------------- -// CapParser::ReplaceSpecialCharsL( TDes& aText, const TDesC& aValue ) -// Replaces special characters to xml compliant. -// ----------------------------------------------------------------------------- -// -void CapParser::ReplaceSpecialCharsL( TDes& aText, const TDesC& aValue ) - { - if ( aValue.Length() > aText.MaxLength() ) - { - User::Leave(KErrTooBig); - } - aText.Copy( aValue ); - - //Replace special characters - for( TInt i = 0; i < aText.Length(); i++ ) - { - switch( aText[i] ) - { - case KFind1: - if ( aText.Length()+KReplace1().Length()-1 > aText.MaxLength() ) - { - User::Leave(KErrTooBig); - } - aText.Replace( i, 1, KReplace1 ); - i+=KReplace1().Length()-1; - break; - case KFind2: - if ( aText.Length()+KReplace2().Length()-1 > aText.MaxLength() ) - { - User::Leave(KErrTooBig); - } - aText.Replace( i, 1, KReplace2 ); - i+=KReplace2().Length()-1; - break; - case KFind3: - if ( aText.Length()+KReplace3().Length()-1 > aText.MaxLength() ) - { - User::Leave(KErrTooBig); - } - aText.Replace( i, 1, KReplace3 ); - i+=KReplace3().Length()-1; - break; - case KFind4: - if ( aText.Length()+KReplace4().Length()-1 > aText.MaxLength() ) - { - User::Leave(KErrTooBig); - } - aText.Replace( i, 1, KReplace4 ); - i+=KReplace4().Length()-1; - break; - case KFind5: - if ( aText.Length()+KReplace5().Length()-1 > aText.MaxLength() ) - { - User::Leave(KErrTooBig); - } - aText.Replace( i, 1, KReplace5 ); - i+=KReplace5().Length()-1; - break; - default: - break; - } - } - } - -// ----------------------------------------------------------------------------- -// TXmlParser::Set(const TDesC& aText) -// Sets a tag -// ----------------------------------------------------------------------------- -// -void TXmlParser::Set(const TDesC& aText) - { - iOriginal.Set(aText); - TrimOriginal(); - Init(); - Parse(); - } - -// ----------------------------------------------------------------------------- -// TXmlParser::Init() -// Inits the parser -// ----------------------------------------------------------------------------- -// -void TXmlParser::Init() - { - iType=EElementUnknown; - iTag.Set(KNullDesC); - iValue.Set(KNullDesC); - } - -// ----------------------------------------------------------------------------- -// TXmlParser::GetTag(TDes& aText) const -// Gets the tag -// ----------------------------------------------------------------------------- -// -void TXmlParser::GetTag(TDes& aText) const - { - StrCopy(aText, iTag); - } - -// ----------------------------------------------------------------------------- -// TXmlParser::Tag() const -// Returns a pointer to a tag -// ----------------------------------------------------------------------------- -// -TPtrC TXmlParser::Tag() const - { - return iTag; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::Type() const -// Returns type -// ----------------------------------------------------------------------------- -// -TInt TXmlParser::Type() const - { - return iType; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::Parse() -// Parses xml-element. -// ----------------------------------------------------------------------------- -// -void TXmlParser::Parse() - { - iType=EElementUnknown; - - // this must be the first check - if (ElementUnknown()) - { - return; - } - - if (ElementBegin()) - { - return; - } - - if (ElementEnd()) - { - return; - } - - if (ElementValue()) - { - return; - } - - if (ElementComment()) - { - return; - } - - if (ElementDocType()) - { - return; - } - - if (ElementVersion()) - { - return; - } - - if (ElementEmpty()) - { - return; - } - - if (ElementAtt()) - { - return; - } - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementUnknown() -// Parses unknown elements -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementUnknown() - { - TPtrC str=Str(); - TInt len=str.Length(); - const TInt KXmlElementMinLength = 3; - if ( len < KXmlElementMinLength ) - { - return ETrue; // too short to be xml element - } - - - iFirst=str.Locate('<'); - iLast=str.LocateReverse('>'); - iSlash=str.LocateReverse('/'); - - if (iFirst!=0 || iLast!=len-1) - { - return ETrue; // first char must be "<" and last ">" - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementBegin() -// Parses beginning tag (eg. ) -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementBegin() - { - TPtrC str=Str(); - - if (iSlash!=KErrNotFound) - { - return EFalse; - } - - // remove possible attributes - TInt pos=str.Locate(' '); - if (pos==KErrNotFound) - { - pos=iLast; - } - - TPtrC ptr=SubStr(iFirst, pos); - - if (!ValidTag(ptr)) - { - return EFalse; - } - - iType=EElementBegin; - iTag.Set(ptr); - - return ETrue; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementEnd() -// Parses ending tag (eg. ) -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementEnd() - { - if (iSlash!=iFirst+1) - { - return EFalse; - } - - TPtrC ptr=SubStr(iSlash, iLast); - if (!ValidTag(ptr)) - { - return EFalse; - } - - iType=EElementEnd; - iTag.Set(ptr); - return ETrue; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementValue() -// Parses value (eg. en) -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementValue() - { - TPtrC str=Str(); - - TInt pos1=str.Locate('>'); - TInt pos2=str.LocateReverse('<'); - - if (pos1) -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementEmpty() - { - if (iSlash!=iLast-1) - { - return EFalse; - } - - TPtrC ptr=SubStr(iFirst, iSlash); - if (!ValidTag(ptr)) - { - return EFalse; - } - - iType=EElementEmpty; - iTag.Set(ptr); - return ETrue; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementVersion() -// Identifies version element ("") -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementVersion() - { - TPtrC str=Str(); - - if ( str.Length()>=3 && str[1]=='?' && str[2]=='x') - { - iType=EElementVersion; - return ETrue; - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementDocType() -// Identifies document type element -// (""). -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementDocType() - { - TPtrC str=Str(); - const TInt KElementMinLength = 10; - if ( str.Length() < KElementMinLength ) - { - return EFalse; - } - - if (str[1]=='!' && str[2]=='D' && str[3]=='O' && str[4]=='C') - { - iType=EElementDocType; - return ETrue; - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementComment() -// Identifies comment element (""). -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementComment() - { - TPtrC str=Str(); - - if (str.Length()<7) - { - return EFalse; - } - - if (str[1]=='!' && str[2]=='-' && str[3]=='-') - { - iType=EElementComment; - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ElementAtt() -// Parses attribute element (eg. ) -// Note: Attribute values cannot contain equals (=) or quotations (") -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ElementAtt() - { - TPtrC str=Str(); - TInt num1=Count(str, '='); - TInt num2=Count(str, '"'); - TInt pos=str.Locate(' '); // find end of tag - - if (iSlash==iLast-1 && num1>0 && num2==(2*num1) && pos!=KErrNotFound) - { - TPtrC ptr1=SubStr(iFirst, pos); - if (!ValidTag(ptr1)) - { - return EFalse; - } - - iType=EElementAtt; - iTag.Set(ptr1); - TPtrC ptr2=SubStr(pos, iSlash); - iValue.Set(ptr2); - return ETrue; - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::Str() const -// Locates the position of the given character -// ----------------------------------------------------------------------------- -// -TPtrC TXmlParser::Str() const - { - return iText; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::FirstNonSpace(const TDesC& aText) -// Returns the position of the first non space character -// ----------------------------------------------------------------------------- -// -TInt TXmlParser::FirstNonSpace(const TDesC& aText) - { - TInt len=aText.Length(); - for (TInt i=0; i=0; i--) - { - TChar c=aText[i]; - if (!c.IsSpace()) - { - return i; - } - } - return KErrNotFound; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::SubStr(const TDesC& aText, TInt pos1, TInt pos2) -// Function returns a sub-string between aPos1 and aPos2 -// ----------------------------------------------------------------------------- -// -TPtrC TXmlParser::SubStr(const TDesC& aText, TInt pos1, TInt pos2) - { - if (pos1<0 || pos2>=aText.Length() || pos1>=pos2) - { - return TPtrC(); // return empty descriptor - } - - TInt len=pos2-pos1; - return aText.Mid(pos1+1, len-1); - } - -// ----------------------------------------------------------------------------- -// TXmlParser::SubStr(TInt pos1, TInt pos2) -// Function returns a sub-string between aPos1 and aPos2 -// ----------------------------------------------------------------------------- -// -TPtrC TXmlParser::SubStr(TInt pos1, TInt pos2) - { - TPtrC str=Str(); - return SubStr(str, pos1, pos2); - } - -// ----------------------------------------------------------------------------- -// TXmlParser::StrCopy(TDes& aTarget, const TDesC& aSource) -// Function performs string copy with length checking. -// ----------------------------------------------------------------------------- -// -void TXmlParser::StrCopy(TDes& aTarget, const TDesC& aSource) - { - TInt len=aTarget.MaxLength(); - if(lenfirst+1) - { - TPtrC ptr=iOriginal.Mid(first, last-first+1); - iText.Set(ptr); - } - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ValidChar(const TChar aChar) -// Validates the character -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ValidChar(const TChar aChar) - { - if (aChar >= 'A' && aChar <= 'Z') - { - return ETrue; - } - if (aChar >= 'a' && aChar <= 'z') - { - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// TXmlParser::ValidTag(const TDesC& aText) -// Validates the tag -// ----------------------------------------------------------------------------- -// -TBool TXmlParser::ValidTag(const TDesC& aText) - { - TInt len=aText.Length(); - for (TInt i=0; i -#include -#include -#include -#include // for etel -#include // for etel -#include -#include -#include -#include -#include - -#include "caputils.h" -#include "capability.h" -#include "debug.h" - -const TInt KPackageSize = 65536; -const TInt KDefaultArrayGranularity = 5; -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CapUtil::GetDefaultRootPathL( RFs& aFs, TDes& aRootPath ) -// Gets default root path -// ----------------------------------------------------------------------------- -// -void CapUtil::GetDefaultRootPathL( RFs& aFs, TDes& aRootPath ) - { - TRACE_FUNC_ENTRY; - // Use the default mass storage if it is internal drive - TInt msDrive; - User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, msDrive ) ); - LOGGER_WRITE_1("drive: %d", msDrive); - - TUint msStatus( 0 ); - TInt err = DriveInfo::GetDriveStatus( aFs, msDrive, msStatus ); - LOGGER_WRITE_1("DriveInfo::GetDriveStatus err: %d", err); - - // if no errors, also check drive status - if( !err && !( msStatus & DriveInfo::EDrivePresent ) - || msStatus & DriveInfo::EDriveCorrupt ) - { - LOGGER_WRITE( "Internal mass storage not present or corrupted" ); - err = KErrNotFound; - } - - if ( !err && ( msStatus & DriveInfo::EDriveInternal ) ) - { - // Use internal mass storage - LOGGER_WRITE( "Use internal mass storage" ); - User::LeaveIfError( PathInfo::GetRootPath( aRootPath, msDrive ) ); - } - else - { - // Use phone memory - LOGGER_WRITE( "Use phone memory" ); - StrCopy( aRootPath, PathInfo::PhoneMemoryRootPath() ); - } - LOGGER_WRITE_1( "rootPath: %S", &aRootPath ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetMemoryType( RFs& aFs, TDes& aMemoryType, const TInt aDrive ) -// Gets drive memory type -// ----------------------------------------------------------------------------- -// -void CapUtil::GetMemoryType( RFs& aFs, TDes& aMemoryType, const TInt aDrive ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aDrive: %d", aDrive); - aMemoryType = KNullDesC; - TUint driveStatus; - TInt err = DriveInfo::GetDriveStatus( aFs, aDrive, driveStatus ); - if( err ) - { - LOGGER_WRITE_1( "CapUtil::GetMemoryType() : DriveInfo::GetDriveStatus err: %d", err ); - return; - } - // search internal or removable drives - TBool searchInternalDrives; - if( driveStatus & DriveInfo::EDriveInternal ) - { - aMemoryType = KMediaFlash; - searchInternalDrives = ETrue; - } - else - { - aMemoryType = KMediaMMC; - searchInternalDrives = EFalse; - } - - TInt typeNumber(0); - TInt driveCount; - TDriveList driveList; - - err = DriveInfo::GetUserVisibleDrives( aFs, driveList, driveCount ); - if( err ) - { - LOGGER_WRITE_1( "CapUtil::GetMemoryType() : DriveInfo::GetUserVisibleDrives err: %d", err ); - return; - } - - for( TInt i = EDriveA; i <= aDrive; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - err = DriveInfo::GetDriveStatus( aFs, i, driveStatus ); - if( err ) - { - LOGGER_WRITE_1( "CapUtil::GetMemoryType() : DriveInfo::GetDriveStatus err: %d", err ); - continue; - } - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt ) - { - LOGGER_WRITE( "not present or corrupted" ); - continue; - } - - if( driveStatus & DriveInfo::EDriveInternal ) - { - if( searchInternalDrives ) - { - typeNumber++; - } - } - else if( driveStatus & DriveInfo::EDriveRemovable ) - { - if( !searchInternalDrives ) - { - typeNumber++; - } - } - } - } - - if( typeNumber > 1 ) - { - aMemoryType.AppendNum( typeNumber ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetOperatornameL(TDes& aLongName, TDes& aCountryCode, TDes& aNetworkID) -// Gets phone operator name, country code, networkID. -// ----------------------------------------------------------------------------- -// -void CapUtil::GetOperatorNameL(TDes& aLongName, TDes& aCountryCode, TDes& aNetworkID) - { - TRACE_FUNC_ENTRY; - TUint32 networkCaps; - RTelServer::TPhoneInfo phoneInfo; - - RTelServer server; - RMobilePhone mobilePhone; - User::LeaveIfError( server.Connect() ); - CleanupClosePushL( server ); - - TInt numPhones; - User::LeaveIfError( server.EnumeratePhones( numPhones ) ); - server.GetPhoneInfo( 0, phoneInfo ); - - User::LeaveIfError( mobilePhone.Open( server, phoneInfo.iName ) ); - CleanupClosePushL( mobilePhone ); - User::LeaveIfError( mobilePhone.GetNetworkCaps( networkCaps ) ); - - RMobilePhone::TMobilePhoneNetworkInfoV1 mobilePhoneNetworkInfo; - RMobilePhone::TMobilePhoneNetworkInfoV1Pckg mobilePhoneNetworkInfoPckg( - mobilePhoneNetworkInfo ); - RMobilePhone::TMobilePhoneLocationAreaV1 mobilePhoneLocationArea; - - if (networkCaps & RMobilePhone::KCapsGetCurrentNetwork) - { - TRequestStatus status; - mobilePhone.GetCurrentNetwork( - status, mobilePhoneNetworkInfoPckg, mobilePhoneLocationArea ); - User::WaitForRequest( status ); - User::LeaveIfError( status.Int() ); - } - - CleanupStack::PopAndDestroy( &mobilePhone ); - CleanupStack::PopAndDestroy( &server ); - if ( mobilePhoneNetworkInfo.iLongName.Length() > 0 ) - { - StrCopy( aLongName, mobilePhoneNetworkInfo.iLongName ); - } - else if ( mobilePhoneNetworkInfo.iShortName.Length() > 0 ) - { - StrCopy( aLongName, mobilePhoneNetworkInfo.iShortName ); - } - else - { - StrCopy( aLongName, mobilePhoneNetworkInfo.iDisplayTag ); - } - StrCopy( aCountryCode, mobilePhoneNetworkInfo.iCountryCode ); - StrCopy( aNetworkID, mobilePhoneNetworkInfo.iNetworkId ); - - TRACE_FUNC_EXIT; - } -// ----------------------------------------------------------------------------- -// CapUtil::GetManufacturer(TDes& aText) -// Gets phone manufacturer from HAL. In case manufacturer is not known, -// ----------------------------------------------------------------------------- -// -void CapUtil::GetManufacturer(TDes& aText) - { - TRACE_FUNC_ENTRY; - TInt num(KErrNotFound); - - HAL::Get(HALData::EManufacturer, num); - - switch (num) - { - case HALData::EManufacturer_Ericsson: - aText=KManufacturerEricsson; - break; - case HALData::EManufacturer_Motorola: - aText=KManufacturerMotorola; - break; - case HALData::EManufacturer_Nokia: - aText=KManufacturerNokia; - break; - case HALData::EManufacturer_Panasonic: - aText=KManufacturerPanasonic; - break; - case HALData::EManufacturer_Psion: - aText=KManufacturerPsion; - break; - case HALData::EManufacturer_Intel: - aText=KManufacturerIntel; - break; - case HALData::EManufacturer_Cogent: - aText=KManufacturerCogent; - break; - case HALData::EManufacturer_Cirrus: - aText=KManufacturerCirrus; - break; - case HALData::EManufacturer_Linkup: - aText=KManufacturerLinkup; - break; - case HALData::EManufacturer_TexasInstruments: - aText=KManufacturerTexasInstruments; - break; - default: - aText=KNullDesC; - break; - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetLanguage(TDes& aText) -// Gets language -// ----------------------------------------------------------------------------- -// -void CapUtil::GetLanguage(TDes& aText) - { - TRACE_FUNC_ENTRY; - TLanguage lang=User::Language(); - GetLanguageString(lang, aText); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetSWVersionL(TDes& aVersion, TDes& aDate, TDes& aModel) -// Gets SW version, SW version date and device model from SysUtil. -// ----------------------------------------------------------------------------- -// -void CapUtil::GetSWVersionL(TDes& aVersion, TDes& aDate, TDes& aModel) - { - TRACE_FUNC_ENTRY; - TBuf buf; - aVersion=KNullDesC; - aDate=KNullDesC; - aModel=KNullDesC; - - User::LeaveIfError( SysUtil::GetSWVersion( buf ) ); - RArray arr(KDefaultArrayGranularity); - CleanupClosePushL( arr ); - - CapUtil::SplitL(buf, '\n', arr); - const TInt KFieldsToFind = 3; - if ( arr.Count() < KFieldsToFind ) - { - User::Leave( KErrNotFound ); - } - - StrCopy( aVersion, arr[0] ); - aVersion.Trim(); - - StrCopy(aModel,arr[2]); - aModel.Trim(); - - TBuf date; - StrCopy(date, arr[1]); - TTime t; - t.UniversalTime(); // this is to avoid warnings - TRAPD( err, t = ParseDateL( date ) ); - if ( err == KErrNone ) - { - CapabilityDate( aDate, t ); - } - - CleanupStack::PopAndDestroy( &arr ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::InitMemoryInfo(TMemoryInfo& aInfo) -// Initializes TMemoryInfo. -// ----------------------------------------------------------------------------- -// -void CapUtil::InitMemoryInfo(TMemoryInfo& aInfo) - { - aInfo.iDriveNum = KErrNotFound; - aInfo.iDriveLetter = KNoChar; - aInfo.iLocation = KNullDesC; - aInfo.iFree = KErrNotFound; - aInfo.iUsed = KErrNotFound; - aInfo.iShared = EFalse; - aInfo.iFileSize = KErrNotFound; - aInfo.iFolderSize = KErrNotFound; - aInfo.iFileNameSize = KMaxFileName; // TFileName 256 - aInfo.iFolderNameSize = KMaxFileName; // TFileName 256 - aInfo.iCaseSensitivity = EFalse; - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetMemoryInfoL( const RFs& aFs, TInt aDriveNumber, TMemoryInfo& aInfo ) -// Get memory information for one drive. -// ----------------------------------------------------------------------------- -// -void CapUtil::GetMemoryInfoL( const RFs& aFs, const TInt aDriveNumber, TMemoryInfo& aInfo ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1(" aDriveNumber: %d", aDriveNumber); - - TVolumeInfo volumeInfo; - TDriveInfo driveInfo; - - InitMemoryInfo( aInfo ); - - User::LeaveIfError( aFs.Drive(driveInfo, aDriveNumber) ); - if ( driveInfo.iDriveAtt == (TUint)KDriveAbsent ) - { - LOGGER_WRITE(" iDriveAtt == (TUint)KDriveAbsent, Leave KErrNotFound"); - User::Leave( KErrNotFound ); - } - - User::LeaveIfError( aFs.Volume(volumeInfo, aDriveNumber) ); - - User::LeaveIfError( aFs.DriveToChar(aDriveNumber, aInfo.iDriveLetter) ); - aInfo.iDriveNum = aDriveNumber; - aInfo.iLocation.Append( aInfo.iDriveLetter ); - aInfo.iLocation.Append( KDriveDelimiter ); - aInfo.iLocation.Append( KPathDelimiter ); - aInfo.iFree = volumeInfo.iFree; - aInfo.iUsed = volumeInfo.iSize - volumeInfo.iFree; - - // set free memory up to critical level for all drives - CRepository* repository = CRepository::NewLC( KCRUidDiskLevel ); - TInt criticalLevel(0); - User::LeaveIfError( repository->Get( KDiskCriticalThreshold, criticalLevel ) ); - CleanupStack::PopAndDestroy( repository ); - criticalLevel += KPackageSize; // add obex package size to critical level - LOGGER_WRITE_1( "CapUtil::GetMemoryInfoL() criticalLevel: %d", criticalLevel ) ; - if ( aInfo.iFree > criticalLevel ) - { - aInfo.iFree = aInfo.iFree - criticalLevel; - } - else - { - aInfo.iFree = 0; - } - - aInfo.iFileSize = aInfo.iFree; - aInfo.iFolderSize = aInfo.iFree; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetFileListL( RFs& aFs, const TDesC& aDir, -// RArray& aList) -// Finds all files in aDir. -// ----------------------------------------------------------------------------- -// -void CapUtil::GetFileListL( const RFs& aFs, const TDesC& aDir, - RArray& aList) - { - TRACE_FUNC_ENTRY; - - aList.Reset(); - - CDir* dir( NULL ); - User::LeaveIfError( aFs.GetDir( aDir, KEntryAttMatchMask, ESortByName, dir ) ); - CleanupStack::PushL( dir ); - - for ( TInt i=0; i < dir->Count(); ++i ) - { - TEntry entry = (*dir)[i]; - if ( !entry.IsDir() ) - { - User::LeaveIfError( aList.Append( entry.iName ) ); - } - } - CleanupStack::PopAndDestroy( dir ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::CheckFileType(const TDesC& aFile, const TDesC& aExt) -// Function checks file extension. -// ----------------------------------------------------------------------------- -// -TBool CapUtil::CheckFileType(const TDesC& aFile, const TDesC& aExt) - { - TRACE_FUNC_ENTRY; - TParse parse; - parse.Set(aFile, NULL, NULL); - TPtrC ptr=parse.Ext(); - - TBuf buf1; - TBuf buf2; - - buf1=ptr; - buf2=aExt; - - buf1.LowerCase(); - buf2.LowerCase(); - - if (buf1.Compare(buf2)==0) - { - LOGGER_WRITE( "CapUtil::CheckFileType(const TDesC& aFile, const TDesC& aExt) : returned ETrue" ); - return ETrue; - } - - else - { - LOGGER_WRITE( "CapUtil::CheckFileType(const TDesC& aFile, const TDesC& aExt) : returned EFalse" ); - return EFalse; - } - } - -// ----------------------------------------------------------------------------- -// CapUtil::GetLanguageString(TLanguage aId, TDes& aText) -// Get language string for aId. -// ----------------------------------------------------------------------------- -// -void CapUtil::GetLanguageString(TLanguage aId, TDes& aText) - { - TRACE_FUNC_ENTRY; - aText=KNullDesC; - - TInt count=NUMLANGSTRINGS; - for (TInt i=0; i& aArray) -// Function splits string (eg "name1, name2, name3") into substrings. -// ----------------------------------------------------------------------------- -// -void CapUtil::SplitL(const TDesC& aText, const TChar aSeparator, - RArray& aArray) - { - TRACE_FUNC_ENTRY; - TPtrC ptr; - ptr.Set(aText); - - for (;;) - { - TInt pos=ptr.Locate(aSeparator); - if (pos==KErrNotFound) - { - aArray.AppendL(ptr); - break; - } - - TPtrC subStr=ptr.Left(pos); // get pos characters starting from position 0 - aArray.AppendL(subStr); - - if (!(ptr.Length()>pos+1)) - { - break; - } - - ptr.Set(ptr.Mid(pos+1));// get all characters starting from position pos+1 - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CapUtil::ParseDateL(const TDesC& aText) -// Function parses date string of the format "dd-mm-yy". -// ----------------------------------------------------------------------------- -// -TTime CapUtil::ParseDateL(const TDesC& aText) - { - TRACE_FUNC_ENTRY; - RArray arr(KDefaultArrayGranularity); - CleanupClosePushL( arr ); - - CapUtil::SplitL( aText, '-', arr ); - if ( arr.Count() != 3 ) - { - User::Leave( KErrNotSupported ); - } - - TInt day; - TInt month; - TInt year; - - User::LeaveIfError( StrToInt(arr[0], day) ); - User::LeaveIfError( StrToInt(arr[1], month) ); - User::LeaveIfError( StrToInt(arr[2], year) ); - - TDateTime td; - TMonth month2 = Month( month ); - // if year is defined as two digit, add currect millenium for it - const TInt KDefaultMillenium = 2000; - if ( year < KDefaultMillenium ) - { - year = year + KDefaultMillenium; - } - - - User::LeaveIfError( td.Set(year, month2, day-1, 0, 0, 0, 0) ); - - CleanupStack::PopAndDestroy( &arr ); - - TTime t(td); - TRACE_FUNC_EXIT; - return t; -} - -// ----------------------------------------------------------------------------- -// CapUtil::Month(TInt aNum) -// Function return TMonth presentation of integer -// ----------------------------------------------------------------------------- -// -TMonth CapUtil::Month(TInt aNum) - { - TRACE_FUNC_ENTRY; - __ASSERT_DEBUG(aNum>=1 && aNum<=12, Panic(KErrArgument)); - - switch (aNum) - { - case 1: return EJanuary; - case 2: return EFebruary; - case 3: return EMarch; - case 4: return EApril; - case 5: return EMay; - case 6: return EJune; - case 7: return EJuly; - case 8: return EAugust; - case 9: return ESeptember; - case 10: return EOctober; - case 11: return ENovember; - case 12: return EDecember; - default: return EJanuary; - } - } - -// ----------------------------------------------------------------------------- -// CapUtil::CapabilityDate(TDes& aText, const TTime aTime) -// Constructs capability date as string -// ----------------------------------------------------------------------------- -// -void CapUtil::CapabilityDate(TDes& aText, const TTime aTime) - { - TRACE_FUNC_ENTRY; - _LIT(KFormat,"%04d%02d%02dT%02d%02d%02dZ"); - - TDateTime dt=aTime.DateTime(); - aText.Format(KFormat, dt.Year(), dt.Month()+1, dt.Day()+1, dt.Hour(), - dt.Minute(), dt.Second()); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// TIdStack::Pop() -// Pop id from the stack -// ----------------------------------------------------------------------------- -// -TInt TIdStack::Pop() - { - if (iPos<0) - { - LOGGER_WRITE( "TIdStack::Pop() returned KErrNotFound" ); - return KErrNotFound; - } - - TInt id=iArray[iPos]; - iPos--; - return id; - } - -// ----------------------------------------------------------------------------- -// TIdStack::Push( TInt aId ) -// Push id to the stack -// ----------------------------------------------------------------------------- -// -void TIdStack::Push( TInt aId ) - { - if ( Size() >= KNestingLimit ) - { - return; - } - - iPos++; - iArray[iPos] = aId; - } - -// ----------------------------------------------------------------------------- -// TIdStack::Size() const -// Size of the stack -// ----------------------------------------------------------------------------- -// -TInt TIdStack::Size() const - { - return iPos+1; - } - -// ----------------------------------------------------------------------------- -// TIdStack::Reset() -// Reset the stack. -// ----------------------------------------------------------------------------- -// -void TIdStack::Reset() - { - iArray.Reset(); - iPos=-1; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/sconcsc.cpp --- a/connectivitymodules/SeCon/services/csc/src/sconcsc.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2002-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: CSConCSC implementation -* -*/ - - -// -// This program creates a polymorphic interface DLL that is used -// to create capability object -// - -// INCLUDE FILES - -#include -#include - -#include "sconcsc.h" -#include "capinfo.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CreateCSConCSCL() -// Function to construct CSConCSC object. Note that this function -// is exported at ordinal 1 and is not a member of any class. -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConCSC* CreateCSConCSCL() - { - TRACE_FUNC; - return CSConCSC::NewL(); - } - - -// ----------------------------------------------------------------------------- -// CSConCSC::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConCSC* CSConCSC::NewL() - { - TRACE_FUNC_ENTRY; - CSConCSC* self = new (ELeave) CSConCSC(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConCSC::~CSConCSC() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConCSC::~CSConCSC() - { - TRACE_FUNC_ENTRY; - delete iCapInfo; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConCSC::CapabilityObject(CBufFlat& aBuf) -// Creates a capability object data and sets data into aBuf. -// ----------------------------------------------------------------------------- -// -TInt CSConCSC::CapabilityObject(CBufFlat& aBuf) - { - TRACE_FUNC_ENTRY; - TRAPD(err, CSConCSC::CapabilityObjectL(aBuf)); - LOGGER_WRITE_1( "CSConCSC::CapabilityObject(CBufFlat& aBuf) : returned %d", err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CSConCSC::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConCSC::ConstructL() - { - iCapInfo = CCapInfo::NewL(); - } - -// ----------------------------------------------------------------------------- -// CSConCSC::CSConCSC() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConCSC::CSConCSC() - { - } - -// ----------------------------------------------------------------------------- -// CSConCSC::CapabilityObjectL(CBufFlat& aBuf) -// Creates a capability object data and sets data into aBuf. -// ----------------------------------------------------------------------------- -// -void CSConCSC::CapabilityObjectL(CBufFlat& aBuf) - { - TRACE_FUNC_ENTRY; - iCapInfo->CapabilityDocumentL( &aBuf ); - TRACE_FUNC_EXIT; - } - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/sconsyncservice.cpp --- a/connectivitymodules/SeCon/services/csc/src/sconsyncservice.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,505 +0,0 @@ -/* -* Copyright (c) 2007-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: CSConSyncService implementation. -* -*/ - - -// Includes -#include -#include - -#include // for searching app name from installer -#include -#include -#include -using namespace Java; - -#include "sconsyncservice.h" -#include "capability.h" -#include "debug.h" - -// Constants -const TInt KDsAppUi = 0x101F6DE4; // NSmlDSSync.exe -const TSmlDataProviderId KCalendarId = 0x101f6dde; -const TSmlDataProviderId KContactsId = 0x101f6ddd; -const TSmlDataProviderId KSmsId = 0x10206b5c; -const TSmlDataProviderId KBookmarkId = 0x102751ba; - -const TInt KDateFormatLength(16); - -// ----------------------------------------------------------------------------- -// CSConSyncService::NewLC() -// ----------------------------------------------------------------------------- -// -CSConSyncService* CSConSyncService::NewLC() - { - TRACE_FUNC_ENTRY; - CSConSyncService* self = new (ELeave) CSConSyncService(); - CleanupStack::PushL( self ); - self->ConstructL(); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::CSConSyncService() -// ----------------------------------------------------------------------------- -// -CSConSyncService::CSConSyncService() - { - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::~CSConSyncService() -// ----------------------------------------------------------------------------- -// -CSConSyncService::~CSConSyncService() - { - TRACE_FUNC_ENTRY; - if ( iApaSessionConnected ) - { - iApaSession.Close(); - } - if ( iSyncSessionOpened ) - { - iSyncSession.Close(); - } - delete iRepository; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::ConstructL() -// ----------------------------------------------------------------------------- -// -void CSConSyncService::ConstructL() - { - iRepository = CRepository::NewL( KCRUidSecon ); - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::GetSolutionL() -// Populate SolutionInfo according to content type. -// ----------------------------------------------------------------------------- -// -void CSConSyncService::GetSolutionL( const TUint aSeconContentType, - TSConSolutionInfo& aSolutionInfo ) - { - TRACE_FUNC_ENTRY; - TInt appUid; - User::LeaveIfError( iRepository->Get( aSeconContentType, appUid )); - LOGGER_WRITE_2( "repository readed ok, uid: %d, hex:%x", appUid, appUid ); - - aSolutionInfo.iUid = appUid; - if ( aSolutionInfo.iUid == KDsAppUi ) - { - // read profile name - LOGGER_WRITE( "Search correct profile" ); - GetLastUsedProfileNameL( aSolutionInfo.iSolutionName, - aSolutionInfo.iTime, ProviderId( aSeconContentType ) ); - } - else if ( aSolutionInfo.iUid != 0 ) - { - LOGGER_WRITE( "Search correct application name" ); - TUid appUid = {aSolutionInfo.iUid}; - GetApplicationCaptionL( aSolutionInfo.iSolutionName, appUid ); - - // get solution timestamp - TBuf timeBuffer; - // Timestamp is stored always in next to Uid value on cenrep - TInt err = iRepository->Get( aSeconContentType+1, timeBuffer ); - - LOGGER_WRITE_1( "iRepository->Get(time) err: %d", err ); - if ( err == KErrNone ) - { - err = ParseTimestamp( aSolutionInfo.iTime, timeBuffer ); - LOGGER_WRITE_1( "ParseTimestamp err: %d", err ); - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::ProviderId() -// Return correct providerId according to content type. -// ----------------------------------------------------------------------------- -// -TSmlDataProviderId CSConSyncService::ProviderId( const TUint32 aSeconContentType ) const - { - TSmlDataProviderId providerId(KErrNotFound); - switch (aSeconContentType) - { - case KSeconCalendarUid: - providerId = KCalendarId; - break; - case KSeconContactsUid: - providerId = KContactsId; - break; - case KSeconSmsUid: - providerId = KSmsId; - break; - case KSeconBookmarkUid: - providerId = KBookmarkId; - break; - default: - LOGGER_WRITE_1( "Invalid content type: %d", aSeconContentType ); - } - return providerId; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::ParseTimestamp() -// Parses timestamp to TTime format -// ----------------------------------------------------------------------------- -// -TInt CSConSyncService::ParseTimestamp( TTime& aTime, const TDesC& aTimestamp ) const - { - // timestamp must be in following format: - // YYYYMMDDTHHMMSSZ - // MM=1..12, DD=1..number of days in month, HH=0..23, MM;SS=0..59 - // Example 20071224T162215Z = 24.12.2007, 16:22:15 UTC time - - if ( aTimestamp.Length() != KDateFormatLength ) - { - LOGGER_WRITE_1( "aTimestamp.Length(): %d", aTimestamp.Length() ); - return KErrArgument; - } - - TPtrC temp; - temp.Set(aTimestamp.Ptr()); - - TLex lex(temp.Mid(0,4)); - TInt year; - TInt month; - TInt day; - TInt hour; - TInt minute; - TInt second; - TInt err = lex.Val( year ); - if (err != KErrNone) return err; - - lex = temp.Mid(4,2); - err = lex.Val( month ); - if ( err != KErrNone) return err; - month--; - - lex = temp.Mid(6,2); - err = lex.Val( day ); - if (err != KErrNone) return err; - day--; - - lex = temp.Mid(9,2); - err = lex.Val( hour ); - if (err != KErrNone) return err; - - lex = temp.Mid(11,2); - err = lex.Val( minute ); - if (err != KErrNone) return err; - - lex = temp.Mid(13,2); - err = lex.Val( second ); - if (err != KErrNone) return err; - - TDateTime parsedTime; - err = parsedTime.Set(year, (TMonth)month, day, hour, minute, second, 0); - if (err != KErrNone) return err; - - aTime = parsedTime; - return err; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::GetApplicationCaptionL() -// Get application caption. -// ----------------------------------------------------------------------------- -// -void CSConSyncService::GetApplicationCaptionL( TDes& aCaption, const TUid aAppUid ) - { - TRACE_FUNC_ENTRY; - - TInt err(KErrNotReady); - // connect to RApaLsSession, if not yet ready - if ( !iApaSessionConnected ) - { - err = iApaSession.Connect(); - if ( err == KErrNone ) - { - iApaSessionConnected = ETrue; - } - } - - // Get application caption using RApaLsSession::GetAppInfo - TApaAppInfo appInfo; - if ( iApaSessionConnected ) - { - err = iApaSession.GetAppInfo( appInfo ,aAppUid ); - } - - LOGGER_WRITE_1( "GetAppInfo err: %d", err ); - if ( err == KErrNone ) - { - aCaption = appInfo.iCaption; - } - else - { - // Caption does not exist, search application name from installer - GetInstPackageCaptionL( aCaption, aAppUid ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::GetInstPackageCaptionL() -// Search UID from installed applications, return app caption -// ----------------------------------------------------------------------------- -// -void CSConSyncService::GetInstPackageCaptionL( TDes& aCaption, const TUid aPackageUid ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE("Name not found, search from installer"); - // Search application name from Installer. - Swi::RSisRegistrySession sisRegistry; - User::LeaveIfError( sisRegistry.Connect() ); - CleanupClosePushL( sisRegistry ); - - //Check if uid belongs to SIS package - if( sisRegistry.IsInstalledL( aPackageUid ) ) - { - LOGGER_WRITE("SIS package found"); - Swi::RSisRegistryEntry entry; - CleanupClosePushL(entry); - User::LeaveIfError( entry.Open( sisRegistry, aPackageUid ) ); - aCaption.Copy( *entry.PackageNameL() ); - CleanupStack::PopAndDestroy( &entry ); - } - else - { - // not sis app, might be java app. - LOGGER_WRITE("SIS package not found"); - CJavaRegistry* javaRegistry = CJavaRegistry::NewLC( ); - TBool entryExist = javaRegistry->RegistryEntryExistsL( aPackageUid ); - if ( entryExist ) - { - CJavaRegistryEntry* entry = javaRegistry->RegistryEntryL( aPackageUid ); - if ( entry ) - { - aCaption.Copy( entry->Name() ); - delete entry; - } - } - - CleanupStack::PopAndDestroy( javaRegistry ); - } - - CleanupStack::PopAndDestroy( &sisRegistry ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::GetLastUsedProfileNameL() -// Gets last used profile for selected provider -// ----------------------------------------------------------------------------- -// -void CSConSyncService::GetLastUsedProfileNameL( TDes& aProfileName, TTime& aTime, - const TSmlDataProviderId& aDataProviderId ) - { - TRACE_FUNC_ENTRY; - if ( !iSyncSessionOpened ) - { - iSyncSession.OpenL(); - iSyncSessionOpened = ETrue; - } - RArray profiles; - CleanupClosePushL( profiles ); - iSyncSession.ListProfilesL(profiles, ESmlDataSync ); - TSmlProfileId lastSyncProfile(KErrNotFound); - TTime lastSyncTime(0); - LOGGER_WRITE_1( "Profiles count: %d", profiles.Count() ); - for (TInt i=0; i lastSyncTime ) - { - LOGGER_WRITE_1( "New record, profile: %d",profiles[i]); - lastSyncTime = syncTime; - lastSyncProfile = profiles[i]; - } - } - CleanupStack::PopAndDestroy( &profiles ); - LOGGER_WRITE_1( "lastSyncProfile: %d", lastSyncProfile ); - if ( lastSyncProfile != KErrNotFound ) - { - aTime = lastSyncTime; - RSyncMLDataSyncProfile syncProfile; - syncProfile.OpenL( iSyncSession, lastSyncProfile, ESmlOpenRead ); - TPtrC displayName = syncProfile.DisplayName(); - aProfileName.Copy( displayName ); - syncProfile.Close(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::GetLastSyncTimeL() -// Gets last sync time for certain profile and provider. -// ----------------------------------------------------------------------------- -// -void CSConSyncService::GetLastSyncTimeL( TTime& aTime, const TSmlProfileId aSyncProfileId, - const TSmlDataProviderId aDataProviderId ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aSyncProfileId: %d", aSyncProfileId ); - LOGGER_WRITE_1( "aDataProviderId: 0x%08x", aDataProviderId ); - if ( !iSyncSessionOpened ) - { - LOGGER_WRITE("iSyncSession is not opened, Leave!"); - User::Leave( KErrNotReady ); - } - - RSyncMLDataSyncProfile syncProfile; - syncProfile.OpenL( iSyncSession, aSyncProfileId, ESmlOpenRead ); - CleanupClosePushL( syncProfile ); - LOGGER_WRITE( "syncProfile opened OK" ); - - TSmlTaskId providerTask; - GetProviderTaskL( providerTask, syncProfile, aDataProviderId ); - if ( providerTask != KErrNone ) - { - RSyncMLHistoryLog historyLog; - historyLog.OpenL( iSyncSession, aSyncProfileId ); - CleanupClosePushL( historyLog ); - historyLog.SortEntries(CSyncMLHistoryEntry::ESortByTime); - LOGGER_WRITE_1( "historyLog.Count: %d", historyLog.Count() ); - const CSyncMLHistoryJob* historyJob = LatestHistoryJob( historyLog, providerTask ); - if ( historyJob ) - { - aTime = historyJob->TimeStamp(); -#ifdef _DEBUG - TDateTime timeStamp = historyJob->TimeStamp().DateTime(); - _LIT(KDateFormat, " (%04d%02d%02dT%02d%02d%02d)"); - const TInt KDateFormatLength(20); - TBuf tempdate; - tempdate.Format(KDateFormat, timeStamp.Year(), timeStamp.Month()+1, timeStamp.Day()+1, - timeStamp.Hour(), timeStamp.Minute(), timeStamp.Second()); - LOGGER_WRITE_1("history found, TimeStamp: %S", &tempdate); -#endif - } - - CleanupStack::PopAndDestroy( &historyLog ); - } - CleanupStack::PopAndDestroy( &syncProfile ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSyncService::GetProviderTaskL() -// Gets provider task id from profile -// ----------------------------------------------------------------------------- -// -void CSConSyncService::GetProviderTaskL( TSmlTaskId& aProviderTask, - RSyncMLDataSyncProfile& aSyncProfile, - const TSmlDataProviderId aDataProviderId ) const - { - TRACE_FUNC_ENTRY; - aProviderTask = KErrNotFound; - - RArray tasks; - CleanupClosePushL( tasks ); - - aSyncProfile.ListTasksL( tasks ); - LOGGER_WRITE_1( "tasks.Count: %d", tasks.Count() ); - - for ( TInt i=0; i=0; i-- ) - { - const CSyncMLHistoryEntry& entry = aHistoryLog[i]; - const CSyncMLHistoryJob* jobEntry = CSyncMLHistoryJob::DynamicCast(&entry); - if ( jobEntry ) - { - if ( TaskExist(jobEntry, aTaskId) ) - { - LOGGER_WRITE( "history job found" ); - TRACE_FUNC_EXIT; - return jobEntry; - } - } - } - LOGGER_WRITE( "history job not found" ); - TRACE_FUNC_EXIT; - return NULL; - } - - // ----------------------------------------------------------------------------- - // CSConSyncService::TaskExist() - // Returns ETrue if task exists in HistoryJob. - // ----------------------------------------------------------------------------- - // -TBool CSConSyncService::TaskExist( const CSyncMLHistoryJob* aHistoryJob, TInt aTaskId ) const - { - TRACE_FUNC_ENTRY; - TInt taskCount = aHistoryJob->TaskCount(); - for ( TInt i=0; iTaskAt(i); - - if ( taskInfo.iTaskId == aTaskId ) - { - LOGGER_WRITE( "task exists." ); - TRACE_FUNC_EXIT; - return ETrue; - } - } - TRACE_FUNC_EXIT; - return EFalse; - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/sconversioninfo.cpp --- a/connectivitymodules/SeCon/services/csc/src/sconversioninfo.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,270 +0,0 @@ -/* -* Copyright (c) 2008-2010 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: CSconVersionInfo implementation. -* -*/ - - -#include "sconversioninfo.h" - -#include -#include -#include // read imsi -#include -#include -#include - -#include "caputils.h" -#include "debug.h" - -CSconVersionInfo::CSconVersionInfo() - { - iSymbianVersionError = KErrNotReady; - iS60VersionError = KErrNotReady; - } - -CSconVersionInfo::~CSconVersionInfo() - { - delete iManufacturer; - delete iModel; - delete iProduct; - delete iRevision; - delete iSWVersion; - delete iSerialNumber; - delete iSysVersionInfo; - delete iLangVersion; - delete iLangSWVersion; - delete iOPVersion; - delete iProductCode; - } - -CSconVersionInfo* CSconVersionInfo::NewL() - { - CSconVersionInfo* self = new (ELeave) CSconVersionInfo; - return self; - } - -// ----------------------------------------------------------------------------- -// CSconVersionInfo::FetchInfoL() -// fetch device info -// ----------------------------------------------------------------------------- -// -void CSconVersionInfo::FetchInfoL( RFs& aFs ) - { - TRACE_FUNC_ENTRY; - - iSymbianVersionError = SysVersionInfo::GetVersionInfo( iSymbianVersion, aFs ); - iS60VersionError = VersionInfo::GetVersion( iS60Version, aFs ); - - TBuf info; - TBuf productBuf; - TInt err(KErrNone); - delete iSWVersion; - iSWVersion = NULL; - delete iProduct; - iProduct = NULL; - // get SW version, SW version date and model - TRAP( err, CapUtil::GetSWVersionL( info, iDate, productBuf ) ); - iSWVersion = info.AllocL(); - iProduct = productBuf.AllocL(); - LOGGER_WRITE_1("CapUtil::GetSWVersionL err: %d", err); - - - SysVersionInfo::TProductVersion productVersion; - TInt sysVersionError = SysVersionInfo::GetVersionInfo( productVersion, aFs ); - LOGGER_WRITE_1( "SysVersionInfo::GetVersionInfo returned : %d", sysVersionError ); - - // Use TelServer to get IMEI and also other info if SysVersionInfo is not supported - RTelServer telServer; - User::LeaveIfError( telServer.Connect() ); - CleanupClosePushL( telServer ); - RTelServer::TPhoneInfo teleinfo; - User::LeaveIfError( telServer.GetPhoneInfo( 0, teleinfo ) ); - RMobilePhone phone; - User::LeaveIfError( phone.Open( telServer, teleinfo.iName ) ); - CleanupClosePushL( phone ); - User::LeaveIfError(phone.Initialise()); - TUint32 teleidentityCaps; - phone.GetIdentityCaps( teleidentityCaps ); - RMobilePhone::TMobilePhoneIdentityV1 telid; - TRequestStatus status; - phone.GetPhoneId( status, telid ); - User::WaitForRequest( status ); - if ( status == KErrNone ) - { - if ( sysVersionError ) - { - LOGGER_WRITE("Use info from TMobilePhoneIdentityV1"); - delete iModel; - iModel = NULL; - delete iRevision; - iRevision = NULL; - - // phone model sales name. For example "N01". - iModel = telid.iModel.AllocL(); - // product revision. For example "01" - iRevision = telid.iRevision.AllocL(); - } - delete iSerialNumber; - iSerialNumber = NULL; - // Phone serial number (IMEI or ESN), in character string format. - iSerialNumber = telid.iSerialNumber.AllocL(); - } - - CleanupStack::PopAndDestroy( &phone ); - CleanupStack::PopAndDestroy( &telServer ); - - if ( sysVersionError == KErrNone ) - { - // use information from SysVersionInfo instead of previous APIs. - LOGGER_WRITE("Using SysVersionInfo"); - - // phone model sales name. For example "N01". - delete iModel; - iModel = NULL; - iModel = productVersion.iModel.AllocL(); - // product revision. For example "01" - delete iRevision; - iRevision = NULL; - iRevision = productVersion.iRevision.AllocL(); - // manufacturer name. For example "Nokia" - delete iManufacturer; - iManufacturer = NULL; - iManufacturer = productVersion.iManufacturer.AllocL(); - // product code name. For example "RM-1" - delete iProduct; - iProduct = NULL; - iProduct = productVersion.iProduct.AllocL(); - } - else - { - CapUtil::GetManufacturer( info ); - delete iManufacturer; - iManufacturer = NULL; - iManufacturer = info.AllocL(); - } - - CapUtil::GetLanguage( iLanguage ); - - - err = SysVersionInfo::GetVersionInfo( SysVersionInfo::EFWVersion, info, aFs ); - delete iSysVersionInfo; - iSysVersionInfo = NULL; - if ( !err ) - { - iSysVersionInfo = info.AllocL(); - } - - err = SysUtil::GetLangVersion( info ); - delete iLangVersion; - iLangVersion = NULL; - if ( !err ) - { - iLangVersion = info.AllocL(); - } - - sysVersionError = SysUtil::GetLangSWVersion( info ); - delete iLangSWVersion; - iLangSWVersion = NULL; - if ( !sysVersionError ) - { - iLangSWVersion = info.AllocL(); - } - - sysVersionError = SysVersionInfo::GetVersionInfo( SysVersionInfo::EOPVersion, info, aFs ); - delete iOPVersion; - iOPVersion = NULL; - if ( !sysVersionError ) - { - iOPVersion = info.AllocL(); - } - - - sysVersionError = SysVersionInfo::GetVersionInfo( SysVersionInfo::EProductCode, info, aFs ); - delete iProductCode; - iProductCode = NULL; - if ( !sysVersionError ) - { - iProductCode = info.AllocL(); - } - - // read DesktopSync key value - CRepository* repository(NULL); - TRAP( iDesktopSyncError, repository = CRepository::NewL( KCRUidDSDCMOConfig )); - if ( !iDesktopSyncError ) - { - iDesktopSyncError = repository->Get( KNsmlDesktopSync, iDesktopSync ); - LOGGER_WRITE_1("iDesktopSyncError: %d", iDesktopSyncError ); - LOGGER_WRITE_1("iDesktopSync: %d", iDesktopSync ); - delete repository; - } - else - { - LOGGER_WRITE_1("Could not create CRepository, err: %d", iDesktopSyncError ); - } - - // screen size - HAL::Get(HAL::EDisplayXPixels, iScreenSize.iWidth); - HAL::Get(HAL::EDisplayYPixels, iScreenSize.iHeight); - - iInfoFetched = ETrue; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSconVersionInfo::IsReady() -// -// ----------------------------------------------------------------------------- -// -TBool CSconVersionInfo::IsReady() - { - return iInfoFetched; - } - -// ----------------------------------------------------------------------------- -// CSconVersionInfo::GetSymbianVersion() -// Get Symbian OS version -// ----------------------------------------------------------------------------- -// -TInt CSconVersionInfo::GetSymbianVersion( SysVersionInfo::TSymbianOSVersion& aSymbianVersion ) - { - if ( iSymbianVersionError ) - { - return iSymbianVersionError; - } - else - { - aSymbianVersion = iSymbianVersion; - return KErrNone; - } - } - -// ----------------------------------------------------------------------------- -// CSconVersionInfo::GetS60Version() -// Get S60 platform version -// ----------------------------------------------------------------------------- -// -TInt CSconVersionInfo::GetS60Version( VersionInfo::TPlatformVersion& aS60Version ) - { - if ( iS60VersionError ) - { - return iS60VersionError; - } - else - { - aS60Version = iS60Version; - return KErrNone; - } - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/csc/src/stringlist.cpp --- a/connectivitymodules/SeCon/services/csc/src/stringlist.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ -/* -* 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: CStringList implementation -* -*/ - - -// INCLUDE FILES - -#include "stringlist.h" -#include "capability.h" -#include "debug.h" - -const TInt KMaxStringlistSize( 1000 ); - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CStringList::NewL() -// Two-phase constructor. -// ----------------------------------------------------------------------------- -// -CStringList* CStringList::NewL() - { - CStringList* self = CStringList::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CStringList::NewLC() -// Two-phase constructor. The created instance is placed to cleanup stack -// ----------------------------------------------------------------------------- -// -CStringList* CStringList::NewLC() - { - CStringList* self = new ( ELeave ) CStringList(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CStringList::CStringList() -// Default constuctor -// ----------------------------------------------------------------------------- -// -CStringList::CStringList() - { - } - -// ----------------------------------------------------------------------------- -// CStringList::~CStringList() -// Destructor -// ----------------------------------------------------------------------------- -// -CStringList::~CStringList() - { - delete iLines; - iLines = NULL; - } - -// ----------------------------------------------------------------------------- -// CStringList::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CStringList::ConstructL() - { - const TInt KDefaultArrayGranularity = 10; - iLines = new (ELeave) CDesCArrayFlat(KDefaultArrayGranularity); - SetMark(0); - } - -// ----------------------------------------------------------------------------- -// CStringList::Count() const -// Returns the count of lines -// ----------------------------------------------------------------------------- -// -TInt CStringList::Count() const - { - return iLines->Count(); - } - -// ----------------------------------------------------------------------------- -// CStringList::Panic(TInt aPanic) const -// Creates a panic -// ----------------------------------------------------------------------------- -// -#ifdef _DEBUG -void CStringList::Panic(TInt aPanic) const -#else -void CStringList::Panic(TInt /*aPanic*/) const -#endif - { - TRACE_FUNC_ENTRY; -#ifdef _DEBUG - _LIT(KPanicCategory,"CStringList"); - - User::Panic(KPanicCategory, aPanic); -#endif - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CStringList::Reset() -// Resets iLines -// ----------------------------------------------------------------------------- -// -void CStringList::Reset() - { - iLines->Reset(); - } - -// ----------------------------------------------------------------------------- -// CStringList::WriteL(const TDesC& aText) -// Writes a string -// ----------------------------------------------------------------------------- -// -void CStringList::WriteL(const TDesC& aText) - { - iLines->AppendL(aText); - } - -// ----------------------------------------------------------------------------- -// CStringList::ReadPtr(TInt aIndex) -// Returns pointer to the string -// ----------------------------------------------------------------------------- -// -TPtrC16 CStringList::ReadPtr(TInt aIndex) - { - if (aIndex<0 || aIndex>=Count()) - { - Panic(KErrArgument); - } - - return iLines->MdcaPoint(aIndex); - } - -// ----------------------------------------------------------------------------- -// CStringList::CopyL(CStringList* aSource, TInt aStart, TInt aStop) -// Copies a string / strings -// ----------------------------------------------------------------------------- -// -void CStringList::CopyL(CStringList* aSource, TInt aStart, TInt aStop) - { - if (aStart<0 || aStop>=aSource->Count() || aStart>aStop) - { - Panic(KErrArgument); - } - - for (TInt i=aStart; i<=aStop; i++) - { - WriteL(aSource->ReadPtr(i)); - } - } - -// ----------------------------------------------------------------------------- -// CStringList::StrCopy(TDes& aTarget, const TDesC& aSource) const -// Copies the string -// ----------------------------------------------------------------------------- -// -TBool CStringList::StrCopy(TDes& aTarget, const TDesC& aSource) const - { - TInt len=aTarget.MaxLength(); - if(len buffer; - TInt count(0); - for (;;) - { - count++; - if ( count > KMaxStringlistSize ) - { - break; - } - - buffer = KNullDesC; - - // - // Read seems to read chars until newline is reached or - // the descriptor is full. In case descriptor becomes full, - // err is KErrTooBig and next read starts from the next line. - // - TInt err = textFile.Read( buffer ); - if ( err == KErrEof ) - { - break; - } - - if ( err != KErrNone ) - { - User::Leave( err ); - } - - iLines->AppendL( buffer ); - } - - CleanupStack::PopAndDestroy( &file ); // file - } - - -// ----------------------------------------------------------------------------- -// CStringList::Mark() const -// Returns the mark -// ----------------------------------------------------------------------------- -// -TInt CStringList::Mark() const - { - return iMark; - } - -// ----------------------------------------------------------------------------- -// CStringList::SetMark(TInt aMark) -// Sets mark -// ----------------------------------------------------------------------------- -// -void CStringList::SetMark(TInt aMark) - { - iMark=aMark; - } - -// End of files diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/bld/bld.inf --- a/connectivitymodules/SeCon/services/ftp/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2004-2008 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: File Transfer Controller build file. -* -*/ - -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../loc/sconftp.loc MW_LAYER_LOC_EXPORT_PATH(sconftp.loc) - -PRJ_MMPFILES -../bld/sconftp.mmp diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/services/ftp/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?CreateCSConFTPL@@YAPAVCSConFTP@@XZ @ 1 NONAME ; class CSConFTP * CreateCSConFTPL(void) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/bld/def/eabiuu.def --- a/connectivitymodules/SeCon/services/ftp/bld/def/eabiuu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _Z15CreateCSConFTPLv @ 1 NONAME - _ZTI8CSConFTP @ 2 NONAME ; ## - _ZTV8CSConFTP @ 3 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/bld/sconftp.mmp --- a/connectivitymodules/SeCon/services/ftp/bld/sconftp.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* 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: File Transfer Controller mmp file -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_GENERAL_DLL - -TARGET sconftp.dll -TARGETTYPE DLL - -UID 0x10009D8D 0x101F968A - -#if defined(ARMCC) -DEFFILE ./def/eabiu -#elif defined(WINSCW) -DEFFILE ./def/bwinscw -#elif defined(WINS) -DEFFILE ./def/bwins -#elif defined(ARM) -DEFFILE ./def/bmarm -#endif - -SOURCEPATH ../src -SOURCE sconfshandler.cpp -SOURCE sconftp.cpp -SOURCE sconinboxhandler.cpp - -USERINCLUDE ../../../inc -USERINCLUDE ../inc -USERINCLUDE ../../../cntparser/inc - - -APP_LAYER_SYSTEMINCLUDE - - -START RESOURCE ../src/sconftp.rss -HEADER -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END - - -LIBRARY efsrv.lib // For File server -LIBRARY euser.lib // Base library -LIBRARY IrObex.lib // For Object exchange -LIBRARY obexutils.lib -LIBRARY msgs.lib // For Inbox entry -LIBRARY charconv.lib // For Unicode conversion -LIBRARY bafl.lib // Basic Application Framework Library -LIBRARY commonengine.lib // For resource reader -LIBRARY platformenv.lib // For pathinfo -LIBRARY CntParserServer.lib // for contacts -LIBRARY directorylocalizer.lib // For localizing directories -LIBRARY sysutil.lib -LIBRARY centralrepository.lib -DEBUGLIBRARY flogger.lib // For debug logging diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/inc/sconconstants.h --- a/connectivitymodules/SeCon/services/ftp/inc/sconconstants.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* 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: Common constants for PC Connectivity -* -*/ - - -#ifndef __SCONCONSTANTS_H -#define __SCONCONSTANTS_H - -enum TSConProfile - { - EStandard = 0, - EProprietary, - EOther - }; - -enum TSConUsedMedia - { - ESConNoMedia = 0, - ESConIRMedia, - ESConBTMedia, - ESConUSBMedia - }; - -#endif // __SCONCONSTANTS_H - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/inc/sconconsts.h --- a/connectivitymodules/SeCon/services/ftp/inc/sconconsts.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/* -* 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: Constant definitions for File Transfer Controller -* -*/ - - -#ifndef _SCONCONSTS_H_ -#define _SCONCONSTS_H_ - -_LIT( K_C_ROOT, "C:\\" ); - -// Following folders on MMC are exluded from folder listing -_LIT( KSConResource, "resource\\" ); // resource folder on MMC -_LIT( KSConSys, "sys\\" ); // sys folder on MMC -_LIT( KSConPrivate, "private\\" ); // private folder on MMC -_LIT( KSConSystem, "system\\" ); // system folder on MMC - -// Suite needs access to SuiteConf.xml file -_LIT( KSConAllowedPath, "Z:\\Private\\101F7C87" ); - -// For folder listing -_LIT8( KSConXmlDocBegin, - "\n\n ]>\n\n" ); -_LIT8( KSConXmlParentFolder, " \n" ); -_LIT8( KSConXmlFileNameBegin," \n" ); -_LIT8( KSConXmlFolderListEnd,"" ); -_LIT8( KSConDriveCName,"C:" ); -_LIT8( KSConDriveZName,"Z:" ); -_LIT8( KSConFolderListType, "x-obex/folder-listing" ); - -const TInt KSConMemTypeMaxLength = 5; -_LIT8( KSConMemoryTypeDev, "DEV" ); // prefix for device memory -_LIT8( KSConMemoryTypeMmc, "MMC" ); // prefix for MMC memory - -// Date field format -_LIT( KSConXmlDate, "%F%Y%M%DT%H%T%SZ" ); -const TInt KSConDateMaxLength = 16; - -//File extensions -_LIT( KSConEpocWordExt, ".ewd" ); -_LIT( KSConEpocSheetExt, ".sht" ); - -_LIT8( KFind1,"&" ); -_LIT8( KReplace1, "&" ); -_LIT8( KReplace2, "<" ); -_LIT8( KReplace3, ">" ); -_LIT8( KReplace4, """ ); -_LIT8( KReplace5, "'" ); - -_LIT( KSConResourceName, "z:\\Resource\\sconftp.rsc" ); - -const TInt KSConBufSize = 1024; -const TInt KSConSetPathDontCreate = 0x01; // Flags used to indicate SetPath commands -const TInt KSConSetPathRoot = 0x02; // Flags used to indicate SetPath commands -const TInt KSConSetPathForward = 0x02; // Flags used to indicate SetPath commands -const TInt KSConSetPathBack = 0x03; // Flags used to indicate SetPath commands -const TInt KSConXmlBufSize = 30; -const TInt KSConDriveNameLength = 2; -const TInt KSConMaxMimeTypeLength = 25; -const TInt KSConBufferSize = 262144; // 256KB - -const TUid KSConSheetUid = { 0x10003a7d }; // Sheet document uid -const TUid KSConWordUid = { 0x10003a64 }; // Word document uid - -const TInt KDriveLength = 3; - -#endif - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/inc/sconfshandler.h --- a/connectivitymodules/SeCon/services/ftp/inc/sconfshandler.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -/* -* 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: CSConFSHandler header file -* -*/ - - -#ifndef _SCONFSHANDLER_H_ -#define _SCONFSHANDLER_H_ - -// INCLUDES - -#include -#include - - -// FORWARD DECLARATIONS -class CDirectoryLocalizer; - - -//============================================================ -// Class CSConFsHandler declaration -//============================================================ -NONSHARABLE_CLASS( CSConFsHandler ) : public CBase - { - public: - static CSConFsHandler* NewL( RFs& aFs ); - ~CSConFsHandler(); - /** - * Parses folder and file listing from specified directory - * @param aBuffer Buffer to store the folder list - * @param aPathName Folder path - * @param aMemNumber memory number (1= DEV or MMC, 2= DEV2 or MMC2..) - * @return KErrNone if no errors, else system wide error codes. - */ - TInt ParseFolderListL( CBufFlat* aBuffer, const TPtrC aPathName, - const TInt aMemNumber ); - /** - * Gets a file object - * @param aBuffer CObexFileObject object where the file will be stored - * @param aPathName The path of the file - * @param aFileName The name of the file - * @return KErrNone if no errors, else system wide error codes. - */ - TInt GetFileObjectL( CObexFileObject*& aBuffer, const TPtrC aPathName, - const TPtrC aFileName ); - /** - * Stores a file object - * @param aFullPathName The full path and name of the file - * @param aTime The time stamp of the file - * @param aTempFileName Data temp file - * @return KErrNone if no errors, else system wide error codes. - */ - TInt SaveFileObjectL( const TPtrC aFullPathName, const TTime aTime, - const TPtrC aTempFileName ); - /** - * Validates the file name - * @param aName File name to be validated - * @return KErrNone if no errors, else system wide error codes. - */ - TInt ValidateFileName( const TPtrC aName ); - /** - * Creates a folder - * @param aFolderPath The name and the path of the folder - * @return KErrNone if no errors, else system wide error codes. - */ - TInt CreateFolderL( const TPtrC aFolderPath ); - /** - * Removes a folder or a file - * @param aFullPath The path and name of the object - * @return KErrNone if no errors, else system wide error codes. - */ - TInt DeleteObjectL( const TPtrC aFullPath ); - - /** - * Copy or Move file/folder - * @param aSource - * @param aTarget - * @param aUseCopyCommand if ETrue does copy, else does move. - * @return none. - */ - void DoCopyOrMoveFileL( const TDesC& aSource, const TDesC& aTarget, - const TBool aUseCopyCommand ); - - /** - * Check if folder can be showed - * @param aFullPath The path of the object - * @return ETrue if folder exists and can be showed. - */ - TBool IsFolderVisible( const TDesC& aFullPath ); - - private: - CSConFsHandler( RFs& aFs ); - void ConstructL(); - /** - * Updates the name of the data folder from a localized string - * @param none - * @return none - */ - void GetDataPathNameL(); - - /** - * Check if folder is read only - * @param aFullPath The path of the object - * @return ETrue if folder is read only, or if folder does not exist - */ - TBool IsFolderReadOnly( const TDesC& aFullPath ) const; - /** - * Check if folder can be deleted - * @param aFullPath The path of the object - * @return ETrue if folder can be deleted - */ - TBool IsFolderDeletable( const TDesC& aFullPath ) const; - /** - * Get parent folder - * @param aFullPath The folder full path with or without backlash ending - * @param aParent The founded parent folder with backlash - * @return KErrNone if parent folder founded - */ - TInt GetParentFolder( const TDesC& aFullPath, TDes& aParent); - - /** - * Get folder (and subfolders) size - * @param aFullPath The folder full path with backlash ending - * @return folder total size - */ - TInt64 GetFolderSizeL( const TDesC& aFullPath ); - - /** - * Replaces all special characters to xml compliant ones - * @param aDes characters to be checked and replaced - */ - void ReplaceSpecialChars( TDes8& aDes ); - - /** - * Check if folder is exluded and cannot be shown to user - * @param aFullPath The full path with backlash ending - * @return ETrue if folder is exluded - */ - TBool IsExludedPath( const TDesC& aFullPath ) const; - - /** - * Prints folder information to obex-folder-list - */ - void PrintFolderL( CBufFlat* aBuffer, TInt& aOffset, const TDesC& aParentPath, - const TDesC8& aMemType, const TEntry& aFolderEntry ); - /** - * Prints file information to obex-folder-list - */ - void PrintFileL( CBufFlat* aBuffer, TInt& aOffset, const TEntry& aFileEntry ); - - private: - RFs& iFs; // not own - CDirectoryLocalizer* iLocalizer; - TBuf8 iDataPathName; // Localized data path - }; - -#endif - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/inc/sconftp.h --- a/connectivitymodules/SeCon/services/ftp/inc/sconftp.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,263 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: CSConFTP header file -* -*/ - - -#ifndef _SCONFTP_H_ -#define _SCONFTP_H_ - -// INCLUDES - -#include -#include - -#include "sconconstants.h" - -class CSConInboxHandler; -class CSConFsHandler; - -//============================================================ -// Class CSConFTP declaration -//============================================================ -class CSConFTP : public CBase - { - public: - // construct / destruct - static CSConFTP* NewL(); - ~CSConFTP(); - - // methods - /** - * Gets object that contains folder listing from inbox or file system - * @param aObject CObexBufObject object - * @return KErrNone if no errors, else system wide error codes. - */ - virtual TInt GetFolderObjectL( CObexBufObject*& aObject ); - - /** - * Gets object that contains a file from file system - * @param aFileObject CObexFileObject object - * @return KErrNone if no errors, else system wide error codes. - */ - virtual TInt GetFileObjectL( CObexFileObject*& aFileObject ); - - /** - * Initializes the receiving from the client. - * @param aObject CObexBufObject object - * @param aObject CBufFlat object - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt PutFileObjectInitL( CObexBufObject*& aObject, - CBufFlat*& aBuffer ); - - /** - * Stores the relayed file object to inbox or file system. - * @param aObject CObexBufObject object - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt PutFileObjectFinalizeL( CObexBufObject*& aObject ); - - /** - * Changes the current path. The path can point to inbox or file system - * @param aPathName The name of the new path - * @param aFlags Flag value of OBEX Setpath operation - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt SetPathL( const TPtrC aPathName, const TUint8 aFlags ); - - /** - * Creates a new folder to file system - * @param aFolderName The name of the folder to be created - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt CreateFolderL( const TPtrC aFolderName ); - - /** - * Deletes file/folder from inbox or file system - * @param aObjectName The name of the object (file or folder) to be created - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt DeleteObjectL( const TPtrC aObjectName ); - - /** - * Gets the current path - * @param aPath The name of the current path - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt GetPath( TDes& aPath ); - - /** - * Abort file transfer - * @param aObject The OBEX stack object which will reseted - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt AbortFileTransfer( CObexBufObject*& aObject ); - - /** - * Set used transfer profile - * @param aProfile The profile id - * @return none - */ - virtual void SetProfile( TSConProfile aProfile ); - - /** - * Set backup status - * @param aValue Is backup started or not - * @return none - */ - virtual void SetBackupStarted( TBool aValue ); - - /** - * Set the used media information - * @param aMedia The media which is currently used - * @return none - */ - virtual void SetUsedMedia( TSConUsedMedia aMedia ); - - /** - * Check is current drive space below critical level - * @param aFilesize, additional free space needed - * @return ETrue if below critical - */ - virtual TBool IsCurrentDiskSpaceBelowCritical( TUint32 aFilesize = 0 ); - - /** - * Read received ConML protocol packet - * @param aBuffer The buffer for the data - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt ReadWBXMLDataL( CBufFlat*& aBuffer ); - - /** - * Delete OBEX stack's temp file - * @param none - * @return KErrNone if no error, else system wide error codes. - */ - virtual void DeleteTempFile(); - - /** - * Move or rename file/folder - * @param aSource - * @param aTarget - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt MoveFile( const TDesC& aSource, const TDesC& aTarget ); - - /** - * Copy file/folder - * @param aSource - * @param aTarget - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt CopyFile( const TDesC& aSource, const TDesC& aTarget ); - - /** - * Set read-only attribute to file or folder - * @param aTarget file or folder fullname - * @param aReadOnly set read-only permission to ETrue or EFalse - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt SetReadOnly( const TDesC& aTarget, const TBool aReadOnly ); - - /** - * Set hidden attribute to file or folder - * @param aTarget file or folder fullname - * @param aHidden set read-only permission to ETrue or EFalse - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt SetHidden( const TDesC& aTarget, const TBool aHidden ); - - private: - // methods - /** - * Get absolute path from given relative foldername - * @param aFolderName relative or absolute filename - * @param aFullPath return absolete path of file/folder - * @return KErrNone if no error, else system wide error codes. - */ - virtual TInt GetAbsolutePath( const TDesC& aFolderName, TDes& aFullPath ); - - /** - * Checks if user can see/access to the drive - * @param aDriveNumber drive to be tested - * @return ETrue if user can see drive. - */ - TBool IsDriveVisible( const TInt aDriveNumber ); - - /** - * Checks if user access to the current volume - * @param none - * @return ETrue if volume is ok. - */ - TBool IsCurrentVolumeOK(); - - /** - * Go to (sub)directory - * @param aPath (sub)directory - * @param aFlags used to check if new folder(s) should be created - * @return KErrNone if no error, else system wide error codes. - */ - TInt SetPathForwardL( const TPtrC aPath, const TUint8 aFlags ); - - /** - * Go to parent directory - * @param aPath subdirectory under parent (additional) - * @return KErrNone if no error, else system wide error codes. - */ - TInt SetPathBackwardL( const TPtrC aPath ); - - /** - * Get volume name (Memory card name) - * @param aDriveNumber drive where to read - * @param aVolumeName if name found return volume name, else localised string - * @return KErrNone if no error, else system wide error codes. - */ - TInt GetVolumeNameL(const TInt aDriveNumber, TDes8& aVolumeName); - - /** - * Updates drive information (iCurrentDrive and iCurrentDriveTypeNumber) - * @param none - * @return none, leaves if error occurs. - */ - void UpdateDriveTypeInfoL(); - - void CreateObexBufObjectL( CObexBufObject*& aObject, CBufFlat*& aBuffer ); - - CSConFTP(); - virtual void ConstructL(); - - private: - CSConInboxHandler* iSConInboxHandler; // Object saving-fetching - CBufFlat* iBuffer; // Temporary buffer - CSConFsHandler* iSConFsHandler; // Object saving-fetching - TBuf iPathName; // Path - TFileName iTempFileName; // Temp file name - RFs iFs; - TSConProfile iProfile; // Used profile - TBool iBackupStarted; - TSConUsedMedia iMedia; - TInt iCurrentDrive; - TInt iCurrentDriveTypeNumber; // DEV=1, DEV2=2, MMC=1, MMC2=2. - TInt iCriticalDiskLevel; - }; - - IMPORT_C CSConFTP* CreateCSConFTPL(); - typedef CSConFTP* (*TSConCreateCSConFTPFunc) (); - - -#endif // SCONFTP - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/inc/sconinboxhandler.h --- a/connectivitymodules/SeCon/services/ftp/inc/sconinboxhandler.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* 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: CSConInboxHandler header file -* -*/ - - -#ifndef _SCONINBOXHANDLER_H_ -#define _SCONINBOXHANDLER_H_ - -// INCLUDES - -#include -#include -#include - - -//============================================================ -// Class CSConInboxHandler declaration -//============================================================ -NONSHARABLE_CLASS( CSConInboxHandler ) : public CBase, MMsvSessionObserver - { - public: - static CSConInboxHandler* NewL(); - virtual ~CSConInboxHandler(); - - /** - * Creates an attachment to device's Inbox - * @param aObject CObexBufObject object - * @return KErrNone if no errors, else system wide error codes. - */ - TInt CreateInboxAttachmentL( CObexBufObject*& aObject, - CBufFlat*& aBuffer ); - /** - * Saves the object to the Inbox - * @param aObject CObexBufObject object - * @return KErrNone if no errors, else system wide error codes. - */ - TInt SaveObjToInboxL( CObexBufObject*& aObject ); - /** - * Aborts the storing operation - * @param aObject CObexBufObject object - * @return KErrNone if no errors, else system wide error codes. - */ - TInt AbortInboxOperation( CObexBufObject*& aObject ); - /** - * Implementation of MMsvSessionObserver::HandleSessionEventL - * @param aEvent Indicates the event type. - * @param aArg1 Event type-specific argument value - * @param aArg2 Event type-specific argument value - * @param aArg3 Event type-specific argument value - * @return none - */ - void HandleSessionEventL( TMsvSessionEvent aEvent, - TAny* aArg1, - TAny* aArg2, - TAny* aArg3 ); - - private: - CSConInboxHandler(); - - TInt GetMessageCenterDriveL(); - - private: - TInt iDrive; - TMsvId iMsvIdParent; - TMsvId iMsvIdAttach; - RFile iFile; -}; - -#endif - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/loc/sconftp.loc --- a/connectivitymodules/SeCon/services/ftp/loc/sconftp.loc Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Localization file for csconftp -* -*/ - - -//d:Default name for device -//l:list_double_pane_t2_cp2 -#define qtn_secon_device "Phone" - -//d:Default name for memory card -//l:list_double_pane_t2_cp2 -#define qtn_secon_mmc "Memory card" - -//d:Default name for mass storage -//l:None -//r:3.2 -#define qtn_secon_mass_storage "Mass memory" - -//d:Default name for data folder -//l:None -//r:3.2 -#define qtn_secon_data_folder "Personal files" - -// d: Value in a PC Suite dialog showing program details -// l: None -// r: 3.2 -#define qtn_secon_unknown_supplier "Unknown" diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/src/sconfshandler.cpp --- a/connectivitymodules/SeCon/services/ftp/src/sconfshandler.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1497 +0,0 @@ -/* -* 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: File Transfer Controller implementation -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include // to get backup/restore mode -#include -#include -#include -#include - -#include "sconfshandler.h" -#include "sconconsts.h" -#include "irmcconsts.h" -#include "cntparserclient.h" -#include "cntparserinfolog.h" -#include "debug.h" - -_LIT(KPhoneBookIrMCL2Request,"telecom/pb.vcf"); -_LIT(KInfoLogIrMCL2Request,"telecom/pb/info.log"); -_LIT(KInfoLogIrMCL2File,"IrMC\\info.log"); -_LIT(KInfoLogPathAndFileName,"c:\\IrMC\\info.log"); -_LIT(KPbPathAndFileName,"c:\\IrMC\\pb.vcf"); - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSConFsHandler::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConFsHandler* CSConFsHandler::NewL( RFs& aFs ) - { - TRACE_FUNC_ENTRY; - CSConFsHandler* self = new (ELeave) CSConFsHandler( aFs ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::~CSConFsHandler() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConFsHandler::~CSConFsHandler() - { - TRACE_FUNC_ENTRY; - delete iLocalizer; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::ParseFolderListL( CBufFlat* aBuffer, const TPtrC aPathName -// , const TInt aMemNumber ) -// Parses folder and file listing from specified directory -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::ParseFolderListL( CBufFlat* aBuffer, const TPtrC aPathName, - const TInt aMemNumber ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "CSConFsHandler::ParseFolderListL aPathName = %S", &aPathName ); - if( aPathName.Length() == 0 ) - { - LOGGER_WRITE( "CSConFsHandler::ParseFolderListL( CBufFlat* aBuffer, const TPtrC aPathName ) : No path" ); - return KErrArgument; - } - - if( aPathName.Length() > KDriveLength && !BaflUtils::FolderExists( iFs, aPathName ) ) - { - LOGGER_WRITE( "CSConFsHandler::ParseFolderListL( CBufFlat* aBuffer, const TPtrC aPathName ) : Current folder doesn't exist any more" ); - return KErrNotFound; - } - - TInt driveNumber; - TInt err = iFs.CharToDrive(aPathName[0], driveNumber); - if( err ) - { - LOGGER_WRITE_1( "CSConFsHandler::ParseFolderListL : CharToDrive err: %d", err ); - return KErrNotFound; - } - TUint driveStatus; - err = DriveInfo::GetDriveStatus( iFs, driveNumber, driveStatus); - if( err ) - { - LOGGER_WRITE_1( "CSConFsHandler::ParseFolderListL : DriveInfo::GetDriveStatus err: %d", err ); - return KErrNotFound; - } - - // check mem type (DEV, DEV2, MMC, MMC2..) - TBuf8 memType; - if( driveStatus & DriveInfo::EDriveInternal ) - { - memType.Copy( KSConMemoryTypeDev ); - if( aMemNumber > 1 ) - { - memType.AppendNum(aMemNumber); - } - } - else if( driveStatus & DriveInfo::EDriveRemovable ) - { - memType.Copy( KSConMemoryTypeMmc ); - if( aMemNumber > 1 ) - { - memType.AppendNum(aMemNumber); - } - } - - CDir *entryList = 0; - CDir *dirList = 0; - - // show only normal files and folders - TUint entryAttMask = KEntryAttNormal; - - - // get folders and files - err = iFs.GetDir( aPathName, entryAttMask, ESortByName, - entryList, dirList ); - - if ( err ) - { - LOGGER_WRITE_1( "ParseFolderListL GetDir returned: %d", err ); - return err; - } - - CleanupStack::PushL( entryList ); - CleanupStack::PushL( dirList ); - - TInt offset = 0; - - LOGGER_WRITE( "CSConFsHandler::ParseFolderList XML creation" ); - //Create folder XML - aBuffer->ResizeL( KSConXmlDocBegin().Length() ); - aBuffer->Write( offset, KSConXmlDocBegin ); - offset += KSConXmlDocBegin().Length(); - - aBuffer->ExpandL( offset, KSConXmlParentFolder().Length() ); - aBuffer->Write( offset, KSConXmlParentFolder ); - offset += KSConXmlParentFolder().Length(); - - HBufC* fullNameBuf = HBufC::NewLC( KMaxPath ); - TPtr fullName = fullNameBuf->Des(); - - // Print folders to folder listing object - for( TInt i = 0; i < dirList->Count(); i++ ) - { - const TEntry entry = ( *dirList )[i]; - - fullName.Copy( aPathName ); - fullName.Append( entry.iName ); - fullName.Append( KPathDelimiter ); - - // show path if not exluded - TBool proceed = !IsExludedPath( fullName ); - if ( proceed ) - { - PrintFolderL( aBuffer, offset, fullName, memType, entry ); - } - } - CleanupStack::PopAndDestroy( fullNameBuf ); - CleanupStack::PopAndDestroy( dirList ); - - LOGGER_WRITE("Print files"); - // Print files to folder listing object - for( TInt j = 0; j < entryList->Count(); j++ ) - { - const TEntry entry = ( *entryList )[j]; - PrintFileL( aBuffer, offset, entry ); - } - LOGGER_WRITE("files printed"); - //Write the end of XML - aBuffer->ExpandL( offset, KSConXmlFolderListEnd().Length() ); - aBuffer->Write( offset, KSConXmlFolderListEnd ); - aBuffer->Compress(); - - CleanupStack::PopAndDestroy( entryList ); - - LOGGER_WRITE_1( "CSConFsHandler::ParseFolderListL() : returned %d", err ); - return err; - } - - -// ----------------------------------------------------------------------------- -// CSConFsHandler::PrintFolderL -// Prints folder entry to folder listing object -// ----------------------------------------------------------------------------- -// -void CSConFsHandler::PrintFolderL( CBufFlat* aBuffer, TInt& aOffset, const TDesC& aFullPath, - const TDesC8& aMemType, const TEntry& aFolderEntry ) - { - TRACE_FUNC_ENTRY; - // initialize Localizer - iLocalizer->SetFullPath( aFullPath ); - - TBool dataPath( EFalse ); - if ( aFullPath.CompareF( PathInfo::PhoneMemoryRootPath() ) == 0 ) // datapath - { - // printable folder is C:\Data (Localized) - dataPath = ETrue; - } - - // print foldername - aBuffer->ExpandL( aOffset, KSConXmlFolderNameBegin().Length() ); - aBuffer->Write( aOffset, KSConXmlFolderNameBegin ); - aOffset += KSConXmlFolderNameBegin().Length(); - - HBufC8* folderBuf = HBufC8::NewLC( KMaxFileName ); - TPtr8 folderName = folderBuf->Des(); - User::LeaveIfError( - CnvUtfConverter::ConvertFromUnicodeToUtf8( folderName, aFolderEntry.iName ) ); - - //Replace special characters - ReplaceSpecialChars( folderName ); - - aBuffer->ExpandL( aOffset, folderName.Length() ); - aBuffer->Write( aOffset, folderName ); - aOffset += folderName.Length(); - - CleanupStack::PopAndDestroy( folderBuf ); - - // print modified time - TBuf modifiedTime; - TTime time = aFolderEntry.iModified; - time.FormatL( modifiedTime, KSConXmlDate ); - - TBuf8 modifiedTime8; - User::LeaveIfError( - CnvUtfConverter::ConvertFromUnicodeToUtf8( modifiedTime8, modifiedTime ) ); - - aBuffer->ExpandL( aOffset, KSConXmlModified().Length() ); - aBuffer->Write( aOffset, KSConXmlModified ); - aOffset += KSConXmlModified().Length(); - - aBuffer->ExpandL( aOffset, modifiedTime8.Length() ); - aBuffer->Write( aOffset, modifiedTime8 ); - aOffset += modifiedTime8.Length(); - - // print attributes - aBuffer->ExpandL( aOffset, KSConXmlUserAttributes().Length() ); - aBuffer->Write( aOffset, KSConXmlUserAttributes ); - aOffset += KSConXmlUserAttributes().Length(); - - // Add user-perm info - if( aFolderEntry.IsReadOnly() ) - { - aBuffer->ExpandL( aOffset, - KSConXmlUserEntryReadOnly().Length() ); - aBuffer->Write( aOffset, KSConXmlUserEntryReadOnly ); - aOffset += KSConXmlUserEntryReadOnly().Length(); - } - else if( iLocalizer->IsLocalized() || dataPath ) // delete disabled - { - aBuffer->ExpandL( aOffset, - KSConXmlUserEntryDrive().Length() ); - aBuffer->Write( aOffset, KSConXmlUserEntryDrive ); - aOffset += KSConXmlUserEntryDrive().Length(); - } - else - { - aBuffer->ExpandL( aOffset, - KSConXmlUserEntryArchive().Length() ); - aBuffer->Write( aOffset, KSConXmlUserEntryArchive ); - aOffset += KSConXmlUserEntryArchive().Length(); - } - - - // print memory type - aBuffer->ExpandL( aOffset, KSConXmlMemoryType().Length() ); - aBuffer->Write( aOffset, KSConXmlMemoryType ); - aOffset += KSConXmlMemoryType().Length(); - - aBuffer->ExpandL( aOffset, aMemType.Length() ); - aBuffer->Write( aOffset, aMemType ); - aOffset += aMemType.Length(); - - // print label if exists - if( iLocalizer->IsLocalized() ) - { - //get localized folder name - HBufC8* labelBuf = - CnvUtfConverter::ConvertFromUnicodeToUtf8L( iLocalizer->LocalizedName() ); - CleanupStack::PushL( labelBuf ); - TPtrC8 label = labelBuf->Des(); - //memory label - aBuffer->ExpandL( aOffset, - KSConXmlMemoryLabel().Length() ); - aBuffer->Write( aOffset, KSConXmlMemoryLabel ); - aOffset += KSConXmlMemoryLabel().Length(); - - aBuffer->ExpandL( aOffset, label.Length() ); - aBuffer->Write( aOffset, label ); - aOffset += label.Length(); - - CleanupStack::PopAndDestroy( labelBuf ); - } - if ( dataPath ) // datapath - { - //memory label - aBuffer->ExpandL( aOffset, - KSConXmlMemoryLabel().Length() ); - aBuffer->Write( aOffset, KSConXmlMemoryLabel ); - aOffset += KSConXmlMemoryLabel().Length(); - - aBuffer->ExpandL( aOffset, iDataPathName.Length() ); - aBuffer->Write( aOffset, iDataPathName ); - aOffset += iDataPathName.Length(); - } - // print ending - aBuffer->ExpandL( aOffset, KSConXmlFileEnd().Length() ); - aBuffer->Write( aOffset, KSConXmlFileEnd ); - aOffset += KSConXmlFileEnd().Length(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::PrintFileL -// Prints file entry to folder listing object -// ----------------------------------------------------------------------------- -// -void CSConFsHandler::PrintFileL( CBufFlat* aBuffer, TInt& aOffset, const TEntry& aFileEntry ) - { - LOGGER_WRITE_1("CSConFsHandler::PrintFileL, filename: %S", &aFileEntry.iName ); - HBufC8* fileBuf = HBufC8::NewLC( KMaxFileName ); - TPtr8 fileName = fileBuf->Des(); - - User::LeaveIfError( - CnvUtfConverter::ConvertFromUnicodeToUtf8( fileName, aFileEntry.iName ) ); - - //Replace special characters - ReplaceSpecialChars( fileName ); - - // print filename - aBuffer->ExpandL( aOffset, KSConXmlFileNameBegin().Length() ); - aBuffer->Write( aOffset, KSConXmlFileNameBegin ); - aOffset += KSConXmlFileNameBegin().Length(); - - aBuffer->ExpandL( aOffset, fileName.Length() ); - aBuffer->Write( aOffset, fileName ); - aOffset += fileName.Length(); - - // print size - aBuffer->ExpandL( aOffset, KSConXmlSize().Length() ); - aBuffer->Write( aOffset, KSConXmlSize ); - aOffset += KSConXmlSize().Length(); - - fileName.Delete( 0, fileName.Length() ); // re-use fileName descriptor - fileName.AppendNum( aFileEntry.iSize ); - aBuffer->ExpandL( aOffset, fileName.Length() ); - aBuffer->Write( aOffset, fileName ); - aOffset += fileName.Length(); - - CleanupStack::PopAndDestroy( fileBuf ); - - // print modified - TBuf modifiedTime; - TTime time = aFileEntry.iModified; - time.FormatL( modifiedTime, KSConXmlDate ); - - TBuf8 modifiedTime8; - User::LeaveIfError( - CnvUtfConverter::ConvertFromUnicodeToUtf8( modifiedTime8, modifiedTime ) ); - - - aBuffer->ExpandL( aOffset, KSConXmlModified().Length() ); - aBuffer->Write( aOffset, KSConXmlModified ); - aOffset += KSConXmlModified().Length(); - - aBuffer->ExpandL( aOffset, modifiedTime8.Length() ); - aBuffer->Write( aOffset, modifiedTime8 ); - aOffset += modifiedTime8.Length(); - - // attributes - aBuffer->ExpandL( aOffset, KSConXmlUserAttributes().Length() ); - aBuffer->Write( aOffset, KSConXmlUserAttributes ); - aOffset += KSConXmlUserAttributes().Length(); - - if( aFileEntry.IsSystem() ) - { - aBuffer->ExpandL( aOffset, - KSConXmlUserEntryReadOnly().Length() ); - aBuffer->Write( aOffset, KSConXmlUserEntryReadOnly ); - aOffset += KSConXmlUserEntryReadOnly().Length(); - } - else if( aFileEntry.IsReadOnly() ) - { - LOGGER_WRITE("was readonly" ); - aBuffer->ExpandL( aOffset, - KSConXmlUserEntryReadOnly().Length() ); - aBuffer->Write( aOffset, KSConXmlUserEntryReadOnly ); - aOffset += KSConXmlUserEntryReadOnly().Length(); - } - else - { - aBuffer->ExpandL( aOffset, - KSConXmlUserEntryArchive().Length() ); - aBuffer->Write( aOffset, KSConXmlUserEntryArchive ); - aOffset += KSConXmlUserEntryArchive().Length(); - } - - - //Word document - if ( aFileEntry.iType.IsPresent( KSConWordUid ) || - aFileEntry.iName.Find( KSConEpocWordExt ) == aFileEntry.iName.Length() - 4 ) - { - aBuffer->ExpandL( aOffset, KSConXmlType().Length() ); - aBuffer->Write( aOffset, KSConXmlType ); - aOffset += KSConXmlType().Length(); - - aBuffer->ExpandL( aOffset, KSConXmlTypeWord().Length() ); - aBuffer->Write( aOffset, KSConXmlTypeWord ); - aOffset += KSConXmlTypeWord().Length(); - } - //Sheet document - else if ( aFileEntry.iType.IsPresent( KSConSheetUid ) || - aFileEntry.iName.Find( KSConEpocSheetExt ) == aFileEntry.iName.Length() - 4 ) - { - aBuffer->ExpandL( aOffset, KSConXmlType().Length() ); - aBuffer->Write( aOffset, KSConXmlType ); - aOffset += KSConXmlType().Length(); - - aBuffer->ExpandL( aOffset, KSConXmlTypeSheet().Length() ); - aBuffer->Write( aOffset, KSConXmlTypeSheet ); - aOffset += KSConXmlTypeSheet().Length(); - } - - aBuffer->ExpandL( aOffset, KSConXmlFileEnd().Length() ); - aBuffer->Write( aOffset, KSConXmlFileEnd ); - aOffset += KSConXmlFileEnd().Length(); - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::GetFileObjectL( CObexFileObject*& aFileObject, -// const TPtrC aPathName, const TPtrC aFileName ) -// Gets a file object -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::GetFileObjectL( CObexFileObject*& aFileObject, - const TPtrC aPathName, const TPtrC aFileName ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_2( "CSConFsHandler::GetFileObjectL aFileName = %S aPathName = %S", &aFileName, &aPathName ); - - TInt ret( KErrNone ); - - if( ( aPathName.Length() == 0 || aFileName.Length() == 0 ) && - !( aFileName==KPhoneBookIrMCL2Request || - aFileName==KInfoLogIrMCL2Request ) ) - { - return KErrArgument; - } - - if( aPathName.Length() + aFileName.Length() > KMaxFileName ) - { - return KErrAbort; - } - - HBufC* pathBuf = HBufC::NewLC( KMaxFileName ); - TPtr pathBufPtr = pathBuf->Des(); - - /*These modifiactions are mean to catch an IrMC L2 request. - If the request is made, then the requested phonebook file and - info log -file are created. Path and filename is also changed - to point to these created files.*/ - if( aFileName == KPhoneBookIrMCL2Request || - aFileName == KInfoLogIrMCL2Request ) - { - LOGGER_WRITE( "CSConFsHandler: IrMC L2 request!" ); - TInt err; - TInt status; - TInt contactsSaved = 0; - RCntParserServer cntParserServer; - - err = cntParserServer.Connect(); - if( err != KErrNone ) - { - LOGGER_WRITE( "CSConFsHandler: Cannot connect to the cntparserserver, ABORT!" ); - - CleanupStack::PopAndDestroy( pathBuf ); - return KErrAbort; - } - - LOGGER_WRITE( "CSConFsHandler: Time to call CreateIrMCL2PhoneBook" ); - TBool force = ( aFileName == KInfoLogIrMCL2Request ); - status=cntParserServer.CreateIrMCL2PhoneBook( KMaximumNumberOfContacts, - force ); - LOGGER_WRITE_1( "CntParserServer.CreateIrMCL2PhoneBook returned %d", status ); - - //Check how many vcards were saved - contactsSaved = cntParserServer.ContactsSaved(); - LOGGER_WRITE_1( "CntParserServer.ContactsSaved returned %d", contactsSaved ); - - err = cntParserServer.Disconnect(); - LOGGER_WRITE_1( "CntParserServer.Disconnect() %d", err ); - if( err != KErrNone ) - { - CleanupStack::PopAndDestroy( pathBuf ); - return KErrAbort; - } - //save info.log, if pb.vcf has changed (Note: KPBNotUpdated is returned - // if no changes made to pb.vcf) - if( status == KErrNone ) - { - LOGGER_WRITE( "CSConFsHandler: Create info.log" ); - - CCntParserInfoLog* infoLog=CCntParserInfoLog::NewL(); - CleanupStack::PushL( infoLog ); - //see KMaximumNumberOfContacts for more details - infoLog->SetMaximumRecords( contactsSaved ); - infoLog->SetTotalRecords( contactsSaved ); - TFileName privatepath( K_C_ROOT ); - privatepath.Append( KInfoLogIrMCL2File ); - infoLog->SaveToFileL( privatepath ); - CleanupStack::PopAndDestroy( infoLog ); - } - - if( aFileName == KInfoLogIrMCL2Request ) - { - //Changes filename and path to info.log - pathBufPtr.Copy( KInfoLogPathAndFileName ); - } - else - { - //Changes filename and path to pb.vcf - pathBufPtr.Copy( KPbPathAndFileName ); - } - } - else - { - pathBufPtr.Copy( aPathName ); - pathBufPtr.Append( aFileName ); - } - - LOGGER_WRITE( "CSConFsHandler::GetFileObjectL() : aFileObject->InitFromFileL( pathBufPtr )" ); - TRAP( ret, aFileObject->InitFromFileL( pathBufPtr ) ); - LOGGER_WRITE( "CSConFsHandler::GetFileObjectL() : aFileObject->InitFromFileL( pathBufPtr ) ok" ); - - CleanupStack::PopAndDestroy( pathBuf ); - - LOGGER_WRITE_1( "CSConFsHandler::GetFileObjectL( CObexFileObject*& aFileObject, const TPtrC aPathName, const TPtrC aFileName ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::SaveFileObjectL( const TPtrC aFullPathName, const TTime aTime, -// const TPtrC aTempFileName ) -// Stores a file object -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::SaveFileObjectL( const TPtrC aFullPathName, - const TTime aTime, const TPtrC aTempFileName ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_2( "CSConFsHandler::SaveFileObjectL aFullPathName = %S aTempFileName = %S", &aFullPathName, &aTempFileName ); - - TInt ret( KErrNone ); - - if( aFullPathName.Length() == 0 ) - { - iFs.Delete( aTempFileName ); - return KErrPathNotFound; - } - - ret = ValidateFileName( aFullPathName ); - - if( ret == KErrNone ) - { - TUint attr; - TInt err = iFs.Att( BaflUtils::DriveAndPathFromFullName(aFullPathName), attr ); - if ( err == KErrNone && attr & KEntryAttReadOnly ) - { - // folder is read only, permission denied - iFs.Delete( aTempFileName ); - ret = KErrAccessDenied; - } - else if( !BaflUtils::FileExists( iFs, aFullPathName ) ) - { - // file does not exist, rename. - ret = iFs.Rename( aTempFileName, aFullPathName ); - - if( ret == KErrNone ) - { - ret = iFs.SetModified( aFullPathName, aTime ); - ret = KErrNone; - } - else - { - iFs.Delete( aTempFileName ); - } - } - else - { - LOGGER_WRITE( "CSConFsHandler::SaveFileObjectL() file exists. replace" ); - // file exists. Replace if not read-only file. - TUint attr; - ret = iFs.Att( aFullPathName, attr ); - // Check permissions - if( ret == KErrNone && ( attr == KEntryAttNormal || - attr == KEntryAttArchive ) && !(attr & KEntryAttReadOnly) ) - { - ret = iFs.Replace( aTempFileName, aFullPathName ); - LOGGER_WRITE_1( "CSConFsHandler::SaveFileObjectL() iFs.Replace ret %d", ret); - //Set correct time stamp - if( ret == KErrNone ) - { - ret = iFs.SetModified( aFullPathName, aTime ); - ret = KErrNone; - } - else - { - iFs.Delete( aTempFileName ); - } - } - else - { - LOGGER_WRITE( "CSConFsHandler::SaveFileObjectL() no permissions" ); - iFs.Delete( aTempFileName ); - ret = KErrAccessDenied; - } - } - } - else - { - iFs.Delete( aTempFileName ); - } - - LOGGER_WRITE_1( "CSConFsHandler::SaveFileObjectL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::ValidateFileName( const TPtrC aName ) -// Validates the file name -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::ValidateFileName( const TPtrC aName ) - { - TInt ret( KErrNone ); - - if( !iFs.IsValidName( aName ) ) - { - ret = KErrBadName; - } - - LOGGER_WRITE_1( "CSConFsHandler::ValidateFileName( const TPtrC aName ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::CreateFolderL( const TPtrC aFolderPath ) -// Creates a folder -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::CreateFolderL( const TPtrC aFolderPath ) - { - TRACE_FUNC_ENTRY; - - TInt ret( KErrNone ); - - if( aFolderPath.Length() == 0 ) - { - return KErrArgument; - } - if( aFolderPath.Length() > KMaxPath ) - { - return KErrAbort; - } - if( BaflUtils::PathExists( iFs, aFolderPath ) ) - { - return KErrAlreadyExists; - } - // get restore mode - TBool restoreInProgress( EFalse ); - RProperty backupProperty; - TInt burState( 0 ); - TInt burErr = backupProperty.Get( KUidSystemCategory, conn::KUidBackupRestoreKey, burState ); - const conn::TBURPartType partType = - static_cast< conn::TBURPartType >( burState & conn::KBURPartTypeMask ); - if( burErr == KErrNone && - ( partType == conn::EBURRestorePartial || partType == conn::EBURRestoreFull ) ) - { - // restore mode - LOGGER_WRITE( "CSConFsHandler::CreateFolderL() restore mode" ); - restoreInProgress = ETrue; - } - - // check permissions if not restore mode - if ( !restoreInProgress ) - { - if ( IsExludedPath( aFolderPath ) ) - { - // user has no access to this folder - LOGGER_WRITE( "CSConFsHandler::CreateFolderL() KErrAccessDenied" ); - return KErrAccessDenied; - } - - // user can create whole folder path at once and we need to check that - // user has permission to create folders. We need to find first folder that - // should be created, and see if parent folder has read-only permission. - - HBufC* fullPath = HBufC::NewLC( KMaxFileName ); - TPtr fullPathPtr = fullPath->Des(); - - fullPathPtr.Copy(aFolderPath); - TBool parentFound(EFalse); - LOGGER_WRITE( "CSConFsHandler::CreateFolder() start loop" ); - TInt err(KErrNone); - while (!parentFound && err==KErrNone) - { - err = GetParentFolder( fullPathPtr, fullPathPtr ); - if( err == KErrNone ) - { - if (BaflUtils::PathExists( iFs, fullPathPtr )) - { - parentFound = ETrue; - TUint attr; - ret = iFs.Att( fullPathPtr, attr ); - if ( ret == KErrNone && (attr & KEntryAttReadOnly || attr & KEntryAttSystem) ) - { - // parent folder is read-only - LOGGER_WRITE( "CSConFsHandler::CreateFolderL() KErrAccessDenied" ); - err = KErrAccessDenied; - } - } - } - } - - CleanupStack::PopAndDestroy( fullPath ); - if ( err == KErrAccessDenied ) - { - return KErrAccessDenied; - } - } - - ret = iFs.MkDirAll( aFolderPath ); - LOGGER_WRITE_1( "CSConFsHandler::CreateFolderL( const TPtrC aFolderPath ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::DeleteObjectL( const TPtrC aFullPath ) -// Removes a folder or a file -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::DeleteObjectL( const TPtrC aFullPath ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aFullPath: %S", &aFullPath); - TInt ret( KErrNone ); - - if( aFullPath.Length() == 0 ) - { - return KErrArgument; - } - - if( aFullPath.Length() > KMaxFileName ) - { - return KErrAbort; - } - - TUint attr; - // get source folder permissions. - ret = iFs.Att( BaflUtils::DriveAndPathFromFullName(aFullPath), attr ); - if ( ret == KErrNone && (attr & KEntryAttReadOnly || attr & KEntryAttSystem ) ) - { - return KErrAccessDenied; - } - - - // Check file/folder permissions - ret = iFs.Att( aFullPath, attr ); - if ( ret == KErrNone && ( attr & KEntryAttReadOnly || attr & KEntryAttSystem ) ) - { - return KErrAccessDenied; - } - - TBool isFolder(EFalse); - ret = BaflUtils::IsFolder( iFs, aFullPath, isFolder ); - - if( isFolder && ret == KErrNone ) - { - HBufC* fullPath = HBufC::NewLC( KMaxFileName ); - TPtr fullPathPtr = fullPath->Des(); - - fullPathPtr.Copy( aFullPath ); - //check if there is a slash at the end - if( fullPathPtr.LocateReverse( KPathDelimiter ) != fullPathPtr.Length()-1 ) - { - fullPathPtr.Append( KPathDelimiter ); - } - - if ( !IsFolderVisible( fullPathPtr ) ) - { - LOGGER_WRITE("folder was not visible"); - CleanupStack::PopAndDestroy( fullPath ); - return KErrNotFound; - } - else if ( !IsFolderDeletable( fullPathPtr ) ) - { - LOGGER_WRITE("folder was not deletable"); - CleanupStack::PopAndDestroy( fullPath ); - return KErrAccessDenied; - } - - ret = iFs.RmDir( fullPathPtr ); - LOGGER_WRITE_1("iFs.RmDir err: %d", ret); - //delete non-empty folder - if( ret != KErrNone ) - { - CFileMan* fileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( fileMan ); - // if directory contains read-only files, those files are not deleted - // and KErrAccessDenied is returned. - ret = fileMan->RmDir( fullPathPtr ); - LOGGER_WRITE_1("fileMan->RmDir err: %d", ret); - CleanupStack::PopAndDestroy( fileMan ); //fileman - } - if( ret == KErrNone ) - { - // check is delete operation really succesfully completed - if( BaflUtils::PathExists( iFs, fullPathPtr ) ) - { - // Folder still exist, return error - // KErrBadName mapped to precondition failed error. - ret = KErrBadName; - } - } - CleanupStack::PopAndDestroy( fullPath ); //fullPath - } - else if (ret == KErrNone) - { - // deleting file - if ( IsExludedPath( aFullPath ) ) - { - LOGGER_WRITE("Cannot delete from specified folder, return KErrAccessDenied"); - ret = KErrAccessDenied; - } - else - { - ret = iFs.Delete( aFullPath ); - } - } - - - - LOGGER_WRITE_1( "CSConFsHandler::DeleteObjectL() : returned %d", ret ); - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSConFsHandler::CopyOrMoveFile() -// Copy or Move file/folder. -// ----------------------------------------------------------------------------- -// -void CSConFsHandler::DoCopyOrMoveFileL( const TDesC& aSource, const TDesC& aTarget, - const TBool aUseCopyCommand) - { - TRACE_FUNC_ENTRY; - TInt lastError(KErrNone); - TBool isFolder; - - if( !iFs.IsValidName( aSource ) || !iFs.IsValidName( aTarget ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Not valid name" ); - User::Leave( KErrBadName ); - } - - // will leave if source (file/folder) does not exists. - User::LeaveIfError( BaflUtils::IsFolder(iFs, aSource, isFolder ) ); - - // Check source file/folder permissions - TUint attr; - User::LeaveIfError( iFs.Att( aSource, attr ) ); - if ( !aUseCopyCommand && (attr & KEntryAttReadOnly || attr & KEntryAttSystem ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : no permissions, abort" ); - User::Leave( KErrAccessDenied ); - } - - HBufC* sourceFolderBuf = HBufC::NewLC( KMaxFileName ); - TPtr sourceFolder = sourceFolderBuf->Des(); - HBufC* targetFolderBuf = HBufC::NewLC( KMaxFileName ); - TPtr targetFolder = targetFolderBuf->Des(); - - sourceFolder.Copy( BaflUtils::DriveAndPathFromFullName(aSource) ); - targetFolder.Copy( BaflUtils::DriveAndPathFromFullName(aTarget) ); - - - // check disk space - TInt driveNumber; - - User::LeaveIfError( iFs.CharToDrive(targetFolder[0], driveNumber) ); - - TVolumeInfo volumeInfo; - TInt err = iFs.Volume(volumeInfo, driveNumber); - if( err != KErrNone ) - { - LOGGER_WRITE_1( "CSConFsHandler::DoCopyOrMoveFileL : iFs.Volume err %d", err ); - User::Leave( KErrNotFound ); - } - - if( !isFolder ) - { - // file handling routines - if( !IsFolderVisible( aSource ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Current folder doesn't exist" ); - User::Leave( KErrNotFound ); - } - else if( !aUseCopyCommand && IsFolderReadOnly( sourceFolder ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : folder read only, abort" ); - User::Leave( KErrAccessDenied ); - } - - // source file is ok, check target - - if( !IsFolderVisible( targetFolder ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Current target file/folder doesn't exist" ); - User::Leave( KErrNotFound ); - } - else if( IsFolderReadOnly( targetFolder ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : folder read only, abort" ); - User::Leave( KErrAccessDenied ); - } - else - { - TBool diskFull( EFalse ); - TEntry fileEntry; - User::LeaveIfError( iFs.Entry( aSource, fileEntry ) ); - if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, fileEntry.iSize, driveNumber ) ) - { - diskFull = ETrue; - } - - // target ok, ready to copy or move - CFileMan* fileMan=CFileMan::NewL(iFs); - CleanupStack::PushL(fileMan); - - if( aUseCopyCommand ) - { - if( diskFull ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : disk full" ); - User::Leave( KErrDiskFull ); - } - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Copy file" ); - User::LeaveIfError( fileMan->Copy( aSource, aTarget, 0 ) ); - } - else - { - if( aSource.Find( aTarget.Left(2) ) == KErrNone) - { - // same drive - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Rename file" ); - User::LeaveIfError( fileMan->Rename( aSource, aTarget, 0 ) ); - } - else - { - // different drive - if( diskFull ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : disk full" ); - User::Leave( KErrDiskFull ); - } - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : copy file" ); - User::LeaveIfError( fileMan->Copy( aSource, aTarget, 0 ) ); - - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : delete original" ); - User::LeaveIfError( fileMan->Delete( aSource, 0 ) ); - } - } - CleanupStack::PopAndDestroy( fileMan ); // fileMan - } - } - else - { - // set trailing backslash after the final directory name - HBufC* tmpSourceBuf = HBufC::NewLC( KMaxFileName ); - TPtr tmpSourcePtr = tmpSourceBuf->Des(); - HBufC* tmpTargetBuf = HBufC::NewLC( KMaxFileName ); - TPtr tmpTargetPtr = tmpTargetBuf->Des(); - - tmpSourcePtr.Copy( aSource ); - if( tmpSourcePtr.LocateReverse( KPathDelimiter ) != tmpSourcePtr.Length()-1 ) - { - tmpSourcePtr.Append( KPathDelimiter ); - } - - tmpTargetPtr.Copy( aTarget ); - if( tmpTargetPtr.LocateReverse( KPathDelimiter ) != tmpTargetPtr.Length()-1 ) - { - tmpTargetPtr.Append( KPathDelimiter ); - } - - if( !IsFolderVisible( tmpSourcePtr ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Current folder doesn't exist" ); - User::Leave( KErrNotFound ); - } - else if( !aUseCopyCommand && IsFolderReadOnly( sourceFolder ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : sourcefolder read only, abort" ); - User::Leave( KErrAccessDenied ); - } - else if( !aUseCopyCommand && !IsFolderDeletable( tmpSourcePtr ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : source folder read only, abort" ); - User::Leave( KErrAccessDenied ); - } - else if( !IsFolderVisible( targetFolder ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Current target base-folder doesn't exist" ); - User::Leave( KErrNotFound ); - } - else if( IsFolderReadOnly( targetFolder) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : target folder read only, abort" ); - User::Leave( KErrAccessDenied ); - } - else if( BaflUtils::FolderExists(iFs, tmpTargetPtr ) ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : target folder exist, abort" ); - User::Leave( KErrAlreadyExists ); - } - else if ( tmpTargetPtr.Find( tmpSourcePtr ) == KErrNone ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : conflict, abort" ); - User::Leave( KErrInUse ); - } - else - { - // is folder empty - TBool emptyFolder( ETrue ); - CDir *entryList = 0; - CDir *dirList = 0; - - User::LeaveIfError( iFs.GetDir( tmpSourcePtr, KEntryAttNormal, EDirsAnyOrder, - entryList, dirList ) ); - if( entryList->Count() > 0 || dirList->Count() > 0 ) - { - emptyFolder = EFalse; - } - - delete entryList; - delete dirList; - - // get folder size - TBool diskFull( EFalse ); - if( !emptyFolder ) - { - TInt64 folderSize = GetFolderSizeL(tmpSourcePtr); - LOGGER_WRITE_1( "CSConFsHandler::DoCopyOrMoveFileL : folderSize: %d", folderSize ); - if ( SysUtil::DiskSpaceBelowCriticalLevelL( &iFs, folderSize, driveNumber ) ) - { - diskFull = ETrue; - } - } - - - CFileMan* fileMan = CFileMan::NewL(iFs); - CleanupStack::PushL(fileMan); - - // ready to copy or move - if( aUseCopyCommand ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Copy folder" ); - if( emptyFolder ) - { - // folder is empty, can't copy folder. Create new empty folder. - User::LeaveIfError( iFs.MkDir( tmpTargetPtr ) ); - } - else - { - // folder not empty - if( diskFull ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : disk full" ); - User::Leave( KErrDiskFull ); - } - - User::LeaveIfError( - fileMan->Copy( aSource, aTarget, CFileMan::ERecurse ) ); - if( lastError == KErrNone ) - { - lastError = fileMan->GetLastError(); - } - } - - TUint attr; - TInt err = iFs.Att( tmpSourcePtr, attr ); - if ( err == KErrNone && (attr & KEntryAttReadOnly ) ) - { - //set read only attribute - err = iFs.SetAtt( tmpTargetPtr, KEntryAttReadOnly, KEntryAttArchive ); - if (err != KErrNone) - { - // can't set attribute - LOGGER_WRITE_1( "CSConFsHandler::DoCopyOrMoveFileL : iFs.SetAtt err: %d",err ); - } - } - } - else - { - if( aSource.FindF( aTarget.Left(2) ) == KErrNone) - { - // same drive - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Rename folder" ); - User::LeaveIfError( fileMan->Rename( aSource, aTarget, 0 ) ); - } - else - { - // different drive - if( diskFull ) - { - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : disk full" ); - User::Leave( KErrDiskFull ); - } - - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : Copy folder" ); - if( emptyFolder ) - { - // folder is empty, can't copy empty folder. Create empty folder. - User::LeaveIfError( iFs.MkDir( tmpTargetPtr ) ); - } - else - { - User::LeaveIfError( - fileMan->Copy( aSource, aTarget, CFileMan::ERecurse ) ); - } - // copy completed, delete original folder. - LOGGER_WRITE( "CSConFsHandler::DoCopyOrMoveFileL : delete original" ); - User::LeaveIfError( fileMan->RmDir( tmpSourcePtr ) ); - // check was delete operation succesfully completed - if( BaflUtils::PathExists( iFs, tmpSourcePtr ) ) - { - // Folder still exist, return error - lastError = KErrAccessDenied; - } - } - } - CleanupStack::PopAndDestroy(fileMan); // fileMan - } - CleanupStack::PopAndDestroy(tmpTargetBuf); // tmpTargetBuf - CleanupStack::PopAndDestroy(tmpSourceBuf); // tmpSourceBuf - } - - CleanupStack::PopAndDestroy( targetFolderBuf ); - CleanupStack::PopAndDestroy( sourceFolderBuf ); - - if( lastError != KErrNone ) - { - LOGGER_WRITE_1( "CSConFTP::DoCopyOrMoveFileL() : lastError: %d", lastError ); - User::Leave( lastError ); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::IsFolderVisible() -// Check if folder can be showed -// ----------------------------------------------------------------------------- -// -TBool CSConFsHandler::IsFolderVisible( const TDesC& aFullPath ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFullPath: %S", &aFullPath ); - TBool visible(EFalse); - - if( !BaflUtils::FolderExists( iFs, aFullPath ) ) - { - LOGGER_WRITE( "CSConFsHandler::IsFolderVisible() notExist ret EFalse" ); - return EFalse; - } - - // don't show if folder is exluded - visible = !IsExludedPath( aFullPath ); - LOGGER_WRITE_1( "CSConFsHandler::IsFolderVisible() : end, ret %d", (TInt)visible ); - return visible; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::IsFolderReadOnly() -// Check if folder is read only (system folder) -// ----------------------------------------------------------------------------- -// -TBool CSConFsHandler::IsFolderReadOnly( const TDesC& aFullPath ) const - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFullPath: %S", &aFullPath ); - TBool readOnly(EFalse); - - // C-drive root is read only, but there are some exceptions - - readOnly = IsExludedPath( aFullPath ); - - if ( aFullPath.CompareF( K_C_ROOT ) == 0 ) - { - // Root of C-drive is read-only - LOGGER_WRITE("Root of C-Drive is read only"); - readOnly = ETrue; - } - - // Check folder permissions - TUint attr; - TInt err = iFs.Att( aFullPath, attr ); - LOGGER_WRITE_1("iFs.Att err: %d", err); - if ( err == KErrNone && (attr & KEntryAttReadOnly || attr & KEntryAttSystem ) ) - { - LOGGER_WRITE("Folder is readonly"); - readOnly = ETrue; - } - - LOGGER_WRITE_1( "CSConFsHandler::IsFolderReadOnly() : end, ret %d", (TInt)readOnly ); - return readOnly; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::IsFolderDeletable() -// Check if folder can be deleted. Localized folders cannot delete. -// In C-drive folders can be deleted only from under C:\\Data\\ -// ----------------------------------------------------------------------------- -// -TBool CSConFsHandler::IsFolderDeletable( const TDesC& aFullPath ) const - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFullPath: %S", &aFullPath ); - TBool deleteAllowed(ETrue); - TPath PhoneMem( PathInfo::PhoneMemoryRootPath() ); // "C:\\Data\\" - - if ( aFullPath.CompareF( PhoneMem ) == 0 ) - { - // C:\\Data\\ - LOGGER_WRITE( "CSConFsHandler::IsFolderDeletable() datapath, ret EFalse" ); - deleteAllowed = EFalse; - } - else if ( IsExludedPath( aFullPath ) ) - { - deleteAllowed = EFalse; - } - - iLocalizer->SetFullPath( aFullPath ); - if ( iLocalizer->IsLocalized() ) // delete disabled - { - // Cannot delete localized paths (default paths) - deleteAllowed = EFalse; - } - - LOGGER_WRITE_1( "CSConFsHandler::IsFolderDeletable() : end, ret %d", (TInt)deleteAllowed ); - return deleteAllowed; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::GetParentFolder( const TPtrC aFullPath, TDes& aParent) -// Get parent folder -// ----------------------------------------------------------------------------- -// -TInt CSConFsHandler::GetParentFolder( const TDesC& aFullPath, TDes& aParent) - { - TRACE_FUNC_ENTRY; - if (aFullPath.LocateReverse(KPathDelimiter) == aFullPath.Length()-1 ) - { - // remove backlash - aParent.Copy(aFullPath.Left(aFullPath.Length()-1)); - } - else - { - aParent.Copy(aFullPath); - } - - TInt pos = aParent.LocateReverse(KPathDelimiter); - if (pos != KErrNotFound) - { - aParent.Copy(aParent.Left(pos+1)); - LOGGER_WRITE( "CSConFsHandler::GetParentFolder : end KErrNone" ); - return KErrNone; - } - else - { - LOGGER_WRITE_1( "CSConFsHandler::GetParentFolder : end err %d", pos); - return pos; - } - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::CSConFsHandler() -// Constructor -// ----------------------------------------------------------------------------- -// -CSConFsHandler::CSConFsHandler( RFs& aFs ) : iFs(aFs) - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConFsHandler::ConstructL() - { - TRACE_FUNC_ENTRY; - iLocalizer = CDirectoryLocalizer::NewL(); - - GetDataPathNameL(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::GetDataPathNameL() -// Updates the name of the data folder from a localized string -// ----------------------------------------------------------------------------- -// -void CSConFsHandler::GetDataPathNameL() - { - TRACE_FUNC_ENTRY; - //Read memory string and convert it - TFileName file( KSConResourceName ); - - BaflUtils::NearestLanguageFile( iFs, file ); - - CStringResourceReader* reader = CStringResourceReader::NewL( file ); - CleanupStack::PushL( reader ); - - CnvUtfConverter::ConvertFromUnicodeToUtf8( iDataPathName, - reader->ReadResourceString( R_SECON_DATA_FOLDER ) ); - - CleanupStack::PopAndDestroy( reader ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::GetFolderSizeL() -// Get folder (and subfolders) size -// ----------------------------------------------------------------------------- -// -TInt64 CSConFsHandler::GetFolderSizeL( const TDesC& aFullPath ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFullPath: %S", &aFullPath ); - TInt64 totalSize(0); - CDir* dir( NULL ); - - User::LeaveIfError( iFs.GetDir(aFullPath, KEntryAttMatchMask, ESortByName, dir) ); - CleanupStack::PushL(dir); - for( TInt i=0; iCount(); ++i ) - { - TEntry entry = (*dir)[i]; - if( !entry.IsDir() ) - { - // file - totalSize += entry.iSize; - } - else - { - // folder - HBufC* subfolderBuf = HBufC::NewLC( KMaxPath ); - TPtr subfolderPtr = subfolderBuf->Des(); - - subfolderPtr.Copy(aFullPath); - subfolderPtr.Append(entry.iName); - subfolderPtr.Append( KPathDelimiter ); - - LOGGER_WRITE( "CSConFsHandler::GetFolderSizeL() : get subfolder size" ); - totalSize += GetFolderSizeL( subfolderPtr ); - CleanupStack::PopAndDestroy( subfolderBuf ); - } - } - CleanupStack::PopAndDestroy(dir); - TRACE_FUNC_EXIT; - return totalSize; - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::ReplaceSpecialChars() -// Replace special characters to xml compliant -// ----------------------------------------------------------------------------- -// -void CSConFsHandler::ReplaceSpecialChars( TDes8& aDes ) - { - for( TInt i = 0; i < aDes.Length(); i++ ) - { - switch( aDes[i] ) - { - case '&': - aDes.Delete( i, 1 ); - aDes.Insert( i, KReplace1 ); - break; - case '<': - aDes.Delete( i, 1 ); - aDes.Insert( i, KReplace2 ); - break; - case '>': - aDes.Delete( i, 1 ); - aDes.Insert( i, KReplace3 ); - break; - case '"': - aDes.Delete( i, 1 ); - aDes.Insert( i, KReplace4 ); - break; - case '\'': - aDes.Delete( i, 1 ); - aDes.Insert( i, KReplace5 ); - break; - default: - break; - } - } - } - -// ----------------------------------------------------------------------------- -// CSConFsHandler::IsExludedPath() -// Some folders are exluded from user access -// ----------------------------------------------------------------------------- -// -TBool CSConFsHandler::IsExludedPath( const TDesC& aFullPath ) const - { - TInt exluded(ETrue); - LOGGER_WRITE_1( "aFullPath: %S", &aFullPath ); - TPath mmcRoot( PathInfo::MemoryCardRootPath() ); - if ( aFullPath.Length() == KDriveLength ) - { - // root paths not exluded - exluded = EFalse; - } - else if ( aFullPath.FindF( K_C_ROOT ) == 0 ) - { - if ( aFullPath.FindF( PathInfo::PhoneMemoryRootPath() ) == 0 ) - { - // C:\\Data is visible, not exluded - exluded = EFalse; - } - else { - // other paths on C-drive are exluded - LOGGER_WRITE_1("CSConFsHandler::IsExludedPath() Path '%S' is not visible to user", &aFullPath); - exluded = ETrue; - } - } - // hide undesired folders from E: root level - else if( aFullPath.CompareF( mmcRoot ) == 0 ) - { - if ( aFullPath.FindF( KSConSys ) == KDriveLength ) - { - LOGGER_WRITE( "hiding mmcRoot KSConSys" ); - exluded = ETrue; - } - else if( aFullPath.FindF( KSConResource ) == KDriveLength ) - { - LOGGER_WRITE( "hiding mmcRoot KSConResource" ); - exluded = ETrue; - } - else if( aFullPath.FindF( KSConPrivate ) == KDriveLength ) - { - LOGGER_WRITE( "mmcRoot KSConPrivate" ); - exluded = ETrue; - } - else if( aFullPath.FindF( KSConSystem ) == KDriveLength ) - { - LOGGER_WRITE( "hiding mmcRoot KSConSystem" ); - exluded = ETrue; - } - } - // end of E: root level handling - else - { - // don't exlude paths from other drives - exluded = EFalse; - } - return exluded; - } - -// End of file - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/src/sconftp.cpp --- a/connectivitymodules/SeCon/services/ftp/src/sconftp.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1588 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: File Transfer Controller implementation -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" -#include "sconftp.h" -#include "sconfshandler.h" -#include "sconinboxhandler.h" -#include "sconconsts.h" - -const TInt KPackageSize = 65536; - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CreateCSConFTPL() -// Entry to CSConFTP -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConFTP* CreateCSConFTPL() - { - TRACE_FUNC; - return CSConFTP::NewL(); - } - -// ----------------------------------------------------------------------------- -// CSConFTP::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConFTP* CSConFTP::NewL() - { - TRACE_FUNC_ENTRY; - CSConFTP* self = new (ELeave) CSConFTP(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::~CSConFTP() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConFTP::~CSConFTP() - { - TRACE_FUNC_ENTRY; - delete iSConInboxHandler; - iSConInboxHandler = NULL; - delete iSConFsHandler; - iSConFsHandler = NULL; - delete iBuffer; - iBuffer = NULL; - - iFs.Delete( iTempFileName ); - iFs.Close(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::GetFolderObjectL( CObexBufObject*& aObjectList ) -// Gets object that contains folder listing from inbox or file system -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::GetFolderObjectL( CObexBufObject*& aObjectList ) - { - TRACE_FUNC_ENTRY; - - TInt ret( KErrNone ); - TInt offset = 0; - TChar driveLetter; - TBuf8 tmpBuf8; - - iBuffer->Reset(); - - //default folder list - lists all available drives, inbox - if( iPathName.Length() == 0 ) - { - TInt devDriveCount = 0; - TInt mmcDriveCount = 0; - - iBuffer->ResizeL( KSConXmlDocBegin().Length() ); - iBuffer->Write( offset, KSConXmlDocBegin ); - offset += KSConXmlDocBegin().Length(); - - //Write all drivers to folderlisting object - TDriveList driveList; - // Get all drives that are visible to the user. - TInt driveCount; - User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount ) ); - - for( TInt i = EDriveA; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, i, driveStatus ) ); - LOGGER_WRITE_1( "DriveInfo for drive: %d", i); - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt - || (driveStatus & DriveInfo::EDriveRemote) ) - { - LOGGER_WRITE_1( "skip drive %d", i); - continue; - } - - User::LeaveIfError( iFs.DriveToChar( i, driveLetter ) ); - - //Letter to uppercase form. - driveLetter.UpperCase(); - - //Folder begin - iBuffer->ExpandL( offset, - KSConXmlFolderNameBegin().Length() ); - iBuffer->Write( offset, KSConXmlFolderNameBegin ); - offset += KSConXmlFolderNameBegin().Length(); - - iBuffer->ExpandL( offset, KSConDriveCName().Length() ); - - tmpBuf8.Delete( 0, tmpBuf8.Length() ); - tmpBuf8.Append( driveLetter ); - tmpBuf8.Append( KDriveDelimiter ); - - iBuffer->Write( offset, tmpBuf8 ); - offset += KSConDriveNameLength; - - //permission - iBuffer->ExpandL( offset, - KSConXmlUserAttributes().Length() ); - iBuffer->Write( offset, KSConXmlUserAttributes ); - offset += KSConXmlUserAttributes().Length(); - if( driveStatus & DriveInfo::EDriveInternal && devDriveCount==0 ) - { - //permission always R for first internal drive - iBuffer->ExpandL( offset, - KSConXmlUserEntryReadOnly().Length() ); - iBuffer->Write( offset, KSConXmlUserEntryReadOnly ); - offset += KSConXmlUserEntryReadOnly().Length(); - } - else - { - //permission always RW - iBuffer->ExpandL( offset, - KSConXmlUserEntryDrive().Length() ); - iBuffer->Write( offset, KSConXmlUserEntryDrive ); - offset += KSConXmlUserEntryDrive().Length(); - } - - //memory type - iBuffer->ExpandL( offset, - KSConXmlMemoryType().Length() ); - iBuffer->Write( offset, KSConXmlMemoryType ); - offset += KSConXmlMemoryType().Length(); - if( driveStatus & DriveInfo::EDriveInternal ) - { - LOGGER_WRITE( "DriveInfo::EDriveInternal" ); - // DEV type - devDriveCount++; - if( devDriveCount > 1 ) - { - // DEV2 - TBuf8 memType; - memType.Copy( KSConMemoryTypeDev ); - memType.AppendNum(devDriveCount); - iBuffer->ExpandL( offset, memType.Length() ); - iBuffer->Write( offset, memType ); - offset += memType.Length(); - } - else - { - // DEV - iBuffer->ExpandL( offset, - KSConMemoryTypeDev().Length() ); - iBuffer->Write( offset, KSConMemoryTypeDev ); - offset += KSConMemoryTypeDev().Length(); - } - } - if( driveStatus & DriveInfo::EDriveRemovable ) - { - LOGGER_WRITE( "DriveInfo::EDriveRemovable" ); - // MMC type - mmcDriveCount++; - if( mmcDriveCount > 1 ) - { - // MMC2 - TBuf8 memType; - memType.Copy( KSConMemoryTypeMmc ); - memType.AppendNum(mmcDriveCount); - iBuffer->ExpandL( offset, memType.Length() ); - iBuffer->Write( offset, memType ); - offset += memType.Length(); - } - else - { - // MMC - iBuffer->ExpandL( offset, - KSConMemoryTypeMmc().Length() ); - iBuffer->Write( offset, KSConMemoryTypeMmc ); - offset += KSConMemoryTypeMmc().Length(); - } - } - - //memory label - iBuffer->ExpandL( offset, - KSConXmlMemoryLabel().Length() ); - iBuffer->Write( offset, KSConXmlMemoryLabel ); - offset += KSConXmlMemoryLabel().Length(); - - TInt err( KErrNotFound ); - TBuf8 volumeName; - if( driveStatus & DriveInfo::EDriveRemovable || devDriveCount == 1 ) - { - // get Volume name for C-drive(Phone) and E-drive(MMC) - err = GetVolumeNameL( i, volumeName ); - } - else - { - // Get localized name for DEV2 (Mass memory) - //Read memory string and convert it - TFileName file( KSConResourceName ); - - BaflUtils::NearestLanguageFile( iFs, file ); - - CStringResourceReader* reader = CStringResourceReader::NewL( file ); - - CnvUtfConverter::ConvertFromUnicodeToUtf8( volumeName, - reader->ReadResourceString( R_SECON_VALUE_MASS_STORAGE ) ); - - delete reader; - err = KErrNone; - } - - if ( err == KErrNone ) - { - iBuffer->ExpandL( offset, - volumeName.Length() ); - iBuffer->Write( offset, volumeName ); - offset += volumeName.Length(); - } - - //Write the end of filelist to folderlisting object - iBuffer->ExpandL( offset, KSConXmlFileEnd().Length() ); - iBuffer->Write( offset, KSConXmlFileEnd ); - offset += KSConXmlFileEnd().Length(); - } - } - //Write the end of folderlist to folderlisting object - iBuffer->ExpandL( offset, KSConXmlFolderListEnd().Length() ); - iBuffer->Write( offset, KSConXmlFolderListEnd ); - iBuffer->Compress(); - } - else - { - if( IsCurrentVolumeOK() ) - { - ret = iSConFsHandler->ParseFolderListL( iBuffer, iPathName, iCurrentDriveTypeNumber ); - } - else - { - ret = KErrNotFound; - } - } - - //Put data to aObjectList - delete aObjectList; - aObjectList = NULL; - - aObjectList = CObexBufObject::NewL( iBuffer ); - aObjectList->SetTypeL( KSConFolderListType ); - aObjectList->SetLengthL( iBuffer->Size() ); - - LOGGER_WRITE_1( "CSConFTP::GetFolderObjectL( CObexBufObject*& aObjectList ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::GetFileObjectL( CObexFileObject*& aFileObject ) -// Gets object that contains a file from file system -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::GetFileObjectL( CObexFileObject*& aFileObject ) - { - TRACE_FUNC_ENTRY; - - TInt ret( KErrNone ); - - if( aFileObject->Name().Length() == 0 ) - { - return KErrBadName; - } - - // check is current drive ok - if( iPathName.Length() > 0 ) - { - TPath path( KSConAllowedPath ); - path.Append( KPathDelimiter ); - if( iPathName.CompareF( path ) != 0 ) - { - // was normal path (not KSConAllowedPath) - if( !IsCurrentVolumeOK() ) - { - return KErrNotFound; - } - } - } - - HBufC* nameBuf = HBufC::NewLC( KMaxFileName ); - TPtr namePtr = nameBuf->Des(); - namePtr.Append( aFileObject->Name() ); - - if( namePtr.LocateReverse( KPathDelimiter ) == namePtr.Length()-1 ) - { - namePtr.Delete( namePtr.Length()-1, 1 ); - } - - ret = iSConFsHandler->GetFileObjectL( aFileObject, iPathName, namePtr ); - - CleanupStack::PopAndDestroy( nameBuf ); - - LOGGER_WRITE_1( "CSConFTP::GetFileObjectL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::PutFileObjectInitL( CObexBufObject*& aObject, -// CBufFlat*& aBuffer ) -// Initializes the receiving from the client. -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::PutFileObjectInitL( CObexBufObject*& aObject, - CBufFlat*& aBuffer ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - RFile file; - - TBool lowMemory = IsCurrentDiskSpaceBelowCritical(); - - //if Inbox then save temp file to default drive - if( iPathName.Length() == 0 ) - { - //When proprietary profile (PC Suite), doesn't allow to use Inbox - if( iProfile == EProprietary ) - { - LOGGER_WRITE( "CSConFTP::PutFileObjectInitL() : iProfile EProprietary" ); - ret = file.Temp( iFs, PathInfo::PhoneMemoryRootPath(), iTempFileName, - EFileWrite | EFileShareExclusive ); - file.Close(); - - if( ret == KErrNone ) - { - CreateObexBufObjectL( aObject, aBuffer ); - } - } - else - { - LOGGER_WRITE( "CSConFTP::PutFileObjectInitL() : not EProprietary" ); - if( lowMemory ) - { - // do not even try to save - LOGGER_WRITE( "CSConFTP::PutFileObjectInitL() : disk full" ); - ret = KErrNoMemory; - } - else - { - ret = iSConInboxHandler->CreateInboxAttachmentL( aObject, aBuffer ); - } - } - - return ret; - } - else - { - LOGGER_WRITE_1("iPathName: %S", &iPathName); - // check is current drive ok - if( !IsCurrentVolumeOK() ) - { - LOGGER_WRITE( "CSConFTP::PutFileObjectInitL() : drive not visible" ); - ret = KErrNotFound; - } - else - { - ret = file.Temp( iFs, iPathName, iTempFileName, EFileWrite | - EFileShareExclusive ); - } - } - - file.Close(); - - if( ret == KErrNone ) - { - CreateObexBufObjectL( aObject, aBuffer ); - - if( lowMemory ) - { - // return error. it's up to pccon/ftp plugin howto handle it.. - LOGGER_WRITE( "CSConFTP::PutFileObjectInitL() : low memory" ); - ret = KErrNoMemory; - } - } - - LOGGER_WRITE_1( "CSConFTP::PutFileObjectInitL( CObexBufObject*& aObject, CBufFlat*& aBuffer ) : returned %d", ret ); - return ret; - } - -void CSConFTP::CreateObexBufObjectL( CObexBufObject*& aObject, CBufFlat*& aBuffer ) - { - delete aObject; - aObject = NULL; - aObject = CObexBufObject::NewL( NULL ); - - delete aBuffer; - aBuffer = NULL; - - aBuffer = CBufFlat::NewL( KSConBufferSize ); - aBuffer->ResizeL( KSConBufferSize ); - - TObexFilenameBackedBuffer bufferdetails( *aBuffer, iTempFileName, - CObexBufObject::EDoubleBuffering ); - TRAPD( err, aObject->SetDataBufL( bufferdetails )); - if ( err == KErrNoMemory ) - { - LOGGER_WRITE( "KErrNoMemory, Using singe buffer strategy"); - // If fails, use singe buffer strategy to save RAM - TObexFilenameBackedBuffer lowMemBufferdetails( *aBuffer, iTempFileName, - CObexBufObject::ESingleBuffering ); - aObject->SetDataBufL( lowMemBufferdetails ); - } - } - -// ----------------------------------------------------------------------------- -// CSConFTP::PutFileObjectFinalizeL( CObexBufObject*& aObject ) -// Stores the relayed file object to inbox or file system. -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::PutFileObjectFinalizeL( CObexBufObject*& aObject ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - // if iPathName is not defined trying to save to inbox, no need to call IsCurrentVolumeOK() - if( iPathName.Length() > 0 && !IsCurrentVolumeOK() ) - { - // Memory card removed - LOGGER_WRITE( "CSConFTP::PutFileObjectFinalizeL() : disk err, return KErrNotFound" ); - return KErrNotFound; - } - else if ( iPathName.Length() + aObject->Name().Length() > KMaxFileName ) - { - LOGGER_WRITE( "CSConFTP::PutFileObjectFinalizeL() : Too long filename, return KErrBadName"); - return KErrBadName; - } - - TBool lowMemory = IsCurrentDiskSpaceBelowCritical(); - if ( lowMemory ) - { - LOGGER_WRITE( "CSConFTP::PutFileObjectFinalizeL() : Low memory, return KErrNoMemory"); - return KErrNoMemory; - } - - HBufC* fullPathBuf = HBufC::NewLC( KMaxFileName ); - TPtr fullPathPtr = fullPathBuf->Des(); - fullPathPtr.Copy( iPathName ); - fullPathPtr.Append( aObject->Name() ); - - // Save to inbox if path is not set. - if( iPathName.Length() == 0 ) - { - LOGGER_WRITE( "CSConFTP::PutFileObjectFinalizeL before SaveObjectToInbox" ); - ret = iSConInboxHandler->SaveObjToInboxL( aObject ); - LOGGER_WRITE_1( "CSConFTP::PutFileObjectFinalize SaveObjectToInbox returned %d", ret ); - } - else if( iPathName.CompareF( K_C_ROOT ) == 0 ) - { - // Saving to root of C:\ is not allowed - ret = KErrAccessDenied; - } - //Save to file system - else - { - TTime time = aObject->Time(); - - // UTC offset - time -= User::UTCOffset(); - - delete aObject; - aObject = NULL; - - ret = iSConFsHandler->SaveFileObjectL( fullPathPtr, time, - iTempFileName ); - } - - CleanupStack::PopAndDestroy( fullPathBuf ); - - LOGGER_WRITE_1( "CSConFTP::PutFileObjectFinalizeL( CObexBufObject*& aObject ) : returned %d", ret ); - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetPathL( const TPtrC aPath, const TUint8 aFlags ) -// Changes the current path. The path can point to inbox or file system -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::SetPathL( const TPtrC aPath, const TUint8 aFlags ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aPath: %S", &aPath ); - TInt ret( KErrNone ); - - if( ( aPath.Length() > 0 && aFlags != KSConSetPathRoot ) - || ( iPathName.Length() == KDriveLength && aFlags == KSConSetPathBack) ) - { - // check is current drive ok - if( !IsCurrentVolumeOK() ) - { - LOGGER_WRITE( "CSConFTP::SetPathL() : drive not found" ); - return KErrNotFound; - } - } - - ret = KErrNotFound; - - //path forward, deny access to forbidden directories and drives - if( aPath.Length() > 0 - && ( iPathName.Length() + aPath.Length() < KMaxFileName ) - && ( aFlags == KSConSetPathForward || aFlags == KSConSetPathDontCreate ) ) - { - ret = SetPathForwardL( aPath, aFlags ); - } - //path backward - else if( aFlags == KSConSetPathBack ) - { - ret = SetPathBackwardL( aPath ); - } - //path root - else if( aPath.Length() == 0 && aFlags == KSConSetPathRoot ) - { - LOGGER_WRITE( "CSConFTP::SetPathL() : KSConSetPathRoot" ); - if( iPathName.Length() > 0 ) - { - iPathName.Delete( 0, iPathName.Length() ); - } - iCurrentDrive = KErrNotFound; - ret = KErrNone; - } - - if( ret == KErrNone ) - { - // drive may have changed, update info - UpdateDriveTypeInfoL(); - } - - LOGGER_WRITE_1( "CSConFTP::CSConFTP::SetPathL( const TPtrC aPath, const TUint8 aFlags ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetPathForwardL( const TPtrC aPath, const TUint8 aFlags ) -// Set path forward -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::SetPathForwardL( const TPtrC aPath, const TUint8 aFlags ) - { - TRACE_FUNC_ENTRY; - TInt ret(KErrNone); - HBufC* fullPath = HBufC::NewLC( KMaxFileName ); - TPtr fullPathPtr = fullPath->Des(); - - if( iPathName.Length() == 0 ) - { - fullPathPtr.Copy( aPath ); - } - else - { - fullPathPtr.Copy( iPathName ); - fullPathPtr.Append( aPath ); - } - LOGGER_WRITE_1( "fullPathPtr: %S", &fullPathPtr ); - // now fullpath is new path - // check validity - if( fullPathPtr.Length() < 2 || fullPathPtr[1] != KDriveDelimiter ) - { - LOGGER_WRITE( "CSConFTP::SetPathForwardL() : not valid name" ); - CleanupStack::PopAndDestroy( fullPath ); - return KErrNotFound; - } - - if( fullPathPtr.CompareF( KSConAllowedPath ) == 0 ) - { - // Always access to PC Suite configuration file on ROM - LOGGER_WRITE( "CSConFTP::SetPathForwardL() : KSConAllowedPath" ); - iPathName.Copy( fullPathPtr ); - if( iPathName[iPathName.Length()-1] != KPathDelimiter ) - { - iPathName.Append( KPathDelimiter ); - } - - CleanupStack::PopAndDestroy( fullPath ); - return KErrNone; - } - - // check drive - TInt driveNumber; - TInt err = iFs.CharToDrive( fullPathPtr[0], driveNumber ); - if( err != KErrNone || !IsDriveVisible( driveNumber ) ) - { - LOGGER_WRITE( "CSConFTP::SetPathForwardL() : drive err" ); - CleanupStack::PopAndDestroy( fullPath ); - return KErrNotFound; - } - - // check folder and create it if needed - if( fullPathPtr.Length() > 2 ) - { - TBool isFolder = EFalse; - err = BaflUtils::IsFolder( iFs, fullPathPtr, isFolder ); - if( err != KErrNone ) - { - isFolder = EFalse; - } - LOGGER_WRITE_1( "CSConFTP::SetPathForwardL() IsFolder: %d", (TInt)isFolder ); - - if( !isFolder ) - { - //if "Don't create" is 1 - if( aFlags & 2 ) - { - ret = KErrNotFound; - } - else - { - CreateFolderL( fullPathPtr ); - ret = KErrNone; - } - } - else - { - ret = KErrNone; - } - } - else - { - ret = KErrNone; - } - - if( ret == KErrNone ) - { - iPathName.Copy( fullPathPtr ); - - if( iPathName[iPathName.Length()-1] != KPathDelimiter ) - { - iPathName.Append( KPathDelimiter ); - } - } - - CleanupStack::PopAndDestroy( fullPath ); - LOGGER_WRITE_1( "CSConFTP::SetPathForwardL() : end, ret: %d", ret ); - return ret; - - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetPathBackwardL( const TPtrC aPath ) -// Set path backward -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::SetPathBackwardL( const TPtrC aPath ) - { - TRACE_FUNC_ENTRY; - TInt ret(KErrNotFound); - if( iPathName.Length() == 0 ) - { - // already in root, exit - LOGGER_WRITE( "CSConFTP::SetPathBackwardL() : already in root" ); - LOGGER_WRITE_1( "CSConFTP::SetPathBackwardL() : end, ret: %d", ret ); - return ret; - } - TInt pos; - TBool isFolder(EFalse); - HBufC* fullPath = HBufC::NewLC( KMaxFileName ); - TPtr fullPathPtr = fullPath->Des(); - - //no directory/folder name - if( aPath.Length() == 0 ) - { - LOGGER_WRITE( "CSConFTP::SetPathBackwardL() : no new path, goto parent" ); - iPathName.Delete( iPathName.Length()-1, 1 ); - pos = iPathName.LocateReverse( KPathDelimiter ); - iPathName.Delete( pos+1, iPathName.Length()-pos ); - ret = KErrNone; - } - //if folder name - else if( aPath.Locate( KDriveDelimiter ) != 1 && iPathName.Length() > KDriveLength ) - { - LOGGER_WRITE( "CSConFTP::SetPathBackwardL() : goto parent and new path" ); - fullPathPtr.Copy( iPathName ); - fullPathPtr.Delete( fullPathPtr.Length()-1, 1 ); - pos = fullPathPtr.LocateReverse( KPathDelimiter ); - fullPathPtr.Delete( pos+1, fullPathPtr.Length()-pos ); - fullPathPtr.Append( aPath ); - - if( fullPathPtr.CompareF( KSConAllowedPath ) == 0 ) - { - // Always access to PC Suite configuration file on ROM - isFolder = ETrue; - } - else - { - TInt driveNumber; - TInt err = iFs.CharToDrive(fullPathPtr[0], driveNumber); - if( err != KErrNone ) - { - LOGGER_WRITE( "CSConFTP::SetPathForwardL() : drive err" ); - isFolder = EFalse; - } - else if( !IsDriveVisible(driveNumber) ) - { - isFolder = EFalse; - } - else - { - // drive ok, check folder. - err = BaflUtils::IsFolder( iFs, fullPathPtr, isFolder ); - if( err != KErrNone ) - { - isFolder = EFalse; - } - } - } - - if( isFolder ) - { - iPathName.Copy( fullPathPtr ); - - if( aPath.LocateReverse( KPathDelimiter ) != aPath.Length()-1 ) - { - iPathName.Append( KPathDelimiter ); - } - - ret = KErrNone; - } - else - { - ret = KErrNotFound; - } - - } - //drive - else if( aPath.Locate( KDriveDelimiter ) == 1 ) - { - fullPathPtr.Copy( aPath ); - if( fullPathPtr.LocateReverse( KPathDelimiter ) - != fullPathPtr.Length()-1 ) - { - fullPathPtr.Append( KPathDelimiter ); - } - - TFileName tempPath( KSConAllowedPath ); - tempPath.Append(KPathDelimiter); - if( fullPathPtr.CompareF( tempPath ) == 0 ) - { - // Always access to PC Suite configuration file on ROM - isFolder = ETrue; - } - else - { - TInt driveNumber; - TInt err = iFs.CharToDrive(fullPathPtr[0], driveNumber); - if( err != KErrNone ) - { - LOGGER_WRITE( "CSConFTP::SetPathForwardL() : drive err" ); - isFolder = EFalse; - } - else if( !IsDriveVisible(driveNumber) ) - { - isFolder = EFalse; - } - else - { - // drive ok, check folder. - err = BaflUtils::IsFolder( iFs, fullPathPtr, isFolder ); - if( err != KErrNone ) - { - isFolder = EFalse; - } - } - } - - if( isFolder ) - { - iPathName.Copy( fullPathPtr ); - - if( aPath.LocateReverse( KPathDelimiter ) != aPath.Length()-1 ) - { - iPathName.Append( KPathDelimiter ); - } - - ret = KErrNone; - } - else - { - ret = KErrNotFound; - } - } - CleanupStack::PopAndDestroy( fullPath ); - LOGGER_WRITE_1( "CSConFTP::SetPathBackwardL() : end, ret: %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::CreateFolderL( const TPtrC aFolderName ) -// Creates a new folder to file system -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::CreateFolderL( const TPtrC aFolderName ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFolderName: %S", &aFolderName ); - TInt ret( KErrNone ); - if( aFolderName.Length() == 0 ) - { - return KErrArgument; - } - - HBufC* pathBuf = HBufC::NewLC( KMaxFileName ); - TPtr pathBufPtr = pathBuf->Des(); - //absolute folder path - if( aFolderName.Length() > 1 && aFolderName[1] == KDriveDelimiter ) - { - if ( iPathName.Length()>0 ) - { - LOGGER_WRITE( "CSConFTP::CreateFolderL() : KErrBadName" ); - CleanupStack::PopAndDestroy( pathBuf ); - return KErrBadName; - } - pathBufPtr.Copy( aFolderName ); - } - else - { - pathBufPtr.Copy( iPathName ); - pathBufPtr.Append( aFolderName ); - } - - if( !iFs.IsValidName( pathBufPtr ) ) - { - ret = KErrBadName; - } - else - { - // check drive - TInt driveNumber; - ret = iFs.CharToDrive(pathBufPtr[0], driveNumber); - if( ret != KErrNone || !IsDriveVisible(driveNumber) ) - { - LOGGER_WRITE( "CSConFTP::CreateFolderL() : drive err" ); - ret = KErrNotFound; - } - } - - if ( ret == KErrNone ) - { - if( pathBufPtr.LocateReverse( KPathDelimiter ) != pathBufPtr.Length()-1 ) - { - pathBufPtr.Append( KPathDelimiter ); - } - ret = iSConFsHandler->CreateFolderL( pathBufPtr ); - } - - if( ret == KErrNone || ret == KErrAlreadyExists ) - { - ret = SetPathL( aFolderName, KSConSetPathForward ); - } - - CleanupStack::PopAndDestroy( pathBuf ); - - LOGGER_WRITE_1( "CSConFTP::CreateFolderL( const TPtrC aFolderName ) : returned %d", ret ); - - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::DeleteObjectL( const TPtrC aObjectName ) -// Deletes file/folder from inbox or file system -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::DeleteObjectL( const TPtrC aObjectName ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aObjectName: %S", &aObjectName ); - TInt ret( KErrNone ); - TFileName tmpTarget; - HBufC* targetBuf = HBufC::NewLC( KMaxFileName ); - TPtr target = targetBuf->Des(); - - //absolute folder path - if( aObjectName.Length() > 1 && aObjectName[1] == KDriveDelimiter ) - { - if ( iPathName.Length()>0 ) - { - LOGGER_WRITE( "CSConFTP::DeleteObjectL() : KErrBadName" ); - CleanupStack::PopAndDestroy( targetBuf ); - return KErrBadName; - } - target.Copy( aObjectName ); - } - else - { - target.Copy( iPathName ); - target.Append( aObjectName ); - } - - if( !iFs.IsValidName( target ) ) - { - ret = KErrBadName; - } - else - { - TInt driveNumber; - ret = iFs.CharToDrive(target[0], driveNumber); - if( ret != KErrNone || !IsDriveVisible(driveNumber) ) - { - LOGGER_WRITE( "CSConFTP::DeleteObjectL() : drive err" ); - ret = KErrNotFound; - } - } - - - if ( ret == KErrNone ) - { - ret = iSConFsHandler->DeleteObjectL( target ); - } - - CleanupStack::PopAndDestroy( targetBuf ); - - LOGGER_WRITE_1( "CSConFTP::DeleteObjectL( const TPtrC aObjectName ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::GetPath( TDes& aPath ) -// Gets the current path -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::GetPath( TDes& aPath ) - { - TRACE_FUNC; - aPath.Copy( iPathName ); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::AbortFileTransfer( CObexBufObject*& aObject ) -// Abort file transfer -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::AbortFileTransfer( CObexBufObject*& aObject ) - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - - if( iPathName.Length() == 0 ) - { - iSConInboxHandler->AbortInboxOperation( aObject ); - } - - //aObject has to be deleted, otherwise the temp file is locked - delete aObject; - aObject = NULL; - - err = iFs.Delete( iTempFileName ); - - LOGGER_WRITE_1( "CSConFTP::AbortFileTransfer( CObexBufObject*& aObject ) : iFs.Delete() err: %d", err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetProfile( TInt aProfile ) -// Set used transfer profile -// ----------------------------------------------------------------------------- -// -void CSConFTP::SetProfile( TSConProfile aProfile ) - { - TRACE_FUNC; - iProfile = aProfile; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetBackupStarted( TBool aValue ) -// Set backup status -// ----------------------------------------------------------------------------- -// -void CSConFTP::SetBackupStarted( TBool aValue ) - { - TRACE_FUNC; - iBackupStarted = aValue; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetUsedMedia( TSConUsedMedia aMedia ) -// Set the used media information -// ----------------------------------------------------------------------------- -// -void CSConFTP::SetUsedMedia( TSConUsedMedia aMedia ) - { - TRACE_FUNC; - iMedia = aMedia; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::IsCurrentDiskSpaceBelowCritical( TUint32 aFilesize ) -// Check is current disk space below critical level. -// ----------------------------------------------------------------------------- -// -TBool CSConFTP::IsCurrentDiskSpaceBelowCritical( TUint32 aFilesize ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFilesize: %d", aFilesize ); - TInt drive; - TInt err; - - if( iCurrentDrive != KErrNotFound ) - { - drive = iCurrentDrive; - } - else - { - LOGGER_WRITE( "CSConFTP::IsCurrentDiskSpaceBelowCritical() : drive not specified, use default drive" ); - err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, drive ); - if( err ) - { - LOGGER_WRITE_1( "CSConFTP::IsCurrentDiskSpaceBelowCriticaL() : DriveInfo::GetDefaultDrive err %d", err ); - return ETrue; //exit - } - } - - // check disk space - LOGGER_WRITE_1( "drive: %d", drive ); - TVolumeInfo volumeInfo; - err = iFs.Volume(volumeInfo, drive); - if( err != KErrNone ) - { - LOGGER_WRITE_1( "CSConFTP::IsCurrentDiskSpaceBelowCritical() : iFs.Volume err %d", err ); - LOGGER_WRITE( "CSConFTP::IsCurrentDiskSpaceBelowCritical() : End" ); - return ETrue; //exit - } - LOGGER_WRITE_1( "volumeInfo.iFree: %Ld", volumeInfo.iFree ); - TBool diskLevelCritical( EFalse ); - if ( volumeInfo.iFree - aFilesize <= iCriticalDiskLevel ) - { - // Can not write the data, there's not enough free space on disk. - diskLevelCritical = ETrue; - } - - LOGGER_WRITE_1( "CSConFTP::IsCurrentDiskSpaceBelowCritical() : ret %d", - (TInt)diskLevelCritical ); - return diskLevelCritical; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::ReadWBXMLDataL( CBufFlat*& aBuffer ) -// Read received ConML protocol packet -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::ReadWBXMLDataL( CBufFlat*& aBuffer ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - RFile file; - TInt fileSize; - - ret = file.Open( iFs, iTempFileName, EFileRead|EFileShareAny ); - CleanupClosePushL( file ); - if( ret == KErrNone ) - { - file.Size( fileSize ); - - delete aBuffer; - aBuffer = NULL; - - HBufC8* wbxmlDataBuf = HBufC8::NewLC( fileSize ); - TPtr8 wbxmlDataPtr = wbxmlDataBuf->Des(); - - file.Read( wbxmlDataPtr ); - - aBuffer = CBufFlat::NewL( KSConBufSize ); - aBuffer->ExpandL( 0, fileSize ); - aBuffer->Write( 0, wbxmlDataPtr ); - - CleanupStack::PopAndDestroy( wbxmlDataBuf ); - } - CleanupStack::PopAndDestroy( &file ); - LOGGER_WRITE_1( "CSConFTP::ReadWBXMLData( CBufFlat*& aBuffer ) : WBXML packet size: %d", fileSize ); - - LOGGER_WRITE_1( "CSConFTP::ReadWBXMLData( CBufFlat*& aBuffer ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::DeleteTempFile() -// Delete OBEX stack's temp file -// ----------------------------------------------------------------------------- -// -void CSConFTP::DeleteTempFile() - { - TRACE_FUNC_ENTRY; - iFs.Delete( iTempFileName ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::MoveFile() -// Move file/folder -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::MoveFile(const TDesC& aSource, const TDesC& aTarget) - { - TRACE_FUNC_ENTRY; - TInt err; - TFileName tmpSource; - TFileName tmpTarget; - err = GetAbsolutePath( aSource, tmpSource ); - if( err == KErrNone ) - { - err = GetAbsolutePath( aTarget, tmpTarget ); - } - - if( err == KErrNone ) - { - TInt sourceDrive; - TInt targetDrive; - - err = iFs.CharToDrive( tmpSource[0], sourceDrive ); - TInt err2 = iFs.CharToDrive( tmpTarget[0], targetDrive ); - - if( err != KErrNone || err2 != KErrNone - || !IsDriveVisible( sourceDrive ) - || !IsDriveVisible( targetDrive ) ) - { - // drive not visible to user - err = KErrNotFound; - } - } - - if( err == KErrNone ) - { - TRAP( err, - iSConFsHandler->DoCopyOrMoveFileL( tmpSource, tmpTarget, EFalse ) ); - } - - LOGGER_WRITE_1( "CSConFTP::MoveFile() : end, err: %d", err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::CopyFile() -// Copy file/folder -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::CopyFile(const TDesC& aSource, const TDesC& aTarget) - { - TRACE_FUNC_ENTRY; - TInt err; - TFileName tmpSource; - TFileName tmpTarget; - err = GetAbsolutePath( aSource, tmpSource ); - if (err == KErrNone) - { - err = GetAbsolutePath( aTarget, tmpTarget ); - } - - if( err == KErrNone ) - { - TInt sourceDrive; - TInt targetDrive; - - err = iFs.CharToDrive( tmpSource[0], sourceDrive ); - TInt err2 = iFs.CharToDrive( tmpTarget[0], targetDrive ); - - if( err != KErrNone || err2 != KErrNone - || !IsDriveVisible( sourceDrive ) - || !IsDriveVisible( targetDrive ) ) - { - // drive not visible to user - err = KErrNotFound; - } - } - - if (err == KErrNone) - { - TRAP( err, - iSConFsHandler->DoCopyOrMoveFileL( tmpSource, tmpTarget, ETrue ) ); - } - - LOGGER_WRITE_1( "CSConFTP::CopyFile() : end, ret: %d", err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetReadOnly() -// Set read-only permissions to file or folder -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::SetReadOnly(const TDesC& aTarget, const TBool aReadOnly) - { - TRACE_FUNC_ENTRY; - TInt err; - TFileName tmpTarget; - err = GetAbsolutePath( aTarget, tmpTarget ); - if( err != KErrNone ) - { - return err; - } - else - { - TInt targetDrive; - err = iFs.CharToDrive( tmpTarget[0], targetDrive ); - - if( err != KErrNone - || !IsDriveVisible( targetDrive ) ) - { - // drive not visible to user - return KErrNotFound; - } - } - - TBool isFolder(EFalse); - err = BaflUtils::IsFolder( iFs, tmpTarget, isFolder ); - if ( err == KErrNone && isFolder ) - { - tmpTarget.Append(KPathDelimiter); - } - if ( !iSConFsHandler->IsFolderVisible( tmpTarget ) ) - { - // folder is not visible to user - err = KErrAccessDenied; - } - else - { - if( aReadOnly ) - { - err = iFs.SetAtt( tmpTarget, KEntryAttReadOnly, KEntryAttArchive ); - } - else - { - err = iFs.SetAtt( tmpTarget, KEntryAttNormal, KEntryAttReadOnly ); - } - } - - LOGGER_WRITE_1( "CSConFTP::SetReadOnly() : ret: %d", err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::SetHidden() -// Set hidden permissions to file or folder -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::SetHidden( const TDesC& /*aTarget*/, const TBool /*aHidden*/ ) - { - // This is currently not supported. - LOGGER_WRITE("CSConFTP::SetHidden return KErrNotSupported"); - return KErrNotSupported; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::GetAbsolutePath() -// Get absolute path from relative file/folder -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::GetAbsolutePath( const TDesC& aFolderName, TDes &aFullPath ) - { - if (aFolderName.Length() == 0) - { - return KErrBadName; - } - //absolute folder path - if( aFolderName.Length() > 1 && aFolderName[1] == KDriveDelimiter ) - { - aFullPath.Copy( aFolderName ); - } - // relative to the root folder - else if( aFolderName[0] == KPathDelimiter ) - { - if( iPathName.Length() < 2 ) - { - return KErrBadName; - } - aFullPath.Copy( iPathName.Left(2) ); - aFullPath.Append( aFolderName ); - } - // relative to the current folder - else - { - aFullPath.Copy( iPathName ); - if( aFullPath.LocateReverse( KPathDelimiter ) != aFullPath.Length()-1 ) - { - aFullPath.Append( KPathDelimiter ); - } - aFullPath.Append( aFolderName ); - // no need to check internal root, because iPathName is real target. - } - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::CSConFTP() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConFTP::CSConFTP() : iProfile( EStandard ), iCurrentDrive( KErrNotFound ) - { - } - -// ----------------------------------------------------------------------------- -// CSConFTP::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConFTP::ConstructL() - { - TRACE_FUNC_ENTRY; - - iBuffer = CBufFlat::NewL( KSConBufSize ); - User::LeaveIfError( iFs.Connect() ); - iSConFsHandler = CSConFsHandler::NewL( iFs ); - iSConInboxHandler = CSConInboxHandler::NewL(); - - CRepository* repository = CRepository::NewLC( KCRUidDiskLevel ); - User::LeaveIfError( repository->Get( KDiskCriticalThreshold, iCriticalDiskLevel ) ); - CleanupStack::PopAndDestroy( repository ); - // inlcude package size - iCriticalDiskLevel += KPackageSize; - LOGGER_WRITE_1( "criticalLevel: %d", iCriticalDiskLevel ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::GetVolumeNameL() -// Get volume name -// ----------------------------------------------------------------------------- -// -TInt CSConFTP::GetVolumeNameL(const TInt aDriveNumber, TDes8& aVolumeName) - { - TRACE_FUNC_ENTRY; - TVolumeInfo volumeInfo; - TInt ret = iFs.Volume( volumeInfo, aDriveNumber ); - - if ( ret == KErrNone) - { - CnvUtfConverter::ConvertFromUnicodeToUtf8( aVolumeName, - volumeInfo.iName ); - //Replace special characters - for( TInt i = 0; i < aVolumeName.Length(); i++ ) - { - switch( aVolumeName[i] ) - { - case '&': - aVolumeName.Delete( i, 1 ); - aVolumeName.Insert( i, KReplace1 ); - break; - case '<': - aVolumeName.Delete( i, 1 ); - aVolumeName.Insert( i, KReplace2 ); - break; - case '>': - aVolumeName.Delete( i, 1 ); - aVolumeName.Insert( i, KReplace3 ); - break; - case '"': - aVolumeName.Delete( i, 1 ); - aVolumeName.Insert( i, KReplace4 ); - break; - case '\'': - aVolumeName.Delete( i, 1 ); - aVolumeName.Insert( i, KReplace5 ); - break; - default: - break; - } - } - - //No name - if( aVolumeName.Length() == 0 ) - { - LOGGER_WRITE( "Volume has no name, use default localized name" ); - //Read memory string and convert it - TFileName file( KSConResourceName ); - - BaflUtils::NearestLanguageFile( iFs, file ); - - CStringResourceReader* reader = CStringResourceReader::NewL( file ); - CleanupStack::PushL( reader ); - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, aDriveNumber, driveStatus ) ); - if( driveStatus & DriveInfo::EDriveRemovable ) - { - // read default MMC name - CnvUtfConverter::ConvertFromUnicodeToUtf8( aVolumeName, - reader->ReadResourceString( R_SECON_VALUE_MMC ) ); - } - else - { - // read default DEV name - CnvUtfConverter::ConvertFromUnicodeToUtf8( aVolumeName, - reader->ReadResourceString( R_SECON_VALUE_DEVICE ) ); - } - CleanupStack::PopAndDestroy( reader ); - } - } - LOGGER_WRITE_1("GetVolumeNameL returned: %d", ret); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConFTP::IsDriveVisible() -// Check is drive visible for user -// ----------------------------------------------------------------------------- -// -TBool CSConFTP::IsDriveVisible( const TInt aDriveNumber ) - { - TUint driveStatus; - TInt err = DriveInfo::GetDriveStatus( iFs, aDriveNumber, driveStatus); - if( err ) - { - LOGGER_WRITE_1( "CSConFTP::IsDriveVisible() : DriveInfo::GetDriveStatus err: %d", err ); - return EFalse; - } - if( driveStatus & DriveInfo::EDriveRemote ) - { - LOGGER_WRITE( "CSConFTP::IsDriveVisible() : remote drive" ); - return EFalse; - } - if( !(driveStatus & DriveInfo::EDriveUserVisible) ) - { - LOGGER_WRITE( "CSConFTP::IsDriveVisible() : not visible" ); - return EFalse; - } - if( !(driveStatus & DriveInfo::EDrivePresent ) ) - { - LOGGER_WRITE( "CSConFTP::IsDriveVisible() : not present" ); - return EFalse; - } - if( driveStatus & DriveInfo::EDriveCorrupt ) - { - LOGGER_WRITE( "CSConFTP::IsDriveVisible() : corrupted" ); - return EFalse; - } - else - { - return ETrue; - } - } - -// ----------------------------------------------------------------------------- -// CSConFTP::UpdateDriveTypeInfoL() -// Test is current volume still ok. -// ----------------------------------------------------------------------------- -// -TBool CSConFTP::IsCurrentVolumeOK() - { - if( iCurrentDrive == KErrNotFound ) - { - LOGGER_WRITE( "CSConFTP::IsCurrentVolumeOK() : not set" ); - return EFalse; - } - - TUint driveStatus; - TInt err = DriveInfo::GetDriveStatus( iFs, iCurrentDrive, driveStatus); - if( err ) - { - LOGGER_WRITE_1( "CSConFTP::IsCurrentVolumeOK() : DriveInfo::GetDriveStatus err: %d", err ); - return EFalse; - } - if( !(driveStatus & DriveInfo::EDrivePresent )) - { - LOGGER_WRITE( "CSConFTP::IsCurrentVolumeOK() : not present" ); - return EFalse; - } - if( driveStatus & DriveInfo::EDriveCorrupt ) - { - LOGGER_WRITE( "CSConFTP::IsCurrentVolumeOK() : corrupted" ); - return EFalse; - } - else - { - return ETrue; - } - } - -// ----------------------------------------------------------------------------- -// CSConFTP::UpdateDriveTypeInfoL() -// Updates drive information (iCurrentDrive and iCurrentDriveTypeNumber) -// ----------------------------------------------------------------------------- -// -void CSConFTP::UpdateDriveTypeInfoL() - { - TRACE_FUNC_ENTRY; - TInt driveNumber; - iCurrentDriveTypeNumber = 0; - - if( iPathName.Length() == 0 ) - { - LOGGER_WRITE( "CSConFTP::UpdateDriveTypeInfoL() : drive not specified" ); - iCurrentDrive = KErrNotFound; - return; - } - - User::LeaveIfError( iFs.CharToDrive(iPathName[0], driveNumber) ); - iCurrentDrive = driveNumber; - - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, iCurrentDrive, driveStatus ) ); - // if true, search internal drives, else search removable drives - TBool searchInternalDrives = (driveStatus & DriveInfo::EDriveInternal); - - TInt driveCount; - TDriveList driveList; - - User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount ) ); - - for( TInt i = EDriveA; i <= iCurrentDrive; i++ ) - { - if( driveList[i] ) - { - TUint driveStatus; - User::LeaveIfError( DriveInfo::GetDriveStatus( iFs, i, driveStatus ) ); - - if( !(driveStatus & DriveInfo::EDrivePresent ) - || driveStatus & DriveInfo::EDriveCorrupt ) - { - LOGGER_WRITE( "not present or corrupted" ); - continue; - } - - if( driveStatus & DriveInfo::EDriveInternal ) - { - if( searchInternalDrives ) - { - iCurrentDriveTypeNumber++; - } - } - else if( driveStatus & DriveInfo::EDriveRemovable ) - { - if( !searchInternalDrives ) - { - iCurrentDriveTypeNumber++; - } - } - } - } - TRACE_FUNC_EXIT; - } - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/src/sconftp.rss --- a/connectivitymodules/SeCon/services/ftp/src/sconftp.rss Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Resource file for sconftp.dll -* -*/ - - -// ----------------------------------------------------------------------------- -// RESOURCE IDENTIFIER -// ----------------------------------------------------------------------------- -// -NAME SFTP - -// ----------------------------------------------------------------------------- -// INCLUDE FILES -// ----------------------------------------------------------------------------- -// -#include -#include - -#include - - -RESOURCE RSS_SIGNATURE { } - -RESOURCE TBUF r_secon_value_device { buf = qtn_secon_device; } -RESOURCE TBUF r_secon_value_mmc { buf = qtn_secon_mmc; } -RESOURCE TBUF r_secon_value_mass_storage { buf = qtn_secon_mass_storage; } -RESOURCE TBUF r_secon_data_folder { buf = qtn_secon_data_folder; } -RESOURCE TBUF r_secon_unknown_supplier { buf = qtn_secon_unknown_supplier; } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/ftp/src/sconinboxhandler.cpp --- a/connectivitymodules/SeCon/services/ftp/src/sconinboxhandler.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* -* 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: File Transfer Controller implementation -* -*/ - - -// INCLUDE FILES -#include -#include // BT Message Uid - -#include "sconinboxhandler.h" -#include "debug.h" -#include "sconconsts.h" - - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConInboxHandler* CSConInboxHandler::NewL() - { - TRACE_FUNC_ENTRY; - CSConInboxHandler* self = new (ELeave) CSConInboxHandler(); - - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::~CSConInboxHandler() -// Default destructor -// ----------------------------------------------------------------------------- -// -CSConInboxHandler::~CSConInboxHandler() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::CreateInboxAttachmentL( CObexBufObject*& aObject, -// CBufFlat*& aBuffer ) -// Creates an attachment to device's Inbox -// ----------------------------------------------------------------------------- -// -TInt CSConInboxHandler::CreateInboxAttachmentL( CObexBufObject*& aObject, - CBufFlat*& aBuffer ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - iDrive = GetMessageCenterDriveL(); - - delete aObject; - aObject = CObexBufObject::NewL( NULL ); - - iFile = RFile(); - - TRAP( ret, TObexUtilsMessageHandler::CreateInboxAttachmentL( aObject, - KUidMsgTypeBt, iMsvIdParent, iFile ) ); - - if( aBuffer ) - { - aBuffer->Reset(); - delete aBuffer; - } - - aBuffer = CBufFlat::NewL( KSConBufferSize ); - aBuffer->ResizeL( KSConBufferSize ); - - TObexRFileBackedBuffer bufferdetails( *aBuffer, iFile, - CObexBufObject::EDoubleBuffering ); - aObject->SetDataBufL( bufferdetails ); - LOGGER_WRITE_1( "CSConInboxHandler::CreateInboxAttachmentL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::SaveObjToInboxL( CObexBufObject*& aObject ) -// Saves the object to the Inbox -// ----------------------------------------------------------------------------- -// -TInt CSConInboxHandler::SaveObjToInboxL( CObexBufObject*& aObject ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - if( iDrive == EDriveE ) - { - ret = TObexUtilsMessageHandler::GetMmcFileSystemStatus(); - LOGGER_WRITE_1( "GetMmcFileSystemStatus returned %d", ret ); - } - else - { - ret = TObexUtilsMessageHandler::GetFileSystemStatus(); - LOGGER_WRITE_1( "GetFileSystemStatus returned %d", ret ); - } - - if( ret == KErrNone ) - { - TInt tempDrive = GetMessageCenterDriveL(); - - if( tempDrive == iDrive ) - { - LOGGER_WRITE_1( "before SaveObjToInboxL in SaveObjToInboxL %d", ret ); - TRAP( ret, TObexUtilsMessageHandler::SaveObjToInboxL( aObject, - iFile, iMsvIdParent ) ); - LOGGER_WRITE_1( "after SaveObjToInboxL in SaveObjToInboxL %d", ret ); - } - else - { - ret = KErrGeneral; - } - - if( ret != KErrNone ) - { - LOGGER_WRITE_1( "before RemoveInboxEntriesL in SaveObjToInboxL %d", ret ); - TObexUtilsMessageHandler::RemoveInboxEntriesL( aObject, - iMsvIdParent ); - LOGGER_WRITE_1( "after RemoveInboxEntriesL in SaveObjToInboxL %d", ret ); - } - } - - LOGGER_WRITE_1( "CSConInboxHandler::SaveObjToInboxL( CObexBufObject* aObject ) : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::AbortInboxOperation( CObexBufObject*& aObject ) -// Aborts the storing operation -// ----------------------------------------------------------------------------- -// -TInt CSConInboxHandler::AbortInboxOperation( CObexBufObject*& aObject ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TRAP( ret, TObexUtilsMessageHandler::RemoveInboxEntriesL( aObject, - iMsvIdParent ) ); - LOGGER_WRITE_1( "CSConInboxHandler::AbortInboxOperation() returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::GetMessageCenterDriveL() -// Returns the current message center drive -// ----------------------------------------------------------------------------- -// -TInt CSConInboxHandler::GetMessageCenterDriveL() - { - TRACE_FUNC_ENTRY; - TInt drive; - CMsvSession* msvSession = CMsvSession::OpenSyncL( *this ); - CleanupStack::PushL( msvSession ); - TDriveUnit driveUnit = msvSession->CurrentDriveL(); - drive = driveUnit.operator TInt(); - CleanupStack::PopAndDestroy( msvSession ); - LOGGER_WRITE_1( "CSConInboxHandler::GetMessageCenterDriveL() returned %d", drive ); - return drive; - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::HandleSessionEventL( TMsvSessionEvent aEvent, -// TAny* aArg1, -// TAny* aArg2, -// TAny* aArg3 ) -// Implementation of MMsvSessionObserver::HandleSessionEventL -// ----------------------------------------------------------------------------- -// -void CSConInboxHandler::HandleSessionEventL( TMsvSessionEvent /*aEvent*/, - TAny* /*aArg1*/, - TAny* /*aArg2*/, - TAny* /*aArg3*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConInboxHandler::CSConInboxHandler() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConInboxHandler::CSConInboxHandler() - { - } - -// End of file - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/oviaccounthandler/inc/sconoviaccounthandler.h --- a/connectivitymodules/SeCon/services/oviaccounthandler/inc/sconoviaccounthandler.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 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: CSconOviAccountHandler header file -* -*/ - - -#ifndef _SCONOVIACCOUNTHANDLER_H_ -#define _SCONOVIACCOUNTHANDLER_H_ - -#include -#include - -_LIT(KSconOviAccountHandlerDllName, "sconoviaccounthandler.dll"); -const TUid KSconOviAccountHandlerDllUid={0x10009D8D}; - -class CWSOviAccountManager; - -/** - * CSconOviAccountHandler provides Ovi account information. - * Dynamically loadable dll. - */ -class CSconOviAccountHandler : public CBase -{ - public: - static CSconOviAccountHandler* NewL(); - ~CSconOviAccountHandler(); - - /** - * Reads account information from device - * @param aAccountInfoStream stream where to export account details. - * @leave KErrNotFound if account information does not exist. - */ - virtual void GetOviAccountDetailsL( RWriteStream& aAccountInfoStream ); - - private: - void ConstructL(); - - private: // Data - CWSOviAccountManager* iOviAccountManager; - -}; - -IMPORT_C CSconOviAccountHandler* CreateCSconOviAccountHandlerL(); -typedef CSconOviAccountHandler* (*TSConCreateCSconOviAccountHandlerFunc) (); - -#endif // _SCONOVIACCOUNTHANDLER_H_ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/bld/bld.inf --- a/connectivitymodules/SeCon/services/pcd/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2002-2010 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: -* This file provides the information required for building the -* whole of a SConPCD -* -*/ - - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -./sbeconfig.xml Z:/private/10202D56/sbeconfig.xml - -PRJ_MMPFILES -sconpcd.mmp - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/services/pcd/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?CreateCSConPCDL@@YAPAVCSConPCD@@XZ @ 1 NONAME ; class CSConPCD * CreateCSConPCDL(void) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/bld/def/eabiuu.def --- a/connectivitymodules/SeCon/services/pcd/bld/def/eabiuu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _Z15CreateCSConPCDLv @ 1 NONAME - _ZTI8CSConPCD @ 2 NONAME ; ## - _ZTV8CSConPCD @ 3 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/bld/sbeconfig.xml --- a/connectivitymodules/SeCon/services/pcd/bld/sbeconfig.xml Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/bld/sconpcd.mmp --- a/connectivitymodules/SeCon/services/pcd/bld/sconpcd.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* 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: PC Connectivity Signaling Module -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include -#include - -VENDORID VID_DEFAULT - -CAPABILITY CAP_GENERAL_DLL - -TARGETPATH sys/bin - -TARGET sconpcd.dll -TARGETTYPE DLL -UID 0x10009D8D 0x101F968B - -#if defined(ARMCC) -DEFFILE ./def/eabiu -#elif defined(WINSCW) -DEFFILE ./def/bwinscw -#elif defined(WINS) -DEFFILE ./def/bwins -#elif defined(ARM) -DEFFILE ./def/bmarm -#endif - -SOURCEPATH ../src -SOURCE sconpcd.cpp -SOURCE sconqueue.cpp -SOURCE sconinstqueue.cpp -SOURCE sconbrqueue.cpp -SOURCE sconinstaller.cpp -SOURCE sconbackuprestore.cpp -SOURCE sconsbeclient.cpp -SOURCE sconpcdutility.cpp -SOURCE sconmetadata.cpp -SOURCE sconvideoparser.cpp -SOURCE sconsynchandler.cpp -SOURCE cscontimeout.cpp - -SOURCEPATH ../../../common/conmltask/src -SOURCE sconconmltask.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../../inc -USERINCLUDE ../../../common/conmltask/inc -USERINCLUDE ../../../clients/syncclient/inc - -// Default system include paths -APP_LAYER_SYSTEMINCLUDE - - -LIBRARY euser.lib -LIBRARY swinstcli.lib -LIBRARY sbeclient.lib -LIBRARY sisregistryclient.lib -LIBRARY javaregistryclient.lib -LIBRARY platformenv.lib -LIBRARY efsrv.lib -LIBRARY sysutil.lib -LIBRARY commonengine.lib // For resource reader -LIBRARY WidgetRegistryClient.lib -LIBRARY metadatautility.lib -LIBRARY exiflib.lib -LIBRARY charconv.lib -LIBRARY caf.lib // for Content Access -LIBRARY MediaClientVideo.lib // for CVideoPlayerUtility -LIBRARY ws32.lib // for RWsSession -LIBRARY TNEEngine.lib // for CTNEVideoClipInfo -LIBRARY ImageConversion.lib // for CImageEncoder -LIBRARY MMFControllerFramework.lib // for CMMFMetaDataEntry -LIBRARY bafl.lib // for BaflUtils -LIBRARY ecom.lib -LIBRARY estor.lib // CDictionaryFileStore -LIBRARY sconsyncclient.lib -LIBRARY smlstoreformat.lib -LIBRARY centralrepository.lib -DEBUGLIBRARY flogger.lib -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/cscontimeout.h --- a/connectivitymodules/SeCon/services/pcd/inc/cscontimeout.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 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: CSconTimeOut declaration -* -*/ - - -#ifndef CSCONTIMEOUT_H -#define CSCONTIMEOUT_H - -#include // For CActive, link against: euser.lib -#include // For RTimer, link against: euser.lib - -class MTimeOutObserver - { -public: - virtual void TimeOut() = 0; - }; - -NONSHARABLE_CLASS( CSconTimeOut ) : public CActive - { -public: - // Cancel and destroy - ~CSconTimeOut(); - static CSconTimeOut* NewL( MTimeOutObserver& aTimeOutObserver ); - -public: - // Function for making the timeout request - void Start(TTimeIntervalMicroSeconds32 aDelay); - -private: - CSconTimeOut( MTimeOutObserver& aTimeOutObserver ); - void ConstructL(); - -private: // From CActive - void RunL(); - void DoCancel(); - TInt RunError(TInt aError); - -private: - RTimer iTimer; // Provides async timing service - MTimeOutObserver& iTimeOutObserver; - }; - -#endif // CSCONTIMEOUT_H diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconbackuprestore.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconbackuprestore.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: CSConBackupRestore header file -* -*/ - - -#ifndef _SCONBACKUPRESTORE_H_ -#define _SCONBACKUPRESTORE_H_ - -// INCLUDES - -#include -#include - -class CSConSBEClient; -class CSConBackupRestoreQueue; -class RFs; - -//============================================================ -// Class CSConBackupRestore declaration -//============================================================ -NONSHARABLE_CLASS( CSConBackupRestore ): public CActive - { - public: - /** - * Two-phase constructor - * @param aQueue The address of CSConBackupRestoreQueue - * @param aMaxObjectSize Max object size - * @param aFs aReference to RFs connection. - * @return CSConBackupRestore instance - */ - static CSConBackupRestore* NewL( - CSConBackupRestoreQueue* aQueue, - const TInt aMaxObjectSize, RFs& aFs ); - /** - * Destructor - * @return none - */ - ~CSConBackupRestore(); - - /** - * Starts backup-restore task - * @param aTaskId The task number - * @return none - */ - void StartBackupRestore( TInt aTaskId ); - /** - * Stops executing backup-restore task - * @param aTaskId - * @return none - */ - void StopBackupRestore( TInt aTaskId ); - /** - * Resets backup - * @return none - */ - void Reset(); - - /** - * Returns the active status of the backup-restore - * @return ETrue if backup-restore is active, else EFalse - */ - TBool BackupRestoreActive() const; - - private: - /** - * Constructor - * @param aQueue The address of CSConBackupRestoreQueue - * @param aFs aReference to RFs connection. - * @return none - */ - CSConBackupRestore( CSConBackupRestoreQueue* aQueue, RFs& aFs ); - /** - * Initializes member data - * @param aMaxObjectSize Max object size - * @return none - */ - void ConstructL( const TInt aMaxObjectSize ); - /** - * Implementation of CActive::DoCancel() - * @return none - */ - void DoCancel(); - /** - * Implementation of CActive::RunL() - * @return none - */ - void RunL(); - - private: - CSConBackupRestoreQueue* iQueue; - CSConSBEClient* iSBEClient; - TInt iCurrentTask; - TInt iMaxObjectSize; - TBool iBackupRestoreActive; - RFs& iFs; - }; - -#endif // _SCONBACKUPRESTORE_H_ - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconbrqueue.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconbrqueue.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: Backup-Restore Queue header file -* -*/ - - -#ifndef _SCONBRQUEUE_H_ -#define _SCONBRQUEUE_H_ - -#include "sconqueue.h" - -class CSConTaskQueue; - -//============================================================ -// Class CSConBackupRestoreQueue declaration -//============================================================ -NONSHARABLE_CLASS ( CSConBackupRestoreQueue ) : public CActive, public CSConTaskQueue - { - public: - /** - * Two-phase constructor - * @param aMaxObjectSize Max object size - * @param aFs aReference to RFs connection. - * @return CSConBackupRestoreQueue instance - */ - static CSConBackupRestoreQueue* NewL( const TInt aMaxObjectSize, RFs& aFs ); - /** - * Destructor - * @return CSConBackupRestoreQueue instance - */ - ~CSConBackupRestoreQueue(); - /** - * Adds a new task to queue - * @param aNewTask A new task to be added - * @param aTaskId The task number - * @return KErrNone if no errors, else system wide error codes - */ - TInt AddNewTask( CSConTask*& aNewTask, TInt aTaskId ); - /** - * Cancels a task - * @param aTask The task number - * @param aAllTasks If ETrue => cancel all tasks - * @param aStatus The reply - * @return none - */ - void CancelTask( TInt aTask, TBool aAllTasks ); - /** - * Resets the queue - * @return none - */ - void Reset(); - /** - * An address pointer to another queue - * @param aTaskQueue The address to another queue - * @return none - */ - virtual void QueueAddress( CSConInstallerQueue*& aTaskQueue ); - /** - * Returns the task type - * @param aTaskId The task number - * @return task type - */ - TSConMethodName GetTaskMethodL( TInt aTaskId ); - - private: - /** - * Constructor - * @return none - */ - CSConBackupRestoreQueue(); - /** - * Initializes member data - * @param aMaxObjectSize Max object size - * @param aFs aReference to RFs connection. - * @return none - */ - void ConstructL( const TInt aMaxObjectSize, RFs& aFs ); - /** - * Polls queue - * @return none - */ - void PollQueue(); - /** - * Starts queue polling - * @return none - */ - void StartQueue(); - /** - * Stops queue polling - * @return none - */ - void StopQueue(); - /** - * Implementation of CActive::DoCancel() - * @return none - */ - void DoCancel(); - /** - * Implementation of CActive::RunL() - * @return none - */ - void RunL(); - - private: - CSConBackupRestore* iBackupRestore; - CSConInstallerQueue* iInstQueueAddress; - }; - - -#endif - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconinstaller.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconinstaller.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* 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: CSConAppInstaller header file -* -*/ - - -#ifndef _SCONINSTALLER_H_ -#define _SCONINSTALLER_H_ - -// INCLUDES - -#include -#include -#include - -#include "sconinstqueue.h" - -class CSConUninstall; - -//============================================================ -// Class CSConAppInstaller declaration -//============================================================ -NONSHARABLE_CLASS ( CSConAppInstaller ): public CActive - { - public: - /** - * Constructor - * @param aQueue The address of CSConInstallerQueu - * @return none - */ - CSConAppInstaller( CSConInstallerQueue* aQueue, RFs& aFs ); - - /** - * Destructor - * @return none - */ - ~CSConAppInstaller(); - - /** - * Starts the installer task - * @param aTaskId Task number - * @return none - */ - void StartInstaller( TInt& aTaskId ); - /** - * Stops the installer task - * @return none - */ - void StopInstaller( TInt& aTaskId ); - - /** - * Returns the active status of the installer - * @return ETrue if installer is active, else EFalse - */ - TBool InstallerActive() const; - - private: - /** - * Implementation of CActive::DoCancel() - * @return none - */ - void DoCancel(); - /** - * Implementation of CActive::RunL() - * @return none - */ - void RunL(); - /** - * Executes ListInstalledApps task - * @return none - */ - void ProcessListInstalledAppsL(); - /** - * Execures UnInstall task - * @param CSConUninstall uninstall params - * @return none - */ - void ProcessUninstallL( const CSConUninstall& aUninstallParams ); - - void UninstallSisL( const CSConUninstall& aUninstallParams ); - void UninstallJavaL( const TUid& aUid, const TSConInstallMode aMode ); - void UninstallWidget( const TUid& aUid, const TSConInstallMode aMode ); - void DeleteFile( const TDesC& aPath ); - - private: - enum TInstallerState - { - EIdle = 0, - EInstalling, - ESilentInstalling, - EUninstalling, - ESilentUninstalling, - ECustomUninstalling, - ESilentCustomUnistalling, - EListingInstalledApps - }; - TInstallerState iInstallerState; - CSConInstallerQueue* iQueue; // Not owned - SwiUI::RSWInstLauncher iSWInst; - SwiUI::TInstallOptions iOptions; - SwiUI::TInstallOptionsPckg iOptionsPckg; - TInt iCurrentTask; - RFs& iFs; - }; - -#endif // _SCONINSTALLER_H_ - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconinstqueue.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconinstqueue.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: Installer Queue header file -* -*/ - - -#ifndef _SCONINSTQUEUE_H_ -#define _SCONINSTQUEUE_H_ - -#include "sconqueue.h" - - -//============================================================ -// Class CSConInstallerQueue declaration -//============================================================ -NONSHARABLE_CLASS ( CSConInstallerQueue ): public CActive, public CSConTaskQueue - { - public: - /** - * Two-phase constructor - * @return CSConInstallerQueue instance - */ - static CSConInstallerQueue* NewL( RFs& aFs ); - /** - * Destructor - * @return none - */ - ~CSConInstallerQueue(); - - /** - * Cancels a task - * @param aTask The task number - * @param aAllTasks If ETrue => cancel all tasks - * @param aStatus The reply - * @return none - */ - void CancelTask( TInt aTask, TBool aAllTasks ); - - /** - * An address pointer to another queue - * @param aTaskQueue The address to another queue - * @return none - */ - void QueueAddress( CSConBackupRestoreQueue*& aTaskQueue ); - - private: - /** - * Constructor - * @return none - */ - CSConInstallerQueue( RFs& aFs ); - /** - * Initializes member data - * @return none - */ - void ConstructL(); - /** - * Polls queue - * @return none - */ - void PollQueue(); - /** - * Starts queue polling - * @return none - */ - void StartQueue(); - /** - * Stops queue polling - * @return none - */ - void StopQueue(); - /** - * Implementation of CActive::DoCancel() - * @return none - */ - void DoCancel(); - /** - * Implementation of CActive::RunL() - * @return none - */ - void RunL(); - - private: - CSConAppInstaller* iInstaller; - CSConBackupRestoreQueue* iBRQueueAddress; - RFs& iFs; - }; - - -#endif - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconmetadata.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconmetadata.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: SConMetadata header file -* -*/ - - -#ifndef _SCONMETADATA_H_ -#define _SCONMETADATA_H_ - -#include - -class CSConTask; -class CExifRead; -class CExifTag; -//============================================================ -// Class CSConMetadata declaration -//============================================================ -NONSHARABLE_CLASS( SConMetadata ) - { - public: - - /** - * Start processing metadata task - * @param aTask used task - * @param aFs aReference to RFs connection. - * @return none - */ - static void ProcessTask( CSConTask& aTask, RFs& aFs ); - - private: - - /** - * Get audio metadata to task - * @return none - */ - static void GetAudioMetadataL( CSConTask& aTask ); - - /** - * Get video metadata to task - * @param aFs aReference to RFs connection. - * @return none - */ - static void GetVideoMetadataL( CSConTask& aTask, RFs& aFs ); - - /** - * parse exif field - * @return HBufC8* parsed data. Leaves if not found - */ - static HBufC8* GetExifTagL( CExifRead* aReader, const TUint8 aTagID ) ; - - /** - * Parse TUint32 value from aData - * @return TUint32 value - */ - static TUint32 ReadTUint32( const TDesC8& aData ); - - /** - * Read data from file - * @param aFs aReference to RFs connection. - * @return file data - */ - static HBufC8* GetFileDataLC( const TDesC& aFilename, RFs& aFs ); - - /** - * Get exif metadata to task - * @param aFs aReference to RFs connection. - * @return none - */ - static void ReadExifDataL( CSConTask& aTask, RFs& aFs ); - - /** - * Convert latidute/longitude tag to TReal64 value - * @return KErrNone if successfully converted - */ - static TInt ConvertRationalTag( const CExifTag& aTag, TDes& aPosDegrees ); - - /** - * Get latidute value from Exif - * @param aExifRead ExifReader used to read - * @param aLatitude readed latidute - * @return KErrNone if found - */ - static TInt GetExifGPSLatitudeL( CExifRead& aExifRead, TDes& aLatitude ); - - /** - * Get longitude value from Exif - * @param aExifRead ExifReader used to read - * @param aLongitude readed longitude - * @return KErrNone if found - */ - static TInt GetExifGPSLongitudeL( CExifRead& aExifRead, TDes& aLongitude ); - - /** - * Get altidute value from Exif - * @param aExifRead ExifReader used to read - * @param aAltidute readed altidute - * @return KErrNone if found - */ - static TInt GetExifGPSAltiduteL( CExifRead& aExifRead, TDes& aAltidute ); - - /** - * Appends data field to buffer - * @return none - */ - static void AppendUtf8DataFieldL( CBufFlat* aBuffer, const TPtrC aAppendData, - const TUint8 aFieldId ); - - /** - * Appends data field to buffer - * @return none - */ - static void AppendByteDataFieldL( CBufFlat* aBuffer, const TPtrC8 aAppendData, - const TUint8 aFieldId ); - - /** - * Writes TUint32 value to buffer - * @return none - */ - static void WriteTUint32( CBufFlat* aBuffer, TInt offset, TUint32 aValue ); - - /** - * Appends data field to buffer - * @return none - */ - static void AppendTUintDataFieldL( CBufFlat* aBuffer, TUint32 aValue, - const TUint8 aFieldId ); - - /** - * Get AudioFieldId - * @return TUint8 - */ - static TUint8 AudioFieldId( const TMetaDataFieldId fieldId ); - - }; - -#endif // _SCONMETADATA_H_ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconmetadatafielddefs.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconmetadatafielddefs.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -/* -* Copyright (c) 2008 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: Metadata field definitions -* -*/ - - -#ifndef _SCONMETADATAFIELDDEFS_H_ -#define _SCONMETADATAFIELDDEFS_H_ - -// Content type header -const TUint8 KSconMetadataHeaderAudio( 0x01 ); -const TUint8 KSconMetadataHeaderExif ( 0x02 ); -const TUint8 KSconMetadataHeaderVideo( 0x03 ); - -const TUint8 KSconMetadataHeaderVersion ( 0x02 ); // format version = 2 - -// fields for audio -const TUint8 KSconAudioID3Version ( 0x01 ); -const TUint8 KSconAudioTitle ( 0x02 ); -const TUint8 KSconAudioArtist ( 0x03 ); -const TUint8 KSconAudioAlbum ( 0x04 ); -const TUint8 KSconAudioYear ( 0x05 ); -const TUint8 KSconAudioComment ( 0x06 ); -const TUint8 KSconAudioAlbumTrack ( 0x07 ); -const TUint8 KSconAudioGenre ( 0x08 ); -const TUint8 KSconAudioComposer ( 0x09 ); -const TUint8 KSconAudioCopyright ( 0x0a ); -const TUint8 KSconAudioOriginalArtist( 0x0b ); -const TUint8 KSconAudioUrl ( 0x0c ); -const TUint8 KSconAudioUserUrl ( 0x0d ); -const TUint8 KSconAudioJpeg ( 0x0e ); -const TUint8 KSconAudioVendor ( 0x0f ); -const TUint8 KSconAudioRating ( 0x10 ); -const TUint8 KSconAudioUniqueFileIdentifier( 0x11 ); -const TUint8 KSconAudioDuration ( 0x12 ); -const TUint8 KSconAudioDate ( 0x13 ); -const TUint8 KSconAudioUnsyncLyrics ( 0x14 ); -const TUint8 KSconAudioProtected ( 0x15 ); - -// fields for exif -const TUint8 KSconExifThumbnail ( 0x01 ); -const TUint8 KSconExifDescription ( 0x02 ); -const TUint8 KSconExifMake ( 0x03 ); -const TUint8 KSconExifModel ( 0x04 ); -const TUint8 KSconExifDateTime ( 0x05 ); -const TUint8 KSconExifSoftware ( 0x06 ); -const TUint8 KSconExifCopyright ( 0x07 ); -const TUint8 KSconExifOrientation ( 0x08 ); -const TUint8 KSconExifXResolution1 ( 0x09 ); -const TUint8 KSconExifXResolution2 ( 0x0a ); -const TUint8 KSconExifYResolution1 ( 0x0b ); -const TUint8 KSconExifYResolution2 ( 0x0c ); -const TUint8 KSconExifResolutionUnit ( 0x0d ); -const TUint8 KSconExifYCbCrPositioning ( 0x0e ); -const TUint8 KSconExifIsoSpeedRatings ( 0x0f ); -const TUint8 KSconExifDateTimeOriginal ( 0x10 ); -const TUint8 KSconExifDateTimeDigitized ( 0x11 ); -const TUint8 KSconExifMakerNote ( 0x12 ); -const TUint8 KSconExifUserComment ( 0x13 ); -const TUint8 KSconExifRelatedSoundFile ( 0x14 ); -const TUint8 KSconExifExposureTime1 ( 0x15 ); -const TUint8 KSconExifExposureTime2 ( 0x16 ); -const TUint8 KSconExifComponentsConfiguration ( 0x17 ); -const TUint8 KSconExifFlash ( 0x18 ); -const TUint8 KSconExifColorSpace ( 0x19 ); -const TUint8 KSconExifPixelXDimension ( 0x1a ); -const TUint8 KSconExifPixelYDimension ( 0x1b ); -const TUint8 KSconExifExposureMode ( 0x1c ); -const TUint8 KSconExifWhiteBalance ( 0x1d ); -const TUint8 KSconExifSceneCaptureType ( 0x1e ); -const TUint8 KSconExifExposureProgram ( 0x1f ); -const TUint8 KSconExifApertureValue1 ( 0x20 ); -const TUint8 KSconExifApertureValue2 ( 0x21 ); -const TUint8 KSconExifExposureBiasValue1 ( 0x22 ); -const TUint8 KSconExifExposureBiasValue2 ( 0x23 ); -const TUint8 KSconExifMeteringMode ( 0x24 ); -const TUint8 KSconExifLightSource ( 0x25 ); -const TUint8 KSconExifFileSource ( 0x26 ); -const TUint8 KSconExifDigitalZoomRatio1 ( 0x27 ); -const TUint8 KSconExifDigitalZoomRatio2 ( 0x28 ); -const TUint8 KSconExifContrast ( 0x29 ); -const TUint8 KSconExifSaturation ( 0x2a ); -const TUint8 KSconExifSharpness ( 0x2b ); -const TUint8 KSconExifExifVersion ( 0x2c ); -const TUint8 KSconExifFlashPixVersion ( 0x2d ); -const TUint8 KSconExifThumbXResolution1 ( 0x2e ); -const TUint8 KSconExifThumbXResolution2 ( 0x2f ); -const TUint8 KSconExifThumbYResolution1 ( 0x30 ); -const TUint8 KSconExifThumbYResolution2 ( 0x31 ); -const TUint8 KSconExifThumbResolutionUnit ( 0x32 ); -const TUint8 KSconExifThumbCompression ( 0x33 ); -const TUint8 KSconExifThumbJpegInterchangeFormat ( 0x34 ); -const TUint8 KSconExifThumbJpegInterchangeFormatLength ( 0x35 ); -const TUint8 KSconExifShutterSpeedValue1 ( 0x36 ); -const TUint8 KSconExifShutterSpeedValue2 ( 0x37 ); -const TUint8 KSconExifBrightnessValue1 ( 0x38 ); -const TUint8 KSconExifBrightnessValue2 ( 0x39 ); -const TUint8 KSconExifCustomRendered ( 0x3a ); -const TUint8 KSconExifGainControl ( 0x3b ); -const TUint8 KSconExifGpsVersion ( 0x3c ); -const TUint8 KSconExifGPSLatitude ( 0x3d ); -const TUint8 KSconExifGPSLongitude ( 0x3e ); -const TUint8 KSconExifGPSAltitude ( 0x3f ); -const TUint8 KSconExifBitDepth ( 0x40 ); - -// fields for video -const TUint8 KSconVideoFormat ( 0x01 ); -const TUint8 KSconVideoFrameRate ( 0x02 ); -const TUint8 KSconVideoFrameSizeWidth ( 0x03 ); -const TUint8 KSconVideoFrameSizeHeight ( 0x04 ); -const TUint8 KSconVideoVideoBitRate ( 0x05 ); -const TUint8 KSconVideoAudioBitRate ( 0x06 ); -const TUint8 KSconVideoDuration ( 0x07 ); -const TUint8 KSconVideoThumbnail ( 0x08 ); -const TUint8 KSconVideoAudioStreamMimetype ( 0x09 ); -const TUint8 KSconVideoVideoStreamMimetype ( 0x0a ); - -#endif // _SCONMETADATAFIELDDEFS_H_ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconpcd.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconpcd.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* -* 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: CSConPCD service header -* -*/ - - -#ifndef _SCONPCD_H_ -#define _SCONPCD_H_ - -// INCLUDES - -#include -#include -#include - -#include "sconconmltask.h" - -class CSConInstallerQueue; -class CSConBackupRestoreQueue; -class CSconSyncHandler; - -enum TSConLastConMLOperation - { - ENoTask = 0, - EPutTask, - EGetReply - }; - -//============================================================ -// Class CSConPCD declaration -//============================================================ -class CSConPCD : public CBase - { - public: - /** - * Two-phase constructor - * @return CSConPCD instance - */ - static CSConPCD* NewL(); - /** - * Destructor - * @return none - */ - ~CSConPCD(); - /** - * Receives a new task - * @param aTask A new task - * @return KErrNone if no errors, else system wide error codes - */ - virtual TInt PutTaskL( CSConTask*& aTask ); - /** - * Returns a reply to previous PutTaskL operation - * @return CSConStatusReply if reply exists, else return NULL - */ - virtual CSConStatusReply* GetReply(); - /** - * Resets the module to the initial state - * @return none - */ - virtual void ResetPCD(); - - virtual void HandleGetSyncRequestL( const TDesC8& aRequest, RWriteStream& aResult, TInt aMaxObjectSize ); - virtual void HandlePutSyncRequestL( const TDesC8& aRequest, RReadStream& aResult ); - - private: - /** - * Collects a status of a specified task / all tasks - * @param aTask The number of the specified task - * @param aAll If ETrue => receive status of all tasks - * @return KErrNone if no errors, else system wide error codes - */ - TInt GetStatusL( TInt aTask, TBool aAll ); - - /** - * Cancels a specified task / all tasks - * @param aTask The number of the specified task - * @param aAll If ETrue => receive status of all tasks - * @return KErrNone if no errors, else system wide error codes - */ - TInt CancelL( TInt aTask, TBool aAll ); - - /** - * Fills a reply with predefined supported task -information - * @param aTask The task - * @return KErrNone if no errors, else system wide error codes - */ - TInt SupportedInstTaskL( CSConTask* aTask ); - - /** - * Fills a reply with predefined supported task -information - * @param aTask The task - * @return KErrNone if no errors, else system wide error codes - */ - TInt SupportedBRTaskL( CSConTask* aTask ); - - /** - * Fills a reply with predefined Reboot task -information - * @param aTask The task - * @return KErrNone if no errors, else system wide error codes - */ - TInt RebootTaskL( const CSConTask* aTask ); - - /** - * Fills a reply with predefined GetMetadata task -information - * @param aTask The task - * @return none - */ - void GetMetadataTaskL( CSConTask& aTask ); - - /** - * Creates a reply for UpdateDeviceInfo task - * @param aMaxObjectSize A max object size to be used - * @return none - */ - TInt UpdateDeviceInfoL( TInt aMaxObjectSize ); - /** - * Gets the current max object size - * @param aClientObjectSize The object size of the client - * @return the max object size - */ - TInt GetMaxObjectSize( TInt aClientObjectSize ) const; - - /** - * Stores a reply - * @param aReply The reply to be stored - * @return none - */ - void StoreReply( CSConStatusReply*& aReply ); - - /** - * Constructor - * @return none - */ - CSConPCD(); - /** - * Initializes member data - * @return none - */ - virtual void ConstructL(); - - private: - CSConInstallerQueue* iInstallerQueue; - CSConBackupRestoreQueue* iBackupRestoreQueue; - CSConStatusReply* iLatestReply; - TInt iTaskNumber; - TInt iMaxObjectSize; - TSConLastConMLOperation iLastOperation; - RFs iFs; - CSconSyncHandler* iSyncHandler; - }; - - IMPORT_C CSConPCD* CreateCSConPCDL(); - typedef CSConPCD* (*TSConCreateCSConPCDFunc) (); - -#endif // SCONPCD - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconpcdconsts.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconpcdconsts.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: CSConPCD constants -* -*/ - - -#ifndef _SCONPCDCONSTS_H -#define _SCONPCDCONSTS_H - -// Timer value used for queue polling -const TInt KSConTimerValue( 20000 ); -// ConML Status code: Task completed -const TInt KSConCodeTaskCompleted( 200 ); -// ConML Status code: Task created -const TInt KSConCodeTaskCreated( 201 ); -// ConML Status code: Task prcosessing started -const TInt KSConCodeProcessingStarted( 202 ); -// ConML Status code: Task partially completed -const TInt KSConCodeTaskPartiallyCompleted( 206 ); -// ConML Status code: Not found -const TInt KSConCodeNotFound( 404 ); -// ConML Status code: Conflict -const TInt KSConCodeConflict( 409 ); -// ConML Status code: Not supported -const TInt KSConCodeNotSupported( 501 ); -// ConML Status code: Incompatible version -const TInt KSConCodeIncompatible( 507 ); -// ConML Status code: Cancelled -const TInt KSConCodeCancelled( 514 ); -// ConML Status code: No memory -const TInt KSConCodeNoMemory( 420 ); - - -// ConML Status codes in installer errorcases -const TInt KSConCodeInstErrUserCancel = KSConCodeCancelled; // User cancelled the operation -const TInt KSConCodeInstErrFileCorrupted = 600; // File is corrupted -const TInt KSConCodeInstErrInsufficientMemory = KSConCodeNoMemory; // Insufficient free memory in the drive to perform the operation -const TInt KSConCodeInstErrPackageNotSupported = KSConCodeIncompatible; // Installation of the package is not supported -const TInt KSConCodeInstErrSecurityFailure = 601; // Package cannot be installed due to security error -const TInt KSConCodeInstErrMissingDependency = 602; // Package cannot be installed due to missing dependency -const TInt KSConCodeInstErrFileInUse = 603; // Mandatory file is in use and prevents the operation -const TInt KSConCodeInstErrGeneralError = 604; // Unknown error -const TInt KSConCodeInstErrNoRights = 605; // The package has no rights to perform the operation -const TInt KSConCodeInstErrNetworkFailure = 606; // Indicates that network failure aborted the operation -const TInt KSConCodeInstErrBusy = 607; // Installer is busy doing some other operation -const TInt KSConCodeInstErrAccessDenied = 608; // Target location of package is not accessible -const TInt KSConCodeInstUpgradeError = 609; // The package is an invalid upgrade - -// ConML Status code: 1001...1050 System wide error code -const TInt KSConCodeFirstSymbianErr( 1000 ); - -struct SDeviceInfo - { - TSConMethodName method; - TBool support; - }; - -// Supported Backup/Restore and Install methods -const SDeviceInfo KSupportedMethods[] = - { - { EInstall, ETrue }, - { EUninstall, ETrue }, - { EListInstalledApps, ETrue }, - { EListDataOwners, ETrue }, - { ESetBURMode, ETrue }, - { ESetInstParams, ETrue }, - { EGetDataSize, ETrue }, - { ERequestData, ETrue }, - { ESupplyData, ETrue }, - { EReboot, EFalse } // reboot not supported anymore (3.2 ->) - }; - -// Supported ConML version -_LIT8( KCONMLVERSION, "2.0" ); -// SIS mime type for installer -_LIT8( KSISMIMEType, "x-epoc/x-sisx-app" ); -// Java mime type for installer -_LIT8( KMidletMIMEType, "application/java-archive" ); - -#endif - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconpcdutility.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconpcdutility.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2006-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: SConPcdUtility header file -* -*/ - - -#ifndef __CSCONPCDUTILITY_H__ -#define __CSCONPCDUTILITY_H__ - - -class CSConTask; -class CSConInstApp; -class CSConListInstApps; -//============================================================ -// Class TSConPcdUtility declaration -//============================================================ -NONSHARABLE_CLASS ( SConPcdUtility ) - { - public: // Methods - - static void ProcessListInstalledAppsL( CSConTask*& aTask ); - - private: // Methods - static void AppendInstalledSisL( CSConListInstApps& aListInstApps ); - static void AppendInstalledJavaL( CSConListInstApps& aListInstApps ); - static void AppendInstalledWidgetsL( CSConListInstApps& aListInstApps ); - - /** - * Checks if package is installed to selected drive - * @param aSelectedDriveList selected drives - * @param aInstalledDrives package drivemask - * @return ETrue if package is installed to one of the drives on aDriveList - */ - static TBool IsInstalledToSelectedDrive( const TDriveList& aSelectedDriveList, TUint aInstalledDrives ); - - }; - -#endif // __CSCONPCDUTILITY_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconqueue.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconqueue.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: Queue header file -* -*/ - - -#ifndef _SCONQUEUE_H_ -#define _SCONQUEUE_H_ - -// INCLUDES - -#include -#include - -#include "sconconmltask.h" - -class CSConAppInstaller; -class CSConBackupRestore; -class CSConInstallerQueue; -class CSConBackupRestoreQueue; - -//============================================================ -// Class CSConTaskQueue declaration -//============================================================ -NONSHARABLE_CLASS ( CSConTaskQueue ) - { - public: - /** - * Destructor - * @return none - */ - virtual ~CSConTaskQueue(); - /** - * Returns the status of a specified task / all tasks - * @param aTask The task number - * @param aAllTasks If ETrue => Receive status of all tasks - * @param aStatus The reply - * @return none - */ - virtual void GetQueueStatusL( TInt aTask, TBool aAllTasks, - CSConStatusReply*& aStatus ); - /** - * Adds a new task to queue - * @param aNewTask A new task to be added - * @param aTaskId The task number - * @return KErrNone if no errors, else system wide error codes - */ - virtual TInt AddNewTask( CSConTask*& aNewTask, TInt aTaskId ); - /** - * Set the task to completed -mode - * @param aTask The task number - * @param aError The task error code - * @return none - */ - virtual void CompleteTask( TInt aTask, TInt aError ); - /** - * Set the task progress value - * @param aTask The task number - * @param aProgressValue The progress value - * @return none - */ - virtual void SetTaskProgress( TInt aTask, TInt aProgressValue ); - /** - * Receives a specified task - * @param aTaskId The task number - * @param aTask The address to the task - * @return KErrNone if no errors, else system wide error codes - */ - virtual TInt GetTask( TInt aTaskId, CSConTask*& aTask ); - /** - * Removes a task from the queue - * @param aTask The task number - * @return none - */ - virtual void RemoveTask( TInt aTask ); - /** - * Cancels a task - * @param aTask The task number - * @param aAllTasks If ETrue => cancel all tasks - * @return none - */ - virtual void CancelTask( TInt aTask, TBool aAllTasks ); - /** - * The status of the process - * @return ETrue if process active, else EFalse - */ - virtual TBool QueueProcessActive() const; - /** - * Changes the status of the queue process - * @return none - */ - virtual void ChangeQueueProcessStatus(); - /** - * Resets the queue - * @return none - */ - virtual void Reset(); - /** - * Compares task numbers - * @param aFirst The first task - * @param aSecon The second task - * @return -1 if the first task number is smaller than the second, - * 1 the first task number is greater than the second, 0 if task - * numbers are equal - */ - static TInt Compare( const CSConTask& aFirst, - const CSConTask& aSecond ); - /** - * Matches the task numbers - * @param aFirst The first task - * @param aSecon The second task - * @return ETrue if task numbers match, else EFalse - */ - static TBool Match( const CSConTask& aFirst, - const CSConTask& aSecond ); - - private: - /** - * Pure virtual function for starting the queue observation - * @return none - */ - virtual void StartQueue() = 0; - /** - * Pure virtual function for stoping the queue observation - * @return none - */ - virtual void StopQueue() = 0; - /** - * Pure virtual function for polling the queue - * @return none - */ - virtual void PollQueue() = 0; - - protected: - RPointerArray iQueue; - RTimer iTimer; - TBool iQueueProcessActive; - }; - -#endif - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconsbeclient.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconsbeclient.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: CSConSBEClient header file -* -*/ - - -#ifndef _SCONSBECLIENT_H_ -#define _SCONSBECLIENT_H_ - -// INCLUDES -#include -#include "sconconmltask.h" - -using namespace conn; - -//============================================================ -// Class CSConSBEClient declaration -//============================================================ -NONSHARABLE_CLASS ( CSConSBEClient ) : public CActive - { - public: - /** - * Two-phase constructor - * @param aMaxObjectSize Max object size - * @param aFs aReference to RFs connection. - * @return CSConSBEClient instance - */ - static CSConSBEClient* NewL( const TInt aMaxObjectSize, RFs& aFs ); - /** - * Destructor - * @return none - */ - ~CSConSBEClient(); - /** - * Set backup/restore mode - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void SetBURMode( TRequestStatus& aStatus, CSConTask*& aTask ); - /** - * Lists public files from data owners - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void ListPublicFiles( TRequestStatus& aStatus, CSConTask*& aTask ); - /** - * Lists participant data owners - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void ListDataOwners( TRequestStatus& aStatus, CSConTask*& aTask ); - /** - * Lists data sizes from data owners - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void GetDataSize( TRequestStatus& aStatus, CSConTask*& aTask ); - /** - * Request a data from a data owner - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void RequestData( TRequestStatus& aStatus, CSConTask*& aTask ); - /** - * Lists the status of data owners - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void GetDataOwnerStatus( TRequestStatus& aStatus, CSConTask*& aTask ); - /** - * Supplies a data to a data owner - * @param aStatus TRequestStatus of the request - * @param aTask Task parameters - * @return none - */ - void SupplyData( TRequestStatus& aStatus, CSConTask*& aTask ); - - private: - /** - * Constructor - * @paran aMaxObjectSize Max object size - * @param aFs aReference to RFs connection. - * @return none - */ - CSConSBEClient( const TInt aMaxObjectSize, RFs& aFs ); - - /** - * Implementation of CActive::DoCancel() - * @return none - */ - void DoCancel(); - /** - * Implementation of CActive::RunL() - * @return none - */ - void RunL(); - - /** - * Executes SetBURMode task - * @return none - */ - void ProcessSetBURModeL(); - /** - * Executes ListPublicFiles task - * @return none - */ - void ProcessListPublicFilesL(); - /** - * Executes ListDataOwners task - * @return none - */ - void ProcessListDataOwnersL(); - /** - * Executes GetDataSize task - * @return none - */ - void ProcessGetDataSizeL(); - /** - * Executes RequestData task - * @return KErrNone if no erros. Else system wide error codes. - */ - TInt ProcessRequestDataL(); - /** - * Request data to iDataBuffer - * @return none - */ - void RequestDataL( CSBGenericTransferType& aGenericTransferType ); - /** - * Executes GetDataOwnerStatus task - * @return none - */ - void ProcessGetDataOwnerStatusL(); - /** - * Executes SupplyData task - * @return KErrNone if no errors. Else system wide error codes. - */ - TInt ProcessSupplyDataL(); - /** - * Maps TInt drive number to TDriveNumber - * @param aDrive Drive number as TInt - * @return drive number as TDriveNumber - */ - TDriveNumber GetDriveNumber( const TInt& aDrive ) const; - /** - * Filters the drive list - * @param aDriveList Drive list to be filtered - * @return none - */ - void FilterDriveList( TDriveList& aDriveList ) const; - /** - * Matches the uids - * @param aFirst The first uid - * @param aSecon The second uid - * @return ETrue if uids match, else EFalse - */ - static TBool Match( const TUid& aFirst, - const TUid& aSecond ); - /** - * Handle error received from Secure Backup Engine - * @param aErr Error code from Secure Backup Engine - * @return none - */ - void HandleSBEErrorL( TInt& aErr ); - - /** - * Appends public files to CSConFile array. - * @param aFiles source files to append - * @param aSconFiles dataowner list where to add - * @return none - */ - void AppendFilesToFilelistL( const RFileArray& aFiles, RPointerArray& aSconFiles ); - - /** - * Gets Package dataowner size - * @param aPackageId dataowner - * @param TDriveList drives to include - * @param TPackageDataType package data type - * @return dataowner data size in specified drives - */ - TUint PackageDataSizeL( TUid aPackageId, const TDriveList& aDriveList, - TPackageDataType aPackageDataType ) const; - - /** - * Gets Sid dataowner size - * @param aSid dataowner - * @param TDriveList drives to include - * @param TTransferDataType transfer data type - * @return dataowner data size in specified drives - */ - TUint SidDataSizeL( TUid aSid, const TDriveList& aDriveList, - TTransferDataType aTransferDataType ) const; - - /** - * Gets Java dataowner size - * @param aJavaHash Java hash value - * @param TDriveList drives to include - * @return dataowner data size in specified drives - */ - TUint JavaDataSizeL( const TDesC& aJavaHash, const TDriveList& aDriveList ) const; - - private: - CSBEClient* iSBEClient; - TRequestStatus* iCallerStatus; - CSConTask* iCurrentTask; - TBool iBURModeNormal; - TBool iRestoreMode; - RFs& iFs; - TBool iAllSnapshotsSuppliedCalled; - TBool iLastChunk; - CBufFlat* iDataBuffer; - TInt iDataBufferSize; - }; - -#endif - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconsynchandler.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconsynchandler.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncHandler header -* -*/ - - -#ifndef SCONSYNCHANDLER_H_ -#define SCONSYNCHANDLER_H_ - -#include -#include -#include "sconsyncclient.h" - -class RFs; -class RWriteStream; -class RReadStream; -class RFileReadStream; - -NONSHARABLE_CLASS( TCreatedItem ) - { -public: - TInt iTemporaryId; - TInt iErrorCode; - TSmlDbItemUid iNewUid; - }; - -NONSHARABLE_CLASS( TReplacedItem ) - { -public: - TSmlDbItemUid iItemUid; - TInt iErrorCode; - }; - -NONSHARABLE_CLASS( CSconSyncHandler ) : public CActive -{ -public: - static CSconSyncHandler* NewL( RFs& aFs ); - ~CSconSyncHandler(); - - void HandleGetSyncRequestL( const TDesC8& aRequest, RWriteStream& aResult, TInt aMaxObjectSize ); - void HandlePutSyncRequestL( const TDesC8& aRequest, RReadStream& aData ); -private: - CSconSyncHandler( RFs& aFs ); - void ConstructL(); - - void ListStoresL( RWriteStream& aResult ); - void OpenStoreL( const TDesC8& aParams, RWriteStream& aResult ); - void CloseStoreL( RWriteStream& aResult ); - - void ListChangesL( RWriteStream& aResult ); - void ResetChangeInfoL( RWriteStream& aResult ); - void CommitChangesL( const TDesC8& aParams, RWriteStream& aResult ); - void ReadItemsL( const TDesC8& aParams, RWriteStream& aResult ); - void GetParentsL( const TDesC8& aParams, RWriteStream& aResult ); - void CreateItemsL( RReadStream& aData ); - void GetCreateItemsResponseL( const TDesC8& aParams, RWriteStream& aResult ); - void ReplaceItemsL( RReadStream& aData ); - void GetReplaceItemsResponseL( const TDesC8& aParams, RWriteStream& aResult ); - void MoveItemsL( const TDesC8& aParams, RWriteStream& aResult ); - void DeleteItemsL( const TDesC8& aParams, RWriteStream& aResult ); - void SoftDeleteItemsL( const TDesC8& aParams, RWriteStream& aResult ); - void DeleteAllItemsL( RWriteStream& aResult ); - void GetDeleteAllItemsStatusL( RWriteStream& aResult ); - void GetStoreFormatL( RWriteStream& aResult ); - void SetRemoteStoreFormatL( RReadStream& aData ); - - void CreateNextItemOnStreamL(); - void ReplaceNextItemOnStreamL(); - - void ReadNextDataBlockL( RWriteStream& aResult ); - void ReadItemL( TSmlDbItemUid aUid, CBufFlat& aItemData ); - - void LoadRemoteStoreFormatL( TInt aContextId, TInt aProviderId ); - void SaveRemoteStoreFormatL( CSmlDataStoreFormat& aStoreFormat, TInt aContextId, TInt aProviderId ); - - void CancelOperationsL( RWriteStream& aResult ); - - void Reset(); - - void SetCalendarCenrepL( TInt aProfileId, const TDesC& aServerId ); - void ClearCalendarCenrepL(); - -private: // from CActive - void DoCancel(); - void RunL(); - TInt RunError( TInt aError ); - -private: - RFs& iFs; // Not owned - RSconSyncSession iSyncSession; - TBool iConnected; - - TInt iCurrentDataProviderUid; - TInt iCurrentContextUid; - - CBufFlat* iResponseData; - - enum TSyncStatus - { - EReady, - ECreatingItemsFromFile, - EItemsCreated, - EReplacingItemsFromFile, - EItemsReplaced, - EDeletingAllItems - }; - TSyncStatus iSyncStatus; - - TInt iMaxObjectSize; - TInt iBytesWrited; - TBool iHasFileStream; - RFileReadStream iFileStream; - TSmlDbItemUid iCreatedItemUid; - TPckg iCreatedItemUidPckg; - TSmlDbItemUid iTemporaryItemUid; - TInt iItemsLeftInStream; - TInt iItemInProgress; // =1 if item is in progress - RArray iCreatedItems; - RArray iReplacedItems; - RArray iItemsToRead; - TReplacedItem iReplacedItem; - TFileName iFileInProgress; - TBool iCalendarCenrepUsed; -}; - -#endif /*SCONSYNCHANDLER_H_*/ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/inc/sconvideoparser.h --- a/connectivitymodules/SeCon/services/pcd/inc/sconvideoparser.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* -* Copyright (c) 2008-2010 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: CSConVideoParser header file -* -*/ - - -#ifndef SCONVIDEOPARSER_H -#define SCONVIDEOPARSER_H - -// INCLUDES -#include -#include -#include -#include -#include "cscontimeout.h" - -// FORWARD DECLARATIONS -class CVideoOperationObserver; -class CVideoPlayerUtility; - -// CLASS DECLARATION - -//============================================================ -// Class CSConVideoParser declaration -//============================================================ -NONSHARABLE_CLASS( CSConVideoParser ) : public CBase, - public MVideoPlayerUtilityObserver, - public MTNEVideoClipInfoObserver, - public MTNEVideoClipThumbObserver, - private MTimeOutObserver -{ -public: // Constructors and destructor - - ~CSConVideoParser(); - static CSConVideoParser* NewLC(); - - /** - * Opens file - * @return none - */ - void OpenFileL( const RFs& aFs, const TDesC& aFilename ); - - /** - * Get video thumbnail - * @return video thumbnail in jpeg format, - * return KNullDesC8 if thumbain could not found - */ - const TDesC8& Thumbnail() const; - - /** - * Get video frame rate - * @return video frame rate frames/sec - */ - TReal32 VideoFrameRateL() const; - - /** - * Get video frame size - * @return none - */ - void VideoFrameSizeL(TSize& aSize) const; - - /** - * Get video format - * @return video format mimetype (example: video/mp4v-es) - */ - const TDesC8& VideoFormatMimeTypeL() const; - - /** - * Get videostream bitrate - * @return video bitrate bits/sec - */ - TInt VideoBitRateL() const; - - /** - * Get audiostream bitrate - * @return audio bitrate bits/sec - */ - TInt AudioBitRateL() const; - - /** - * Get video duration - * @return video duration in milliseconds. - */ - TInt DurationL() const; - - /** - * Get videostream bitrate - * @return videostream mimetype - */ - const TDesC& VideoMimeTypeL(); - - /** - * Get audiostream mimetype - * @return audiostream mimetype - */ - const TDesC& AudioMimeTypeL(); - -protected: // from base classes - /** @see MVideoPlayerUtilityObserver::MvpuoOpenComplete */ - void MvpuoOpenComplete(TInt aError); - - /** @see MVideoPlayerUtilityObserver::MvpuoPrepareComplete */ - void MvpuoPrepareComplete(TInt aError); - - /** @see MVideoPlayerUtilityObserver::MvpuoFrameReady */ - void MvpuoFrameReady(CFbsBitmap& aFrame,TInt aError); - - /** @see MVideoPlayerUtilityObserver::MvpuoPlayComplete */ - void MvpuoPlayComplete(TInt aError); - - /** @see MVideoPlayerUtilityObserver::MvpuoEvent */ - void MvpuoEvent(const TMMFEvent& aEvent); - - /** @see MTNEVideoClipInfoObserver::NotifyVideoClipInfoReady */ - void NotifyVideoClipInfoReady(CTNEVideoClipInfo& aInfo, TInt aError); - - void NotifyVideoClipThumbCompleted(CTNEVideoClipInfo& aInfo, - TInt aError, - CFbsBitmap* aThumb); - - /** @see MTimeOutObserver::TimeOut */ - void TimeOut(); - -private: - - CSConVideoParser(); - void ConstructL(); - -private: // data - CVideoPlayerUtility* iVideoUtil; - CTNEVideoClipInfo* iVideoClip; - - RWsSession iWsSession; - CWsScreenDevice* iScreen; - RWindow* iWindow; - RWindowGroup iRootWindow; - - TRequestStatus* iCallerStatus; - CActiveSchedulerWait iWait; - CSconTimeOut* iTimeOut; - - HBufC8* iThumbnail; - HBufC* iVideoMimeType; - HBufC* iAudioMimeType; - - TBool iVideoUtilReady; - TBool iVideoClipReady; - TInt iVideoUtilErr; - TInt iVideoClipErr; - TBool iAsyncStopCalled; -}; - -#endif // SCONVIDEOPARSER_H - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/cscontimeout.cpp --- a/connectivitymodules/SeCon/services/pcd/src/cscontimeout.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/* -* Copyright (c) 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: CSconTimeOut implementation -* -*/ - - -#include "cscontimeout.h" - -CSconTimeOut::CSconTimeOut( MTimeOutObserver& aTimeOutObserver ) : - CActive(EPriorityStandard), // Standard priority - iTimeOutObserver(aTimeOutObserver) - { - } - - -CSconTimeOut* CSconTimeOut::NewL( MTimeOutObserver& aTimeOutObserver ) - { - CSconTimeOut* self = new (ELeave) CSconTimeOut( aTimeOutObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -void CSconTimeOut::ConstructL() - { - User::LeaveIfError(iTimer.CreateLocal()); // Initialize timer - CActiveScheduler::Add(this); // Add to scheduler - } - -CSconTimeOut::~CSconTimeOut() - { - Cancel(); // Cancel any request, if outstanding - iTimer.Close(); // Destroy the RTimer object - } - -void CSconTimeOut::DoCancel() - { - iTimer.Cancel(); - } - -void CSconTimeOut::Start(TTimeIntervalMicroSeconds32 aDelay) - { - Cancel(); // Cancel any request, just to be sure - iTimer.After(iStatus, aDelay); // Set for later - SetActive(); // Tell scheduler a request is active - } - -void CSconTimeOut::RunL() - { - iTimeOutObserver.TimeOut(); - } - -TInt CSconTimeOut::RunError(TInt aError) - { - return aError; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconbackuprestore.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconbackuprestore.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: CSConBackupRestore implementation -* -*/ - - -// INCLUDE FILES -#include - -#include "sconbackuprestore.h" -#include "sconsbeclient.h" -#include "sconbrqueue.h" -#include "sconpcdconsts.h" - -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CSConBackupRestore* CSConBackupRestore::NewL( CSConBackupRestoreQueue* aQueue, -// cost TInt& aMaxObjectSize ) -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConBackupRestore* CSConBackupRestore::NewL( CSConBackupRestoreQueue* aQueue, - const TInt aMaxObjectSize, RFs& aFs ) - { - CSConBackupRestore* self = new (ELeave) CSConBackupRestore( aQueue, aFs ); - CleanupStack::PushL( self ); - self->ConstructL( aMaxObjectSize ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::CSConBackupRestore( CSConBackupRestoreQueue* aQueue ) -// Constructor -// ----------------------------------------------------------------------------- -// -CSConBackupRestore::CSConBackupRestore( CSConBackupRestoreQueue* aQueue, RFs& aFs ) : - CActive( EPriorityStandard ), iQueue( aQueue ), iFs( aFs ) - { - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::ConstructL( const TInt aMaxObjectSize ) -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConBackupRestore::ConstructL( const TInt aMaxObjectSize ) - { - iMaxObjectSize = aMaxObjectSize; - iSBEClient = CSConSBEClient::NewL( aMaxObjectSize, iFs ); - CActiveScheduler::Add( iSBEClient ); - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::~CSConBackupRestore() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConBackupRestore::~CSConBackupRestore() - { - if( iSBEClient ) - { - iSBEClient->Cancel(); - delete iSBEClient; - iSBEClient = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::StartBackupRestore( TInt aTaskId ) -// Starts backup-restore task -// ----------------------------------------------------------------------------- -// -void CSConBackupRestore::StartBackupRestore( TInt aTaskId ) - { - iBackupRestoreActive = ETrue; - CSConTask* task = NULL; - - TInt ret = iQueue->GetTask( aTaskId, task ); - - if( aTaskId > 0 && ret != KErrNotFound ) - { - iCurrentTask = aTaskId; - iQueue->SetTaskProgress( aTaskId, KSConCodeProcessingStarted ); - } - - switch( task->GetServiceId() ) - { - case ESetBURMode : - iQueue->ChangeQueueProcessStatus(); - iSBEClient->SetBURMode( iStatus, task ); - break; - case EListPublicFiles : - iSBEClient->ListPublicFiles( iStatus, task ); - break; - case EListDataOwners : - iSBEClient->ListDataOwners( iStatus, task ); - break; - case EGetDataSize : - iSBEClient->GetDataSize( iStatus, task ); - break; - case ERequestData : - iSBEClient->RequestData( iStatus, task ); - break; - case EGetDataOwnerStatus : - iSBEClient->GetDataOwnerStatus( iStatus, task ); - break; - case ESupplyData : - iSBEClient->SupplyData( iStatus, task ); - break; - default : - break; - } - - SetActive(); - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::StopBackupRestore( TInt aTaskId ) -// Stops executing backup-restore task -// ----------------------------------------------------------------------------- -// -void CSConBackupRestore::StopBackupRestore( TInt aTaskId ) - { - TRACE_FUNC_ENTRY; - //if the task is active, do cancel - if( iCurrentTask == aTaskId ) - { - iBackupRestoreActive = EFalse; - iSBEClient->Cancel(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::Reset() -// Resets backup -// ----------------------------------------------------------------------------- -// -void CSConBackupRestore::Reset() - { - TRACE_FUNC_ENTRY; - if( iSBEClient ) - { - iSBEClient->Cancel(); - delete iSBEClient; - iSBEClient = NULL; - } - - TRAPD( err, iSBEClient = CSConSBEClient::NewL( iMaxObjectSize, iFs ) ); - - if( err == KErrNone ) - { - CActiveScheduler::Add( iSBEClient ); - } - - iBackupRestoreActive = EFalse; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::BackupRestoreActive() -// returns backup-restore activity status -// ----------------------------------------------------------------------------- -// -TBool CSConBackupRestore::BackupRestoreActive() const - { - return iBackupRestoreActive; - } -// ----------------------------------------------------------------------------- -// CSConBackupRestore::DoCancel() -// Implementation of CActive::DoCancel() -// ----------------------------------------------------------------------------- -// -void CSConBackupRestore::DoCancel() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestore::RunL() -// Implementation of CActive::RunL() -// ----------------------------------------------------------------------------- -// -void CSConBackupRestore::RunL() - { - TRACE_FUNC; - iQueue->CompleteTask( iCurrentTask, iStatus.Int() ); - iBackupRestoreActive = EFalse; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconbrqueue.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconbrqueue.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* -* 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: Backup-Restore Queue implementation -* -*/ - - -// INCLUDE FILES -#include "sconbrqueue.h" -#include "sconbackuprestore.h" -#include "sconpcdconsts.h" -#include "sconinstqueue.h" -#include "debug.h" - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::NewL( const TInt aMaxObjectSize ) -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConBackupRestoreQueue* CSConBackupRestoreQueue::NewL( const TInt aMaxObjectSize, RFs& aFs ) - { - CSConBackupRestoreQueue* self = new (ELeave) CSConBackupRestoreQueue(); - CleanupStack::PushL( self ); - self->ConstructL( aMaxObjectSize, aFs ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::CSConBackupRestoreQueue() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConBackupRestoreQueue::CSConBackupRestoreQueue() : - CActive( EPriorityStandard ) - { - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::ConstructL( const TInt aMaxObjectSize ) -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::ConstructL( const TInt aMaxObjectSize, RFs& aFs ) - { - iBackupRestore = CSConBackupRestore::NewL( this, aMaxObjectSize, aFs ); - CActiveScheduler::Add( iBackupRestore ); - User::LeaveIfError( iTimer.CreateLocal() ); - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::~CSConBackupRestoreQueue() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConBackupRestoreQueue::~CSConBackupRestoreQueue() - { - TRACE_FUNC_ENTRY; - Cancel(); - if( iBackupRestore ) - { - delete iBackupRestore; - iBackupRestore = NULL; - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::StartQueue() -// Starts queue polling -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::StartQueue() - { - if( IsActive() ) - { - Cancel(); - } - - iTimer.After( iStatus, KSConTimerValue ); - SetActive(); - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::StopQueue() -// Stops queue polling -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::StopQueue() - { - iTimer.Cancel(); - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::AddNewTask( CSConTask*& aNewTask, TInt aTaskId ) -// Adds a new task to queue -// ----------------------------------------------------------------------------- -// -TInt CSConBackupRestoreQueue::AddNewTask( CSConTask*& aNewTask, TInt aTaskId ) - { - LOGGER_WRITE_1( "CSConBackupRestoreQueue::AddNewTask aTaskId: %d", aTaskId ); - TInt ret( KErrNone ); - - aNewTask->iTaskId = aTaskId; - - //Set progress value "task accepted for execution" - aNewTask->SetProgressValue( KSConCodeTaskCreated ); - aNewTask->SetCompleteValue( EFalse ); - - //For RequestData and SupplyData - if( iQueue.Find( aNewTask, CSConTaskQueue::Match ) != KErrNotFound ) - { - RemoveTask( aTaskId ); - } - - if( iQueue.Count() == 0 ) - { - StartQueue(); - } - - ret = iQueue.InsertInOrder( aNewTask, CSConTaskQueue::Compare ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::CancelTask( TInt aTask, TBool aAllTasks ) -// Cancels a task -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::CancelTask( TInt aTask, TBool aAllTasks ) - { - TRACE_FUNC_ENTRY; - //Stop backup/restore - if( aTask && !aAllTasks ) - { - LOGGER_WRITE_1("CSConBackupRestoreQueue::CancelTask - Cancel task: %d", aTask); - iBackupRestore->StopBackupRestore( aTask ); - } - - if( aAllTasks ) - { - LOGGER_WRITE("CSConBackupRestoreQueue::CancelTask - Cancel All"); - iBackupRestore->Cancel(); - iBackupRestore->Reset(); - } - - CSConTaskQueue::CancelTask( aTask, aAllTasks ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::Reset() -// Resets the queue -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::Reset() - { - TRACE_FUNC_ENTRY; - CSConTaskQueue::Reset(); - iBackupRestore->Reset(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::QueueAddress( CSConInstallerQueue*& aTaskQueue ) -// An address pointer to another queue -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::QueueAddress( CSConInstallerQueue*& aTaskQueue ) - { - iInstQueueAddress = aTaskQueue; - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::GetTaskMethod( TInt& aTaskId ) -// Returns the task type -// ----------------------------------------------------------------------------- -// -TSConMethodName CSConBackupRestoreQueue::GetTaskMethodL( TInt aTaskId ) - { - TRACE_FUNC_ENTRY; - CSConTask* task = NULL; - CSConTaskQueue::GetTask( aTaskId, task ); - LOGGER_WRITE_1( "CSConBackupRestoreQueue::GetTaskMethodL( TInt aTaskId ) : returned %d", - task->GetServiceId() ); - return task->GetServiceId(); - } - -// ----------------------------------------------------------------------------- -// CSConBackupRestoreQueue::PollQueue() -// Polls queue -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::PollQueue() - { - // find and start next task if BR and installer is inactive - if( !iBackupRestore->BackupRestoreActive() - && !iInstQueueAddress->QueueProcessActive() ) - { - //find next task - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - TBool complete = iQueue[i]->GetCompleteValue(); - - if( complete == EFalse ) - { - iBackupRestore->StartBackupRestore( - iQueue[i]->iTaskId ); - i = iQueue.Count() + 1; // jump out from loop - } - } - } - } - -// ----------------------------------------------------------------------------- -// Implementation of CActive::DoCancel() -// Entry to CSConPCD -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::DoCancel() - { - TRACE_FUNC_ENTRY; - iTimer.Cancel(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// Implementation of CActive::RunL() -// Entry to CSConPCD -// ----------------------------------------------------------------------------- -// -void CSConBackupRestoreQueue::RunL() - { - if( iQueue.Count() > 0 ) - { - PollQueue(); - StartQueue(); - } - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconinstaller.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconinstaller.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,528 +0,0 @@ -/* -* 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: CSConAppInstaller implementation -* -*/ - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include - -using namespace Java; - -#include "debug.h" -#include "sconinstaller.h" -#include "sconpcdconsts.h" -#include "sconpcdutility.h" - -_LIT8( KWidgetMimeType, "application/x-nokia-widget"); - -const TInt KSConSeConUidValue = 0x101f99f6; -const TUid KSConSeConUid = {KSConSeConUidValue}; - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::CSConAppInstaller( CSConInstallerQueue* aQueue ) -// Constructor -// ----------------------------------------------------------------------------- -// -CSConAppInstaller::CSConAppInstaller( CSConInstallerQueue* aQueue, RFs& aFs ) : - CActive( EPriorityStandard ), iQueue( aQueue ), iFs( aFs ) - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::~CSConAppInstaller() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConAppInstaller::~CSConAppInstaller() - { - TRACE_FUNC; - iSWInst.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::StartInstaller( TInt& aTaskId ) -// Starts the installer task -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::StartInstaller( TInt& aTaskId ) - { - TRACE_FUNC_ENTRY; - CSConTask* task = NULL; - TRequestStatus* status = NULL; - TInt err( KErrNone ); - - TInt ret = iQueue->GetTask( aTaskId, task ); - - if( aTaskId > 0 && ret != KErrNotFound ) - { - if ( iInstallerState != EIdle || IsActive() ) - { - LOGGER_WRITE("WARNING! SConAppInstaller was not on idle state!"); - iQueue->CompleteTask( aTaskId, KErrInUse ); - TRACE_FUNC_EXIT; - return; - } - - - iCurrentTask = aTaskId; - iQueue->SetTaskProgress( aTaskId, KSConCodeProcessingStarted ); - - switch( task->GetServiceId() ) - { - case EInstall : - iQueue->ChangeQueueProcessStatus(); - err = iSWInst.Connect(); - - if( err == KErrNone ) - { - if ( task->iInstallParams->iMode == ESilentInstall ) - { - LOGGER_WRITE( "Begin silent installation.. " ); - iOptions.iUntrusted = SwiUI::EPolicyNotAllowed; - iOptions.iOCSP = SwiUI::EPolicyNotAllowed; - iOptionsPckg = iOptions; - iInstallerState = ESilentInstalling; - iSWInst.SilentInstall( iStatus, task->iInstallParams->iPath, iOptionsPckg ); - } - else - { - LOGGER_WRITE( "Begin to install.. " ); - iInstallerState = EInstalling; - iSWInst.Install( iStatus, task->iInstallParams->iPath ); - } - } - - break; - case EUninstall : - iQueue->ChangeQueueProcessStatus(); - err = iSWInst.Connect(); - - if( err == KErrNone ) - { - LOGGER_WRITE( "Begin to uninstall.. " ); - - TRAP( err, ProcessUninstallL( *task->iUninstallParams ) ); - if( err != KErrNone ) - { - LOGGER_WRITE_1( "StartInstaller ProcessUninstallL err: %d", err ); - status = &iStatus; - User::RequestComplete( status, err ); - } - } - - break; - case EListInstalledApps : - iQueue->ChangeQueueProcessStatus(); - iInstallerState = EListingInstalledApps; - TRAP( err, ProcessListInstalledAppsL() ); - status = &iStatus; - User::RequestComplete( status, err ); - break; - default : - break; - } - - SetActive(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::StopInstaller( TInt& aTaskId ) -// Stops the installer task -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::StopInstaller( TInt& aTaskId ) - { - TRACE_FUNC_ENTRY; - //If the task is the current task, cancel it first - if( iCurrentTask == aTaskId ) - { - Cancel(); - iSWInst.Close(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// TBool CSConAppInstaller::InstallerActive() -// returns installer activity status -// ----------------------------------------------------------------------------- -// -TBool CSConAppInstaller::InstallerActive() const - { - if ( iInstallerState == EIdle ) - { - return EFalse; - } - else - { - return ETrue; - } - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::DoCancel() -// Implementation of CActive::DoCancel() -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::DoCancel() - { - TRACE_FUNC_ENTRY; - - switch (iInstallerState) - { - case EInstalling: - LOGGER_WRITE("Cancel normal install"); - iSWInst.CancelAsyncRequest( SwiUI::ERequestInstall ); - break; - case ESilentInstalling: - LOGGER_WRITE("Cancel silent install"); - iSWInst.CancelAsyncRequest( SwiUI::ERequestSilentInstall ); - break; - case EUninstalling: - LOGGER_WRITE("Cancel normal uninstall"); - iSWInst.CancelAsyncRequest( SwiUI::ERequestUninstall ); - break; - case ESilentUninstalling: - LOGGER_WRITE("Cancel silent uninstall"); - iSWInst.CancelAsyncRequest( SwiUI::ERequestSilentUninstall ); - break; - case ECustomUninstalling: - LOGGER_WRITE("Cancel custom uninstall"); - iSWInst.CancelAsyncRequest( SwiUI::ERequestCustomUninstall ); - break; - case ESilentCustomUnistalling: - LOGGER_WRITE("Cancel silent custom uninstall"); - iSWInst.CancelAsyncRequest( SwiUI::ERequestSilentCustomUninstall ); - break; - default: - LOGGER_WRITE("WARNING! Unknown state"); - break; - } - iInstallerState = EIdle; - - // find and complete current task - CSConTask* task = NULL; - TInt ret = iQueue->GetTask( iCurrentTask, task ); - - if ( iCurrentTask > 0 && ret != KErrNotFound ) - { - - switch( task->GetServiceId() ) - { - case EInstall : - iQueue->CompleteTask( iCurrentTask, KErrCancel ); - break; - case EUninstall : - iQueue->CompleteTask( iCurrentTask, KErrCancel ); - break; - default : - break; - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::RunL() -// Implementation of CActive::RunL() -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::RunL() - { - TRACE_FUNC_ENTRY; - iInstallerState = EIdle; - iSWInst.Close(); - iQueue->ChangeQueueProcessStatus(); - TInt err( iStatus.Int() ); - LOGGER_WRITE_1( "CSConAppInstaller::RunL() iStatus.Int() : returned %d", err ); - - CSConTask* task = NULL; - TInt taskErr = iQueue->GetTask( iCurrentTask, task ); - - LOGGER_WRITE_1( "CSConAppInstaller::RunL() GetTask %d", taskErr ); - - if( taskErr == KErrNone ) - { - if( task->GetServiceId() == EInstall && err == KErrNone ) - { - LOGGER_WRITE( "CSConAppInstaller::RunL() : before DeleteFile" ); - //delete sis after succesfull install - DeleteFile( task->iInstallParams->iPath ); - } - } - - iQueue->CompleteTask( iCurrentTask, err ); - TRACE_FUNC_EXIT; - } - - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::ProcessUninstallL( const CSConUninstall& aUninstallParams ) -// Execures UnInstall task -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::ProcessUninstallL( const CSConUninstall& aUninstallParams ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aUid: 0x%08x", aUninstallParams.iUid.iUid ); - LOGGER_WRITE_1( "aName: %S", &aUninstallParams.iName ); - LOGGER_WRITE_1( "aVendor: %S", &aUninstallParams.iVendor ); - LOGGER_WRITE_1( "aType: %d", aUninstallParams.iType ); - LOGGER_WRITE_1( "aMode: %d", aUninstallParams.iMode ); - switch ( aUninstallParams.iType ) - { - case ESisApplication: - case ESisAugmentation: - UninstallSisL( aUninstallParams ); - break; - case EJavaApplication: - UninstallJavaL( aUninstallParams.iUid, - aUninstallParams.iMode); - break; - case EWidgetApplication: - UninstallWidget( aUninstallParams.iUid, - aUninstallParams.iMode ); - break; - default: - User::Leave( KErrNotSupported ); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::UninstallSisL( const CSConUninstall& aUninstallParams ) -// Uninstall sis package or augmentation -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::UninstallSisL( const CSConUninstall& aUninstallParams ) - { - TRACE_FUNC_ENTRY; - - if ( aUninstallParams.iUid == KSConSeConUid ) - { - LOGGER_WRITE("Cannot uninstall itself, leave"); - // cannot uninstall itself - User::Leave( SwiUI::KSWInstErrFileInUse ); - } - - Swi::RSisRegistrySession sisRegistry; - User::LeaveIfError( sisRegistry.Connect() ); - CleanupClosePushL( sisRegistry ); - //Check if uid belongs to SIS package - if( !sisRegistry.IsInstalledL( aUninstallParams.iUid ) ) - { - CleanupStack::PopAndDestroy( &sisRegistry ); - User::Leave( KErrNotFound ); - } - - Swi::RSisRegistryEntry entry; - CleanupClosePushL(entry); - User::LeaveIfError( entry.Open( sisRegistry, aUninstallParams.iUid ) ); - if ( aUninstallParams.iType == ESisAugmentation ) - { - // augmentation pkg - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL ESisAugmentation" ); - - TBool augmentationFound(EFalse); - // Get possible augmentations - RPointerArray augPackages; - CleanupResetAndDestroyPushL( augPackages ); - entry.AugmentationsL( augPackages ); - for ( TInt j( 0 ); j < augPackages.Count() && !augmentationFound; j++ ) - { - Swi::RSisRegistryEntry augmentationEntry; - CleanupClosePushL( augmentationEntry ); - augmentationEntry.OpenL( sisRegistry, *augPackages[j] ); - - HBufC* augPackageName = augmentationEntry.PackageNameL(); - CleanupStack::PushL( augPackageName ); - HBufC* augUniqueVendorName = augmentationEntry.UniqueVendorNameL(); - CleanupStack::PushL( augUniqueVendorName ); - - if ( !augmentationEntry.IsInRomL() - && augmentationEntry.IsPresentL() - && aUninstallParams.iName.Compare( *augPackageName ) == 0 - && aUninstallParams.iVendor.Compare( *augUniqueVendorName ) == 0 ) - { - // Correct augmentation found, uninstall it. - augmentationFound = ETrue; - TInt augmentationIndex = augPackages[j]->Index(); - LOGGER_WRITE_1( "CSConAppInstaller::ProcessUninstallL augmentationIndex %d", augmentationIndex ); - - SwiUI::TOpUninstallIndexParam params; - params.iUid = aUninstallParams.iUid; - params.iIndex = augmentationIndex; - SwiUI::TOpUninstallIndexParamPckg pckg( params ); - SwiUI::TOperation operation( SwiUI::EOperationUninstallIndex ); - if( aUninstallParams.iMode == ESilentInstall ) - { - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL : silent aug-sis-uninstall" ); - SwiUI::TUninstallOptionsPckg options; - iInstallerState = ESilentCustomUnistalling; - iSWInst.SilentCustomUninstall( iStatus, operation, options, pckg, KSISMIMEType ); - } - else - { - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL : unsilent aug-sis-uninstall" ) - iInstallerState = ECustomUninstalling; - iSWInst.CustomUninstall( iStatus, operation, pckg, KSISMIMEType ); - } - } - CleanupStack::PopAndDestroy( augUniqueVendorName ); - CleanupStack::PopAndDestroy( augPackageName ); - CleanupStack::PopAndDestroy( &augmentationEntry ); - } - CleanupStack::PopAndDestroy( &augPackages ); - - if ( !augmentationFound ) - { - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL augmentation not found -> Leave" ); - User::Leave( KErrNotFound ); - } - } - else - { - // Only uninstall if not in rom and is present - if ( !entry.IsInRomL() && entry.IsPresentL() ) - { - if ( aUninstallParams.iMode == ESilentInstall ) - { - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL : silent sis-uninstall" ); - SwiUI::TUninstallOptionsPckg options; - iInstallerState = ESilentUninstalling; - iSWInst.SilentUninstall( iStatus, aUninstallParams.iUid, options, KSISMIMEType ); - } - else - { - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL : unsilent sis-uninstall" ) - iInstallerState = EUninstalling; - iSWInst.Uninstall( iStatus, aUninstallParams.iUid, KSISMIMEType ); - } - } - else - { - LOGGER_WRITE( "CSConAppInstaller::ProcessUninstallL sis not present -> Leave" ); - User::Leave( KErrNotFound ); - } - } - - CleanupStack::PopAndDestroy( &entry ); - CleanupStack::PopAndDestroy( &sisRegistry ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::UninstallJavaL( const TUid& aUid, const TSConInstallMode aMode ) -// Uninstall java package -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::UninstallJavaL( const TUid& aUid, const TSConInstallMode aMode ) - { - TRACE_FUNC_ENTRY; - CJavaRegistry* javaRegistry = CJavaRegistry::NewLC( ); - TBool entryExist = javaRegistry->RegistryEntryExistsL( aUid ); - CleanupStack::PopAndDestroy( javaRegistry ); - - if( entryExist ) - { - if( aMode == ESilentInstall ) - { - LOGGER_WRITE( "CSConAppInstaller::UninstallJavaL : silent midlet-uninstall" ) - SwiUI::TUninstallOptionsPckg options; - iInstallerState = ESilentUninstalling; - iSWInst.SilentUninstall( iStatus, aUid, options, KMidletMIMEType ); - } - else - { - LOGGER_WRITE( "CSConAppInstaller::UninstallJavaL : unsilent midlet-uninstall" ) - iInstallerState = EUninstalling; - iSWInst.Uninstall( iStatus, aUid, KMidletMIMEType ); - } - } - else - { - LOGGER_WRITE( "CSConAppInstaller::UninstallJavaL java entry does not exist -> Leave" ) - User::Leave( KErrNotFound ); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::UninstallWidget( const TUid& aUid, const TSConInstallMode aMode ) -// Uninstall widget -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::UninstallWidget( const TUid& aUid, const TSConInstallMode aMode ) - { - TRACE_FUNC_ENTRY; - if( aMode == ESilentInstall ) - { - LOGGER_WRITE( "CSConAppInstaller::UninstallWidget : silent uninstall" ) - SwiUI::TUninstallOptionsPckg options; - iInstallerState = ESilentUninstalling; - iSWInst.SilentUninstall( iStatus, aUid, options, KWidgetMimeType ); - } - else - { - LOGGER_WRITE( "CSConAppInstaller::UninstallWidget : unsilent uninstall" ) - iInstallerState = EUninstalling; - iSWInst.Uninstall( iStatus, aUid, KWidgetMimeType ); - } - TRACE_FUNC_EXIT; - } - - -//-------------------------------------------------------------------------------- -//void CSConAppInstaller::ProcessListInstalledAppsL() -//-------------------------------------------------------------------------------- -// -void CSConAppInstaller::ProcessListInstalledAppsL() - { - TRACE_FUNC_ENTRY; - - CSConTask* task = NULL; - User::LeaveIfError( iQueue->GetTask( iCurrentTask, task ) ); - - SConPcdUtility::ProcessListInstalledAppsL( task ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConAppInstaller::DeleteFile( const TDesC& aPath ) -// Deletes a file -// ----------------------------------------------------------------------------- -// -void CSConAppInstaller::DeleteFile( const TDesC& aPath ) - { - TRACE_FUNC; - iFs.Delete( aPath ); - } -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconinstqueue.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconinstqueue.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,202 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: Installer Queue implementation -* -*/ - - -// INCLUDE FILES -#include "sconinstqueue.h" -#include "sconbrqueue.h" -#include "sconinstaller.h" -#include "sconpcdconsts.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CCSConInstallerQueue* CSConInstallerQueue::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConInstallerQueue* CSConInstallerQueue::NewL( RFs& aFs ) - { - TRACE_FUNC_ENTRY; - CSConInstallerQueue* self = new (ELeave) CSConInstallerQueue( aFs ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::CSConInstallerQueue() -// Constructor -// ----------------------------------------------------------------------------- -// -CSConInstallerQueue::CSConInstallerQueue( RFs& aFs ) : CActive( EPriorityStandard ), iFs( aFs ) - { - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::ConstructL() - { - TRACE_FUNC_ENTRY; - iInstaller = new (ELeave) CSConAppInstaller( this, iFs ); - CActiveScheduler::Add( iInstaller ); - User::LeaveIfError( iTimer.CreateLocal() ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::~CSConInstallerQueue() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConInstallerQueue::~CSConInstallerQueue() - { - TRACE_FUNC_ENTRY; - Cancel(); - if( iInstaller ) - { - iInstaller->Cancel(); - delete iInstaller; - iInstaller = NULL; - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::StartQueue() -// Starts queue polling -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::StartQueue() - { - TRACE_FUNC; - if( IsActive() ) - { - Cancel(); - } - - iTimer.After( iStatus, KSConTimerValue ); - SetActive(); - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::StartQueue() -// Stops queue polling -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::StopQueue() - { - TRACE_FUNC_ENTRY; - iTimer.Cancel(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::CancelTask( TInt aTask, TBool aAllTasks ) -// Cancels a task -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::CancelTask( TInt aTask, TBool aAllTasks ) - { - TRACE_FUNC_ENTRY; - //Stop the installer - if( aTask && !aAllTasks ) - { - iInstaller->StopInstaller( aTask ); - } - - if( aAllTasks ) - { - iInstaller->Cancel(); - } - CSConTaskQueue::CancelTask( aTask, aAllTasks ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::QueueAddress( CSConBackupRestoreQueue*& aTaskQueue ) -// An address pointer to another queue -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::QueueAddress( CSConBackupRestoreQueue*& aTaskQueue ) - { - TRACE_FUNC; - iBRQueueAddress = aTaskQueue; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::PollQueue() -// Polls queue -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::PollQueue() - { - TRACE_FUNC_ENTRY; - // find and start next task if installer and BR is inactive - if( !iInstaller->InstallerActive() - && !iBRQueueAddress->QueueProcessActive() ) - { - //find next task - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - TBool complete = iQueue[i]->GetCompleteValue(); - - if( complete == EFalse ) - { - iInstaller->StartInstaller( iQueue[i]->iTaskId ); - i = iQueue.Count() + 1; // jump out from loop - } - } - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::DoCancel() -// Implementation of CActive::DoCancel() -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::DoCancel() - { - TRACE_FUNC; - iTimer.Cancel(); - } - -// ----------------------------------------------------------------------------- -// CSConInstallerQueue::RunL() -// Implementation of CActive::RunL() -// ----------------------------------------------------------------------------- -// -void CSConInstallerQueue::RunL() - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "There are still %d tasks in this queue", iQueue.Count() ); - if( iQueue.Count() > 0 ) - { - PollQueue(); - StartQueue(); - } - TRACE_FUNC_EXIT; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconmetadata.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconmetadata.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1362 +0,0 @@ -/* -* Copyright (c) 2007-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: SConMetadata implementation -* -*/ - - -// INCLUDE FILES - -#include // for CnvUtfConverter -#include -#include -#include -#include -#include -#include -#include - -#include "sconmetadata.h" -#include "sconconmltask.h" -#include "sconpcdconsts.h" -#include "sconvideoparser.h" -#include "debug.h" -#include "sconmetadatafielddefs.h" - - - -const TInt KBufferSize(1024); -// Size of buffer to load from file start to get EXIF thumbnail -const TInt KJpegLoadBufferSize = 65536; // 64k - - -const TUint32 KFieldMaxLength = 0xFFFFFFFF; // four bytes reserved for "length" information - -// GPS related Exif IDs -const TUint16 KGPSLatitudeRef = 0x01; -const TUint16 KGPSLatitude = 0x02; -const TUint16 KGPSLongitudeRef = 0x03; -const TUint16 KGPSLongitude = 0x04; -const TUint16 KGPSAltitudeRef = 0x05; -const TUint16 KGPSAltitude = 0x06; - - -// extensions for exif parser -_LIT(KJpgExt, ".jpg"); -_LIT(KJpegExt, ".jpeg"); -// extensions for audio metadata parser -_LIT(KAacExt, ".aac"); -_LIT(KMp3Ext, ".mp3"); -_LIT(KMp4Ext, ".mp4"); -_LIT(KWmaExt, ".wma"); -// extensions for video metadata parser -_LIT(KM4aExt, ".m4a"); -_LIT(K3gpExt, ".3gp"); - - -// ============================= MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// SConMetadata::ProcessTask() -// ProcessTask -// ----------------------------------------------------------------------------- -// -void SConMetadata::ProcessTask( CSConTask& aTask, RFs& aFs ) - { - TRACE_FUNC_ENTRY; - TInt err(KErrNone); - if ( aTask.GetServiceId() == EGetMetadata ) - { - LOGGER_WRITE_1( "SConMetadata::ProcessTask() : file %S", - &aTask.iGetMetadataParams->iFilename ); - -#ifdef _DEBUG - LOGGER_WRITE( "start.. " ); - TTimeIntervalMicroSeconds sec; - TTime start; - TTime end; - start.HomeTime(); -#endif - - TParsePtrC filename( aTask.iGetMetadataParams->iFilename ); - - if ( filename.Ext().CompareF( KJpgExt ) == 0 - || filename.Ext().CompareF( KJpegExt ) == 0 ) - { - // jpg file, try to read exif - LOGGER_WRITE( "jpg file, Try to read exif" ); - TRAP( err, ReadExifDataL( aTask, aFs ) ); - } - else if ( filename.Ext().CompareF( KMp4Ext ) == 0 - || filename.Ext().CompareF( K3gpExt ) == 0 ) - { - LOGGER_WRITE( "Try to read video" ); - TRAP( err, GetVideoMetadataL( aTask, aFs ) ); - } - else if ( filename.Ext().CompareF( KAacExt ) == 0 - || filename.Ext().CompareF( KM4aExt ) == 0 - || filename.Ext().CompareF( KMp3Ext ) == 0 - || filename.Ext().CompareF( KWmaExt ) == 0 ) - { - - // audio file, try to read audio - LOGGER_WRITE( "Try to read audio" ); - TRAP( err, GetAudioMetadataL( aTask ) ); - } - else - { - LOGGER_WRITE( "File extension not supported" ); - err = KErrNotSupported; - } - -#ifdef _DEBUG - end.HomeTime(); - sec = end.MicroSecondsFrom( start ); - - LOGGER_WRITE_1( "trapErr %d", err ); - LOGGER_WRITE_1( "duration: %Ld", sec.Int64() ); -#endif - } - else - { - LOGGER_WRITE( "SConMetadata::ProcessTask() : not supported" ); - err = KErrNotSupported; - } - - LOGGER_WRITE( "SConMetadata::ProcessTask() : CompleteTask" ); - - TInt progress( KSConCodeTaskCompleted ); - TBool complete ( ETrue ); - switch( err ) - { - case KErrNone : - progress = KSConCodeTaskCompleted; - break; - case KErrNotFound : - case KErrBadName : - progress = KSConCodeNotFound; - break; - default : - progress = KSConCodeConflict; - break; - } - - aTask.SetCompleteValue( complete ); - aTask.SetProgressValue( progress ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// SConMetadata::GetAudioMetadataL() -// Read audio metadata -// ----------------------------------------------------------------------------- -// -void SConMetadata::GetAudioMetadataL( CSConTask& aTask ) - { - TRACE_FUNC_ENTRY; - CMetaDataUtility* metadataUtil = CMetaDataUtility::NewL(); - CleanupStack::PushL( metadataUtil ); - - LOGGER_WRITE( "SConMetadata::GetAudioMetadataL() : OpenFileL" ); - metadataUtil->OpenFileL( aTask.iGetMetadataParams->iFilename ); - - TInt count = metadataUtil->MetaDataCount(); - LOGGER_WRITE_1( "SConMetadata::GetAudioMetadataL() : MetaDataCount %d", count ); - if ( count > 0 ) - { - const CMetaDataFieldContainer& fields = metadataUtil->MetaDataFieldsL(); - count = fields.Count(); - - CBufFlat* buffer = CBufFlat::NewL( KBufferSize ); - CleanupStack::PushL( buffer ); - buffer->Reset(); - - - TInt offset(0); - // write object header - // Item type (1 byte) + Version (1 byte) = 2 bytes - buffer->ExpandL( offset, 2 ); - - // header id - TUint8 value( KSconMetadataHeaderAudio ); - buffer->Write( offset, TPtrC8(&value, 1) ); - offset++; - - // header version - value = KSconMetadataHeaderVersion; - buffer->Write( offset, TPtrC8(&value, 1) ); - offset++; - - // Add ID3 field - value = metadataUtil->ID3Version(); - AppendTUintDataFieldL( buffer, value, KSconAudioID3Version ); - - TMetaDataFieldId fieldId; - TPtrC fieldData; - - for ( TInt i = 0; i < count; i++ ) - { - // get field id - fields.FieldIdAt( i , fieldId ); - LOGGER_WRITE_2( "AudioFieldId( %d ): 0x%02x", i, fieldId ); - TUint8 sconFieldId = AudioFieldId( fieldId ); - if ( sconFieldId == KSconAudioJpeg ) - { - TPtrC8 field8( fields.Field8( fieldId ) ); - AppendByteDataFieldL( - buffer, - field8, - AudioFieldId( fieldId ) ); - } - else if ( sconFieldId > 0 ) - { - // get field data and add UTF-8 formatted text to buffer - fieldData.Set( fields.At( i , fieldId ) ); - AppendUtf8DataFieldL( buffer, fieldData, sconFieldId ); - } - else - { - LOGGER_WRITE("Unknown field skipped"); - } - } - - if ( buffer->Size() > 0 ) - { - LOGGER_WRITE_1( "SConMetadata::GetAudioMetadataL() : buffer->Size() %d", buffer->Size() ); - if ( aTask.iGetMetadataParams->iData ) - { - delete aTask.iGetMetadataParams->iData; - aTask.iGetMetadataParams->iData = NULL; - } - //Initialize the task data buffer - aTask.iGetMetadataParams->iData = HBufC8::NewL( buffer->Size() ); - TPtr8 dataPtr = aTask.iGetMetadataParams->iData->Des(); - - buffer->Read( 0, dataPtr, buffer->Size() ); - LOGGER_WRITE_1( "SConMetadata::GetAudioMetadataL() dataPtr len: %d", dataPtr.Length()); - } - CleanupStack::PopAndDestroy( buffer ); - } - - CleanupStack::PopAndDestroy( metadataUtil ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// SConMetadata::GetVideoMetadataL() -// Read video metadata -// ----------------------------------------------------------------------------- -// -void SConMetadata::GetVideoMetadataL( CSConTask& aTask, RFs& aFs ) - { - TRACE_FUNC_ENTRY; - CBufFlat* buffer = CBufFlat::NewL( KBufferSize ); - CleanupStack::PushL( buffer ); - buffer->Reset(); - - TInt offset(0); - // write object header - // Item type (1 byte) + Version (1 byte) = 2 bytes - buffer->ExpandL( offset, 2 ); - - // header id - TUint8 value( KSconMetadataHeaderVideo ); - buffer->Write( offset, TPtrC8(&value, 1) ); - offset++; - - // header version - value = KSconMetadataHeaderVersion; - buffer->Write( offset, TPtrC8(&value, 1) ); - offset++; - - - CSConVideoParser* videoParser = CSConVideoParser::NewLC(); - - videoParser->OpenFileL( aFs, aTask.iGetMetadataParams->iFilename ); - LOGGER_WRITE( "Open completed" ); - - const TUint KFormatMaxLength = 100; - TBuf formatMimeType; - formatMimeType.Copy( videoParser->VideoFormatMimeTypeL() ); - LOGGER_WRITE_1( "formatMimeType: %S", &formatMimeType); - AppendUtf8DataFieldL( buffer, formatMimeType, KSconVideoFormat ); - - // we can't use TReal format, so convert frame rate to frames/ms (or 1000 frames/s) - TReal32 frameRate = videoParser->VideoFrameRateL(); - const TUint KFrameRateMultiplier = 1000; - TInt frm = frameRate * KFrameRateMultiplier; - LOGGER_WRITE_1( "frameRate: %f", frameRate ); - LOGGER_WRITE_1( "frm: %d", frm ); - AppendTUintDataFieldL( buffer, frm, KSconVideoFrameRate ); - - TSize size; - videoParser->VideoFrameSizeL( size ); - LOGGER_WRITE_2( "VideoFrameSizeL: %d, %d", size.iWidth, size.iHeight); - AppendTUintDataFieldL( buffer, size.iWidth, KSconVideoFrameSizeWidth ); - AppendTUintDataFieldL( buffer, size.iHeight, KSconVideoFrameSizeHeight ); - - - - const TUint8 KSconVideoAudioStreamMimetype ( 0x09 ); - const TUint8 KSconVideoVideoStreamMimetype ( 0x0a ); - - TInt videoBitRate = videoParser->VideoBitRateL(); - LOGGER_WRITE_1( "videoBitRate: %d", videoBitRate); - AppendTUintDataFieldL( buffer, videoBitRate, KSconVideoVideoBitRate ); - - TInt audioBitRate = videoParser->AudioBitRateL(); - LOGGER_WRITE_1( "audioBitRate: %d", audioBitRate); - AppendTUintDataFieldL( buffer, audioBitRate, KSconVideoAudioBitRate ); - - TInt durationMs = videoParser->DurationL(); - LOGGER_WRITE_1( "duration ms: %d", durationMs); - AppendTUintDataFieldL( buffer, durationMs, KSconVideoDuration ); - - TPtrC8 thumbnail = videoParser->Thumbnail(); - if ( thumbnail.Length() > 0 ) - { - AppendByteDataFieldL( buffer, thumbnail, KSconVideoThumbnail ); - } - - TPtrC audioMimeType = videoParser->AudioMimeTypeL(); - if ( audioMimeType.Length() > 0 ) - { - AppendUtf8DataFieldL( buffer, audioMimeType, KSconVideoAudioStreamMimetype ); - } - - TPtrC videoMimeType = videoParser->VideoMimeTypeL(); - if ( videoMimeType.Length() > 0 ) - { - AppendUtf8DataFieldL( buffer, formatMimeType, KSconVideoVideoStreamMimetype ); - } - - CleanupStack::PopAndDestroy( videoParser ); - LOGGER_WRITE( "videoParser deleted" ); - - - if ( buffer->Size() > 0 ) - { - if ( aTask.iGetMetadataParams->iData ) - { - delete aTask.iGetMetadataParams->iData; - aTask.iGetMetadataParams->iData = NULL; - } - //Initialize the task data buffer - aTask.iGetMetadataParams->iData = HBufC8::NewL( buffer->Size() ); - TPtr8 dataPtr = aTask.iGetMetadataParams->iData->Des(); - - buffer->Read( 0, dataPtr, buffer->Size() ); - } - CleanupStack::PopAndDestroy( buffer ); - - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// SConMetadata::AudioFieldId() -// Map TMetaDataFieldId to KSconAudio field id -// ----------------------------------------------------------------------------- -// -TUint8 SConMetadata::AudioFieldId( const TMetaDataFieldId fieldId ) - { - TUint8 ret(NULL); - switch( fieldId ) - { - case EMetaDataSongTitle : - ret = KSconAudioTitle; - break; - case EMetaDataArtist : - ret = KSconAudioArtist; - break; - case EMetaDataAlbum : - ret = KSconAudioAlbum; - break; - case EMetaDataYear : - ret = KSconAudioYear; - break; - case EMetaDataComment : - ret = KSconAudioComment; - break; - case EMetaDataAlbumTrack : - ret = KSconAudioAlbumTrack; - break; - case EMetaDataGenre : - ret = KSconAudioGenre; - break; - case EMetaDataComposer : - ret = KSconAudioComposer; - break; - case EMetaDataCopyright : - ret = KSconAudioCopyright; - break; - case EMetaDataOriginalArtist : - ret = KSconAudioOriginalArtist; - break; - case EMetaDataUrl : - ret = KSconAudioUrl; - break; - case EMetaDataUserUrl : - ret = KSconAudioUserUrl; - break; - case EMetaDataJpeg : - ret = KSconAudioJpeg; - break; - case EMetaDataVendor : - ret = KSconAudioVendor; - break; - case EMetaDataRating : - ret = KSconAudioRating; - break; - case EMetaDataUniqueFileIdentifier : - ret = KSconAudioUniqueFileIdentifier; - break; - case EMetaDataDuration : - ret = KSconAudioDuration; - break; - case EMetaDataDate : - ret = KSconAudioDate; - break; - case EMetaDataUnsyncLyrics: - ret = KSconAudioUnsyncLyrics; - break; - case EMetaDataProtected: - ret = KSconAudioProtected; - break; - default : - LOGGER_WRITE( "SConMetadata::AudioFieldId : ERR field not defined!" ); - break; - } - return ret; - } - - -// ----------------------------------------------------------------------------- -// SConMetadata::GetExifTagL( CExifRead* aReader, const TUint8 aTagID ) -// This function is used to read exif data that might leave. -// ----------------------------------------------------------------------------- -// -HBufC8* SConMetadata::GetExifTagL( CExifRead* aReader, const TUint8 aTagID ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( " aTagID: 0x%02x", aTagID ); - HBufC8* tempBuf( NULL ); - - switch( aTagID ) - { - case KSconExifThumbnail: - tempBuf = aReader->GetThumbnailL(); - break; - case KSconExifDescription: - tempBuf = aReader->GetImageDescriptionL(); - break; - case KSconExifMake: - tempBuf = aReader->GetMakeL(); - break; - case KSconExifModel: - tempBuf = aReader->GetModelL(); - break; - case KSconExifDateTime: - tempBuf = aReader->GetDateTimeL(); - break; - case KSconExifSoftware: - tempBuf = aReader->GetSoftwareL(); - break; - case KSconExifCopyright: - tempBuf = aReader->GetCopyrightL(); - break; - case KSconExifIsoSpeedRatings: - tempBuf = aReader->GetIsoSpeedRatingsL(); - if ( tempBuf ) - { - TInt isoSpeed = ReadTUint32( tempBuf->Des() ); - LOGGER_WRITE_1(" isoSpeed: %d", isoSpeed); - delete tempBuf; - - const TInt maxLength(5); - // no need to push on cleanupstack as leave cannot - // happen before returning tempBuf. - tempBuf = HBufC8::NewL(maxLength); - TPtr8 temp = tempBuf->Des(); - temp.Num( isoSpeed ); - } - break; - case KSconExifDateTimeOriginal: - tempBuf = aReader->GetDateTimeOriginalL(); - break; - case KSconExifDateTimeDigitized: - tempBuf = aReader->GetDateTimeDigitizedL(); - break; - case KSconExifMakerNote: - // makernote contents are up to the manufacturer - // not needed. - User::Leave( KErrNotSupported ); - break; - case KSconExifUserComment: - tempBuf = aReader->GetUserCommentL(); - break; - case KSconExifRelatedSoundFile: - tempBuf = aReader->GetRelatedSoundFileL(); - break; - default: - User::Leave( KErrNotSupported ); - } - TRACE_FUNC_EXIT; - return tempBuf; - } - -// ----------------------------------------------------------------------------- -// SConMetadata::ReadTUint32() -// Convert 8-bit binary data to unsigned integer -// ----------------------------------------------------------------------------- -// -TUint32 SConMetadata::ReadTUint32( const TDesC8& aData ) - { - TRACE_FUNC_ENTRY; - TUint32 result = 0; - TUint8 c; - - for (TInt i=aData.Length()-1; i>=0; i--) - { - c = aData[i]; - result = (result << 8) | c; - } - - LOGGER_WRITE_1( "SConMetadata::ReadTUint32() : returned %d ", result ); - return result; - } - -// ----------------------------------------------------------------------------- -// SConMetadata::GetFileDataLC() -// Read data from file -// ----------------------------------------------------------------------------- -// -HBufC8* SConMetadata::GetFileDataLC( const TDesC& aFilename, RFs& aFs ) - { - TRACE_FUNC_ENTRY; - RFile file; - - User::LeaveIfError( file.Open( aFs, aFilename, - EFileRead | EFileShareReadersOnly ) ); - CleanupClosePushL( file ); - - LOGGER_WRITE( "SConMetadata::GetFileDataLC() : file opened" ); - - TInt dataSize(0); - ContentAccess::CContent* content; - content = ContentAccess::CContent::NewLC( file ); - ContentAccess::CData* data = content->OpenContentLC( ContentAccess::EPeek ); - data->DataSizeL(dataSize); - - LOGGER_WRITE( "SConMetadata::GetFileDataLC() : content opened" ); - // Read 64k from the beginning of the file - if ( dataSize > KJpegLoadBufferSize ) - { - dataSize = KJpegLoadBufferSize; - } - HBufC8* readBuffer = HBufC8::NewLC( dataSize ); - TPtr8 readPtr = readBuffer->Des(); - User::LeaveIfError( data->Read( readPtr, dataSize ) ); - - LOGGER_WRITE( "SConMetadata::GetFileDataLC() : data readed" ); - CleanupStack::Pop( readBuffer ); - CleanupStack::PopAndDestroy( data ); - CleanupStack::PopAndDestroy( content ); - CleanupStack::PopAndDestroy( &file ); - - CleanupStack::PushL( readBuffer ); - TRACE_FUNC_EXIT; - return readBuffer; - } - -// ----------------------------------------------------------------------------- -// SConMetadata::ReadExifDataL() -// Read Exif data -// ----------------------------------------------------------------------------- -// -void SConMetadata::ReadExifDataL( CSConTask& aTask, RFs& aFs ) - { - TRACE_FUNC_ENTRY; - - // read data from file - HBufC8* jpegReadBuffer = GetFileDataLC( aTask.iGetMetadataParams->iFilename, aFs ); - - CExifRead* reader = CExifRead::NewL( - *jpegReadBuffer, CExifRead::ENoJpeg | CExifRead::ENoTagChecking ); - - LOGGER_WRITE( "SConMetadata::ReadExifDataL() : reader created" ); - CleanupStack::PopAndDestroy( jpegReadBuffer ); - CleanupStack::PushL( reader ); - - - CBufFlat* buffer = CBufFlat::NewL( KBufferSize ); - CleanupStack::PushL( buffer ); - buffer->Reset(); - - - TInt offset(0); - // header id (1 byte) + head.version (1 byte) = 2 bytes - - buffer->ExpandL( offset, 2 ); - - // header id - TUint8 value( KSconMetadataHeaderExif ); - buffer->Write( offset, TPtrC8(&value, 1) ); - offset++; - - // header version - value = KSconMetadataHeaderVersion; - buffer->Write( offset, TPtrC8(&value, 1) ); - offset++; - - - HBufC8* tempBuf(NULL); - - TInt err; - - for ( TInt tagID = KSconExifThumbnail; tagID < KSconExifGpsVersion; tagID++ ) - { - // GetExifTagL function is used only to tags that leaves if data is not found - TRAP( err, tempBuf = GetExifTagL( reader, tagID ) ); - if ( !err ) - { - LOGGER_WRITE("write to buffer"); - CleanupStack::PushL( tempBuf ); - AppendByteDataFieldL( buffer, tempBuf->Des(), tagID ); - CleanupStack::PopAndDestroy( tempBuf ); - tempBuf = NULL; - } - else - { - LOGGER_WRITE_1( "GetExifTagL Leave code %d", err ); - } - } - - - TUint16 value16a; - TUint32 value32a; - TUint32 value32b; - TInt32 val32a; - TInt32 val32b; - - // Orientation - err = reader->GetOrientation( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifOrientation ); - } - - // XResolution - err = reader->GetXResolution( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifXResolution1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifXResolution2 ); - } - - // YResolution - err = reader->GetYResolution( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifYResolution1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifYResolution2 ); - } - - // ResolutionUnit - err = reader->GetResolutionUnit( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifResolutionUnit ); - } - - // YCbCrPositioning - err = reader->GetYCbCrPositioning( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifYCbCrPositioning ); - } - - // YCbCrPositioning - err = reader->GetYCbCrPositioning( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifYCbCrPositioning ); - } - - - // ExposureTime - err = reader->GetExposureTime( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifExposureTime1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifExposureTime2 ); - } - - // ComponentsConfiguration - TUint8 value8a; - TUint8 value8b; - TUint8 value8c; - TUint8 value8d; - err = reader->GetComponentsConfiguration( value8a, value8b, value8c, value8d ); - if ( !err ) - { - TInt offset; - offset = buffer->Size(); - - // field ID (1 byte) + field lenght (4 bytes) + field data (4bytes) = 9 bytes - buffer->ExpandL( offset, 9 ); - - // field id (one byte) - TUint8 fieldId( KSconExifComponentsConfiguration ); - buffer->Write( offset, TPtrC8( &fieldId, 1 ) ); - offset++; - - // field lenght - WriteTUint32( buffer, offset, 4); - offset += 4; - - buffer->Write( offset, TPtrC8(&value8a, 1) ); - offset++; - buffer->Write( offset, TPtrC8(&value8b, 1) ); - offset++; - buffer->Write( offset, TPtrC8(&value8c, 1) ); - offset++; - buffer->Write( offset, TPtrC8(&value8d, 1) ); - offset++; - } - - // Flash - err = reader->GetFlash( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifFlash ); - } - - // ColorSpace - err = reader->GetColorSpace( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifColorSpace ); - } - - // PixelXDimension - err = reader->GetPixelXDimension( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifPixelXDimension ); - } - - // PixelYDimension - err = reader->GetPixelYDimension( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifPixelYDimension ); - } - - // ExposureMode - err = reader->GetExposureMode( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifExposureMode ); - } - - // WhiteBalance - err = reader->GetWhiteBalance( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifWhiteBalance ); - } - - // SceneCaptureType - err = reader->GetSceneCaptureType( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifSceneCaptureType ); - } - - // ExposureProgram - err = reader->GetExposureProgram( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifExposureProgram ); - } - - // GetApertureValue - err = reader->GetApertureValue( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifApertureValue1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifApertureValue2 ); - } - - // GetExposureBiasValue - err = reader->GetExposureBiasValue( val32a, val32b ); - if ( !err ) - { - value32a = val32a; - value32b = val32b; - AppendTUintDataFieldL( buffer, value32a, KSconExifExposureBiasValue1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifExposureBiasValue2 ); - } - - // GetMeteringMode - err = reader->GetMeteringMode( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifMeteringMode ); - } - - // GetLightSource - err = reader->GetLightSource( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifLightSource ); - } - - // GetFileSource - TInt8 val8; - err = reader->GetFileSource( val8 ); - if ( !err ) - { - value8a = val8; - AppendTUintDataFieldL( buffer, value8a, KSconExifFileSource ); - } - - // GetDigitalZoomRatio - err = reader->GetDigitalZoomRatio( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifDigitalZoomRatio1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifDigitalZoomRatio2 ); - } - - // GetContrast - err = reader->GetContrast( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifContrast ); - } - - // GetSaturation - err = reader->GetSaturation( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifSaturation ); - } - - // GetSharpness - err = reader->GetSharpness( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifSharpness ); - } - - // GetExifVersion - err = reader->GetExifVersion( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifExifVersion ); - } - - // GetFlashPixVersion - err = reader->GetFlashPixVersion( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifFlashPixVersion ); - } - - // GetThumbnailXResolution - err = reader->GetThumbnailXResolution( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifThumbXResolution1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifThumbXResolution2 ); - } - - // GetThumbnailYResolution - err = reader->GetThumbnailYResolution( value32a, value32b ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifThumbYResolution1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifThumbYResolution2 ); - } - - // GetThumbnailResolutionUnit - err = reader->GetThumbnailResolutionUnit( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifThumbResolutionUnit ); - } - - // GetThumbnailCompression - err = reader->GetThumbnailCompression( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifThumbCompression ); - } - - // GetJpegInterchangeFormat - err = reader->GetJpegInterchangeFormat( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifThumbJpegInterchangeFormat ); - } - - // GetJpegInterchangeFormatLength - err = reader->GetJpegInterchangeFormatLength( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifThumbJpegInterchangeFormatLength ); - } - - // GetShutterSpeedValue - err = reader->GetShutterSpeedValue( val32a, val32b ); - if ( !err ) - { - value32a = val32a; - value32b = val32b; - AppendTUintDataFieldL( buffer, value32a, KSconExifShutterSpeedValue1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifShutterSpeedValue2 ); - } - - // GetBrightnessValue - err = reader->GetBrightnessValue( val32a, val32b ); - if ( !err ) - { - value32a = val32a; - value32b = val32b; - AppendTUintDataFieldL( buffer, value32a, KSconExifBrightnessValue1 ); - AppendTUintDataFieldL( buffer, value32b, KSconExifBrightnessValue2 ); - } - - // GetCustomRendered - err = reader->GetCustomRendered( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifCustomRendered ); - } - - // GetGainControl - err = reader->GetGainControl( value16a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value16a, KSconExifGainControl ); - } - - // GetGpsVersion - err = reader->GetGpsVersion( value32a ); - if ( !err ) - { - AppendTUintDataFieldL( buffer, value32a, KSconExifGpsVersion ); - } - - // Get GPS coordinates - const TUint KCoordinatesMaxLength = 50; - TBuf gpsInfo; - // Latidute - err = GetExifGPSLatitudeL( *reader, gpsInfo ); - if ( !err ) - { - AppendUtf8DataFieldL( buffer, gpsInfo ,KSconExifGPSLatitude ); - } - - // Longitude - err = GetExifGPSLongitudeL( *reader, gpsInfo ); - if ( !err ) - { - AppendUtf8DataFieldL( buffer, gpsInfo ,KSconExifGPSLongitude ); - } - - // Altidute - err = GetExifGPSAltiduteL( *reader, gpsInfo ); - if ( !err ) - { - AppendUtf8DataFieldL( buffer, gpsInfo ,KSconExifGPSAltitude ); - } - - LOGGER_WRITE( "SConMetadata::ReadExifDataL() : All data collected" ); - - if ( buffer->Size() > 0 ) - { - LOGGER_WRITE_1( "SConMetadata::ReadExifDataL() : buffer->Size() %d", buffer->Size() ); - if ( aTask.iGetMetadataParams->iData ) - { - delete aTask.iGetMetadataParams->iData; - aTask.iGetMetadataParams->iData = NULL; - } - //Initialize the task data buffer - aTask.iGetMetadataParams->iData = HBufC8::NewL( buffer->Size() ); - TPtr8 dataPtr = aTask.iGetMetadataParams->iData->Des(); - - buffer->Read( 0, dataPtr, buffer->Size() ); - LOGGER_WRITE_1( "SConMetadata::ReadExifDataL() dataPtr len: %d", dataPtr.Length()); - } - CleanupStack::PopAndDestroy( buffer ); - - LOGGER_WRITE( "SConMetadata::ReadExifDataL() : task updated" ); - - CleanupStack::PopAndDestroy( reader ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::ConvertRationalTag( const CExifTag& aTag, TDes& aPosDegrees ) -// parses degrees, minutes and seconds from CExifTag and converts it to string format -// ----------------------------------------------------------------------------- -// -TInt SConMetadata::ConvertRationalTag( const CExifTag& aTag, TDes& aPosDegrees ) - { - TRACE_FUNC_ENTRY; - TInt numer(0); - TInt denom(0); - TReal64 degrees(0); - TReal64 minutes(0); - TReal64 seconds(0); - - const TUint8* ratData = aTag.Data().Ptr(); - for ( TUint y=0; y < aTag.TagInfo().iDataCount; y++ ) - { - numer = 0; - denom = 0; - Mem::Copy(&numer, ratData + ((y * 2) * sizeof(numer)), sizeof(numer)); - Mem::Copy(&denom, ratData + (((y * 2) + 1) * sizeof(numer)), sizeof(denom)); - if (denom != 0) - { - if ( y == 0 )// degrees - { - degrees = numer/denom; - } - else if ( y == 1 )// minutes - { - minutes = numer/denom; - } - else if ( y == 2 )// seconds - { - seconds = numer/denom; - } - } - } - _LIT(KFormat, "%.0f°%.0f'%.2f\"" ); - aPosDegrees.Format( KFormat, degrees, minutes, seconds ); - TRACE_FUNC_EXIT; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::GetExifGPSLatitudeL( CExifRead& aExifRead, TDes& aLatitude ) -// Read latidute from ExifReader -// ----------------------------------------------------------------------------- -// -TInt SConMetadata::GetExifGPSLatitudeL( CExifRead& aExifRead, TDes& aLatitude ) - { - TRACE_FUNC_ENTRY; - TInt ret(KErrNone); - if ( aExifRead.TagExists( KGPSLatitudeRef, EIfdGps ) - && aExifRead.TagExists( KGPSLatitude, EIfdGps) ) - { - // get latidute - const CExifTag* lat = aExifRead.GetTagL( - EIfdGps, - KGPSLatitude ); - User::LeaveIfError( ConvertRationalTag( *lat, aLatitude ) ); - if ( aLatitude.Length()+2 > aLatitude.MaxLength() ) - { - User::Leave( KErrTooBig ); - } - - // south or north - const CExifTag* latRef = aExifRead.GetTagL( - EIfdGps, - KGPSLatitudeRef ); - _LIT8( KNorthTagDef8, "N" ); - _LIT( KNorth, "N " ); - _LIT( KSouth, "S " ); - if ( latRef->Data().Find( KNorthTagDef8 ) != KErrNotFound ) - { - aLatitude.Insert( 0, KNorth ); - } - else - { - aLatitude.Insert( 0, KSouth ); - } - } - else - { - ret=KErrNotFound; - } - TRACE_FUNC_EXIT; - return ret; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::GetExifGPSLongitudeL( CExifRead& aExifRead, TDes& aLongitude ) -// Read longitude from ExifReader -// ----------------------------------------------------------------------------- -// -TInt SConMetadata::GetExifGPSLongitudeL( CExifRead& aExifRead, TDes& aLongitude ) - { - TRACE_FUNC_ENTRY; - TInt ret(KErrNone); - if ( aExifRead.TagExists( KGPSLongitudeRef, EIfdGps ) - && aExifRead.TagExists( KGPSLongitude, EIfdGps) ) - { - // get longitude - const CExifTag* lon = aExifRead.GetTagL( - EIfdGps, - KGPSLongitude ); - User::LeaveIfError( ConvertRationalTag( *lon, aLongitude ) ); - if ( aLongitude.Length()+2 > aLongitude.MaxLength() ) - { - User::Leave( KErrTooBig ); - } - - // east or west - const CExifTag* lonref = aExifRead.GetTagL( - EIfdGps, - KGPSLongitudeRef ); - _LIT8( KEastTagDef8, "E" ); - _LIT( KEast, "E " ); - _LIT( KWest, "W " ); - if ( lonref->Data().Find( KEastTagDef8 ) != KErrNotFound ) - { - aLongitude.Insert( 0, KEast ); - } - else - { - aLongitude.Insert( 0, KWest ); - } - } - else - { - ret = KErrNotFound; - } - TRACE_FUNC_EXIT; - return ret; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::GetExifGPSAltiduteL( CExifRead& aExifRead, TDes& aAltidute ) -// Read altidute from ExifReader -// ----------------------------------------------------------------------------- -// -TInt SConMetadata::GetExifGPSAltiduteL( CExifRead& aExifRead, TDes& aAltidute ) - { - TRACE_FUNC_ENTRY; - - TInt ret(KErrNone); - if ( aExifRead.TagExists( KGPSAltitudeRef, EIfdGps ) - && aExifRead.TagExists( KGPSAltitude, EIfdGps) ) - { - if ( aAltidute.MaxLength() < 5 ) - { - User::Leave( KErrTooBig ); - } - - // get altidute - const CExifTag* alt = aExifRead.GetTagL( - EIfdGps, - KGPSAltitude ); - const TUint8* ratData = alt->Data().Ptr(); - - TInt numer; - TInt denom; - Mem::Copy(&numer, ratData , sizeof(numer)); - Mem::Copy(&denom, ratData + (sizeof(numer)), sizeof(denom)); - - TReal32 tmp = numer / denom; - - // sea level - const CExifTag* altref = aExifRead.GetTagL( - EIfdGps, - KGPSAltitudeRef ); - _LIT8( KAltSealevelDef8, "1" ); - if ( altref->Data().Find( KAltSealevelDef8 ) != KErrNotFound ) - { - // seaLevelReference -> negative value - tmp *= -1; - } - TRealFormat format; - format.iType = KRealFormatFixed; - format.iPlaces=1; - User::LeaveIfError( aAltidute.Num( tmp, format ) ); - } - else - { - ret = KErrNotFound; - } - TRACE_FUNC_EXIT; - return ret; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::AppendUtf8DataFieldL( CBufFlat* aBuffer, -// const TPtrC aAppendData, const TUint8 aFieldId ) -// Write 8bit field id value, data length (32bit) and UTF8 data to buffer -// ----------------------------------------------------------------------------- -// -void SConMetadata::AppendUtf8DataFieldL( CBufFlat* aBuffer, - const TPtrC aAppendData, const TUint8 aFieldId ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFieldId: 0x%02x", aFieldId); - HBufC8* tempBuf = HBufC8::NewLC( aAppendData.Size() ); - TPtr8 temp = tempBuf->Des(); - - CnvUtfConverter::ConvertFromUnicodeToUtf8( temp, aAppendData ); - LOGGER_WRITE_1( "lenght: %d", temp.Length() ); - - if ( temp.Length() > KFieldMaxLength ) - { - LOGGER_WRITE("Data length is too big, field skipped"); - CleanupStack::PopAndDestroy( tempBuf ); - return; - } - - TInt offset; - offset = aBuffer->Size(); - // field ID (1 byte) + field lenght (4 bytes) + field data - aBuffer->ExpandL( offset, temp.Length() + 5 ); - - // field id (one byte) - aBuffer->Write( offset, TPtrC8(&aFieldId, 1) ); - offset++; - - WriteTUint32( aBuffer, offset, temp.Length()); - offset += 4; - - // field data - aBuffer->Write( offset, temp, temp.Length() ); - offset += temp.Length(); - - CleanupStack::PopAndDestroy( tempBuf ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::AppendByteDataFieldL( CBufFlat* aBuffer, -// const TPtrC8 aAppendData, const TUint8 aFieldId ) -// Write 8bit field id value, data length (32bit) and n*8bit data to buffer -// ----------------------------------------------------------------------------- -// -void SConMetadata::AppendByteDataFieldL( CBufFlat* aBuffer, - const TPtrC8 aAppendData, const TUint8 aFieldId ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFieldId: 0x%02x", aFieldId); - LOGGER_WRITE_1( "lenght: %d", aAppendData.Length() ); - if ( aAppendData.Length() > KFieldMaxLength ) - { - LOGGER_WRITE("Data length is too big, field skipped"); - return; - } - TInt offset; - offset = aBuffer->Size(); - - // field id (1) + field len (4) + datalen = 5 + datalen - aBuffer->ExpandL( offset, aAppendData.Length() + 5 ); - - // field id (one byte) - aBuffer->Write( offset, TPtrC8(&aFieldId, 1) ); - offset++; - - // field data length (32bit unsigned integer, two byte) - WriteTUint32( aBuffer, offset, aAppendData.Length() ); - offset += 4; - - // field data - aBuffer->Write( offset, aAppendData ); - offset += aAppendData.Length(); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::AppendTUintDataFieldL( CBufFlat* aBuffer, -// const TUint32 aValue, const TUint8 aFieldId ) -// Write 8bit field id value, data length (16bit) and n*8bit data to buffer -// ----------------------------------------------------------------------------- -// -void SConMetadata::AppendTUintDataFieldL( CBufFlat* aBuffer, - TUint32 aValue, const TUint8 aFieldId ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( "aFieldId: 0x%02x", aFieldId); - LOGGER_WRITE_1( "aValue dec: %u", aValue); - TInt offset; - offset = aBuffer->Size(); - TInt dataLen(1); - TUint8 temp[4]; - TInt i(0); - - temp[i] = aValue & 0xFF; - - aValue >>= 8; - while( aValue > 0 ) - { - i++; - temp[i] = aValue & 0xFF; - aValue >>= 8; - dataLen++; - } - // field id (1) + field len (4) + datalen = 5 + datalen - aBuffer->ExpandL( offset, 5 + dataLen ); - - // field id (one byte) - aBuffer->Write( offset, TPtrC8(&aFieldId, 1) ); - offset++; - - // field data length (32bit unsigned integer, two byte) - WriteTUint32( aBuffer, offset, dataLen ); - offset += 4; - - // field data - for( TInt i = dataLen-1; i>=0; i-- ) - { - aBuffer->Write( offset, TPtrC8(&temp[i], 1) ); - offset++; - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// void SConMetadata::WriteTUint32( CBufFlat* aBuffer, TInt offset, TUint32 aValue ) -// Write 32bit unsigned integer value to buffer. -// ----------------------------------------------------------------------------- -// -void SConMetadata::WriteTUint32( CBufFlat* aBuffer, TInt offset, TUint32 aValue ) - { - TUint8 temp[4]; - TInt i(0); - - temp[i] = aValue & 0xFF; - - aValue >>= 8; - for ( TInt i=1; i<4; i++ ) - { - temp[i] = aValue & 0xFF; - aValue >>= 8; - } - - // high to low - for ( TInt i=3; i>=0; i-- ) - { - aBuffer->Write( offset, TPtrC8(&temp[i], 1) ); - offset++; - } - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconpcd.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconpcd.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,626 +0,0 @@ -/* -* 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: CSConPCD implementation -* -*/ - - -// INCLUDE FILES - -#include "sconpcd.h" -#include "sconpcdconsts.h" -#include "sconinstqueue.h" -#include "sconbrqueue.h" -#include "sconmetadata.h" -#include "sconsynchandler.h" -#include "debug.h" - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CreateCSConPCDL() -// Entry to CSConPCD -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConPCD* CreateCSConPCDL() - { - TRACE_FUNC; - return CSConPCD::NewL(); - } - -// ----------------------------------------------------------------------------- -// CSConPCD::NewL() -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConPCD* CSConPCD::NewL() - { - TRACE_FUNC_ENTRY; - CSConPCD* self = new (ELeave) CSConPCD(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::CSConPCD() -// Constructor -// ----------------------------------------------------------------------------- -// -CSConPCD::CSConPCD() : iInstallerQueue( NULL ), iBackupRestoreQueue( NULL ), - iLatestReply(NULL), iTaskNumber( 0 ), iMaxObjectSize( 65536 ), - iLastOperation( ENoTask ) - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::ConstructL() -// Initializes member data -// ----------------------------------------------------------------------------- -// -void CSConPCD::ConstructL() - { - TRACE_FUNC_ENTRY; - User::LeaveIfError( iFs.Connect() ); - iInstallerQueue = CSConInstallerQueue::NewL( iFs ); - iBackupRestoreQueue = CSConBackupRestoreQueue::NewL( iMaxObjectSize, iFs ); - iInstallerQueue->QueueAddress( iBackupRestoreQueue ); - iBackupRestoreQueue->QueueAddress( iInstallerQueue ); - - if ( !CActiveScheduler::Current() ) - { - CActiveScheduler* scheduler = new (ELeave) CActiveScheduler(); - CActiveScheduler::Install( scheduler ); - } - CActiveScheduler::Add( iInstallerQueue ); - CActiveScheduler::Add( iBackupRestoreQueue ); - iSyncHandler = CSconSyncHandler::NewL( iFs ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::~CSConPCD() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConPCD::~CSConPCD() - { - TRACE_FUNC_ENTRY; - if ( iInstallerQueue ) - { - iInstallerQueue->Cancel(); - delete iInstallerQueue; - iInstallerQueue = NULL; - } - - if ( iBackupRestoreQueue ) - { - iBackupRestoreQueue->Cancel(); - delete iBackupRestoreQueue; - iBackupRestoreQueue = NULL; - } - - if ( iLatestReply ) - { - delete iLatestReply; - iLatestReply = NULL; - } - - if ( iSyncHandler ) - { - iSyncHandler->Cancel(); - delete iSyncHandler; - iSyncHandler = NULL; - } - iFs.Close(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::PutTaskL( CSConTask* aTask ) -// Receives a new task -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::PutTaskL( CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TInt maxObjectSize( 0 ); - - if ( iLastOperation == EPutTask ) - { - LOGGER_WRITE( "CSConPCD::PutTaskL() : Two Puts in a row -> Reset()" ); - ResetPCD(); - } - else - { - LOGGER_WRITE( "CSConPCD::PutTaskL() : Protocol procedure ok" ); - iLastOperation = EPutTask; - } - - switch( aTask->GetServiceId() ) - { - case ECancel : - ret = CancelL( aTask->iCancelTaskId, aTask->iCancelTaskAll ); - delete aTask; - break; - case EGetDataOwnerStatus : - ret = SupportedBRTaskL( aTask ); - break; - case EGetDataSize : - ret = SupportedBRTaskL( aTask ); - break; - case EGetStatus : - ret = GetStatusL( aTask->iGetStatusParams->iTaskId, - aTask->iGetStatusParams->iAll ); - delete aTask; - break; - case EInstall : - ret = SupportedInstTaskL( aTask ); - break; - case EListDataOwners : - ret = SupportedBRTaskL( aTask ); - break; - case EListInstalledApps : - ret = SupportedInstTaskL( aTask ); - break; - case EListPublicFiles : - ret = SupportedBRTaskL( aTask ); - break; - case ERequestData : - ret = SupportedBRTaskL( aTask ); - break; - case ESetBURMode : - ret = SupportedBRTaskL( aTask ); - break; - case ESetInstParams : - ret = SupportedInstTaskL( aTask ); - break; - case ESupplyData : - ret = SupportedBRTaskL( aTask ); - break; - case EUninstall : - ret = SupportedInstTaskL( aTask ); - break; - case EUpdateDeviceInfo : - maxObjectSize = aTask->iDevInfoParams->iMaxObjectSize; - ret = UpdateDeviceInfoL( maxObjectSize ); - iTaskNumber++; - delete aTask; - break; - case EReboot : - RebootTaskL( aTask ); - delete aTask; - break; - case EGetMetadata : - ret = KErrNone; - GetMetadataTaskL( *aTask ); - delete aTask; - break; - default : - break; - } - LOGGER_WRITE_1( "CSConPCD::PutTaskL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::GetReply() -// Returns a reply to previous PutTaskL operation -// ----------------------------------------------------------------------------- -// -CSConStatusReply* CSConPCD::GetReply() - { - TRACE_FUNC_ENTRY; - - if ( iLastOperation == EGetReply ) - { - LOGGER_WRITE( "CSConPCD::GetReply() : Two Gets in a row -> Reset()" ); - ResetPCD(); - } - else - { - LOGGER_WRITE( "CSConPCD::GetReply() : Protocol procedure ok" ); - iLastOperation = EGetReply; - } - CSConStatusReply* reply = iLatestReply; - iLatestReply = NULL; - TRACE_FUNC_EXIT; - return reply; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::ResetPCD() -// Resets the module to the initial state -// ----------------------------------------------------------------------------- -// -void CSConPCD::ResetPCD() - { - TRACE_FUNC_ENTRY; - if ( iInstallerQueue ) - { - LOGGER_WRITE( "CSConPCD::ResetPCD() : Reseting installer queue" ); - iInstallerQueue->Reset(); - } - - if ( iBackupRestoreQueue ) - { - LOGGER_WRITE( "CSConPCD::ResetPCD() : Reseting backup queue" ); - iBackupRestoreQueue->Reset(); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::HandleGetSyncRequestL() -// -// ----------------------------------------------------------------------------- -// -void CSConPCD::HandleGetSyncRequestL( const TDesC8& aRequest, RWriteStream& aResult, TInt aMaxObjectSize ) - { - TRACE_FUNC_ENTRY; - iSyncHandler->HandleGetSyncRequestL( aRequest, aResult, aMaxObjectSize ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::HandlePutSyncRequestL() -// -// ----------------------------------------------------------------------------- -// -void CSConPCD::HandlePutSyncRequestL( const TDesC8& aRequest, RReadStream& aResult ) - { - TRACE_FUNC_ENTRY; - iSyncHandler->HandlePutSyncRequestL( aRequest, aResult ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::SupportedInstTaskL( CSConTask* aTask ) -// Fills a reply with predefined supported task -information -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::SupportedInstTaskL( CSConTask* aTask ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - iTaskNumber++; - ret = iInstallerQueue->AddNewTask( aTask, iTaskNumber ); - - //Get status for this task - TBool all( EFalse ); - CSConStatusReply* reply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( reply ); - iInstallerQueue->GetQueueStatusL( iTaskNumber, all, reply ); - CleanupStack::Pop( reply ); - - StoreReply( reply ); - - LOGGER_WRITE_1( "CSConPCD::SupportedInstTaskL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::SupportedBRTask( CSConTask* aTask ) -// Fills a reply with predefined supported task -information -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::SupportedBRTaskL( CSConTask* aTask ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - TInt taskId; - - taskId = ++iTaskNumber; - - ret = iBackupRestoreQueue->AddNewTask( aTask, taskId ); - LOGGER_WRITE_1( "iBackupRestoreQueue->AddNewTask : ret %d", ret ); - //Get status for this task - TBool all( EFalse ); - CSConStatusReply* reply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( reply ); - iBackupRestoreQueue->GetQueueStatusL( iTaskNumber, all, reply ); - CleanupStack::Pop( reply ); - - StoreReply( reply ); - - TRACE_FUNC_EXIT; - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSConPCD::RebootTask( const CSConTask* aTask ) -// Fills a reply with predefined unsupported task -information -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::RebootTaskL( const CSConTask* aTask ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNotSupported ); - iTaskNumber++; - TSConMethodName method( aTask->GetServiceId() ); - CSConStatusReply* reply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( reply ); - CSConTaskReply* taskReply = new (ELeave) CSConTaskReply(); - CleanupStack::PushL( taskReply ); - - TBool complete( ETrue ); - taskReply->InitializeL( method, KSConCodeNotSupported, complete ); - taskReply->iTaskId = iTaskNumber; - - reply->iNoTasks = EFalse; - User::LeaveIfError( reply->iTasks.Append( taskReply ) ); - CleanupStack::Pop( taskReply ); - - StoreReply( reply ); - CleanupStack::Pop( reply ); - - LOGGER_WRITE_1( "CSConPCD::RebootTask() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::GetMetadataTask( const CSConTask* aTask ) -// Fills a reply with predefined GetMetadata task -information -// ----------------------------------------------------------------------------- -// -void CSConPCD::GetMetadataTaskL( CSConTask& aTask ) - { - TRACE_FUNC_ENTRY; - - aTask.iTaskId = ++iTaskNumber; - - //Set progress value "task accepted for execution" - aTask.SetProgressValue( KSConCodeTaskCreated ); - aTask.SetCompleteValue( EFalse ); - - SConMetadata::ProcessTask( aTask, iFs ); - - //Get status for this task - - CSConStatusReply* reply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( reply ); - CSConTaskReply* taskReply = new (ELeave) CSConTaskReply(); - CleanupStack::PushL( taskReply ); - taskReply->InitializeL( aTask ); - User::LeaveIfError( reply->iTasks.Append( taskReply ) ); - CleanupStack::Pop( taskReply ); - - if ( !aTask.GetComplete() ) - { - // clean all unneccessary data from the reply packet - taskReply->CleanTaskData(); - } - - - StoreReply( reply ); - CleanupStack::Pop( reply ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::GetStatus( TInt aTask, TBool aAll ) -// Collects a status of a specified task / all tasks -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::GetStatusL( TInt aTask, TBool aAll ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - // create mergeReply object. Store installer and br replys here. - CSConStatusReply* mergeReply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( mergeReply ); - - - CSConStatusReply* brReply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( brReply ); - iBackupRestoreQueue->GetQueueStatusL( aTask, aAll, brReply ); - - - // Create installerReply and populate it - CSConStatusReply* installerReply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( installerReply ); - iInstallerQueue->GetQueueStatusL( aTask, aAll, installerReply ); - - if ( !installerReply->iNoTasks || !brReply->iNoTasks ) - { - mergeReply->iNoTasks = EFalse; - } - else - { - mergeReply->iNoTasks = ETrue; - } - - for ( TInt i = 0; i < installerReply->iTasks.Count(); i++ ) - { - CSConTaskReply* temp = installerReply->iTasks[i]->CopyAndFreeL(); - CleanupStack::PushL( temp ); - mergeReply->iTasks.AppendL( temp ); - CleanupStack::Pop( temp ); - } - - // installer replys are copied to mergereply, delete installerReply - CleanupStack::PopAndDestroy( installerReply ); - - // do same for br reply - for ( TInt i = 0; i < brReply->iTasks.Count(); i++ ) - { - CSConTaskReply* temp = brReply->iTasks[i]->CopyAndFreeL(); - CleanupStack::PushL( temp ); - mergeReply->iTasks.AppendL( temp ); - CleanupStack::Pop( temp ); - } - - CleanupStack::PopAndDestroy( brReply ); - - CleanupStack::Pop( mergeReply ); - // store reply - StoreReply( mergeReply ); - - LOGGER_WRITE_1( "CSConPCD::GetStatus() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::Cancel( TInt aTask, TBool aAll ) -// Cancels a specified task / all tasks -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::CancelL( TInt aTask, TBool aAll ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - CSConStatusReply* reply = new (ELeave) CSConStatusReply(); - iInstallerQueue->CancelTask( aTask, aAll ); - iBackupRestoreQueue->CancelTask( aTask, aAll ); - - reply->iNoTasks = ETrue; - - StoreReply( reply ); - - LOGGER_WRITE_1( "CSConPCD::CancelL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::StoreReply( CSConStatusReply*& aReply ) -// Stores a reply -// ----------------------------------------------------------------------------- -// -void CSConPCD::StoreReply( CSConStatusReply*& aReply ) - { - TRACE_FUNC_ENTRY; - if ( iLatestReply ) - { - delete iLatestReply; - iLatestReply = NULL; - } - - iLatestReply = aReply; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::UpdateDeviceInfo( TInt aMaxObjectSize ) -// Creates a reply for UpdateDeviceInfo task -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::UpdateDeviceInfoL( TInt aMaxObjectSize ) - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - TSConMethodName method( EUpdateDeviceInfo ); - - CSConStatusReply* reply = new (ELeave) CSConStatusReply(); - CleanupStack::PushL( reply ); - CSConTaskReply* taskReply = new (ELeave) CSConTaskReply(); - CleanupStack::PushL( taskReply ); - - - TBool complete( ETrue ); - TInt progress( KSConCodeTaskCompleted ); - - taskReply->InitializeL( method, progress, complete ); - taskReply->iTaskId = iTaskNumber; - - TInt arrayLength = sizeof KSupportedMethods / sizeof KSupportedMethods[0]; - - for ( TInt i = 0; i < arrayLength; i++ ) - { - switch( KSupportedMethods[i].method ) - { - case EGetDataSize : - taskReply->iDevInfoParams->iGetSizeSupp = - KSupportedMethods[i].support; - break; - case EInstall : - taskReply->iDevInfoParams->iInstallSupp = - KSupportedMethods[i].support; - break; - case EListDataOwners : - taskReply->iDevInfoParams->iDataOwnersSupp = - KSupportedMethods[i].support; - break; - case EListInstalledApps : - taskReply->iDevInfoParams->iInstAppsSupp = - KSupportedMethods[i].support; - break; - case ERequestData : - taskReply->iDevInfoParams->iReqDataSupp = - KSupportedMethods[i].support; - break; - case ESetBURMode : - taskReply->iDevInfoParams->iSetBURModeSupp = - KSupportedMethods[i].support; - break; - case ESetInstParams : - taskReply->iDevInfoParams->iInstParamsSupp = - KSupportedMethods[i].support; - break; - case ESupplyData : - taskReply->iDevInfoParams->iSupplyDataSupp = - KSupportedMethods[i].support; - break; - case EUninstall : - taskReply->iDevInfoParams->iUninstallSupp = - KSupportedMethods[i].support; - break; - case EReboot : - taskReply->iDevInfoParams->iRebootSupp = - KSupportedMethods[i].support; - break; - default : - break; - } - } - - taskReply->iDevInfoParams->iVersion.Copy( KCONMLVERSION ); - taskReply->iDevInfoParams->iMaxObjectSize = - GetMaxObjectSize( aMaxObjectSize ); - - reply->iNoTasks = EFalse; - - User::LeaveIfError( reply->iTasks.Append( taskReply ) ); - StoreReply( reply ); - - CleanupStack::Pop( taskReply ); - CleanupStack::Pop( reply ); - LOGGER_WRITE_1( "CSConPCD::UpdateDeviceInfo() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConPCD::GetMaxObjectSize( TInt /*aClientObjectSize*/ ) const -// Gets the current max object size -// ----------------------------------------------------------------------------- -// -TInt CSConPCD::GetMaxObjectSize( TInt /*aClientObjectSize*/ ) const - { - LOGGER_WRITE_1( "CSConPCD::GetMaxObjectSize() : returned %d", iMaxObjectSize ); - return iMaxObjectSize; - } - -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconpcdutility.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconpcdutility.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,414 +0,0 @@ -/* -* Copyright (c) 2006-2010 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: SConPcdUtility implementation -* -*/ - - -// CLASS HEADER -#include -#include -#include -#include -#include -#include -#include -#include -#include // Resource to be read header - -using namespace Java; - -#include "debug.h" -#include "sconpcdutility.h" -#include "sconconmltask.h" - -// localized "unknown vendor". -_LIT( KSConResourceName, "z:\\Resource\\sconftp.rsc" ); - - - -// METHODS -//---------------------------------------------------------------------------- -// void SConPcdUtility::ProcessListInstalledAppsL( CSConTask*& aTask ) -//---------------------------------------------------------------------------- -// -void SConPcdUtility::ProcessListInstalledAppsL( CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - - LOGGER_WRITE_1("iAllApps: %d",(TInt)aTask->iListAppsParams->iAllApps); - LOGGER_WRITE8_1("driveList: %S", &aTask->iListAppsParams->iDriveList); - - AppendInstalledSisL( *aTask->iListAppsParams ); - AppendInstalledJavaL( *aTask->iListAppsParams ); - AppendInstalledWidgetsL( *aTask->iListAppsParams ); - - TRACE_FUNC_EXIT; - } - -//---------------------------------------------------------------------------- -// void SConPcdUtility::AppendInstalledSisL( RPointerArray &aApps ) -// Appends installed sis packages and augmentations to aApps array. -//---------------------------------------------------------------------------- -// -void SConPcdUtility::AppendInstalledSisL( CSConListInstApps& aListInstApps ) - { - TRACE_FUNC_ENTRY; - // Get installed applications from sis registry - Swi::RSisRegistrySession sisRegistry; - CleanupClosePushL( sisRegistry ); - User::LeaveIfError( sisRegistry.Connect() ); - - RArray uids; - CleanupClosePushL(uids); - sisRegistry.InstalledUidsL( uids ); - - - //Read package information - for( TInt i = 0; i < uids.Count(); i++ ) - { - Swi::RSisRegistryEntry entry; - CleanupClosePushL(entry); - User::LeaveIfError( entry.Open( sisRegistry, uids[i] ) ); - - TBool showIt( EFalse ); - if ( aListInstApps.iAllApps ) - { - // show all apps -param defined, exlude stubs on ROM - if ( !entry.IsInRomL() ) - { - showIt = ETrue; - } - } - else - { - // show if installed one of the specified drives - // don't exlude stubs on ROM - showIt = IsInstalledToSelectedDrive( aListInstApps.iDriveList, - entry.InstalledDrivesL() ); - } - - // Only show if not in rom - if ( showIt && entry.IsPresentL() ) - { - // Add the created object to the list - LOGGER_WRITE_1( "SConPcdUtility::ProcessListInstalledAppsL : add pkg, index %d", i ); - CSConInstApp* app = new (ELeave) CSConInstApp(); - CleanupStack::PushL( app ); - - HBufC* temp = entry.PackageNameL(); - TPtrC tempPtr = temp->Des(); - LOGGER_WRITE_1("PackageNameL: %S", &tempPtr); - CleanupStack::PushL( temp ); - if ( temp->Length() > app->iName.MaxLength() ) - { - User::Leave( KErrTooBig ); - } - app->iName.Copy( *temp ); - CleanupStack::PopAndDestroy( temp ); - temp = NULL; - - temp = entry.UniqueVendorNameL(); - CleanupStack::PushL( temp ); - if ( temp->Length() > app->iVendor.MaxLength() ) - { - User::Leave( KErrTooBig ); - } - app->iVendor.Copy( *temp ); - CleanupStack::PopAndDestroy( temp ); - temp = NULL; - - app->iVersion.Copy( entry.VersionL().Name() ); - app->iType = ESisApplication; - app->iSize = entry.SizeL(); - app->iUid = entry.UidL(); - - User::LeaveIfError( aListInstApps.iApps.Append( app ) ); - CleanupStack::Pop( app ); - } - - // Get possible augmentations - RPointerArray augPackages; - CleanupResetAndDestroyPushL( augPackages ); - entry.AugmentationsL( augPackages ); - for ( TInt j( 0 ); j < augPackages.Count(); j++ ) - { - Swi::RSisRegistryEntry augmentationEntry; - CleanupClosePushL( augmentationEntry ); - augmentationEntry.OpenL( sisRegistry, *augPackages[j] ); - - TBool showIt( EFalse ); - if ( aListInstApps.iAllApps ) - { - // show all apps -param defined, exlude stubs on ROM - if ( !augmentationEntry.IsInRomL() ) - { - showIt = ETrue; - } - } - else - { - // show if installed one of the specified drives - // don't exlude stubs on ROM - showIt = IsInstalledToSelectedDrive( aListInstApps.iDriveList, - augmentationEntry.InstalledDrivesL() ); - } - - // Only show if not in rom - if ( showIt && augmentationEntry.IsPresentL() ) - { - CSConInstApp* augApp = new (ELeave) CSConInstApp(); - CleanupStack::PushL( augApp ); - augApp->iName.Copy( augPackages[j]->Name() ); - - HBufC* temp = entry.PackageNameL(); - CleanupStack::PushL( temp ); - if ( temp->Length() > augApp->iParentName.MaxLength() ) - { - User::Leave( KErrTooBig ); - } - augApp->iParentName.Copy( *temp ); - CleanupStack::PopAndDestroy( temp ); - temp = NULL; - - augApp->iVendor.Copy( augPackages[j]->Vendor() ); - augApp->iVersion.Copy( augmentationEntry.VersionL().Name() ); - augApp->iType = ESisAugmentation; - augApp->iSize = augmentationEntry.SizeL(); - augApp->iUid = augmentationEntry.UidL(); - - LOGGER_WRITE_1( "SConPcdUtility::ProcessListInstalledAppsL : add augmentation, index: %d", j ); - LOGGER_WRITE_1( "SConPcdUtility::ProcessListInstalledAppsL : add augmentation, basepkg: %d", i ); - TInt augindex = augPackages[j]->Index(); - LOGGER_WRITE_1( "SConPcdUtility::ProcessListInstalledAppsL : augindex: %d",augindex ); - User::LeaveIfError( aListInstApps.iApps.Append( augApp ) ); - CleanupStack::Pop( augApp ); - } - CleanupStack::PopAndDestroy( &augmentationEntry ); - } - CleanupStack::PopAndDestroy( &augPackages ); - CleanupStack::PopAndDestroy( &entry ); - } - - CleanupStack::PopAndDestroy(&uids); - CleanupStack::PopAndDestroy(&sisRegistry); - TRACE_FUNC_EXIT; - } - -//---------------------------------------------------------------------------- -// void SConPcdUtility::AppendInstalledJavaL( RPointerArray &aApps ) -// Appends installed java packages to aApps array. -//---------------------------------------------------------------------------- -// -void SConPcdUtility::AppendInstalledJavaL( CSConListInstApps& aListInstApps ) - { - TRACE_FUNC_ENTRY; - CJavaRegistry* javaRegistry = CJavaRegistry::NewLC( ); - RArray packageUids; - CleanupClosePushL( packageUids ); - javaRegistry->GetRegistryEntryUidsL( packageUids ); - LOGGER_WRITE_1("packageUids.Count(): %d", packageUids.Count()); - for (TInt i=0; iRegistryEntryL( packageUids[i] ); - if ( entry ) - { - CleanupStack::PushL( entry ); - if ( entry->Type() >= EGeneralPackage && entry->Type() < EGeneralApplication ) - { - // entry was correct type - CJavaRegistryPackageEntry* packageEntry = ( CJavaRegistryPackageEntry* ) entry; - - // check do we need to filter it out - TBool showIt( EFalse ); - if ( aListInstApps.iAllApps ) - { - showIt = ETrue; - } - else - { - TDriveNumber drive = packageEntry->Drive(); - if ( aListInstApps.iDriveList.Length() > drive - && aListInstApps.iDriveList[ drive ] ) - { - showIt = ETrue; - } - } - - if ( showIt ) - { - CSConInstApp* app = new (ELeave) CSConInstApp(); - CleanupStack::PushL( app ); - // Get Uid, name, type, vendor - app->iUid = packageEntry->Uid(); - app->iName.Copy ( packageEntry->Name() ); - LOGGER_WRITE_1( "Name: %S", &app->iName ); - app->iType = EJavaApplication; - - // Get version - TAppVersion midletVersion( packageEntry->Version() ); - TVersion verType(midletVersion.iMajor, midletVersion.iMinor, midletVersion.iBuild); - app->iVersion.Copy( verType.Name() ); - - // Get vendor - if ( entry->NumberOfCertificateChains() > 0 && packageEntry->Vendor().Length() > 0 ) - { - app->iVendor.Copy( packageEntry->Vendor() ); - } - else - { - // untrusted applications do not have certificates. - // if the application has a certificate, it is installed either as - // trusted or not installed at all. - - // unknown vendor - TFileName myFileName( KSConResourceName ); - CStringResourceReader* resReader = CStringResourceReader::NewL( myFileName ); - TPtrC bufUnknownSuplier; - bufUnknownSuplier.Set( resReader->ReadResourceString( R_SECON_UNKNOWN_SUPPLIER ) ); - - app->iVendor.Copy( bufUnknownSuplier ); - - delete resReader; - } - - // Get size - app->iSize = packageEntry->UsedUserDiskSpace(); - - User::LeaveIfError( aListInstApps.iApps.Append( app ) ); - CleanupStack::Pop( app ); - } - } - CleanupStack::PopAndDestroy( entry ); - } - } - - CleanupStack::PopAndDestroy( &packageUids ); - CleanupStack::PopAndDestroy( javaRegistry ); - TRACE_FUNC_EXIT; - } - -//---------------------------------------------------------------------------- -// void SConPcdUtility::AppendInstalledWidgetsL( RPointerArray &aApps ) -// Appends installed widgets to aApps array. -//---------------------------------------------------------------------------- -// -void SConPcdUtility::AppendInstalledWidgetsL( CSConListInstApps& aListInstApps ) - { - TRACE_FUNC_ENTRY; - RWidgetRegistryClientSession widgetSession; - CleanupClosePushL( widgetSession ); - User::LeaveIfError( widgetSession.Connect() ); - - // Get the list of installed widgets - RWidgetInfoArray widgetInfoArr; - CleanupClosePushL( widgetInfoArr ); - widgetSession.InstalledWidgetsL( widgetInfoArr ); - TFileName bundleId; - for ( TInt i = 0; i < widgetInfoArr.Count(); i++ ) - { - CWidgetInfo *item = widgetInfoArr[i]; - CleanupStack::PushL( item ); - - - TBool showIt( EFalse ); - if ( aListInstApps.iAllApps ) - { - // show all apps -param defined - showIt = ETrue; - } - else - { - TDriveUnit locationDrive = item->iDriveName->Des(); - // show if installed one of the specified drives - if ( aListInstApps.iDriveList.Length() > locationDrive - && aListInstApps.iDriveList[locationDrive] ) - { - showIt = ETrue; - } - } - - if ( showIt ) - { - - CSConInstApp* app = new (ELeave) CSConInstApp(); - CleanupStack::PushL( app ); - app->iName.Copy( *(item->iBundleName) ); - app->iType = EWidgetApplication; - app->iSize = item->iFileSize; - app->iUid = item->iUid; - - CWidgetPropertyValue* propValue = widgetSession.GetWidgetPropertyValueL( - item->iUid, EBundleVersion ); - if ( propValue && propValue->iType == EWidgetPropTypeString ) - { - app->iVersion.Copy( *(propValue->iValue.s) ); - } - delete propValue; - propValue = NULL; - bundleId.Zero(); - widgetSession.GetWidgetBundleId( item->iUid, bundleId ); - app->iWidgetBundleId = bundleId.AllocL(); - - User::LeaveIfError( aListInstApps.iApps.Append( app ) ); - CleanupStack::Pop( app ); // ownership transferred, do not delete - } - CleanupStack::PopAndDestroy( item ); - } - User::LeaveIfError( widgetSession.Disconnect() ); - - CleanupStack::PopAndDestroy( &widgetInfoArr ); - CleanupStack::PopAndDestroy( &widgetSession ); - TRACE_FUNC_EXIT; - } - -// --------------------------------------------------------- -// SConPcdUtility::IsInstalledToSelectedDrive -// Solve highest drive from aInstalledDrives and check -// if that drive is selected -// --------------------------------------------------------- -// -TBool SConPcdUtility::IsInstalledToSelectedDrive( const TDriveList& aSelectedDriveList, TUint aInstalledDrives ) - { - TInt locationDrive; - if( aInstalledDrives ) - { - // Select the highest drive as location drive - TInt drive = EDriveA; - while( aInstalledDrives >>= 1 ) - { - drive++; - } - locationDrive = drive; - } - else - { - // No installed files, select C: as location drive - locationDrive = EDriveC; - } - - if ( aSelectedDriveList.Length() > locationDrive && aSelectedDriveList[locationDrive] ) - { - LOGGER_WRITE("SConPcdUtility::IsInstalledToSelectedDrive : return ETrue"); - return ETrue; - } - else - { - LOGGER_WRITE("SConPcdUtility::IsInstalledToSelectedDrive : return EFalse"); - return EFalse; - } - } -// END OF FILE diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconqueue.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconqueue.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,452 +0,0 @@ -/* -* 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: Queue implementation -* -*/ - - -// INCLUDE FILES - -#include "sconqueue.h" -#include "sconpcdconsts.h" -#include "debug.h" -#include // installer errors - -// ============================= MEMBER FUNCTIONS =============================== - - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::~CSConTaskQueue() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConTaskQueue::~CSConTaskQueue() - { - TRACE_FUNC; - iQueue.ResetAndDestroy(); - iQueue.Close(); - iTimer.Close(); - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::GetQueueStatus( TInt aTask, TBool aAllTasks, -// CSConStatusReply*& aStatus ) -// Returns the status of a specified task / all tasks -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::GetQueueStatusL( TInt aTask, TBool aAllTasks, - CSConStatusReply*& aStatus ) - { - RArray completedTasks; - CleanupClosePushL( completedTasks ); - if ( aAllTasks ) - { - //if there are tasks - if ( iQueue.Count() > 0 ) - { - //set iNoTasks as EFalse - aStatus->iNoTasks = EFalse; - for ( TInt i = 0; i < iQueue.Count(); i++ ) - { - //Fill reply object - CSConTaskReply* taskReply = new (ELeave) CSConTaskReply(); - CleanupStack::PushL( taskReply ); - taskReply->InitializeL( *iQueue[i] ); - User::LeaveIfError( aStatus->iTasks.Append( taskReply ) ); - CleanupStack::Pop( taskReply ); - TBool complete = iQueue[i]->GetComplete(); - - //Collect completed task numbers to array for deleting - if ( complete ) - { - completedTasks.Append( iQueue[i]->iTaskId ); - } - //Otherwise clean all unneccessary data from the reply packet - else - { - taskReply->CleanTaskData(); - } - } - } - else - { - //no task in the queue - aStatus->iNoTasks = ETrue; - } - - //Remove completed tasks from queue - for ( TInt j = 0; j < completedTasks.Count(); j++ ) - { - RemoveTask( completedTasks[j] ); - } - } - else if ( aTask > 0 ) - { - CSConTask* temp = new (ELeave) CSConTask(); - temp->iTaskId = aTask; - TInt index = iQueue.Find( temp, CSConTaskQueue::Match ); - delete temp; - - TBool complete = EFalse; - CSConTaskReply* taskReply(NULL); - - if ( index != KErrNotFound ) - { - aStatus->iNoTasks = EFalse; - //Fill reply object - taskReply = new (ELeave) CSConTaskReply(); - CleanupStack::PushL( taskReply ); - taskReply->InitializeL( *iQueue[index] ); - User::LeaveIfError( aStatus->iTasks.Append( taskReply ) ); - CleanupStack::Pop( taskReply ); - complete = iQueue[index]->GetComplete(); - } - else - { - //no task in the queue - aStatus->iNoTasks = ETrue; - } - - //Delete completed tasks from queue - if ( complete ) - { - RemoveTask( aTask ); - } - //Otherwise clean all unneccessary data from the reply packet - else if ( taskReply ) - { - taskReply->CleanTaskData(); - } - } - else - { - //no task in the queue - aStatus->iNoTasks = ETrue; - } - CleanupStack::PopAndDestroy( &completedTasks ); // close - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::AddNewTask( CSConTask*& aNewTask, TInt aTaskId ) -// Adds a new task to queue -// ----------------------------------------------------------------------------- -// -TInt CSConTaskQueue::AddNewTask( CSConTask*& aNewTask, TInt aTaskId ) - { - TInt ret( KErrNone ); - - aNewTask->iTaskId = aTaskId; - - //Set progress value "task accepted for execution" - aNewTask->SetProgressValue( KSConCodeTaskCreated ); - aNewTask->SetCompleteValue( EFalse ); - - if ( iQueue.Count() == 0 ) - { - StartQueue(); - } - ret = iQueue.InsertInOrder( aNewTask, CSConTaskQueue::Compare ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::CompleteTask( TInt aTask, TInt aError ) -// Set the task to completed -mode -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::CompleteTask( TInt aTask, TInt aError ) - { - LOGGER_WRITE_1( "CSConTaskQueue::CompleteTask aError: %d", aError ); - TInt index( KErrNotFound ); - - CSConTask* temp = new CSConTask(); - temp->iTaskId = aTask; - index = iQueue.Find( temp, CSConTaskQueue::Match ); - delete temp; - - if ( index != KErrNotFound ) - { - TBool complete( ETrue ); - TBool notComplete( EFalse ); - TInt progress( KSConCodeTaskCompleted ); - - switch( aError ) - { - case KErrNone : - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeTaskCompleted; - break; - case KErrNotFound : - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeNotFound; - break; - case KErrCompletion : - iQueue[index]->SetCompleteValue( notComplete ); - progress = KSConCodeTaskPartiallyCompleted; - break; - - // installer specific errors - case SwiUI::KSWInstErrUserCancel: - LOGGER_WRITE("User cancelled the operation"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrUserCancel; - break; - case SwiUI::KSWInstErrFileCorrupted: - LOGGER_WRITE("File is corrupted"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrFileCorrupted; - break; - case SwiUI::KSWInstErrInsufficientMemory: - LOGGER_WRITE("Insufficient free memory in the drive to perform the operation"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrInsufficientMemory; - break; - case SwiUI::KSWInstErrPackageNotSupported: - LOGGER_WRITE("Installation of the package is not supported"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrPackageNotSupported; - break; - case SwiUI::KSWInstErrSecurityFailure: - LOGGER_WRITE("Package cannot be installed due to security error"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrSecurityFailure; - break; - case SwiUI::KSWInstErrMissingDependency: - LOGGER_WRITE("Package cannot be installed due to missing dependency"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrMissingDependency; - break; - case SwiUI::KSWInstErrFileInUse: - LOGGER_WRITE("Mandatory file is in use and prevents the operation"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrFileInUse; - break; - case SwiUI::KSWInstErrGeneralError: - LOGGER_WRITE("Unknown error"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrGeneralError; - break; - case SwiUI::KSWInstErrNoRights: - LOGGER_WRITE("The package has no rights to perform the operation"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrNoRights; - break; - case SwiUI::KSWInstErrNetworkFailure: - LOGGER_WRITE("Indicates that network failure aborted the operation"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrNetworkFailure; - break; - case SwiUI::KSWInstErrBusy: - LOGGER_WRITE("Installer is busy doing some other operation"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrBusy; - break; - case SwiUI::KSWInstErrAccessDenied: - LOGGER_WRITE("Target location of package is not accessible"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstErrAccessDenied; - break; - case SwiUI::KSWInstUpgradeError: - LOGGER_WRITE("The package is an invalid upgrade"); - iQueue[index]->SetCompleteValue( complete ); - progress = KSConCodeInstUpgradeError; - break; - - default : - iQueue[index]->SetCompleteValue( complete ); - if ( aError < KErrNone && aError >= KErrCorruptSurrogateFound ) - { - // aError is always negative - // -> returned errorcode is from KSConCodeFirstSymbianErr...n - progress = KSConCodeFirstSymbianErr - aError; - } - else - { - progress = KSConCodeConflict; - } - - break; - } - - iQueue[index]->SetProgressValue( progress ); - } - StartQueue(); - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::SetTaskProgress( TInt aTask, TInt aProgressValue ) -// Set the task progress value -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::SetTaskProgress( TInt aTask, TInt aProgressValue ) - { - TInt index( KErrNotFound ); - - CSConTask* temp = new CSConTask(); - temp->iTaskId = aTask; - index = iQueue.Find( temp, CSConTaskQueue::Match ); - delete temp; - - if ( index != KErrNotFound ) - { - iQueue[index]->SetProgressValue( aProgressValue ); - } - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::GetTask( TInt aTaskId, CSConTask*& aTask ) -// Receives a specified task -// ----------------------------------------------------------------------------- -// -TInt CSConTaskQueue::GetTask( TInt aTaskId, CSConTask*& aTask ) - { - TInt ret( KErrNone ); - TInt index; - - CSConTask* temp = new CSConTask(); - temp->iTaskId = aTaskId; - index = iQueue.Find( temp, CSConTaskQueue::Match ); - delete temp; - - if ( index != KErrNotFound ) - { - aTask = iQueue[index]; - } - else - { - ret = KErrNotFound; - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::RemoveTask( TInt aTask ) -// Removes a task from the queue -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::RemoveTask( TInt aTask ) - { - TInt index( KErrNotFound ); - - CSConTask* temp = new CSConTask(); - temp->iTaskId = aTask; - index = iQueue.Find( temp, CSConTaskQueue::Match ); - delete temp; - - if ( index != KErrNotFound ) - { - delete iQueue[index]; - iQueue.Remove( index ); - iQueue.Compress(); - } - - if ( iQueue.Count() == 0 ) - { - StopQueue(); - iQueue.Reset(); - } - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::CancelTask( TInt aTask, TBool aAllTasks ) -// Cancels a task -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::CancelTask( TInt aTask, TBool aAllTasks ) - { - TRACE_FUNC_ENTRY; - - //Remove the task from the queue - if ( aTask > 0 && !aAllTasks ) - { - RemoveTask( aTask ); - } - - //Remove all tasks from the queue - if ( aAllTasks ) - { - iQueue.ResetAndDestroy(); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::QueueProcessActive() -// The status of the process -// ----------------------------------------------------------------------------- -// -TBool CSConTaskQueue::QueueProcessActive() const - { - return iQueueProcessActive; - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::ChangeQueueProcessStatus() -// Changes the status of the queue process -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::ChangeQueueProcessStatus() - { - iQueueProcessActive = !iQueueProcessActive; - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::Reset() -// Resets the queue -// ----------------------------------------------------------------------------- -// -void CSConTaskQueue::Reset() - { - TRACE_FUNC_ENTRY; - iTimer.Cancel(); - iQueue.ResetAndDestroy(); - TRACE_FUNC_EXIT; - } - -// --------------------------------------------------------- -// CSConTaskQueue::Compare( const CSConTask& aFirst, -// const CSConTask& aSecond ) -// Compares task numbers -// --------------------------------------------------------- -TInt CSConTaskQueue::Compare( const CSConTask& aFirst, - const CSConTask& aSecond ) - { - if ( aFirst.iTaskId < aSecond.iTaskId ) - { - return -1; - } - else if ( aFirst.iTaskId > aSecond.iTaskId ) - { - return 1; - } - - return 0; - } - -// ----------------------------------------------------------------------------- -// CSConTaskQueue::Match( const CSConTask& aFirst, const CSConTask& aSecond ) -// Matches the task numbers -// ----------------------------------------------------------------------------- -// -TInt CSConTaskQueue::Match( const CSConTask& aFirst, const CSConTask& aSecond ) - { - if ( aFirst.iTaskId == aSecond.iTaskId ) - { - return ETrue; - } - - return EFalse; - } -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconsbeclient.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconsbeclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1668 +0,0 @@ -/* -* Copyright (c) 2005-2010 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: CSConSBEClient implementation -* -*/ - - -// INCLUDE FILES - -#include -#include - -#include "sconsbeclient.h" -#include "debug.h" - -const TInt KDataBufExpandSize( 1024 ); -const TInt KMaxObjectSize( 1048576 - 1024 ); // Max chunk size is 1MB, but give some space for ConML wbxml -_LIT( KSConNoDrive, "\x0" ); -_LIT( KSConDriveExists, "\x1" ); -// ============================= MEMBER FUNCTIONS ============================== - -// ----------------------------------------------------------------------------- -// CSConSBEClient::NewL( cosnt TInt aMaxObjectSize ) -// Two-phase constructor -// ----------------------------------------------------------------------------- -// -CSConSBEClient* CSConSBEClient::NewL( const TInt aMaxObjectSize, RFs& aFs ) - { - TRACE_FUNC; - CSConSBEClient* self = new (ELeave) CSConSBEClient( aMaxObjectSize, aFs ); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::CSConSBEClient( const TInt aMaxObjectSize ) -// Constructor -// ----------------------------------------------------------------------------- -// -CSConSBEClient::CSConSBEClient( const TInt /*aMaxObjectSize*/, RFs& aFs ) : - CActive( EPriorityStandard ), iBURModeNormal( ETrue ), iFs( aFs ) - { - - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::~CSConSBEClient() -// Initializes member data -// ----------------------------------------------------------------------------- -// -CSConSBEClient::~CSConSBEClient() - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - - if( !iBURModeNormal && iSBEClient ) - { - TDriveList driveList; - - for( TInt i = 0; iSetBURModeL( driveList, EBURNormal, ENoBackup ) ); - } - - if( iSBEClient ) - { - delete iSBEClient; - iSBEClient = NULL; - } - - delete iDataBuffer; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::SetBURMode( TRequestStatus& aStatus, CSConTask*& aTask ) -// Set backup/restore mode -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::SetBURMode( TRequestStatus& aStatus, CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ListPublicFiles( TRequestStatus& aStatus, -// CSConTask*& aTask ) -// Lists public files from data owners -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ListPublicFiles( TRequestStatus& aStatus, - CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ListDataOwners( TRequestStatus& aStatus, CSConTask*& aTask ) -// Lists participant data owners -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ListDataOwners( TRequestStatus& aStatus, CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::GetDataSize( TRequestStatus& aStatus, CSConTask*& aTask ) -// Lists data sizes from data owners -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::GetDataSize( TRequestStatus& aStatus, CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::RequestData( TRequestStatus& aStatus, CSConTask*& aTask ) -// Request a data from a data owner -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::RequestData( TRequestStatus& aStatus, CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::GetDataOwnerStatus( TRequestStatus& aStatus, -// CSConTask*& aTask ) -// Lists the status of data owners -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::GetDataOwnerStatus( TRequestStatus& aStatus, - CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::SupplyData( TRequestStatus& aStatus, CSConTask*& aTask ) -// Supplies a data to a data owner -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::SupplyData( TRequestStatus& aStatus, CSConTask*& aTask ) - { - TRACE_FUNC_ENTRY; - iCallerStatus = &aStatus; - *iCallerStatus = KRequestPending; - - iCurrentTask = aTask; - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - SetActive(); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::DoCancel() -// Implementation of CActive::DoCancel() -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::DoCancel() - { - TRACE_FUNC; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::RunL() -// Implementation of CActive::RunL() -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::RunL() - { - TRACE_FUNC_ENTRY; - TInt err( KErrNone ); - TInt ret( KErrNone ); - - //Initialize a connection to the backup server - if( !iSBEClient ) - { - iSBEClient = CSBEClient::NewL(); - } - - switch( iCurrentTask->GetServiceId() ) - { - case ESetBURMode : - LOGGER_WRITE( "CSConSBEClient::RunL() : ESetBURMode" ); - TRAP( err, ProcessSetBURModeL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessSetBURModeL() : returned %d", err ); - break; - case EListPublicFiles : - LOGGER_WRITE( "CSConSBEClient::RunL() : EListPublicFiles" ); - TRAP( err, ProcessListPublicFilesL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessListPublicFilesL() : returned %d", err ); - break; - case EListDataOwners : - LOGGER_WRITE( "CSConSBEClient::RunL() : EListDataOwners" ); - TRAP( err, ProcessListDataOwnersL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessListDataOwnersL() : returned %d", err ); - break; - case EGetDataSize : - LOGGER_WRITE( "CSConSBEClient::RunL() : EGetDataSize" ); - TRAP( err, ProcessGetDataSizeL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessGetDataSizeL() : returned %d", err ); - break; - case ERequestData : - LOGGER_WRITE( "CSConSBEClient::RunL() : ERequestData" ); - TRAP( err, ret = ProcessRequestDataL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessRequestDataL() : returned %d", err ); - break; - case EGetDataOwnerStatus : - LOGGER_WRITE( "CSConSBEClient::RunL() : EGetDataOwnerStatus" ); - TRAP( err, ProcessGetDataOwnerStatusL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : ProcessGetDataOwnerStatusL() : returned %d", err ); - break; - case ESupplyData : - LOGGER_WRITE( "CSConSBEClient::RunL() : ESupplyData" ); - TRAP( err, ret = ProcessSupplyDataL() ); - LOGGER_WRITE_1( "CSConSBEClient::RunL() : SupplyDataL() : returned %d", err ); - break; - default : - err = KErrNotSupported; - LOGGER_WRITE( "CSConSBEClient::RunL() : ERROR! Unknown!" ); - break; - } - - if ( err ) - { - HandleSBEErrorL( err ); - } - else - { - err = ret; - } - User::RequestComplete( iCallerStatus, err ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessSetBURModeL() -// Executes SetBURMode task -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ProcessSetBURModeL() - { - TRACE_FUNC_ENTRY; - - iAllSnapshotsSuppliedCalled = EFalse; - iLastChunk = EFalse; - - TDriveList driveList = iCurrentTask->iBURModeParams->iDriveList; - - TBURPartType partialType = EBURUnset; - iRestoreMode = EFalse; - - switch( iCurrentTask->iBURModeParams->iPartialType ) - { - case ESConBurNormal : - partialType = EBURNormal; - break; - case ESConBurBackupFull : - partialType = EBURBackupFull; - break; - case ESConBurBackupPartial : - partialType = EBURBackupPartial; - break; - case ESConBurRestoreFull : - partialType = EBURRestoreFull; - iRestoreMode = ETrue; - break; - case ESConBurRestorePartial : - partialType = EBURRestorePartial; - iRestoreMode = ETrue; - break; - default : - partialType = EBURUnset; - break; - } - - if ( partialType == EBURBackupFull || partialType == ESConBurBackupPartial ) - { - // initialize buffer - if ( !iDataBuffer ) - iDataBuffer = CBufFlat::NewL( KDataBufExpandSize ); - else - iDataBuffer->Reset(); - iDataBufferSize=0; - } - else - { - delete iDataBuffer; - iDataBuffer = 0; - } - - TBackupIncType incType = ENoBackup; - - switch( iCurrentTask->iBURModeParams->iIncType ) - { - case ESConNoBackup : - incType = ENoBackup; - break; - case ESConBackupBase : - incType = EBackupBase; - break; - case ESConBackupIncrement : - incType = EBackupIncrement; - break; - default : - incType = ENoBackup; - break; - } - - iSBEClient->SetBURModeL( driveList, partialType, incType ); - - if( partialType != EBURNormal ) - { - iBURModeNormal = EFalse; - } - else - { - iBURModeNormal = ETrue; - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessListPublicFilesL() -// Executes ListPublicFiles task -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ProcessListPublicFilesL() - { - TRACE_FUNC_ENTRY; - //Get the secure id - TSecureId sid = iCurrentTask->iPubFilesParams->iDataOwners[0]->iUid; - TSecureId packageSid; - LOGGER_WRITE_1("DO: 0x%08x", sid.iId); - TPtrC packageName(KNullDesC); - const TUint KSConUidLength = 8; // 8 digits (hex) - const TUint KSConUidPrefixLength = 3; // prefix is '#0x' - - TInt packageNameLength = iCurrentTask->iPubFilesParams->iDataOwners[0]->iPackageName.Length(); - - if ( packageNameLength > KSConUidLength ) - { - // remove uid from package name - packageName.Set( - iCurrentTask->iPubFilesParams->iDataOwners[0]-> - iPackageName.Left( packageNameLength - (KSConUidLength + KSConUidPrefixLength) ) ); - LOGGER_WRITE_1("PackageName: %S", &packageName ); - - TPtrC sidPtr( iCurrentTask->iPubFilesParams->iDataOwners[0]-> - iPackageName.Right( KSConUidLength ) ); - TLex lex(sidPtr); - TInt err = lex.Val( packageSid.iId, EHex ); - if ( err ) - { - LOGGER_WRITE_1("lex.Val error: %d", err); - packageName.Set( KNullDesC ); - packageSid.iId = 0; - } - LOGGER_WRITE_1("packageSid: 0x%08x", packageSid.iId ); - } - - //Get the drive list - TDriveList driveList = - iCurrentTask->iPubFilesParams->iDataOwners[0]->iDriveList; - - RFileArray files; - CleanupClosePushL( files ); - //Go through all the drives in the list - for( TInt i = 0; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - //Get files from the drive - TDriveNumber driveNumber = GetDriveNumber( i ); - LOGGER_WRITE_1("driveNumber: %d", driveNumber); - - LOGGER_WRITE("List public files using CSBSecureId"); - CSBSecureId* secureId = CSBSecureId::NewL( sid ); - CleanupStack::PushL( secureId ); - - TRAPD( err, iSBEClient->PublicFileListL( driveNumber, *secureId, files ) ); - - if( err != KErrNone && err != KErrNotFound ) - { - LOGGER_WRITE_1("iSBEClient->PublicFileListL leaved: %d", err); - User::LeaveIfError( err ); - } - - CleanupStack::PopAndDestroy( secureId ); - LOGGER_WRITE_1("public files: %d", files.Count()); - AppendFilesToFilelistL( files, iCurrentTask->iPubFilesParams->iFiles) ; - - if ( packageName.Length() > 0 ) - { - LOGGER_WRITE("Append files registered to packages. Using CSBPackageId"); - - CSBPackageId* packageId = CSBPackageId::NewL( - iCurrentTask->iPubFilesParams->iDataOwners[0]->iUid, - packageSid, - packageName ); - CleanupStack::PushL( packageId ); - - TRAPD( err, iSBEClient->PublicFileListL( driveNumber, *packageId, files ) ); - if( err != KErrNone && err != KErrNotFound ) - { - LOGGER_WRITE_1("iSBEClient->PublicFileListL leaved: %d", err); - User::LeaveIfError( err ); - } - CleanupStack::PopAndDestroy( packageId ); - - LOGGER_WRITE_1("public files: %d", files.Count()); - AppendFilesToFilelistL( files, iCurrentTask->iPubFilesParams->iFiles) ; - } - - files.Reset(); - } - } - CleanupStack::PopAndDestroy( &files ); - TRACE_FUNC_EXIT; - } - - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessListDataOwnersL() -// Executes ListDataOwners task -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ProcessListDataOwnersL() - { - TRACE_FUNC_ENTRY; - TBool includeToList( ETrue ); - RPointerArray dataOwners; - RArray packageArray; - CleanupResetAndDestroyPushL( dataOwners ); - CleanupClosePushL( packageArray ); - - iSBEClient->ListOfDataOwnersL( dataOwners ); - LOGGER_WRITE_1( "dataOwners count: %d", dataOwners.Count() ); - - - for( TInt i = 0; i < dataOwners.Count(); i++ ) - { - LOGGER_WRITE_2("handling do: %d, count: %d", i, dataOwners.Count()); - CSConDataOwner* dataOwner = new (ELeave) CSConDataOwner(); - CleanupStack::PushL( dataOwner ); - // default values - TSecureId sid( 0 ); - includeToList = ETrue; - - TCommonBURSettings commonOptions = dataOwners[i]->CommonSettings(); - TPassiveBURSettings passiveOptions = dataOwners[i]->PassiveSettings(); - TActiveBURSettings activeOptions = dataOwners[i]->ActiveSettings(); - - //active, passive or hybrid? (common) - if( commonOptions & EActiveBUR && commonOptions & EPassiveBUR ) - { - dataOwner->iType = EHybridDataOwner; - } - else if( commonOptions & EActiveBUR ) - { - dataOwner->iType = EActiveDataOwner; - } - else if( commonOptions & EPassiveBUR ) - { - dataOwner->iType = EPassiveDataOwner; - } - - //requires reboot? (common) - if( commonOptions & ERequiresReboot ) - { - dataOwner->iReqReboot = ETrue; - } - else - { - dataOwner->iReqReboot = EFalse; - } - - //has system files? (common) - if( commonOptions & EHasSystemFiles ) - { - dataOwner->iHasFiles = ESystemFiles; - } - - //supports selective? (common) - if( commonOptions & ESupportsSelective ) - { - dataOwner->iSupportsSel = ETrue; - } - else - { - dataOwner->iSupportsSel = EFalse; - } - - //has public files? (passive) - if( passiveOptions & EHasPublicFiles ) - { - if( dataOwner->iHasFiles == ESystemFiles ) - { - dataOwner->iHasFiles = EPublicSystemFiles; - } - else - { - dataOwner->iHasFiles = EPublicFiles; - } - } - - //supports incremental? (active and passive) - if( activeOptions & EActiveSupportsInc || - passiveOptions & EPassiveSupportsInc ) - { - dataOwner->iSupportsInc = ETrue; - } - else - { - dataOwner->iSupportsInc = EFalse; - } - - //delay to prepare data? (active) - if( activeOptions & EDelayToPrepareData ) - { - dataOwner->iDelayToPrep = ETrue; - } - else - { - dataOwner->iDelayToPrep = EFalse; - } - - //fill drivelist - dataOwner->iDriveList = dataOwners[i]->DriveList(); - //filter the drive list - FilterDriveList( dataOwner->iDriveList ); - - CSBGenericDataType* genericData = &( dataOwners[i]->Identifier() ); - TSBDerivedType derived = genericData->DerivedTypeL(); - - if( derived == ESIDDerivedType ) - { - //Uif of the data owner - CSBSecureId* secureId = CSBSecureId::NewL( genericData ); - CleanupStack::PushL( secureId ); - sid = secureId->SecureIdL(); - - dataOwner->iUid.iUid = (TInt32)sid.iId; - LOGGER_WRITE_1("ESIDDerivedType, sid: 0x%08x", dataOwner->iUid.iUid ); - - CleanupStack::PopAndDestroy( secureId ); - } - else if( derived == EPackageDerivedType ) - { - //Package name and uid of the data owner - CSBPackageId* packageId = CSBPackageId::NewL( genericData ); - CleanupStack::PushL( packageId ); - - dataOwner->iPackageName = packageId->PackageNameL(); - dataOwner->iUid.iUid = packageId->PackageIdL().iUid; - LOGGER_WRITE_1("EPackageDerivedType, uid: 0x%08x", dataOwner->iUid.iUid ); - sid = packageId->SecureIdL(); - LOGGER_WRITE_1("sid: 0x%08x", sid.iId ); - - // owerload the package name, also add sid information. - _LIT(KSidFormat, "#0x%08x"); - const TInt KSidFormatLength = 11; - TBuf sidFormat; - sidFormat.Format( KSidFormat, sid.iId ); - if ( dataOwner->iPackageName.Length() + sidFormat.Length() - <= dataOwner->iPackageName.MaxLength() ) - { - dataOwner->iPackageName.Append( sidFormat ); - } - else - { - LOGGER_WRITE("WARNING: Package name too long, sid not included."); - } - - LOGGER_WRITE_1("Package name: %S", &dataOwner->iPackageName ); - if( sid ) - { - //Find if the package is already included to dataowner list - if( packageArray.Find( packageId->PackageIdL(), - CSConSBEClient::Match ) != KErrNotFound ) - { - LOGGER_WRITE("dataowner was already included to list"); - //Don't include dataowner to list again - includeToList = EFalse; - } - else - { - //Store package's id for filtering - LOGGER_WRITE_1( "Storing package id for filtering, uid: 0x%08x", dataOwner->iUid.iUid ); - packageArray.Append( dataOwner->iUid ); - } - } - - CleanupStack::PopAndDestroy( packageId ); - } - else if( derived == EJavaDerivedType ) - { - //Hash - CSBJavaId* javaId = CSBJavaId::NewL( genericData ); - CleanupStack::PushL( javaId ); - - //Initialize with hash data length and copy hash - dataOwner->iJavaHash = HBufC::NewL( javaId->SuiteHashL().Length() ); - dataOwner->iJavaHash->Des().Copy( javaId->SuiteHashL() ); - - //For ConML: set as passive package - dataOwner->iType = EPassiveDataOwner; - dataOwner->iPackageName.Copy( javaId->SuiteNameL() ); - -#ifdef _DEBUG - LOGGER_WRITE("EJavaDerivedType" ); - LOGGER_WRITE_1("Package name: %S", &dataOwner->iPackageName ); - TPtrC hash( dataOwner->iJavaHash->Des() ); - LOGGER_WRITE_1("JavaHash: %S", &hash ); -#endif - - CleanupStack::PopAndDestroy( javaId ); - } - else - { - LOGGER_WRITE("Unknown type, ignored from list" ); - //Unknown type => ignore from list - includeToList = EFalse; - } - - if( includeToList ) - { - LOGGER_WRITE_1( "Appending to list, uid: 0x%08x", dataOwner->iUid.iUid ); - iCurrentTask->iListDataOwnersParams->iDataOwners.AppendL( dataOwner ); - CleanupStack::Pop( dataOwner ); - } - - if( sid ) - { - LOGGER_WRITE_1( "Appending package sid to list, sid: 0x%08x", sid.iId ); - CSConDataOwner* packageDataOwner = dataOwner->CopyL(); - CleanupStack::PushL( packageDataOwner ); - //Clear package name - packageDataOwner->iPackageName = KNullDesC(); - //Add sid - packageDataOwner->iUid.iUid = sid.iId; - iCurrentTask->iListDataOwnersParams->iDataOwners.AppendL( packageDataOwner ); - CleanupStack::Pop( packageDataOwner ); - } - - if( !includeToList ) - { - //Not included to list => delete memory allocation - CleanupStack::PopAndDestroy( dataOwner ); - } - } - - packageArray.Reset(); - CleanupStack::PopAndDestroy( &packageArray ); - CleanupStack::PopAndDestroy( &dataOwners ); - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessGetDataSizeL() -// Executes GetDataSize task -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ProcessGetDataSizeL() - { - TRACE_FUNC_ENTRY; - - if ( !iAllSnapshotsSuppliedCalled ) - { - TInt err(KErrNone); - // we have to call AllSnapshotsSupplied() to inform active - // data owners to start prepare their base data. - TRAP( err, iSBEClient->AllSnapshotsSuppliedL() ); - LOGGER_WRITE_1( "AllSnapshotsSuppliedL() leaved: %d", err ); - iAllSnapshotsSuppliedCalled = ETrue; - } - - - TBool packageData( EFalse ); - - //Calculate data size for every data owner received from the task - for( TInt i = 0; i < iCurrentTask->iGetDataSizeParams->iDataOwners.Count(); - i++ ) - { - packageData = EFalse; - CSConDataOwner* dataOwner = - iCurrentTask->iGetDataSizeParams->iDataOwners[i]; - - TTransferDataType tdt( ERegistrationData ); - TPackageDataType pdt( ESystemData ); - - LOGGER_WRITE_2( "ProcessGetDataSizeL DO %d of %d", i, iCurrentTask->iGetDataSizeParams->iDataOwners.Count() ); - LOGGER_WRITE_1( "ProcessGetDataSizeL SID 0x%08x", dataOwner->iUid ); - switch( dataOwner->iTransDataType ) - { - case ESConRegistrationData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : ERegistrationData" ); - tdt = ERegistrationData; - break; - case ESConPassiveSnapshotData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : EPassiveSnapshotData" ); - tdt = EPassiveSnapshotData; - break; - case ESConPassiveBaseData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : EPassiveBaseData" ); - tdt = EPassiveBaseData; - break; - case ESConPassiveIncrementalData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : EPassiveIncrementalData" ); - tdt = EPassiveIncrementalData; - break; - case ESConActiveSnapshotData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : EActiveSnapshotData" ); - tdt = EActiveSnapshotData; - break; - case ESConActiveBaseData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : EActiveBaseData" ); - tdt = EActiveBaseData; - break; - case ESConActiveIncrementalData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : EActiveIncrementalData" ); - tdt = EActiveIncrementalData; - break; - case ESConSystemData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : ESystemData" ); - pdt = ESystemData; - packageData = ETrue; - break; - case ESConSystemSnapshotData : - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataSize() : ESystemSnapshotData" ); - pdt = ESystemSnapshotData; - packageData = ETrue; - break; - default : - break; - } - - if( packageData && !dataOwner->iJavaHash ) - { - dataOwner->iSize = PackageDataSizeL( dataOwner->iUid, dataOwner->iDriveList, pdt ); - } - else if( !dataOwner->iJavaHash ) - { - dataOwner->iSize = SidDataSizeL( dataOwner->iUid, dataOwner->iDriveList, tdt ); - } - else - { - dataOwner->iSize = JavaDataSizeL( dataOwner->iJavaHash->Des(), - dataOwner->iDriveList ); - } - } - - TRACE_FUNC_EXIT; - } - - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessRequestDataL() -// Executes RequestData task -// ----------------------------------------------------------------------------- -// -TInt CSConSBEClient::ProcessRequestDataL() - { - TRACE_FUNC_ENTRY; - TInt ret( KErrNone ); - - TBool packageData = EFalse; - TTransferDataType transferDataType( ERegistrationData ); - TPackageDataType packageDataType( ESystemSnapshotData ); - LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() iTransDataType: %d", - (TInt)iCurrentTask->iRequestDataParams->iDataOwner->iTransDataType); - - switch( iCurrentTask->iRequestDataParams->iDataOwner->iTransDataType ) - { - case ESConRegistrationData : - transferDataType = ERegistrationData; - break; - case ESConPassiveSnapshotData : - transferDataType = EPassiveSnapshotData; - break; - case ESConPassiveBaseData : - transferDataType = EPassiveBaseData; - break; - case ESConPassiveIncrementalData : - transferDataType = EPassiveIncrementalData; - break; - case ESConActiveSnapshotData : - transferDataType = EActiveSnapshotData; - break; - case ESConActiveBaseData : - transferDataType = EActiveBaseData; - break; - case ESConActiveIncrementalData : - transferDataType = EActiveIncrementalData; - break; - case ESConSystemData : - packageDataType = ESystemData; - packageData = ETrue; - break; - case ESConSystemSnapshotData: - packageDataType = ESystemSnapshotData; - packageData = ETrue; - break; - default : - break; - } - - - //Get the drive number - TDriveNumber driveNumber = EDriveC; - TDriveList driveList = iCurrentTask->iRequestDataParams-> - iDataOwner->iDriveList; - - for( TInt i = 0; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - driveNumber = GetDriveNumber( i ); - break; - } - } - - //Get UID, SID or Java hash - TUid uid; - TSecureId sid; - - uid.iUid = 0; - sid.iId = 0; - - if( packageData && !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash ) - { - uid = iCurrentTask->iRequestDataParams->iDataOwner->iUid; - LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() uid: 0x%08x", uid.iUid); - } - else if( !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash ) - { - sid = iCurrentTask->iRequestDataParams->iDataOwner->iUid; - LOGGER_WRITE_1("CSConSBEClient::ProcessRequestDataL() sid: 0x%08x", sid.iId); - } - - - LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : \ - Begin - Package data: %d", packageData ); - - LOGGER_WRITE_1("iLastChunk: %d", (TInt) iLastChunk ); - LOGGER_WRITE_1("iDataBufferSize: %d", iDataBufferSize ); - - // if was't last chunk and there are free space left on our packet - if( !iLastChunk && iDataBufferSize < KMaxObjectSize ) - { - //No data left, request more from the server - if( packageData && !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash ) - { - CSBPackageTransferType* ptt = CSBPackageTransferType::NewL( - uid, driveNumber, packageDataType ); - CleanupStack::PushL( ptt ); - - RequestDataL( *ptt ); - - CleanupStack::PopAndDestroy( ptt ); - } - else if( !iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash ) - { - CSBSIDTransferType* stt = CSBSIDTransferType::NewL( - sid, driveNumber, transferDataType ); - CleanupStack::PushL( stt ); - - RequestDataL( *stt ); - - CleanupStack::PopAndDestroy( stt ); - } - else - { - TPtr javaHashPtr = iCurrentTask->iRequestDataParams->iDataOwner->iJavaHash->Des(); - CSBJavaTransferType* jtt( NULL ); - //When ESystemData is requested, request EJavaMIDlet - if( packageDataType == ESystemData ) - { - jtt = CSBJavaTransferType::NewL( javaHashPtr, driveNumber, EJavaMIDlet ); - } - //When EPassiveBaseData is requested, request EJavaMIDletData - else if( transferDataType == EPassiveBaseData ) - { - jtt = CSBJavaTransferType::NewL( javaHashPtr, driveNumber, EJavaMIDletData ); - } - - if( packageDataType == ESystemData || transferDataType == EPassiveBaseData ) - { - CleanupStack::PushL( jtt ); - - RequestDataL( *jtt ); - - CleanupStack::PopAndDestroy( jtt ); - } - else - { - //No data - iDataBuffer->Reset(); - iDataBufferSize = 0; - iLastChunk = ETrue; - } - } - } - - LOGGER_WRITE_1("readed iLastChunk: %d", (TInt) iLastChunk ); - LOGGER_WRITE_1("readed iDataBufferSize: %d", iDataBufferSize ); - - - - if( iCurrentTask->iRequestDataParams->iBackupData ) - { - delete iCurrentTask->iRequestDataParams->iBackupData; - iCurrentTask->iRequestDataParams->iBackupData = NULL; - } - - TInt dataToRead = KMaxObjectSize; - if ( dataToRead > iDataBufferSize ) - dataToRead = iDataBufferSize; - - //Initialize the task data buffer - iCurrentTask->iRequestDataParams->iBackupData = HBufC8::NewL( dataToRead ); - //Get descriptor task's buffer - TPtr8 backupDataPtr = iCurrentTask->iRequestDataParams->iBackupData->Des(); - - - iDataBuffer->Read(0, backupDataPtr, dataToRead ); - iDataBuffer->Delete(0, dataToRead); - iDataBufferSize -= dataToRead; - - if ( !iLastChunk || iDataBufferSize>0 ) - { - LOGGER_WRITE( "CSConSBEClient::ProcessRequestDataL() : There are more data available" ); - iCurrentTask->iRequestDataParams->iMoreData = ETrue; - //Another task is needed to transfer the data to the client - ret = KErrCompletion; - } - else - { - LOGGER_WRITE( "CSConSBEClient::ProcessRequestDataL() : All data readed" ); - iDataBuffer->Reset(); - iDataBufferSize = 0; - // task will be completed, initialize iLastChunk value for next operation - iLastChunk = EFalse; - } - - - LOGGER_WRITE_1( "CSConSBEClient::ProcessRequestDataL() : returned %d", ret ); - return ret; - } - -void CSConSBEClient::RequestDataL( CSBGenericTransferType& aGenericTransferType ) - { - TRACE_FUNC_ENTRY; - if ( !iDataBuffer ) - User::Leave( KErrArgument ); - - do - { - LOGGER_WRITE( "iSBEClient->RequestDataL() : start" ); - TRequestStatus status; - iSBEClient->RequestDataL( aGenericTransferType, status ); - User::WaitForRequest( status ); - LOGGER_WRITE_1( "iSBEClient->RequestDataL() : status.Int() %d", status.Int() ); - User::LeaveIfError( status.Int() ); - - //Get the data and store the handle - CSBGenericTransferType* gtt = NULL; - const TPtrC8& dataPtr = iSBEClient->TransferDataInfoL( gtt, iLastChunk ); - LOGGER_WRITE_1("data size: %d", dataPtr.Length()); - delete gtt; - iDataBuffer->ExpandL( iDataBufferSize, dataPtr.Length() ); - iDataBuffer->Write(iDataBufferSize, dataPtr); - iDataBufferSize += dataPtr.Length(); - LOGGER_WRITE_1("total buffer size: %d", iDataBufferSize); - } - // Continue if there are more data, and our packet is not full - while ( !iLastChunk && iDataBufferSize < KMaxObjectSize ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessGetDataOwnerStatusL() -// Executes GetDataOwnerStatus task -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::ProcessGetDataOwnerStatusL() - { - TRACE_FUNC_ENTRY; - - //If restore-mode, call AllSystemFilesRestored() - if( iRestoreMode ) - { - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataOwnerStatusL() : iSBEClient->AllSystemFilesRestored() start" ); - iSBEClient->AllSystemFilesRestored(); - LOGGER_WRITE( "CSConSBEClient::ProcessGetDataOwnerStatusL() : iSBEClient->AllSystemFilesRestored() end" ); - } - - RSIDStatusArray sidStatus; - CleanupClosePushL(sidStatus); - - for( TInt i = 0; i < iCurrentTask->iGetDataOwnerParams->iDataOwners.Count(); - i++ ) - { - CSConDataOwner* dataOwner = - iCurrentTask->iGetDataOwnerParams->iDataOwners[i]; - TSecureId sid( dataOwner->iUid ); - TDataOwnerStatus dataOwnerStatus = EUnset; - TInt dataOwnerError = 0; - - TDataOwnerAndStatus dataOwnerAndStatus( sid, dataOwnerStatus, - dataOwnerError ); - - sidStatus.Append( dataOwnerAndStatus ); - } - - iSBEClient->SIDStatusL( sidStatus ); - - for( TInt j = 0; j < sidStatus.Count(); j++ ) - { - switch( sidStatus[j].iStatus ) - { - case EUnset : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConUnset; - break; - case EDataOwnerNotFound : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConNotFound; - break; - case EDataOwnerReady : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConReady; - break; - case EDataOwnerNotReady : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConNotReady; - break; - case EDataOwnerFailed : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConFailed; - break; - case EDataOwnerNotConnected : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConNotConnected; - break; - case EDataOwnerReadyNoImpl : - iCurrentTask->iGetDataOwnerParams->iDataOwners[j]-> - iDataOwnStatus = ESConNotImplemented; - break; - default : - break; - } - } - sidStatus.Reset(); - CleanupStack::PopAndDestroy( &sidStatus ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::ProcessSupplyDataL() -// Executes SupplyData task -// ----------------------------------------------------------------------------- -// -TInt CSConSBEClient::ProcessSupplyDataL() - { - TRACE_FUNC_ENTRY; - TBool packageData = EFalse; - TBool lastChunk = ETrue; - TTransferDataType transferDataType( ERegistrationData ); - TPackageDataType packageDataType( ESystemSnapshotData ); - LOGGER_WRITE_1("CSConSBEClient::ProcessSupplyDataL() iTransDataType: %d", - (TInt)iCurrentTask->iSupplyDataParams->iDataOwner->iTransDataType); - switch( iCurrentTask->iSupplyDataParams->iDataOwner->iTransDataType ) - { - case ESConRegistrationData : - transferDataType = ERegistrationData; - break; - case ESConPassiveSnapshotData : - transferDataType = EPassiveSnapshotData; - break; - case ESConPassiveBaseData : - transferDataType = EPassiveBaseData; - break; - case ESConPassiveIncrementalData : - transferDataType = EPassiveIncrementalData; - break; - case ESConActiveSnapshotData : - transferDataType = EActiveSnapshotData; - break; - case ESConActiveBaseData : - transferDataType = EActiveBaseData; - break; - case ESConActiveIncrementalData : - transferDataType = EActiveIncrementalData; - break; - case ESConSystemData : - packageDataType = ESystemData; - packageData = ETrue; - break; - case ESConSystemSnapshotData: - packageDataType = ESystemSnapshotData; - packageData = ETrue; - break; - default : - break; - } - - //Get the drive number - TDriveNumber driveNumber = EDriveC; - TDriveList driveList = iCurrentTask->iSupplyDataParams->iDataOwner-> - iDriveList; - - for( TInt i = 0; i < KMaxDrives; i++ ) - { - if( driveList[i] ) - { - driveNumber = GetDriveNumber( i ); - break; - } - } - - //Get UID or SID - TUid uid; - TSecureId sid; - - uid.iUid = 0; - sid.iId = 0; - - if( packageData && !iCurrentTask->iSupplyDataParams->iDataOwner->iJavaHash ) - { - uid = iCurrentTask->iSupplyDataParams->iDataOwner->iUid; - LOGGER_WRITE_1( "CSConSBEClient::ProcessSupplyDataL() uid: 0x%08x", uid.iUid ); - } - else if( !iCurrentTask->iSupplyDataParams->iDataOwner->iJavaHash ) - { - sid = iCurrentTask->iSupplyDataParams->iDataOwner->iUid; - LOGGER_WRITE_1( "CSConSBEClient::ProcessSupplyDataL() sid: 0x%08x", sid.iId ); - } - - - if( packageData && !iCurrentTask->iSupplyDataParams->iDataOwner->iJavaHash ) - { - CSBPackageTransferType* ptt = CSBPackageTransferType::NewL( uid, driveNumber, - packageDataType ); - CleanupStack::PushL( ptt ); - - //Write restore data to chunk - LOGGER_WRITE( "iSBEClient->TransferDataAddressL().Copy() : start" ); - LOGGER_WRITE_1( "CSConSBEClient::ProcessSupplyDataL() :\ - Received data length: %d", iCurrentTask->iSupplyDataParams->iRestoreData->Length() ); - iSBEClient->TransferDataAddressL().Copy( iCurrentTask-> - iSupplyDataParams->iRestoreData->Des() ); - LOGGER_WRITE( "iSBEClient->TransferDataAddressL().Copy()" ); - - delete iCurrentTask->iSupplyDataParams->iRestoreData; - iCurrentTask->iSupplyDataParams->iRestoreData = NULL; - - //Supply data - lastChunk = !( iCurrentTask->iSupplyDataParams->iMoreData ); - LOGGER_WRITE( "iSBEClient->SupplyDataL( ptt, lastChunk ) : start" ); - TRequestStatus status; - iSBEClient->SupplyDataL( *ptt, lastChunk, status ); - User::WaitForRequest( status ); - LOGGER_WRITE( "iSBEClient->SupplyDataL( ptt, lastChunk ) : stop" ); - - User::LeaveIfError( status.Int() ); - - CleanupStack::PopAndDestroy( ptt ); - } - else if( !iCurrentTask->iSupplyDataParams->iDataOwner->iJavaHash ) - { - CSBSIDTransferType* stt = CSBSIDTransferType::NewL( sid, driveNumber, transferDataType ); - CleanupStack::PushL( stt ); - - //Write restore data to chunk - LOGGER_WRITE( "iSBEClient->TransferDataAddressL().Copy() : start" ); - LOGGER_WRITE_1( "CSConSBEClient::ProcessSupplyDataL() : Received data length: %d", - iCurrentTask->iSupplyDataParams->iRestoreData->Length() ); - iSBEClient->TransferDataAddressL().Copy( iCurrentTask-> - iSupplyDataParams->iRestoreData->Des() ); - LOGGER_WRITE( "iSBEClient->TransferDataAddressL().Copy()" ); - - delete iCurrentTask->iSupplyDataParams->iRestoreData; - iCurrentTask->iSupplyDataParams->iRestoreData = NULL; - - //Supply data - lastChunk = !( iCurrentTask->iSupplyDataParams->iMoreData ); - LOGGER_WRITE( "iSBEClient->SupplyDataL( stt, lastChunk ) : start" ); - TRequestStatus status; - iSBEClient->SupplyDataL( *stt, lastChunk, status ); - User::WaitForRequest( status ); - LOGGER_WRITE( "iSBEClient->SupplyDataL( stt, lastChunk ) : stop" ); - - User::LeaveIfError( status.Int() ); - - CleanupStack::PopAndDestroy( stt ); - } - else - { - TPtr javaHashPtr = iCurrentTask->iSupplyDataParams->iDataOwner->iJavaHash->Des(); - CSBJavaTransferType* jtt( NULL ); - if( packageDataType == ESystemData ) - { - LOGGER_WRITE( "iSBEClient->SupplyDataL java ESystemData" ); - jtt = CSBJavaTransferType::NewL( javaHashPtr, driveNumber, EJavaMIDlet ); - } - else if( transferDataType == EPassiveBaseData ) - { - LOGGER_WRITE( "iSBEClient->SupplyDataL java EPassiveBaseData" ); - jtt = CSBJavaTransferType::NewL( javaHashPtr, driveNumber, EJavaMIDletData ); - } - - if( packageDataType == ESystemData || transferDataType == EPassiveBaseData ) - { - CleanupStack::PushL( jtt ); - //Write restore data to chunk - LOGGER_WRITE( "iSBEClient->TransferDataAddressL().Copy() : start" ); - LOGGER_WRITE_1( "CSConSBEClient::ProcessSupplyDataL() : Received data length: %d", - iCurrentTask->iSupplyDataParams->iRestoreData->Length() ); - iSBEClient->TransferDataAddressL().Copy( iCurrentTask-> - iSupplyDataParams->iRestoreData->Des() ); - LOGGER_WRITE( "iSBEClient->TransferDataAddressL().Copy()" ); - - delete iCurrentTask->iSupplyDataParams->iRestoreData; - iCurrentTask->iSupplyDataParams->iRestoreData = NULL; - - //Supply data - lastChunk = !( iCurrentTask->iSupplyDataParams->iMoreData ); - LOGGER_WRITE( "iSBEClient->SupplyDataL( jtt, lastChunk ) : start" ); - TRequestStatus status; - iSBEClient->SupplyDataL( *jtt, lastChunk, status ); - User::WaitForRequest( status ); - LOGGER_WRITE( "iSBEClient->SupplyDataL( jtt, lastChunk ) : stop" ); - - User::LeaveIfError( status.Int() ); - - CleanupStack::PopAndDestroy( jtt ); - } - } - - TInt ret( KErrNone ); - - if( !lastChunk ) - { - ret = KErrCompletion; - } - - LOGGER_WRITE_1( "CSConSBEClient::ProcessSupplyDataL() : returned %d", ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::GetDriveNumber( const TInt& aDrive ) const -// Maps TInt drive number to TDriveNumber -// ----------------------------------------------------------------------------- -// -TDriveNumber CSConSBEClient::GetDriveNumber( const TInt& aDrive ) const - { - TDriveNumber driveNumber; - switch( aDrive ) - { - case 0 : - driveNumber = EDriveA; - break; - case 1 : - driveNumber = EDriveB; - break; - case 2 : - driveNumber = EDriveC; - break; - case 3 : - driveNumber = EDriveD; - break; - case 4 : - driveNumber = EDriveE; - break; - case 5 : - driveNumber = EDriveF; - break; - case 6 : - driveNumber = EDriveG; - break; - case 7 : - driveNumber = EDriveH; - break; - case 8 : - driveNumber = EDriveI; - break; - case 9 : - driveNumber = EDriveJ; - break; - case 10 : - driveNumber = EDriveK; - break; - case 11 : - driveNumber = EDriveL; - break; - case 12 : - driveNumber = EDriveM; - break; - case 13 : - driveNumber = EDriveN; - break; - case 14 : - driveNumber = EDriveO; - break; - case 15 : - driveNumber = EDriveP; - break; - case 16 : - driveNumber = EDriveQ; - break; - case 17 : - driveNumber = EDriveR; - break; - case 18 : - driveNumber = EDriveS; - break; - case 19 : - driveNumber = EDriveT; - break; - case 20 : - driveNumber = EDriveU; - break; - case 21 : - driveNumber = EDriveV; - break; - case 22 : - driveNumber = EDriveW; - break; - case 23 : - driveNumber = EDriveX; - break; - case 24 : - driveNumber = EDriveY; - break; - case 25 : - driveNumber = EDriveZ; - break; - default : - driveNumber = EDriveC; - break; - } - - return driveNumber; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::FilterDriveList( TDriveList& aDriveList ) const -// Filters the drive list -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::FilterDriveList( TDriveList& aDriveList ) const - { - TDriveInfo info; - - for ( TInt i = 0; i < aDriveList.Length(); i++ ) - { - if ( aDriveList[i] ) - { - iFs.Drive( info, i ); -#ifdef __WINS__ - if ( i == EDriveD ) - { - LOGGER_WRITE( "EDriveD skipped on WINS build" ); - aDriveList[i] = '\x0'; - } -#else - if ( info.iType == EMediaRam ) - { - aDriveList[i] = '\x0'; - } -#endif - } - } - - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::Match( const CSConTask& aFirst, const CSConTask& aSecond ) -// Matches the uids -// ----------------------------------------------------------------------------- -// -TInt CSConSBEClient::Match( const TUid& aFirst, const TUid& aSecond ) - { - if( aFirst == aSecond ) - { - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::HandleSBEErrorL( TInt& aErr ) -// Handle error received from Secure Backup Engine -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::HandleSBEErrorL( TInt& aErr ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1( " aErr: %d", aErr ); - if( aErr == KErrServerTerminated ) - { - LOGGER_WRITE( "Re-connecting to SBE..." ); - //Session has been terminated, recreate it.. - delete iSBEClient; - iSBEClient = NULL; - iSBEClient = CSBEClient::NewL(); - } - else if ( aErr ) // error - { - if ( iDataBuffer ) - { - iDataBuffer->Reset(); - iDataBufferSize = 0; - } - iLastChunk = EFalse; - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::AppendFilesToFilelistL() -// Appends files from RFileArray to RPointerArray -// ----------------------------------------------------------------------------- -// -void CSConSBEClient::AppendFilesToFilelistL( const RFileArray& aFiles, RPointerArray& aSconFiles ) - { - TRACE_FUNC_ENTRY; - _LIT( KSConXmlDate, "%F%Y%M%DT%H%T%SZ" ); - for( TInt j = 0; j < aFiles.Count(); j++ ) - { - CSConFile* fileInfo = new (ELeave) CSConFile(); - CleanupStack::PushL( fileInfo ); - fileInfo->iPath = aFiles[j].iName; - LOGGER_WRITE_1("file: %S", &fileInfo->iPath ); - - fileInfo->iSize = aFiles[j].iSize; - - switch( aFiles[j].iAtt ) - { - case KEntryAttNormal : - fileInfo->iUserPerm = EPermNormal; - break; - case KEntryAttReadOnly : - fileInfo->iUserPerm = EPermReadOnly; - break; - default : - fileInfo->iUserPerm = EPermNormal; - break; - } - - TTime time( aFiles[j].iModified ); - HBufC* timeBuf = HBufC::NewLC( KMaxTimeFormatSpec ); - TPtr timePtr = timeBuf->Des(); - time.FormatL( timePtr, KSConXmlDate ); - - fileInfo->iModified.Copy( timePtr ); - - CleanupStack::PopAndDestroy( timeBuf ); - - aSconFiles.Append( fileInfo ); - CleanupStack::Pop( fileInfo ); - } - TRACE_FUNC_EXIT; - } - - -// ----------------------------------------------------------------------------- -// CSConSBEClient::PackageDataSizeL() -// Gets Package dataowner size -// ----------------------------------------------------------------------------- -// -TUint CSConSBEClient::PackageDataSizeL( TUid aPackageId, const TDriveList& aDriveList, - TPackageDataType aPackageDataType ) const - { - TUint dataSize(0); - //Ask data size from every drive - for( TInt j = 0; j < KMaxDrives; j++ ) - { - if( aDriveList[j] ) - { - CSBPackageTransferType* ptt( NULL ); - TDriveNumber driveNumber = GetDriveNumber( j ); - LOGGER_WRITE_1( "Drive %d", driveNumber ); - ptt = CSBPackageTransferType::NewL( aPackageId, driveNumber, aPackageDataType ); - CleanupStack::PushL( ptt ); - //Get the size and store it to a variable - TRAPD( err, dataSize += iSBEClient->ExpectedDataSizeL( *ptt ) ); - CleanupStack::PopAndDestroy( ptt ); - LOGGER_WRITE_1( "ExpectedDataSizeL returned for package %d", err ); - if( err != KErrNone && err != KErrNotFound ) - { - LOGGER_WRITE_1( "ExpectedDataSizeL LEAVE %d", err ); - User::Leave( err ); - } - } - } - return dataSize; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::SidDataSizeL() -// Gets Sid (SecureId) dataowner size -// ----------------------------------------------------------------------------- -// -TUint CSConSBEClient::SidDataSizeL( TUid aSid, const TDriveList& aDriveList, - TTransferDataType aTransferDataType ) const - { - TUint dataSize(0); - //Ask data size from every drive - for( TInt j = 0; j < KMaxDrives; j++ ) - { - if( aDriveList[j] ) - { - CSBSIDTransferType* stt( NULL ); - TDriveNumber driveNumber = GetDriveNumber( j ); - LOGGER_WRITE_1( "Drive %d", driveNumber ); - stt = CSBSIDTransferType::NewL( aSid, driveNumber, aTransferDataType ); - CleanupStack::PushL( stt ); - //Get the size and store it to a variable - TRAPD( err, dataSize += iSBEClient->ExpectedDataSizeL( *stt ) ); - CleanupStack::PopAndDestroy( stt ); - LOGGER_WRITE_1( "ExpectedDataSizeL returned for DO %d", err ); - if( err != KErrNone && err != KErrNotFound ) - { - LOGGER_WRITE_1( "ExpectedDataSizeL LEAVE %d", err ); - User::Leave( err ); - } - } - } - return dataSize; - } - -// ----------------------------------------------------------------------------- -// CSConSBEClient::JavaDataSizeL() -// Gets Java dataowner size -// ----------------------------------------------------------------------------- -// -TUint CSConSBEClient::JavaDataSizeL( const TDesC& aJavaHash, const TDriveList& aDriveList ) const - { - TUint dataSize(0); - //Ask data size from every drive - for( TInt j = 0; j < KMaxDrives; j++ ) - { - if( aDriveList[j] ) - { - CSBJavaTransferType* jtt( NULL ); - - TDriveNumber driveNumber = GetDriveNumber( j ); - LOGGER_WRITE_1( "Drive %d", driveNumber ); - jtt = CSBJavaTransferType::NewL( aJavaHash, - driveNumber, - EJavaMIDlet ); - CleanupStack::PushL( jtt ); - //Get the size and store it to a variable - TRAPD( err, dataSize += iSBEClient->ExpectedDataSizeL( *jtt ) ); - CleanupStack::PopAndDestroy( jtt ); - LOGGER_WRITE_1( "ExpectedDataSizeL returned for Java(EJavaMIDlet) DO %d", err ); - if( err != KErrNone && err != KErrNotFound ) - { - LOGGER_WRITE_1( "ExpectedDataSizeL LEAVE %d", err ); - User::Leave( err ); - } - - jtt = NULL; - jtt = CSBJavaTransferType::NewL( aJavaHash, - driveNumber, - EJavaMIDletData ); - CleanupStack::PushL( jtt ); - //Get the size and store it to a variable - TRAP( err, dataSize += iSBEClient->ExpectedDataSizeL( *jtt ) ); - CleanupStack::PopAndDestroy( jtt ); - LOGGER_WRITE_1( "ExpectedDataSizeL returned for Java(EJavaMIDletData) DO %d", err ); - if( err != KErrNone && err != KErrNotFound ) - { - LOGGER_WRITE_1( "ExpectedDataSizeL LEAVE %d", err ); - User::Leave( err ); - } - } - } - - return dataSize; - } -// End of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconsynchandler.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconsynchandler.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1460 +0,0 @@ -/* -* Copyright (c) 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: CSconSyncHandler implementation -* -*/ - - -#include "sconsynchandler.h" -#include -#include -#include -#include -#include -#include -#include - -#include "debug.h" - -// versions up to 5 must be backward compatible -const TUint16 KFormatVersionNumber ( 1 ); - -_LIT8(KCommandListStores, "SYNC: ListStores"); -_LIT8(KCommandOpenStore, "SYNC: OpenStore: "); -_LIT8(KCommandCloseStore, "SYNC: CloseStore"); -_LIT8(KCommandListChanges, "SYNC: ListChanges"); -_LIT8(KCommandResetChangeInfo, "SYNC: ResetChangeInfo"); -_LIT8(KCommandCommitChanges, "SYNC: CommitChanges: "); -_LIT8(KCommandReadItems, "SYNC: ReadItems: "); -_LIT8(KCommandGetParents, "SYNC: GetParents: "); -_LIT8(KCommandCreateItems, "SYNC: CreateItems"); -_LIT8(KCommandGetCreateItemsResponse, "SYNC: GetCreateItemsResponse"); -_LIT8(KCommandGetCreateItems, "SYNC: GetCreateItems: "); -_LIT8(KCommandReplaceItems, "SYNC: ReplaceItems"); -_LIT8(KCommandGetReplaceItemsResponse, "SYNC: GetReplaceItemsResponse"); -_LIT8(KCommandGetReplaceItems, "SYNC: GetReplaceItems: "); -_LIT8(KCommandMoveItems, "SYNC: MoveItems"); -_LIT8(KCommandDeleteItems, "SYNC: DeleteItems: "); -_LIT8(KCommandSoftDeleteItems, "SYNC: SoftDeleteItems: "); -_LIT8(KCommandDeleteAllItems, "SYNC: DeleteAllItems"); -_LIT8(KCommandDeleteAllItemsStatus, "SYNC: GetDeleteAllItemsStatus"); -_LIT8(KCommandGetStoreFormat, "SYNC: GetStoreFormat"); -_LIT8(KCommandSetRemoteStoreFormat, "SYNC: SetRemoteStoreFormat"); -_LIT8(KCommandGetRestOfData, "SYNC: GetRestOfData"); -_LIT8(KCommandCancel, "SYNC: Cancel"); - - -_LIT(KRemoteFormatStore, "remoteformatstore_0x%08x.dat"); -_LIT(KDataFileExtension, ".tmp"); - -const TInt KTimeStampLength = 16; -_LIT8(KTimeStampFormat, "%02d%02d%04dT%02d%02d%02dZ"); - -const TInt KDefaultExpandSize = 1024; - -// Calendar sync specific constants -const TInt KCalendarDsUid = 0x101F6DDE; - -CSconSyncHandler::~CSconSyncHandler() - { - TRACE_FUNC_ENTRY; - Cancel(); - iSyncSession.Close(); - delete iResponseData; - iFileStream.Close(); - iCreatedItems.Close(); - iReplacedItems.Close(); - iItemsToRead.Close(); - iFs.Delete( iFileInProgress ); - ClearCalendarCenrepL(); - TRACE_FUNC_EXIT; - } - -CSconSyncHandler::CSconSyncHandler( RFs& aFs ) - : CActive( EPriorityStandard ), iFs(aFs), iCreatedItemUidPckg(iCreatedItemUid) - { - CActiveScheduler::Add( this ); - } - -CSconSyncHandler* CSconSyncHandler::NewL( RFs& aFs) - { - TRACE_FUNC_ENTRY; - CSconSyncHandler* self = new (ELeave) CSconSyncHandler(aFs); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - TRACE_FUNC_EXIT; - return self; - } - -void CSconSyncHandler::ConstructL() - { - TInt err = iFs.CreatePrivatePath( EDriveC ); - LOGGER_WRITE_1("CreatePrivatePath err: %d", err); - iFs.SetSessionToPrivate( EDriveC ); - } - -void CSconSyncHandler::HandleGetSyncRequestL( const TDesC8& aRequest, RWriteStream& aResult, TInt aMaxObjectSize ) - { - TRACE_FUNC_ENTRY; - iMaxObjectSize = aMaxObjectSize; - iBytesWrited = 0; - LOGGER_WRITE_1("iMaxObjectSize: %d", iMaxObjectSize); - if ( !iConnected ) - { - LOGGER_WRITE("Try to connect") - User::LeaveIfError( iSyncSession.Connect() ); - iConnected = ETrue; - } - - if ( aRequest.Compare( KCommandListStores ) == KErrNone ) - { - ListStoresL( aResult ); - } - else if ( aRequest.Find( KCommandOpenStore ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandOpenStore().Length() ); - OpenStoreL( params, aResult ); - } - else if ( aRequest.Find( KCommandCloseStore ) == 0 ) - { - CloseStoreL( aResult ); - } - else if ( aRequest.Find( KCommandListChanges ) == 0 ) - { - ListChangesL( aResult ); - } - else if ( aRequest.Find( KCommandResetChangeInfo ) == 0 ) - { - ResetChangeInfoL( aResult ); - } - else if ( aRequest.Find( KCommandCommitChanges ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandCommitChanges().Length() ); - CommitChangesL( params, aResult ); - } - else if ( aRequest.Find( KCommandReadItems ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandReadItems().Length() ); - ReadItemsL( params, aResult ); - } - else if ( aRequest.Find( KCommandGetParents ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandGetParents().Length() ); - GetParentsL( params, aResult ); - } - else if ( aRequest.Find( KCommandGetRestOfData ) == 0 ) - { - // Get rest of data - ReadNextDataBlockL( aResult ); - } - else if ( aRequest.Find( KCommandGetCreateItemsResponse ) == 0 ) - { - GetCreateItemsResponseL( KNullDesC8(), aResult ); - } - else if ( aRequest.Find( KCommandGetCreateItems ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandGetCreateItems().Length() ); - GetCreateItemsResponseL( params, aResult ); - } - else if ( aRequest.Find( KCommandGetReplaceItemsResponse ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandGetReplaceItemsResponse().Length() ); - GetReplaceItemsResponseL( KNullDesC8(), aResult ); - } - else if ( aRequest.Find( KCommandGetReplaceItems ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandGetReplaceItems().Length() ); - GetReplaceItemsResponseL( params, aResult ); - } - else if ( aRequest.Find( KCommandMoveItems ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandMoveItems().Length() ); - MoveItemsL( params, aResult ); - } - else if ( aRequest.Find( KCommandDeleteItems ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandDeleteItems().Length() ); - DeleteItemsL( params, aResult ); - } - else if ( aRequest.Find( KCommandSoftDeleteItems ) == 0 ) - { - TPtrC8 params = aRequest.Mid( KCommandSoftDeleteItems().Length() ); - SoftDeleteItemsL( params, aResult ); - } - else if ( aRequest.Find( KCommandDeleteAllItems ) == 0 ) - { - DeleteAllItemsL( aResult ); - } - else if ( aRequest.Find( KCommandDeleteAllItemsStatus ) == 0 ) - { - GetDeleteAllItemsStatusL( aResult ); - } - else if ( aRequest.Find( KCommandGetStoreFormat ) == 0 ) - { - GetStoreFormatL( aResult ); - } - else if ( aRequest.Find( KCommandCancel ) == 0 ) - { - CancelOperationsL( aResult ); - } - else - { - LOGGER_WRITE("Unknown command"); - User::Leave( KErrNotSupported ); - } - TRACE_FUNC_EXIT; - } - - -void CSconSyncHandler::HandlePutSyncRequestL( const TDesC8& aRequest, RReadStream& aData ) - { - TRACE_FUNC_ENTRY; - if ( !iConnected ) - { - LOGGER_WRITE("Try to connect") - User::LeaveIfError( iSyncSession.Connect() ); - iConnected = ETrue; - } - if ( aRequest.Find( KCommandCreateItems ) == KErrNone ) - { - CreateItemsL( aData ); - } - else if ( aRequest.Find( KCommandReplaceItems ) == 0 ) - { - ReplaceItemsL( aData ); - } - else if ( aRequest.Find( KCommandSetRemoteStoreFormat ) == 0 ) - { - SetRemoteStoreFormatL( aData ); - } - else - { - LOGGER_WRITE("Unknown command"); - User::Leave( KErrNotSupported ); - } - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::ListStoresL( RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - RSconDataProviderInfoArray infoArray(5); - CleanupResetAndDestroyPushL( infoArray ); - iSyncSession.ListAllImplementationsL( infoArray ); - LOGGER_WRITE_1("infoArray.Count(): %d", infoArray.Count()); - aResult.WriteInt32L( infoArray.Count() ); - for (TInt i=0; iDes(); - stream.ReadL( bufPtr8, len ); - - LOGGER_WRITE8_1("storeName8: %S", &bufPtr8); - - // and convert it to unicode - HBufC* storeName = CnvUtfConverter::ConvertToUnicodeFromUtf8L( bufPtr8 ); - CleanupStack::PopAndDestroy( buf8 ); - CleanupStack::PushL( storeName ); - - TPtr storeNamePtr = storeName->Des(); - LOGGER_WRITE_1("storeName: %S", &storeNamePtr); - - if ( providerId == KCalendarDsUid && aParams.Size() > - sizeof(TInt32) // providerId - + sizeof(TInt32) // contextId - + sizeof(TUint16)// storeName len - + len ) // storeName - { - TInt profileId = stream.ReadInt32L(); - len = stream.ReadUint16L(); - HBufC8* buffer = HBufC8::NewLC( len ); - TPtr8 bufferPtr8 = buffer->Des(); - stream.ReadL( bufferPtr8, len ); - HBufC* serverId = CnvUtfConverter::ConvertToUnicodeFromUtf8L( bufferPtr8 ); - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PushL( serverId ); - SetCalendarCenrepL( profileId, serverId->Des() ); - CleanupStack::PopAndDestroy(serverId); - } - - aResult.WriteUint16L( KFormatVersionNumber ); - TRAPD( err, iSyncSession.OpenDataStoreL( providerId, storeName->Des(), contextId)); - if ( err == KErrServerTerminated ) - { - // server terminated, try to reconnect - iConnected = EFalse; - LOGGER_WRITE("Try to re-connect"); - err = iSyncSession.Connect(); - LOGGER_WRITE_1("iSyncSession.Connect() err: %d", err); - if ( !err ) - { - iConnected = ETrue; - TRAP( err, iSyncSession.OpenDataStoreL( providerId, storeName->Des(), contextId)); - } - } - - CleanupStack::PopAndDestroy( storeName ); - CleanupStack::PopAndDestroy( &stream ); - - aResult.WriteInt32L( err ); - - if ( err ) - { - LOGGER_WRITE_1("Error: %d", err); - LOGGER_WRITE("iSyncSession.CloseDataStore()"); - iSyncSession.CloseDataStore(); - ClearCalendarCenrepL(); - return; - } - iCurrentDataProviderUid = providerId; - iCurrentContextUid = contextId; - - - // Now the store is opened - TRAP(err, LoadRemoteStoreFormatL( contextId, providerId )); - if ( err ) - { - aResult.WriteUint8L( 1 ); // Remote store format needed - } - else - { - aResult.WriteUint8L( 0 ); // Remote store format not needed - } - - // return last sync timestamp, if has synced before. - TBool hasHistory = iSyncSession.HasSyncHistoryL(); - TUint8 historyFlag(0); - if ( hasHistory ) - { - historyFlag = 1; - } - aResult.WriteUint8L( historyFlag ); - - if ( hasHistory ) - { - TDateTime timeStamp; - TInt err(KErrNone); - TRAP(err, iSyncSession.GetSyncTimeStampL( providerId, contextId, timeStamp)); - LOGGER_WRITE_1("GetSyncTimeStampL err: %d", err); - - TBuf8 timeStampBuf; - - timeStampBuf.Format( KTimeStampFormat, - timeStamp.Day()+1,timeStamp.Month()+1, timeStamp.Year(), - timeStamp.Hour(), timeStamp.Minute(), timeStamp.Second() ); - LOGGER_WRITE8_1("timeStamp: %S", &timeStampBuf); - aResult.WriteL( timeStampBuf ); - } - - - // for testin purposes only - /* - if (!remoteStoreSetted) - { - RStringPool pool; - pool.OpenL(); - CleanupClosePushL( pool ); - CSmlDataStoreFormat* storeFormat(NULL); - TRAPD( err, storeFormat = iSyncSession.StoreFormatL( pool ) ); - CleanupStack::PushL( storeFormat ); - - iSyncSession.SetRemoteStoreFormatL( *storeFormat ); - SaveRemoteStoreFormatL( *storeFormat, contextId, providerId ); - - CleanupStack::PopAndDestroy( storeFormat ); - CleanupStack::PopAndDestroy( &pool ); - } - */ - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::LoadRemoteStoreFormatL( TInt aContextId, TInt aProviderId ) - { - TRACE_FUNC_ENTRY; - TFileName remoteFormatStore; - iFs.SetSessionToPrivate( EDriveC ); - remoteFormatStore.Format( KRemoteFormatStore, aContextId ); - - CDictionaryFileStore* dictionaryStore = - CDictionaryFileStore::OpenLC(iFs, remoteFormatStore, TUid::Uid(0x0001)); - TBool present = dictionaryStore->IsPresentL( TUid::Uid(aProviderId) ); - if ( !present ) - { - LOGGER_WRITE("Remote store was not saved"); - User::Leave( KErrNotFound ); - } - else - { - RDictionaryReadStream stream; - stream.OpenLC( *dictionaryStore, TUid::Uid(aProviderId) ); - RStringPool stringPool; - stringPool.OpenL(); - CleanupClosePushL( stringPool ); - CSmlDataStoreFormat* storeFormat = CSmlDataStoreFormat::NewLC(stringPool, stream); - iSyncSession.SetRemoteStoreFormatL( *storeFormat ); - CleanupStack::PopAndDestroy( storeFormat ); - CleanupStack::PopAndDestroy( &stringPool ); - CleanupStack::PopAndDestroy(); //OpenLC - } - CleanupStack::PopAndDestroy( dictionaryStore ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::SaveRemoteStoreFormatL( CSmlDataStoreFormat& aStoreFormat, TInt aContextId, TInt aProviderId) - { - TRACE_FUNC_ENTRY; - iFs.SetSessionToPrivate( EDriveC ); - TFileName remoteFormatStore; - remoteFormatStore.Format( KRemoteFormatStore, aContextId ); - CDictionaryFileStore* dictionaryStore = - CDictionaryFileStore::OpenLC(iFs, remoteFormatStore, TUid::Uid(0x0001)); - - RDictionaryWriteStream stream; - stream.AssignLC( *dictionaryStore, TUid::Uid(aProviderId) ); - - aStoreFormat.ExternalizeL( stream ); - stream.CommitL(); - CleanupStack::PopAndDestroy(); //AssignLC - dictionaryStore->CommitL(); - - CleanupStack::PopAndDestroy( dictionaryStore ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::CloseStoreL( RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - iSyncSession.CloseDataStore(); - ClearCalendarCenrepL(); - - // Get last used timestamp if provider was open - if ( iCurrentDataProviderUid != 0 ) - { - TDateTime timeStamp; - iSyncSession.GetSyncTimeStampL(iCurrentDataProviderUid, iCurrentContextUid, timeStamp ); - - iCurrentDataProviderUid = 0; - iCurrentContextUid = 0; - - const TInt KTimeStampLength = 16; - TBuf8 timeStampBuf; - - - timeStampBuf.Format( KTimeStampFormat, - timeStamp.Day()+1,timeStamp.Month()+1, timeStamp.Year(), - timeStamp.Hour(), timeStamp.Minute(), timeStamp.Second() ); - aResult.WriteL( timeStampBuf ); - } - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::ListChangesL( RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - RArray items; - CleanupClosePushL( items ); - - iSyncSession.AddedItemsL( items ); - LOGGER_WRITE_1("Added items count: %d", items.Count()); - aResult.WriteInt32L( items.Count() ); - for (TInt i=0; i items; - CleanupClosePushL( items ); - for ( TInt i=0; i 0 ) - { - iSyncSession.CommitChangeInfoL( items ); - } - - CleanupStack::PopAndDestroy( &items ); - CleanupStack::PopAndDestroy( &stream ); - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::ReadItemsL( const TDesC8& aParams, RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - iItemsToRead.Reset(); - LOGGER_WRITE_1("aParams length: %d", aParams.Length()); - - const TUint8* ptr = aParams.Ptr(); - RMemReadStream stream( ptr , aParams.Size() ); - CleanupClosePushL( stream ); - - // Read item uids from parameter - TInt itemCount = stream.ReadInt32L(); - LOGGER_WRITE_1("Item count: %d", itemCount); - for ( TInt i=0; iSize() == 0 ) && iItemsToRead.Count() == 0 ) - { - // no data - LOGGER_WRITE("no more data or items"); - User::Leave(KErrEof); - } - - if ( iResponseData ) - { - // write data from tempbuffer to response buffer - TInt writeLength = iResponseData->Size(); - if ( writeLength > iMaxObjectSize-iBytesWrited ) - { - writeLength = iMaxObjectSize-iBytesWrited; - } - aResult.WriteL( iResponseData->Ptr(0), writeLength ); - iBytesWrited += writeLength; - - if ( iResponseData->Size() > writeLength ) - { - iResponseData->Delete(0, writeLength); - } - else - { - iResponseData->Reset(); - } - } - if ( iBytesWrited == iMaxObjectSize ) - { - // responce buffer is full, return it. - LOGGER_WRITE("Stream is full, return it"); - return; - } - - TBool streamIsFull( EFalse ); - // Read items from server - CBufFlat* dataBuffer = CBufFlat::NewL(KDefaultExpandSize); - CleanupStack::PushL( dataBuffer ); - while ( iItemsToRead.Count() > 0 && !streamIsFull ) - { - if ( iMaxObjectSize-iBytesWrited < sizeof(TUint32) ) - { - streamIsFull = ETrue; - LOGGER_WRITE("Stream is full, don't read next item"); - continue; - } - ReadItemL( iItemsToRead[0], *dataBuffer ); - aResult.WriteUint32L( dataBuffer->Size() ); - iBytesWrited += sizeof( TUint32 ); - - TInt writeLength = dataBuffer->Size(); - if ( writeLength > iMaxObjectSize-iBytesWrited ) - { - writeLength = iMaxObjectSize-iBytesWrited; - LOGGER_WRITE_1("Write only %d bytes", writeLength); - } - aResult.WriteL( dataBuffer->Ptr(0), writeLength ); - iBytesWrited += writeLength; - - if ( dataBuffer->Size() > writeLength ) - { - // write rest to next data block - if ( !iResponseData ) - { - iResponseData = CBufFlat::NewL(KDefaultExpandSize); - } - iResponseData->Reset(); - LOGGER_WRITE_1("Save %d bytes for next request", dataBuffer->Size() - writeLength); - iResponseData->ResizeL( dataBuffer->Size() - writeLength ); - iResponseData->Write(0, dataBuffer->Ptr( writeLength )); - streamIsFull = ETrue; - } - - iItemsToRead.Remove(0); - - if ( iBytesWrited == iMaxObjectSize ) - { - // writestream is full - LOGGER_WRITE("Stream is full"); - streamIsFull = ETrue; - } - - } - aResult.CommitL(); - - CleanupStack::PopAndDestroy( dataBuffer ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::ReadItemL( TSmlDbItemUid aUid, CBufFlat& aItemData ) - { - TRACE_FUNC_ENTRY; - aItemData.Reset(); - CBufFlat* dataBuffer = CBufFlat::NewL(KDefaultExpandSize); - CleanupStack::PushL( dataBuffer ); - TSmlDbItemUid parent(-1); - TBool fieldChange(EFalse); - - TBuf8<256> mimeType; - TBuf8<100> mimeVer; - TRAPD( err, iSyncSession.OpenItemL( aUid, fieldChange, - parent, mimeType, mimeVer, *dataBuffer )); - if ( err ) - { - LOGGER_WRITE_1("Could not read item %d", aUid); - // only item uid and errorcode will be writed - aItemData.ResizeL( - sizeof(TInt32) + - sizeof(TInt32)); - - } - else - { - // reserve memory for all fields - aItemData.ResizeL( - sizeof(TInt32) + - sizeof(TInt32) + - sizeof(TUint8) + - sizeof(TInt32) + - sizeof(TUint16) + - mimeType.Length() + - sizeof(TUint16) + - mimeVer.Length() + - sizeof(TInt32) + - dataBuffer->Size() - ); - } - - RBufWriteStream tempStream( aItemData ); - CleanupClosePushL( tempStream ); - tempStream.WriteInt32L( aUid ); - tempStream.WriteInt32L( err ); - if ( !err ) - { - tempStream.WriteUint8L( fieldChange ); - tempStream.WriteInt32L( parent ); - tempStream.WriteUint16L( mimeType.Length() ); - tempStream.WriteL( mimeType ); - tempStream.WriteUint16L( mimeVer.Length() ); - tempStream.WriteL( mimeVer ); - tempStream.WriteInt32L( dataBuffer->Size() ); - tempStream.WriteL( dataBuffer->Ptr(0), dataBuffer->Size() ); - } - tempStream.CommitL(); - CleanupStack::PopAndDestroy( &tempStream ); - CleanupStack::PopAndDestroy( dataBuffer ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::CreateItemsL( RReadStream& aData ) - { - TRACE_FUNC_ENTRY; - delete iResponseData; - iResponseData = NULL; - iResponseData = CBufFlat::NewL(KDefaultExpandSize); - RBufWriteStream responseStream( *iResponseData ); - CleanupClosePushL( responseStream ); - // Read item uids from parameter - TInt itemCount = aData.ReadInt32L(); - LOGGER_WRITE_1("itemCount: %d", itemCount); - responseStream.WriteInt32L( itemCount ); - for ( TInt i=0; iDes(); - aData.ReadL(mimeTypePtr, len); - - len = aData.ReadUint16L(); - HBufC8* mimeVerBuf = HBufC8::NewLC( len ); - TPtr8 mimeVerPtr = mimeVerBuf->Des(); - aData.ReadL(mimeVerPtr, len); - - len = aData.ReadInt32L(); - HBufC8* dataBuf = HBufC8::NewLC( len ); - TPtr8 dataPtr = dataBuf->Des(); - aData.ReadL( dataPtr, len ); - - TSmlDbItemUid newUid(-1); - LOGGER_WRITE("read from aData stream -readed ok"); - TRAPD( err, iSyncSession.CreateItemL(newUid, - parent, mimeTypePtr, - mimeVerPtr, dataPtr)); - - CleanupStack::PopAndDestroy( dataBuf ); - CleanupStack::PopAndDestroy( mimeVerBuf ); - CleanupStack::PopAndDestroy( mimeTypeBuf ); - LOGGER_WRITE("Write to responseStream"); - responseStream.WriteInt32L( tempUid ); - responseStream.WriteInt32L( err ); - if ( !err ) - { - responseStream.WriteInt32L( newUid ); - } - LOGGER_WRITE("Write to responseStream -writed ok"); - } - - responseStream.CommitL(); - CleanupStack::PopAndDestroy( &responseStream ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::GetCreateItemsResponseL( const TDesC8& aParams, RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - if ( aParams.Length() > 0 ) - { - LOGGER_WRITE_1("params length: %d", aParams.Length()); - - //LOGGER_WRITE8_1("aParams: %S", &aParams); - if ( iSyncStatus == EReady ) - { - LOGGER_WRITE("Start creating items from file"); - iCreatedItems.Reset(); - const TUint8* ptr = aParams.Ptr(); - RMemReadStream stream( ptr , aParams.Size() ); - CleanupClosePushL( stream ); - TInt filenameLength = stream.ReadInt32L(); - LOGGER_WRITE_1("filename length: %d", filenameLength ); - HBufC8* filenameBuf8 = HBufC8::NewLC( /*stream,*/ filenameLength ); // filename - TPtr8 filenamePtr = filenameBuf8->Des(); - stream.ReadL( filenamePtr, filenameLength); - LOGGER_WRITE("filename ok"); - TInt err = CnvUtfConverter::ConvertToUnicodeFromUtf8(iFileInProgress, filenamePtr ); - LOGGER_WRITE_1("ConvertToUnicodeFromUtf8 err: %d", err); - User::LeaveIfError( err ); - LOGGER_WRITE_1("iFileInProgress: %S", &iFileInProgress); - - if ( iFileInProgress.RightTPtr(KDataFileExtension().Length()).CompareF(KDataFileExtension) != 0 ) - { - iFileInProgress = KNullDesC(); - LOGGER_WRITE("File extendion was not correct"); - User::Leave( KErrAccessDenied ); - } - - CleanupStack::PopAndDestroy( filenameBuf8 ); - - LOGGER_WRITE("open file"); - err = iFileStream.Open(iFs,iFileInProgress, EFileShareReadersOnly); - LOGGER_WRITE_1("iFileStream.Open err: %d", err); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( &stream ); - - iSyncStatus = ECreatingItemsFromFile; - iItemsLeftInStream = iFileStream.ReadInt32L(); - LOGGER_WRITE_1("iItemsLeftInStream: %d", iItemsLeftInStream); - aResult.WriteInt32L( iItemsLeftInStream ); - aResult.WriteInt32L( 0 ); // completed items since last sync - CreateNextItemOnStreamL(); - iItemsLeftInStream--; - } - else if ( iSyncStatus == ECreatingItemsFromFile || iSyncStatus == EItemsCreated ) - { - LOGGER_WRITE("Read status"); - TInt temp = 0; - if ( iSyncStatus == ECreatingItemsFromFile ) - { - // one item is on progress, add it to to "left" items. - temp = 1; - } - LOGGER_WRITE_1("left items: %d", iItemsLeftInStream + temp); - LOGGER_WRITE_1("completed items: %d", iCreatedItems.Count()); - aResult.WriteInt32L( iItemsLeftInStream + temp ); // items in progress - aResult.WriteInt32L( iCreatedItems.Count() ); // completed items since last get - - while ( iCreatedItems.Count() > 0 ) - { - aResult.WriteInt32L( iCreatedItems[0].iTemporaryId ); - aResult.WriteInt32L( iCreatedItems[0].iErrorCode ); - if ( !iCreatedItems[0].iErrorCode ) - { - aResult.WriteInt32L( iCreatedItems[0].iNewUid ); - } - iCreatedItems.Remove(0); - } - if ( iSyncStatus == EItemsCreated ) - { - // all done - iSyncStatus = EReady; - LOGGER_WRITE("iSyncStatus = EReady"); - } - } - else - { - LOGGER_WRITE_1("Wrong sync status: %d", iSyncStatus); - User::Leave( KErrInUse ); - } - } - else - { - LOGGER_WRITE("Read response"); - if ( !iResponseData ) - { - User::Leave( KErrNotReady ); - } - aResult.WriteL( iResponseData->Ptr(0), iResponseData->Size() ); - delete iResponseData; - iResponseData = NULL; - } - aResult.CommitL(); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::ReplaceItemsL( RReadStream& aData ) - { - TRACE_FUNC_ENTRY; - delete iResponseData; - iResponseData = NULL; - iResponseData = CBufFlat::NewL(KDefaultExpandSize); - RBufWriteStream responseStream( *iResponseData ); - CleanupClosePushL( responseStream ); - // Read item uids from parameter - TInt itemCount = aData.ReadInt32L(); - - responseStream.WriteInt32L( itemCount ); - for ( TInt i=0; iDes(); - aData.ReadL( dataPtr, len ); - - TRAPD( err, iSyncSession.ReplaceItemL(uid, - parent, - fieldChange, dataPtr)); - CleanupStack::PopAndDestroy( dataBuf ); - - responseStream.WriteInt32L( uid ); - responseStream.WriteInt32L( err ); - } - responseStream.CommitL(); - CleanupStack::PopAndDestroy( &responseStream ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::GetReplaceItemsResponseL( const TDesC8& aParams, RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - if ( aParams.Length() > 0 ) - { - LOGGER_WRITE8_1("aParams: %S", &aParams); - if ( iSyncStatus == EReady ) - { - LOGGER_WRITE("Start replacing items from file"); - iReplacedItems.Reset(); - - // create parameter stream reader - const TUint8* ptr = aParams.Ptr(); - RMemReadStream stream( ptr , aParams.Size() ); - CleanupClosePushL( stream ); - - // read filename - TInt filenameLength = stream.ReadInt32L(); - LOGGER_WRITE_1("filename length: %d", filenameLength ); - HBufC8* filenameBuf8 = HBufC8::NewLC( filenameLength ); // filename - TPtr8 filenamePtr = filenameBuf8->Des(); - stream.ReadL( filenamePtr, filenameLength); - LOGGER_WRITE("filename ok"); - - TInt err = CnvUtfConverter::ConvertToUnicodeFromUtf8(iFileInProgress, filenameBuf8->Des() ); - LOGGER_WRITE_1("ConvertToUnicodeFromUtf8 err: %d", err); - User::LeaveIfError( err ); - if ( iFileInProgress.RightTPtr(KDataFileExtension().Length()).CompareF(KDataFileExtension) != 0 ) - { - iFileInProgress = KNullDesC(); - LOGGER_WRITE("File extendion was not correct"); - User::Leave( KErrAccessDenied ); - } - - // open file - err = iFileStream.Open(iFs, iFileInProgress, EFileShareReadersOnly); - LOGGER_WRITE_1("iFileStream.Open err: %d", err); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( filenameBuf8 ); - CleanupStack::PopAndDestroy( &stream ); - - iSyncStatus = EReplacingItemsFromFile; - iItemsLeftInStream = iFileStream.ReadInt32L(); - LOGGER_WRITE_1("iItemsLeftInStream: %d", iItemsLeftInStream); - // write results to return stream - aResult.WriteInt32L( iItemsLeftInStream ); - aResult.WriteInt32L( 0 ); // completed items since last sync - ReplaceNextItemOnStreamL(); - iItemsLeftInStream--; - } - else if ( iSyncStatus == EReplacingItemsFromFile || iSyncStatus == EItemsReplaced ) - { - LOGGER_WRITE("Read status"); - TInt temp = 0; - if ( iSyncStatus == EReplacingItemsFromFile ) - { - // one item is on progress, add it to to "left" items. - temp = 1; - } - LOGGER_WRITE_1("left items: %d", iItemsLeftInStream + temp); - LOGGER_WRITE_1("completed items: %d", iReplacedItems.Count()); - aResult.WriteInt32L( iItemsLeftInStream + temp ); // items in progress - aResult.WriteInt32L( iReplacedItems.Count() ); // completed items since last get - //for (TInt i=0; i 0 ) - { - aResult.WriteInt32L( iReplacedItems[0].iItemUid ); - aResult.WriteInt32L( iReplacedItems[0].iErrorCode ); - iReplacedItems.Remove(0); - } - if ( iSyncStatus == EItemsReplaced ) - { - // all done - iSyncStatus = EReady; - LOGGER_WRITE("iSyncStatus = EReady"); - } - } - } - else - { - if ( !iResponseData ) - { - LOGGER_WRITE("No response data, leave KErrNotReady"); - User::Leave( KErrNotReady ); - } - aResult.WriteL( iResponseData->Ptr(0), iResponseData->Size() ); - aResult.CommitL(); - delete iResponseData; - iResponseData = NULL; - } - aResult.CommitL(); - - - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::MoveItemsL( const TDesC8& aParams, RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - const TUint8* ptr = aParams.Ptr(); - RMemReadStream stream( ptr , aParams.Size() ); - CleanupClosePushL( stream ); - - // Read item uids from parameter - TInt itemCount = stream.ReadInt32L(); - aResult.WriteInt32L( itemCount ); - for ( TInt i=0; iExternalizeL( aResult ); - } - CleanupStack::PopAndDestroy( storeFormat ); - CleanupStack::PopAndDestroy( &pool ); - TRACE_FUNC_EXIT; - } - - -void CSconSyncHandler::SetRemoteStoreFormatL( RReadStream& aData ) - { - TRACE_FUNC_ENTRY; - RStringPool pool; - pool.OpenL(); - CleanupClosePushL( pool ); - CSmlDataStoreFormat* serverDataStoreFormat = CSmlDataStoreFormat::NewLC( pool, aData ); - iSyncSession.SetRemoteStoreFormatL( *serverDataStoreFormat ); - // Save format for later use - TRAPD(err, SaveRemoteStoreFormatL( *serverDataStoreFormat, iCurrentContextUid, iCurrentDataProviderUid )); - if ( err ) - { - LOGGER_WRITE_1("SaveRemoteStoreFormatL err: %d", err); - } - CleanupStack::PopAndDestroy( serverDataStoreFormat ); - CleanupStack::PopAndDestroy( &pool ); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::CreateNextItemOnStreamL() - { - TRACE_FUNC_ENTRY; - if ( IsActive() ) - { - LOGGER_WRITE("Warning: Was on active state!"); - Cancel(); - } - iTemporaryItemUid = iFileStream.ReadInt32L(); - TSmlDbItemUid parent = iFileStream.ReadInt32L(); - - TInt len = iFileStream.ReadUint16L(); - HBufC8* mimeTypeBuf = HBufC8::NewLC( len ); - TPtr8 mimeTypePtr = mimeTypeBuf->Des(); - iFileStream.ReadL(mimeTypePtr, len); - - len = iFileStream.ReadUint16L(); - HBufC8* mimeVerBuf = HBufC8::NewLC( len ); - TPtr8 mimeVerPtr = mimeVerBuf->Des(); - iFileStream.ReadL(mimeVerPtr, len); - - len = iFileStream.ReadInt32L(); - HBufC8* dataBuf = HBufC8::NewLC( len ); - TPtr8 dataPtr = dataBuf->Des(); - iFileStream.ReadL( dataPtr, len ); - - SetActive(); - iStatus = KRequestPending; - iSyncSession.CreateItemL(iCreatedItemUidPckg, - parent, mimeTypePtr, - mimeVerPtr, dataPtr, iStatus); - - CleanupStack::PopAndDestroy( dataBuf ); - CleanupStack::PopAndDestroy( mimeVerBuf ); - CleanupStack::PopAndDestroy( mimeTypeBuf ); - - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::ReplaceNextItemOnStreamL() - { - TRACE_FUNC_ENTRY; - if ( IsActive() ) - { - LOGGER_WRITE("Warning: Was on active state!"); - Cancel(); - } - TSmlDbItemUid uid = iFileStream.ReadInt32L(); - TSmlDbItemUid parent = iFileStream.ReadInt32L(); - TBool fieldChange = iFileStream.ReadUint8L(); - TInt len = iFileStream.ReadInt32L(); - HBufC8* dataBuf = HBufC8::NewLC( len ); - TPtr8 dataPtr = dataBuf->Des(); - iFileStream.ReadL( dataPtr, len ); - - iReplacedItem.iItemUid = uid; - - SetActive(); - iStatus = KRequestPending; - - iSyncSession.ReplaceItemL(uid, - parent, - fieldChange, dataPtr, iStatus); - - CleanupStack::PopAndDestroy( dataBuf ); - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::CancelOperationsL( RWriteStream& aResult ) - { - TRACE_FUNC_ENTRY; - Cancel(); - // all done - iFileStream.Close(); - iTemporaryItemUid = -1; - iCreatedItemUid = -1; - iSyncStatus = EItemsCreated; - iFs.Delete( iFileInProgress ); - iFileInProgress = KNullDesC(); - iItemsLeftInStream = 0; - _LIT8(KDummyParam, "Cancel"); - if ( iSyncStatus == EItemsCreated ) - { - GetCreateItemsResponseL( KDummyParam, aResult ); - } - else if ( iSyncStatus == EItemsReplaced ) - { - GetReplaceItemsResponseL( KDummyParam, aResult ); - } - - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::DoCancel() - { - TRACE_FUNC_ENTRY; - iSyncSession.CancelRequest(); - Reset(); - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::RunL() - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("iSyncStatus: %d", iSyncStatus); - LOGGER_WRITE_1("iStatus: %d", iStatus.Int()); - if ( iSyncStatus == ECreatingItemsFromFile ) - { - LOGGER_WRITE_1("iTemporaryItemUid: %d", iTemporaryItemUid); - LOGGER_WRITE_1("iCreatedItemUid: %d", iCreatedItemUid); - TCreatedItem item; - item.iTemporaryId = iTemporaryItemUid; - item.iErrorCode = iStatus.Int(); - item.iNewUid = iCreatedItemUid; - iCreatedItems.Append( item ); - if ( iItemsLeftInStream > 0 ) - { - CreateNextItemOnStreamL(); - iItemsLeftInStream--; - LOGGER_WRITE_1("iItemsLeftInStream: %d", iItemsLeftInStream); - } - else - { - // all done - LOGGER_WRITE("All items added."); - iFileStream.Close(); - iTemporaryItemUid = -1; - iCreatedItemUid = -1; - iSyncStatus = EItemsCreated; - TInt err = iFs.Delete( iFileInProgress ); - LOGGER_WRITE_2("iFs.Delete( '%S' ) ret: %d", &iFileInProgress, err); - iFileInProgress = KNullDesC(); - } - } - else if ( iSyncStatus == EReplacingItemsFromFile ) - { - iReplacedItem.iErrorCode = iStatus.Int(); - iReplacedItems.Append( iReplacedItem ); - if ( iItemsLeftInStream > 0 ) - { - ReplaceNextItemOnStreamL(); - iItemsLeftInStream--; - LOGGER_WRITE_1("iItemsLeftInStream: %d", iItemsLeftInStream); - } - else - { - // all done - LOGGER_WRITE("All items replaced."); - iFileStream.Close(); - iSyncStatus = EItemsReplaced; - TInt err = iFs.Delete( iFileInProgress ); - LOGGER_WRITE_2("iFs.Delete( '%S' ) ret: %d", &iFileInProgress, err); - iFileInProgress = KNullDesC(); - } - } - else if ( iSyncStatus == EDeletingAllItems ) - { - iSyncStatus = EReady; - } - TRACE_FUNC_EXIT; - } - -TInt CSconSyncHandler::RunError( TInt aError ) - { - TRACE_FUNC_ENTRY; - LOGGER_WRITE_1("aError: %d", aError); - LOGGER_WRITE_1("iSyncStatus: %d", iSyncStatus); - TInt err( aError ); - if ( iSyncStatus == ECreatingItemsFromFile ) - { - iSyncStatus = EItemsCreated; - iItemsLeftInStream = 0; - iFileStream.Close(); - err = iFs.Delete( iFileInProgress ); - LOGGER_WRITE_2("iFs.Delete( '%S' ) ret: %d", &iFileInProgress, err); - iFileInProgress = KNullDesC(); - err = KErrNone; - } - else if ( iSyncStatus == EReplacingItemsFromFile ) - { - iSyncStatus = EItemsReplaced; - iItemsLeftInStream = 0; - iFileStream.Close(); - err = iFs.Delete( iFileInProgress ); - LOGGER_WRITE_2("iFs.Delete( '%S' ) ret: %d", &iFileInProgress, err); - iFileInProgress = KNullDesC(); - err = KErrNone; - } - else if ( iSyncStatus == EDeletingAllItems ) - { - iSyncStatus = EReady; - } - - TRACE_FUNC_EXIT; - return err; - } - -void CSconSyncHandler::Reset() - { - TRACE_FUNC_ENTRY; - iFileStream.Close(); - TInt err = iFs.Delete( iFileInProgress ); - LOGGER_WRITE_2("iFs.Delete( '%S' ) ret: %d", &iFileInProgress, err); - iFileInProgress = KNullDesC(); - iSyncStatus = EReady; - TRACE_FUNC_EXIT; - } - -void CSconSyncHandler::SetCalendarCenrepL( TInt aProfileId, const TDesC& aServerId ) - { - LOGGER_WRITE(" Write cenrep values"); - CRepository* rep = CRepository::NewLC(KNsmlDsSessionInfoKey); - User::LeaveIfError( rep->Set(EDSSessionProfileId, aProfileId) ); - User::LeaveIfError( rep->Set(EDSSessionProfileName, KNullDesC) ); - User::LeaveIfError( rep->Set(EDSSessionServerId, aServerId) ); - CleanupStack::PopAndDestroy(rep); - iCalendarCenrepUsed = ETrue; - } - -void CSconSyncHandler::ClearCalendarCenrepL() - { - if ( iCalendarCenrepUsed ) - { - LOGGER_WRITE("Calendar sync, clear cenrep values"); - - CRepository* rep = CRepository::NewLC(KNsmlDsSessionInfoKey); - rep->Set(EDSSessionProfileId, KErrNotFound); - rep->Set(EDSSessionProfileName, KNullDesC); - rep->Set(EDSSessionServerId, KNullDesC); - CleanupStack::PopAndDestroy(rep); - iCalendarCenrepUsed = EFalse; - } - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/services/pcd/src/sconvideoparser.cpp --- a/connectivitymodules/SeCon/services/pcd/src/sconvideoparser.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,568 +0,0 @@ -/* -* Copyright (c) 2008-2010 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: CSConVideoParser implementation -* -*/ - - -#include -#include -#include -#include "sconvideoparser.h" -#include "debug.h" - -_LIT( KMimeType, "MimeType" ); -_LIT8( KImageEncoderMimeType, "image/jpeg" ); -_LIT( KMimeTypeAudio, "audio/*" ); -_LIT( KMimeTypeVideo, "video/*" ); - -const TInt KRequestTimeOut( 20000000 ); // 20 sec. - -// ----------------------------------------------------------------------------- -// CSConVideoParser::CSConVideoParser() -// ----------------------------------------------------------------------------- -// -CSConVideoParser::CSConVideoParser() - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::~CSConVideoParser() -// Destructor -// ----------------------------------------------------------------------------- -// -CSConVideoParser::~CSConVideoParser() - { - TRACE_FUNC_ENTRY; - delete iTimeOut; - if ( iVideoClip ) - { - iVideoClip->CancelThumb(); - } - delete iVideoClip; - - if ( iVideoUtil ) - { - iVideoUtil->Close(); - } - delete iVideoUtil; - - if ( iWindow ) - { - iWindow->Close(); - } - delete iWindow; - iRootWindow.Close(); - delete iScreen; - iWsSession.Close(); - - delete iThumbnail; - delete iVideoMimeType; - delete iAudioMimeType; - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::NewLC() -// ----------------------------------------------------------------------------- -// -CSConVideoParser* CSConVideoParser::NewLC() - { - CSConVideoParser* self = new (ELeave)CSConVideoParser(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::ConstructL() -// Constructor -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::ConstructL() - { - TRACE_FUNC_ENTRY; - - User::LeaveIfError( iWsSession.Connect() ); - - iScreen = new(ELeave) CWsScreenDevice( iWsSession ); - User::LeaveIfError( iScreen->Construct() ); - - iRootWindow = RWindowGroup(iWsSession); - User::LeaveIfError( iRootWindow.Construct(reinterpret_cast(&iWsSession), EFalse) ); - - iWindow = new(ELeave) RWindow( iWsSession ); - User::LeaveIfError( iWindow->Construct(iRootWindow, reinterpret_cast(&iRootWindow) + 1) ); - - TRect temp(0,0,320,240); // dummy parameter - iVideoUtil = CVideoPlayerUtility::NewL(*this, EMdaPriorityNormal, EMdaPriorityPreferenceNone, iWsSession, *iScreen, *iWindow, temp, temp); - - iTimeOut = CSconTimeOut::NewL( *this ); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::OpenFileL( const RFs& aFs, const TDesC& aFileName ) -// Opens video file -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::OpenFileL( const RFs& aFs, const TDesC& aFileName ) - { - TRACE_FUNC_ENTRY; - - iVideoUtilReady = EFalse; - iVideoClipReady = EFalse; - iVideoUtilErr = KErrNone; - iVideoClipErr = KErrNone; - - delete iThumbnail; - iThumbnail = NULL; - delete iVideoMimeType; - iVideoMimeType=NULL; - delete iAudioMimeType; - iAudioMimeType=NULL; - - if ( iVideoClip ) - { - iVideoClip->CancelThumb(); - delete iVideoClip; - iVideoClip = NULL; - } - if ( iVideoUtil ) - { - iVideoUtil->Close(); - } - - TBool fileExist = BaflUtils::FileExists( aFs, aFileName ); - if ( !fileExist ) - { - User::Leave( KErrNotFound ); - } - iAsyncStopCalled = EFalse; - iVideoClip = CTNEVideoClipInfo::NewL( aFileName, *this ); - - iVideoUtil->OpenFileL( aFileName ); - - LOGGER_WRITE("Start timeout"); - iTimeOut->Start( KRequestTimeOut ); - - LOGGER_WRITE("iWait.Start()"); - iWait.Start(); - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::Thumbnail() -// returns video thumbnail in jpg format -// ----------------------------------------------------------------------------- -// -const TDesC8& CSConVideoParser::Thumbnail() const - { - TRACE_FUNC; - if ( !iThumbnail ) - { - return KNullDesC8; - } - return *iThumbnail; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoFrameRateL() -// returns video frame rate -// ----------------------------------------------------------------------------- -// -TReal32 CSConVideoParser::VideoFrameRateL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoFrameRateL(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoFrameSizeL() -// returns video frame size -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::VideoFrameSizeL(TSize& aSize) const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoFrameSizeL( aSize ); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoFormatMimeTypeL() -// returns video format -// ----------------------------------------------------------------------------- -// -const TDesC8& CSConVideoParser::VideoFormatMimeTypeL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoFormatMimeType(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoBitRateL() -// returns videostream bitrate -// ----------------------------------------------------------------------------- -// -TInt CSConVideoParser::VideoBitRateL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->VideoBitRateL(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::AudioBitRateL() -// returns audiostream bitrate -// ----------------------------------------------------------------------------- -// -TInt CSConVideoParser::AudioBitRateL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->AudioBitRateL(); - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::DurationL() -// returns video duration in milliseconds -// ----------------------------------------------------------------------------- -// -TInt CSConVideoParser::DurationL() const - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - return iVideoUtil->DurationL().Int64()/1000; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::VideoMimeTypeL() -// returns video mime type -// ----------------------------------------------------------------------------- -// -const TDesC& CSConVideoParser::VideoMimeTypeL() - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - delete iVideoMimeType; - iVideoMimeType = NULL; - - TInt metadataEntries = iVideoUtil->NumberOfMetaDataEntriesL(); - LOGGER_WRITE_1( "metadataEntries: %d", metadataEntries); - - for (TInt i=0; i < metadataEntries ; i++) - { - CMMFMetaDataEntry* entry = iVideoUtil->MetaDataEntryL(i); - CleanupStack::PushL( entry ); - if ( entry->Name().Compare( KMimeType ) == 0 ) - { - if ( entry->Value().MatchF( KMimeTypeVideo ) == 0 ) - { - LOGGER_WRITE_1( "video mimetype found: %S", &entry->Value()); - iVideoMimeType = HBufC::NewL(entry->Value().Length()); - TPtr videoMimeTypePtr = iVideoMimeType->Des(); - videoMimeTypePtr.Copy( entry->Value() ); - CleanupStack::PopAndDestroy( entry ); - return *iVideoMimeType; - } - } - CleanupStack::PopAndDestroy( entry ); - } - return KNullDesC; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::AudioMimeTypeL() -// returns audio mime type -// ----------------------------------------------------------------------------- -// -const TDesC& CSConVideoParser::AudioMimeTypeL() - { - TRACE_FUNC; - if ( !iVideoUtil ) - { - User::Leave( KErrNotReady ); - } - delete iAudioMimeType; - iAudioMimeType = NULL; - TInt metadataEntries = iVideoUtil->NumberOfMetaDataEntriesL(); - LOGGER_WRITE_1( "metadataEntries: %d", metadataEntries); - - for (TInt i=0; i < metadataEntries ; i++) - { - CMMFMetaDataEntry* entry = iVideoUtil->MetaDataEntryL(i); - CleanupStack::PushL( entry ); - - if ( entry->Name().Compare( KMimeType ) == 0 ) - { - if ( entry->Value().MatchF( KMimeTypeAudio ) == 0 ) - { - LOGGER_WRITE_1( "video mimetype found: %S", &entry->Value()); - iAudioMimeType = HBufC::NewL(entry->Value().Length()); - TPtr audioMimeTypePtr = iAudioMimeType->Des(); - audioMimeTypePtr.Copy( entry->Value() ); - CleanupStack::PopAndDestroy( entry ); - return *iAudioMimeType; - } - } - CleanupStack::PopAndDestroy( entry ); - } - return KNullDesC; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoOpenComplete( TInt aError ) -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoOpenComplete( TInt aError ) - { - TRACE_FUNC_ENTRY; - if ( iVideoUtilReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - return; - } - LOGGER_WRITE_1( "aError: %d", aError ); - if ( aError == KErrNone ) - { - iVideoUtil->Prepare(); - } - else - { - iVideoUtilReady = ETrue; - iVideoUtilErr = aError; - } - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoPrepareComplete( TInt aError ) -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoPrepareComplete( TInt aError ) - { - TRACE_FUNC_ENTRY; - if ( iVideoUtilReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - return; - } - LOGGER_WRITE_1( "aError: %d", aError ); - - iVideoUtilReady = ETrue; - iVideoUtilErr = aError; - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoFrameReady() -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoFrameReady( CFbsBitmap& /*aFrame*/,TInt /*aError*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoPlayComplete() -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoPlayComplete( TInt /*aError*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::MvpuoEvent() -// MVideoPlayerUtilityObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::MvpuoEvent( const TMMFEvent& /*aEvent*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::NotifyVideoClipInfoReady(CTNEVideoClipInfo& aInfo, TInt aError) -// MTNEVideoClipInfoObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::NotifyVideoClipInfoReady(CTNEVideoClipInfo& aInfo, TInt aError) - { - TRACE_FUNC_ENTRY; - if ( iVideoClipReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - return; - } - LOGGER_WRITE_1("aError: %d", aError); - if ( aError == KErrNone ) - { - TSize resolution(320,240); - TRAPD( err, aInfo.GetThumbL(*this,KBestThumbIndex, &resolution ) ); - - if ( err ) - { - LOGGER_WRITE_1("aInfo.GetThumbL err: %d", err); - iVideoClipReady = ETrue; - iVideoClipErr = err; - } - } - else - { - iVideoClipReady = ETrue; - iVideoClipErr = aError; - } - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::NotifyVideoClipThumbCompleted() -// MTNEVideoClipInfoObserver implementation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::NotifyVideoClipThumbCompleted(CTNEVideoClipInfo& /*aInfo*/, - TInt aError, - CFbsBitmap* aThumb) - { - TRACE_FUNC_ENTRY; - if ( iVideoClipReady ) - { - // already timeout - LOGGER_WRITE("Already timeout"); - delete aThumb; - return; - } - LOGGER_WRITE_1("aError: %d", aError); - if ( aError == KErrNone) - { - delete iThumbnail; - iThumbnail = NULL; - LOGGER_WRITE("create CImageEncoder"); - CImageEncoder* encoder = NULL; - TRAPD( err, encoder = CImageEncoder::DataNewL( iThumbnail, KImageEncoderMimeType, CImageEncoder::EOptionAlwaysThread ) ); - LOGGER_WRITE_1("err: %d", err ); - if ( err == KErrNone ) - { - LOGGER_WRITE("Start Convert"); - TRequestStatus status; - encoder->Convert( &status, *aThumb, NULL ); - - User::WaitForRequest( status ); - LOGGER_WRITE_1("Convert status: %d", status.Int()); - LOGGER_WRITE_1("buf Length: %d", iThumbnail->Length()); - err = status.Int(); - } - delete encoder; - } - delete aThumb; - iVideoClipReady = ETrue; - iVideoClipErr = aError; - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - iAsyncStopCalled = ETrue; - iTimeOut->Cancel(); - LOGGER_WRITE("AsyncStop"); - iWait.AsyncStop(); - } - - TRACE_FUNC_EXIT; - } - -// ----------------------------------------------------------------------------- -// CSConVideoParser::TimeOut() -// Called when timeout has occured, cancels videoclip generation -// ----------------------------------------------------------------------------- -// -void CSConVideoParser::TimeOut() - { - TRACE_FUNC_ENTRY; - if ( !iVideoClipReady ) - { - iVideoClip->CancelThumb(); - LOGGER_WRITE("videoclip cancelled"); - iVideoClipReady = ETrue; - iVideoClipErr = KErrCancel; - } - - if ( !iVideoUtilReady ) - { - LOGGER_WRITE("videoUtil cancelled"); - iVideoUtilReady = ETrue; - iVideoUtilErr = KErrCancel; - } - - if ( iVideoUtilReady && iVideoClipReady && !iAsyncStopCalled ) - { - LOGGER_WRITE("AsyncStop"); - iAsyncStopCalled = ETrue; - iWait.AsyncStop(); - } - TRACE_FUNC_EXIT; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/bld/bld.inf --- a/connectivitymodules/SeCon/wbxml/conmlhandler/bld/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* 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: ConML parser and generator -* This file provides the information required for building the -* whole of a SConConMLHandler -* -*/ - - - -PRJ_PLATFORMS -DEFAULT - -PRJ_MMPFILES -sconconmlhandler.mmp - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/bld/def/bwinscwu.def --- a/connectivitymodules/SeCon/wbxml/conmlhandler/bld/def/bwinscwu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?CreateCSConConMLHandlerL@@YAPAVCSConConMLHandler@@XZ @ 1 NONAME ; class CSConConMLHandler * CreateCSConConMLHandlerL(void) - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/bld/def/eabiu.def --- a/connectivitymodules/SeCon/wbxml/conmlhandler/bld/def/eabiu.def Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -EXPORTS - _Z24CreateCSConConMLHandlerLv @ 1 NONAME - _ZTI13CXMLWorkspace @ 2 NONAME ; ## - _ZTI17CSConConMLHandler @ 3 NONAME ; ## - _ZTV13CXMLWorkspace @ 4 NONAME ; ## - _ZTV17CSConConMLHandler @ 5 NONAME ; ## - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/bld/sconconmlhandler.mmp --- a/connectivitymodules/SeCon/wbxml/conmlhandler/bld/sconconmlhandler.mmp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2002-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: ConML Parser and generator -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -TARGETPATH sys/bin - -TARGET sconconmlhandler.dll -TARGETTYPE DLL -UID 0x10009D8D 0x101F99FA - -#if defined(ARMCC) -DEFFILE ./def/eabi -#elif defined(WINSCW) -DEFFILE ./def/bwinscw -#elif defined(WINS) -DEFFILE ./def/bwins -#elif defined(ARM) -DEFFILE ./def/bmarm -#endif - -SOURCEPATH ../src -SOURCE sconconmlhandler.cpp -SOURCE sconxmlelement.cpp -SOURCE sconconmlgenerator.cpp -SOURCE sconconmldtd.cpp -SOURCE sconxmlworkspace.cpp - -USERINCLUDE ../inc -USERINCLUDE ../../../inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE -SYSTEMINCLUDE /epoc32/include/libc - -LANG SC - -LIBRARY euser.lib -LIBRARY estor.lib -DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmldtd.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmldtd.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,750 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - - -#ifndef __SCONCONMLDTD_H__ -#define __SCONCONMLDTD_H__ - -#include "sconxmlelement.h" - -typedef void *voidPtr_t; -typedef long memSize_t; - -typedef enum - { - SML_PCDATA_UNDEFINED = 0, - SML_PCDATA_STRING, // String type - SML_PCDATA_OPAQUE, // Opaque type - SML_PCDATA_EXTENSION, // Extention type - SML_PCDATA_CDATA // XML CDATA type - } pcdataType_t; - -typedef enum - { - SML_EXT_UNDEFINED = 0, - } pcdataExtension_t; - -// ----------------------------------------------------------------------------- -// GenericListAddL -// ----------------------------------------------------------------------------- -template -void GenericListAddL( T* aList, T aNewItem ) - { - if( *aList == 0 ) - { - *aList = aNewItem; - } - else - { - T c; - for( c = *aList; c->next; c = c->next ) - {}; - c->next = aNewItem; - } - } - -// ----------------------------------------------------------------------------- -// pcdata_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( pcdata_s ) : public CXMLElement - { -public: - pcdataType_t contentType; // The type of data - pcdataExtension_t extension; // PCData Extension type - memSize_t length; // length of the data - voidPtr_t content; // Pointer to the data itself -public: - pcdata_s(); - ~pcdata_s(); - pcdata_s( const pcdataType_t aType, - const pcdataExtension_t aExt = SML_EXT_UNDEFINED ); - void FreeContent(); - void SetDataL( const TDesC8& aData ); - TPtrC8 Data() const; - void TruncateL( TInt aConsumed ); - } *pcdataPtr_t, pcdata_t; - -// ----------------------------------------------------------------------------- -// pcdata_list_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( pcdata_list_s ) : public CBase - { - pcdataPtr_t data; - struct pcdata_list_s *next; - - pcdata_list_s(); - ~pcdata_list_s(); - } *pcdataListPtr_t, pcdataList_t; - -// ----------------------------------------------------------------------------- -// ConML_Param_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Param_s ) : public CXMLElement - { -public: - pcdataPtr_t name; - pcdataPtr_t value; -public: - ConML_Param_s(); - ~ConML_Param_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ParamPtr_t, ConML_Param_t; - -// ----------------------------------------------------------------------------- -// ConML_ParamList_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_ParamList_s ) : public CBase - { -public: - ConML_ParamPtr_t data; - struct ConML_ParamList_s *next; -public: - ConML_ParamList_s(); - ~ConML_ParamList_s(); - }*ConML_ParamListPtr_t, ConML_ParamList_t; - -// ----------------------------------------------------------------------------- -// ConML_InstParams_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_InstParams_s ) : public CXMLElement - { -public: - ConML_ParamListPtr_t param; -public: - ConML_InstParams_s(); - ~ConML_InstParams_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_InstParamsPtr_t, ConML_InstParams_t; - -// ----------------------------------------------------------------------------- -// ConML_Progress_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Progress_s ) : public CXMLElement - { -public: - pcdataPtr_t value; -public: - ConML_Progress_s(); - ~ConML_Progress_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ProgressPtr_t, ConML_Progress_t; - -// ----------------------------------------------------------------------------- -// ConML_Application_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Application_s ) : public CXMLElement - { -public: - pcdataPtr_t name; - pcdataPtr_t uid; -public: - ConML_Application_s(); - ~ConML_Application_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ApplicationPtr_t, ConML_Application_t; - -// ----------------------------------------------------------------------------- -// ConML_ApplicationList_s -// ----------------------------------------------------------------------------- - -typedef NONSHARABLE_STRUCT( ConML_ApplicationList_s ) : public CBase - { -public: - ConML_ApplicationPtr_t data; - struct ConML_ApplicationList_s *next; -public: - ConML_ApplicationList_s(); - ~ConML_ApplicationList_s(); - }*ConML_ApplicationListPtr_t, ConML_ApplicationList_t; - -// ----------------------------------------------------------------------------- -// ConML_Applications_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Applications_s ) : public CXMLElement - { -public: - ConML_ApplicationListPtr_t application; - -public: - ConML_Applications_s(); - ~ConML_Applications_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ApplicationsPtr_t, ConML_Applications_t; - -// ----------------------------------------------------------------------------- -// ConML_Drive_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Drive_s ) : public CXMLElement - { -public: - pcdataPtr_t name; -public: - ConML_Drive_s(); - ~ConML_Drive_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_DrivePtr_t, ConML_Drive_t; - -// ----------------------------------------------------------------------------- -// ConML_DriveList_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_DriveList_s ) : public CBase - { -public: - ConML_DrivePtr_t data; - struct ConML_DriveList_s *next; -public: - ConML_DriveList_s(); - ~ConML_DriveList_s(); - }*ConML_DriveListPtr_t, ConML_DriveList_t; - -// ----------------------------------------------------------------------------- -// ConML_Drives_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Drives_s ) : public CXMLElement - { -public: - ConML_DriveListPtr_t drive; -public: - ConML_Drives_s(); - ~ConML_Drives_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_DrivesPtr_t, ConML_Drives_t; - -// ----------------------------------------------------------------------------- -// ConML_BUROptions_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_BUROptions_s ) : public CXMLElement - { -public: - pcdataPtr_t requiresReboot; - pcdataPtr_t hasFiles; - pcdataPtr_t supportsInc; - pcdataPtr_t delayToPrepareData; -public: - ConML_BUROptions_s(); - ~ConML_BUROptions_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_BUROptionsPtr_t, ConML_BUROptions_t; - -// ----------------------------------------------------------------------------- -// ConML_PackageInfo_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_PackageInfo_s ) : public CXMLElement - { -public: - pcdataPtr_t name; -public: - ConML_PackageInfo_s(); - ~ConML_PackageInfo_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_PackageInfoPtr_t, ConML_PackageInfo_t; - -// ----------------------------------------------------------------------------- -// ConML_SID_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_SID_s ) : public CXMLElement - { -public: - pcdataPtr_t type; - pcdataPtr_t uid; - ConML_DrivesPtr_t drives; - ConML_PackageInfoPtr_t packageInfo; - ConML_BUROptionsPtr_t burOptions; - pcdataPtr_t size; - pcdataPtr_t transferDataType; - pcdataPtr_t data; - pcdataPtr_t moreData; - pcdataPtr_t dataOwnerStatus; - -public: - ConML_SID_s(); - ~ConML_SID_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_SIDPtr_t, ConML_SID_t; - -// ----------------------------------------------------------------------------- -// ConML_SIDList_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_SIDList_s ) : public CBase - { -public: - ConML_SIDPtr_t data; - struct ConML_SIDList_s *next; -public: - ConML_SIDList_s(); - ~ConML_SIDList_s(); - }*ConML_SIDListPtr_t, ConML_SIDList_t; - -// ----------------------------------------------------------------------------- -// ConML_SupportedMethods_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_SupportedMethods_s ) : public CXMLElement - { -public: - pcdataPtr_t install; - pcdataPtr_t unInstall; - pcdataPtr_t setInstParams; - pcdataPtr_t listInstalledApps; - pcdataPtr_t listDataOwners; - pcdataPtr_t setBurMode; - pcdataPtr_t getDataSize; - pcdataPtr_t requestData; - pcdataPtr_t supplyData; - pcdataPtr_t reboot; -public: - ConML_SupportedMethods_s(); - ~ConML_SupportedMethods_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_SupportedMethodsPtr_t, ConML_SupportedMethods_t; - -// ----------------------------------------------------------------------------- -// ConML_DeviceInfo_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_DeviceInfo_s ) : public CXMLElement - { -public: - pcdataPtr_t version; - ConML_SupportedMethodsPtr_t supportedMethods; - pcdataPtr_t maxObjectSize; -public: - ConML_DeviceInfo_s(); - ~ConML_DeviceInfo_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_DeviceInfoPtr_t, ConML_DeviceInfo_t; - -// ----------------------------------------------------------------------------- -// ConML_File_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_File_s ) : public CXMLElement - { -public: - pcdataPtr_t name; - pcdataPtr_t modified; - pcdataPtr_t size; - pcdataPtr_t userPerm; -public: - ConML_File_s(); - ~ConML_File_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_FilePtr_t, ConML_File_t; - -// ----------------------------------------------------------------------------- -// ConML_FileList_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_FileList_s ) : public CBase - { -public: - ConML_FilePtr_t data; - struct ConML_FileList_s *next; -public: - ConML_FileList_s(); - ~ConML_FileList_s(); - }*ConML_FileListPtr_t, ConML_FileList_t; - -// ----------------------------------------------------------------------------- -// ConML_Files_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Files_s ) : public CXMLElement - { -public: - ConML_FileListPtr_t file; -public: - ConML_Files_s(); - ~ConML_Files_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_FilesPtr_t, ConML_Files_t; - -// ----------------------------------------------------------------------------- -// ConML_DataOwners_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_DataOwners_s ) : public CXMLElement - { -public: - ConML_SIDListPtr_t sid; -public: - ConML_DataOwners_s(); - ~ConML_DataOwners_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_DataOwnersPtr_t, ConML_DataOwners_t; - -// ----------------------------------------------------------------------------- -// ConML_Results_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Results_s ) : public CXMLElement - { -public: - pcdataPtr_t complete; - ConML_ProgressPtr_t progress; - ConML_ApplicationsPtr_t applications; - ConML_DataOwnersPtr_t dataOwners; - pcdataPtr_t filename; - pcdataPtr_t moreData; - pcdataPtr_t data; - ConML_DeviceInfoPtr_t deviceInfo; - ConML_FilesPtr_t files; -public: - ConML_Results_s(); - ~ConML_Results_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ResultsPtr_t, ConML_Results_t; - -// ----------------------------------------------------------------------------- -// ConML_Install_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Install_s ) : public CXMLElement - { -public: - pcdataPtr_t name; - ConML_InstParamsPtr_t instParams; - ConML_ResultsPtr_t results; -public: - ConML_Install_s(); - ~ConML_Install_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_InstallPtr_t, ConML_Install_t; - -// ----------------------------------------------------------------------------- -// ConML_UnInstall_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_UnInstall_s ) : public CXMLElement - { -public: - ConML_ApplicationsPtr_t applications; - ConML_InstParamsPtr_t instParams; - ConML_ResultsPtr_t results; -public: - ConML_UnInstall_s(); - ~ConML_UnInstall_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_UnInstallPtr_t, ConML_UnInstall_t; - -// ----------------------------------------------------------------------------- -// ConML_ListInstalledApps_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_ListInstalledApps_s ) : public CXMLElement - { -public: - ConML_DrivesPtr_t drives; - pcdataPtr_t all; - ConML_ResultsPtr_t results; -public: - ConML_ListInstalledApps_s(); - ~ConML_ListInstalledApps_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ListInstalledAppsPtr_t, ConML_ListInstalledApps_t; - -// ----------------------------------------------------------------------------- -// ConML_ListDataOwners_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_ListDataOwners_s ) : public CXMLElement - { -public: - ConML_ResultsPtr_t results; -public: - ConML_ListDataOwners_s(); - ~ConML_ListDataOwners_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ListDataOwnersPtr_t, ConML_ListDataOwners_t; - -// ----------------------------------------------------------------------------- -// ConML_SetBURMode_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_SetBURMode_s ) : public CXMLElement - { -public: - ConML_DrivesPtr_t drives; - pcdataPtr_t partialType; - pcdataPtr_t incType; - ConML_ResultsPtr_t results; -public: - ConML_SetBURMode_s(); - ~ConML_SetBURMode_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_SetBURModePtr_t, ConML_SetBURMode_t; - -// ----------------------------------------------------------------------------- -// ConML_GetDataSize_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_GetDataSize_s ) : public CXMLElement - { -public: - ConML_DataOwnersPtr_t dataOwners; - ConML_ResultsPtr_t results; -public: - ConML_GetDataSize_s(); - ~ConML_GetDataSize_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_GetDataSizePtr_t, ConML_GetDataSize_t; - -// ----------------------------------------------------------------------------- -// ConML_RequestData_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_RequestData_s ) : public CXMLElement - { -public: - ConML_SIDListPtr_t sid; - ConML_ResultsPtr_t results; -public: - ConML_RequestData_s(); - ~ConML_RequestData_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_RequestDataPtr_t, ConML_RequestData_t; - -// ----------------------------------------------------------------------------- -// ConML_UpdateDeviceInfo_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_UpdateDeviceInfo_s ) : public CXMLElement - { -public: - ConML_DeviceInfoPtr_t deviceInfo; - ConML_ResultsPtr_t results; -public: - ConML_UpdateDeviceInfo_s(); - ~ConML_UpdateDeviceInfo_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_UpdateDeviceInfoPtr_t, ConML_UpdateDeviceInfo_t; - -// ----------------------------------------------------------------------------- -// ConML_ListPublicFiles_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_ListPublicFiles_s ) : public CXMLElement - { -public: - ConML_ResultsPtr_t results; - ConML_SIDListPtr_t sid; -public: - ConML_ListPublicFiles_s(); - ~ConML_ListPublicFiles_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ListPublicFilesPtr_t, ConML_ListPublicFiles_t; - -// ----------------------------------------------------------------------------- -// ConML_SupplyData_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_SupplyData_s ) : public CXMLElement - { -public: - ConML_SIDListPtr_t sid; - ConML_ResultsPtr_t results; -public: - ConML_SupplyData_s(); - ~ConML_SupplyData_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_SupplyDataPtr_t, ConML_SupplyData_t; - -// ----------------------------------------------------------------------------- -// ConML_GetDataOwnerStatus_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_GetDataOwnerStatus_s ) : public CXMLElement - { -public: - ConML_DataOwnersPtr_t dataOwners; - ConML_ResultsPtr_t results; -public: - ConML_GetDataOwnerStatus_s(); - ~ConML_GetDataOwnerStatus_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_GetDataOwnerStatusPtr_t, ConML_GetDataOwnerStatus_t; - -// ----------------------------------------------------------------------------- -// ConML_GetMetadata_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_GetMetadata_s ) : public CXMLElement - { -public: - pcdataPtr_t filename; - ConML_ResultsPtr_t results; -public: - ConML_GetMetadata_s(); - ~ConML_GetMetadata_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_GetMetadataPtr_t, ConML_GetMetadata_t; - -// ----------------------------------------------------------------------------- -// ConML_Execute_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Execute_s ) : public CXMLElement - { -public: - pcdataPtr_t id; - ConML_InstallPtr_t install; - ConML_UnInstallPtr_t unInstall; - ConML_ListInstalledAppsPtr_t listInstalledApps; - ConML_ListDataOwnersPtr_t listDataOwners; - ConML_SetBURModePtr_t setBurMode; - ConML_GetDataSizePtr_t getDataSize; - ConML_RequestDataPtr_t requestData; - ConML_UpdateDeviceInfoPtr_t updateDeviceInfo; - ConML_ListPublicFilesPtr_t listPublicFiles; - ConML_SupplyDataPtr_t supplyData; - pcdataPtr_t reboot; - ConML_GetDataOwnerStatusPtr_t getDataOwnerStatus; - ConML_GetMetadataPtr_t getMetadata; -public: - ConML_Execute_s(); - ~ConML_Execute_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_ExecutePtr_t, ConML_Execute_t; - -// ----------------------------------------------------------------------------- -// ConML_GetStatus_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_GetStatus_s ) : public CXMLElement - { -public: - pcdataPtr_t id; - pcdataPtr_t all; -public: - ConML_GetStatus_s(); - ~ConML_GetStatus_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_GetStatusPtr_t, ConML_GetStatus_t; - -// ----------------------------------------------------------------------------- -// ConML_Cancel_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Cancel_s ) : public CXMLElement - { -public: - pcdataPtr_t id; - pcdataPtr_t all; -public: - ConML_Cancel_s(); - ~ConML_Cancel_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_CancelPtr_t, ConML_Cancel_t; - -// ----------------------------------------------------------------------------- -// ConML_Reboot_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Reboot_s ) : public CXMLElement - { -public: - ConML_ResultsPtr_t results; -public: - ConML_Reboot_s(); - ~ConML_Reboot_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_RebootPtr_t, ConML_Reboot_t; - -// ----------------------------------------------------------------------------- -// ConML_Task_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Task_s ) : public CXMLElement - { -public: - pcdataPtr_t id; - ConML_InstallPtr_t install; - ConML_UnInstallPtr_t unInstall; - ConML_ListInstalledAppsPtr_t listInstalledApps; - ConML_ListDataOwnersPtr_t listDataOwners; - ConML_SetBURModePtr_t setBurMode; - ConML_GetDataSizePtr_t getDataSize; - ConML_RequestDataPtr_t requestData; - ConML_UpdateDeviceInfoPtr_t updateDeviceInfo; - ConML_ListPublicFilesPtr_t listPublicFiles; - ConML_GetDataOwnerStatusPtr_t getDataOwnerStatus; - ConML_SupplyDataPtr_t supplyData; - ConML_RebootPtr_t reboot; - ConML_GetMetadataPtr_t getMetadata; -public: - ConML_Task_s(); - ~ConML_Task_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_TaskPtr_t, ConML_Task_t; - -// ----------------------------------------------------------------------------- -// ConML_TaskList_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_TaskList_s ) : public CBase - { -public: - ConML_TaskPtr_t data; - struct ConML_TaskList_s *next; -public: - ConML_TaskList_s(); - ~ConML_TaskList_s(); - }*ConML_TaskListPtr_t, ConML_TaskList_t; - -// ----------------------------------------------------------------------------- -// ConML_Status_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_Status_s ) : public CXMLElement - { -public: - ConML_TaskListPtr_t task; -public: - ConML_Status_s(); - ~ConML_Status_s(); - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - }*ConML_StatusPtr_t, ConML_Status_t; - -// ----------------------------------------------------------------------------- -// ConML_ConML_s -// ----------------------------------------------------------------------------- -typedef NONSHARABLE_STRUCT( ConML_ConML_s ) : public CXMLElement - { -public: - ConML_ExecutePtr_t execute; - ConML_GetStatusPtr_t getStatus; - ConML_CancelPtr_t cancel; - ConML_StatusPtr_t status; - -public: - ConML_ConML_s(); - ~ConML_ConML_s(); - TBool NeedsCleanup() const; - CXMLElement* BeginElementL - ( TUint8 aTag, const TXMLElementParams& aParams = TXMLElementParams() ); - CXMLElement::TAction EndElementL( TAny* aCallbacks, TUint8 aTag ); - } *ConML_ConMLPtr_t, ConML_ConML_t; - -#endif // __SCONCONMLDTD_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmlgenerator.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmlgenerator.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - - -#ifndef __SCONCONMLGENERATOR_H__ -#define __SCONCONMLGENERATOR_H__ - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include "sconxmlelement.h" -#include "sconconmldtd.h" -#include "sconconmltags.h" -#include "sconwbxmldefs.h" -#include "sconxmlworkspace.h" - -// ----------------------------------------------------------------------------- -// MWBXMLConMLCallback - Call back for parsed data -// ----------------------------------------------------------------------------- -class MWBXMLConMLCallback - { -public: - /** - * Call back function for delivering the parsed data - * @param aContent contains the parsed data - * @return none - */ - - virtual void ConMLL( ConML_ConMLPtr_t aContent ) = 0; - }; - -// ----------------------------------------------------------------------------- -// TWBXMLContentFormat -// ----------------------------------------------------------------------------- -enum TWBXMLContentFormat - { - EWBXMLContentFormatOpaque, - EWBXMLContentFormatInlineString - }; - -// ----------------------------------------------------------------------------- -// CSConConMLGenerator - Generates XBXML and XML documents -// ----------------------------------------------------------------------------- -NONSHARABLE_CLASS( CSConConMLGenerator ) : public CBase - { -public: - - static CSConConMLGenerator* NewL(); - ~CSConConMLGenerator(); - - /** - * Returns the generated WBXML document - * @param none - * @return the document as TPtrC8 - */ - TPtrC8 WBXMLDocument(); - - /** - * Returns the generated XML document - * @param none - * @return the document as TPtrC8 - */ - TPtrC8 XMLDocument(); - - - // WBXML Parser - - /** - * Sets the callback function to call after parsing - * @param aCallback callback function to call when parsing finished - * @return none - */ - void SetCallback ( MWBXMLConMLCallback* aCallbakc ); - - /** - * Starts the document after header has been parsed - * @param aVersion - version of WBXML document - * @param aPublicId - public ID of WBXML document as known public ID - * @param aCharset - Character set of WBXML document - * @return none - */ - void StartDocument( TUint8 aVersion, TInt32 aPublicId, TUint32 aCharset ); - - /** - * Starts the document after header has been parsed - * @param aVersion - version of WBXML document - * @param aPublicIdStr - public ID of WBXML document as a inline string - * @param aCharset - Character set of WBXML document - * @return none - */ - void StartDocument( - TUint8 aVersion, const TDesC8& aPublicIdStr, TUint32 aCharset ); - - /** - * Starts a new element in the document - * @param aTag - Tag of the element - * @return none - */ - void StartElementL( TWBXMLTag aTag ); - - /** - * Starts a character data in the document - * @param aBuffer - Character data - * @return none - */ - void CharactersL( const TDesC8& aBuffer ); - - /** - * Document has been parsed - the end of document - * @param none - * @return none - */ - void EndDocument(); - - /** - * End tag of an element has been found - * @param aTag - tag of the element to be closed - * @return none - */ - void EndElementL( TWBXMLTag aTag ); - - // Generator - - /** - * Starts the generation of a document - * @param aContent - data for the document - * @return none - */ - TInt GenerateConMLDocument ( ConML_ConMLPtr_t aContent ); - -private: - - // WBXML Generator - void WriteMUint32L( TUint32 aValue ); - void WriteOpaqueDataL( const TDesC8& aData ); - void WriteInlineStringL( const TDesC8& aData ); - - // XML Generator - void IndentL(); - TPtrC8 TranslateElement( TUint8 aElement ); - - // WBXML / XML Generator - void BeginDocumentL( TUint8 aVersion, TInt32 aPublicId, TUint32 aCharset, - const TDesC8& aStringTbl = TPtrC8() ); - void BeginElementL( TUint8 aElement, TBool aHasContent = EFalse, - TBool aHasAttributes = EFalse ); - void EndElementL(); - void AddElementL( - TUint8 aElement, const TDesC8& aContent, - const TWBXMLContentFormat aFormat = EWBXMLContentFormatOpaque ); - void AppendPCDataL( TUint8 aElement, pcdataPtr_t aContent ); - void AppendConMLL( ConML_ConMLPtr_t aContent ); - void AppendExecuteL( ConML_ExecutePtr_t aContent ); - void AppendSupplyDataL( ConML_SupplyDataPtr_t aContent ); - void AppendInstallL( ConML_InstallPtr_t aContent ); - void AppendCancelL ( ConML_CancelPtr_t aContent ); - void AppendStatusL ( ConML_StatusPtr_t aContent ); - void AppendGetStatusL( ConML_GetStatusPtr_t aContent ); - void AppendRebootL( ConML_RebootPtr_t aContent ); - void AppendTaskL( ConML_TaskPtr_t aContent ); - void AppendTaskListL( ConML_TaskListPtr_t aContent ); - void AppendUnInstallL( ConML_UnInstallPtr_t aContent ); - void AppendListInstalledAppsL ( ConML_ListInstalledAppsPtr_t aContent ); - void AppendListDataOwnersL ( ConML_ListDataOwnersPtr_t aContent ); - void AppendBUROptionsL( ConML_BUROptionsPtr_t aContent ); - void AppendSetBURModeL( ConML_SetBURModePtr_t aContent ); - void AppendGetDataSizeL( ConML_GetDataSizePtr_t aContent ); - void AppendRequestDataL( ConML_RequestDataPtr_t aContent ); - void AppendUpdateDeviceInfoL( ConML_UpdateDeviceInfoPtr_t aContent ); - void AppendListPublicFilesL( ConML_ListPublicFilesPtr_t aContent ); - void AppendApplicationL( ConML_ApplicationPtr_t aContent ); - void AppendApplicationListL( ConML_ApplicationListPtr_t aContent ); - void AppendApplicationsL( ConML_ApplicationsPtr_t aContent ); - void AppendParamL( ConML_ParamPtr_t aContent ); - void AppendParamListL( ConML_ParamListPtr_t aContent ); - void AppendInstParamsL( ConML_InstParamsPtr_t aContent ); - void AppendProgressL( ConML_ProgressPtr_t aContent ); - void AppendResultsL( ConML_ResultsPtr_t aContent ); - void AppendDriveL( ConML_DrivePtr_t aContent ); - void AppendDriveListL( ConML_DriveListPtr_t aContent ); - void AppendDrivesL( ConML_DrivesPtr_t aContent ); - void AppendDataOwnersL( ConML_DataOwnersPtr_t aContent ); - void AppendPackageInfoL ( ConML_PackageInfoPtr_t aContent ); - void AppendSIDL( ConML_SIDPtr_t aContent ); - void AppendSIDListL( ConML_SIDListPtr_t aContent ); - void AppendDeviceInfoL( ConML_DeviceInfoPtr_t aContent ); - void AppendFilesL( ConML_FilesPtr_t aContent ); - void AppendSupportedMethodsL( ConML_SupportedMethodsPtr_t aContent ); - void AppendFileListL( ConML_FileListPtr_t aContent ); - void AppendFileL( ConML_FilePtr_t aContent ); - void AppendGetDataOwnerStatusL( ConML_GetDataOwnerStatusPtr_t aContent ); - void AppendGetMetadataL( ConML_GetMetadataPtr_t aContent ); - - TInt HandleResult( TInt aResult, TInt aTreshold = 0 ); - -private: - void ConstructL(); - CSConConMLGenerator(); - void AddElement( CXMLElement* aElement ); - -private: - // Parser - CXMLStack* iCmdStack; - CXMLStack* iCleanupStack; - MWBXMLConMLCallback* iCallback; - - // Generator workspaces - CXMLWorkspace* iWBXMLWorkspace; - CXMLWorkspace* iXMLWorkspace; - - // XML - RArray iElemStack; - TInt iInitialIndentLevel; - TBool iDontNewLine; - TBool iDontIndent; - }; - -#endif // __SCONCONMLGENERATOR_H__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmlhandler.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmlhandler.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - - -#ifndef _SCONCONMLHANDLER_H -#define _SCONCONMLHANDLER_H - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include "sconconmlgenerator.h" -#include "sconwbxmldefs.h" -#include "sconconmlhandlererror.h" -#include "sconconmldtd.h" - -// ----------------------------------------------------------------------------- -// Definitions and constants -// ----------------------------------------------------------------------------- - -_LIT8(KWBXMLNull, "\x00"); - -const TInt KSConBufferGranularity( 32 ); -const TInt KSConDefaultDocumentSize( 2048 ); - -// ----------------------------------------------------------------------------- -// TWBXMLStackItem -// ----------------------------------------------------------------------------- -NONSHARABLE_STRUCT( TWBXMLStackItem ) - { -public: - inline TWBXMLStackItem( TUint8 aTag ); - inline TUint8 Tag() const; - -private: - TUint8 iTag; - }; - -#include "sconwbxmlparser.inl" - -// ----------------------------------------------------------------------------- -// CSConConMLHandler - WBXML parsing -// ----------------------------------------------------------------------------- -class CSConConMLHandler : public CBase - { -public: - static CSConConMLHandler* NewL(); - ~CSConConMLHandler(); - - /** - * Starts the parsing of a WBXML document - * @param aInput - the WBXML document to be parsed - * @param aCallback - Call back function to call - * after the document is parsed - * @return An error code - */ - virtual TInt ParseDocumentL( CBufFlat& aInput, - MWBXMLConMLCallback* aCallback ); - - /** - * Starts the generating of a WBXML and XML document - * @param aContent - the data to be generated into the document - * @return An error code - */ - virtual TInt GenerateDocument( ConML_ConMLPtr_t aContent ); - - /** - * Returns the generated document in XML -format - * @param none - * @return The document as TPtrC8 - */ - virtual TPtrC8 XMLDocument(); - - /** - * Returns the generated document in WBXML -format - * @param none - * @return The document as TPtrC8 - */ - virtual TPtrC8 WBXMLDocument(); - -private: - CSConConMLHandler(); - void ConstructL(); - - TInt ParseL(); - TConMLParserError DoParseDocumentHeaderL(); - TConMLParserError DoParseDocumentBodyL(); - TUint8 ReadUint8L(); - TUint32 ReadMUint32L(); - TPtrC8 ReadStrIL(); - TPtrC8 StringTableString( TUint32 aIndex ); - void ReadStringTableL(); - TPtrC8 ReadOpaqueL(); - void HandleElementL( TUint8 aId ); - -private: - CSConConMLGenerator* iGenerator; - HBufC8* iStringTable; - CBufBase* iBuffer; - TBool iHeaderParsed; - RArray< TUint > iElemStack; - TInt iPos; - CBufFlat* iParseBuffer; - MWBXMLConMLCallback* iCallback; - }; - - IMPORT_C CSConConMLHandler* CreateCSConConMLHandlerL(); - typedef CSConConMLHandler* (*TSConCreateCSConConMLHandlerFunc) (); - -#endif diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmlhandlererror.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmlhandlererror.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -#ifndef __SCONCONMLHANDLERERROR_H__ -#define __SCONCONMLHANDLERERROR_H__ - -// ----------------------------------------------------------------------------- -// Parser error base -// ----------------------------------------------------------------------------- - -#define PERRBASE 0x2000 - -enum TConMLParserError - { - KWBXMLParserErrorOk = 0, - KWBXMLParserErrorEof = PERRBASE, - KWBXMLParserErrorEofTooEarly, - KWBXMLParserErrorInvalidTag, - KWBXMLParserErrorWrongWBXMLVersion, - KWBXMLParserErrorWrongPublicId, - KWBXMLParserErrorinvalidDocument - }; - -#define GERRBASE 0x3000 - -enum TWBXMLGeneratorError - { - KWBXMLGeneratorOk = 0, - KWBXMLGeneratorBufferFull = GERRBASE - }; - -#endif // __SCONCONMLHANDLERERROR_H__ \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmltags.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconconmltags.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - - - -#ifndef __SCONCONMLTAGS_H__ -#define __SCONCONMLTAGS_H__ - -// ----------------------------------------------------------------------------- -// Constants -// ----------------------------------------------------------------------------- -const TInt32 KSConConMLPublicId = 0x8F; -const TUint8 KSConConMLVersion = 0x02; -const TUint32 KSConConMLUTF8 = 0x6a; - -_LIT8(KSConConMLPublicIdStr, "-//CONML//DTD ConML 1.0//EN"); - -// ----------------------------------------------------------------------------- -// TConMLTags -// ----------------------------------------------------------------------------- -enum TConMLTags - { - EConMLAll = 5, - EConMLApplication, - EConMLApplications, - EConMLBUROptions, - EConMLCancel, - EConMLComplete, - EConML, - EConMLData, - EConMLDataOwners, - EConMLDataOwnerStatus, - EConMLDelayToPrepareData, - EConMLDeviceInfo, - EConMLDrive, - EConMLDrives, - EConMLExecute, - EConMLFile, - EConMLFiles, - EConMLGetDataOwnerStatus, - EConMLGetDataSize, - EConMLGetStatus, - EConMLHasFiles, - EConMLID, - EConMLIncType, - EConMLInstall, - EConMLInstParams, - EConMLListDataOwners, - EConMLListInstalledApps, - EConMLListPublicFiles, - EConMLMaxObjectSize, - EConMLModified, - EConMLMoreData, - EConMLName, - EConMLPackageInfo, - EConMLParam, - EConMLPartialType, - EConMLProgress, - EConMLReboot, - EConMLRequestData, - EConMLRequiresReboot, - EConMLResults, - EConMLSetBURMode, - EConMLSetInstParams, - EConMLSID, - EConMLSize, - EConMLStatus, - EConMLSupplyData, - EConMLSupportedMethods, - EConMLSupportsInc, - EConMLTask, - EConMLTransferDataType, - EConMLType, - EConMLUID, - EConMLUnInstall, - EConMLUpdateDeviceInfo, - EConMLUserPerm, - EConMLValue, - EConMLVersion, - EConMLGetMetadata, - EConMLFilename - }; -// ----------------------------------------------------------------------------- -_LIT8( KConMLElements, - "<0>|<1>|<2>|<3>|<4>|All|Application|Applications|BUROptions|Cancel" - "|Complete|ConML|Data|DataOwners|DataOwnerStatus|DelayToPrepareData" - "|DeviceInfo|Drive|Drives|Execute|File|Files|GetDataOwnerStatus" - "|GetDataSize|GetStatus|HasFiles|ID|IncType|Install|InstParams" - "|ListDataOwners|ListInstalledApps|ListPublicFiles|MaxObjectSize|" - "Modified|MoreData|Name|PackageInfo|Param|PartialType|Progress|" - "Reboot|RequestData|RequiresReboot|Results|SetBURMode|SetInstParams|SID|" - "Size|Status|SupplyData|SupportedMethods|SupportsInc|Task|" - "TransferDataType|Type|UID|UnInstall|UpdateDeviceInfo|UserPerm|" - "Value|Version|GetMetadata|Filename" ); - -_LIT8(KXMLTagStart, "<"); -_LIT8(KXMLTagStartEndTag, ""); -_LIT8(KXMLTagEnd, ">"); -_LIT8(KXMLElemenentSeparator, "|"); -_LIT8(KXMLNamespaceBegin, " xmlns='"); -_LIT8(KXMLNamespaceEnd, "'"); -_LIT8(KXMLIndent, " "); -_LIT8(KXMLNewLine, "\r\n"); - -#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconwbxmldefs.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconwbxmldefs.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -#ifndef __SCONWBXMLDEFS_H__ -#define __SCONWBXMLDEFS_H__ - -// ----------------------------------------------------------------------------- -// Typedefs -// ----------------------------------------------------------------------------- -typedef TUint8 TWBXMLTag; - -// ----------------------------------------------------------------------------- -// Constants -// ----------------------------------------------------------------------------- -const TWBXMLTag SWITCH_PAGE = 0; -const TWBXMLTag END = 1; -const TWBXMLTag ENTITY = 2; -const TWBXMLTag STR_I = 3; -const TWBXMLTag LITERAL = 4; -const TWBXMLTag OPAQUE = 0xc3; - -const TUint8 KWBXMLHasAttributes = (1<<7); -const TUint8 KWBXMLHasContent = (1<<6); - - -#endif // __SCONWBXMLDEFS_H__ \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconwbxmlparser.inl --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconwbxmlparser.inl Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 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: ConML parser/generator -* -*/ - - -#ifndef __SCONWBXMLPARSER_INL__ -#define __SCONWBXMLPARSER_INL__ - - -inline TWBXMLStackItem::TWBXMLStackItem( TUint8 aTag ) : iTag(aTag) - { - } - -inline TUint8 TWBXMLStackItem::Tag() const - { - return iTag; - } - -#endif // __SCONWBXMLPARSER_INL__ diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlelement.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlelement.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - - -#ifndef __SCONXMLELEMENT_H__ -#define __SCONXMLELEMENT_H__ - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- - -#include -#include "sconxmlstack.h" - -// ----------------------------------------------------------------------------- -// Class forwards -// ----------------------------------------------------------------------------- -class MWBXMLConMLCallback; -struct TXMLElementParams; - -// ----------------------------------------------------------------------------- -// CXMLElement - Base class for XML -elements -// ----------------------------------------------------------------------------- -NONSHARABLE_CLASS( CXMLElement ) : public CBase - { -public: - enum TAction - { - ENone, - EPop, - EPopAndDestroy // Pop from stack, callback, delete - }; - - /** - * Sets the data of an element - * @param aData - Data of the element - * @return none - */ - virtual void SetDataL( const TDesC8& aData ); - - /** - * Returns data of an element - * @param none - * @return Data of the element as TPtrC8 - */ - virtual TPtrC8 Data() const; - - /** - * Validates an element's instance - * @param none - * @return ETrue if element current instance is valid, - * EFalse if not - */ - virtual TBool Validate(); - - /** - * Checks if instance needs cleanup - * @param none - * @return ETrue if instance pushed into - * parser's cleanupstack , EFalse if not - */ - virtual TBool NeedsCleanup() const; - - /** - * Offers a new element to this element - * @param aTag - tag of the element to be started - * @param aParams - Element parameters - * @return new Element instance as CXMLElement - */ - virtual CXMLElement* BeginElementL( - TUint8 aTag, const TXMLElementParams& aParams ); - - /** - * Offers a new element to this element - * @param aTag - tag of the element to be started - * @param aParams - Element parameters - * @return new Element instance as CXMLElement - */ - virtual TAction EndElementL( TAny* aCallbacks, TUint8 aTag ); - }; - -// ----------------------------------------------------------------------------- -// TElementParams -// ----------------------------------------------------------------------------- -NONSHARABLE_STRUCT( TXMLElementParams ) - { -public: - inline TXMLElementParams(); - TXMLElementParams( - TAny* aCallbacks, - CXMLStack* aCmdStack = 0, - CXMLStack* aCleanupStack = 0 ); - - /** - * Returns the call back function of parameters - * @param nonoe - * @return call back function as TAny - */ - inline TAny* Callbacks() const; - - /** - * Returns the command stack of the parameters - * @param none - * @return command stack as CXMLStack - */ - inline CXMLStack* CmdStack() const; - - /** - * Returns the clean up stack of the parameters - * @param none - * @return clean up stack as CXMLStack - */ - inline CXMLStack* CleanupStack() const; - -private: - TAny* iCallbacks; - CXMLStack* iCmdStack; - CXMLStack* iCleanupStack; - }; - -#include "sconxmlelement.inl" - -#endif // __SCONXMLELEMENT_H__ \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlelement.inl --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlelement.inl Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -#ifndef __SCONXMLELEMENT_INL__ -#define __SCONXMLELEMENT_INL__ - -// ------------------------------------------------------------------------------------------------ -inline TXMLElementParams::TXMLElementParams() : iCallbacks(0), iCmdStack(0), iCleanupStack(0) - { - } - -// ------------------------------------------------------------------------------------------------ -inline TAny* TXMLElementParams::Callbacks() const - { - return iCallbacks; - } - -// ------------------------------------------------------------------------------------------------ -inline CXMLStack* TXMLElementParams::CmdStack() const - { - return iCmdStack; - } - -// ------------------------------------------------------------------------------------------------ -inline CXMLStack* TXMLElementParams::CleanupStack() const - { - return iCleanupStack; - } - -#endif // __SCONXMLELEMENT_INL__ \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlstack.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlstack.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -#ifndef __SCONXMLSTACK_H__ -#define __SCONXMLSTACK_H__ - -// ----------------------------------------------------------------------------- -// CNSmlStack - Stack for WBXML / XML elements -// ---------------------------------------------------------------------------- - -template -class CXMLStack : public CBase - { -public: - static inline CXMLStack* NewL(); - inline ~CXMLStack(); - - /** - * Removes latest item from the stack - * @param none - * @return none - */ - inline T* Pop(); - - /** - * Return the latest item from the stack - * @param none - * @return the item - */ - inline T* Top(); - - /** - * Adds an item to the stack - * @param none - * @return none - */ - inline void Push( T* aItem ); - - /** - * Returns the number of items in the stack - * @param none - * @return number of items as TInt - */ - inline TInt Count(); - - /** - * Resets the stack - * @param none - * @return none - */ - inline void Reset(); - - /** - * Resets and destroys the stack - * @param none - * @return none - */ - inline void ResetAndDestroy(); - - -protected: - inline CXMLStack(); - -private: - RPointerArray* iStack; - }; - -#include "sconxmlstack.inl" - -#endif // __SCONXMLSTACK_H__ \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlstack.inl --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlstack.inl Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -#ifndef __SCONXMLSTACK_INL__ -#define __SCONXMLSTACK_INL__ - - -// ------------------------------------------------------------------------------------------------ -// CXMLStack -// ------------------------------------------------------------------------------------------------ -template -inline CXMLStack::CXMLStack() - { - } - -// ------------------------------------------------------------------------------------------------ -template -inline CXMLStack::~CXMLStack() - { - iStack->ResetAndDestroy(); - delete iStack; - } - -// ------------------------------------------------------------------------------------------------ -template -inline CXMLStack* CXMLStack::NewL() - { - CXMLStack* self = new (ELeave) CXMLStack(); - CleanupStack::PushL(self); - self->iStack = new (ELeave) RPointerArray(); - CleanupStack::Pop(); // self - return self; - } - -// ------------------------------------------------------------------------------------------------ -template -inline T* CXMLStack::Pop() - { - T* temp = iStack->operator[](iStack->Count() - 1); - iStack->Remove(iStack->Count() - 1); - return temp; - } - -// ------------------------------------------------------------------------------------------------ -template -inline T* CXMLStack::Top() - { - if( Count() > 0 ) - { - return iStack->operator[](iStack->Count() - 1); - } - return 0; - } - -// ------------------------------------------------------------------------------------------------ -template -inline void CXMLStack::Push( T* aItem ) - { - iStack->Append(aItem); - } - -// ------------------------------------------------------------------------------------------------ -template -inline TInt CXMLStack::Count() - { - return iStack->Count(); - } - -// ------------------------------------------------------------------------------------------------ -template -inline void CXMLStack::Reset() - { - iStack->Reset(); - } - -// ------------------------------------------------------------------------------------------------ -template -inline void CXMLStack::ResetAndDestroy() - { - iStack->ResetAndDestroy(); - } - -#endif // __SCONXMLSTACK_INL__ - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlworkspace.h --- a/connectivitymodules/SeCon/wbxml/conmlhandler/inc/sconxmlworkspace.h Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -#ifndef __SCONXMLWORKSPACE_H__ -#define __SCONXMLWORKSPACE_H__ - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include - -// ----------------------------------------------------------------------------- -// CXMLWorkspace - workspace for WBXML / XML -documents -// ----------------------------------------------------------------------------- -class CXMLWorkspace : public CBase - { -public: - ~CXMLWorkspace(); - static CXMLWorkspace* NewL(); - - // transaction handling - /** - * Function to Begin transaction - * @param none - * @return none - */ - void BeginTransaction(); - - /** - * Commits the transactions done - * @param none - * @return none - */ - void CommitAll(); - - /** - * Commits the latest transacion done - * @param none - * @return KErrNone or an error code - */ - TInt Commit(); - - /** - * Deletes the latest transacion done - * @param none - * @return KErrNone or an error code - */ - TInt Rollback(); - - /** - * Resets the buffer - * @param none - * @return KErrNone or an error code - */ - void Reset(); - - /** - * Writes to the buffer - * @param none - * @return none - */ - void WriteL( const TDesC8& aData ); - void WriteL( const TUint8 aData ); - - /** - * Returns the buffer - * @param none - * @return the buffer - */ - TPtrC8 Buffer(); - - /** - * Returns the free space left in the buffer - * @param none - * @return free space of the buffer - */ - TInt FreeSize(); - - /** - * Returns the maximum size of the buffer - * @param none - * @return Buffer maximum size - */ - TInt MaxSize(); - - /** - * Returns the size of the buffer space used - * @param none - * @return Size of the buffer used - */ - TInt Size(); - -protected: - void ConstructL(); - -private: - void Delete( TInt aPos, TInt aLength ); - CXMLWorkspace(); -private: - CBufFlat* iBuffer; - RArray* iTransactions; - }; - -#endif // __SCONXMLWORKSPACE_H__ - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmldtd.cpp --- a/connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmldtd.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1783 +0,0 @@ -/* -* Copyright (c) 2005-2008 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: ConML parser/generator -* -*/ - - -#include "sconconmldtd.h" -#include "sconconmltags.h" -#include "sconconmlhandler.h" -#include "sconconmlhandlererror.h" -#include "debug.h" - -// ----------------------------------------------------------------------------- -// Macros -// ----------------------------------------------------------------------------- -#define CHECK_NO_DUPLICATE(a) if( a ) { User::Leave( KWBXMLParserErrorinvalidDocument ); } - -// ----------------------------------------------------------------------------- -// pcdata_s -// ----------------------------------------------------------------------------- -pcdata_s::pcdata_s( const pcdataType_t aType, const pcdataExtension_t aExt ) - : contentType(aType), extension(aExt) - { - } - -pcdata_s::pcdata_s() : contentType(SML_PCDATA_OPAQUE), - extension(SML_EXT_UNDEFINED) - { - } - -pcdata_s::~pcdata_s() - { - FreeContent(); - } - -void pcdata_s::FreeContent() - { - User::Free(content); - content = 0; - } - -void pcdata_s::SetDataL( const TDesC8& aData ) - { - FreeContent(); - length = aData.Length(); - content = User::AllocL(length); - Mem::Copy(content, aData.Ptr(), length); - } - -TPtrC8 pcdata_s::Data() const - { - return TPtrC8((TUint8*)content, length); - } - -void pcdata_s::TruncateL( TInt aConsumed ) - { - HBufC8* buffer = TPtrC8((TUint8*)content + aConsumed, - length - aConsumed).AllocLC(); - SetDataL(*buffer); - CleanupStack::PopAndDestroy(); // buffer - } - -pcdata_list_s::pcdata_list_s() - { - } - -pcdata_list_s::~pcdata_list_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// AddDriveL -// ----------------------------------------------------------------------------- -CXMLElement* AddDriveL( ConML_DriveListPtr_t* aList ) - { - ConML_DriveListPtr_t itemL = new ( ELeave ) ConML_DriveList_t(); - CleanupStack::PushL( itemL ); - itemL->data = new ( ELeave ) ConML_Drive_t(); - GenericListAddL(aList, itemL); - CleanupStack::Pop(); // itemL - return itemL->data; - } - -// ----------------------------------------------------------------------------- -// AddSIDL -// ----------------------------------------------------------------------------- -CXMLElement* AddSIDL( ConML_SIDListPtr_t * aList ) - { - ConML_SIDListPtr_t itemL = new ( ELeave ) ConML_SIDList_t(); - CleanupStack::PushL( itemL ); - itemL->data = new ( ELeave ) ConML_SID_t(); - GenericListAddL(aList, itemL); - CleanupStack::Pop(); // itemL - return itemL->data; - } - -// ----------------------------------------------------------------------------- -// AddFileL -// ----------------------------------------------------------------------------- -CXMLElement* AddFileL( ConML_FileListPtr_t * aList ) - { - ConML_FileListPtr_t itemL = new ( ELeave ) ConML_FileList_t(); - CleanupStack::PushL( itemL ); - itemL->data = new ( ELeave ) ConML_File_t(); - GenericListAddL(aList, itemL); - CleanupStack::Pop(); // itemL - return itemL->data; - } - -// ----------------------------------------------------------------------------- -// AddApplicationL -// ----------------------------------------------------------------------------- -CXMLElement* AddApplicationL( ConML_ApplicationListPtr_t * aList ) - { - ConML_ApplicationListPtr_t itemL = new ( ELeave ) ConML_ApplicationList_t(); - CleanupStack::PushL( itemL ); - itemL->data = new ( ELeave ) ConML_Application_t(); - GenericListAddL(aList, itemL); - CleanupStack::Pop(); // itemL - return itemL->data; - } - -// ----------------------------------------------------------------------------- -// AddTaskL -// ----------------------------------------------------------------------------- -CXMLElement* AddTaskL( ConML_TaskListPtr_t * aList ) - { - ConML_TaskListPtr_t itemL = new ( ELeave ) ConML_TaskList_t(); - CleanupStack::PushL( itemL ); - itemL->data = new ( ELeave ) ConML_Task_t(); - GenericListAddL(aList, itemL); - CleanupStack::Pop(); // itemL - return itemL->data; - } - -// ----------------------------------------------------------------------------- -// AddParamL -// ----------------------------------------------------------------------------- -CXMLElement* AddParamL( ConML_ParamListPtr_t * aList ) - { - ConML_ParamListPtr_t itemL = new ( ELeave ) ConML_ParamList_t(); - CleanupStack::PushL( itemL ); - itemL->data = new ( ELeave ) ConML_Param_t(); - GenericListAddL(aList, itemL); - CleanupStack::Pop(); // itemL - return itemL->data; - } - -// ----------------------------------------------------------------------------- -// ConML_Drive_s -// ----------------------------------------------------------------------------- -ConML_Drive_s::ConML_Drive_s() - { - } - -ConML_Drive_s::~ConML_Drive_s() - { - delete name; - } - -CXMLElement* ConML_Drive_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLName: - CHECK_NO_DUPLICATE ( name ); - name = new ( ELeave ) pcdata_t(); - return name; - - default: - LOGGER_WRITE_1( "ConML_Drive_s::BeginElement() : Unknown element %02x", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_DriveList_s -// ----------------------------------------------------------------------------- -ConML_DriveList_s::ConML_DriveList_s() - { - } - -ConML_DriveList_s::~ConML_DriveList_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// ConML_Drives_s -// ----------------------------------------------------------------------------- -ConML_Drives_s::ConML_Drives_s() - { - } - -ConML_Drives_s::~ConML_Drives_s() - { - delete drive; - } - -CXMLElement* ConML_Drives_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLDrive: - return AddDriveL ( &drive ); - - default: - LOGGER_WRITE_1( "ConML_Drives_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_BUROptions_s -// ----------------------------------------------------------------------------- -ConML_BUROptions_s::ConML_BUROptions_s() - { - } - -ConML_BUROptions_s::~ConML_BUROptions_s() - { - delete requiresReboot; - delete hasFiles; - delete supportsInc; - delete delayToPrepareData; - } - -CXMLElement* ConML_BUROptions_s::BeginElementL ( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLRequiresReboot: - CHECK_NO_DUPLICATE ( requiresReboot ); - requiresReboot = new ( ELeave ) pcdata_t(); - return requiresReboot; - - case EConMLHasFiles: - CHECK_NO_DUPLICATE ( hasFiles ); - hasFiles = new ( ELeave ) pcdata_t(); - return hasFiles; - - case EConMLSupportsInc: - CHECK_NO_DUPLICATE ( supportsInc ); - supportsInc = new ( ELeave ) pcdata_t(); - return supportsInc; - - case EConMLDelayToPrepareData: - CHECK_NO_DUPLICATE ( delayToPrepareData ); - delayToPrepareData = new ( ELeave ) pcdata_t(); - return delayToPrepareData; - - default: - LOGGER_WRITE_1( "ConML_BUROptions_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_PackageInfo_s -// ----------------------------------------------------------------------------- -ConML_PackageInfo_s::ConML_PackageInfo_s() - { - } - -ConML_PackageInfo_s::~ConML_PackageInfo_s() - { - delete name; - } - -CXMLElement* ConML_PackageInfo_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLName: - CHECK_NO_DUPLICATE ( name ) - name = new ( ELeave ) pcdata_t(); - return name; - - default: - LOGGER_WRITE_1( "ConML_PackageInfo_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// ConML_SID_s -// ----------------------------------------------------------------------------- -ConML_SID_s::ConML_SID_s() - { - } - -ConML_SID_s::~ConML_SID_s() - { - delete type; - delete uid; - delete drives; - delete packageInfo; - delete burOptions; - delete size; - delete transferDataType; - delete data; - delete moreData; - delete dataOwnerStatus; - } - -CXMLElement* ConML_SID_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLType: - CHECK_NO_DUPLICATE ( type ); - type = new ( ELeave ) pcdata_t(); - return type; - - case EConMLUID: - CHECK_NO_DUPLICATE ( uid ) - uid = new ( ELeave ) pcdata_t(); - return uid; - - case EConMLDrives: - drives = new ( ELeave ) ConML_Drives_t(); - return drives; - - case EConMLPackageInfo: - CHECK_NO_DUPLICATE ( packageInfo ); - packageInfo = new ( ELeave ) ConML_PackageInfo_t(); - return packageInfo; - - case EConMLBUROptions: - CHECK_NO_DUPLICATE ( burOptions ) - burOptions = new ( ELeave ) ConML_BUROptions_t(); - return burOptions; - - case EConMLSize: - CHECK_NO_DUPLICATE ( size ); - size = new ( ELeave ) pcdata_t(); - return size; - - case EConMLTransferDataType: - CHECK_NO_DUPLICATE ( transferDataType ); - transferDataType = new ( ELeave ) pcdata_t(); - return transferDataType; - - case EConMLData: - CHECK_NO_DUPLICATE ( data ); - data = new ( ELeave ) pcdata_t(); - return data; - - case EConMLMoreData: - CHECK_NO_DUPLICATE ( moreData ); - moreData = new ( ELeave ) pcdata_t(); - return moreData; - - case EConMLDataOwnerStatus: - CHECK_NO_DUPLICATE ( dataOwnerStatus ); - dataOwnerStatus = new ( ELeave ) pcdata_t(); - return dataOwnerStatus; - - default: - LOGGER_WRITE_1( "ConML_SID_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_SIDList_s -// ----------------------------------------------------------------------------- -ConML_SIDList_s::ConML_SIDList_s() - { - } - -ConML_SIDList_s::~ConML_SIDList_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// ConML_DataOwners_s -// ----------------------------------------------------------------------------- -ConML_DataOwners_s::ConML_DataOwners_s() - { - } - -ConML_DataOwners_s::~ConML_DataOwners_s() - { - delete sid; - } - -CXMLElement* ConML_DataOwners_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLSID: - return AddSIDL( &sid ); - - default: - LOGGER_WRITE_1( "ConML_DataOwners_s::BeginElement()\ - : Unknown element %02x ", aTag); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Application_s -// ----------------------------------------------------------------------------- -ConML_Application_s::ConML_Application_s() - { - } - -ConML_Application_s::~ConML_Application_s() - { - delete name; - delete uid; - } - -CXMLElement* ConML_Application_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLName: - CHECK_NO_DUPLICATE ( name ); - name = new ( ELeave ) pcdata_t(); - return name; - - case EConMLUID: - CHECK_NO_DUPLICATE ( uid ); - uid = new ( ELeave ) pcdata_t(); - return uid; - - default: - LOGGER_WRITE_1( "ConML_Application_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_ApplicationList_s -// ----------------------------------------------------------------------------- -ConML_ApplicationList_s::ConML_ApplicationList_s() - { - } - -ConML_ApplicationList_s::~ConML_ApplicationList_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// ConML_Applications_s -// ----------------------------------------------------------------------------- -ConML_Applications_s::ConML_Applications_s() - { - } - -ConML_Applications_s::~ConML_Applications_s() - { - delete application; - } - -CXMLElement* ConML_Applications_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLApplication: - return AddApplicationL( &application ); - - default: - LOGGER_WRITE_1( "ConML_DataOwners_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_SupportedMethod_s -// ----------------------------------------------------------------------------- -ConML_SupportedMethods_s::ConML_SupportedMethods_s() - { - } - -ConML_SupportedMethods_s::~ConML_SupportedMethods_s() - { - delete install; - delete unInstall; - delete setInstParams; - delete listInstalledApps; - delete listDataOwners; - delete setBurMode; - delete getDataSize; - delete requestData; - delete supplyData; - delete reboot; - } - -CXMLElement* ConML_SupportedMethods_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLInstall: - CHECK_NO_DUPLICATE ( install ); - install = new ( ELeave ) pcdata_t(); - return install; - - case EConMLUnInstall: - CHECK_NO_DUPLICATE ( unInstall ); - unInstall = new ( ELeave ) pcdata_t(); - return unInstall; - - case EConMLListInstalledApps: - CHECK_NO_DUPLICATE ( listInstalledApps ); - listInstalledApps = new ( ELeave ) pcdata_t(); - return listInstalledApps; - - case EConMLListDataOwners: - CHECK_NO_DUPLICATE ( listDataOwners ); - listDataOwners = new ( ELeave ) pcdata_t(); - return listDataOwners; - - case EConMLSetBURMode: - CHECK_NO_DUPLICATE ( setBurMode ); - setBurMode = new ( ELeave ) pcdata_t(); - return setBurMode; - - case EConMLGetDataSize: - CHECK_NO_DUPLICATE ( getDataSize ); - getDataSize = new ( ELeave ) pcdata_t(); - return getDataSize; - - case EConMLRequestData: - CHECK_NO_DUPLICATE ( requestData ); - requestData = new ( ELeave ) pcdata_t(); - return requestData; - - case EConMLSupplyData: - CHECK_NO_DUPLICATE (supplyData ); - supplyData = new ( ELeave ) pcdata_t(); - return supplyData; - - case EConMLReboot: - CHECK_NO_DUPLICATE ( reboot ); - reboot = new ( ELeave ) pcdata_t(); - return reboot; - - default: - LOGGER_WRITE_1( "ConML_SupportedMethods_s::\ - BeginElement() : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_DeviceInfo_s -// ----------------------------------------------------------------------------- -ConML_DeviceInfo_s::ConML_DeviceInfo_s() - { - } - -ConML_DeviceInfo_s::~ConML_DeviceInfo_s() - { - delete version; - delete supportedMethods; - delete maxObjectSize; - } - -CXMLElement* ConML_DeviceInfo_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLVersion: - CHECK_NO_DUPLICATE (version); - version = new ( ELeave ) pcdata_t(); - return version; - - case EConMLSupportedMethods: - CHECK_NO_DUPLICATE ( supportedMethods); - supportedMethods = new ( ELeave ) ConML_SupportedMethods_t(); - return supportedMethods; - - case EConMLMaxObjectSize: - CHECK_NO_DUPLICATE ( maxObjectSize ); - maxObjectSize = new ( ELeave ) pcdata_t(); - return maxObjectSize; - - default: - LOGGER_WRITE_1( "ConML_DeviceInfo_s::BeginElement()\ - : Unknown element %d", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_DeviceInfo_s -// ----------------------------------------------------------------------------- -ConML_File_s::ConML_File_s() - { - } - -ConML_File_s::~ConML_File_s() - { - delete name; - delete modified; - delete size; - delete userPerm; - } - -CXMLElement* ConML_File_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLName: - CHECK_NO_DUPLICATE ( name ); - name = new ( ELeave ) pcdata_t(); - return name; - - case EConMLModified: - CHECK_NO_DUPLICATE ( modified ); - modified = new ( ELeave ) pcdata_t(); - return modified; - - case EConMLSize: - CHECK_NO_DUPLICATE ( size ); - size = new ( ELeave ) pcdata_t(); - return size; - - case EConMLUserPerm: - CHECK_NO_DUPLICATE ( userPerm ); - userPerm = new ( ELeave ) pcdata_t(); - return userPerm; - - default: - LOGGER_WRITE_1( "ConML_File_s::BeginElement()\ - : Unknown element %d", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_FileList_s -// ----------------------------------------------------------------------------- -ConML_FileList_s::ConML_FileList_s() - { - } - -ConML_FileList_s::~ConML_FileList_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// ConML_Files_s -// ----------------------------------------------------------------------------- -ConML_Files_s::ConML_Files_s() - { - } - -ConML_Files_s::~ConML_Files_s() - { - delete file; - } - -CXMLElement* ConML_Files_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLFile: - return AddFileL( &file ); - - default: - LOGGER_WRITE_1( "ConML_File_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Progress_s -// ----------------------------------------------------------------------------- -ConML_Progress_s::ConML_Progress_s() - { - } - -// ----------------------------------------------------------------------------- -// ~ConML_Progress_s -// ----------------------------------------------------------------------------- -ConML_Progress_s::~ConML_Progress_s() - { - delete value; - } - -CXMLElement* ConML_Progress_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLValue: - CHECK_NO_DUPLICATE ( value ); - value = new ( ELeave ) pcdata_t(); - return value; - - default: - LOGGER_WRITE_1( "ConML_Progress_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Results_s -// ----------------------------------------------------------------------------- -ConML_Results_s::ConML_Results_s() - { - } - -ConML_Results_s::~ConML_Results_s() - { - delete complete; - delete progress; - delete applications; - delete dataOwners; - delete filename; - delete moreData; - delete data; - delete deviceInfo; - delete files; - } - -CXMLElement* ConML_Results_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLComplete: - CHECK_NO_DUPLICATE ( complete ); - complete = new ( ELeave ) pcdata_t(); - return complete; - - case EConMLProgress: - CHECK_NO_DUPLICATE ( progress ); - progress = new ( ELeave ) ConML_Progress_t(); - return progress; - - case EConMLApplications: - CHECK_NO_DUPLICATE ( applications ); - applications = new ( ELeave ) ConML_Applications_t(); - return applications; - - case EConMLDataOwners: - CHECK_NO_DUPLICATE ( dataOwners ); - dataOwners = new ( ELeave ) ConML_DataOwners_t(); - return dataOwners; - - case EConMLMoreData: - CHECK_NO_DUPLICATE ( moreData ); - moreData = new ( ELeave ) pcdata_t(); - return moreData; - - case EConMLData: - CHECK_NO_DUPLICATE ( data ); - data = new ( ELeave ) pcdata_t(); - return data; - - case EConMLDeviceInfo: - CHECK_NO_DUPLICATE ( deviceInfo ) - deviceInfo = new ( ELeave ) ConML_DeviceInfo_t(); - return deviceInfo; - - case EConMLFiles: - CHECK_NO_DUPLICATE ( files ) - files = new ( ELeave ) ConML_Files_t(); - return files; - - default: - LOGGER_WRITE_1( "ConML_Results_s::BeginElement()\ - : Unknown element %02x ", aTag); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Param_s -// ----------------------------------------------------------------------------- -ConML_Param_s::ConML_Param_s() - { - } - -ConML_Param_s::~ConML_Param_s() - { - delete name; - delete value; - } - -CXMLElement* ConML_Param_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLName: - CHECK_NO_DUPLICATE ( name ); - name = new ( ELeave ) pcdata_t(); - return name; - - case EConMLValue: - CHECK_NO_DUPLICATE ( value ); - value = new ( ELeave ) pcdata_t(); - return value; - - default: - LOGGER_WRITE_1( "ConML_Param_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_ParamList_s -// ----------------------------------------------------------------------------- -ConML_ParamList_s::ConML_ParamList_s() - { - } - -ConML_ParamList_s::~ConML_ParamList_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// ConML_InstParams_s -// ----------------------------------------------------------------------------- -ConML_InstParams_s::ConML_InstParams_s() - { - } - -ConML_InstParams_s::~ConML_InstParams_s() - { - delete param; - } - -CXMLElement* ConML_InstParams_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLParam: - return AddParamL( ¶m ); - - default: - LOGGER_WRITE_1( "ConML_InstParams_s::BeginElement()\ - : Unknown element %02x ", aTag); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_UnInstall_s -// ----------------------------------------------------------------------------- -ConML_UnInstall_s::ConML_UnInstall_s() - { - } - -ConML_UnInstall_s::~ConML_UnInstall_s() - { - delete applications; - delete instParams; - delete results; - } - -CXMLElement* ConML_UnInstall_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLApplications: - CHECK_NO_DUPLICATE ( applications ); - applications = new ( ELeave ) ConML_Applications_t(); - return applications; - - case EConMLInstParams: - CHECK_NO_DUPLICATE ( instParams ); - instParams = new ( ELeave ) ConML_InstParams_t(); - return instParams; - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_UnInstall_s::BeginElement()\ - : Unknown element %02x ", aTag); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// ConML_ListDataOwners_s -// ----------------------------------------------------------------------------- -ConML_ListDataOwners_s::ConML_ListDataOwners_s() - { - } - -ConML_ListDataOwners_s::~ConML_ListDataOwners_s() - { - delete results; - } - -CXMLElement* ConML_ListDataOwners_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_ListDataOwners_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Install_s -// ----------------------------------------------------------------------------- -ConML_Install_s::ConML_Install_s() - { - } - -ConML_Install_s::~ConML_Install_s() - { - delete name; - delete instParams; - delete results; - } - -CXMLElement* ConML_Install_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLName: - CHECK_NO_DUPLICATE ( name ); - name = new ( ELeave ) pcdata_t(); - return name; - - case EConMLInstParams: - CHECK_NO_DUPLICATE ( instParams ); - instParams = new ( ELeave ) ConML_InstParams_t(); - return instParams; - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_Install_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_ListInstalledApps -// ----------------------------------------------------------------------------- -ConML_ListInstalledApps_s::ConML_ListInstalledApps_s() - { - } - -ConML_ListInstalledApps_s::~ConML_ListInstalledApps_s() - { - delete drives; - delete all; - delete results; - } - -CXMLElement* ConML_ListInstalledApps_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLDrives: - CHECK_NO_DUPLICATE ( drives ); - drives = new ( ELeave ) ConML_Drives_t(); - return drives; - - case EConMLAll: - CHECK_NO_DUPLICATE ( all ); - all = new ( ELeave ) pcdata_t(); - return all; - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_ListInstalledApps_s::\ - BeginElement() : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_SetBURMode_s -// ----------------------------------------------------------------------------- -ConML_SetBURMode_s::ConML_SetBURMode_s() - { - } - -ConML_SetBURMode_s::~ConML_SetBURMode_s() - { - delete drives; - delete partialType; - delete incType; - delete results; - } - -CXMLElement* ConML_SetBURMode_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLDrives: - drives = new ( ELeave ) ConML_Drives_t(); - return drives; - - case EConMLPartialType: - CHECK_NO_DUPLICATE ( partialType ); - partialType = new ( ELeave ) pcdata_t(); - return partialType; - - case EConMLIncType: - CHECK_NO_DUPLICATE ( incType ); - incType = new ( ELeave ) pcdata_t(); - return incType; - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_SetBURMode_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_GetDataSize_s -// ----------------------------------------------------------------------------- -ConML_GetDataSize_s::ConML_GetDataSize_s() - { - } - -ConML_GetDataSize_s::~ConML_GetDataSize_s() - { - delete dataOwners; - delete results; - } - -CXMLElement* ConML_GetDataSize_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLDataOwners: - CHECK_NO_DUPLICATE ( dataOwners ); - dataOwners = new ( ELeave ) ConML_DataOwners_t(); - return dataOwners; - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_GetDataSize_s::BeginElement()\ - : Unknown element %02x ", aTag); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_RequestData_s -// ----------------------------------------------------------------------------- -ConML_RequestData_s::ConML_RequestData_s() - { - } - -ConML_RequestData_s::~ConML_RequestData_s() - { - delete sid; - delete results; - } - -CXMLElement* ConML_RequestData_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLSID: - return AddSIDL( &sid ); - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_RequestData_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_UpdateDeviceInfo_s -// ----------------------------------------------------------------------------- -ConML_UpdateDeviceInfo_s::ConML_UpdateDeviceInfo_s() - { - } - -ConML_UpdateDeviceInfo_s::~ConML_UpdateDeviceInfo_s() - { - delete deviceInfo; - delete results; - } - -CXMLElement* ConML_UpdateDeviceInfo_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLDeviceInfo: - CHECK_NO_DUPLICATE ( deviceInfo ) - deviceInfo = new ( ELeave ) ConML_DeviceInfo_t(); - return deviceInfo; - - case EConMLResults: - CHECK_NO_DUPLICATE ( results ) - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_UpdateDeviceInfo_s::\ - BeginElement() : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_ListPublicFiles_s -// ----------------------------------------------------------------------------- -ConML_ListPublicFiles_s::ConML_ListPublicFiles_s() - { - } - -ConML_ListPublicFiles_s::~ConML_ListPublicFiles_s() - { - delete results; - delete sid; - } - -CXMLElement* ConML_ListPublicFiles_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - case EConMLSID: - return AddSIDL ( &sid ); - - default: - LOGGER_WRITE_1( "ConML_ListPublicFiles_s::\ - BeginElement() : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Task_s -// ----------------------------------------------------------------------------- -ConML_GetDataOwnerStatus_s::ConML_GetDataOwnerStatus_s() - { - } - -ConML_GetDataOwnerStatus_s::~ConML_GetDataOwnerStatus_s() - { - delete dataOwners; - delete results; - } - -CXMLElement* ConML_GetDataOwnerStatus_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - case EConMLDataOwners: - CHECK_NO_DUPLICATE ( dataOwners ); - dataOwners = new ( ELeave ) ConML_DataOwners_t(); - return dataOwners; - - default: - LOGGER_WRITE_1( "ConML_GetDataOwnerStatus_s::\ - BeginElement() : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_GetMetadata_s -// ----------------------------------------------------------------------------- -ConML_GetMetadata_s::ConML_GetMetadata_s() - { - } - -ConML_GetMetadata_s::~ConML_GetMetadata_s() - { - delete filename; - delete results; - } - -CXMLElement* ConML_GetMetadata_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - case EConMLFilename: - CHECK_NO_DUPLICATE ( filename ); - filename = new ( ELeave ) pcdata_t(); - return filename; - - default: - LOGGER_WRITE_1( "ConML_GetMetadata_s::\ - BeginElement() : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// ConML_Reboot_s -// ----------------------------------------------------------------------------- -ConML_Reboot_s::ConML_Reboot_s() - { - } - -ConML_Reboot_s::~ConML_Reboot_s() - { - delete results; - } - -CXMLElement* ConML_Reboot_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLResults: - CHECK_NO_DUPLICATE ( results ); - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_Reboot_s::BeginElementL()\ - : Unknown element %d ", aTag ); - User::Leave ( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Task_s -// ----------------------------------------------------------------------------- -ConML_Task_s::ConML_Task_s() - { - } - -ConML_Task_s::~ConML_Task_s() - { - delete id; - delete install; - delete unInstall; - delete listInstalledApps; - delete listDataOwners; - delete setBurMode; - delete getDataSize; - delete requestData; - delete updateDeviceInfo; - delete listPublicFiles; - delete getDataOwnerStatus; - delete supplyData; - delete reboot; - delete getMetadata; - } - -CXMLElement* ConML_Task_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLID: - CHECK_NO_DUPLICATE ( id ) - id = new ( ELeave ) pcdata_t(); - return id; - - case EConMLInstall: - CHECK_NO_DUPLICATE ( install ); - install = new ( ELeave ) ConML_Install_t(); - return install; - - case EConMLUnInstall: - CHECK_NO_DUPLICATE ( unInstall ); - unInstall = new ( ELeave ) ConML_UnInstall_t(); - return unInstall; - - case EConMLListInstalledApps: - CHECK_NO_DUPLICATE ( listInstalledApps ); - listInstalledApps = new ( ELeave ) ConML_ListInstalledApps_t(); - return listInstalledApps; - - case EConMLListDataOwners: - CHECK_NO_DUPLICATE ( listDataOwners ); - listDataOwners = new ( ELeave ) ConML_ListDataOwners_t(); - return listDataOwners; - - case EConMLSetBURMode: - CHECK_NO_DUPLICATE ( setBurMode ); - setBurMode = new ( ELeave ) ConML_SetBURMode_t(); - return setBurMode; - - case EConMLGetDataSize: - CHECK_NO_DUPLICATE ( getDataSize ); - getDataSize = new ( ELeave ) ConML_GetDataSize_t(); - return getDataSize; - - case EConMLRequestData: - CHECK_NO_DUPLICATE ( requestData ) - requestData = new ( ELeave ) ConML_RequestData_t(); - return requestData; - - case EConMLUpdateDeviceInfo: - CHECK_NO_DUPLICATE ( updateDeviceInfo ); - updateDeviceInfo = new ( ELeave ) ConML_UpdateDeviceInfo_t(); - return updateDeviceInfo; - - case EConMLListPublicFiles: - CHECK_NO_DUPLICATE ( listPublicFiles ); - listPublicFiles = new ( ELeave ) ConML_ListPublicFiles_t(); - return listPublicFiles; - - case EConMLGetDataOwnerStatus: - CHECK_NO_DUPLICATE ( getDataOwnerStatus ); - getDataOwnerStatus = new ( ELeave ) ConML_GetDataOwnerStatus_t(); - return getDataOwnerStatus; - - case EConMLSupplyData: - CHECK_NO_DUPLICATE ( supplyData ); - supplyData = new ( ELeave ) ConML_SupplyData_t(); - return supplyData; - - case EConMLReboot: - CHECK_NO_DUPLICATE ( reboot ); - reboot = new ( ELeave ) ConML_Reboot_t(); - return reboot; - case EConMLGetMetadata: - CHECK_NO_DUPLICATE ( getMetadata ); - getMetadata = new ( ELeave ) ConML_GetMetadata_t(); - return getMetadata; - - default: - LOGGER_WRITE_1( "ConML_Task_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_TaskList_s -// ----------------------------------------------------------------------------- -ConML_TaskList_s::ConML_TaskList_s() - { - } - -ConML_TaskList_s::~ConML_TaskList_s() - { - delete data; - delete next; - } - -// ----------------------------------------------------------------------------- -// ConML_Status_s -// ----------------------------------------------------------------------------- -ConML_Status_s::ConML_Status_s() - { - } - -ConML_Status_s::~ConML_Status_s() - { - delete task; - } - -CXMLElement* ConML_Status_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLTask: - return AddTaskL( &task ); - - default: - LOGGER_WRITE_1( "ConML_Status_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Cancel_s -// ----------------------------------------------------------------------------- -ConML_Cancel_s::ConML_Cancel_s() - { - } - -ConML_Cancel_s::~ConML_Cancel_s() - { - delete id; - delete all; - } - -CXMLElement* ConML_Cancel_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLID: - CHECK_NO_DUPLICATE ( id ); - id = new ( ELeave ) pcdata_t(); - return id; - - case EConMLAll: - CHECK_NO_DUPLICATE ( all ); - all = new ( ELeave ) pcdata_t(); - return all; - - default: - LOGGER_WRITE_1( "ConML_Cancel_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_GetStatus_s -// ----------------------------------------------------------------------------- -ConML_GetStatus_s::ConML_GetStatus_s() - { - } - -ConML_GetStatus_s::~ConML_GetStatus_s() - { - delete id; - delete all; - } - -CXMLElement* ConML_GetStatus_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLID: - CHECK_NO_DUPLICATE ( id ); - id = new ( ELeave ) pcdata_t(); - return id; - - case EConMLAll: - CHECK_NO_DUPLICATE ( all ); - all = new ( ELeave ) pcdata_t(); - return all; - - default: - LOGGER_WRITE_1( "ConML_GetStatus_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_SupplyData_s -// ----------------------------------------------------------------------------- -ConML_SupplyData_s::ConML_SupplyData_s() - { - } - -ConML_SupplyData_s::~ConML_SupplyData_s() - { - delete sid; - delete results; - } - -CXMLElement* ConML_SupplyData_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch ( aTag ) - { - case EConMLSID: - return AddSIDL ( &sid ); - - case EConMLResults: - results = new ( ELeave ) ConML_Results_t(); - return results; - - default: - LOGGER_WRITE_1( "ConML_SupplyData_s::BeginElement() :\ - Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_Execute_ -// ----------------------------------------------------------------------------- -ConML_Execute_s::ConML_Execute_s() - { - } - -ConML_Execute_s::~ConML_Execute_s() - { - delete id; - delete install; - delete unInstall; - delete listInstalledApps; - delete listDataOwners; - delete setBurMode; - delete getDataSize; - delete requestData; - delete updateDeviceInfo; - delete listPublicFiles; - delete supplyData; - delete reboot; - delete getDataOwnerStatus; - delete getMetadata; - } - -CXMLElement* ConML_Execute_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - - switch ( aTag ) - { - case EConMLID: - CHECK_NO_DUPLICATE ( id ); - id = new ( ELeave ) pcdata_t(); - return id; - - case EConMLInstall: - CHECK_NO_DUPLICATE ( install ); - install = new ( ELeave ) ConML_Install_t(); - return install; - - case EConMLUpdateDeviceInfo: - CHECK_NO_DUPLICATE (updateDeviceInfo); - updateDeviceInfo = new ( ELeave ) ConML_UpdateDeviceInfo_t(); - return updateDeviceInfo; - - case EConMLUnInstall: - CHECK_NO_DUPLICATE ( unInstall ); - unInstall = new ( ELeave ) ConML_UnInstall_t(); - return unInstall; - - case EConMLListInstalledApps: - CHECK_NO_DUPLICATE ( listInstalledApps ); - listInstalledApps = new ( ELeave ) ConML_ListInstalledApps_t(); - return listInstalledApps; - - case EConMLListDataOwners: - CHECK_NO_DUPLICATE ( listDataOwners ); - listDataOwners = new ( ELeave ) ConML_ListDataOwners_t(); - return listDataOwners; - - case EConMLSetBURMode: - CHECK_NO_DUPLICATE ( setBurMode ); - setBurMode = new ( ELeave ) ConML_SetBURMode_t(); - return setBurMode; - - case EConMLGetDataSize: - CHECK_NO_DUPLICATE ( getDataSize ); - getDataSize = new ( ELeave ) ConML_GetDataSize_t(); - return getDataSize; - - case EConMLRequestData: - CHECK_NO_DUPLICATE ( requestData ); - requestData = new ( ELeave ) ConML_RequestData_t(); - return requestData; - - case EConMLListPublicFiles: - CHECK_NO_DUPLICATE ( listPublicFiles ); - listPublicFiles = new ( ELeave ) ConML_ListPublicFiles_t(); - return listPublicFiles; - - case EConMLSupplyData: - CHECK_NO_DUPLICATE ( supplyData ); - supplyData = new ( ELeave ) ConML_SupplyData_t(); - return supplyData; - - case EConMLReboot: - CHECK_NO_DUPLICATE ( reboot ); - reboot = new ( ELeave ) pcdata_t(); - return reboot; - - case EConMLGetDataOwnerStatus: - CHECK_NO_DUPLICATE ( getDataOwnerStatus ); - getDataOwnerStatus = new ( ELeave ) ConML_GetDataOwnerStatus_t(); - return getDataOwnerStatus; - - case EConMLGetMetadata: - CHECK_NO_DUPLICATE ( getMetadata ); - getMetadata = new ( ELeave ) ConML_GetMetadata_t(); - return getMetadata; - - default: - LOGGER_WRITE_1( "ConML_Execute_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// ConML_ConML_s -// ----------------------------------------------------------------------------- -ConML_ConML_s::ConML_ConML_s() - { - } - -ConML_ConML_s::~ConML_ConML_s() - { - delete execute; - delete getStatus; - delete cancel; - delete status; - } - -CXMLElement* ConML_ConML_s::BeginElementL( - TUint8 aTag, const TXMLElementParams& /*aParams*/ ) - { - switch( aTag ) - { - case EConMLExecute: - CHECK_NO_DUPLICATE( execute ); - execute = new (ELeave) ConML_Execute_t(); - return execute; - - case EConMLGetStatus: - CHECK_NO_DUPLICATE ( getStatus ); - getStatus = new ( ELeave) ConML_GetStatus_t(); - return getStatus; - - case EConMLCancel: - CHECK_NO_DUPLICATE ( cancel ); - cancel = new ( ELeave ) ConML_Cancel_t(); - return cancel; - - case EConMLStatus: - CHECK_NO_DUPLICATE ( status ) - status = new ( ELeave ) ConML_Status_t(); - return status; - - default: - LOGGER_WRITE_1( "ConML_ConML_s::BeginElement()\ - : Unknown element %02x ", aTag ); - User::Leave( KWBXMLParserErrorInvalidTag ); - } - return KErrNone; - } - -CXMLElement::TAction ConML_ConML_s::EndElementL( TAny* aCallbacks, TUint8 aTag ) - { - switch( aTag) - { - case EConML: - ((MWBXMLConMLCallback*) aCallbacks)->ConMLL(this); - return EPopAndDestroy; - - default: - return EPop; - } - } - -TBool ConML_ConML_s::NeedsCleanup() const - { - return ETrue; - } - - - - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmlgenerator.cpp --- a/connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmlgenerator.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1285 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include "sconconmlgenerator.h" -#include "sconconmlhandlererror.h" -#include "sconconmldtd.h" -#include "sconxmlelement.h" -#include "debug.h" - -// ----------------------------------------------------------------------------- -// CSConConMLGenerator -// ----------------------------------------------------------------------------- -CSConConMLGenerator::CSConConMLGenerator() - { - } - -// ----------------------------------------------------------------------------- -// ~CSConConMLGenerator -// ----------------------------------------------------------------------------- -CSConConMLGenerator::~CSConConMLGenerator() - { - if (iCmdStack) - { - iCmdStack->Reset(); - delete iCmdStack; - iCmdStack = NULL; - } - - if ( iWBXMLWorkspace ) - { - delete iWBXMLWorkspace; - iWBXMLWorkspace = NULL; - } - - if ( iXMLWorkspace ) - { - delete iXMLWorkspace; - iXMLWorkspace = NULL; - } - - if (iCleanupStack) - { - iCleanupStack->ResetAndDestroy(); - delete iCleanupStack; - iCleanupStack = NULL; - } - - iElemStack.Close(); - } - -// ----------------------------------------------------------------------------- -// NewL -// ----------------------------------------------------------------------------- -CSConConMLGenerator* CSConConMLGenerator::NewL () - { - LOGGER_ENTERFN( "CSConConMLGenerator::NewL()" ); - CSConConMLGenerator* self = new ( ELeave ) CSConConMLGenerator(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); // self - LOGGER_LEAVEFN( "CSConConMLGenerator::NewL()" ); - return self; - } - -// ----------------------------------------------------------------------------- -// ConstructL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::ConstructL() - { - LOGGER_ENTERFN( "CSConConMLGenerator::ConstructL()" ); - iCmdStack = CXMLStack::NewL(); - iCleanupStack = CXMLStack::NewL(); - iWBXMLWorkspace = CXMLWorkspace::NewL(); - iXMLWorkspace = CXMLWorkspace::NewL(); - LOGGER_LEAVEFN( "CSConConMLGenerator::ConstructL()" ); - } - -// ----------------------------------------------------------------------------- -// SetCallbacks -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::SetCallback ( MWBXMLConMLCallback* aCallback ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::SetCallbacks()" ); - iCallback = aCallback; - LOGGER_LEAVEFN( "CSConConMLGenerator::SetCallbacks()" ); - } - -// ----------------------------------------------------------------------------- -// StartDocument -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::StartDocument( - TUint8 /*aVersion*/, TInt32 /*aPublicId*/, TUint32 /*aCharset*/ ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::StartDocumentL()" ); - iCmdStack->Reset(); - LOGGER_LEAVEFN( "CSConConMLGenerator::StartDocumentL()" ); - } - -// ----------------------------------------------------------------------------- -// StartDocument -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::StartDocument( - TUint8 /*aVersion*/, const TDesC8& /*aPublicIdStr*/, TUint32 /*aCharset*/ ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::StartDocumentL()" ); - iCmdStack->Reset(); - LOGGER_LEAVEFN( "CSConConMLGenerator::StartDocumentL()" ); - } - -// ----------------------------------------------------------------------------- -// StartElementL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::StartElementL( TWBXMLTag aTag ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::StartElementL()" ); - if( iCmdStack->Top() != 0 ) - { - AddElement(iCmdStack->Top()->BeginElementL( - aTag, TXMLElementParams(iCallback, iCmdStack, iCleanupStack ) ) ); - } - else - { - if( aTag == EConML ) - { - AddElement(new (ELeave) ConML_ConML_t()); - } - else - { - LOGGER_WRITE( "CSConConMLGenerator::StartElementL() : Leave KWBXMLParserErrorInvalidTag" ); - User::Leave(KWBXMLParserErrorInvalidTag); - } - } - LOGGER_LEAVEFN( "CSConConMLGenerator::StartElementL()" ); - } - -// ----------------------------------------------------------------------------- -// AddElement -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AddElement( CXMLElement* aElement ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AddElement()" ); - if( aElement ) - { - iCmdStack->Push(aElement); - if( aElement->NeedsCleanup() ) - { - iCleanupStack->Push(aElement); - } - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AddElement()" ); - } - -// ----------------------------------------------------------------------------- -// CharactersL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::CharactersL( const TDesC8& aBuffer ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::CharactersL()" ); - if( iCmdStack->Top() != 0 ) - { - iCmdStack->Top()->SetDataL(aBuffer); - } - else - { - LOGGER_WRITE( "CSConConMLGenerator::CharactersL() : Leave KWBXMLParserErrorInvalidTag" ); - User::Leave(KWBXMLParserErrorInvalidTag); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::CharactersL()" ); - } - -// ----------------------------------------------------------------------------- -// EndElementL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::EndElementL( TWBXMLTag aTag ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::EndElementL()" ); - if( iCmdStack->Top() != 0 ) - { - CXMLElement::TAction action = iCmdStack->Top()->EndElementL( - iCallback, aTag ); - if( action != CXMLElement::ENone ) - { - CXMLElement* elem = iCmdStack->Pop(); - if( iCleanupStack->Top() == elem ) - { - iCleanupStack->Pop(); - } - if( action == CXMLElement::EPopAndDestroy ) - { - delete elem; - } - } - } - LOGGER_LEAVEFN( "CSConConMLGenerator::EndElementL()" ); - } - -// ----------------------------------------------------------------------------- -// WriteMUint32L -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::WriteMUint32L( TUint32 aValue ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::WriteMUint32L()" ); - TUint8 temp[5]; - TInt i(4); - - temp[i--] = TUint8(aValue & 0x7F); - aValue >>= 7; - while( aValue > 0 ) - { - temp[i--] = TUint8((aValue & 0x7F) | 0x80); - aValue >>= 7; - } - - while( i < 4 ) - { - iWBXMLWorkspace->WriteL(temp[++i]); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::WriteMUint32L()" ); - } - -// ----------------------------------------------------------------------------- -// WriteOpaqueDataL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::WriteOpaqueDataL( const TDesC8& aData ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::WriteOpaqueDataL()" ); - iWBXMLWorkspace->WriteL( OPAQUE ); - WriteMUint32L( aData.Size() ); - iWBXMLWorkspace->WriteL( aData ); - iXMLWorkspace->WriteL( aData ); - LOGGER_LEAVEFN( "CSConConMLGenerator::WriteOpaqueDataL()" ); - } - -// ----------------------------------------------------------------------------- -// WriteInlineStringL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::WriteInlineStringL( const TDesC8& aData ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::WriteInlineStringL()" ); - iWBXMLWorkspace->WriteL( STR_I ); - iWBXMLWorkspace->WriteL( aData ); - iWBXMLWorkspace->WriteL( 0 ); - iXMLWorkspace->WriteL( aData ); - LOGGER_LEAVEFN( "CSConConMLGenerator::WriteInlineStringL()" ); - } - -// ----------------------------------------------------------------------------- -// IndentL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::IndentL() - { - LOGGER_ENTERFN( "CSConConMLGenerator::IndentL()" ); - for( TInt i = 0; i < iElemStack.Count() + iInitialIndentLevel; i++ ) - { - iXMLWorkspace->WriteL(KXMLIndent()); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::IndentL()" ); - } - -// ----------------------------------------------------------------------------- -// TranslateElement -// ----------------------------------------------------------------------------- -TPtrC8 CSConConMLGenerator::TranslateElement( TUint8 aElement ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::TranslateElement()" ); - TPtrC8 buf( KConMLElements ); - while( aElement-- ) - { - TInt pos = buf.Find(KXMLElemenentSeparator()); - if( pos == KErrNotFound ) - { - return TPtrC8(); - } - buf.Set(buf.Right(buf.Length() - pos - 1)); - } - - TInt pos = buf.Find(KXMLElemenentSeparator()); - - if( pos != KErrNotFound ) - { - buf.Set(buf.Left(pos)); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::TranslateElement()" ); - return buf; - } - -// ----------------------------------------------------------------------------- -// EndDocument -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::EndDocument() - { - LOGGER_ENTERFN( "CSConConMLGenerator::EndDocument()" ); - LOGGER_LEAVEFN( "CSConConMLGenerator::EndDocument()" ); - } - - -// ----------------------------------------------------------------------------- -// GenerateConMLDocument -// ----------------------------------------------------------------------------- -TInt CSConConMLGenerator::GenerateConMLDocument ( ConML_ConMLPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::GenerateConMLDocument()" ); - iWBXMLWorkspace->Reset(); - iWBXMLWorkspace->BeginTransaction(); - iXMLWorkspace->Reset(); - iXMLWorkspace->BeginTransaction(); - TRAPD(result, AppendConMLL(aContent)); - LOGGER_WRITE_1( "CSConConMLGenerator::GenerateConMLDocument()\ - : returned %d", result ); - return HandleResult(result); - } - -// ----------------------------------------------------------------------------- -// AppendConMLL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendConMLL( ConML_ConMLPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendConMLL()" ); - BeginDocumentL(KSConConMLVersion, KSConConMLPublicId, KSConConMLUTF8); - BeginElementL(EConML, ETrue); - AppendExecuteL( aContent->execute ); - AppendGetStatusL( aContent->getStatus ); - AppendCancelL( aContent->cancel ); - AppendStatusL( aContent->status ); - EndElementL(); // EConML - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendConMLL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendExecuteL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendExecuteL( ConML_ExecutePtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendExecuteL()" ); - if ( aContent ) - { - BeginElementL( EConMLExecute, ETrue ); - AppendPCDataL( EConMLID, aContent->id ); - AppendInstallL( aContent->install ); - AppendUnInstallL( aContent->unInstall ); - AppendListInstalledAppsL( aContent->listInstalledApps ); - AppendListDataOwnersL( aContent->listDataOwners ); - AppendSetBURModeL( aContent->setBurMode ); - AppendGetDataSizeL( aContent->getDataSize ); - AppendRequestDataL( aContent->requestData ); - AppendUpdateDeviceInfoL( aContent->updateDeviceInfo ); - AppendListPublicFilesL( aContent->listPublicFiles ); - AppendSupplyDataL( aContent->supplyData ); - AppendGetDataOwnerStatusL( aContent->getDataOwnerStatus ); - AppendGetMetadataL( aContent->getMetadata ); - - if ( aContent->reboot ) - { - BeginElementL( EConMLReboot ); - } - EndElementL(); // EConMLExecute - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendExecuteL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendSupplyDataL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendSupplyDataL( ConML_SupplyDataPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendSupplyDataL()" ); - if ( aContent ) - { - BeginElementL( EConMLSupplyData, ETrue ); - AppendSIDListL( aContent->sid ); - AppendResultsL( aContent->results ); - EndElementL(); // EConMLSupplyData - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendSupplyDataL()" ); - } -// ----------------------------------------------------------------------------- -// AppendInstallL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendInstallL( ConML_InstallPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendInstallL()" ); - if ( aContent) - { - BeginElementL( EConMLInstall, ETrue ); - AppendPCDataL( EConMLName, aContent->name ); - if ( aContent->instParams) - { - if ( aContent->instParams->param ) - { - AppendInstParamsL( aContent->instParams ); - } - else - { - BeginElementL( EConMLInstParams ); - } - } - AppendResultsL( aContent->results ); - EndElementL(); // EConMLInstall - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendInstallL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendCancelL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendCancelL ( ConML_CancelPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendCancelL()" ); - if ( aContent ) - { - BeginElementL( EConMLCancel, ETrue ); - AppendPCDataL ( EConMLID, aContent->id ); - AppendPCDataL( EConMLAll, aContent->all); - EndElementL(); // EConMLCancel - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendCancelL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendStatusL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendStatusL ( ConML_StatusPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendStatusL()" ); - if ( aContent ) - { - if ( aContent->task ) - { - BeginElementL( EConMLStatus, ETrue ); - AppendTaskListL( aContent->task ); - EndElementL(); // EConMLStatus - } - else - { - BeginElementL( EConMLStatus ); - } - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendStatusL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendGetStatusL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendGetStatusL( ConML_GetStatusPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendGetStatusL()" ); - if ( aContent ) - { - BeginElementL( EConMLGetStatus, ETrue ); - AppendPCDataL( EConMLID, aContent->id); - if ( aContent->all ) - { - BeginElementL( EConMLAll ); - } - EndElementL(); // EConMLGetStatus - } - LOGGER_ENTERFN( "CSConConMLGenerator::AppendGetStatusL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendRebootL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendRebootL( ConML_RebootPtr_t aContent ) - { - if ( aContent ) - { - BeginElementL( EConMLReboot, ETrue ); - AppendResultsL( aContent->results ); - EndElementL(); // EConMLReboot - } - } - -// ----------------------------------------------------------------------------- -// AppendTaskL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendTaskL( ConML_TaskPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendTaskL()" ); - if ( aContent ) - { - BeginElementL( EConMLTask, ETrue ); - AppendPCDataL( EConMLID, aContent->id ); - AppendInstallL(aContent->install ); - AppendUnInstallL( aContent->unInstall ); - AppendListInstalledAppsL ( aContent->listInstalledApps ); - AppendListDataOwnersL ( aContent->listDataOwners ); - AppendSetBURModeL ( aContent->setBurMode ); - AppendGetDataSizeL ( aContent->getDataSize ); - AppendRequestDataL ( aContent->requestData ); - AppendUpdateDeviceInfoL ( aContent->updateDeviceInfo); - AppendListPublicFilesL ( aContent->listPublicFiles ); - AppendGetDataOwnerStatusL( aContent->getDataOwnerStatus ); - AppendSupplyDataL( aContent->supplyData ); - AppendRebootL( aContent->reboot ); - AppendGetMetadataL( aContent->getMetadata ); - EndElementL(); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendTaskL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendTaskListL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendTaskListL( ConML_TaskListPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendTaskListL()" ); - for ( ConML_TaskListPtr_t p = aContent; p && p->data; p=p->next ) - { - AppendTaskL( p->data ); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendTaskListL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendListInstalledAppsL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendListInstalledAppsL ( - ConML_ListInstalledAppsPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendListInstalledAppsL()" ); - if ( aContent ) - { - BeginElementL( EConMLListInstalledApps, ETrue ); - AppendDrivesL( aContent->drives ); - if ( aContent ->all ) - { - BeginElementL( EConMLAll ); - } - AppendResultsL( aContent->results ); - EndElementL(); // EConMLListInstalledApps - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendListInstalledAppsL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendListDataOwnersL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendListDataOwnersL ( - ConML_ListDataOwnersPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendListDataOwnersL()" ); - if ( aContent ) - { - if ( aContent->results ) - { - BeginElementL( EConMLListDataOwners, ETrue ); - AppendResultsL( aContent->results ); - EndElementL(); // EConMLListDataOwners - } - else - { - BeginElementL( EConMLListDataOwners ); - } - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendListDataOwnersL()" ); - } - -// ----------------------------------------------------------------------------- -// CSConConMLGanerator::AppendBUROptionsL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendBUROptionsL( ConML_BUROptionsPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendBUROptionsL()" ); - if ( aContent ) - { - BeginElementL( EConMLBUROptions, ETrue ); - if ( aContent->requiresReboot ) - { - BeginElementL( EConMLRequiresReboot ); - } - if ( aContent->hasFiles ) - { - AppendPCDataL( EConMLHasFiles, aContent->hasFiles ); - } - if ( aContent->supportsInc ) - { - BeginElementL( EConMLSupportsInc ); - } - if ( aContent->delayToPrepareData ) - { - BeginElementL( EConMLDelayToPrepareData ); - } - EndElementL(); // EConMLBUROptions - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendBUROptionsL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendSetBURModeL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendSetBURModeL( ConML_SetBURModePtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendSetBURModeL()" ); - if ( aContent ) - { - BeginElementL( EConMLSetBURMode, ETrue ); - AppendDrivesL( aContent->drives ); - AppendPCDataL( EConMLPartialType, aContent->partialType ); - AppendPCDataL( EConMLIncType, aContent->incType ); - AppendResultsL( aContent->results ); - EndElementL(); //EConMLSetBURMode - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendSetBURModeL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendUnInstallL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendUnInstallL( ConML_UnInstallPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendUnInstallL()" ); - if ( aContent ) - { - BeginElementL( EConMLUnInstall, ETrue ); - AppendApplicationsL( aContent->applications ); - AppendInstParamsL( aContent->instParams ); - AppendResultsL( aContent->results ); - EndElementL(); // EConMLUnInstall - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendUnInstallL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendGetDataSizeL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendGetDataSizeL( ConML_GetDataSizePtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendGetDataSizeL()" ); - if ( aContent ) - { - BeginElementL( EConMLGetDataSize, ETrue ); - AppendDataOwnersL( aContent->dataOwners ); - AppendResultsL( aContent->results ); - EndElementL(); //EConMLGetDataSize - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendGetDataSizeL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendRequestDataL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendRequestDataL( ConML_RequestDataPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendRequestDataL()" ); - if ( aContent ) - { - BeginElementL( EConMLRequestData, ETrue ); - AppendSIDListL( aContent->sid ); - AppendResultsL( aContent->results ); - EndElementL();//EConMLRequestData - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendRequestDataL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendUpdateDeviceInfoL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendUpdateDeviceInfoL( - ConML_UpdateDeviceInfoPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendUpdateDeviceInfoL()" ); - if ( aContent ) - { - BeginElementL(EConMLUpdateDeviceInfo, ETrue); - AppendDeviceInfoL( aContent-> deviceInfo ); - AppendResultsL( aContent->results ); - EndElementL();// EConMLUpdateDeviceInfo - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendUpdateDeviceInfoL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendListPublicFilesL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendListPublicFilesL( - ConML_ListPublicFilesPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendListPublicFilesL()" ); - if ( aContent ) - { - BeginElementL( EConMLListPublicFiles, ETrue ); - AppendSIDListL ( aContent->sid ); - AppendResultsL( aContent->results ); - EndElementL(); // EConMLListPublicFiles - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendListPublicFilesL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendApplicationL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendApplicationL( ConML_ApplicationPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendApplicationL()" ); - if ( aContent ) - { - BeginElementL(EConMLApplication, ETrue ); - AppendPCDataL( EConMLName, aContent->name ); - AppendPCDataL( EConMLUID, aContent->uid ); - EndElementL(); //EConMLApplication - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendApplicationL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendApplicationListL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendApplicationListL( - ConML_ApplicationListPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendApplicationListL()" ); - for ( ConML_ApplicationListPtr_t p = aContent; p && p->data; p = p->next ) - { - AppendApplicationL( p->data ); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendApplicationListL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendApplicationsL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendApplicationsL( - ConML_ApplicationsPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendApplicationsL()" ); - if ( aContent ) - { - BeginElementL( EConMLApplications, ETrue ); - AppendApplicationListL( aContent->application ); - EndElementL(); // EConMLApplications - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendApplicationsL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendParamL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendParamL( ConML_ParamPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendParamL()" ); - if ( aContent ) - { - BeginElementL( EConMLParam, ETrue ); - AppendPCDataL( EConMLName, aContent->name ); - AppendPCDataL( EConMLValue, aContent->value ); - EndElementL(); // EConMLParam - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendParamL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendParamListL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendParamListL( ConML_ParamListPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendParamListL()" ); - for ( ConML_ParamListPtr_t p = aContent; p && p->data; p = p->next ) - { - AppendParamL( p-> data ); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendParamListL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendInstParamsL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendInstParamsL( ConML_InstParamsPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendInstParamsLionsL()" ); - if ( aContent ) - { - BeginElementL( EConMLInstParams, ETrue ); - AppendParamListL( aContent->param ); - EndElementL(); //EConMLInstParams - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendInstParamsL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendProgressL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendProgressL( ConML_ProgressPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendProgressL()" ); - if ( aContent ) - { - BeginElementL( EConMLProgress, ETrue ); - AppendPCDataL( EConMLValue, aContent->value ); - EndElementL(); // EconMLProgress - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendProgressL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendResultsL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendResultsL( ConML_ResultsPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendResultsL()" ); - if ( aContent ) - { - BeginElementL( EConMLResults, ETrue ); - if ( aContent->complete ) - { - BeginElementL( EConMLComplete ); - } - AppendProgressL( aContent->progress ); - AppendApplicationsL( aContent->applications ); - AppendDataOwnersL( aContent->dataOwners ); - if ( aContent->filename ) - { - AppendPCDataL( EConMLFilename, aContent->filename ); - } - AppendPCDataL( EConMLData, aContent->data ); - if ( aContent->moreData ) - { - BeginElementL( EConMLMoreData ); - } - AppendDeviceInfoL( aContent->deviceInfo ); - AppendFilesL( aContent->files ); - EndElementL(); //EConMLResults - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendResultsL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendDriveL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendDriveL( ConML_DrivePtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDriveL()" ); - if ( aContent ) - { - BeginElementL( EConMLDrive, ETrue ); - AppendPCDataL( EConMLName, aContent->name ); - EndElementL(); //EConMLDrive - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendDriveL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendDriveListL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendDriveListL( ConML_DriveListPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDriveListL()" ); - for ( ConML_DriveListPtr_t p = aContent; p && p->data; p=p->next ) - { - AppendDriveL( p->data ); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendDriveListL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendDrivesL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendDrivesL( ConML_DrivesPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDrivesL()" ); - if ( aContent ) - { - BeginElementL( EConMLDrives, ETrue ); - AppendDriveListL( aContent->drive ); - EndElementL(); // EConMLDrives - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendDrivesL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendDataOwnersL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendDataOwnersL( ConML_DataOwnersPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDataOwnersL()" ); - if ( aContent ) - { - BeginElementL( EConMLDataOwners, ETrue ); - AppendSIDListL( aContent->sid ); - EndElementL(); //EConMLDataOwners - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendDataOwnersL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendGetDataOwnerStatusL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendGetDataOwnerStatusL - ( ConML_GetDataOwnerStatusPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDataOwnerStatusL()" ); - if ( aContent) - { - BeginElementL( EConMLGetDataOwnerStatus, ETrue ); - AppendDataOwnersL( aContent->dataOwners ); - AppendResultsL( aContent->results ); - EndElementL(); // EconMLGetDataOwnerStatus - } - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDataOwnerStatusL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendGetMetadataL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendGetMetadataL - ( ConML_GetMetadataPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendGetMetadataL()" ); - if ( aContent) - { - BeginElementL( EConMLGetMetadata, ETrue ); - AppendPCDataL( EConMLFilename, aContent->filename ); - AppendResultsL( aContent->results ); - EndElementL(); // EConMLGetMetadata - } - LOGGER_ENTERFN( "CSConConMLGenerator::AppendGetMetadataL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendPackageInfoL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendPackageInfoL ( ConML_PackageInfoPtr_t aContent ) - { - if ( aContent ) - { - BeginElementL( EConMLPackageInfo, ETrue ); - AppendPCDataL( EConMLName, aContent->name ); - EndElementL(); // EConMLPackageInfo - } - } - -// ----------------------------------------------------------------------------- -// AppendSIDL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendSIDL( ConML_SIDPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendSIDL()" ); - if ( aContent ) - { - BeginElementL( EConMLSID, ETrue ); - AppendPCDataL( EConMLType, aContent->type ); - AppendPCDataL( EConMLUID, aContent->uid ); - AppendPCDataL( EConMLDataOwnerStatus, aContent->dataOwnerStatus ); - AppendDrivesL( aContent->drives ); - if ( aContent->size ) - { - AppendPCDataL( EConMLSize, aContent->size ); - } - AppendPackageInfoL( aContent->packageInfo ); - AppendBUROptionsL( aContent->burOptions ); - AppendPCDataL( EConMLTransferDataType, aContent->transferDataType ); - AppendPCDataL( EConMLData, aContent->data ); - if ( aContent->moreData) - { - BeginElementL(EConMLMoreData ); - } - EndElementL(); // EconMLSID - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendSIDL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendSIDListL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendSIDListL( ConML_SIDListPtr_t aContent ) - { - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendSIDListL()" ); - for ( ConML_SIDListPtr_t p = aContent; p && p->data; p=p->next ) - { - AppendSIDL( p->data ); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendSIDListL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendDeviceInfoL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendDeviceInfoL( ConML_DeviceInfoPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendDeviceInfoL()" ); - if ( aContent ) - { - BeginElementL( EConMLDeviceInfo, ETrue ); - AppendPCDataL( EConMLVersion, aContent->version ); - AppendSupportedMethodsL ( aContent->supportedMethods ); - AppendPCDataL(EConMLMaxObjectSize, aContent->maxObjectSize ); - EndElementL(); // EConMLDeviceInfo - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendDeviceInfoL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendFilesL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendFilesL( ConML_FilesPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendFilesL()" ); - if ( aContent ) - { - BeginElementL( EConMLFiles, ETrue ); - AppendFileListL( aContent->file ); - EndElementL(); // EConMLFiles - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendFilesL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendSupportedMethodsL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendSupportedMethodsL - ( ConML_SupportedMethodsPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendSupportedMethodsL()" ); - if ( aContent ) - { - BeginElementL( EConMLSupportedMethods, ETrue ); - if ( aContent->install ) - { - BeginElementL( EConMLInstall ); - } - if ( aContent->unInstall ) - { - BeginElementL( EConMLUnInstall ); - } - if ( aContent->listInstalledApps ) - { - BeginElementL( EConMLListInstalledApps ); - } - if ( aContent->listDataOwners ) - { - BeginElementL( EConMLListDataOwners ); - } - if ( aContent->setBurMode ) - { - BeginElementL( EConMLSetBURMode ); - } - if ( aContent->getDataSize ) - { - BeginElementL( EConMLGetDataSize ); - } - if ( aContent->requestData ) - { - BeginElementL( EConMLRequestData ); - } - if ( aContent->supplyData ) - { - BeginElementL( EConMLSupplyData ); - } - if ( aContent->reboot ) - { - BeginElementL( EConMLReboot ); - } - EndElementL(); // EConMLSupportedMethods - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendSupportedMethodsL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendFileListL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendFileListL( ConML_FileListPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendFileListL()" ); - if ( aContent ) - { - for ( ConML_FileListPtr_t p = aContent; p && p->data; p = p->next ) - { - AppendFileL(p->data ); - } - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendFileListL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendFileL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendFileL( ConML_FilePtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendFileL()" ); - if ( aContent ) - { - BeginElementL( EConMLFile, ETrue ); - AppendPCDataL( EConMLName, aContent->name ); - AppendPCDataL( EConMLModified, aContent->modified ); - AppendPCDataL( EConMLSize, aContent->size ); - AppendPCDataL( EConMLUserPerm, aContent->userPerm ); - EndElementL(); // EConMLFile - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendFileL()" ); - } - -// ----------------------------------------------------------------------------- -// HandleResult -// ----------------------------------------------------------------------------- -TInt CSConConMLGenerator::HandleResult( TInt aResult, TInt aTreshold ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::HandleResult()" ); - switch( aResult ) - { - case KErrNone: - if( iWBXMLWorkspace->FreeSize() < aTreshold ) - { - iWBXMLWorkspace->Rollback(); - return KWBXMLGeneratorBufferFull; - } - iWBXMLWorkspace->Commit(); - return KWBXMLGeneratorOk; - - case KErrTooBig: - iWBXMLWorkspace->Rollback(); - return KWBXMLGeneratorBufferFull; - } - LOGGER_WRITE_1( "CSConConMLGenerator::HandleResult()\ - : returned %d", aResult); - return aResult; - } - -// ----------------------------------------------------------------------------- -// BeginDocumentL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::BeginDocumentL( - TUint8 aVersion, - TInt32 aPublicId, - TUint32 aCharset, - const TDesC8& aStringTbl ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::BeginDocumentL()" ); - iWBXMLWorkspace->WriteL(aVersion); - - if( aPublicId <= 0 ) - { - iWBXMLWorkspace->WriteL(0); - WriteMUint32L(-aPublicId); - } - else - { - WriteMUint32L(aPublicId); - } - WriteMUint32L(aCharset); - WriteMUint32L(aStringTbl.Size()); - iWBXMLWorkspace->WriteL(aStringTbl); - LOGGER_LEAVEFN( "CSConConMLGenerator::BeginDocumentL()" ); - } - -// ----------------------------------------------------------------------------- -// BeginElementL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::BeginElementL( - TUint8 aElement, TBool aHasContent, TBool aHasAttributes ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::BeginElementL()" ); - IndentL(); - iXMLWorkspace->WriteL(KXMLTagStart()); - iXMLWorkspace->WriteL(TranslateElement(aElement)); - - if( aHasAttributes ) - { - aElement |= KWBXMLHasAttributes; - } - - if( aHasContent ) - { - iXMLWorkspace->WriteL(KXMLTagEnd()); - iElemStack.Insert(aElement, 0); - aElement |= KWBXMLHasContent; - } - else - { - iXMLWorkspace->WriteL(KXMLTagEndNoContent()); - } - - if( !iDontNewLine ) - { - iXMLWorkspace->WriteL(KXMLNewLine()); - } - iDontNewLine = EFalse; - - WriteMUint32L(aElement); - LOGGER_LEAVEFN( "CSConConMLGenerator::BeginElementL()" ); - } - -// ----------------------------------------------------------------------------- -// EndElementL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::EndElementL() - { - LOGGER_ENTERFN( "CSConConMLGenerator::EndElementL()" ); - TUint8 elem = iElemStack[0]; - iElemStack.Remove(0); - if( !iDontIndent ) - { - IndentL(); - } - iDontIndent = EFalse; - iXMLWorkspace->WriteL(KXMLTagStartEndTag()); - iXMLWorkspace->WriteL(TranslateElement(elem)); - iXMLWorkspace->WriteL(KXMLTagEnd()); - iXMLWorkspace->WriteL(KXMLNewLine()); - - iWBXMLWorkspace->WriteL(END); - - LOGGER_LEAVEFN( "CSConConMLGenerator::EndElementL()" ); - } - -// ----------------------------------------------------------------------------- -// AddElementL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AddElementL( - TUint8 aElement, const TDesC8& aContent, const TWBXMLContentFormat aFormat ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AddElementL()" ); - iDontNewLine = ETrue; - BeginElementL(aElement, ETrue); - if( aFormat == EWBXMLContentFormatOpaque ) - { - WriteOpaqueDataL(aContent); - } - else - { - WriteInlineStringL(aContent); - } - iDontIndent = ETrue; - EndElementL(); - LOGGER_LEAVEFN( "CSConConMLGenerator::AddElementL()" ); - } - -// ----------------------------------------------------------------------------- -// AppendPCDataL -// ----------------------------------------------------------------------------- -void CSConConMLGenerator::AppendPCDataL( TUint8 aElement, pcdataPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLGenerator::AppendPCDataL()" ); - if( !aContent ) - { - return; - } - - if( aContent->contentType == SML_PCDATA_OPAQUE ) - { - AddElementL(aElement, - TPtrC8((TUint8*)aContent->content, - aContent->length)); - } - else - { - LOGGER_WRITE( "CSConConMLGenerator::AppendPCDataL() : Data type not Opaque - ignoring " ); - } - LOGGER_LEAVEFN( "CSConConMLGenerator::AppendPCDataL()" ); - } - -// ----------------------------------------------------------------------------- -// WBXMLDocument -// ----------------------------------------------------------------------------- -TPtrC8 CSConConMLGenerator::WBXMLDocument() - { - LOGGER_ENTERFN( "CSConConMLGenerator::WBXMLDocument()" ); - LOGGER_LEAVEFN( "CSConConMLGenerator::WBXMLDocument()" ); - return iWBXMLWorkspace->Buffer(); - } - -// ----------------------------------------------------------------------------- -// XMLDocument -// ----------------------------------------------------------------------------- -TPtrC8 CSConConMLGenerator::XMLDocument() - { - LOGGER_ENTERFN( "CSConConMLGenerator::XMLDocument()" ); - LOGGER_LEAVEFN( "CSConConMLGenerator::XMLDocument()" ); - return iXMLWorkspace->Buffer(); - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmlhandler.cpp --- a/connectivitymodules/SeCon/wbxml/conmlhandler/src/sconconmlhandler.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,474 +0,0 @@ -/* -* Copyright (c) 2005-2007 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: ConML parser/generator -* -*/ - - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include - -#include "sconconmlhandler.h" -#include "debug.h" - -// ----------------------------------------------------------------------------- -// CreateCSConConMLHandlerL -// Creates a new instance of CSConConMLHandler -// ----------------------------------------------------------------------------- -// -EXPORT_C CSConConMLHandler* CreateCSConConMLHandlerL() - { - LOGGER_ENTERFN( "CreateCSConConMLHandlerL()" ); - LOGGER_LEAVEFN( "CreateCSConConMLHandlerL()" ); - return CSConConMLHandler::NewL(); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::CSConConMLHandler() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConConMLHandler::CSConConMLHandler() - { - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::CSConConMLHandler() -// Default constructor -// ----------------------------------------------------------------------------- -// -CSConConMLHandler::~CSConConMLHandler() - { - LOGGER_ENTERFN( "CSConConMLHandler::~CSConConMLHandler()" ); - - if ( iParseBuffer ) - { - LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 1/4 " ); - delete iParseBuffer; - iParseBuffer = NULL; - } - - if ( iBuffer ) - { - LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 2/4 " ); - delete iBuffer; - iBuffer = NULL; - } - - if ( iGenerator ) - { - LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 3/4 " ); - delete iGenerator; - iGenerator = NULL; - } - - if ( iStringTable ) - { - LOGGER_WRITE( "CSConConMLHandler::~CSConConMLHandler() : phase 4/4 " ); - delete iStringTable; - iStringTable = NULL; - } - - iElemStack.Close(); - - LOGGER_LEAVEFN( "CSConConMLHandler::~CSConConMLHandler()" ); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::CSConConMLHaNewL() -// Creates a new instance of CSConConMLHandler -// ----------------------------------------------------------------------------- -// -CSConConMLHandler* CSConConMLHandler::NewL() - { - LOGGER_ENTERFN( "CSConConMLHandler::NewL()" ); - CSConConMLHandler* self = new ( ELeave ) CSConConMLHandler(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); // self - LOGGER_LEAVEFN( "CSConConMLHandler::NewL()" ); - return self; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ConstructL() -// 2nd phase constructor -// ----------------------------------------------------------------------------- -// -void CSConConMLHandler::ConstructL() - { - LOGGER_ENTERFN( "CSConConMLHandler::ConstructL()" ); - iGenerator = CSConConMLGenerator::NewL(); - iBuffer = CBufFlat::NewL( KSConBufferGranularity ); - iParseBuffer = CBufFlat::NewL( KSConDefaultDocumentSize ); - LOGGER_LEAVEFN( "CSConConMLHandler::ConstructL()" ); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ParseDocumentL() -// Handles the document parsing, document in aInput -// ----------------------------------------------------------------------------- -// -TInt CSConConMLHandler::ParseDocumentL( - CBufFlat& aInput, MWBXMLConMLCallback* aCallback ) - { - LOGGER_ENTERFN( "CSConConMLHandler::ParseDocument()" ); - TInt ret ( KErrNone ); - - iPos = 0; - iParseBuffer->Reset(); - iParseBuffer->ResizeL( aInput.Size() ); - iParseBuffer->Write( 0, aInput.Ptr(0) ); - iHeaderParsed = EFalse; - iGenerator->SetCallback( aCallback ); - - while (ret == KWBXMLParserErrorOk ) - { - ret = ParseL(); - } - - if ( ret == KWBXMLParserErrorEof ) - { - ret = KErrNone; - } - LOGGER_WRITE_1( "CSConConMLHandler::ParseDocument()\ - returned %d", ret ); - return ( ret ); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::GenerateDocument() -// Starts the generating of a document -// ----------------------------------------------------------------------------- -// -TInt CSConConMLHandler::GenerateDocument( ConML_ConMLPtr_t aContent ) - { - LOGGER_ENTERFN( "CSConConMLHandler::GenerateDocument()" ); - iGenerator->GenerateConMLDocument ( aContent ); - LOGGER_LEAVEFN( "CSConConMLHandler::GenerateDocument()" ); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::WBXMLDocument() -// Returns the generated WBXML -document -// ----------------------------------------------------------------------------- -// -TPtrC8 CSConConMLHandler::WBXMLDocument() - { - LOGGER_ENTERFN( "CSConConMLHandler::WBXMLDocument()" ); - LOGGER_LEAVEFN( "CSConConMLHandler::WBXMLDocument()" ); - return iGenerator->WBXMLDocument(); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::XMLDocument() -// Returns the generated XML -document -// ----------------------------------------------------------------------------- -// -TPtrC8 CSConConMLHandler::XMLDocument() - { - LOGGER_ENTERFN( "CSConConMLHandler::XMLDocument()" ); - LOGGER_LEAVEFN( "CSConConMLHandler::XMLDocument()" ); - return iGenerator->XMLDocument(); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ParseL() -// Parses the next document tag / header if not parsed yet -// ----------------------------------------------------------------------------- -// -TInt CSConConMLHandler::ParseL() - { - LOGGER_ENTERFN( "CSConConMLHandler::ParseL()" ); - if( !iHeaderParsed ) - { - TConMLParserError result(KWBXMLParserErrorOk); - TRAPD(err, result = DoParseDocumentHeaderL()); - if( err == KErrEof ) - { - LOGGER_WRITE( "CSConConMLHandler::ParseL() : KWBXMLParserErrorEofTooEarly " ); - return KWBXMLParserErrorEofTooEarly; - } - return result; - } - LOGGER_LEAVEFN( "CSConConMLHandler::ParseL()" ); - return DoParseDocumentBodyL(); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::DoParseDocumentHeaderL() -// Parses the document header -// ----------------------------------------------------------------------------- -// -TConMLParserError CSConConMLHandler::DoParseDocumentHeaderL() - { - LOGGER_ENTERFN( "CSConConMLParser::DoParseDocumentHeaderL()" ); - iHeaderParsed = ETrue; - - // Version - TUint8 version = ReadUint8L(); - - // PublicId - TInt32 publicId = ReadMUint32L(); - - if( publicId == 0 ) - { - publicId = ReadMUint32L(); - } - else - { - publicId = -publicId; - } - - // Charset - TUint32 charSet = ReadMUint32L(); - - // String table - ReadStringTableL(); - - // Document begins now - if( publicId < 0 ) - { - iGenerator->StartDocument(version, -publicId, charSet); - } - else - { - iGenerator->StartDocument(version, - StringTableString(publicId), charSet); - } - LOGGER_LEAVEFN( "CSConConMLHandler::DoParseDocumentHeaderL()" ); - return KWBXMLParserErrorOk; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::DoParseDocumentBodyL() -// Parses the next element of the document -// ----------------------------------------------------------------------------- -// -TConMLParserError CSConConMLHandler::DoParseDocumentBodyL() - { - LOGGER_ENTERFN( "CSConConMLHandler::DoParseDocumentBodyL()" ); - TUint8 id(0); - TRAPD(err, id = ReadUint8L()); - - if( err != KErrNone ) - { - if( err == KErrEof ) - { - iGenerator->EndDocument(); - if( iElemStack.Count() > 0 ) - { - LOGGER_WRITE( "CSConConMLHandler::DoParseDocumentBodyL() : KWBXMLParserErrorEofTooEarly " ); - return KWBXMLParserErrorEofTooEarly; - } - return KWBXMLParserErrorEof; - } - User::Leave(err); - } - - switch (id) - { - case END: - { - if( !iElemStack.Count() ) - { - LOGGER_WRITE( "CSConConMLHandler::DoParseDocumentBodyL() : KWBXMLParserErrorinvalidDocument " ); - User::Leave( KWBXMLParserErrorinvalidDocument ); - } - TUint8 tag( iElemStack.operator[](iElemStack.Count() - 1 )); - iGenerator->EndElementL( tag ); - iElemStack.Remove(iElemStack.Count() - 1); - } - break; - - case STR_I: - iGenerator->CharactersL(ReadStrIL()); - break; - - case OPAQUE: - iGenerator->CharactersL(ReadOpaqueL()); - break; - - default: - HandleElementL(id); - break; - } - LOGGER_LEAVEFN( "CSConConMLHandler::DoParseDocumentBodyL()" ); - return KWBXMLParserErrorOk; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ReadUint8L() -// Reads one byte from the document -// ----------------------------------------------------------------------------- -// -TUint8 CSConConMLHandler::ReadUint8L() - { - LOGGER_ENTERFN( "CSConConMLHandler::ReadUint8L()" ); - if ( iPos == iParseBuffer->Size()) - { - User::Leave ( KErrEof ); - } - TUint8 value; - HBufC8* data = HBufC8::NewLC( sizeof(TUint8) ); - TPtr8 ptr = data->Des(); - iParseBuffer->Read(iPos, ptr, sizeof(TUint8)); - iPos+= sizeof(TUint8); - value = ptr[0]; - CleanupStack::PopAndDestroy(1); //data - LOGGER_WRITE_1( "CSConConMLHandler::ReadUint8L()\ - : returned %d ", value ); - return value; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ReadMUint32L() -// Reads multibyte coding from the document -// ----------------------------------------------------------------------------- -// -TUint32 CSConConMLHandler::ReadMUint32L() - { - LOGGER_ENTERFN( "CSConConMLHandler::ReadMUint32L()" ); - TUint32 result = 0; - TUint8 c; - - do { - c = ReadUint8L(); - result = (result << 7) | (c & 0x7f); - } while ( c & 0x80 ); - - LOGGER_WRITE_1( "CSConConMLHandler::ReadMUint32L()\ - : returned %d ", result ); - return result; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ReadStrIL() -// Reads string data from the document -// ----------------------------------------------------------------------------- -// -TPtrC8 CSConConMLHandler::ReadStrIL() - { - LOGGER_ENTERFN( "CSConConMLHandler::ReadStrIL()" ); - iBuffer->Reset(); - RBufWriteStream bws(*iBuffer); - TUint8 c; - while( (c = ReadUint8L()) != 0 ) - { - bws.WriteUint8L(c); - } - bws.CommitL(); - LOGGER_LEAVEFN( "CSConConMLParser::ReadStrIL()" ); - return iBuffer->Ptr(0); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ReadStringTableL() -// Handles the document's string table -// ----------------------------------------------------------------------------- -// -void CSConConMLHandler::ReadStringTableL() - { - LOGGER_ENTERFN( "CSConConMLHandler::ReadStringTableL()" ); - delete iStringTable; - iStringTable = NULL; - TUint32 strTblLen = ReadMUint32L(); - - if( strTblLen > 0 ) - { - if( iPos+strTblLen > iParseBuffer->Size()) - { - LOGGER_WRITE( "CSConConMLHandler::ReadStringTableL() : LEAVE KErrEof " ); - User::Leave ( KErrEof ); - } - iStringTable = HBufC8::NewL(strTblLen); - TPtr8 ptr = iStringTable->Des(); - iParseBuffer->Read(iPos, ptr, strTblLen); - iPos+=strTblLen; - } - LOGGER_LEAVEFN( "CSConConMLHandler::ReadStringTableL()" ); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::StringTableString() -// Returns a value from the string table according to the given index -// ----------------------------------------------------------------------------- -// -TPtrC8 CSConConMLHandler::StringTableString( TUint32 aIndex ) - { - LOGGER_ENTERFN( "CSConConMLHandler::StringTableString()" ); - TPtrC8 temp(iStringTable->Mid(aIndex)); - TInt pos = temp.Find(KWBXMLNull()); - if( pos != KErrNotFound ) - { - temp.Set(temp.Left(pos)); - } - LOGGER_LEAVEFN( "CSConConMLHandler::StringTableString()" ); - return temp; - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::HandleElementL() -// Starts a new element in the document -// ----------------------------------------------------------------------------- -// -void CSConConMLHandler::HandleElementL( TUint8 aId ) - { - LOGGER_ENTERFN( "CSConConMLHandler::HandleElementL()" ); - TUint8 tag(TUint8(aId & 0x3f)); - - iGenerator->StartElementL( tag ); - - if( aId & 0x40 ) - { - iElemStack.Append( tag ); - } - else - { - iGenerator->EndElementL(tag); - } - LOGGER_LEAVEFN( "CSConConMLHandler::HandleElementL()" ); - } - -// ----------------------------------------------------------------------------- -// CSConConMLHandler::ReadOpaqueL() -// Reads opaque data from the document -// ----------------------------------------------------------------------------- -// -TPtrC8 CSConConMLHandler::ReadOpaqueL() - { - LOGGER_ENTERFN( "CSConConMLHandler::ReadOpaqueL()" ); - iBuffer->Reset(); - RBufWriteStream bws(*iBuffer); - TUint32 length = ReadMUint32L(); - if( iPos+length > iParseBuffer->Size()) - { - LOGGER_WRITE( "CSConConMLHandler::ReadOpaqueL() : LEAVE KErrEof " ); - User::Leave ( KErrEof ); - } - HBufC8* data = HBufC8::NewLC( length ); - TPtr8 ptr = data->Des(); - iParseBuffer->Read( iPos, ptr, length ); - iPos+= length; - bws.WriteL(ptr, length); - bws.CommitL(); - CleanupStack::PopAndDestroy(1); // data - - LOGGER_LEAVEFN( "CSConConMLHandler::ReadOpaqueL()" ); - return iBuffer->Ptr(0); - } - diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/src/sconxmlelement.cpp --- a/connectivitymodules/SeCon/wbxml/conmlhandler/src/sconxmlelement.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- - -#include "sconxmlelement.h" -#include "sconconmldtd.h" - -// ----------------------------------------------------------------------------- -// TElementParams -// ----------------------------------------------------------------------------- -TXMLElementParams::TXMLElementParams( - TAny* aCallbacks, - CXMLStack* aCmdStack, - CXMLStack* aCleanupStack ) : - iCallbacks(aCallbacks), - iCmdStack(aCmdStack), - iCleanupStack(aCleanupStack) - { - } - -// ----------------------------------------------------------------------------- -// CXMLElement -// ----------------------------------------------------------------------------- -CXMLElement* CXMLElement::BeginElementL( - TUint8 /*aTag*/, const TXMLElementParams& /*Params*/ ) - { - return 0; - } - -// ----------------------------------------------------------------------------- -CXMLElement::TAction CXMLElement::EndElementL( TAny* /*aCallbacks*/, - TUint8 /*aTag*/ ) - { - return EPop; - } - - -// ----------------------------------------------------------------------------- -TBool CXMLElement::NeedsCleanup() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -void CXMLElement::SetDataL( const TDesC8& /*aData*/ ) - { - } - -// ----------------------------------------------------------------------------- -TPtrC8 CXMLElement::Data() const - { - return TPtrC8(); - } - -// ----------------------------------------------------------------------------- -TBool CXMLElement::Validate() - { - return ETrue; - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/SeCon/wbxml/conmlhandler/src/sconxmlworkspace.cpp --- a/connectivitymodules/SeCon/wbxml/conmlhandler/src/sconxmlworkspace.cpp Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,175 +0,0 @@ -/* -* 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: ConML parser/generator -* -*/ - - -// ----------------------------------------------------------------------------- -// Includes -// ----------------------------------------------------------------------------- -#include "sconxmlworkspace.h" - -// ----------------------------------------------------------------------------- -// CXMLWorkspace -// ----------------------------------------------------------------------------- -CXMLWorkspace::CXMLWorkspace() - { - } - -// ----------------------------------------------------------------------------- -// NewL -// ----------------------------------------------------------------------------- -CXMLWorkspace* CXMLWorkspace::NewL() - { - CXMLWorkspace* self = new (ELeave) CXMLWorkspace(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); // self - return self; - } - -// ----------------------------------------------------------------------------- -// ConstructL -// ----------------------------------------------------------------------------- -void CXMLWorkspace::ConstructL() - { - iBuffer = CBufFlat::NewL(32); - iTransactions = new (ELeave) RArray(); - } - -// ----------------------------------------------------------------------------- -// ~CXMLWorkspace -// ----------------------------------------------------------------------------- -CXMLWorkspace::~CXMLWorkspace() - { - delete iBuffer; - if( iTransactions ) - { - iTransactions->Reset(); - } - delete iTransactions; - } - -// ----------------------------------------------------------------------------- -// BeginTransaction -// ----------------------------------------------------------------------------- -void CXMLWorkspace::BeginTransaction() - { - iTransactions->Append(Size()); - } - -// ----------------------------------------------------------------------------- -// Commit -// ----------------------------------------------------------------------------- -TInt CXMLWorkspace::Commit() - { - if( iTransactions->Count() == 0 ) - { - return KErrGeneral; - } - iTransactions->Remove(iTransactions->Count() - 1); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CommitAll -// ----------------------------------------------------------------------------- -void CXMLWorkspace::CommitAll() - { - iTransactions->Reset(); - } - -// ----------------------------------------------------------------------------- -// Rollback -// ----------------------------------------------------------------------------- -TInt CXMLWorkspace::Rollback() - { - if( iTransactions->Count() == 0 ) - { - return KErrGeneral; - } - TUint begin = iTransactions->operator[](iTransactions->Count() - 1); - Delete(begin, Size() - begin); - iTransactions->Remove(iTransactions->Count() - 1); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// Reset -// ----------------------------------------------------------------------------- -void CXMLWorkspace::Reset() - { - iBuffer->Reset(); - } - -// ----------------------------------------------------------------------------- -// WriteL -// ----------------------------------------------------------------------------- -void CXMLWorkspace::WriteL( const TDesC8& aData ) - { - TRAPD(err, iBuffer->InsertL(iBuffer->Size(), aData)); - if( err != KErrNone ) - { - User::Leave(KErrTooBig); - } - } - -// ----------------------------------------------------------------------------- -// WriteL -// ----------------------------------------------------------------------------- -void CXMLWorkspace::WriteL( const TUint8 aData ) - { - WriteL(TPtrC8(&aData, 1)); - } - -// ----------------------------------------------------------------------------- -// Buffer -// ----------------------------------------------------------------------------- -TPtrC8 CXMLWorkspace::Buffer() - { - return iBuffer->Ptr(0); - } - -// ----------------------------------------------------------------------------- -// FreeSize -// ----------------------------------------------------------------------------- -TInt CXMLWorkspace::FreeSize() - { - return (KMaxTInt32 - Size()); - } - -// ----------------------------------------------------------------------------- -// MaxSize -// ----------------------------------------------------------------------------- -TInt CXMLWorkspace::MaxSize() - { - return KMaxTInt32; - } - -// ----------------------------------------------------------------------------- -// Size -// ----------------------------------------------------------------------------- -TInt CXMLWorkspace::Size() - { - return iBuffer->Size(); - } - -// ----------------------------------------------------------------------------- -// Delete -// ----------------------------------------------------------------------------- -void CXMLWorkspace::Delete( TInt aPos, TInt aLength ) - { - iBuffer->Delete(aPos, aLength); - } diff -r 453dfc402455 -r 0aa8cc770c8a connectivitymodules/group/bld.inf --- a/connectivitymodules/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -/* -* Copyright (c) 2006 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: Build information file -* -*/ - - -#include "../SeCon/group/bld.inf" diff -r 453dfc402455 -r 0aa8cc770c8a group/bld.inf --- a/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -11,11 +11,30 @@ * * Contributors: * -* Description: Build information file +* Description: * */ - +// Local Connectivity Service Component #include "../remoteconn_plat/group/bld.inf" -#include "../connectivitymodules/group/bld.inf" +#include "../localconnectivityservice/group/bld.inf" + +// MTP Component +#include "../mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/bld.inf" +#include "../mtpfws/mtpfw/group/bld.inf" +#include "../mtpdataproviders/mtpfileandfolderdp/group/bld.inf" +#include "../mtptransports/mtpusbtransport/group/bld.inf" +//#include "../mtpfws/mtpfw/dataproviders/devdp/devdpextn/group/bld.inf" +#include "../mtptransports/mtpptpiptransport/group/bld.inf" +#include "../mtpdataproviders/mtppictbridgedp/group/bld.inf" +#include "../mtpdataproviders/mtpimagedp/group/bld.inf" + +#include "../mtpdataproviders/mtpplaybackcontroldp/group/bld.inf" + +#ifdef FF_MTP_CONTROLLER +#include "../mtptransports/mtpcontroller/group/bld.inf" +#endif//FF_MTP_CONTROLLER + +// SBE Component +#include "../backupandrestore/backupengine/group/bld.inf" diff -r 453dfc402455 -r 0aa8cc770c8a group/dummy.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/dummy.txt Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +test1. + +test2. diff -r 453dfc402455 -r 0aa8cc770c8a layers.sysdef.xml --- a/layers.sysdef.xml Thu Aug 19 10:44:03 2010 +0300 +++ b/layers.sysdef.xml Tue Aug 31 16:03:15 2010 +0300 @@ -1,14 +1,86 @@ - ]> - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/bwins/dunatextu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/bwins/dunatextu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,11 @@ +EXPORTS + ?AddCmdModeCallback@CDunAtCmdHandler@@QAEHPAVMDunCmdModeMonitor@@@Z @ 1 NONAME ; int CDunAtCmdHandler::AddCmdModeCallback(class MDunCmdModeMonitor *) + ?AddDataForParsing@CDunAtCmdHandler@@QAEHAAVTDesC8@@AAH@Z @ 2 NONAME ; int CDunAtCmdHandler::AddDataForParsing(class TDesC8 &, int &) + ?ManageAbortRequest@CDunAtCmdHandler@@QAEHXZ @ 3 NONAME ; int CDunAtCmdHandler::ManageAbortRequest(void) + ?NewL@CDunAtCmdHandler@@SAPAV1@PAVMDunAtCmdStatusReporter@@PAVMDunStreamManipulator@@PBVTDesC8@@@Z @ 4 NONAME ; class CDunAtCmdHandler * CDunAtCmdHandler::NewL(class MDunAtCmdStatusReporter *, class MDunStreamManipulator *, class TDesC8 const *) + ?ResetData@CDunAtCmdHandler@@QAEXXZ @ 5 NONAME ; void CDunAtCmdHandler::ResetData(void) + ?SendEchoCharacter@CDunAtCmdHandler@@QAEHPBVTDesC8@@PAVMDunAtCmdEchoer@@@Z @ 6 NONAME ; int CDunAtCmdHandler::SendEchoCharacter(class TDesC8 const *, class MDunAtCmdEchoer *) + ?StartUrc@CDunAtCmdHandler@@QAEHXZ @ 7 NONAME ; int CDunAtCmdHandler::StartUrc(void) + ?Stop@CDunAtCmdHandler@@QAEHXZ @ 8 NONAME ; int CDunAtCmdHandler::Stop(void) + ?StopUrc@CDunAtCmdHandler@@QAEHXZ @ 9 NONAME ; int CDunAtCmdHandler::StopUrc(void) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/eabi/dunatextu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/eabi/dunatextu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,11 @@ +EXPORTS + _ZN16CDunAtCmdHandler17AddDataForParsingER6TDesC8Ri @ 1 NONAME + _ZN16CDunAtCmdHandler17SendEchoCharacterEPK6TDesC8P15MDunAtCmdEchoer @ 2 NONAME + _ZN16CDunAtCmdHandler18AddCmdModeCallbackEP18MDunCmdModeMonitor @ 3 NONAME + _ZN16CDunAtCmdHandler18ManageAbortRequestEv @ 4 NONAME + _ZN16CDunAtCmdHandler4NewLEP23MDunAtCmdStatusReporterP21MDunStreamManipulatorPK6TDesC8 @ 5 NONAME + _ZN16CDunAtCmdHandler4StopEv @ 6 NONAME + _ZN16CDunAtCmdHandler7StopUrcEv @ 7 NONAME + _ZN16CDunAtCmdHandler8StartUrcEv @ 8 NONAME + _ZN16CDunAtCmdHandler9ResetDataEv @ 9 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2008 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: +* This file provides the information required for building the +* whole of DUN ATEXT +* +*/ + +#include + +PRJ_PLATFORMS + +PRJ_EXPORTS +../../rom/dunatext.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunatext.iby) + +PRJ_MMPFILES +dunatext.mmp + +PRJ_TESTMMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/group/dunatext.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/group/dunatext.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2008 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: Project definition file for project DUN ATEXT +* +*/ + + +#include +#include + +TARGET dunatext.dll +TARGETTYPE DLL +UID 0x1000008d 0x2001CBE6 + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE DunAtCmdEchoer.cpp +SOURCE DunAtCmdHandler.cpp +SOURCE DunAtCmdPusher.cpp +SOURCE DunAtUrcHandler.cpp +SOURCE DunAtModeListen.cpp +SOURCE DunAtEcomListen.cpp +SOURCE DunAtNvramListen.cpp +SOURCE DunAtSpecialCmdHandler.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc ../../utils/inc +USERINCLUDE ../../../inc + +LIBRARY atextclient.lib +LIBRARY atextcommon.lib +LIBRARY euser.lib +LIBRARY bafl.lib +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtCmdEchoer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtCmdEchoer.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 2010 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: Echoer for AT commands +* +*/ + +#ifndef C_CDUNATCMDECHOER_H +#define C_CDUNATCMDECHOER_H + +#include "DunDataPusher.h" + +class MDunStreamManipulator; + +/** + * Notification interface class for text mode + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( MDunAtCmdEchoer ) + { + +public: + + /** + * Notifies about completed echo in text mode + * + * @since TB9.2 + * @return None + */ + virtual void NotifyEchoComplete() = 0; + + }; + +/** + * Class for AT command echoer + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtCmdEchoer ) : public CBase, + public MDunCompletionReporter + { + +public: + + /** + * Two-phased constructor. + * @param aStreamCallback Callback to stream + * @return Instance of self + */ + static CDunAtCmdEchoer* NewL( MDunStreamManipulator* aStreamCallback ); + + /** + * Destructor. + */ + virtual ~CDunAtCmdEchoer(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + void ResetData(); + + /** + * Sends a character to be echoed + * + * @since TB9.2 + * @param aInput Input to echo + * @param aCallback Callback to echo request completions + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SendEchoCharacter( const TDesC8* aInput, MDunAtCmdEchoer* aCallback ); + +private: + + CDunAtCmdEchoer( MDunStreamManipulator* aStreamCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + +// from base class MDunCompletionReporter + + /** + * From MDunCompletionReporter. + * Gets called when data push is complete + * + * @since TB9.2 + * @param aAllPushed ETrue if all in the queue were pushed, EFalse otherwise + * @return None + */ + void NotifyDataPushComplete( TBool aAllPushed ); + +private: // data + + /** + * Notification interface class for echo request completions + * Not own. + */ + MDunAtCmdEchoer* iCallback; + + /** + * Callback to call when data to push + * Not own. + */ + MDunStreamManipulator* iStreamCallback; + + /** + * Current state of echoing: active or inactive + */ + TDunState iAtEchoState; + + }; + +#endif // C_CDUNATCMDECHOER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtCmdHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtCmdHandler.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,990 @@ +/* +* Copyright (c) 2009-2010 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: AT command handler and notifier +* +*/ + +#ifndef C_CDUNATCMDHANDLER_H +#define C_CDUNATCMDHANDLER_H + +#include +#include +#include +#include "DunDataPusher.h" +#include "DunAtCmdPusher.h" +#include "DunAtCmdEchoer.h" +#include "DunAtEcomListen.h" +#include "DunAtModeListen.h" +#include "DunAtNvramListen.h" +#include "DunAtSpecialCmdHandler.h" + +const TInt KDunChSetMaxCharLen = 1; // Only ASCII supported for now +const TInt KDunOkBufLength = 1+1+2+1+1; // ++"OK"++ +const TInt KDunErrorBufLength = 1+1+5+1+1; // ++"ERROR"++ +const TInt KDunLineBufLength = (512 + 1); // 512 chars for command + +const TInt KDunEscBufLength = 1; // Escape (0x1B) character + +class CDunAtUrcHandler; +class MDunConnMon; +class MDunStreamManipulator; + +/** + * Class used for storing information related to string conversion and parsing + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( TDunParseInfo ) + { + +public: + + /** + * Buffer for sending to ATEXT (one command) + * (length is part of KDunLineBufLength) + */ + TBuf8 iSendBuffer; + + /** + * Conversion limit for upper case conversion. + * This is needed to convert the base part of special commands to upper case + * where the part after the base part should not be converted to upper case. + */ + TInt iLimit; + + }; + +/** + * Class used for AT command decoding related functionality + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( TDunDecodeInfo ) + { + +public: + + /** + * Flag to indicate if first decode + */ + TBool iFirstDecode; + + /** + * Index in iLineBuffer for decoding to iSendBuffer + */ + TInt iDecodeIndex; + + /** + * Index in iLineBuffer for extended character position + */ + TInt iExtendedIndex; + + /** + * Previous character in parsing + */ + TChar iPrevChar; + + /** + * Flag to indicate if previous character exists + */ + TBool iPrevExists; + + /** + * Flag to indicate if assignment mark found + */ + TBool iAssignFound; + + /** + * Flag to indicate if processing inside quotes + */ + TBool iInQuotes; + + /** + * Flag to indicate if special subcommand found + */ + TBool iSpecialFound; + + /** + * Number of commands handled (for debugging purposes) + */ + TBool iCmdsHandled; + + }; + +/** + * Class used for AT command editor mode related functionality + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( TDunEditorModeInfo ) + { + +public: + + /** + * Flag to indicate if content found (not used if iContentFindStarted is EFalse) + */ + TBool iContentFound; + + /** + * AT command decoding related information for peeked data + * (not to be used if HandleNextSubCommand() returns EFalse) + */ + TDunDecodeInfo iPeekInfo; + + }; + +/** + * Notification interface class for command mode start/end + * + * @lib dunutils.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( MDunCmdModeMonitor ) + { + +public: + + /** + * Notifies about command mode start + * + * @since TB9.2 + * @return None + */ + virtual void NotifyCommandModeStart() = 0; + + /** + * Notifies about command mode end + * + * @since TB9.2 + * @return None + */ + virtual void NotifyCommandModeEnd() = 0; + + }; + +/** + * Notification interface class for status changes in AT command handling + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( MDunAtCmdStatusReporter ) + { + +public: + + /** + * Notifies about parser's need to get more data + * + * @since TB9.2 + * @return None + */ + virtual void NotifyParserNeedsMoreData() = 0; + + /** + * Notifies about editor mode reply + * + * @since TB9.2 + * @param aStart ETrue if start of editor mode, EFalse otherwise + * @return None + */ + virtual void NotifyEditorModeReply( TBool aStart ) = 0; + + }; + +/** + * Class for AT command handler and notifier + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtCmdHandler ) : public CBase, + public MDunAtCmdPusher, + public MDunAtEcomListen, + public MDunAtModeListen + { + +public: + + /** + * Two-phased constructor. + * @param aUpstream Callback to upstream + * @param aDownstream Callback to downstream + * @param aConnectionName Connection identifier name + * @return Instance of self + */ + IMPORT_C static CDunAtCmdHandler* NewL( + MDunAtCmdStatusReporter* aUpstream, + MDunStreamManipulator* aDownstream, + const TDesC8* aConnectionName ); + + /** + * Destructor. + */ + virtual ~CDunAtCmdHandler(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + IMPORT_C void ResetData(); + + /** + * Adds callback for command mode notification + * The callback will be called when command mode starts or ends + * + * @since TB9.2 + * @param aCallback Callback to call when command mode starts or ends + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt AddCmdModeCallback( MDunCmdModeMonitor* aCallback ); + + /** + * Adds data for parsing and parses if necessary + * + * @since TB9.2 + * @param aInput Data to add for parsing + * @param aMoreNeeded ETrue if more data needed, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt AddDataForParsing( TDesC8& aInput, TBool& aMoreNeeded ); + + /** + * Manages request to abort command handling + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt ManageAbortRequest(); + + /** + * Sends a character to be echoed + * + * @since TB9.2 + * @param aInput Input to echo + * @param aCallback Callback to echo request completions + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt SendEchoCharacter( const TDesC8* aInput, + MDunAtCmdEchoer* aCallback ); + + /** + * Stops sending of AT command from decode buffer + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt Stop(); + + /** + * Starts URC message handling + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt StartUrc(); + + /** + * Stops URC message handling + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt StopUrc(); + +private: + + CDunAtCmdHandler( MDunAtCmdStatusReporter* aUpstream, + MDunStreamManipulator* aDownstream, + const TDesC8* aConnectionName ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + + /** + * Creates plugin handlers for this class + * + * @since TB9.2 + * @return None + */ + void CreatePluginHandlersL(); + + /** + * Creates the array of special commands + * + * @since TB9.2 + * @return None + */ + void CreateSpecialCommandsL(); + + /** + * Recreates special command data. + * This is done when a plugin is installed or uninstalled. + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt RecreateSpecialCommands(); + + /** + * Gets default settings from RATExtCommon and sets them to RATExt + * + * @since TB9.2 + * @return None + */ + void GetAndSetDefaultSettingsL(); + + /** + * Regenerates the reply strings based on settings + * + * @since TB9.2 + * @return ETrue if quiet mode, EFalse otherwise + */ + TBool RegenerateReplyStrings(); + + /** + * Regenerates the ok reply based on settings + * + * @since TB9.2 + * @return ETrue if quiet mode, EFalse otherwise + */ + TBool RegenerateOkReply(); + + /** + * Regenerates the error reply based on settings + * + * @since TB9.2 + * @return ETrue if quiet mode, EFalse otherwise + */ + TBool RegenerateErrorReply(); + + /** + * Gets current mode + * + * @since TB9.2 + * @param aMask Mask for current mode (only one supported) + * @return New current mode + */ + TUint GetCurrentModeL( TUint aMask ); + + /** + * Instantiates one URC message handling class instance and adds it to + * the URC message handler array + * + * @since TB9.2 + * @return None + */ + CDunAtUrcHandler* AddOneUrcHandlerL(); + + /** + * Deletes all instantiated URC message handlers + * + * @since TB9.2 + * @return None + */ + void DeletePluginHandlers(); + + /** + * Manages partial AT command + * + * @since TB9.2 + * @return ETrue if more data needed, EFalse otherwise + */ + TBool ManagePartialCommand(); + + /** + * Echoes a command if echo is on + * + * @since TB9.2 + * @return ETrue if echo push started, EFalse otherwise + */ + TBool EchoCommand(); + + /** + * Handles backspace and cancel characters + * + * @since TB9.2 + * @return ETrue if special character found, EFalse otherwise + */ + TBool HandleSpecialCharacters(); + + /** + * Extracts line from input buffer to line buffer + * + * @since TB9.2 + * @return ETrue if more data needed, EFalse otherwise + */ + TBool ExtractLineFromInputBuffer(); + + /** + * Handles generic buffer management + * (explanation in ExtractLineFromInputBuffer()) + * + * @since TB9.2 + * @param aStartIndex Start index for buffer to be copied + * @param aCopyLength Length for data needed to be copied + * @param aCopyNeeded ETrue if buffer copy needed + * @return ETrue if more data needed, EFalse otherwise + */ + TBool HandleGenericBufferManagement( TInt& aStartIndex, + TInt& aCopyLength, + TBool& aCopyNeeded ); + + /** + * Handles special buffer management + * (explanation in ExtractLineFromInputBuffer()) + * + * @since TB9.2 + * @param aStartIndex Start index for buffer to be copied + * @param aCopyLength Length for data needed to be copied + * @param aCopyNeeded ETrue if buffer copy needed + * @return ETrue if more data needed, EFalse otherwise + */ + TBool HandleSpecialBufferManagement( TInt aStartIndex, + TInt& aCopyLength, + TBool& aCopyNeeded ); + + /** + * Skips end-of-line characters + * + * @since TB9.2 + * @param aStartIndex Start index + * @return Index to end of non-end-of-line or Symbian error code on error + */ + TInt SkipEndOfLineCharacters( TInt aStartIndex ); + + /** + * Skips subcommand delimiter characters + * + * @since TB9.2 + * @param aStartIndex Start index + * @return Index to end of delimiter or Symbian error code on error + */ + TInt SkipSubCommandDelimiterCharacters( TInt aStartIndex ); + + /** + * Finds the end of the line + * + * @since TB9.2 + * @param aStartIndex Start index + * @return Index to end of line or Symbian error code on error + */ + TInt FindEndOfLine( TInt aStartIndex ); + + /** + * Handles next subcommand from line buffer + * + * @since TB9.2 + * @return ETrue if last command decoded, EFalse otherwise + */ + TBool HandleNextSubCommand(); + + /** + * Manages end of AT command handling + * + * @since TB9.2 + * @param aNotifyLocal Notify local parties + * @param aNotifyExternal Notify external parties + * @return None + */ + void ManageEndOfCmdHandling( TBool aNotifyLocal, + TBool aNotifyExternal ); + + /** + * Extracts next subcommand from line buffer to send buffer + * + * @since TB9.2 + * @param aPeek Peek for the next command if ETrue, EFalse otherwise + * @return ETrue if command extracted, EFalse otherwise + */ + TBool ExtractNextSubCommand( TBool aPeek=EFalse ); + + /** + * Finds the start of subcommand from line buffer + * + * @since TB9.2 + * @return Index to the next command or Symbian error code on error + */ + TInt FindStartOfSubCommand(); + + /** + * Restores old decode info. For ExtractNextSubCommand() when aPeeks is + * ETrue. + * + * @since TB9.2 + * @param aPeek Peek for the next command if ETrue, EFalse otherwise + * @param aOldInfo Old information to restore when aPeek is ETrue + * @return None + */ + void RestoreOldDecodeInfo( TBool aPeek, TDunDecodeInfo& aOldInfo ); + + /** + * Tests for end of AT command line + * + * @since TB9.2 + * @param aCharacter Character to test + * @return ETrue if end of command, EFalse otherwise + */ + TBool IsEndOfLine( TChar& aCharacter ); + + /** + * Checks if character is delimiter character + * + * @since TB9.2 + * @param aCharacter Character to test + * @return ETrue if delimiter character, EFalse otherwise + */ + TBool IsDelimiterCharacter( TChar aCharacter ); + + /** + * Checks if character is of extended group + * + * @since TB9.2 + * @param aCharacter Character to test + * @return ETrue if extended character, EFalse otherwise + */ + TBool IsExtendedCharacter( TChar aCharacter ); + + /** + * Checks special command + * + * @since TB9.2 + * @param aEndIndex End index (changes) + * @return Symbian error code on error, KErrNone otherwise + */ + TBool CheckSpecialCommand( TInt& aEndIndex ); + + /** + * Saves character decode state for a found character + * + * @since TB9.2 + * @param aCharacter Character to save a state for + * @param aAddSpecial ETrue to add character for special command, + * EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + void SaveFoundCharDecodeState( TChar aCharacter, + TBool aAddSpecial=ETrue ); + + /** + * Saves character decode state for a not found character + * + * @since TB9.2 + * @param aStartIndex Start index (doesn't change) + * @param aEndIndex End index (changes) + * @return Symbian error code on error, KErrNone otherwise + */ + void SaveNotFoundCharDecodeState(); + + /** + * Find quotes within subcommands + * + * @since TB9.2 + * @param aCharacter Character to check + * @param aStartIndex Start index (doesn't change) + * @param aEndIndex End index (changes) + * @return Symbian error code on error, KErrNone otherwise + */ + TBool FindSubCommandQuotes( TChar aCharacter, TInt aStartIndex, TInt& aEndIndex ); + + /** + * Check if in next subcommand's extended border + * + * @since TB9.2 + * @param aCharacter Extended character to check + * @param aStartIndex Start index (doesn't change) + * @param aEndIndex End index (changes) + * @return ETrue if in next command's extended border, EFalse otherwise + */ + TBool IsExtendedBorder( TChar aCharacter, TInt aStartIndex, TInt& aEndIndex ); + + /** + * Finds subcommand with alphanumeric borders + * + * @since TB9.2 + * @param aCharacter Character to check + * @param aEndIndex End index (changes) + * @return ETrue if alpha border found, EFalse otherwise + */ + TBool FindSubCommandAlphaBorder( TChar aCharacter, TInt& aEndIndex ); + + /** + * Finds subcommand + * + * @since TB9.2 + * @param aEndIndex End index (changes) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt FindSubCommand( TInt& aEndIndex ); + + /** + * Check if "A/" command + * + * @since TB9.2 + * @return ETrue if "A/" command, EFalse otherwise + */ + TBool IsASlashCommand(); + + /** + * Handles "A/" command + * + * @since TB9.2 + * @return ETrue if error reply push started, EFalse otherwise + */ + TBool HandleASlashCommand(); + + /** + * Manages command mode change + * + * @since TB9.2 + * @param aMode Mode to manage + * @return ETrue if command mode change detected, EFalse otherwise + */ + TBool ManageCommandModeChange( TUint aMode ); + + /** + * Reports command mode start/end change + * + * @since TB9.2 + * @param aStart Command mode start if ETrue, end otherwise + * @return None + */ + void ReportCommandModeChange( TBool aStart ); + + /** + * Manages echo mode change + * + * @since TB9.2 + * @param aMode Mode to manage + * @return ETrue if echo mode change detected, EFalse otherwise + */ + TBool ManageEchoModeChange( TUint aMode ); + + /** + * Manages quiet mode change + * + * @since TB9.2 + * @param aMode Mode to manage + * @return ETrue if quiet mode change detected, EFalse otherwise + */ + TBool ManageQuietModeChange( TUint aMode ); + + /** + * Manages verbose mode change + * + * @since TB9.2 + * @param aMode Mode to manage + * @return ETrue if verbose mode change detected, EFalse otherwise + */ + TBool ManageVerboseModeChange( TUint aMode ); + + /** + * Manages character change + * + * @since TB9.2 + * @param aMode Mode to manage + * @return None + */ + void ManageCharacterChange( TUint aMode ); + + /** + * Manages editor mode reply + * + * @since TB9.2 + * @param aStart ETrue if start of editor mode, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ManageEditorModeReply( TBool aStart ); + + /** + * Finds the next content from the input buffer + * + * @since TB9.2 + * @param aStart ETrue if start of editor mode, EFalse otherwise + * @return ETrue if next content found, EFalse otherwise + */ + TBool FindNextContent( TBool aStart ); + +// from base class MDunAtCmdPusher + + /** + * From MDunAtCmdPusher. + * Notifies about end of AT command processing. + * This is after all reply data for an AT command is multiplexed to the + * downstream. + * + * @since TB9.2 + * @param aError Error code of command processing completion + * @return None + */ + TInt NotifyEndOfProcessing( TInt aError ); + + /** + * Notifies about request to stop AT command handling for the rest of the + * command line data + * + * @since TB9.2 + * @return None + */ + void NotifyEndOfCmdLineProcessing(); + + /** + * Notifies about request to peek for the next command + * + * @since TB9.2 + * @return ETrue if next command exists, EFalse otherwise + */ + TBool NotifyNextCommandPeekRequest(); + + /** + * Notifies about editor mode reply + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyEditorModeReply(); + +// from base class MDunAtCmdEchoer + + /** + * Notifies about completed echo in text mode + * + * @since TB9.2 + * @return None + */ + void NotifyEchoComplete(); + +// from base class MDunAtEcomListen + + /** + * From MDunAtEcomListen. + * Notifies about new plugin installation + * + * @since TB9.2 + * @return None + */ + TInt NotifyPluginInstallation( TUid& aPluginUid ); + + /** + * From MDunAtEcomListen. + * Notifies about existing plugin uninstallation + * + * @since TB9.2 + * @return None + */ + TInt NotifyPluginUninstallation( TUid& aPluginUid ); + +// from base class MDunAtModeListen + + /** + * From MDunAtModeListen. + * Gets called on mode status change + * + * @since TB9.2 + * @param aMode Mode to manage + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyModeStatusChange( TUint aMode ); + +private: // data + + /** + * Callback to call when AT command handling status changes + * Not own. + */ + MDunAtCmdStatusReporter* iUpstream; + + /** + * Callback to call when data to push + * Not own. + */ + MDunStreamManipulator* iDownstream; + + /** + * Callback(s) to call when command mode starts or ends + * Usually two needed: one for upstream and second for downstream + */ + RPointerArray iCmdCallbacks; + + /** + * Connection identifier name + */ + const TDesC8* iConnectionName; + + /** + * Current state of AT command handling: active or inactive + */ + TDunState iHandleState; + + /** + * Character for carriage return + */ + TInt8 iCarriageReturn; + + /** + * Character for line feed + */ + TInt8 iLineFeed; + + /** + * Character for backspace + */ + TInt8 iBackspace; + + /** + * Current input to AddDataForParsing() + * Not own. + */ + TDesC8* iInput; + + /** + * Special commands for parsing + */ + RPointerArray iSpecials; + + /** + * Buffer for character echoing + */ + TBuf8 iEchoBuffer; + + /** + * Buffer for ok reply + */ + TBuf8 iOkBuffer; + + /** + * Buffer for error reply + */ + TBuf8 iErrorBuffer; + + /** + * Buffer for AT command (one line) + */ + TBuf8 iLineBuffer; + + /** + * Buffer for last AT command input (for "A/") + */ + TBuf8 iLastBuffer; + + /** + * Buffer for command + */ + TBuf8 iEscapeBuffer; + + /** + * AT command decoding related information + */ + TDunDecodeInfo iDecodeInfo; + + /** + * Information for parsing + */ + TDunParseInfo iParseInfo; + + /** + * Information for editor mode + */ + TDunEditorModeInfo iEditorModeInfo; + + /** + * AT command reply pusher + * Own. + */ + CDunAtCmdPusher* iCmdPusher; + + /** + * AT command reply echoer + * Own. + */ + CDunAtCmdEchoer* iCmdEchoer; + + /** + * URC message handlers + * Own. + */ + RPointerArray iUrcHandlers; + + /** + * ECOM plugin interface status change listener + * Own. + */ + CDunAtEcomListen* iEcomListen; + + /** + * Modem mode status change listener + * Own. + */ + CDunAtModeListen* iModeListen; + + /** + * NVRAM status change listener + * Own. + */ + CDunAtNvramListen* iNvramListen; + + /** + * Flag to mark command mode start/end + */ + TBool iDataMode; + + /** + * Flag to be set on if echo on + */ + TBool iEchoOn; + + /** + * Flag to be set on if quiet mode on + */ + TBool iQuietOn; + + /** + * Flag to be set on if verbose mode on + */ + TBool iVerboseOn; + + /** + * End index for not added data in iCommand + */ + TInt iEndIndex; + + /** + * AT command extension + */ + RATExt iAtCmdExt; + + /** + * AT command extension to common functionality + */ + RATExtCommon iAtCmdExtCommon; + + /** + * Special AT command handler for handling commands like AT&FE0Q0V1&C1&D2+IFC=3,1. + */ + CDunAtSpecialCmdHandler* iAtSpecialCmdHandler; + }; + +#endif // C_CDUNATCMDHANDLER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtCmdPusher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtCmdPusher.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,372 @@ +/* +* Copyright (c) 2008-2010 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: AT command pusher for downstream +* +*/ + +#ifndef C_CDUNATCMDPUSHER_H +#define C_CDUNATCMDPUSHER_H + +#include +#include +#include "DunDataPusher.h" + +class MDunStreamManipulator; + +/** + * Notification interface class for data pushing status changes + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( MDunAtCmdPusher ) + { + +public: + + /** + * Notifies about end of AT command processing. + * This is after all reply data for an AT command is multiplexed to the + * downstream. + * + * @since TB9.2 + * @param aError Error code of command processing completion + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyEndOfProcessing( TInt aError ) = 0; + + /** + * Notifies about request to stop AT command handling for the rest of the + * command line data + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + virtual void NotifyEndOfCmdLineProcessing() = 0; + + /** + * Notifies about request to peek for the next command + * + * @since TB9.2 + * @return ETrue if next command exists, EFalse otherwise + */ + virtual TBool NotifyNextCommandPeekRequest() = 0; + + /** + * Notifies about editor mode reply + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyEditorModeReply() = 0; + + }; + +/** + * Class for AT command URC handler + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtCmdPusher ) : public CActive, + public MDunCompletionReporter + { + +public: + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aCallback Callback to AT command handler + * @param aDownstream Callback to downstream, + * @param aOkBuffer Buffer for ok reply + * @return Instance of self + */ + static CDunAtCmdPusher* NewL( RATExt* aAtCmdExt, + MDunAtCmdPusher* aCallback, + MDunStreamManipulator* aDownstream, + TDesC8* aOkBuffer ); + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aCallback Callback to AT command handler + * @param aDownstream Callback to downstream + * @param aOkBuffer Buffer for ok reply + * @return Instance of self + */ + static CDunAtCmdPusher* NewLC( RATExt* aAtCmdExt, + MDunAtCmdPusher* aCallback, + MDunStreamManipulator* aDownstream, + TDesC8* aOkBuffer ); + + /** + * Destructor. + */ + virtual ~CDunAtCmdPusher(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + void ResetData(); + + /** + * Starts AT command handling + * + * @since TB9.2 + * @param aInput AT command or editor mode input to handle + * @param aNormalMode ETrue if request issue for normal mode + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest( TDesC8& aInput, TBool aNormalMode=ETrue ); + + /** + * Stops AT command handling + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + + /** + * Manages request to abort command handling + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ManageAbortRequest(); + + /** + * Sets end of command line marker on for the possible series of AT + * commands. + * + * @since TB9.2 + * @param aPushLast ETrue to push last reply, EFalse otherwise + * @return None + */ + void SetEndOfCmdLine(); + + /** + * Gets the editor mode status + * + * @since TB9.2 + * @return ETrue if in editor mode, EFalse otherwise + */ + TBool EditorMode(); + +private: + + CDunAtCmdPusher( RATExt* aAtCmdExt, + MDunAtCmdPusher* aCallback, + MDunStreamManipulator* aDownstream, + TDesC8* aOkBuffer ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + + /** + * Sets state to idle and notifies about subcommand handling completion + * + * @since TB9.2 + * @param aError Error code for completion + * @return None + */ + void SetToIdleAndNotifyEnd( TInt aError ); + + /** + * Checks if "OK" (verbose) or "0" (numeric) string or exists at the end of + * buffer and removes it + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt CheckAndRemoveOkString(); + + /** + * Sends reply data to downstream + * + * @since TB9.2 + * @param aRecvBuffer ETrue if using receive buffer + * EFalse if using "OK" buffer + * @return None + */ + void SendReplyData( TBool aRecvBuffer=ETrue ); + + /** + * Manages change in reply type to EReplyTypeOther + * + * @since TB9.2 + * @return None + */ + void ManageReplyTypeChangeToOther(); + + /** + * Manages change in reply type to EReplyTypeOk + * + * @since TB9.2 + * @return None + */ + void ManageReplyTypeChangeToOk(); + + /** + * Manages change in reply type to EReplyTypeError + * + * @since TB9.2 + * @return None + */ + void ManageReplyTypeChangeToError(); + + /** + * Manages change in reply type to EReplyTypeEditor + * + * @since TB9.2 + * @return None + */ + void ManageReplyTypeChangeToEditor(); + + /** + * Manages change in reply type + * + * @since TB9.2 + * @return None + */ + void ManageReplyTypeChange(); + +// from base class CActive + + /** + * From CActive. + * Gets called when AT command handled + * + * @since TB9.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since TB9.2 + * @return None + */ + void DoCancel(); + +// from base class MDunCompletionReporter + + /** + * From MDunCompletionReporter. + * Gets called when data push is complete + * + * @since TB9.2 + * @param aAllPushed ETrue if all in the queue were pushed, EFalse otherwise + * @return None + */ + void NotifyDataPushComplete( TBool aAllPushed ); + +private: // data + + /** + * AT command extension + * Not own. + */ + RATExt* iAtCmdExt; + + /** + * Notification interface class for data pushing status changes + * Not own. + */ + MDunAtCmdPusher* iCallback; + + /** + * Callback to call when data to push + * Not own. + */ + MDunStreamManipulator* iDownstream; + + /** + * Buffer for ok reply + * Not own. + */ + TDesC8* iOkBuffer; + + /** + * Current state of AT command handling: active or inactive + */ + TDunState iAtPushState; + + /** + * Buffer for receiving + */ + TBuf8 iRecvBuffer; + + /** + * Indicates how many bytes of reply left + */ + TInt iReplyBytesLeft; + + /** + * Package for reply bytes left + */ + TPckg iReplyLeftPckg; + + /** + * Reply type for the handled AT command + */ + TATExtensionReplyType iReplyType; + + /** + * Package for reply type for the handled AT command + */ + TPckg iReplyTypePckg; + + /** + * Flag indicating if other than "ERROR" reply already received in the + * command line + */ + TBool iNoErrorReceived; + + /** + * Flag indicating if the last "OK" reply push is started + */ + TBool iLastOkPush; + + /** + * Flag indicating if abort already tried for one command + */ + TBool iCmdAbort; + + /** + * Flag indicating if stop needed after the next reply + */ + TBool iStop; + + /** + * Flag indicating if in editor mode + */ + TBool iEditorMode; + + }; + +#endif // C_CDUNATCMDPUSHER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtEcomListen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtEcomListen.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,185 @@ +/* +* Copyright (c) 2008 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: ECom plugin install/uninstall/version listener +* +*/ + + +#ifndef C_CDUNATECOMLISTEN_H +#define C_CDUNATECOMLISTEN_H + +#include +#include "DunTransporter.h" + +/** + * Notification interface class for ECOM plugin interface status changes + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( MDunAtEcomListen ) + { + +public: + + /** + * Notifies about new plugin installation + * + * @since TB9.2 + * @param aPluginUid UID of installed plugin + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginInstallation( TUid& aPluginUid ) = 0; + + /** + * Notifies about existing plugin uninstallation + * + * @since TB9.2 + * @param aPluginUid UID of uninstalled plugin + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginUninstallation( TUid& aPluginUid ) = 0; + + }; + +/** + * Class for ECom plugin install/uninstall/version listener + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtEcomListen ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aCallback Callback to mode status change + * @return Instance of self + */ + static CDunAtEcomListen* NewL( RATExt* aAtCmdExt, + MDunAtEcomListen* aCallback ); + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aCallback Callback to mode status change + * @return Instance of self + */ + static CDunAtEcomListen* NewLC( RATExt* aAtCmdExt, + MDunAtEcomListen* aCallback ); + + /** + * Destructor. + */ + virtual ~CDunAtEcomListen(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + void ResetData(); + + /** + * Starts waiting for ECom plugin install/uninstall/version status changes + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops waiting for Ecom plugin install/uninstall/version status changes + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunAtEcomListen( RATExt* aAtCmdExt, + MDunAtEcomListen* aCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when plugin installed, uninstalled or changed + * + * @since TB9.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since TB9.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * AT command extension + * Not own. + */ + RATExt* iAtCmdExt; + + /** + * Callback to call when plugin installed, uninstalled or changed + * Not own. + */ + MDunAtEcomListen* iCallback; + + /** + * Current state of ECom interface listening: active or inactive + */ + TDunState iEcomListenState; + + /** + * UID of the installed, uninstalled or changed plugin + */ + TUid iPluginUid; + + /** + * Package for plugin UID + */ + TPckg iPluginUidPckg; + + /** + * Package for ECOM type + */ + TPckg iEcomTypePckg; + + }; + +#endif // C_CDUNATECOMLISTEN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtModeListen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtModeListen.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,172 @@ +/* +* Copyright (c) 2008 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: Modem's mode listener and notifier +* +*/ + + +#ifndef C_CDUNATMODELISTEN_H +#define C_CDUNATMODELISTEN_H + +#include +#include +#include "DunTransporter.h" + +/** + * Notification interface class for modem's mode listener + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( MDunAtModeListen ) + { + +public: + + /** + * Notifies about mode status change + * + * @since TB9.2 + * @param aMode Current modem modes + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyModeStatusChange( TUint aMode ) = 0; + + }; + +/** + * Class for modem's mode listener and notifier + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtModeListen ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * aAtCmdExtCommand AT command extension to common functionality + * aCallback Callback to mode status change + * @return Instance of self + */ + static CDunAtModeListen* NewL( RATExtCommon* aAtCmdExtCommon, + MDunAtModeListen* aCallback ); + + /** + * Two-phased constructor. + * aAtCmdExtCommand AT command extension to common functionality + * aCallback Callback to mode status change + * @return Instance of self + */ + static CDunAtModeListen* NewLC( RATExtCommon* aAtCmdExtCommon, + MDunAtModeListen* aCallback ); + + /** + * Destructor. + */ + virtual ~CDunAtModeListen(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + void ResetData(); + + /** + * Issues request to start monitoring for mode status changes + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops monitoring for mode status changes + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunAtModeListen( RATExtCommon* iAtCmdExtCommon, + MDunAtModeListen* aCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when mode changes + * + * @since TB9.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since TB9.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * AT command extension to common functionality + * Not own. + */ + RATExtCommon* iAtCmdExtCommon; + + /** + * Callback to call when mode status changes + * Not own. + */ + MDunAtModeListen* iCallback; + + /** + * Current state of mode listening: active or inactive + */ + TDunState iModeListenState; + + /** + * Stored mode status change + */ + TUint iMode; + + /** + * Package for mode status changes + */ + TPckg iModePckg; + + }; + +#endif // C_CDUNATMODELISTEN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtNvramListen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtNvramListen.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,151 @@ +/* +* Copyright (c) 2008 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: AT NVRAM status change listener and notifier +* +*/ + +#ifndef C_CDUNATNVRAMLISTEN_H +#define C_CDUNATNVRAMLISTEN_H + +#include +#include +#include "DunTransporter.h" + +/** + * Class for AT NVRAM status change listener + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtNvramListen ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aAtCmdExtCommon Pointer to AT command extension to common + * functionality + * @return Instance of self + */ + static CDunAtNvramListen* NewL( RATExt* aAtCmdExt, + RATExtCommon* aAtCmdExtCommon ); + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aAtCmdExtCommon Pointer to AT command extension to common + * functionality + * @return Instance of self + */ + static CDunAtNvramListen* NewLC( RATExt* aAtCmdExt, + RATExtCommon* aAtCmdExtCommon ); + + /** + * Destructor. + */ + virtual ~CDunAtNvramListen(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + void ResetData(); + + /** + * Starts waiting for NVRAM status changes + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops waiting for NVRAM status changes + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunAtNvramListen( RATExt* aAtCmdExt, + RATExtCommon* aAtCmdExtCommon ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when NVRAM has changed + * + * @since TB9.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since TB9.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * AT command extension + * Not own. + */ + RATExt* iAtCmdExt; + + /** + * AT command extension to common functionality + * Not own. + */ + RATExtCommon* iAtCmdExtCommon; + + /** + * Current state of NVRAM status change listening; active or inactive + */ + TDunState iNvramHandleState; + + /** + * Buffer for NVRAM + */ + TBuf8 iNvramBuffer; + + /** + * Flag to indicate start of receiving + */ + TBool iStarted; + + }; + +#endif // C_CDUNATNVRAMLISTEN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtSpecialCmdHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtSpecialCmdHandler.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,110 @@ +/* +* Copyright (c) 2010 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: Special AT command handler +* +*/ + +#ifndef C_CDUNATSPECIALCMDHANDLER_H +#define C_CDUNATSPECIALCMDHANDLER_H + +#include +#include + +const TInt KLineBufLength = (512 + 1); // Set this the same as in KDunLineBufLength + +/** + * Class for special AT command handler + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtSpecialCmdHandler ) : public CBase + { + +public: + + /** + * Two-phased constructor. + * @param None + * @return Instance of self + */ + static CDunAtSpecialCmdHandler* NewL(); + + /** + * Destructor. + */ + ~CDunAtSpecialCmdHandler(); + +public: + + /** + * Checks if the command has to be treated special way. + * For example in case of MAC, it sends command AT&FE0Q0V1&C1&D2+IFC=3,1. + * meaning there is no delimiters in the command. + * In case of MAC we try to search AT&F (sub command) string from the + * beginning of the command. + * Search is done string basis. + * + * @since TB9.2 + * @param aCharacter Character to add + * @return ETrue if data is ready for comparison, EFalse otherwise + */ + TBool IsCompleteSubCommand( TChar aCharacter ); + + /** + * Resets the buffer used for comparisons + * + * @since TB9.2 + * @return None + */ + void ResetComparisonBuffer(); + +private: + + CDunAtSpecialCmdHandler(); + + void ConstructL(); + + /** + * Defines when comparison is excecuted, checks if the data lengths are + * equal. + * + * @since TB9.2 + * @return ETrue if data is ready for comparison, EFalse otherwise + */ + TBool IsDataReadyForComparison( TInt aLength ); + + /** + * Defines minimum length of the special commands. + * + * @since TB9.2 + * @return Minimum length of the special commands + */ + TInt MinimumLength(); + +private: // data + + /** + * Buffer for temporary AT command input + */ + TBuf8 iBuffer; + + /** + * Special commands for parsing + */ + CDesC8Array *iSpecialCmds; + + }; + +#endif // C_CDUNATSPECIALCMDHANDLER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/inc/DunAtUrcHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/inc/DunAtUrcHandler.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2008 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: AT command URC handler +* +*/ + + +#ifndef C_CDUNATURCHANDLER_H +#define C_CDUNATURCHANDLER_H + +#include +#include "DunDataPusher.h" + +class MDunStreamManipulator; + +/** + * Class for AT command URC handler + * + * @lib dunatext.lib + * @since TB9.2 + */ +NONSHARABLE_CLASS( CDunAtUrcHandler ) : public CActive, + public MDunCompletionReporter + { + +public: + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aStreamCallback Callback to stream + * @return Instance of self + */ + static CDunAtUrcHandler* NewL( RATExt* aAtCmdExt, + MDunStreamManipulator* aStreamCallback ); + + /** + * Two-phased constructor. + * @param aAtCmdExt Pointer to AT command extension + * @param aStreamCallback Callback to stream + * @return Instance of self + */ + static CDunAtUrcHandler* NewLC( RATExt* aAtCmdExt, + MDunStreamManipulator* aStreamCallback ); + + /** + * Destructor. + */ + virtual ~CDunAtUrcHandler(); + + /** + * Resets data to initial values + * + * @since TB9.2 + * @return None + */ + void ResetData(); + + /** + * Starts waiting for an incoming URC message + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops waiting for an incoming URC message + * + * @since TB9.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + + /** + * UID of the owning plugin + * + * @since TB9.2 + * @return UID of the owning plugin + */ + TUid OwnerUid(); + +private: + + CDunAtUrcHandler( RATExt* aAtCmdExt, + MDunStreamManipulator* aStreamCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since TB9.2 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when URC command received + * + * @since TB9.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since TB9.2 + * @return None + */ + void DoCancel(); + +// from base class MDunCompletionReporter + + /** + * From MDunCompletionReporter. + * Gets called when data push is complete + * + * @since TB9.2 + * @param aAllPushed ETrue if all in the queue were pushed, EFalse otherwise + * @return None + */ + void NotifyDataPushComplete( TBool aAllPushed ); + +private: // data + + /** + * AT command extension + * Not own. + */ + RATExt* iAtCmdExt; + + /** + * Callback to call when data to push + * Not own. + */ + MDunStreamManipulator* iStreamCallback; + + /** + * Current state of URC message handling: active or inactive + */ + TDunState iUrcHandleState; + + /** + * Buffer for receiving + */ + TBuf8 iRecvBuffer; + + /** + * UID of the responsible ATEXT plugin + */ + TUid iOwnerUid; + + /** + * Package for owner UID + */ + TPckg iOwnerUidPckg; + + /** + * Flag to indicate start of receiving (for ownership marking) + */ + TBool iStarted; + + }; + +#endif // C_CDUNATURCHANDLER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtCmdEchoer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtCmdEchoer.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2010 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: Echoer for AT commands +* +*/ + +#include "DunAtCmdEchoer.h" +#include "DunDownstream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtCmdEchoer* CDunAtCmdEchoer::NewL( + MDunStreamManipulator* aStreamCallback ) + { + CDunAtCmdEchoer* self = new (ELeave) CDunAtCmdEchoer( aStreamCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtCmdEchoer::~CDunAtCmdEchoer() + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::~CDunAtCmdEchoer()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtCmdEchoer::~CDunAtCmdEchoer() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunAtCmdEchoer::ResetData() + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::ResetData()") )); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtCmdEchoer::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Sends a character to be echoed +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdEchoer::SendEchoCharacter( + const TDesC8* aInput, + MDunAtCmdEchoer* aCallback ) + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::SendEchoCharacter()") )); + if ( iAtEchoState!=EDunStateIdle || iCallback ) + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::SendEchoCharacter() (not ready) complete") )); + return KErrNotReady; + } + iStreamCallback->NotifyDataPushRequest( aInput, this ); + iCallback = aCallback; + iAtEchoState = EDunStateAtCmdEchoing; + FTRACE(FPrint( _L("CDunDownstream::SendEchoCharacter() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunAtCmdEchoer::CDunAtCmdEchoer +// --------------------------------------------------------------------------- +// +CDunAtCmdEchoer::CDunAtCmdEchoer( MDunStreamManipulator* aStreamCallback ) : + iStreamCallback( aStreamCallback ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtCmdEchoer::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtCmdEchoer::ConstructL() + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::ConstructL()") )); + if ( !iStreamCallback ) + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::ConstructL() complete") )); + User::Leave( KErrGeneral ); + } + FTRACE(FPrint( _L("CDunAtCmdEchoer::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtCmdEchoer::Initialize() + { + // Don't initialize iStreamCallback here (it is set through NewL) + iCallback = NULL; + iAtEchoState = EDunStateIdle; + } + +// --------------------------------------------------------------------------- +// From MDunCompletionReporter. +// Gets called when data push is complete +// --------------------------------------------------------------------------- +// +void CDunAtCmdEchoer::NotifyDataPushComplete( TBool /*aAllPushed*/ ) + { + FTRACE(FPrint( _L("CDunAtCmdEchoer::NotifyDataPushComplete()") )); + MDunAtCmdEchoer* callback = iCallback; + iCallback = NULL; + iAtEchoState = EDunStateIdle; + callback->NotifyEchoComplete(); + FTRACE(FPrint( _L("CDunAtCmdEchoer::NotifyDataPushComplete() complete") )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtCmdHandler.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1991 @@ +/* +* Copyright (c) 2009-2010 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: AT command handler and notifier +* +*/ + +/* + * Points to consider: + * - Each of the AT commands sent to ATEXT are converted to upper case form. + * Thus the ATEXT plugins don't need to check for case. The conversion to + * upper case form stops when carriage return or '=' character is found. + */ + +/* + * This file has the following functionality: + * 1) Line buffer filler: + * AddDataForParsing(), ManagePartialCommand(), ExtractLineFromInputBuffer(), + * etc. This buffer is used for parsing. These functions are used for + * splitter-combiner logic described below. CDunAtCmdPusher is used + * separately for each element in the line buffer. + * 2) Parser and splitter-combiner to handle the separater elements (subcommands) + * in the line buffer. When end of line is detected, iEndIndex is used to + * extract the next line in iInput to the line buffer (ManageEndOfCmdHandling() + * and ExtractLineFromInputBuffer()). + * 3) When end of iEndIndex is found (ExtractLineFromInputBuffer()), more data + * is asked from CDunUpstream. + * Note: There is separate handling for "one character input data" and "A/" + * command handling which should be supported only for one line based data + * (ManagePartialCommand()). + */ + +/* + * The AT command handling is splitted to two parts on high level: + * 1) Splitter: splitting the sub-commands in a command line to multiple ones + * for ATEXT to process. + * 2) Combiner: combining the replies coming from ATEXT using a filter + * (the filter categories are explained in DunAtCmdPusher.cpp) + */ + +/* + * Note1: This file uses AT command parsing based on heuristics. + * Refer to test specification if planning to change the heuristic. + * Note2: Input buffer management (ExtractLineFromInputBuffer()) can be tested + * with non-line based terminals such as HyperTerminal or Realterm. + */ + +#include "DunAtCmdHandler.h" +#include "DunAtUrcHandler.h" +#include "DunDownstream.h" +#include "DunDebug.h" + +const TInt8 KDunCancel = 24; // Used for line editing, cancel character +const TInt8 KDunEscape = 27; // Used for editor ending, escape character + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CDunAtCmdHandler* CDunAtCmdHandler::NewL( + MDunAtCmdStatusReporter* aUpstream, + MDunStreamManipulator* aDownstream, + const TDesC8* aConnectionName ) + { + CDunAtCmdHandler* self = new (ELeave) CDunAtCmdHandler( + aUpstream, + aDownstream, + aConnectionName ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtCmdHandler::~CDunAtCmdHandler() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::~CDunAtCmdHandler()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtCmdHandler::~CDunAtCmdHandler() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunAtCmdHandler::ResetData() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // NewL() + DeletePluginHandlers(); + delete iCmdEchoer; + iCmdEchoer = NULL; + delete iNvramListen; + iNvramListen = NULL; + delete iModeListen; + iModeListen = NULL; + delete iEcomListen; + iEcomListen = NULL; + delete iAtSpecialCmdHandler; + iAtSpecialCmdHandler = NULL; + if ( iAtCmdExtCommon.Handle() ) + { + iAtCmdExtCommon.SynchronousClose(); + iAtCmdExtCommon.Close(); + } + if ( iAtCmdExt.Handle() ) + { + iAtCmdExt.SynchronousClose(); + iAtCmdExt.Close(); + } + iSpecials.ResetAndDestroy(); + iSpecials.Close(); + // AddCmdModeCallback() + iCmdCallbacks.Close(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtCmdHandler::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Adds callback for command mode notification +// The callback will be called when command mode starts or ends +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::AddCmdModeCallback( MDunCmdModeMonitor* aCallback ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback()" ) )); + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() (aCallback) not initialized!" ) )); + return KErrGeneral; + } + TInt retTemp = iCmdCallbacks.Find( aCallback ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = iCmdCallbacks.Append( aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::AddCmdModeCallback() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Adds data for parsing and parses if necessary +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::AddDataForParsing( TDesC8& aInput, + TBool& aMoreNeeded ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing()") )); + FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() received (%d bytes):"), aInput.Length() )); + FTRACE(FPrintRaw(aInput) ); + TBool editorMode = iCmdPusher->EditorMode(); + if ( editorMode ) + { + // Note: return here with "no more data needed" and some error to fool + // CDunUpstream into not reissuing the read request. + iCmdPusher->IssueRequest( aInput, EFalse ); + aMoreNeeded = EFalse; + return KErrGeneral; + } + iInput = &aInput; // iInput only for normal mode + // Manage partial AT command + TBool moreNeeded = ManagePartialCommand(); + if ( moreNeeded ) + { + aMoreNeeded = ETrue; + FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() (more partial) complete") )); + return KErrNone; + } + if ( iHandleState != EDunStateIdle ) + { + aMoreNeeded = EFalse; + ManageEndOfCmdHandling( EFalse, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() (not ready) complete") )); + return KErrNotReady; + } + TBool pushStarted = HandleASlashCommand(); + if ( pushStarted ) + { + // Note: return here with "partial input" status to fool CDunUpstream + // into reissuing the read request. The AT command has not really + // started yet so this is necessary. + aMoreNeeded = ETrue; + ManageEndOfCmdHandling( EFalse, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() (A/) complete") )); + return KErrNone; + } + iHandleState = EDunStateAtCmdHandling; + iDecodeInfo.iFirstDecode = ETrue; + iDecodeInfo.iDecodeIndex = 0; + iDecodeInfo.iPrevExists = EFalse; + iParseInfo.iLimit = KErrNotFound; + iParseInfo.iSendBuffer.Zero(); + iEditorModeInfo.iContentFound = EFalse; + HandleNextSubCommand(); + FTRACE(FPrint( _L("CDunAtCmdHandler::AddDataForParsing() complete") )); + aMoreNeeded = EFalse; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Manages request to abort command handling +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::ManageAbortRequest() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageAbortRequest()") )); + // Just forward the request, do no other own processing + TInt retVal = iCmdPusher->ManageAbortRequest(); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageAbortRequest() complete") )); + return retVal; + } + +// --------------------------------------------------------------------------- +// Sends a character to be echoed +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::SendEchoCharacter( const TDesC8* aInput, + MDunAtCmdEchoer* aCallback ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::SendEchoCharacter()") )); + TInt retVal = iCmdEchoer->SendEchoCharacter( aInput, aCallback ); + FTRACE(FPrint( _L("CDunAtCmdHandler::SendEchoCharacter() complete") )); + return retVal; + } + +// --------------------------------------------------------------------------- +// Stops sending of AT command from parse buffer +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::Stop() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::Stop()") )); + // Only stop iCmdPusher here, not iUrcHandlers! + if ( iHandleState != EDunStateAtCmdHandling ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::Stop() (not ready) complete" ))); + return KErrNotReady; + } + iCmdPusher->Stop(); + // The line below is used in the case when this function is called by + // CDunUpstream as a result of "data mode ON" change notification. + // In this case it is possible that HandleNextSubCommand() returns + // without resetting the iSendBuffer because of the way it checks the + // iHandleState. + ManageEndOfCmdHandling( ETrue, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::Stop() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Starts URC message handling +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::StartUrc() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::StartUrc()") )); + TInt i; + TInt count = iUrcHandlers.Count(); + for ( i=0; iIssueRequest(); + if ( retTemp!=KErrNone && retTemp!=KErrNotReady ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::StartUrc() (ERROR) complete") )); + return retTemp; + } + } + FTRACE(FPrint( _L("CDunAtCmdHandler::StartUrc() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops URC message handling +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunAtCmdHandler::StopUrc() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::StopUrc()") )); + TInt i; + TInt retVal = KErrNone; + TInt count = iUrcHandlers.Count(); + for ( i=0; iStop(); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::StopUrc() complete") )); + return retVal; + } + +// --------------------------------------------------------------------------- +// CDunAtCmdHandler::CDunAtCmdHandler +// --------------------------------------------------------------------------- +// +CDunAtCmdHandler::CDunAtCmdHandler( MDunAtCmdStatusReporter* aUpstream, + MDunStreamManipulator* aDownstream, + const TDesC8* aConnectionName ) : + iUpstream( aUpstream ), + iDownstream( aDownstream ), + iConnectionName( aConnectionName ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtCmdHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::ConstructL() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL()") )); + if ( !iUpstream || !iDownstream || !iConnectionName ) + { + User::Leave( KErrGeneral ); + } + // Connect to AT command extension (must succeed) + TInt retTemp = KErrNone; + CleanupClosePushL( iAtCmdExt ); + retTemp = iAtCmdExt.Connect( EDunATExtension, *iConnectionName ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() connect (%d)"), retTemp)); + User::Leave( retTemp ); + } + CleanupClosePushL( iAtCmdExtCommon ); + retTemp = iAtCmdExtCommon.Connect( *iConnectionName ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() common connect (%d)"), retTemp)); + User::Leave( retTemp ); + } + // Create the array of special commands + CreateSpecialCommandsL(); + // Create the plugin handlers + CreatePluginHandlersL(); + // Create the echo handler + iCmdEchoer = CDunAtCmdEchoer::NewL( iDownstream ); + // Create the listeners + iEcomListen = CDunAtEcomListen::NewL( &iAtCmdExt, this ); + iModeListen = CDunAtModeListen::NewL( &iAtCmdExtCommon, this ); + iNvramListen = CDunAtNvramListen::NewL( &iAtCmdExt, &iAtCmdExtCommon ); + iAtSpecialCmdHandler = CDunAtSpecialCmdHandler::NewL(); + // Set the default modes (+report) and characters + GetAndSetDefaultSettingsL(); + // Start listening + iEcomListen->IssueRequest(); + iModeListen->IssueRequest(); + iNvramListen->IssueRequest(); + CleanupStack::Pop( &iAtCmdExtCommon ); + CleanupStack::Pop( &iAtCmdExt ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::Initialize() + { + // Don't initialize iUpstream here (it is set through NewL) + // Don't initialize iDownstream here (it is set through NewL) + // Don't initialize iConnectionName here (it is set through NewL) + iHandleState = EDunStateIdle; + iCarriageReturn = 0; + iLineFeed = 0; + iBackspace = 0; + iInput = NULL; + iDecodeInfo.iFirstDecode = ETrue; + iDecodeInfo.iDecodeIndex = KErrNotFound; + iDecodeInfo.iExtendedIndex = KErrNotFound; + iDecodeInfo.iPrevChar = 0; + iDecodeInfo.iPrevExists = EFalse; + iDecodeInfo.iAssignFound = EFalse; + iDecodeInfo.iInQuotes = EFalse; + iDecodeInfo.iSpecialFound = EFalse; + iDecodeInfo.iCmdsHandled = 0; + iEditorModeInfo.iContentFound = EFalse; + iCmdPusher = NULL; + iEcomListen = NULL; + iModeListen = NULL; + iNvramListen = NULL; + iDataMode = EFalse; + iEchoOn = EFalse; + iQuietOn = EFalse; + iVerboseOn = EFalse; + iEndIndex = KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Creates plugin handlers for this class +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::CreatePluginHandlersL() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::CreatePluginHandlersL()") )); + if ( !iAtCmdExt.Handle() ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::CreatePluginHandlersL() complete") )); + User::Leave( KErrGeneral ); + } + // First create the command reply pusher + CDunAtCmdPusher* cmdPusher = CDunAtCmdPusher::NewLC( &iAtCmdExt, + this, + iDownstream, + &iOkBuffer ); + // Next create the URC handlers + TInt i; + TInt numOfPlugins = iAtCmdExt.NumberOfPlugins(); + for ( i=0; iIsDataInQueue(&iOkBuffer) ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply() (in queue!) complete") )); + return iQuietOn; + } + iOkBuffer.Zero(); + if ( iQuietOn ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply() (quiet) complete") )); + return ETrue; + } + if ( iVerboseOn ) + { + _LIT8( KVerboseOk, "OK" ); + iOkBuffer.Append( iCarriageReturn ); + iOkBuffer.Append( iLineFeed ); + iOkBuffer.Append( KVerboseOk ); + iOkBuffer.Append( iCarriageReturn ); + iOkBuffer.Append( iLineFeed ); + } + else + { + _LIT8( KNumericOk, "0" ); + iOkBuffer.Append( KNumericOk ); + iOkBuffer.Append( iCarriageReturn ); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateOkReply() complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Regenerates the error reply based on settings +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::RegenerateErrorReply() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply()") )); + if ( iDownstream->IsDataInQueue(&iErrorBuffer) ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply() (in queue!) complete") )); + return iQuietOn; + } + iErrorBuffer.Zero(); + if ( iQuietOn ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply() (quiet) complete") )); + return ETrue; + } + if ( iVerboseOn ) + { + _LIT8( KVerboseError, "ERROR" ); + iErrorBuffer.Append( iCarriageReturn ); + iErrorBuffer.Append( iLineFeed ); + iErrorBuffer.Append( KVerboseError ); + iErrorBuffer.Append( iCarriageReturn ); + iErrorBuffer.Append( iLineFeed ); + } + else + { + _LIT8( KNumericError, "4" ); + iErrorBuffer.Append( KNumericError ); + iErrorBuffer.Append( iCarriageReturn ); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::RegenerateErrorReply() complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Gets current mode +// --------------------------------------------------------------------------- +// +TUint CDunAtCmdHandler::GetCurrentModeL( TUint aMask ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL()") )); + TUint maskCheck = aMask & ( ~KSupportedModes ); + if ( maskCheck != 0 ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL() (not supported) complete") )); + User::Leave( KErrNotSupported ); + } + TUint newMode = 0; + TInt retTemp = iAtCmdExtCommon.GetMode( aMask, newMode ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL() (ERROR) complete") )); + User::Leave( retTemp ); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::GetCurrentModeL() complete") )); + return newMode & (KModeChanged-1); + } + +// --------------------------------------------------------------------------- +// Instantiates one URC message handling class instance and adds it to the URC +// message handler array +// --------------------------------------------------------------------------- +// +CDunAtUrcHandler* CDunAtCmdHandler::AddOneUrcHandlerL() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::AddOneUrcHandlerL()") )); + CDunAtUrcHandler* urcHandler = CDunAtUrcHandler::NewLC( &iAtCmdExt, + iDownstream ); + iUrcHandlers.AppendL( urcHandler ); + CleanupStack::Pop( urcHandler ); + FTRACE(FPrint( _L("CDunAtCmdHandler::AddOneUrcHandlerL() complete") )); + return urcHandler; + } + +// --------------------------------------------------------------------------- +// Deletes all instantiated URC message handlers +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::DeletePluginHandlers() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::DeletePluginHandlers()") )); + delete iCmdPusher; + iCmdPusher = NULL; + TInt i; + TInt count = iUrcHandlers.Count(); + for ( i=0; iLength() == KDunChSetMaxCharLen ) + { + EchoCommand(); + // Handle backspace and cancel characters + TBool found = HandleSpecialCharacters(); + if ( found ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() (special) complete") )); + return ETrue; + } + } + TBool moreNeeded = ExtractLineFromInputBuffer(); + if ( moreNeeded ) + { + // More data is not needed with "A/" (no carriage return), check that + // special case here, otherwise continue processing + if ( !IsASlashCommand() ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() (more) complete") )); + return ETrue; + } + } + // If something went wrong, do nothing (return consumed) + if ( iLineBuffer.Length() <= 0 ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() (length) complete") )); + return ETrue; + } + // For other commands, just return with consumed + FTRACE(FPrint( _L("CDunAtCmdHandler::ManagePartialCommand() complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Echoes a command if echo is on +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::EchoCommand() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand()") )); + if ( iInput->Length() > KDunChSetMaxCharLen ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() (wrong length) complete") )); + return EFalse; + } + if ( iEchoOn ) + { + if ( iDownstream->IsDataInQueue(&iEchoBuffer) ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() (in queue!) complete") )); + return EFalse; + } + iEchoBuffer.Copy( *iInput ); + iDownstream->NotifyDataPushRequest( &iEchoBuffer, NULL ); + FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() complete") )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::EchoCommand() (not started) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Handles backspace and cancel characters +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::HandleSpecialCharacters() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters()") )); + if ( iInput->Length() != KDunChSetMaxCharLen ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() (wrong length) complete") )); + return EFalse; + } + if ( (*iInput)[0] == iBackspace ) + { + TInt lineLength = iLineBuffer.Length(); + if ( lineLength > 0 ) + { + iLineBuffer.SetLength( lineLength-1 ); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() (backspace) complete") )); + return ETrue; + } + if ( (*iInput)[0] == KDunCancel ) + { + ManageEndOfCmdHandling( EFalse, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() (cancel) complete") )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialCharacters() complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Extracts line from input buffer to line buffer +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::ExtractLineFromInputBuffer() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer()") )); + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() before (%d bytes):"), iLineBuffer.Length() )); + FTRACE(FPrintRaw(iLineBuffer) ); + // Case1: If no data in iLineBuffer and end-of-line character in iInputBuffer[start]: + // - Skip end-of-line characters, find start-of-line condition, find end-of-line character + // - If partial line found (start-of-line condition and no end-of-line character): + // - Save partial line to iLineBuffer + // - Set iEndIndex to end of iInputBuffer + // - If full line found (start-of-line condition and end-of-line character): + // - Save full line to iLineBuffer + // - Skip multiple end-of-line characters until next start-of-line + // condition or end of iInputBuffer -> save this position to iEndIndex + // Case2: If no data in iLineBuffer and non-end-of-line character in iInputBuffer[start]: + // - Find end-of-line character + // - If partial line found (no end-of-line character): + // - Save partial line to iLineBuffer + // - Set iEndIndex to end of iLineBuffer + // - If full line found (end-of-line character): + // - Save full line to iLineBuffer + // - Skip multiple end-of-line characters until next start-of-line + // condition or end of iInputBuffer -> save this position to iEndIndex + // Case3: If data in iLineBuffer and end-of-line character in iInputBuffer[start]: + // - Skip end-of-line characters + // - Keep string currently in iLineBuffer + // - Skip end-of-line characters until non-end-of-line or end of + // iInputBuffer -> save this position to iEndIndex + // Case4: If data in iLineBuffer and non-end-of-line character in iInputBuffer[start]: + // - Processed the same way as Case1, however "Skip end-of-line characters" does + // not have any effect + if ( iInput->Length() <= 0 ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (wrong length) complete") )); + return ETrue; + } + TBool moreNeeded = ETrue; + TBool copyNeeded = EFalse; + TInt copyLength = KErrNotFound; + TInt lineLength = iLineBuffer.Length(); + TInt lineMaxLength = iLineBuffer.MaxLength(); + TInt freeLineSpace = lineMaxLength - lineLength; + TInt inputLength = iInput->Length(); + TInt startIndex = ( iEndIndex>=0 ) ? iEndIndex : 0; + if ( startIndex >= inputLength ) + { + iEndIndex = KErrNotFound; + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (input end) complete") )); + return ETrue; + } + // Cases here: + // Case1: If no data in iLineBuffer and end-of-line character in iInputBuffer[start] + // Case2: If no data in iLineBuffer and non-end-of-line character in iInputBuffer[start] + // Case3: If data in iLineBuffer and end-of-line character in iInputBuffer[start] + // Case4: If data in iLineBuffer and non-end-of-line character in iInputBuffer[start] + // Summary: Cases 1, 2 and 4 can be combined. Case 3 needs a separate check. + TChar character = (*iInput)[startIndex]; + TBool endOfLine = IsEndOfLine(character); + if ( lineLength>0 && endOfLine ) + { + moreNeeded = HandleSpecialBufferManagement( startIndex, + copyLength, + copyNeeded ); + } + else + { + moreNeeded = HandleGenericBufferManagement( startIndex, + copyLength, + copyNeeded ); + } + if ( copyNeeded && copyLength>0 ) + { + // Check the case copyLength does not fit to iLineBuffer + // This case should be handled by returning "more data needed" + // Also reset the iLineBuffer to ensure the handling doesn't stuck + // for rest of the commands (usability case) + if ( copyLength > freeLineSpace ) + { + iLineBuffer.Zero(); + iEndIndex = KErrNotFound; + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() after (%d bytes):"), iLineBuffer.Length() )); + FTRACE(FPrintRaw(iLineBuffer) ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (overflow) complete") )); + return ETrue; + } + iLineBuffer.Append( &(*iInput)[startIndex], copyLength ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() after (%d bytes):"), iLineBuffer.Length() )); + FTRACE(FPrintRaw(iLineBuffer) ); + } + if ( moreNeeded ) + { + iEndIndex = KErrNotFound; + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (more needed) complete") )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractLineFromInputBuffer() (line found) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Handles generic buffer management +// (explanation in ExtractLineFromInputBuffer()) +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::HandleGenericBufferManagement( TInt& aStartIndex, + TInt& aCopyLength, + TBool& aCopyNeeded ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement()") )); + TInt inputLength = iInput->Length(); + TInt currentIndex = SkipEndOfLineCharacters( aStartIndex ); + if ( currentIndex >= inputLength ) + { + // No data in iLineBuffer and only end-of-lines in new buffer + // return with "need more data" + iEndIndex = inputLength; + aCopyLength = 0; + aCopyNeeded = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (new end for old no data) complete") )); + return ETrue; + } + // No data in iLineBuffer and non-end-of-line character found + // Try to find the first start-of-line condition + TInt lineLength = iLineBuffer.Length(); + if ( lineLength == 0 ) + { + currentIndex = SkipSubCommandDelimiterCharacters( aStartIndex ); + if ( currentIndex >= inputLength ) + { + // No data in iLineBuffer and only end-of-lines+delimiter in new buffer + // return with "need more data" + iEndIndex = inputLength; + aCopyLength = 0; + aCopyNeeded = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (new end+delim for old no data) complete") )); + return ETrue; + } + } + aStartIndex = currentIndex; + // No data in iLineBuffer and other than end-of-line or delimiter character found + // Variable currentIndex is now the start of new command + // Next try to find the end of the command + TInt endIndex = FindEndOfLine( aStartIndex ); + if ( endIndex >= inputLength ) + { + // No data in iLineBuffer and start of command found without end + // return with "need more data" + iEndIndex = inputLength; + aCopyLength = inputLength - aStartIndex; + aCopyNeeded = ETrue; + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (start but no end for old no data) complete") )); + return ETrue; + } + // No data in iLineBuffer and end-of-line character found + // Try to skip possible multiple end-of-line characters + currentIndex = SkipEndOfLineCharacters( endIndex ); + // Variable currentIndex is now either start of next command or end of iInput + // Note that this requires that Case 2 must skip the possible IsDelimiterCharacter()s + iEndIndex = currentIndex; + aCopyLength = endIndex - aStartIndex; + aCopyNeeded = ETrue; + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleGenericBufferManagement() (line found) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Handles special buffer management +// (explanation in ExtractLineFromInputBuffer()) +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::HandleSpecialBufferManagement( TInt aStartIndex, + TInt& aCopyLength, + TBool& aCopyNeeded ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialBufferManagement()") )); + TInt currentIndex = SkipEndOfLineCharacters( aStartIndex ); + // Variable currentIndex is now either start of next command or end of iInput + iEndIndex = currentIndex; + aCopyLength = 0; + aCopyNeeded = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleSpecialBufferManagement() complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Skips end-of-line characters +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::SkipEndOfLineCharacters( TInt aStartIndex ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::SkipEndOfLineCharacters()") )); + TInt foundIndex = iInput->Length(); + TInt inputLength = foundIndex; + for ( TInt i=aStartIndex; iLength(); + TInt foundIndex = inputLength; + for ( TInt i=aStartIndex; iLength(); + TInt foundIndex = inputLength; + for ( TInt i=aStartIndex; i let mixed cases pass + TInt oldLength = iParseInfo.iSendBuffer.Length(); + iParseInfo.iSendBuffer.SetLength( iParseInfo.iLimit ); + iParseInfo.iSendBuffer.UpperCase(); + iParseInfo.iSendBuffer.SetLength( oldLength ); + // Next always send the command to ATEXT + iCmdPusher->IssueRequest( iParseInfo.iSendBuffer ); + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleNextSubCommand() complete") )); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Manages end of AT command handling +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::ManageEndOfCmdHandling( TBool aNotifyLocal, + TBool aNotifyExternal ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEndOfCmdHandling()") )); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEndOfCmdHandling() (loc=%d, ext=%d)"), aNotifyLocal, aNotifyExternal )); + // If iEndIndex is (>=0 && Length(); + TBool subBlock = ( iEndIndex>=0&&iEndIndex0 && !subBlock ) + { + // Line buffer set and no partial subblock, copy to lastbuffer + iLastBuffer.Copy( iLineBuffer ); + } + iLineBuffer.Zero(); + iDecodeInfo.iFirstDecode = ETrue; + iDecodeInfo.iDecodeIndex = 0; + iDecodeInfo.iPrevExists = EFalse; + iParseInfo.iLimit = KErrNotFound; + iParseInfo.iSendBuffer.Zero(); + iEditorModeInfo.iContentFound = EFalse; + iHandleState = EDunStateIdle; + if ( aNotifyLocal ) + { + iCmdPusher->SetEndOfCmdLine(); + } + // iEndIndex must not be reset to KErrNotFound only when + // ExtractLineFromInputBuffer() found the next line + // (when moreNeeded is EFalse) + TBool resetIndex = ETrue; + if ( aNotifyExternal ) + { + TBool moreNeeded = ExtractLineFromInputBuffer(); + if ( moreNeeded ) + { + iUpstream->NotifyParserNeedsMoreData(); + } + else + { + // AppendBlockToInputBuffer() was able to fill with known end, handle next + iHandleState = EDunStateAtCmdHandling; + HandleNextSubCommand(); + resetIndex = EFalse; + } + } + if ( resetIndex ) + { + iEndIndex = KErrNotFound; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEndOfCmdHandling() complete") )); + } + +// --------------------------------------------------------------------------- +// Extracts next subcommand from line buffer to send buffer +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::ExtractNextSubCommand( TBool aPeek ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand()") )); + TDunDecodeInfo oldInfo = iDecodeInfo; + iParseInfo.iLimit = KErrNotFound; + iParseInfo.iSendBuffer.Zero(); + // Find start of subcommand from line buffer + TInt startIndex = FindStartOfSubCommand(); + if ( startIndex < 0 ) + { + RestoreOldDecodeInfo( aPeek, oldInfo ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextDecodedCommand() (no start) complete") )); + return EFalse; + } + iDecodeInfo.iDecodeIndex = startIndex; + TBool specialCmd = EFalse; + TInt endIndex = KErrNotFound; + specialCmd = CheckSpecialCommand( endIndex ); + if ( !specialCmd ) + { + FindSubCommand( endIndex ); + } + TInt lineLength = iLineBuffer.Length(); + TBool inStartLimits = ( startIndex >= 0 && startIndex < lineLength ) ? ETrue : EFalse; + TBool inEndLimits = ( endIndex >= 0 && endIndex < lineLength ) ? ETrue : EFalse; + if ( !inStartLimits || !inEndLimits ) + { + RestoreOldDecodeInfo( aPeek, oldInfo ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand() (no end) complete") )); + return EFalse; + } + TInt cmdLength = endIndex - startIndex + 1; + // If the limit was not already set then do it now + if ( iParseInfo.iLimit < 0 ) + { + iParseInfo.iLimit = cmdLength; + } + // Next create a new command + if ( !iDecodeInfo.iFirstDecode ) + { + _LIT( KAtPrefix, "AT" ); + iParseInfo.iSendBuffer.Append( KAtPrefix ); + if ( !specialCmd ) // Already added with CheckSpecialCommand() + { + iParseInfo.iLimit += 2; // Length of "AT" + } + // Note: The length of iDecodeBuffer is not exceeded here because "AT" + // is added only for the second commands after that. + } + iParseInfo.iSendBuffer.Append( &iLineBuffer[startIndex], cmdLength ); + // Change settings for the next decode round + iDecodeInfo.iFirstDecode = EFalse; + iDecodeInfo.iDecodeIndex = endIndex + 1; + RestoreOldDecodeInfo( aPeek, oldInfo ); + if ( !aPeek ) + { + iDecodeInfo.iCmdsHandled++; + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand() (handled=%d)"), iDecodeInfo.iCmdsHandled )); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ExtractNextSubCommand() complete") )); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Finds the start of subcommand from line buffer +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::FindStartOfSubCommand() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindStartOfSubCommand()") )); + TInt i; + TInt foundIndex = KErrNotFound; + TInt lineLength = iLineBuffer.Length(); + for ( i=iDecodeInfo.iDecodeIndex; i upperBuf; + if ( !iDecodeInfo.iFirstDecode ) + { + // For cases such as "ATM1L3DT*99#" "DT" must have "AT" + _LIT8( KAtPrefix, "AT" ); + upperBuf.Copy( KAtPrefix ); + atPrefixLen = 2; // "AT" + newLength += atPrefixLen; + } + upperBuf.Append( &iLineBuffer[startIndex], newLength ); + upperBuf.UpperCase(); + TInt i; + TInt count = iSpecials.Count(); + for ( i=0; iLength(); + if ( newLength < specialLength ) + { + continue; + } + TInt origLength = newLength; + if ( newLength > specialLength ) + { + upperBuf.SetLength( specialLength ); + } + TInt cmpResult = upperBuf.Compare( *specialCmd ); + upperBuf.SetLength( origLength ); + if ( cmpResult == 0 ) + { + iParseInfo.iLimit = specialLength; + aEndIndex = (origLength-1) + startIndex - atPrefixLen; + FTRACE(FPrint( _L("CDunAtCmdHandler::CheckSpecialCommand() complete") )); + return ETrue; + } + } + FTRACE(FPrint( _L("CDunAtCmdHandler::CheckSpecialCommand() (not found) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Saves character decode state for a found character +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::SaveFoundCharDecodeState( TChar aCharacter, + TBool aAddSpecial ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::SaveFoundCharDecodeState()") )); + iDecodeInfo.iPrevExists = ETrue; + iDecodeInfo.iPrevChar = aCharacter; + if ( aAddSpecial ) + { + iDecodeInfo.iSpecialFound = + iAtSpecialCmdHandler->IsCompleteSubCommand( aCharacter ); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::SaveFoundCharDecodeState() complete") )); + } + +// --------------------------------------------------------------------------- +// Saves character decode state for a not found character +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::SaveNotFoundCharDecodeState() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::SaveNotFoundCharDecodeState()") )); + iDecodeInfo.iPrevExists = EFalse; + // Note: don't set iAssignFound or iInQuotes here + iDecodeInfo.iSpecialFound = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::SaveNotFoundCharDecodeState() complete") )); + } + +// --------------------------------------------------------------------------- +// Find quotes within subcommands +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::FindSubCommandQuotes( TChar aCharacter, + TInt aStartIndex, + TInt& aEndIndex ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes()") )); + if ( aCharacter == '"' ) + { + if ( iParseInfo.iLimit < 0 ) // Only first the first '"' + { + iParseInfo.iLimit = aEndIndex - aStartIndex; + } + iDecodeInfo.iInQuotes ^= ETrue; // EFalse to ETrue or ETrue to EFalse + SaveFoundCharDecodeState( aCharacter, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (quote) complete") )); + return ETrue; + } + // The next ones are those that are not in quotes. + // We still need to save the iParseInfo.iLimit and skip non-delimiter characters. + if ( aCharacter == '=' ) + { + if ( iParseInfo.iLimit < 0 ) // Only first the first '"' + { + iParseInfo.iLimit = aEndIndex - aStartIndex; + } + iDecodeInfo.iAssignFound = ETrue; + SaveFoundCharDecodeState( aCharacter, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (equals) complete") )); + return ETrue; + } + if ( iDecodeInfo.iInQuotes ) + { + SaveNotFoundCharDecodeState(); + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (in quotes) complete") )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandQuotes() (not found) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Check if in next subcommand's extended border +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::IsExtendedBorder( TChar aCharacter, + TInt aStartIndex, + TInt& aEndIndex ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder()") )); + TInt expectedIndex = 0; // "+CMD" when iDecodeInfo.iFirstDecode is EFalse + TInt extendedIndex = aEndIndex - aStartIndex; // absolute index to the extended character + if ( iDecodeInfo.iFirstDecode ) + { + expectedIndex = 2; // "AT+CMD" + } + if ( extendedIndex == expectedIndex ) + { + iDecodeInfo.iExtendedIndex = aEndIndex; + SaveFoundCharDecodeState( aCharacter ); + FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder() (no border normal) complete") )); + return EFalse; + } + // Now suspect border found so peek the next character after the suspected + // extended character. If it is not alphabetical character, return with EFalse. + // This case is to detect the cases such as "AT+VTS={*,3000}", where '*' would + // be the start of the next command in normal cases. + TInt peekIndex = aEndIndex + 1; + TInt lineLength = iLineBuffer.Length(); + if ( peekIndex < lineLength ) + { + TChar nextCharacter = iLineBuffer[peekIndex]; + if ( !nextCharacter.IsAlpha() ) + { + SaveFoundCharDecodeState( aCharacter ); + FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder() (no border special) complete") )); + return EFalse; + } + } + aEndIndex--; + FTRACE(FPrint( _L("CDunAtCmdHandler::IsExtendedBorder() (border) complete") )); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Finds subcommand with alphanumeric borders +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::FindSubCommandAlphaBorder( TChar aCharacter, + TInt& aEndIndex ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder()") )); + if ( iDecodeInfo.iAssignFound && !iDecodeInfo.iInQuotes ) + { + // Check the special case when assigning a number with "basic" command + // and there is no delimiter after it. In this case | + // border must be detected but only for a "basic" command, not for + // extended. + if ( iDecodeInfo.iExtendedIndex<0 && iDecodeInfo.iPrevExists && + iDecodeInfo.iPrevChar.IsDigit() && aCharacter.IsAlpha() ) + { + aEndIndex--; + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (N|A) complete") )); + return ETrue; + } + // The code below is for the following type of cases: + // (do not check alphanumeric borders if "=" set without quotes): + // AT+CMD=a + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (skip) complete") )); + return EFalse; + } + if ( !iDecodeInfo.iPrevExists || !aCharacter.IsAlpha() ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (not found) complete") )); + return EFalse; + } + if ( iDecodeInfo.iPrevChar.IsAlpha() ) + { + // The check below detects the following type of cases + // (note that special handling is needed to separate the Alpha|Alpha boundary): + // AT&FE0 + if ( iDecodeInfo.iSpecialFound ) + { + // Special command was found before and this is Alpha|Alpha boundary -> end + aEndIndex--; + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (special) complete") )); + return ETrue; + } + // The code below is for the following type of cases + // (note there is no border between C|M, for example -> continue): + // ATCMD + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (continue) complete") )); + return EFalse; + } + // The code below is for skipping the following type of cases: + // AT+CMD [the '+' must be skipped] + if ( aEndIndex-1 == iDecodeInfo.iExtendedIndex ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (extended) complete") )); + return EFalse; + } + // The code below is for the following type of cases: + // ATCMD?ATCMD + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommandAlphaBorder() (boundary) complete") )); + aEndIndex--; + return ETrue; + } + +// --------------------------------------------------------------------------- +// Finds subcommand +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::FindSubCommand( TInt& aEndIndex ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand()") )); + TInt startIndex = iDecodeInfo.iDecodeIndex; + aEndIndex = startIndex; + TBool found = EFalse; + TInt lineLength = iLineBuffer.Length(); + iDecodeInfo.iAssignFound = EFalse; + iDecodeInfo.iInQuotes = EFalse; + iDecodeInfo.iExtendedIndex = KErrNotFound; + SaveNotFoundCharDecodeState(); + iAtSpecialCmdHandler->ResetComparisonBuffer(); // just to be sure + for ( ; aEndIndex + if ( IsDelimiterCharacter(character) ) + { + aEndIndex--; + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (delimiter) complete") )); + return KErrNone; + } + // The check below detects the following type of cases: + // ATCMD+CMD [first + as delimiter] + // AT+CMD+CMD [second + as delimiter] + if ( IsExtendedCharacter(character) ) + { + found = IsExtendedBorder( character, startIndex, aEndIndex ); + if ( !found ) + { + continue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (extended) complete") )); + return KErrNone; + } + found = FindSubCommandAlphaBorder( character, aEndIndex ); + if ( found ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (alpha sub) complete") )); + return KErrNone; + } + SaveFoundCharDecodeState( character ); + } + aEndIndex--; + FTRACE(FPrint( _L("CDunAtCmdHandler::FindSubCommand() (not found) complete") )); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Check if "A/" command +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::IsASlashCommand() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::IsASlashCommand()") )); + if ( iLineBuffer.Length() == 2 ) + { + if ( iLineBuffer[1] == '/' && + (iLineBuffer[0] == 'A' || iLineBuffer[0] == 'a') ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::IsASlashCommand() (found) complete") )); + return ETrue; + } + } + FTRACE(FPrint( _L("CDunAtCmdHandler::IsASlashCommand() (not found) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Handles "A/" command +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::HandleASlashCommand() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand()") )); + // If not "A/" command, return + if ( !IsASlashCommand() ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand() (no push) complete") )); + return EFalse; + } + iEndIndex = iInput->Length(); // Causes skipping of last '/' in ManageEndOfCmdHandling() + // If "A/" command and last buffer exist, set the last buffer as the current buffer + if ( iLastBuffer.Length() > 0 ) + { + iLineBuffer.Copy( iLastBuffer ); + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand() (copy) complete") )); + return EFalse; + } + // Last buffer not set so return "ERROR" + iDownstream->NotifyDataPushRequest( &iErrorBuffer, NULL ); + FTRACE(FPrint( _L("CDunAtCmdHandler::HandleASlashCommand() complete") )); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Manages command mode change +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::ManageCommandModeChange( TUint aMode ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange()" ) )); + if ( aMode & KCommandModeChanged ) + { + if ( aMode & KModeCommand ) // command mode ON + { + ReportCommandModeChange( ETrue ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange() command mode changed ON" ) )); + } + else // command mode OFF + { + ReportCommandModeChange( EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange() command mode changed OFF" ) )); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange() (change) complete" ) )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCommandModeChange()" ) )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Reports command mode start/end change +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::ReportCommandModeChange( TBool aStart ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ReportCommandModeChange()" ) )); + TInt i; + TInt count = iCmdCallbacks.Count(); + if ( aStart ) + { + if ( iDataMode ) + { + for ( i=0; iNotifyCommandModeStart(); + } + iDataMode = EFalse; + } + } + else // end + { + if ( !iDataMode ) + { + for ( i=0; iNotifyCommandModeEnd(); + } + iDataMode = ETrue; + } + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ReportCommandModeChange() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Manages echo mode change +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::ManageEchoModeChange( TUint aMode ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange()" ) )); + if ( aMode & KEchoModeChanged ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() checking echo mode..." ) )); + if ( aMode & KModeEcho ) // echo mode ON + { + iEchoOn = ETrue; + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() echo mode changed ON" ) )); + } + else // echo mode OFF + { + iEchoOn = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() echo mode changed OFF" ) )); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() (change) complete" ) )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() complete" ) )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Manages quiet mode change +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::ManageQuietModeChange( TUint aMode ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange()" ) )); + if ( aMode & KQuietModeChanged ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEchoModeChange() checking quiet mode..." ) )); + if ( aMode & KModeQuiet ) // quiet mode ON + { + iAtCmdExt.ReportQuietModeChange( ETrue ); + iQuietOn = ETrue; + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() quiet mode changed ON" ) )); + } + else // quiet mode OFF + { + iAtCmdExt.ReportQuietModeChange( EFalse ); + iQuietOn = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() quiet mode changed OFF" ) )); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() (change) complete" ) )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageQuietModeChange() complete" ) )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Manages quiet mode change +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::ManageVerboseModeChange( TUint aMode ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange()" ) )); + if ( aMode & KVerboseModeChanged ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() checking verbose mode..." ) )); + if ( aMode & KModeVerbose ) // verbose mode ON + { + iAtCmdExt.ReportVerboseModeChange( ETrue ); + iVerboseOn = ETrue; + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyVerboseStatusChange() verbose mode changed ON" ) )); + } + else // verbose mode OFF + { + iAtCmdExt.ReportVerboseModeChange( EFalse ); + iVerboseOn = EFalse; + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyVerboseStatusChange() verbose mode changed OFF" ) )); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() (change) complete" ) )); + return ETrue; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageVerboseModeChange() complete" ) )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Manages character change +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::ManageCharacterChange( TUint aMode ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange()" ) )); + if ( aMode & KCarriageChanged ) + { + iCarriageReturn = aMode & (KModeChanged-1); + iAtCmdExt.ReportCharacterChange( ECharTypeCarriage, iCarriageReturn ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() carriage return changed" ) )); + } + else if ( aMode & KLineFeedChanged ) + { + iLineFeed = aMode & (KModeChanged-1); + iAtCmdExt.ReportCharacterChange( ECharTypeLineFeed, iLineFeed ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() line feed changed" ) )); + } + else if ( aMode & KBackspaceChanged ) + { + iBackspace = aMode & (KModeChanged-1); + iAtCmdExt.ReportCharacterChange( ECharTypeBackspace, iBackspace ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() backspace changed" ) )); + } + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageCharacterChange() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Manages editor mode reply +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::ManageEditorModeReply( TBool aStart ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEditorModeReply()" ) )); + // Two modes possible here: + // 1) Sending data directly from DTE to DCE, i.e. no subsequent data in + // the input buffer -> Reissue read request from DTE. + // 2) Sending data from input buffer to DCE -> Do not reissue read request + // from DTE: send the data in a loop + // In summary: send data byte-by-byte in editor mode until end of input. + // When end of input notify CDunUpstream to reissue the read request. + TBool nextContentFound = FindNextContent( aStart ); + if ( !nextContentFound ) + { + iUpstream->NotifyEditorModeReply( aStart ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEditorModeReply() complete") )); + return KErrNone; + } + // In block mode end the block mode by sending and hope it works. + iEscapeBuffer.Zero(); + iEscapeBuffer.Append( KDunEscape ); + iCmdPusher->IssueRequest( iEscapeBuffer, EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageEditorModeReply() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Finds the next content from the input data +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::FindNextContent( TBool aStart ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindNextContent()" ) )); + if ( !aStart ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::FindNextContent() (skip) complete" ) )); + return iEditorModeInfo.iContentFound; + } + // If iEndIndex is (>=0 && Length(); + TBool subBlock = ( iEndIndex>=0&&iEndIndexEditorMode(); + if ( editorMode ) + { + ManageEditorModeReply( ETrue ); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfProcessing() (editor) complete" ) )); + return KErrNone; + } + HandleNextSubCommand(); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfProcessing() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdPusher. +// Notifies about request to stop AT command handling for the rest of the +// command line data +// --------------------------------------------------------------------------- +// +void CDunAtCmdHandler::NotifyEndOfCmdLineProcessing() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfCmdLineProcessing()" ) )); + ManageEndOfCmdHandling( ETrue, ETrue ); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEndOfCmdLineProcessing() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdPusher. +// Notifies about request to peek for the next command +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdHandler::NotifyNextCommandPeekRequest() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyNextCommandPeekRequest()") )); + TBool extracted = ExtractNextSubCommand( ETrue ); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyNextCommandPeekRequest() complete") )); + return extracted; + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdPusher. +// Notifies about editor mode reply +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::NotifyEditorModeReply() + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEditorModeReply()") )); + TInt retVal = ManageEditorModeReply( EFalse ); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyEditorModeReply() complete") )); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class MDunAtEcomListen. +// Notifies about new plugin installation +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::NotifyPluginInstallation( TUid& /*aPluginUid*/ ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation()" ) )); + CDunAtUrcHandler* urcHandler = NULL; + TRAPD( retTrap, urcHandler=AddOneUrcHandlerL() ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() (trapped!) complete" ) )); + return retTrap; + } + TInt retTemp = urcHandler->IssueRequest(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() (issuerequest) complete" ) )); + return retTemp; + } + TUid ownerUid = urcHandler->OwnerUid(); + iAtCmdExt.ReportListenerUpdateReady( ownerUid, EEcomTypeInstall ); + // As a last step recreate the special command data + retTemp = RecreateSpecialCommands(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() (recreate) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginInstallation() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunAtEcomListen. +// Notifies about existing plugin uninstallation +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::NotifyPluginUninstallation( TUid& aPluginUid ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginUninstallation()" ) )); + TInt i; + TInt count = iUrcHandlers.Count(); + for ( i=count-1; i>=0; i-- ) + { + TUid ownerUid = iUrcHandlers[i]->OwnerUid(); + if ( ownerUid == aPluginUid ) + { + delete iUrcHandlers[i]; + iUrcHandlers.Remove( i ); + iAtCmdExt.ReportListenerUpdateReady( ownerUid, + EEcomTypeUninstall ); + } + } + // As a last step recreate the special command data + TInt retTemp = RecreateSpecialCommands(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginUninstallation() (recreate) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyPluginUninstallation() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunAtModeListen. +// Gets called on mode status change +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdHandler::NotifyModeStatusChange( TUint aMode ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange()") )); + TBool commandModeSet = ManageCommandModeChange( aMode ); + TBool echoModeSet = ManageEchoModeChange( aMode ); + TBool quietModeSet = ManageQuietModeChange( aMode ); + TBool verboseModeSet = ManageVerboseModeChange( aMode ); + if ( quietModeSet || verboseModeSet ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() new settings: E=%d, Q=%d, V=%d"), iEchoOn, iQuietOn, iVerboseOn )); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() (regenerate) mode set" ) )); + RegenerateReplyStrings(); + return KErrNone; + } + // Keep the following after "quietModeSet || verboseModeSet" in order to + // regenerate the reply also if two modes change at the same time + if ( commandModeSet || echoModeSet ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() new settings: E=%d, Q=%d, V=%d"), iEchoOn, iQuietOn, iVerboseOn )); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() mode set" ) )); + return KErrNone; + } + ManageCharacterChange( aMode ); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() new settings: CR=%u, LF=%u, BS=%u"), iCarriageReturn, iLineFeed, iBackspace )); + RegenerateReplyStrings(); + FTRACE(FPrint( _L("CDunAtCmdHandler::NotifyModeStatusChange() complete") )); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtCmdPusher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtCmdPusher.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,521 @@ +/* +* Copyright (c) 2010 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: AT command pusher for downstream +* +*/ + +/* + * Filtering categories for multiple commands on one line (DunAtCmdPusher.cpp) + * (here "OTHER" reply means a reply which is something else than "OK" and "ERROR") + * One reply: OK -> OK + * One reply: OTHER -> OTHER + * One reply: ERROR -> ERROR + * Two replies: OK, OK -> OK + * Two replies: OTHER, OTHER -> OTHER, OTHER + * Two replies: OK, OTHER -> OTHER + * Two replies: OTHER, OK -> OTHER + * Two replies: OK, ERROR -> ERROR + * Two replies: OTHER, ERROR -> OTHER, ERROR + * Note: "OK" replies are skipped. The "OK" string is stripped from the "OTHER" + * replies and manually added the the downstream as the last operation if either + * "OK" or "OTHER" was received before. + */ + +#include "DunAtCmdPusher.h" +#include "DunDownstream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtCmdPusher* CDunAtCmdPusher::NewL( + RATExt* aAtCmdExt, + MDunAtCmdPusher* aCallback, + MDunStreamManipulator* aDownstream, + TDesC8* aOkBuffer ) + { + CDunAtCmdPusher* self = NewLC( aAtCmdExt, + aCallback, + aDownstream, + aOkBuffer ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtCmdPusher* CDunAtCmdPusher::NewLC( + RATExt* aAtCmdExt, + MDunAtCmdPusher* aCallback, + MDunStreamManipulator* aDownstream, + TDesC8* aOkBuffer ) + { + CDunAtCmdPusher* self = new (ELeave) CDunAtCmdPusher( aAtCmdExt, + aCallback, + aDownstream, + aOkBuffer ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtCmdPusher::~CDunAtCmdPusher() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::~CDunAtCmdPusher()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtCmdPusher::~CDunAtCmdPusher() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ResetData() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtCmdPusher::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Starts AT command handling +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdPusher::IssueRequest( TDesC8& aInput, TBool aNormalMode ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest()") )); + FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() send ATEXT:") )); + FTRACE(FPrintRaw(aInput) ); + if ( iAtPushState!=EDunStateIdle && aNormalMode ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() (not ready) complete") )); + return KErrNotReady; + } + if ( iDownstream->IsDataInQueue(&iRecvBuffer) ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() (in queue!) complete") )); + return KErrGeneral; + } + iStatus = KRequestPending; + iAtCmdExt->HandleCommand( iStatus, + aInput, + iRecvBuffer, + iReplyLeftPckg, + iReplyTypePckg ); + SetActive(); + iAtPushState = EDunStateAtCmdPushing; + FTRACE(FPrint( _L("CDunAtCmdPusher::IssueRequest() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops AT command handling +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdPusher::Stop() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::Stop()") )); + SetEndOfCmdLine(); + if ( iAtPushState != EDunStateAtCmdPushing ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::Stop() (not ready) complete" ))); + return KErrNotReady; + } + // As the EDunStateAtCmdHandling can be set even when the actual request + // has completed (when replying with NotifyDataPushComplete() and setting + // idle eventually), cancel the actual operation in DoCancel() + Cancel(); + iAtPushState = EDunStateIdle; + FTRACE(FPrint( _L("CDunAtCmdPusher::Stop() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Manages request to abort command handling +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdPusher::ManageAbortRequest() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest()") )); + if ( iAtPushState != EDunStateAtCmdPushing ) + { + FTRACE(FPrint( _L("CDunAtCmdHandler::ManageAbortRequest() (not ready) complete" ))); + return KErrNotReady; + } + if ( iCmdAbort ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest() (already exists) complete") )); + return KErrAlreadyExists; + } + TInt retTemp = iAtCmdExt->ReportHandleCommandAbort( iStop ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest() (ERROR) complete") )); + return retTemp; + } + iCmdAbort = ETrue; + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageAbortRequest() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets end of command line marker on for the possible series of AT commands. +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::SetEndOfCmdLine() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::SetEndOfCmdLine()") )); + iNoErrorReceived = EFalse; + iLastOkPush = EFalse; + iCmdAbort = EFalse; + iStop = EFalse; + iEditorMode = EFalse; + FTRACE(FPrint( _L("CDunAtCmdPusher::SetEndOfCmdLine() complete") )); + } + +// --------------------------------------------------------------------------- +// Gets the editor mode status +// --------------------------------------------------------------------------- +// +TBool CDunAtCmdPusher::EditorMode() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::EditorMode()") )); + FTRACE(FPrint( _L("CDunAtCmdPusher::EditorMode() complete") )); + return iEditorMode; + } + +// --------------------------------------------------------------------------- +// CDunAtCmdPusher::CDunAtCmdPusher +// --------------------------------------------------------------------------- +// +CDunAtCmdPusher::CDunAtCmdPusher( RATExt* aAtCmdExt, + MDunAtCmdPusher* aCallback, + MDunStreamManipulator* aDownstream, + TDesC8* aOkBuffer ) : + CActive( EPriorityHigh ), + iAtCmdExt( aAtCmdExt ), + iCallback( aCallback ), + iDownstream( aDownstream ), + iOkBuffer( aOkBuffer ), + iReplyLeftPckg( iReplyBytesLeft ), + iReplyTypePckg( iReplyType ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtCmdPusher::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ConstructL() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ConstructL()") )); + if ( !iAtCmdExt || !iCallback || !iDownstream || !iOkBuffer ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunAtCmdPusher::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::Initialize() + { + // Don't initialize iAtCmdExt here (it is set through NewL) + // Don't initialize iCallback here (it is set through NewL) + // Don't initialize iDownstream here (it is set through NewL) + // Don't initialize iOkBuffer here (it is set through NewL) + iAtPushState = EDunStateIdle; + iReplyBytesLeft = 0; + iReplyType = EReplyTypeUndefined; + SetEndOfCmdLine(); + } + +// --------------------------------------------------------------------------- +// Sets state to idle and notifies about subcommand handling completion +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::SetToIdleAndNotifyEnd( TInt aError ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::SetToIdleAndNotifyEnd()") )); + iCmdAbort = EFalse; + iAtPushState = EDunStateIdle; + iCallback->NotifyEndOfProcessing( aError ); + FTRACE(FPrint( _L("CDunAtCmdPusher::SetToIdleAndNotifyEnd() complete") )); + } + +// --------------------------------------------------------------------------- +// Checks if "OK" (verbose) or "0" (numeric) string or exists at the end of +// buffer and removes it +// --------------------------------------------------------------------------- +// +TInt CDunAtCmdPusher::CheckAndRemoveOkString() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString()") )); + TInt recvBufferLength = iRecvBuffer.Length(); + TInt okBufferLength = iOkBuffer->Length(); + // Skip the removal if removing not possible, if removal results in zero + // length (plugin should have used KErrReplyTypeOk) or if string to be + // removed is zero. + // Note also that if plugin sends a final reply when quiet mode is on, DUN + // can't remove the possibly existing result code as it is different from + // iOkReply (zero length). + if ( recvBufferLength<=okBufferLength || okBufferLength<=0 ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString() (skip) complete") )); + return KErrGeneral; + } + TInt lengthWithNoOk = recvBufferLength - okBufferLength; + TPtr8 recvBufferDes( &iRecvBuffer[lengthWithNoOk], okBufferLength, okBufferLength ); + if ( recvBufferDes.Compare(*iOkBuffer) != 0 ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString() (not found) complete") )); + return KErrNotFound; + } + iRecvBuffer.SetLength( lengthWithNoOk ); + FTRACE(FPrint( _L("CDunAtCmdPusher::CheckAndRemoveOkString() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sends reply data to downstream +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::SendReplyData( TBool aRecvBuffer ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData()") )); + TDesC8* sendBuffer = iOkBuffer; + if ( aRecvBuffer ) + { + sendBuffer = &iRecvBuffer; + // Check if last block of long push and remove "OK" if exists + if ( iReplyType==EReplyTypeOther && iReplyBytesLeft==0 ) + { + CheckAndRemoveOkString(); + } + } + FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData() send reply:") )); + FTRACE(FPrintRaw(*sendBuffer) ); + iDownstream->NotifyDataPushRequest( sendBuffer, this ); + FTRACE(FPrint( _L("CDunAtCmdPusher::SendReplyData() complete") )); + } + +// --------------------------------------------------------------------------- +// Manages change in reply type to EReplyTypeOther +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ManageReplyTypeChangeToOther() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOther()") )); + iNoErrorReceived = ETrue; + SendReplyData(); + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOther() complete") )); + } + +// --------------------------------------------------------------------------- +// Manages change in reply type to EReplyTypeOk +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ManageReplyTypeChangeToOk() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOk()") )); + // Skip the "OK" replies if not last. Only push the "OK" reply at the end. + // iStop changes it so that the we have to send the "OK" immediately and + // only stop with NotifyDataPushComplete() + TBool found = iCallback->NotifyNextCommandPeekRequest(); + if ( !found || iStop ) + { + SendReplyData(); + } + else + { + iNoErrorReceived = ETrue; + SetToIdleAndNotifyEnd( KErrNone ); + } + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToOk() complete") )); + } + +// --------------------------------------------------------------------------- +// Manages change in reply type to EReplyTypeError +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ManageReplyTypeChangeToError() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToError()") )); + if ( iNoErrorReceived ) + { + iAtCmdExt->ReportExternalHandleCommandError(); + } + SendReplyData(); + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToError() complete") )); + } + +// --------------------------------------------------------------------------- +// Manages change in reply type to EReplyTypeEditor +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ManageReplyTypeChangeToEditor() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToEditor()") )); + if ( !iEditorMode ) + { + // First change to editor mode: manage it as EReplyTypeOther (prompt) + iEditorMode = ETrue; + ManageReplyTypeChangeToOther(); + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToEditor() (editor) complete") )); + return; + } + // The same reply to editor mode as before: no reply, only notification for + // echo/forwarding purposes + iCallback->NotifyEditorModeReply(); + // Do nothing after notifying. The next ForwardEditorModeInput() triggers + // the next call of this function. + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChangeToEditor() complete") )); + } + +// --------------------------------------------------------------------------- +// Manages change in reply type +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::ManageReplyTypeChange() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange()") )); + switch ( iReplyType ) + { + case EReplyTypeOther: + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeOther") )); + iEditorMode = EFalse; + ManageReplyTypeChangeToOther(); + } + break; + case EReplyTypeOk: + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeOk") )); + iEditorMode = EFalse; + ManageReplyTypeChangeToOk(); + } + break; + case EReplyTypeError: + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeError") )); + iEditorMode = EFalse; + ManageReplyTypeChangeToError(); + } + break; + case EReplyTypeEditor: + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeEditor") )); + ManageReplyTypeChangeToEditor(); + break; + default: + { + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() EReplyTypeUndefined") )); + iEditorMode = EFalse; + SetToIdleAndNotifyEnd( KErrNone ); + } + break; + } + FTRACE(FPrint( _L("CDunAtCmdPusher::ManageReplyTypeChange() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when AT command handled +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::RunL() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::RunL()") )); + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + SetToIdleAndNotifyEnd( retTemp ); + FTRACE(FPrint( _L("CDunAtCmdPusher::RunL() (ERROR) complete (%d)"), retTemp)); + return; + } + ManageReplyTypeChange(); + FTRACE(FPrint( _L("CDunAtCmdPusher::RunL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::DoCancel() + { + FTRACE(FPrint( _L("CDunAtCmdPusher::DoCancel()") )); + iAtCmdExt->CancelHandleCommand(); + FTRACE(FPrint( _L("CDunAtCmdPusher::DoCancel() complete") )); + } + +// --------------------------------------------------------------------------- +// From class MDunCompletionReporter. +// Gets called when data push is complete +// --------------------------------------------------------------------------- +// +void CDunAtCmdPusher::NotifyDataPushComplete( TBool /*aAllPushed*/ ) + { + FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete()") )); + // First check if error or stop condition detected + if ( iReplyType==EReplyTypeError || iStop ) + { + SetEndOfCmdLine(); + iAtPushState = EDunStateIdle; + iCallback->NotifyEndOfCmdLineProcessing(); + FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() (error reply) complete") )); + return; + } + // Secondly check only the case where push restart is required + if ( iReplyType==EReplyTypeOther && iReplyBytesLeft>0 ) + { + iAtCmdExt->GetNextPartOfReply( iRecvBuffer, iReplyBytesLeft ); + SendReplyData(); + FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() (push restart) complete") )); + return; + } + // Next check the case where other than "OK" and "ERROR" reply is received + // and that is the last one in the command line. Then just send "OK". + if ( !iLastOkPush && iReplyType==EReplyTypeOther ) + { + TBool found = iCallback->NotifyNextCommandPeekRequest(); + if ( !found ) + { + // Force iReplyType here to match the correct one in NotifyDataPushComplete() + iReplyType = EReplyTypeOk; + iLastOkPush = ETrue; + SendReplyData( EFalse ); + FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() (last OK) complete") )); + return; + } + // Now the next command was found so just fall through + } + // As a last step just set to idle + SetToIdleAndNotifyEnd( KErrNone ); + FTRACE(FPrint( _L("CDunAtCmdPusher::NotifyDataPushComplete() complete") )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtEcomListen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtEcomListen.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2008 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: ECom plugin install/uninstall/version listener +* +*/ + + +#include "DunAtEcomListen.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtEcomListen* CDunAtEcomListen::NewL( + RATExt* aAtCmdExt, + MDunAtEcomListen* aCallback ) + { + CDunAtEcomListen* self = NewLC( aAtCmdExt, aCallback ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtEcomListen* CDunAtEcomListen::NewLC( + RATExt* aAtCmdExt, + MDunAtEcomListen* aCallback ) + { + CDunAtEcomListen* self = new (ELeave) CDunAtEcomListen( aAtCmdExt, + aCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtEcomListen::~CDunAtEcomListen() + { + FTRACE(FPrint( _L("CDunAtEcomListen::~CDunAtEcomListen()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtEcomListen::~CDunAtEcomListen() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunAtEcomListen::ResetData() + { + FTRACE(FPrint( _L("CDunAtEcomListen::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtEcomListen::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Starts waiting for ECom plugin install/uninstall/version status changes +// --------------------------------------------------------------------------- +// +TInt CDunAtEcomListen::IssueRequest() + { + FTRACE(FPrint( _L("CDunAtEcomListen::IssueRequest()") )); + if ( iEcomListenState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunAtEcomListen::IssueRequest() (not ready) complete") )); + return KErrNotReady; + } + iStatus = KRequestPending; + iAtCmdExt->ReceiveEcomPluginChange( iStatus, iPluginUidPckg, iEcomTypePckg ); + SetActive(); + iEcomListenState = EDunStateEcomListening; + FTRACE(FPrint( _L("CDunAtEcomListen::IssueRequest() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops waiting for Ecom plugin install/uninstall/version status changes +// --------------------------------------------------------------------------- +// +TInt CDunAtEcomListen::Stop() + { + FTRACE(FPrint( _L("CDunAtEcomListen::Stop()") )); + if ( iEcomListenState != EDunStateEcomListening ) + { + FTRACE(FPrint( _L("CDunAtEcomListen::Stop() (not ready) complete" ))); + return KErrNotReady; + } + iAtCmdExt->CancelReceiveEcomPluginChange(); + Cancel(); + iEcomListenState = EDunStateIdle; + FTRACE(FPrint( _L("CDunAtEcomListen::Stop() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunAtEcomListen::CDunAtEcomListen +// --------------------------------------------------------------------------- +// +CDunAtEcomListen::CDunAtEcomListen( RATExt* aAtCmdExt, + MDunAtEcomListen* aCallback ) : + CActive( EPriorityHigh ), + iAtCmdExt( aAtCmdExt ), + iCallback( aCallback ), + iPluginUidPckg( iPluginUid ), + iEcomTypePckg( EEcomTypeUninstall ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtEcomListen::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtEcomListen::ConstructL() + { + FTRACE(FPrint( _L("CDunAtEcomListen::ConstructL()") )); + if ( !iAtCmdExt || !iCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunAtEcomListen::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtEcomListen::Initialize() + { + // Don't initialize iAtCmdExt here (it is set through NewL) + // Don't initialize iCallback here (it is set through NewL) + iEcomListenState = EDunStateIdle; + iPluginUid = TUid::Null(); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when plugin installed, uninstalled or changed +// --------------------------------------------------------------------------- +// +void CDunAtEcomListen::RunL() + { + FTRACE(FPrint( _L("CDunAtEcomListen::RunL()") )); + iEcomListenState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtEcomListen::RunL() (ERROR) complete (%d)"), retTemp )); + return; + } + IssueRequest(); + // Now the operation is either unintall or install of plugin + // Notify parent and ATEXT + if ( iEcomTypePckg() == EEcomTypeUninstall ) + { + iCallback->NotifyPluginUninstallation( iPluginUid ); + } + else if ( iEcomTypePckg() == EEcomTypeInstall ) + { + iCallback->NotifyPluginInstallation( iPluginUid ); + } + else + { + FTRACE(FPrint( _L("CDunAtEcomListen::RunL() (not supported) complete") )); + } + FTRACE(FPrint( _L("CDunAtEcomListen::RunL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunAtEcomListen::DoCancel() + { + FTRACE(FPrint( _L("CDunAtEcomListen::DoCancel()") )); + FTRACE(FPrint( _L("CDunAtEcomListen::DoCancel() complete") )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtModeListen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtModeListen.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2008 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: Modem's mode listener and notifier +* +*/ + + +#include "DunAtModeListen.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtModeListen* CDunAtModeListen::NewL( RATExtCommon* aAtCmdExtCommon, + MDunAtModeListen* aCallback ) + { + CDunAtModeListen* self = NewLC( aAtCmdExtCommon, aCallback ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtModeListen* CDunAtModeListen::NewLC( RATExtCommon* aAtCmdExtCommon, + MDunAtModeListen* aCallback ) + { + CDunAtModeListen* self = new (ELeave) CDunAtModeListen( aAtCmdExtCommon, + aCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtModeListen::~CDunAtModeListen() + { + FTRACE(FPrint( _L("CDunAtModeListen::~CDunAtModeListen()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtModeListen::~CDunAtModeListen() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunAtModeListen::ResetData() + { + FTRACE(FPrint( _L("CDunAtModeListen::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtModeListen::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Issues request to start monitoring for mode status changes +// --------------------------------------------------------------------------- +// +TInt CDunAtModeListen::IssueRequest() + { + FTRACE(FPrint( _L("CDunAtModeListen::IssueRequest()" ))); + if ( iModeListenState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunAtModeListen::IssueRequest() (not ready) complete" ) )); + return KErrNotReady; + } + iStatus = KRequestPending; + iAtCmdExtCommon->ReceiveModeStatusChange( iStatus, iModePckg ); + SetActive(); + iModeListenState = EDunStateModeListening; + FTRACE(FPrint( _L("CDunAtModeListen::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops monitoring for mode status changes +// --------------------------------------------------------------------------- +// +TInt CDunAtModeListen::Stop() + { + FTRACE(FPrint( _L("CDunAtModeListen::Stop()" ))); + if ( iModeListenState != EDunStateModeListening ) + { + FTRACE(FPrint( _L("CDunAtModeListen::Stop() (not ready) complete" ) )); + return KErrNotReady; + } + iAtCmdExtCommon->CancelReceiveModeStatusChange(); + Cancel(); + iModeListenState = EDunStateIdle; + FTRACE(FPrint( _L("CDunAtModeListen::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunAtModeListen::CDunAtModeListen +// --------------------------------------------------------------------------- +// +CDunAtModeListen::CDunAtModeListen( RATExtCommon* aAtCmdExtCommon, + MDunAtModeListen* aCallback ) : + CActive( EPriorityHigh ), + iAtCmdExtCommon( aAtCmdExtCommon ), + iCallback( aCallback ), + iModePckg( iMode ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtModeListen::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtModeListen::ConstructL() + { + FTRACE(FPrint( _L("CDunAtModeListen::ConstructL()") )); + if ( !iAtCmdExtCommon || !iCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunAtModeListen::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtModeListen::Initialize() + { + // Don't initialize iAtCmdExtCommon here (it is set through NewL) + // Don't initialize iCallback here (it is set through NewL) + iModeListenState = EDunStateIdle; + iMode = 0; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when mode changes +// --------------------------------------------------------------------------- +// +void CDunAtModeListen::RunL() + { + FTRACE(FPrint( _L("CDunAtModeListen::RunL()") )); + iModeListenState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtModeListen::RunL() (ERROR) complete (%d)"), retTemp )); + return; + } + FTRACE(FPrint( _L("CDunAtModeListen::RunL() managing 0x%08X" ), iMode )); + iCallback->NotifyModeStatusChange( iMode ); + IssueRequest(); + FTRACE(FPrint( _L("CDunAtModeListen::RunL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunAtModeListen::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtNvramListen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtNvramListen.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,190 @@ +/* +* Copyright (c) 2008 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: AT NVRAM status change listener and notifier +* +*/ + + +#include "DunAtNvramListen.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtNvramListen* CDunAtNvramListen::NewL( RATExt* aAtCmdExt, + RATExtCommon* aAtCmdExtCommon ) + { + CDunAtNvramListen* self = NewLC( aAtCmdExt, aAtCmdExtCommon ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtNvramListen* CDunAtNvramListen::NewLC( RATExt* aAtCmdExt, + RATExtCommon* aAtCmdExtCommon ) + { + CDunAtNvramListen* self = new (ELeave) CDunAtNvramListen( + aAtCmdExt, + aAtCmdExtCommon ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtNvramListen::~CDunAtNvramListen() + { + FTRACE(FPrint( _L("CDunAtNvramListen::~CDunAtNvramListen()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtNvramListen::~CDunAtNvramListen() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunAtNvramListen::ResetData() + { + FTRACE(FPrint( _L("CDunAtNvramListen::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtNvramListen::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Starts waiting for NVRAM status changes +// --------------------------------------------------------------------------- +// +TInt CDunAtNvramListen::IssueRequest() + { + FTRACE(FPrint( _L("CDunAtNvramListen::IssueRequest()") )); + if ( iNvramHandleState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunAtNvramListen::IssueRequest() (not ready) complete") )); + return KErrNotReady; + } + if ( !iStarted ) + { + iAtCmdExtCommon->GetNvramStatus( iNvramBuffer ); + iAtCmdExt->BroadcastNvramStatusChange( iNvramBuffer ); + iStarted = ETrue; + } + iStatus = KRequestPending; + iAtCmdExtCommon->ReceiveNvramStatusChange( iStatus, iNvramBuffer ); + SetActive(); + iNvramHandleState = EDunStateNvramListening; + FTRACE(FPrint( _L("CDunAtNvramListen::IssueRequest() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops waiting for NVRAM status changes +// --------------------------------------------------------------------------- +// +TInt CDunAtNvramListen::Stop() + { + FTRACE(FPrint( _L("CDunAtNvramListen::Stop()") )); + if ( iNvramHandleState != EDunStateNvramListening ) + { + FTRACE(FPrint( _L("CDunAtNvramListen::Stop() (not ready) complete" ))); + return KErrNotReady; + } + iAtCmdExtCommon->CancelReceiveNvramStatusChange(); + Cancel(); + iNvramHandleState = EDunStateIdle; + FTRACE(FPrint( _L("CDunAtNvramListen::Stop() complete") )); + // Note: Don't mark iStarted to EFalse here! + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunAtNvramListen::CDunAtNvramListen +// --------------------------------------------------------------------------- +// +CDunAtNvramListen::CDunAtNvramListen( RATExt* aAtCmdExt, + RATExtCommon* aAtCmdExtCommon ) : + CActive( EPriorityHigh ), + iAtCmdExt( aAtCmdExt ), + iAtCmdExtCommon( aAtCmdExtCommon ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtNvramListen::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtNvramListen::ConstructL() + { + FTRACE(FPrint( _L("CDunAtNvramListen::ConstructL()") )); + if ( !iAtCmdExt || !iAtCmdExtCommon ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunAtNvramListen::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtNvramListen::Initialize() + { + // Don't initialize iAtCmdExt here (it is set through NewL) + // Don't initialize iAtCmdExtCommon here (it is set through NewL) + iNvramHandleState = EDunStateIdle; + iStarted = EFalse; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when NVRAM has changed +// --------------------------------------------------------------------------- +// +void CDunAtNvramListen::RunL() + { + FTRACE(FPrint( _L("CDunAtNvramListen::RunL()") )); + iNvramHandleState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtNvramListen::RunL() (ERROR) complete (%d)"), retTemp )); + return; + } + iAtCmdExt->BroadcastNvramStatusChange( iNvramBuffer ); + IssueRequest(); + FTRACE(FPrint( _L("CDunAtNvramListen::RunL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunAtNvramListen::DoCancel() + { + FTRACE(FPrint( _L("CDunAtNvramListen::DoCancel()") )); + FTRACE(FPrint( _L("CDunAtNvramListen::DoCancel() complete") )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtSpecialCmdHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtSpecialCmdHandler.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,161 @@ +/* +* Copyright (c) 2010 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: Special AT command handler +* +*/ + +#include "DunAtSpecialCmdHandler.h" +#include "DunDebug.h" + +const TInt KDefaultGranularity = 1; + +// AT command(s) below is part of the AT&FE0Q0V1&C1&D2+IFC=3,1. command which +// is sent by MAC. There is no delimiter between "AT&F" and "E0". +// Only list those commands where alphabetical boundary detection is needed +// (i.e. "AT&F0" is not needed as "AT&F0E0" has non-alphabetical boundary) +_LIT8( KSpecialATCmd1, "AT&F" ); + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtSpecialCmdHandler* CDunAtSpecialCmdHandler::NewL() + { + CDunAtSpecialCmdHandler* self = new (ELeave) CDunAtSpecialCmdHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CDunAtSpecialCmdHandler::CDunAtSpecialCmdHandler +// --------------------------------------------------------------------------- +// +CDunAtSpecialCmdHandler::CDunAtSpecialCmdHandler() + { + } + +// --------------------------------------------------------------------------- +// CDunAtSpecialCmdHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtSpecialCmdHandler::ConstructL() + { + iSpecialCmds = new (ELeave) CDesC8ArrayFlat( KDefaultGranularity ); + // Add here all special commands which need to be handled + iSpecialCmds->AppendL( KSpecialATCmd1 ); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtSpecialCmdHandler::~CDunAtSpecialCmdHandler() + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::~CDunAtSpecialCmdHandler()") )); + delete iSpecialCmds; + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::~CDunAtSpecialCmdHandler() complete") )); + } + +// --------------------------------------------------------------------------- +// Checks if the command has to be treated special way. +// For example in case of MAC, it sends command AT&FE0Q0V1&C1&D2+IFC=3,1. +// meaning there is no delimiters in the command. +// In case of MAC we try to search AT&F (sub command) string from the beginning +// of the command. +// Search is done character by character basis. +// --------------------------------------------------------------------------- +// +TBool CDunAtSpecialCmdHandler::IsCompleteSubCommand( TChar aCharacter ) + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand()") )); + iBuffer.Append( aCharacter ); + TBool completeSubCmd = EFalse; + + if( !IsDataReadyForComparison(iBuffer.Length()) ) + { + // No need to do comparison because we don't have correct amount of data + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand(), no need to compare") )); + return completeSubCmd; + } + + TInt count = iSpecialCmds->Count(); + for ( TInt i=0; iMdcaPoint(i).Compare(iBuffer) == 0 ) + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand(), match found, cmd index %d"), i )); + // Reset internal buffer for next comparison. + ResetComparisonBuffer(); + completeSubCmd = ETrue; + break; + } + } + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsCompleteSubCommand() complete") )); + return completeSubCmd; + } + +// --------------------------------------------------------------------------- +// Resets the buffer used for comparisons +// --------------------------------------------------------------------------- +// +void CDunAtSpecialCmdHandler::ResetComparisonBuffer() + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::ResetComparisonBuffer()") )); + iBuffer.FillZ(); + iBuffer.Zero(); + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::ResetComparisonBuffer() complete") )); + } + +// --------------------------------------------------------------------------- +// Defines when comparison is excecuted, checks if the data lengths are equal. +// --------------------------------------------------------------------------- +// +TBool CDunAtSpecialCmdHandler::IsDataReadyForComparison( TInt aLength ) + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsDataReadyForComparison()") )); + TInt count = iSpecialCmds->Count(); + for ( TInt i=0; iMdcaPoint(i).Length() == aLength ) + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsDataReadyForComparison() (ready) complete") )); + return ETrue; + } + } + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::IsDataReadyForComparison() (not ready) complete") )); + return EFalse; + } + +// --------------------------------------------------------------------------- +// Defines minimum length of the special commands. +// --------------------------------------------------------------------------- +// +TInt CDunAtSpecialCmdHandler::MinimumLength() + { + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::MinimumLength()") )); + TInt length = iSpecialCmds->MdcaPoint(0).Length(); + TInt count = iSpecialCmds->Count(); + for ( TInt i=1; iMdcaPoint(i).Length() < length ) + { + length = iSpecialCmds->MdcaPoint(i).Length(); + break; + } + } + FTRACE(FPrint( _L("CDunAtSpecialCmdHandler::MinimumLength() complete") )); + return length; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/atext/src/DunAtUrcHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/atext/src/DunAtUrcHandler.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,228 @@ +/* +* Copyright (c) 2008 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: AT command URC handler +* +*/ + + +#include +#include "DunAtCmdHandler.h" +#include "DunAtUrcHandler.h" +#include "DunDownstream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtUrcHandler* CDunAtUrcHandler::NewL( + RATExt* aAtCmdExt, + MDunStreamManipulator* aStreamCallback ) + { + CDunAtUrcHandler* self = NewLC( aAtCmdExt, aStreamCallback ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunAtUrcHandler* CDunAtUrcHandler::NewLC( + RATExt* aAtCmdExt, + MDunStreamManipulator* aStreamCallback ) + { + CDunAtUrcHandler* self = new (ELeave) CDunAtUrcHandler( aAtCmdExt, + aStreamCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunAtUrcHandler::~CDunAtUrcHandler() + { + FTRACE(FPrint( _L("CDunAtUrcHandler::~CDunAtUrcHandler()") )); + ResetData(); + FTRACE(FPrint( _L("CDunAtUrcHandler::~CDunAtUrcHandler() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunAtUrcHandler::ResetData() + { + FTRACE(FPrint( _L("CDunAtUrcHandler::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // Don't close iAtCmdExt here (it is done in CDunAtCmdHandler)! + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunAtUrcHandler::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Starts waiting for an incoming URC message +// --------------------------------------------------------------------------- +// +TInt CDunAtUrcHandler::IssueRequest() + { + FTRACE(FPrint( _L("CDunAtUrcHandler::IssueRequest()") )); + if ( iUrcHandleState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunAtUrcHandler::IssueRequest() (not ready) complete") )); + return KErrNotReady; + } + iStatus = KRequestPending; + iAtCmdExt->ReceiveUnsolicitedResult( iStatus, iRecvBuffer, iOwnerUidPckg ); + SetActive(); + iUrcHandleState = EDunStateAtUrcHandling; + // Next mark ownership + if ( !iStarted ) + { + TInt retTemp = iAtCmdExt->MarkUrcHandlingOwnership( iOwnerUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtUrcHandler::IssueRequest() (not owned) complete") )); + return KErrGeneral; + } + } + iStarted = ETrue; + FTRACE(FPrint( _L("CDunAtUrcHandler::IssueRequest() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops waiting for an incoming URC message +// --------------------------------------------------------------------------- +// +TInt CDunAtUrcHandler::Stop() + { + FTRACE(FPrint( _L("CDunAtUrcHandler::Stop()") )); + if ( iUrcHandleState != EDunStateAtUrcHandling ) + { + FTRACE(FPrint( _L("CDunAtUrcHandler::Stop() (not ready) complete" ))); + return KErrNotReady; + } + iAtCmdExt->CancelReceiveUnsolicitedResult( iOwnerUid ); + Cancel(); + iUrcHandleState = EDunStateIdle; + FTRACE(FPrint( _L("CDunAtUrcHandler::Stop() complete") )); + // Note: Don't mark iStarted to EFalse here as it is used to get the UID + return KErrNone; + } + +// --------------------------------------------------------------------------- +// UID of the owning plugin +// --------------------------------------------------------------------------- +// +TUid CDunAtUrcHandler::OwnerUid() + { + return iOwnerUid; + } + +// --------------------------------------------------------------------------- +// CDunAtUrcHandler::CDunAtUrcHandler +// --------------------------------------------------------------------------- +// +CDunAtUrcHandler::CDunAtUrcHandler( RATExt* aAtCmdExt, + MDunStreamManipulator* aStreamCallback ) : + CActive( EPriorityHigh ), + iAtCmdExt( aAtCmdExt ), + iStreamCallback( aStreamCallback ), + iOwnerUidPckg( iOwnerUid ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunAtUrcHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CDunAtUrcHandler::ConstructL() + { + FTRACE(FPrint( _L("CDunAtUrcHandler::ConstructL()") )); + if ( !iAtCmdExt || !iStreamCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunAtUrcHandler::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunAtUrcHandler::Initialize() + { + // Don't initialize iStreamCallback here (it is set through NewL) + iUrcHandleState = EDunStateIdle; + iOwnerUid = TUid::Null(); + iStarted = EFalse; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when URC command received +// --------------------------------------------------------------------------- +// +void CDunAtUrcHandler::RunL() + { + FTRACE(FPrint( _L("CDunAtUrcHandler::RunL()") )); + iUrcHandleState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunAtUrcHandler::RunL() (ERROR) complete (%d)"), retTemp)); + return; + } + if ( iRecvBuffer.Length() == 0 ) + { + FTRACE(FPrint( _L("CDunAtUrcHandler::RunL() (empty buffer) complete") )); + return; + } + + // Send received URC message + + iStreamCallback->NotifyDataPushRequest( &iRecvBuffer, this ); + + FTRACE(FPrint( _L("CDunAtUrcHandler::RunL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunAtUrcHandler::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// From class MDunCompletionReporter. +// Gets called when data push is complete +// --------------------------------------------------------------------------- +// +void CDunAtUrcHandler::NotifyDataPushComplete( TBool /*aAllPushed*/ ) + { + FTRACE(FPrint( _L("CDunAtUrcHandler::NotifyDataPushComplete()") )); + IssueRequest(); + FTRACE(FPrint( _L("CDunAtUrcHandler::NotifyDataPushComplete() complete") )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2007 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: +* This file provides the information required for building the +* whole of DUN client +* +*/ + +#include + +PRJ_PLATFORMS + +PRJ_EXPORTS +../../rom/dunclient.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunclient.iby) + +PRJ_MMPFILES +dunclient.mmp + +PRJ_TESTMMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/group/dunclient.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/group/dunclient.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006-2007 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: Project definition file for project DUN client +* +*/ + + +#include +#include + +TARGET dunclient.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x20002775 + +CAPABILITY CAP_ECOM_PLUGIN +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE dunplugin.cpp +SOURCE dunactive.cpp +SOURCE dunclient.cpp +SOURCE proxy.cpp + +START RESOURCE 0x20002775.rss +TARGET dunclient.rsc +END // RESOURCE + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc ../../utils/inc +USERINCLUDE ../../../inc ../../../../inc + +LIBRARY euser.lib +LIBRARY ecom.lib +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/inc/dunactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/inc/dunactive.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,169 @@ +/* +* Copyright (c) 2006-2007 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: Controls asynchronous requests between LOCOD and DUN server +* +*/ + + +#ifndef C_CDUNACTIVE_H +#define C_CDUNACTIVE_H + +#include + +class CDunPlugin; + +/** + * Class for accessing bearer statuses of CDunActive class + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunActive ) + { + +public: + + /** + * Bearer + * + * @since S60 3.2 + * @return Bearer + */ + virtual TLocodBearer Bearer() = 0; + + /** + * Bearer status + * + * @since S60 3.2 + * @return Bearer status + */ + virtual TBool BearerStatus() = 0; + + }; + +/** + * Class that controls asynchronous requests between LOCOD and DUN server + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunActive ) : public CActive, public MDunActive + { + +public: + + /** + * Two-phased constructor. + * @param aPlugin Plugin + * @param aBearer Brearer + * @param aBearerStatus Bearer status + * @return Instance of self + */ + static CDunActive* NewL( CDunPlugin* aPlugin, + TLocodBearer aBearer, + TBool aBearerStatus ); + + /** + * Two-phased constructor. + * @param aPlugin Plugin + * @param aBearer Brearer + * @param aBearerStatus Bearer status + * @return Instance of self + */ + static CDunActive* NewLC( CDunPlugin* aPlugin, + TLocodBearer aBearer, + TBool aBearerStatus ); + + /** + * Destructor. + */ + virtual ~CDunActive(); + + /** + * Request function + * + * @since S60 3.2 + * @return Symbian Error code + */ + TInt ServiceRequest(); + +private: + + CDunActive( CDunPlugin* aPlugin, + TLocodBearer aBearer, + TBool aBearerStatus ); + + void ConstructL(); + +// from base class CActive + + /** + * From CActive. + * Called when read or write operation is ready. + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Cancel current activity. + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +// from base class MDunActive + + /** + * From MDunActive. + * Bearer + * + * @since S60 3.2 + * @return Bearer + */ + TLocodBearer Bearer(); + + /** + * From MDunActive. + * Bearer status + * + * @since S60 3.2 + * @return Bearer status + */ + TBool BearerStatus(); + +private: // data + + /** + * CDunPlugin + * Not own. Passed by DunPlugin + */ + CDunPlugin* iPlugin; + + /** + * Bearer + * Not own. Passed by DunPlugin + */ + TLocodBearer iBearer; + + /** + * Service state + * Not own. Passed by DunPlugin + */ + TBool iBearerStatus; + + }; + +#endif // C_CDUNACTIVE_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/inc/dunclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/inc/dunclient.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2006-2008 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: Main client side interface of DUN +* +*/ + + +#ifndef R_RDUNCLIENT_H +#define R_RDUNCLIENT_H + +#include +#include +#include + +class MDunActive; + +/** + * Main client side interface of DUN + * Manages service from/to LOCOD + * + * @since S60 v3.2 + */ +class RDun : public RSessionBase + { + +public: + + RDun(); + + /** + * This function starts DUN open/close for different medias + * + * @since S60 3.2 + * @param aRequest Request to manage + * @param aReqStatus Active object's request status + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ManageService( MDunActive* aRequest, TRequestStatus& aReqStatus ); + + /** + * This function gets the active connection + * (For testing purposes only). + * + * @since S60 5.0 + * @return Active connection if found, NULL otherwise + */ + TAny* ActiveConnection(); + + /** + * Version number + * + * @since S60 3.2 + * @return Version number of DUN + */ + TVersion Version() const; + + /** + * This function connects to DUN server and creates a new session. + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Connect(); + + }; + +#endif // R_RDUNCLIENT_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/inc/dunplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/inc/dunplugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2006-2007 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: EComm interface implementation and the client side of DUN +* +*/ + + +#ifndef C_CDUNPLUGIN_H +#define C_CDUNPLUGIN_H + +#include +#include +#include "dunclient.h" + +class CDunActive; + +/** + * Class of EComm interface implementation and the client side of DUN + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunPlugin ) : public CLocodServicePlugin + { + +public: + + /** + * Two-phased constructor. + * @param aParams LOCOD service plugin parameters + * @return Instance of self + */ + static CDunPlugin* NewL( TLocodServicePluginParams& aParams ); + + /** + * Destructor. + */ + ~CDunPlugin(); + + /** + * Return owned RServer + * + * @since S60 3.2 + * @return RDun + */ + RDun& Server(); + + /** + * Called by instance of CDunActive to inform Observer of service completed. + * Destruct the active object. + * + * @since S60 3.2 + * @param aRequest Request to service + * @param aError Error value + * @return None + */ + void ServiceCompleted( MDunActive* aRequest, TInt aError ); + +// from base class CLocodServicePlugin + + /** + * From CLocodServicePlugin. + * Implements interface virtual function + * + * @since S60 3.2 + * @param aBearer, BT/IR/USB bearer defined in locodbearer.h + * @param aBearerStatus, the status of this bearer, + ETrue if it is available; + EFalse otherwise. + * @return None + */ + void ManageService( TLocodBearer aBearer, TBool aBearerStatus ); + +private: + + CDunPlugin( TLocodServicePluginParams& aParams ); + + void ConstructL(); + + /** + * Reports completion status to LOCOD + * + * @since S60 3.2 + * @param aBearer Bearer to report + * @param aBearerStatus Bearer status to report + * @param aErr Error condition to report + * @return None + */ + void ReportCompletion( TLocodBearer aBearer, + TBool aBearerStatus, + TInt aErr); + +private: // data + + /** + * Client side of DUN Server + */ + RDun iServer; + + /** + * Array of Active Object + */ + RPointerArray iActiveContainer; + + }; + +#endif // C_CDUNPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/inc/dunserverdef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/inc/dunserverdef.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2008 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: Definitions for server +* +*/ + + +#ifndef DUN_SERVERDEF_H +#define DUN_SERVERDEF_H + +// INCLUDES +#include +#include + +// DATA TYPES +enum TDunIpc + { + EDunFuncManageService, + EDunFuncActiveConnection, // For testing purposes only + EInvalidIpc + }; + +// GLOBAL CONSTANTS + +_LIT( KDialupServerName, "dunserver" ); + +const TUint KDunServerMajorVersionNumber = 2; +const TUint KDunServerMinorVersionNumber = 0; +const TUint KDunServerBuildVersionNumber = 0; + +#endif // DUN_SERVERDEF_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/src/0x20002775.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/src/0x20002775.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2006-2007 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: Resource definitions for project DUN +* +*/ + + +#include +#include + +RESOURCE REGISTRY_INFO theInfo + { + // resource_format_version must always be set as follows + resource_format_version = RESOURCE_FORMAT_VERSION_2; + + // UID for the DLL + dll_uid = 0x20002775; + // Declare array of interface info + interfaces = + { + INTERFACE_INFO + { + // UID of interface that is implemented + interface_uid = KLOCODSERVICEINTERFACEUID; + implementations = + { + // Info for CDunPlugin + IMPLEMENTATION_INFO + { + implementation_uid = KFeatureIdDialupNetworking; + version_no = 1; + display_name = "DialupNetwork Plugin"; + default_data = ""; + opaque_data = ""; + // This implementation CANNOT be overridden by a RAM-based plug-in + rom_only = 1; + } + }; + } + }; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/src/dunactive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/src/dunactive.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2006-2007 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: Controls asynchronous requests between LOCOD and DUN server +* +*/ + + +#include "dunactive.h" +#include "dunplugin.h" +#include "DunDebug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunActive* CDunActive::NewL( CDunPlugin* aPlugin, + TLocodBearer aBearer, + TBool aBearerStatus) + { + CDunActive* self = CDunActive::NewLC( aPlugin, aBearer, aBearerStatus ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunActive* CDunActive::NewLC( CDunPlugin* aPlugin, + TLocodBearer aBearer, + TBool aBearerStatus ) + { + CDunActive* self = new (ELeave) CDunActive( aPlugin, + aBearer, + aBearerStatus ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunActive::~CDunActive() + { + FTRACE(FPrint( _L("CDunActive::~CDunActive()") )); + Cancel(); + FTRACE(FPrint( _L("CDunActive::~CDunActive() complete") )); + } + +// --------------------------------------------------------------------------- +// Request function +// --------------------------------------------------------------------------- +// +TInt CDunActive::ServiceRequest() + { + FTRACE(FPrint( _L("CDunActive::ServiceRequest()") )); + TInt err = KErrNone; + + iStatus = KRequestPending; + err = (iPlugin->Server()).ManageService( this, iStatus ); + SetActive(); + FTRACE(FPrint( _L("CDunActive::ServiceRequest() complete") )); + return err; + } + +// --------------------------------------------------------------------------- +// CDunActive::CDunActive +// --------------------------------------------------------------------------- +// +CDunActive::CDunActive( CDunPlugin* aPlugin, + TLocodBearer aBearer, + TBool aBearerStatus ) + : CActive( EPriorityStandard ), + iPlugin( aPlugin ), + iBearer( aBearer ), + iBearerStatus( aBearerStatus ) + { + } + +// --------------------------------------------------------------------------- +// CDunActive::ConstructL +// --------------------------------------------------------------------------- +// +void CDunActive::ConstructL() + { + FTRACE(FPrint( _L("CDunActive::ConstructL()") )); + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunActive::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Cancel current activity. +// --------------------------------------------------------------------------- +// +void CDunActive::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// From class CActive +// Called when read or write operation is ready. +// --------------------------------------------------------------------------- +// +void CDunActive::RunL() + { + FTRACE(FPrint( _L("CDunActive::RunL()") )); + TInt retVal = iStatus.Int(); + iPlugin->ServiceCompleted( this, retVal ); + FTRACE(FPrint( _L("CDunActive::RunL() complete (%d)"), retVal )); + } + +// --------------------------------------------------------------------------- +// From class MDunActive. +// Bearer +// --------------------------------------------------------------------------- +// +TLocodBearer CDunActive::Bearer() + { + FTRACE(FPrint( _L("CDunActive::Bearer()") )); + FTRACE(FPrint( _L("CDunActive::Bearer() complete") )); + return iBearer; + } + +// --------------------------------------------------------------------------- +// From class MDunActive. +// Bearer status +// --------------------------------------------------------------------------- +// +TBool CDunActive::BearerStatus() + { + FTRACE(FPrint( _L("CDunActive::BearerStatus()") )); + FTRACE(FPrint( _L("CDunActive::BearerStatus() complete") )); + return iBearerStatus; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/src/dunclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/src/dunclient.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2006-2007 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: Main client side interface of DUN +* +*/ + + +#include "dunclient.h" +#include "dunserverdef.h" +#include "DunDebug.h" +#include "dunactive.h" + +const TInt KDunRetryCount = 3; +const TInt KDunNumOfMessageSlots = 4; + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Create server thread/process +// --------------------------------------------------------------------------- +// +static TInt StartServer() + { + FTRACE(FPrint( _L("StartServer()") )); + TInt retVal = KErrNone; + TRequestStatus statusStarted; + + RProcess server; + retVal = server.Create( KDialupServerName, KNullDesC, EOwnerThread ); + + if ( retVal != KErrNone ) + { + FTRACE(FPrint( _L("StartServer() complete (%d)"), retVal )); + return retVal; + } + + TRequestStatus stat; + server.Rendezvous( stat ); + + if ( stat != KRequestPending ) + { + server.Kill( 0 ); //abort startup + } + else + { + server.Resume(); //logon OK - start the server + } + + User::WaitForRequest( stat ); //wait the start or death of the server + + /* + we can't use the 'exit reason' if the server panicked as this + is the panic 'reason' and may be '0' which cannot be distinguished + from KErrNone + */ + retVal = stat.Int(); + if ( server.ExitType() == EExitPanic ) + { + retVal = KErrServerTerminated; + } + + server.Close(); + FTRACE(FPrint( _L("StartServer() complete (%d)"), retVal )); + return retVal; + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// RDun::RDun() +// --------------------------------------------------------------------------- +// +RDun::RDun() + { + } + +// --------------------------------------------------------------------------- +// This function starts DUN open/close for different medias +// --------------------------------------------------------------------------- +// +TInt RDun::ManageService( MDunActive* aRequest, TRequestStatus& aReqStatus ) + { + FTRACE(FPrint( _L("RDun::ManageService()") )); + SendReceive( EDunFuncManageService, + TIpcArgs(aRequest->Bearer(), + aRequest->BearerStatus()), + aReqStatus ); + FTRACE(FPrint( _L("RDun::ManageService() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// This function gets the active connection +// --------------------------------------------------------------------------- +// +TAny* RDun::ActiveConnection() + { + FTRACE(FPrint( _L("RDun::ActiveConnection()") )); + TAny* connId = NULL; + TPckg connIdPckg( connId ); + SendReceive( EDunFuncActiveConnection, + TIpcArgs(&connIdPckg) ); + FTRACE(FPrint( _L("RDun::ActiveConnection() complete") )); + return connId; + } + +// --------------------------------------------------------------------------- +// Version number +// --------------------------------------------------------------------------- +// +TVersion RDun::Version() const + { + FTRACE(FPrint( _L("RDun::Version()") )); + FTRACE(FPrint( _L("RDun::Version() complete") )); + return ( TVersion(KDunServerMajorVersionNumber, + KDunServerMinorVersionNumber, + KDunServerBuildVersionNumber) ); + } + +// --------------------------------------------------------------------------- +// This function connects to DUN server and creates a new session. +// --------------------------------------------------------------------------- +// +TInt RDun::Connect() + { + FTRACE(FPrint( _L("RDun::Connect()") )); + TInt retry; + TInt retVal = KErrNone; + for ( retry=KDunRetryCount; retry>=0; retry-- ) + { + retVal=CreateSession( KDialupServerName, + TVersion(KDunServerMajorVersionNumber, + KDunServerMinorVersionNumber, + KDunServerBuildVersionNumber), + KDunNumOfMessageSlots ); + if ( retVal == KErrNotFound || retVal == KErrServerTerminated ) + { + retVal = StartServer(); + if ( retVal!=KErrNone && retVal!=KErrAlreadyExists ) + { + FTRACE(FPrint( _L("RDun::Connect() complete (%d)"), retVal )); + return retVal; + } + } + else // KErrNone, or other error code. + { + FTRACE(FPrint( _L("RDun::Connect() complete (%d)"), retVal )); + return retVal; + } + } + FTRACE(FPrint( _L("RDun::Connect() complete (%d)"), retVal )); + return retVal; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/src/dunplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/src/dunplugin.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,166 @@ +/* +* Copyright (c) 2006-2007 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: EComm interface implementation and the client side of DUN +* +*/ + + +#include "dunplugin.h" +#include "dunactive.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunPlugin* CDunPlugin::NewL( TLocodServicePluginParams& aParams ) + { + CDunPlugin* self = new (ELeave) CDunPlugin( aParams ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunPlugin::~CDunPlugin() + { + FTRACE(FPrint( _L("CDunPlugin::~CDunPlugin()") )); + iActiveContainer.ResetAndDestroy(); + iActiveContainer.Close(); + if ( iServer.Handle() != KNullHandle ) + { + iServer.Close(); + } + FTRACE(FPrint( _L("CDunPlugin::~CDunPlugin() complete") )); + } + +// --------------------------------------------------------------------------- +// Return owned RServer +// --------------------------------------------------------------------------- +// +RDun& CDunPlugin::Server() + { + FTRACE(FPrint( _L("CDunPlugin::Server()") )); + FTRACE(FPrint( _L("CDunPlugin::Server() complete") )); + return iServer; + } + +// --------------------------------------------------------------------------- +// Called by instance of CDunActive to inform Observer of service completed. +// Destruct the active object. +// --------------------------------------------------------------------------- +// +void CDunPlugin::ServiceCompleted( MDunActive* aRequest, TInt aError ) + { + FTRACE(FPrint( _L("CDunPlugin::ServiceCompleted()") )); + TInt i; + TLocodBearer bearer = aRequest->Bearer(); + TBool status = aRequest->BearerStatus(); + for ( i=iActiveContainer.Count()-1; i>=0; i-- ) + { + if ( iActiveContainer[i] == aRequest ) + { + delete iActiveContainer[i]; + iActiveContainer.Remove( i ); + break; + } + } + ReportCompletion( bearer, status, aError ); + FTRACE(FPrint( _L("CDunPlugin::ServiceCompleted() completed (%d)"), aError )); + } + +// --------------------------------------------------------------------------- +// From class CLocodServicePlugin. +// Implements interface virtual function +// --------------------------------------------------------------------------- +// +void CDunPlugin::ManageService( TLocodBearer aBearer, TBool aBearerStatus ) + { + FTRACE(FPrint( _L("CDunPlugin::ManageService()") )); + TInt retTemp; + if ( iServer.Handle() == KNullHandle ) + { + retTemp = iServer.Connect(); + if ( retTemp != KErrNone ) + { + ReportCompletion( aBearer, aBearerStatus, retTemp ); + FTRACE(FPrint( _L("CDunPlugin::ManageService() (failed!) complete (%d)"), retTemp )); + return; + } + } + CDunActive* stateRequest = NULL; + TRAPD( retTrap, stateRequest=CDunActive::NewL( this, + aBearer, + aBearerStatus )); + if ( retTrap != KErrNone ) + { + ReportCompletion( aBearer, aBearerStatus, retTrap ); + FTRACE(FPrint( _L("CDunPlugin::ManageService() (failed!) complete (%d)"), retTrap )); + return; + } + if ( !stateRequest ) + { + ReportCompletion( aBearer, aBearerStatus, KErrGeneral ); + FTRACE(FPrint( _L("CDunPlugin::ManageService() (failed!) complete (%d)"), KErrGeneral )); + return; + } + retTemp = iActiveContainer.Append( stateRequest ); + if ( retTemp != KErrNone ) + { + ReportCompletion( aBearer, aBearerStatus, retTemp ); + FTRACE(FPrint( _L("CDunPlugin::ManageService() (failed!) complete (%d)"), retTemp )); + return; + } + stateRequest->ServiceRequest(); + FTRACE(FPrint( _L("CDunPlugin::ManageService() complete") )); + } + +// --------------------------------------------------------------------------- +// CDunPlugin::CDunPlugin +// --------------------------------------------------------------------------- +// +CDunPlugin::CDunPlugin( TLocodServicePluginParams& aParams ) + : CLocodServicePlugin( aParams ) + { + } + +// --------------------------------------------------------------------------- +// CDunPlugin::ConstructL +// --------------------------------------------------------------------------- +// +void CDunPlugin::ConstructL() + { + FTRACE(FPrint( _L("CDunPlugin::ConstructL()") )); + FTRACE(FPrint( _L("CDunPlugin::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Reports completion status to LOCOD +// --------------------------------------------------------------------------- +// +void CDunPlugin::ReportCompletion( TLocodBearer aBearer, + TBool aBearerStatus, + TInt aErr) + { + FTRACE(FPrint( _L("CDunPlugin::ReportCompletion()") )); + Observer().ManageServiceCompleted( aBearer, + aBearerStatus, + ImplementationUid(), + aErr); + FTRACE(FPrint( _L("CDunPlugin::ReportCompletion() completed (%d)"), aErr )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/client/src/proxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/client/src/proxy.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2006-2007 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: Export ECom interface implementations +* +*/ + + +#include //ECom header file +#include "dunplugin.h" + +// --------------------------------------------------------------------------- +// An array of TImplementationProxy objects which onnect each +// implemeation with its instantiation function +// --------------------------------------------------------------------------- +// +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( KFeatureIdDialupNetworking, CDunPlugin::NewL ) + }; + +// --------------------------------------------------------------------------- +// Exported proxy function to resolve instantiation methods for an Ecom +// plug-in DLL +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt & aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / + sizeof( TImplementationProxy ); + return ImplementationTable; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 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: +* +*/ +PRJ_PLATFORMS + +PRJ_EXPORTS + +// bld.inf list of the modules to be build using this file +// NOTE: order of this list must be same as the correct building order + +#include "../atext/group/bld.inf" +#include "../utils/group/bld.inf" +#include "../server/group/bld.inf" +#include "../client/group/bld.inf" +#include "../plugins/group/bld.inf" diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/group/dun.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/group/dun.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component dun + +source \sf\mw\remoteconn\localconnectivityservice\dun + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/bwins/dunbtu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/bwins/dunbtu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?NewLocalPluginL@@YAPAVMDunLocalMediaPlugin@@XZ @ 1 NONAME ; class MDunLocalMediaPlugin * NewLocalPluginL(void) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/bwins/duniru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/bwins/duniru.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?NewLocalPluginL@@YAPAVMDunLocalMediaPlugin@@XZ @ 1 NONAME ; class MDunLocalMediaPlugin * NewLocalPluginL(void) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/bwins/dunusbu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/bwins/dunusbu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?NewLocalPluginL@@YAPAVMDunLocalMediaPlugin@@XZ @ 1 NONAME ; class MDunLocalMediaPlugin * NewLocalPluginL(void) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/eabi/dunbtu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/eabi/dunbtu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + _Z15NewLocalPluginLv @ 1 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/eabi/duniru.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/eabi/duniru.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + _Z15NewLocalPluginLv @ 1 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/eabi/dunusbu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/eabi/dunusbu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + _Z15NewLocalPluginLv @ 1 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2006 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: +* This file provides the information required for building the whole of +* plugins. +* +*/ + +#include + +PRJ_PLATFORMS + +PRJ_EXPORTS +#ifdef __BT +../../rom/dunbt.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunbt.iby) +#endif +#ifdef __IRDA +../../rom/dunir.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunir.iby) +#endif +#ifdef __USB +../../rom/dunusb.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunusb.iby) +#endif + +PRJ_MMPFILES + +#ifdef __BT +dunbt.mmp +#endif +#ifdef __IRDA +dunir.mmp +#endif +#ifdef __USB +dunusb.mmp +#endif + +PRJ_TESTMMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/group/dunbt.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/group/dunbt.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2006-2007 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: Project definition file for project DUN BT plugin. +* +*/ + + +#include + +TARGET dunbt.dll +TARGETTYPE DLL +UID 0x101F6E2D 0x101F6E2B + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src/bt +SOURCE DunBtPlugin.cpp +SOURCE DunBtListen.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc/bt ../../utils/inc +USERINCLUDE ../../../inc + +LIBRARY euser.lib +LIBRARY esock.lib +LIBRARY btengdiscovery.lib +LIBRARY bluetooth.lib +LIBRARY dunutils.lib +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/group/dunir.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/group/dunir.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2006-2007 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: Project definition file for project DUN IR plugin +* +*/ + + +#include + +TARGET dunir.dll +TARGETTYPE DLL +UID 0x101F6E2D 0x101FBAEB + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src/ir +SOURCE DunIrPlugin.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc/ir ../../utils/inc +USERINCLUDE ../../../inc + +LIBRARY euser.lib +LIBRARY c32.lib +LIBRARY dunutils.lib +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/group/dunusb.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/group/dunusb.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2006-2007 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: Project definition file for project DUN USB plugin +* +*/ + + +#include + +TARGET dunusb.dll +TARGETTYPE DLL +UID 0x101F6E2D 0x101F6E2F + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src/usb +SOURCE DunUsbPlugin.cpp +SOURCE DunUsbListen.cpp +SOURCE DunUsbConfig.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc/usb ../../utils/inc +USERINCLUDE ../../../inc + +LIBRARY euser.lib +LIBRARY c32.lib +LIBRARY usbman.lib +LIBRARY dunutils.lib +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/bt/DunBtListen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/inc/bt/DunBtListen.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2006-2008 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: DUN Bluetooth plugin's listener +* +*/ + + +#ifndef C_CDUNBTLISTEN_H +#define C_CDUNBTLISTEN_H + +#include +#include "DunPlugin.h" +#include "DunTransporter.h" + +class TBtPortEntity; + +enum TBtListenState + { + EBtListenStateIdle, + EBtListenStateListening + }; + +/** + * DUN Bluetooth plugin's listener class + * This class starts listening on a created BT RFComm channel and notifies + * parent (CDunBtPlugin) when new connection is detected. Also registers and + * unregisters DUN SDP record. + * + * @lib dunbt.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunBtListen ) : public CActive, + public MDunServAdvMon + { + +public: + + /** + * Two-phased constructor. + * @param aServer Server + * @param aParent Callback interface to parent + * @param aTransporter Transporter + * @param aEntity Data socket entity + * @return Instance of self + */ + static CDunBtListen* NewL( MDunServerCallback* aServer, + MDunListenCallback* aParent, + CDunTransporter* aTransporter, + TBtPortEntity& aEntity ); + + /** + * Destructor. + */ + virtual ~CDunBtListen(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Registers DUN and starts to listen. + * Registers itself to SDP and BT manager, opens a socket + * and starts to listen it. + * + * @since S60 3.2 + * @return None + */ + void IssueRequestL(); + + /** + * Stops listening + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunBtListen( MDunServerCallback* aServer, + MDunListenCallback* aParent, + CDunTransporter* aTransporter, + TBtPortEntity& aEntity ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Starts dialup service advertisement + * + * @since S60 3.2 + * @param aInUse ETrue is returned if all RFCOMM channels in use. + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StartServiceAdvertisement( TBool& aInUse ); + + /** + * Stops dialup service advertisement + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StopServiceAdvertisement(); + + /** + * Method which reserves local RFCOMM channel (from possible channels 1-30) + * and returns it to client. + * + * @since S60 3.2 + * @param aSocketServer Handle to connected socket server. + * @param aListenSocket Socket which is initiated for listening. + * @param aChannelNum RFCOMM channel which is reserved for listening. + * @param aInUse ETrue is returned if all RFCOMM channels in use. + * @return KErrNone if OK, else value indicating error situation. + */ + TInt ReserveLocalChannel( RSocketServ& aSocketServ, + RSocket& aListenSocket, + TUint& aChannelNum, + TBool& aInUse ); + + /** + * Tries to bind to a fixed port and if that fails with + * KRfcommPassiveAutoBind. This is for spec breaking solutions like the + * OSX Leopard. + * + * @since S60 5.0 + * @param aListenSocket Listen socket for Bind() + * @param aSockAddr Address for the socket + * (must be set for KRfcommPassiveAutoBind) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoExtendedBind( RSocket& aListenSocket, TRfcommSockAddr& aSockAddr ); + +// from base class CActive + + /** + * From CActive. + * Called when a service is requested via BT. + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Cancel current activity. + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +// from base class MDunServAdvMon + + /** + * From MDunServAdvMon. + * Gets called when advertisement status changes to start + * + * @since S60 5.0 + * @param aCreation ETrue if channel creation + * EFalse if channel free + * @return None + */ + void NotifyAdvertisementStart( TBool aCreation ); + + /** + * From MDunServAdvMon. + * Gets called when advertisement status changes to end + * + * @since S60 5.0 + * @return None + */ + void NotifyAdvertisementEnd(); + +private: // data + + /** + * Callback to call when notification via MDunServerCallback to be made + * Not own. + */ + MDunServerCallback* iServer; + + /** + * Callback to call when notification via MDunListenCallback to be made + * Not own. + */ + MDunListenCallback* iParent; + + /** + * Transporter to use for network side communication + * Not own. + */ + CDunTransporter* iTransporter; + + /** + * Data socket entity for actual data transfer + * This will be valid after CDunBtListen reacts to new data in + * listener socket + */ + TBtPortEntity& iEntity; + + /** + * Current state of listening: active or inactive + */ + TBtListenState iListenState; + + /** + * Listener socket that will listen for activity in RFComm channel + */ + RSocket iListenSocket; + + /** + * Socket server used to reserve RFComm channel and creating data socket + */ + RSocketServ iSockServer; + + /** + * BT engine's Bluetooth discovery functionality + * Used for registering/unregistering SDP record + * Own. + */ + CBTEngDiscovery* iDiscovery; + + /** + * Local BT channel number + * Set to reserved RFComm channel and used to register SDP record + */ + TUint iChannelNum; + + /** + * Handle to the reserver SDP channel + * Set when SDP record registered + */ + TSdpServRecordHandle iSDPHandleDun; + + }; + +#endif // C_CDUNBTLISTEN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/bt/DunBtPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/inc/bt/DunBtPlugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,310 @@ +/* +* Copyright (c) 2006-2008 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: DUN Bluetooth plugin +* +*/ + + +#ifndef C_CDUNBTPLUGIN_H +#define C_CDUNBTPLUGIN_H + +#include +#include +#include "DunTransporter.h" +#include "DunPlugin.h" + +/** + * Cleanup information for AllocateChannelL(). + * This data is needed to clean up partially constructed data in + * NotifyChannelAllocate() when a leave occurs in channel creation. + * + * @lib dunbt.lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS( TBtCleanupInfo ) + { + +public: + + /** + * Flag to indicate whether or not a new entity was created + */ + TBool iNewEntity; + + /** + * Index to the position of the found entity + */ + TInt iEntityIndex; + + }; + +/** + * DUN BT plugin's port entity + * This class is used to keep track of N number of BT ports and RFCOMM + * channel numbers associated to them. + * + * @lib dunbt.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TBtPortEntity ) + { + +public: + + /** + * RFCOMM channel number for BT local media side + */ + TInt iChannelNum; + + /** + * Port for BT local media side + */ + RSocket iBTPort; + + }; + +/** + * DUN Bluetooth plugin's main class + * This class creates new transporter channel when new data is detected by + * CDunBtListen class and acts on transporter's state changes. Also acts on + * DUN server's requests. + * + * @lib dunbt.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunBtPlugin ) : public CBase, + public MDunLocalMediaPlugin, + public MDunListenCallback, + public MDunConnMon + { + +public: + + CDunBtPlugin(); + + /** + * Destructor. + */ + virtual ~CDunBtPlugin(); + +private: + + /** + * State of this plugin + * + * @since S60 3.2 + * @return State of plugin + */ + TDunPluginState PluginState(); + + /** + * Constructs a listener object for this plugin + * + * @since S60 3.2 + * @return None + */ + void ConstructListenerL(); + + /** + * Sets new state + * New state must be one more than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReportStateChangeUp( TDunPluginState aPluginState ); + + /** + * Sets new state + * New state must be one less than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReportStateChangeDown( TDunPluginState aPluginState ); + + /** + * Allocates a free channel + * + * @since S60 3.2 + * @param aNoFreeChans ETrue if no free channels, EFalse otherwise + * @param aCleanupInfo Cleanup information + * @return None + */ + void AllocateChannelL( TBool& aNoFreeChans, TBtCleanupInfo& aCleanupInfo ); + + /** + * Frees existing channels + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt FreeChannels(); + + /** + * Uninitializes this plugin + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Uninitialize(); + + /** + * Gets port's index and entity by connection ID + * + * @since S60 3.2 + * @param aConnId Connection ID of the connection to find + * @param aEntity Returned port entity + * @return KErrNotFound if entity not found, found index otherwise + */ + TInt GetPortByConnId( TConnId aConnId, TBtPortEntity*& aEntity ); + + /** + * Gets first free port's index and entity + * + * @since S60 3.2 + * @param aEntity Returned port entity + * @return KErrNotFound if entity not found, found index otherwise + */ + TInt GetFirstFreePort( TBtPortEntity*& aEntity ); + + /** + * Sets modem's MSC (Modem Status Command) + * + * @since S60 3.2 + * @param aEntity Port entity for which to change signal + * @param aSignal Signal to set to high or low + * @param aSignalOn ETrue if signal wanted high, otherwise low + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetRFCOMMStatusCommand( TBtPortEntity& aEntity, + TUint8 aSignal, + TBool aSignalOn ); + + /** + * Manages advertiser for channel free operation + * + * @since S60 5.0 + * @return None + */ + void ManageAdvertiserFreeOperationL(); + + /** + * Cleans partial created channel data based on TATExtCleanupInfo + * + * @since S60 5.0 + * @param aCleanupInfo Cleanup information + * @return None + */ + void CleanPartialChanneldata( TBtCleanupInfo& aCleanupInfo ); + +// from base class MDunLocalMediaPlugin + + void ConstructL( MDunServerCallback* aServer, + CDunTransporter* aTransporter ); + + /** + * From MDunLocalMediaPlugin. + * Gets called when server changes a plugin's state + * + * @since S60 3.2 + * @param aPluginState New changed state + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyServerStateChange( TDunPluginState aPluginState ); + + /** + * From MDunLocalMediaPlugin. + * Gets called when server needs to know the active connection + * (For testing purposes only) + * + * @since S60 5.0 + * @return Active connection, NULL otherwise + */ + TConnId ActiveConnection(); + +// from base class MDunListenCallback + + /** + * From MDunListenCallback. + * Gets called when new channel must be created + * + * @since S60 3.2 + * @param aNoFreeChans ETrue if no free channels, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyChannelAllocate( TBool& aNoFreeChans ); + + /** + * From MDunListenCallback. + * Gets called when an existing channel must be freed + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyChannelFree(); + +// from base class MDunConnMon + + /** + * From MDunConnMon. + * Gets called when line status changes or when any type of error is + * detected + * + * @since S60 3.2 + * @param aConnId Connection ID for callback + * @param aConnReason Reason for progress change + * @return None + */ + void NotifyProgressChangeL( TConnId aConnId, + TDunConnectionReason aConnReason ); + +private: // data + + /** + * Callback to call when notification via MDunServerCallback to be made + * Not own. + */ + MDunServerCallback* iServer; + + /** + * Listener for detecting new data in RFComm channel + * Notifies this class about new data + * Own. + */ + CDunBtListen* iBTListen; + + /** + * Data socket entity for actual data transfer + * This will be valid after CDunBtListen reacts to new data in + * listener socket + */ + TBtPortEntity iEntity; + + /** + * Array of RSocket port(s) entities for BT local media side + */ + RArray iBTPorts; + + /** + * Transporter to use for network side communication + * Not own. + */ + CDunTransporter* iTransporter; + + }; + +#endif // C_CDUNBTPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/ir/DunIrPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/inc/ir/DunIrPlugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,177 @@ +/* +* Copyright (c) 2006-2008 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: DUN Infrared plugin +* +*/ + + +#ifndef C_CDUNIRPLUGIN_H +#define C_CDUNIRPLUGIN_H + +#include +#include +#include "DunTransporter.h" +#include "DunPlugin.h" + +/** + * DUN Infrared plugin's main class + * This class creates new transporter channel as soon as listening is + * required by DUN server + * + * @lib dunir.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunIrPlugin ) : public CBase, + public MDunLocalMediaPlugin, + public MDunConnMon + { + +public: + + CDunIrPlugin(); + + /** + * Destructor. + */ + virtual ~CDunIrPlugin(); + +private: + + /** + * State of this plugin + * + * @since S60 3.2 + * @return State of plugin + */ + TDunPluginState PluginState(); + + /** + * Constructs a listener object for this plugin + * + * @since S60 3.2 + * @return None + */ + TInt ConstructListener(); + + /** + * Sets new state + * New state must be one more than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReportStateChangeUp( TDunPluginState aPluginState ); + + /** + * Sets new state + * New state must be one less than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReportStateChangeDown( TDunPluginState aPluginState ); + + /** + * Initializes one infrared port with role DCE + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt InitPort(); + + /** + * Allocates a channel + * + * @since S60 3.2 + * @return None + */ + void AllocateChannelL(); + + /** + * Uninitializes this plugin + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Uninitialize(); + +// from base class MDunLocalMediaPlugin + + void ConstructL( MDunServerCallback* aServer, + CDunTransporter* aTransporter ); + + /** + * From MDunLocalMediaPlugin. + * Gets called when server changes a plugin's state + * + * @since S60 3.2 + * @param aPluginState New changed state + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyServerStateChange( TDunPluginState aPluginState ); + + /** + * From MDunLocalMediaPlugin. + * Gets called when server needs to know the active connection + * (For testing purposes only) + * + * @since S60 5.0 + * @return Active connection, NULL otherwise + */ + TConnId ActiveConnection(); + +// from base class MDunConnMon + + /** + * From MDunConnMon. + * Gets called when line status changes or when any type of error is + * detected + * + * @since S60 3.2 + * @param aConnId Connection ID for callback + * @param aConnReason Reason for progress change + * @return None + */ + void NotifyProgressChangeL( TConnId aConnId, + TDunConnectionReason aConnReason ); + +private: // Data + + /** + * Callback to call when notification MDunServerCallback via to be made + * Not own. + */ + MDunServerCallback* iServer; + + /** + * Communications server used to load IRCOMM and open IR port + */ + RCommServ iCommServer; + + /** + * RComm port for infrared local media side + */ + RComm iIrPort; + + /** + * Transporter to use for network side communication + * Not own. + */ + CDunTransporter* iTransporter; + + }; + +#endif // C_CDUNIRPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/usb/DunUsbConfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/inc/usb/DunUsbConfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,207 @@ +/* +* Copyright (c) 2006-2007 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: DUN USB configuration accessor and listener +* +*/ + + +#ifndef C_CDUNUSBCONFIG_H +#define C_CDUNUSBCONFIG_H + +#include +#include +#include "DunPlugin.h" + +enum TUsbConfigState + { + EUsbConfigStateIdle, + EUsbConfigStateWaiting + }; + +/** + * Notification interface class to report USB ACM configuration change + * + * @lib dunusb.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunUsbConfig ) + { + +public: + + /** + * Gets called when one or more ACM configurations are added + * + * @since S60 3.2 + * @param aIndex Index (also port number) of added ACM configuration + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyConfigAddition( TInt aIndex ) = 0; + + /** + * Gets called when one or more ACM configurations are removed + * + * @since S60 3.2 + * @param aIndex Index (also port number) of removed ACM configuration + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyConfigRemoval( TInt aIndex ) = 0; + + }; + +/** + * Class for detecting USB ACM configuration change + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunUsbConfig ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aServer Server + * @param aCallback Pointer to listener callback + * @param aProtocol Protocol number to listen + * @return Instance of self + */ + static CDunUsbConfig* NewL( MDunServerCallback* aServer, + MDunUsbConfig* aCallback, + TUint8 aProtocol ); + + /** + * Destructor. + */ + virtual ~CDunUsbConfig(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Compares initialized protocol number to configuration by index + * + * @since S60 3.2 + * @param aIndex Index for which to compare protocol number + * @param aValidity If initialized protocol matched at aIndex then ETrue + * @return Symbian error code on error, KErrNone otherwise + */ + TInt GetConfigValidityByIndex( TInt aIndex, TBool& aValidity ); + + /** + * Starts listening for ACM configuration changes + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops listening for ACM configuration changes + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunUsbConfig( MDunServerCallback* aServer, + MDunUsbConfig* aCallback, + TUint8 aProtocol ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /* + * Gets current ACM configuration + */ + TInt GetConfiguration( TPublishedAcmConfigs& aConfig ); + +// from base class CActive + + /** + * From CActive. + * Gets called when ACM configuration changes + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback to call when notification via MDunServerCallback to be made + * Not own. + */ + MDunServerCallback* iServer; + + /** + * Callback to call when notification(s) via MDunUsbConfig to be made + */ + MDunUsbConfig* iCallback; + + /** + * Current state of configuration waiting: active or inactive + */ + TUsbConfigState iConfigState; + + /* + * Protocol number of USB ACM to which listening is done + */ + TUint8 iProtocol; + + /** + * ACM config from the previous Get() + * Used to check whether configs are added or removed and also array data + * needed for check in the removal case + */ + TPublishedAcmConfigs iConfig; + + /* + * ACM configuration property + */ + RProperty iAcmProperty; + + /* + * Flag to indicate if configuration already received + */ + TBool iConfigExist; + + }; + +#endif // C_CDUNUSBCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/usb/DunUsbListen.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/inc/usb/DunUsbListen.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2006-2007 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: DUN USB plugin's listener +* +*/ + + +#ifndef C_CDUNUSBLISTEN_H +#define C_CDUNUSBLISTEN_H + +#include +#include +#include +#include "DunPlugin.h" + +enum TUsbListenState + { + EUsbListenStateIdle, + EUsbListenStateListening + }; + +/** + * DUN USB plugin's listener class + * This class starts listening for USB device state to change to configured. + * When change to configured is detected, parent (CDunUsbPlugin) is notified + * to create a channel. Also when device state is no longer configured, + * parent (CDunUsbPlugin) is notified to remove a channel. + * + * @lib dunusb.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunUsbListen ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aServer Server + * @param aParent Creator of this instance + * @param aUsbServer USB server + * @return Instance of self + */ + static CDunUsbListen* NewL( MDunServerCallback* aServer, + MDunListenCallback* aParent, + RUsb& aUsbServer ); + + /** + * Destructor. + */ + virtual ~CDunUsbListen(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * IssueRequest to USB server for device state change notifications + * + * @return KErrAlreadyExists if device state configured, + * KErrNone otherwise + */ + TInt IssueRequestL(); + + /** + * Stops listening + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunUsbListen( MDunServerCallback* aServer, + MDunListenCallback* aParent, + RUsb& aUsbServer ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Activates listening request + * + * @since S60 3.2 + * @return KErrNotReady if already active, KErrNone otherwise + */ + TInt Activate(); + +// from base class CActive + + /** + * From CActive. + * Called when read or write operation is ready. + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Cancel current activity. + * + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback to call when notification via MDunServerCallback to be made + * Not own. + */ + MDunServerCallback* iServer; + + /** + * Callback to call when notification via MDunListenCallback to be made + * Not own. + */ + MDunListenCallback* iParent; + + /** + * Current state of listening: active or inactive + */ + TUsbListenState iListenState; + + /** + * USB server (USB manager) needed for device state notifications + * Device states needed to create transporter channel + */ + RUsb& iUsbServer; + + /** + * Device state of USB set when RUsb::DeviceStateNotification completes + */ + TUsbDeviceState iDeviceState; + + /** + * Previous state of USB set when RUsb::DeviceStateNotification completes + */ + TUsbDeviceState iDeviceStatePrev; + + }; + +#endif // C_CDUNUSBLISTEN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/inc/usb/DunUsbPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/inc/usb/DunUsbPlugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,362 @@ +/* +* Copyright (c) 2006-2008 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: DUN USB plugin +* +*/ + + +#ifndef C_CDUNUSBPLUGIN_H +#define C_CDUNUSBPLUGIN_H + +#include +#include +#include "DunTransporter.h" +#include "DunUsbListen.h" +#include "DunUsbConfig.h" +#include "DunPlugin.h" + +/** + * DUN USB plugin's port entity + * This class is used to keep track of N number of USB ports and port + * numbers associated to them (for CDunUsbConfig's purposes). + * + * @lib dunusb.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TUsbPortEntity ) + { + +public: + + /** + * Port number for USB local media side + */ + TInt iPortNum; + + /** + * Port for USB local media side + */ + RComm iUsbPort; + + }; + +/** + * DUN USB plugin's main class + * This class creates new transporter channel(s) when configured USB is + * detected by CDunUsbListen class and acts on transporter's state changes. + * Also acts on DUN server's requests. + * + * @lib dunusb.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunUsbPlugin ) : public CBase, + public MDunLocalMediaPlugin, + public MDunListenCallback, + public MDunBufferCorrection, + public MDunConnMon, + public MDunUsbConfig + { + +public: + + CDunUsbPlugin(); + + /** + * Destructor. + */ + virtual ~CDunUsbPlugin(); + +private: + + /** + * State of this plugin + * + * @since S60 3.2 + * @return State of plugin + */ + TDunPluginState PluginState(); + + /** + * Constructs a listener object for this plugin + * + * @since S60 3.2 + * @return None + */ + void ConstructListenerL(); + + /** + * Initializes USB by loading LDD + * + * @since S60 3.2 + * @return None + */ + void InitUsbL(); + + /** + * Initializes all usable USB ports for DUN + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt InitPorts(); + + /** + * Creates empty usable USB ports that can be used by DUN + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt CreateAllPorts(); + + /** + * Initializes one USB port for DUN + * + * @since S60 3.2 + * @param aEntity Pointer to port entity + * @return Symbian error code on error, KErrNone otherwise + */ + TInt InitOnePort( TUsbPortEntity* aEntity ); + + /** + * Sets channel for one USB port + * + * @since S60 3.2 + * @param aEntity Pointer to port entity + * @return None + */ + void SetChannelL( TUsbPortEntity* aEntity ); + + /** + * Adds skipped error code to Transporter + * The skipped error is added to local media's read and write operations + * + * @since S60 3.2 + * @param aError Skipped error code to add + * @param aComm RComm object for which to add the error code + * @return None + */ + void AddSkippedErrorL( TInt aError, RComm* aComm ); + + /** + * Sets new state + * New state must be one more than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReportStateChangeUp( TDunPluginState aPluginState ); + + /** + * Sets new state + * New state must be one less than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReportStateChangeDown( TDunPluginState aPluginState ); + + /** + * Frees existing channels + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt FreeChannels(); + + /** + * Uninitializes this plugin + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Uninitialize(); + + /** + * Gets port's index and entity by connection ID + * + * @since S60 3.2 + * @param aConnId Connection ID of the connection to find + * @param aEntity Returned port entity + * @return KErrNotFound if entity not found, found index otherwise + */ + TInt GetEntityByConnId( TConnId aConnId, TUsbPortEntity*& aEntity ); + + /** + * Gets port's entity by port number + * + * @since S60 3.2 + * @param aPortNum Port number of the connection to find + * @param aEntity Returned port entity + * @return KErrNotFound if entity not found, found index otherwise + */ + TInt GetEntityByPortNumber( TInt aPortNum, TUsbPortEntity*& aEntity ); + + /** + * Gets first free port's index and entity + * + * @since S60 3.2 + * @param aEntity Returned port entity + * @return KErrNotFound if entity not found, found index otherwise + */ + TInt GetFirstFreeEntity( TUsbPortEntity*& aEntity ); + +// from base class MDunLocalMediaPlugin + + void ConstructL( MDunServerCallback* aServer, + CDunTransporter* aTransporter ); + + /** + * From MDunLocalMediaPlugin. + * Gets called when server changes a plugin's state + * + * @since S60 3.2 + * @param aPluginState New changed state + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyServerStateChange( TDunPluginState aPluginState ); + + /** + * From MDunLocalMediaPlugin. + * Gets called when server needs to know the active connection + * (For testing purposes only) + * + * @since S60 5.0 + * @return Active connection, NULL otherwise + */ + TConnId ActiveConnection(); + +// from base class MDunListenCallback + + /** + * From MDunListenCallback. + * Gets called when new channel must be created + * + * @since S60 3.2 + * @param aNoFreeChans ETrue if no free channels, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyChannelAllocate( TBool& aNoFreeChans ); + + /** + * From MDunListenCallback. + * Gets called when an existing channel must be freed + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyChannelFree(); + +// from base class MDunConnMon + + /** + * From MDunConnMon. + * Gets called when line status changes or when any type of error is + * detected + * + * @since S60 3.2 + * @param aConnId Connection ID for callback + * @param aConnReason Reason for progress change + * @return None + */ + void NotifyProgressChangeL( TConnId aConnId, + TDunConnectionReason aConnReason ); + +// from base class MDunBufferCorrection + + /** + * Gets called when request to change local media's buffer size + * + * @since S60 3.2 + * @param aLength Suggested buffer length that will be used if no + * correction done + * @return New (corrected) buffer length + */ + TInt NotifyBufferCorrection( TInt aLength ); + +// from base class MDunUsbConfig + + /** + * Gets called when one or more ACM configurations are added + * + * @since S60 3.2 + * @param aIndex Index (also port number) of added ACM configuration + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyConfigAddition( TInt aIndex ); + + /** + * Gets called when one or more ACM configurations are removed + * + * @since S60 3.2 + * @param aIndex Index (also port number) of removed ACM configuration + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyConfigRemoval( TInt aIndex ); + +private: // data + + /** + * Callback to call when notification via MDunServerCallback to be made + * Not own. + */ + MDunServerCallback* iServer; + + /** + * Listener for detecting attached USB cable and configured ACM + * Notifies this class to create new channel + * Own. + */ + CDunUsbListen* iUsbListen; + + /** + * Listener and accessor for detecting USB ACM configuration change + * Own. + */ + CDunUsbConfig* iUsbConfig; + + /** + * Communications server used to load ECACM and open USB port(s) + * Also used to get port information to calculate number of supported ACMs + */ + RCommServ iCommServer; + + /** + * USB server (USB manager) needed for device state notifications + * Device states needed to create transporter channel + */ + RUsb iUsbServer; + + /** + * Array of port(s) for USB local media side + */ + RArray iUsbPorts; + + /** + * Transporter to use for network side communication + * Not own. + */ + CDunTransporter* iTransporter; + + /** + * Flag to be set on if CDunUsbPlugin is waiting for shutdown. + * This flag is used to skip subsequent higher-level error codes after + * driver based error occurred. + */ + TBool iShutdown; + + }; + +#endif // C_CDUNUSBPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/src/bt/DunBtListen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/src/bt/DunBtListen.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,464 @@ +/* +* Copyright (c) 2006-2008 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: DUN Bluetooth plugin's listener +* +*/ + + +#include +#include +#include +#include +#include "DunPlugin.h" +#include "DunBtListen.h" +#include "DunBtPlugin.h" +#include "DunDebug.h" + +const TInt KListenQueSize = 1; +const TInt KDunFixedChannel = 22; // Hack/kludge for Apple Bug ID 6527598 + +//Service Class Bits supported by DUN +static const TUint16 KCoDDunServiceClass = EMajorServiceTelephony | EMajorServiceNetworking; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunBtListen* CDunBtListen::NewL( MDunServerCallback* aServer, + MDunListenCallback* aParent, + CDunTransporter* aTransporter, + TBtPortEntity& aEntity ) + { + CDunBtListen* self = new (ELeave) CDunBtListen( aServer, + aParent, + aTransporter, + aEntity ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunBtListen::~CDunBtListen() + { + FTRACE(FPrint( _L("CDunBtListen::~CDunBtListen()") )); + ResetData(); + FTRACE(FPrint( _L("CDunBtListen::~CDunBtListen() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunBtListen::ResetData() + { + // APIs affecting this: + // IssueRequestL() + Stop(); + StopServiceAdvertisement(); + // NewL() + iTransporter->FreeAdvertisementMonitor( KDunBtPluginUid, this ); + delete iDiscovery; + iDiscovery = NULL; + if ( iSockServer.Handle() != KNullHandle ) + { + iSockServer.Close(); + } + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Registers itself to SDP and BT manager, opens a socket +// and starts to listen it. +// --------------------------------------------------------------------------- +// +void CDunBtListen::IssueRequestL() + { + FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL()" ) )); + + if ( iListenState == EBtListenStateListening ) + { + FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() (already active) complete" ) )); + User::Leave( KErrNotReady ); + } + + TBool advertise = iTransporter->AdvertisementStatus(); + if ( !advertise ) + { + // Return silently here as CDunTransporter will notify later + return; + } + + TBool inUse = EFalse; + TInt numOfChans = 0; + TInt retTemp = StartServiceAdvertisement( inUse ); + if ( retTemp != KErrNone ) + { + if ( inUse ) + { + numOfChans = iTransporter->GetNumberOfAllocatedChannelsByUid( + KDunBtPluginUid ); + if ( numOfChans == 0) + { + // No channels so parent can't reissue requests of this object + // This is fatal case -> leave. + // NOTE: To add full support for this case a poller (timer) is + // needed that polls for free RFCOMM channel by given interval. + User::Leave( retTemp ); + } + // If in use and parent has channels then just fail silently. + // Let this object to wait until parent finds new resources. + FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() complete" ) )); + return; + } + FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() (failed!) complete" ) )); + User::Leave( retTemp ); + } + + // Not already active here so start listening + // First open blank data socket + retTemp = iEntity.iBTPort.Open( iSockServer ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() (ERROR) complete (%d)" ), retTemp)); + User::Leave( retTemp ); + } + iStatus = KRequestPending; + iListenSocket.Accept( iEntity.iBTPort, iStatus ); + SetActive(); + iListenState = EBtListenStateListening; + + FTRACE(FPrint( _L( "CDunBtListen::IssueRequestL() complete") )); + } + +// --------------------------------------------------------------------------- +// Stops listening +// --------------------------------------------------------------------------- +// +TInt CDunBtListen::Stop() + { + FTRACE(FPrint( _L( "CDunBtListen::Stop()") )); + if ( iListenState != EBtListenStateListening ) + { + FTRACE(FPrint( _L("CDunBtListen::Stop() (not ready) complete" ))); + return KErrNotReady; + } + iListenSocket.CancelAccept(); + Cancel(); + iListenState = EBtListenStateIdle; + FTRACE(FPrint( _L( "CDunBtListen::Stop() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunBtListen::CDunBtListen +// --------------------------------------------------------------------------- +// +CDunBtListen::CDunBtListen( MDunServerCallback* aServer, + MDunListenCallback* aParent, + CDunTransporter* aTransporter, + TBtPortEntity& aEntity ) : + CActive( EPriorityStandard ), + iServer( aServer ), + iParent( aParent ), + iTransporter( aTransporter ), + iEntity( aEntity ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunBtListen::ConstructL +// --------------------------------------------------------------------------- +// +void CDunBtListen::ConstructL() + { + FTRACE(FPrint(_L("CDunBtListen::ConstructL()"))); + if ( !iServer || !iParent || !iTransporter ) + { + User::Leave( KErrGeneral ); + } + + CBTEngDiscovery* discovery = CBTEngDiscovery::NewLC(); + FTRACE(FPrint(_L("CDunBtListen::ConstructL: iSockServer.Connect"))); + User::LeaveIfError( iSockServer.Connect() ); + + // Set advertisement monitor + iTransporter->SetAdvertisementMonitorL( KDunBtPluginUid, this ); + + // Then we are ready to start listening and accepting incoming connection + // requests. + CleanupStack::Pop( discovery ); + iDiscovery = discovery; + CActiveScheduler::Add( this ); + FTRACE(FPrint(_L("CDunBtListen::ConstructL() complete"))); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunBtListen::Initialize() + { + // Don't initialize iServer here (it is set through NewL) + // Don't initialize iParent here (it is set through NewL) + // Don't initialize iTransporter here (it is set through NewL) + // Don't initialize iEntity here (it is set through NewL) + iListenState = EBtListenStateIdle; + iDiscovery = NULL; + iChannelNum = 0; + iSDPHandleDun = 0; + } + +// --------------------------------------------------------------------------- +// Starts dialup service advertisement +// --------------------------------------------------------------------------- +// +TInt CDunBtListen::StartServiceAdvertisement( TBool& aInUse ) + { + FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement()" ) )); + + TInt retTemp = ReserveLocalChannel( iSockServer, + iListenSocket, + iChannelNum, + aInUse ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement() (ERROR) complete" ) )); + return retTemp; + } + + // Now RFCOMM channel number of the next data socket must be the same as + // the current listener's RFCOMM channel number. Set that now. + iEntity.iChannelNum = iChannelNum; + + // Register SDP record + iSDPHandleDun = 0; + retTemp = iDiscovery->RegisterSdpRecord( KDialUpNetworkingUUID, + iChannelNum, + iSDPHandleDun ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement() (failed!) complete (%d)" ), retTemp)); + return retTemp; + } + FTRACE(FPrint( _L( "CDunBtListen::StartServiceAdvertisement() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops dialup service advertisement +// --------------------------------------------------------------------------- +// +TInt CDunBtListen::StopServiceAdvertisement() + { + FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement()" ) )); + if ( !iDiscovery ) + { + FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement() (iDiscovery) not initialized!" ) )); + return KErrGeneral; + } + if ( iSDPHandleDun != 0 ) + { + TInt retTemp = iDiscovery->DeleteSdpRecord( iSDPHandleDun ); + FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement() record closed (%d)" ), retTemp )); + iSDPHandleDun = 0; + } + if ( iListenSocket.SubSessionHandle() ) + { + iListenSocket.Close(); + } + FTRACE(FPrint( _L( "CDunBtListen::StopServiceAdvertisement() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Method which reserves local RFCOMM channel (from possible channels 1-30) +// and returns it to client. +// --------------------------------------------------------------------------- +// +TInt CDunBtListen::ReserveLocalChannel( RSocketServ& aSocketServ, + RSocket& aListenSocket, + TUint& aChannelNum, + TBool& aInUse ) + { + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel()"))); + aInUse = EFalse; + if ( aListenSocket.SubSessionHandle() ) + { + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() (open socket!) complete"))); + return KErrArgument; + } + TInt retTemp; + TProtocolDesc pInfo; + retTemp = aSocketServ.FindProtocol( TProtocolName(KRFCOMMDesC), pInfo ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() (FindProtocol failed) complete (%d)"), retTemp)); + return retTemp; + } + retTemp = aListenSocket.Open( aSocketServ, + pInfo.iAddrFamily, + pInfo.iSockType, + pInfo.iProtocol ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() (Open failed) complete (%d)"), retTemp)); + return retTemp; + } + TRfcommSockAddr addr; + TBTServiceSecurity sec; + sec.SetAuthentication( ETrue ); + sec.SetAuthorisation( ETrue ); + sec.SetEncryption( ETrue ); + sec.SetPasskeyMinLength( 0 ); + addr.SetSecurity( sec ); + addr.SetPort( KRfcommPassiveAutoBind ); + // When fix from Apple, replace the following with + // "retTemp = aListenSocket.Bind( addr );" + retTemp = DoExtendedBind( aListenSocket, addr ); + if ( retTemp != KErrNone ) + { + aListenSocket.Close(); + aInUse = ETrue; + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() Bind() complete (%d)"), retTemp)); + return KErrInUse; + } + aChannelNum = aListenSocket.LocalPort(); + + // We try to set the Telephony and Networking bits in our service class. If this fails we + // ignore it, as it's better to carry on without it than to fail to start listening. + aListenSocket.SetOpt(KBTRegisterCodService, KSolBtRFCOMM, KCoDDunServiceClass); + + retTemp = aListenSocket.Listen( KListenQueSize ); + if ( retTemp != KErrNone ) + { + aListenSocket.Close(); + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() Listen() complete (%d)"), retTemp)); + return retTemp; + } + FTRACE(FPrint(_L("CDunBtListen::ReserveLocalChannel() complete (%d)"), aChannelNum)); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Tries to bind to a fixed port and if that fails with KRfcommPassiveAutoBind. +// This is for spec breaking solutions like the OSX Leopard. +// --------------------------------------------------------------------------- +// +TInt CDunBtListen::DoExtendedBind( RSocket& aListenSocket, + TRfcommSockAddr& aSockAddr ) + { + FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind()"))); + if ( !aListenSocket.SubSessionHandle() ) + { + FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind() (closed socket!) complete"))); + return KErrGeneral; + } + TRfcommSockAddr fixedAddr = aSockAddr; + fixedAddr.SetPort( KDunFixedChannel ); + TInt retTemp = aListenSocket.Bind( fixedAddr ); + if ( retTemp == KErrNone ) + { + FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind() complete"))); + return KErrNone; + } + TInt retVal = aListenSocket.Bind( aSockAddr ); + FTRACE(FPrint(_L("CDunBtListen::DoExtendedBind() complete"))); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Called when a service is requested via BT. +// --------------------------------------------------------------------------- +// +void CDunBtListen::RunL() + { + FTRACE(FPrint( _L( "CDunBtListen::RunL()" ) )); + iListenState = EBtListenStateIdle; + + StopServiceAdvertisement(); + + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtListen::RunL() (ERROR) complete (%d)" ), retTemp)); + iServer->NotifyPluginCloseRequest( KDunBtPluginUid, ETrue ); + return; + } + // Notify new connection + TBool noFreeChans = EFalse; + retTemp = iParent->NotifyChannelAllocate( noFreeChans ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtListen::RunL() channel allocation failed! (%d)" ), retTemp)); + // Other error than no free channels, close plugin now + if ( !noFreeChans ) + { + iServer->NotifyPluginCloseRequest( KDunBtPluginUid, ETrue ); + } + return; + } + + // Don't restart listening here. Request is issued via + // NotifyAdvertisementStart() + + FTRACE(FPrint( _L( "CDunBtListen::RunL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Cancel current activity. +// --------------------------------------------------------------------------- +// +void CDunBtListen::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// From class MDunServAdvMon. +// Gets called when advertisement status changes to start. +// --------------------------------------------------------------------------- +// +void CDunBtListen::NotifyAdvertisementStart( TBool aCreation ) + { + FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementStart()" ) )); + // Remove the "if" below when fix comes from Apple + if ( !aCreation ) + { + TRAP_IGNORE( IssueRequestL() ); + } + FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementStart() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class MDunServAdvMon. +// Gets called when advertisement status changes to end. +// --------------------------------------------------------------------------- +// +void CDunBtListen::NotifyAdvertisementEnd() + { + FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementEnd()" ) )); + Stop(); + StopServiceAdvertisement(); + FTRACE(FPrint( _L( "CDunBtListen::NotifyAdvertisementEnd() complete" ) )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/src/bt/DunBtPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/src/bt/DunBtPlugin.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,582 @@ +/* +* Copyright (c) 2006-2008 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: DUN Bluetooth plugin +* +*/ + + +#include +#include +#include "DunPlugin.h" +#include "DunBtListen.h" +#include "DunBtPlugin.h" +#include "DunDebug.h" +#include "DunTransporter.h" + +_LIT( KBtChannelName, "DUNBT::" ); + +const TInt KCharactersInTInt = 10; // For "2147483648" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CDunBtPlugin::CDunBtPlugin() +// --------------------------------------------------------------------------- +// +CDunBtPlugin::CDunBtPlugin() : + iServer( NULL ), + iBTListen( NULL ), + iTransporter( NULL ) + { + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunBtPlugin::~CDunBtPlugin() + { + FTRACE(FPrint( _L( "CDunBtPlugin::~CDunBtPlugin()" ) )); + Uninitialize(); + FTRACE(FPrint( _L( "CDunBtPlugin::~CDunBtPlugin() complete" ) )); + } + +// --------------------------------------------------------------------------- +// State of this plugin +// --------------------------------------------------------------------------- +// +TDunPluginState CDunBtPlugin::PluginState() + { + return iServer->GetPluginStateByUid( KDunBtPluginUid ); + } + +// --------------------------------------------------------------------------- +// Constructs a listener object for this plugin +// --------------------------------------------------------------------------- +// +void CDunBtPlugin::ConstructListenerL() + { + FTRACE(FPrint(_L("CDunBtPlugin::ConstructListenerL()"))); + if ( PluginState() != EDunStateLoaded ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ConstructListenerL() (not ready) complete"))); + User::Leave( KErrNotReady ); + } + ReportStateChangeUp( EDunStateTryListen ); + if ( iBTListen ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ConstructListenerL() (already exists) complete"))); + User::Leave( KErrAlreadyExists ); + } + CDunBtListen* listen = CDunBtListen::NewL( iServer, + this, + iTransporter, + iEntity ); + CleanupStack::PushL( listen ); + listen->IssueRequestL(); + CleanupStack::Pop( listen ); + iBTListen = listen; + ReportStateChangeUp( EDunStateListening ); + FTRACE(FPrint(_L("CDunBtPlugin::ConstructListenerL() complete"))); + } + +// --------------------------------------------------------------------------- +// Sets new state +// New state must be one more than the old state +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::ReportStateChangeUp( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ReportStateChangeUp()"))); + TInt retTemp = iServer->NotifyPluginStateChangeUp( aPluginState, + KDunBtPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ReportStateChangeUp() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunBtPlugin::ReportStateChangeUp() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets new state +// New state must be one less than the old state +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::ReportStateChangeDown( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ReportStateChangeDown()"))); + TInt retTemp = iServer->NotifyPluginStateChangeDown( aPluginState, + KDunBtPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ReportStateChangeDown() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunBtPlugin::ReportStateChangeDown() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Allocates a free channel +// --------------------------------------------------------------------------- +// +void CDunBtPlugin::AllocateChannelL( TBool& aNoFreeChans, + TBtCleanupInfo& aCleanupInfo ) + { + FTRACE(FPrint(_L("CDunBtPlugin::AllocateChannelL()"))); + // iDataSocket has new data socket information so copy it to iBTPorts + TBtPortEntity* foundEntity = NULL; + TInt foundIndex = GetFirstFreePort( foundEntity ); + if ( !foundEntity ) // free not found so add new + { + TBtPortEntity newEntity; + iBTPorts.AppendL( newEntity ); + aCleanupInfo.iNewEntity = ETrue; + aCleanupInfo.iEntityIndex = iBTPorts.Count() - 1; + foundEntity = &iBTPorts[ aCleanupInfo.iEntityIndex ]; + } + else // free found so change array + { + aCleanupInfo.iNewEntity = EFalse; + aCleanupInfo.iEntityIndex = foundIndex; + foundEntity = &iBTPorts[ foundIndex ]; + } + foundEntity->iChannelNum = iEntity.iChannelNum; + foundEntity->iBTPort = iEntity.iBTPort; + RSocket* socket = &foundEntity->iBTPort; + HBufC8* channelName = HBufC8::NewMaxLC( KBtChannelName().Length() + + KCharactersInTInt ); + TPtr8 channelNamePtr = channelName->Des(); + channelNamePtr.Copy( KBtChannelName ); + channelNamePtr.AppendNum( iEntity.iChannelNum ); + iTransporter->AllocateChannelL( socket, + KDunBtPluginUid, + channelNamePtr, + EFalse, + aNoFreeChans ); + iTransporter->AddConnMonCallbackL( socket, + this, + EDunReaderUpstream, + EFalse ); + iTransporter->AddConnMonCallbackL( socket, + this, + EDunWriterUpstream, + EFalse ); + iTransporter->AddConnMonCallbackL( socket, + this, + EDunReaderDownstream, + ETrue ); + iTransporter->AddConnMonCallbackL( socket, + this, + EDunWriterDownstream, + EFalse ); + iTransporter->IssueTransferRequestsL( socket ); + CleanupStack::PopAndDestroy( channelName ); + FTRACE(FPrint(_L("CDunBtPlugin::AllocateChannelL() complete"))); + } + +// --------------------------------------------------------------------------- +// Frees an existing channel +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::FreeChannels() + { + FTRACE(FPrint(_L("CDunBtPlugin::FreeChannels()"))); + if ( PluginState() != EDunStateTryUninitialize ) + { + FTRACE(FPrint(_L("CDunBtPlugin::FreeChannels() (not ready) complete"))); + return KErrNotReady; + } + TInt i; + TInt count = iBTPorts.Count(); + for ( i=0; iFreeChannel( &iBTPorts[i].iBTPort ); + iBTPorts[i].iBTPort.Close(); + // All channels freed and this is for Uninitialize() so don't touch + // advertisement monitor here! + } + iBTPorts[i].iChannelNum = KErrNotFound; + } + iBTPorts.Close(); + FTRACE(FPrint(_L("CDunBtPlugin::FreeChannels() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Uninitializes this plugin +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::Uninitialize() + { + FTRACE(FPrint( _L( "CDunBtPlugin::Uninitialize()" ) )); + ReportStateChangeDown( EDunStateTryUninitialize ); + // Free channels (ignore errors) + FreeChannels(); + // Delete listening object (also advertisement monitor) + delete iBTListen; + iBTListen = NULL; + // Set state back to loaded + ReportStateChangeUp( EDunStateUninitialized ); + ReportStateChangeUp( EDunStateTryLoad ); + ReportStateChangeUp( EDunStateLoaded ); + FTRACE(FPrint( _L( "CDunBtPlugin::Uninitialize() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Gets port's index and entity by connection ID +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::GetPortByConnId( TConnId aConnId, TBtPortEntity*& aEntity ) + { + FTRACE(FPrint( _L( "CDunBtPlugin::GetPortByConnId()")) ); + TInt i; + TInt count = iBTPorts.Count(); + for ( i=0; i pkg( modemStatus ); + TInt retTemp = aEntity.iBTPort.GetOpt( KRFCOMMLocalModemStatus, + KSolBtRFCOMM, + pkg ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtPlugin::SetRFCOMMStatusCommand() (GetOpt failed!) complete" ) )); + return retTemp; + } + modemStatus = pkg(); + FTRACE(FPrint( _L( "CDunBtPlugin::SetRFCOMMStatusCommand() signals are: 0x%02X" ), modemStatus)); + TBool changed = EFalse; + TUint8 signal = modemStatus & aSignal; + if ( aSignalOn ) + { + if ( !signal ) + { + modemStatus |= aSignal; + changed = ETrue; + } + } + else + { + if ( signal ) + { + modemStatus &= ( ~aSignal ); + changed = ETrue; + } + } + if ( changed ) + { + pkg = modemStatus; + retTemp = aEntity.iBTPort.SetOpt( KRFCOMMLocalModemStatus, + KSolBtRFCOMM, + pkg ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunBtPlugin::SetRFCOMMStatusCommand() (SetOpt failed!) complete" ) )); + return retTemp; + } + } + FTRACE(FPrint( _L( "CDunBtPlugin::SetRFCOMMStatusCommand() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Manages advertiser for channel free operation +// --------------------------------------------------------------------------- +// +void CDunBtPlugin::ManageAdvertiserFreeOperationL() + { + FTRACE(FPrint(_L("CDunBtPlugin::ManageAdvertiserFreeOperationL()"))); + TInt numOfChans = iTransporter->NumberOfAllocatedChannels(); + // Remove of last CDunTransporter channel removes also the + // advertisement monitor so set it now if necessary + if ( numOfChans == 0 ) + { + iTransporter->SetAdvertisementMonitorL( KDunBtPluginUid, iBTListen ); + } + FTRACE(FPrint(_L("CDunBtPlugin::ManageAdvertiserFreeOperationL() complete"))); + } + +// --------------------------------------------------------------------------- +// Cleans partial created channel data based on TATExtCleanupInfo +// --------------------------------------------------------------------------- +// +void CDunBtPlugin::CleanPartialChanneldata( TBtCleanupInfo& aCleanupInfo ) + { + FTRACE(FPrint(_L("CDunBtPlugin::CleanPartialChanneldata()"))); + RSocket* socket = &iBTPorts[aCleanupInfo.iEntityIndex].iBTPort; + iTransporter->FreeChannel( socket ); + iBTPorts[aCleanupInfo.iEntityIndex].iChannelNum = KErrNotFound; + socket->Close(); + if ( aCleanupInfo.iNewEntity ) + { + iBTPorts.Remove( aCleanupInfo.iEntityIndex ); + } + FTRACE(FPrint(_L("CDunBtPlugin::CleanPartialChanneldata() complete"))); + } + +// --------------------------------------------------------------------------- +// From class MDunLocalMediaPlugin. +// CDunBtPlugin::ConstructL +// --------------------------------------------------------------------------- +// +void CDunBtPlugin::ConstructL( MDunServerCallback* aServer, + CDunTransporter* aTransporter ) + { + FTRACE(FPrint( _L( "CDunBtPlugin::ConstructL()" ) )); + if ( !aServer || !aTransporter ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ConstructL() not initialized!"))); + User::Leave( KErrBadHandle ); + } + iServer = aServer; + iTransporter = aTransporter; + FTRACE(FPrint( _L( "CDunBtPlugin::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class MDunLocalMediaPlugin. +// Gets called when server changes a plugin's state +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::NotifyServerStateChange( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange()"))); + TInt retTemp; + switch ( aPluginState ) + { + case EDunStateTryListen: + if ( PluginState() != EDunStateLoaded ) + { + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange() (not ready) complete"))); + return KErrNotReady; + } + // Change to listening mode + TRAPD( retTrap, ConstructListenerL() ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange() (ERROR) complete (%d)"), retTrap)); + return retTrap; + } + break; + case EDunStateTryUninitialize: + if ( PluginState() == EDunStateUninitialized ) + { + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange() (not ready) complete"))); + return KErrNotReady; + } + // Uninitialize + retTemp = Uninitialize(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange() (not ready) complete (%d)"), retTemp)); + return KErrNotReady; + } + break; + default: + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange() (unknown state) complete"))); + return KErrNotSupported; + } + FTRACE(FPrint(_L("CDunBtPlugin::NotifyServerStateChange() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunLocalMediaPlugin. +// Gets called when server needs to know the active connection +// --------------------------------------------------------------------------- +// +TConnId CDunBtPlugin::ActiveConnection() + { + FTRACE(FPrint(_L("CDunBtPlugin::ActiveConnection()"))); + if ( iBTPorts.Count() >= 1 ) + { + FTRACE(FPrint(_L("CDunBtPlugin::ActiveConnection() complete"))); + return &iBTPorts[0]; + } + FTRACE(FPrint(_L("CDunBtPlugin::ActiveConnection() (not found) complete"))); + return NULL; + } + +// --------------------------------------------------------------------------- +// From class MDunListenCallback. +// Gets called when new channel must be created +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::NotifyChannelAllocate( TBool& aNoFreeChans ) + { + // Now state can be either EDunStateListening (no channels) or + // EDunStateChanneled (one or more channels). Support both states + TDunPluginState startState = PluginState(); + if ( startState!=EDunStateListening && startState!=EDunStateChanneled ) + { + FTRACE(FPrint(_L("CDunBtPlugin::NotifyChannelAllocate() (not ready) complete"))); + return KErrNotReady; + } + if ( startState == EDunStateListening ) + { + ReportStateChangeUp( EDunStateTryChannel ); + } + TBtCleanupInfo cleanupInfo; + TRAPD( retTrap, AllocateChannelL(aNoFreeChans,cleanupInfo) ); + if ( retTrap != KErrNone ) + { + CleanPartialChanneldata( cleanupInfo ); + FTRACE(FPrint(_L("CDunBtPlugin::NotifyChannelAllocate() (trapped!) complete"))); + return retTrap; + } + if ( startState == EDunStateListening ) + { + ReportStateChangeUp( EDunStateChanneled ); + } + FTRACE(FPrint(_L("CDunBtPlugin::NotifyChannelAllocate() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunListenCallback. +// Gets called when an existing channel must be freed +// --------------------------------------------------------------------------- +// +TInt CDunBtPlugin::NotifyChannelFree() + { + // No implementation needed here + return KErrNotSupported; + } + +// --------------------------------------------------------------------------- +// From class MDunConnMon. +// Gets called when line status changes or when any type of error is detected +// --------------------------------------------------------------------------- +// +void CDunBtPlugin::NotifyProgressChangeL( TConnId aConnId, + TDunConnectionReason aConnReason ) + { + FTRACE(FPrint( _L( "CDunBtPlugin::NotifyProgressChangeL()" ) )); + // Find matching failed ID + TBtPortEntity* foundEntity = NULL; + TInt foundIndex = GetPortByConnId( aConnId, foundEntity ); + if ( !foundEntity ) + { + FTRACE(FPrint( _L( "CDunBtPlugin::NotifyProgressChangeL() (not found) complete")) ); + User::Leave( KErrNotFound ); + } + if ( aConnReason.iReasonType == EDunReasonTypeSignal ) + { + if ( aConnReason.iContext != EDunMediaContextNetwork ) + { + // Should never come here as other signals are for RComm + FTRACE(FPrint( _L( "CDunBtPlugin::NotifyProgressChangeL() (ERROR) complete")) ); + User::Leave( KErrGeneral ); + } + // Signal change detected on network side -> process change + if ( aConnReason.iSignalType == KSignalDCD ) + { + SetRFCOMMStatusCommand( *foundEntity, + KModemSignalDV, + aConnReason.iSignalHigh ); + FTRACE(FPrint( _L( "CDunBtPlugin::NotifyProgressChangeL() DV changed")) ); + } + else if ( aConnReason.iSignalType == KSignalRNG ) + { + SetRFCOMMStatusCommand( *foundEntity, + KModemSignalIC, + aConnReason.iSignalHigh ); + FTRACE(FPrint( _L( "CDunBtPlugin::NotifyProgressChangeL() IC changed")) ); + } + // Omit other signals + } + else + { + // All other cases are down indications from local media side + if ( foundEntity->iBTPort.SubSessionHandle() ) + { + iTransporter->FreeChannel( &foundEntity->iBTPort ); + // CDunTransporter will notify the listener about advertisement + // status change after FreeChannel() so no need to do + // IssueRequestL() for CDunBtListen here after this. + foundEntity->iBTPort.Close(); + } + ManageAdvertiserFreeOperationL(); + // Now resources are freed so command server to reopen possibly + // existing queued plugins + iServer->NotifyPluginReopenRequest(); + } + FTRACE(FPrint( _L( "CDunBtPlugin::NotifyProgressChangeL() complete")) ); + } + +// ======== GLOBAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLocalPluginL implements factory construction for +// the class CDunBtPlugin. +// The function is exported at ordinal 1. +// --------------------------------------------------------------------------- +// +EXPORT_C MDunLocalMediaPlugin* NewLocalPluginL() + { + return new (ELeave) CDunBtPlugin; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/src/ir/DunIrPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/src/ir/DunIrPlugin.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,340 @@ +/* +* Copyright (c) 2006-2008 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: DUN Infrared plugin +* +*/ + + +#include "DunIrPlugin.h" +#include "DunUtils.h" +#include "DunDebug.h" + +_LIT( KIrdaCsy, "IRCOMM" ); +_LIT( KIrdaCsy0, "IRCOMM::0" ); +_LIT( KIrChannelName, "DUNIR::0" ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CDunIrPlugin::CDunIrPlugin +// --------------------------------------------------------------------------- +// +CDunIrPlugin::CDunIrPlugin() : + iServer( NULL ), + iTransporter( NULL ) + { + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunIrPlugin::~CDunIrPlugin() + { + FTRACE(FPrint( _L( "CDunIrPlugin::~CDunIrPlugin()" ) )); + Uninitialize(); + FTRACE(FPrint( _L( "CDunIrPlugin::~CDunIrPlugin() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Gets state of this plugin +// --------------------------------------------------------------------------- +// +TDunPluginState CDunIrPlugin::PluginState() + { + return iServer->GetPluginStateByUid( KDunIrPluginUid ); + } + +// --------------------------------------------------------------------------- +// Constructs a listener object for this plugin +// --------------------------------------------------------------------------- +// +TInt CDunIrPlugin::ConstructListener() + { + FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL()"))); + if ( PluginState() != EDunStateLoaded ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() (not ready) complete"))); + return KErrNotReady; + } + ReportStateChangeUp( EDunStateTryListen ); + TInt retTemp = InitPort(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() (ERROR) complete"))); + return retTemp; + } + ReportStateChangeUp( EDunStateListening ); + ReportStateChangeUp( EDunStateTryChannel ); + TRAPD( retTrap, AllocateChannelL() ); + if ( retTrap != KErrNone ) + { + iTransporter->FreeChannel( &iIrPort ); + FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() (trapped!) complete"))); + return retTrap; + } + ReportStateChangeUp( EDunStateChanneled ); + FTRACE(FPrint(_L("CDunIrPlugin::ConstructListenerL() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets new state +// New state must be one more than the old state +// --------------------------------------------------------------------------- +// +TInt CDunIrPlugin::ReportStateChangeUp( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeUp()"))); + TInt retTemp = iServer->NotifyPluginStateChangeUp( aPluginState, + KDunIrPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeUp() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeUp() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets new state +// New state must be one less than the old state +// --------------------------------------------------------------------------- +// +TInt CDunIrPlugin::ReportStateChangeDown( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeDown()"))); + TInt retTemp = iServer->NotifyPluginStateChangeDown( aPluginState, + KDunIrPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeDown() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunIrPlugin::ReportStateChangeDown() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Initializes one infrared port with role DCE +// --------------------------------------------------------------------------- +// +TInt CDunIrPlugin::InitPort() + { + FTRACE(FPrint( _L( "CDunIrPlugin::InitPort()" ) )); + TInt retTemp; + retTemp = CDunUtils::ConnectCommsServer( iCommServer ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunIrPlugin::InitPort() (ERROR) complete" ) )); + return retTemp; + } + retTemp = iCommServer.LoadCommModule( KIrdaCsy ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::InitPort() (load module) failed!") )); + return retTemp; + } + if ( iIrPort.SubSessionHandle() ) + { + FTRACE(FPrint(_L("CDunIrPlugin::InitPort (already exists!) complete") )); + return KErrAlreadyExists; + } + retTemp = iIrPort.Open( iCommServer, + KIrdaCsy0, + ECommExclusive, + ECommRoleDCE ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::InitPort() (open) failed!") )); + return retTemp; + } + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Allocates a channel +// --------------------------------------------------------------------------- +// +void CDunIrPlugin::AllocateChannelL() + { + FTRACE(FPrint(_L("CDunIrPlugin::AllocateChannelL()"))); + HBufC8* channelName = HBufC8::NewMaxLC( KIrChannelName().Length() ); + TPtr8 channelNamePtr = channelName->Des(); + channelNamePtr.Copy( KIrChannelName ); + iTransporter->AllocateChannelL( &iIrPort, + KDunIrPluginUid, + channelNamePtr, + ETrue ); + iTransporter->AddConnMonCallbackL( &iIrPort, + this, + EDunReaderUpstream, + EFalse ); + iTransporter->AddConnMonCallbackL( &iIrPort, + this, + EDunWriterUpstream, + EFalse ); + iTransporter->AddConnMonCallbackL( &iIrPort, + this, + EDunReaderDownstream, + EFalse ); + iTransporter->AddConnMonCallbackL( &iIrPort, + this, + EDunWriterDownstream, + EFalse ); + iTransporter->IssueTransferRequestsL( &iIrPort ); + CleanupStack::PopAndDestroy( channelName ); + FTRACE(FPrint(_L("CDunIrPlugin::AllocateChannelL() complete"))); + } + +// --------------------------------------------------------------------------- +// Uninitializes this plugin +// --------------------------------------------------------------------------- +// +TInt CDunIrPlugin::Uninitialize() + { + FTRACE(FPrint(_L("CDunIrPlugin::Uninitialize()" ))); + ReportStateChangeDown( EDunStateTryUninitialize ); + if ( iIrPort.SubSessionHandle() ) + { + iTransporter->FreeChannel( &iIrPort ); + iIrPort.SetSignals( 0, KSignalDCEOutputs ); + iIrPort.Close(); + } + if ( iCommServer.Handle() ) + { + iCommServer.UnloadCommModule( KIrdaCsy ); + iCommServer.Close(); + } + ReportStateChangeUp( EDunStateUninitialized ); + ReportStateChangeUp( EDunStateTryLoad ); + ReportStateChangeUp( EDunStateLoaded ); + FTRACE(FPrint(_L("CDunIrPlugin::Uninitialize() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunLocalMediaPlugin. +// CDunIrPlugin::ConstructL +// --------------------------------------------------------------------------- +// +void CDunIrPlugin::ConstructL( MDunServerCallback* aServer, + CDunTransporter* aTransporter ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ConstructL()"))); + if ( !aServer || !aTransporter ) + { + FTRACE(FPrint(_L("CDunIrPlugin::ConstructL() not initialized!"))); + User::Leave( KErrGeneral ); + } + iServer = aServer; + iTransporter = aTransporter; + FTRACE(FPrint(_L("CDunIrPlugin::ConstructL() complete"))); + } + +// --------------------------------------------------------------------------- +// From class MDunLocalMediaPlugin. +// Gets called when server changes a plugin's state +// --------------------------------------------------------------------------- +// +TInt CDunIrPlugin::NotifyServerStateChange( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange()"))); + TInt retTemp; + switch ( aPluginState ) + { + case EDunStateTryListen: + if ( PluginState() != EDunStateLoaded ) + { + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (not ready) complete"))); + return KErrNotReady; + } + // Change to listening mode + retTemp = ConstructListener(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (ERROR) complete (%d)"), retTemp)); + return retTemp; + } + break; + case EDunStateTryUninitialize: + if ( PluginState() == EDunStateUninitialized ) + { + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (not ready) complete"))); + return KErrNotReady; + } + // Uninitialize + retTemp = Uninitialize(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (ERROR) complete (%d)"), retTemp)); + return retTemp; + } + break; + default: + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() (unknown state) complete"))); + return KErrNotSupported; + } + FTRACE(FPrint(_L("CDunIrPlugin::NotifyServerStateChange() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunLocalMediaPlugin. +// Gets called when server needs to know the active connection +// --------------------------------------------------------------------------- +// +TConnId CDunIrPlugin::ActiveConnection() + { + FTRACE(FPrint(_L("CDunIrPlugin::ActiveConnection()"))); + FTRACE(FPrint(_L("CDunIrPlugin::ActiveConnection() (not found) complete"))); + return NULL; + } + +// --------------------------------------------------------------------------- +// From class MDunConnMon. +// Gets called when line status changes or when any type of error is detected +// --------------------------------------------------------------------------- +// +void CDunIrPlugin::NotifyProgressChangeL( + TConnId aConnId, + TDunConnectionReason /*aConnReason*/ ) + { + FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL()" ) )); + RComm* irConn = static_cast( aConnId ); + if ( &iIrPort != irConn ) + { + FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL() (not found) complete")) ); + User::Leave( KErrNotFound ); + } + // Now indications are down indications from local media side + FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL() restart plugin" ) )); + iServer->NotifyPluginRestart( KDunIrPluginUid ); + FTRACE(FPrint( _L( "CDunIrPlugin::NotifyProgressChangeL() complete")) ); + } + +// ======== GLOBAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLocalPluginL implements factory construction for +// the class CDunIrPlugin. +// The function is exported at ordinal 1. +// Returns: Pointer: The new instance of CDunIrPlugin +// --------------------------------------------------------------------------- +// +EXPORT_C MDunLocalMediaPlugin* NewLocalPluginL() + { + return new (ELeave) CDunIrPlugin; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/src/usb/DunUsbConfig.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/src/usb/DunUsbConfig.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,292 @@ +/* +* Copyright (c) 2006-2008 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: DUN USB configuration accessor and listener +* +*/ + + +#include "DunUsbConfig.h" +#include "DunDebug.h" + +const TUint KDunUsbSupportedConfigVersion = 1; + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunUsbConfig* CDunUsbConfig::NewL( MDunServerCallback* aServer, + MDunUsbConfig* aCallback, + TUint8 aProtocol ) + { + CDunUsbConfig* self = new (ELeave) CDunUsbConfig( aServer, + aCallback, + aProtocol ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunUsbConfig::~CDunUsbConfig() + { + FTRACE(FPrint( _L("CDunUsbConfig::~CDunUsbConfig()" ))); + ResetData(); + FTRACE(FPrint( _L("CDunUsbConfig::~CDunUsbConfig() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunUsbConfig::ResetData() + { + // APIs affecting this: + // IssueRequest() + Stop(); + // NewL() + iAcmProperty.Close(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Compares initialized protocol number to configuration by index +// --------------------------------------------------------------------------- +// +TInt CDunUsbConfig::GetConfigValidityByIndex( TInt aIndex, TBool& aValidity ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfigValidityByIndex()" ))); + if ( iConfigState != EUsbConfigStateIdle ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfigValidityByIndex() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iConfigExist ) + { + TInt retTemp = GetConfiguration( iConfig ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfigValidityByIndex() (get failed) complete" ))); + return retTemp; + } + } + if ( aIndex < 0 || + aIndex >= iConfig.iAcmCount || + aIndex >= TPublishedAcmConfigs::KAcmMaxFunctions ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfigValidityByIndex() (not found) complete" ))); + return KErrNotFound; + } + if ( iConfig.iAcmConfig[aIndex].iProtocol == iProtocol ) + { + aValidity = ETrue; + } + else + { + aValidity = EFalse; + } + FTRACE(FPrint( _L("CDunUsbConfig::GetConfigValidityByIndex() complete (%d/%d)" ), aIndex, aValidity)); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Starts listening for ACM configuration changes +// --------------------------------------------------------------------------- +// +TInt CDunUsbConfig::IssueRequest() + { + FTRACE(FPrint( _L("CDunUsbConfig::IssueRequest()" ))); + if ( iConfigState != EUsbConfigStateIdle ) + { + FTRACE(FPrint( _L("CDunUsbConfig::IssueRequest() (not ready) complete" ))); + return KErrNotReady; + } + iStatus = KRequestPending; + iAcmProperty.Subscribe( iStatus ); + SetActive(); + iConfigState = EUsbConfigStateWaiting; + FTRACE(FPrint( _L("CDunUsbConfig::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops listening for ACM configuration changes +// --------------------------------------------------------------------------- +// +TInt CDunUsbConfig::Stop() + { + FTRACE(FPrint( _L("CDunUsbConfig::Stop()" ))); + if ( iConfigState != EUsbConfigStateWaiting ) + { + FTRACE(FPrint( _L("CDunUsbConfig::Stop() (not ready) complete" ))); + return KErrNotReady; + } + iAcmProperty.Cancel(); + Cancel(); + iConfigState = EUsbConfigStateIdle; + FTRACE(FPrint( _L("CDunUsbConfig::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunUsbConfig::CDunUsbConfig +// --------------------------------------------------------------------------- +// +CDunUsbConfig::CDunUsbConfig( MDunServerCallback* aServer, + MDunUsbConfig* aCallback, + TUint8 aProtocol ) : + CActive( EPriorityStandard ), + iServer( aServer ), + iCallback( aCallback ), + iProtocol( aProtocol ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunUsbConfig::ConstructL +// --------------------------------------------------------------------------- +// +void CDunUsbConfig::ConstructL() + { + FTRACE(FPrint( _L("CDunUsbConfig::ConstructL()" ))); + if ( !iServer || !iCallback ) + { + User::Leave( KErrGeneral ); + } + User::LeaveIfError( iAcmProperty.Attach(KUidSystemCategory,KAcmKey) ); + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunUsbConfig::ConstructL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunUsbConfig::Initialize() + { + // Don't initialize iCallback here (it is set through NewL) + // Don't initialize iProtocol here (it is set through NewL) + iConfigState = EUsbConfigStateIdle; + iConfig.iAcmConfigVersion = 0; + iConfig.iAcmCount = 0; + iConfigExist = EFalse; + } + +// --------------------------------------------------------------------------- +// Gets current ACM configuration +// --------------------------------------------------------------------------- +// +TInt CDunUsbConfig::GetConfiguration( TPublishedAcmConfigs& aConfig ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfiguration()" ))); + TPckgBuf configBuf; + TInt retTemp = iAcmProperty.Get( configBuf ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfiguration() (ERROR) complete" ))); + return retTemp; + } + aConfig = configBuf(); + // Check that version is that which we currently support + if ( aConfig.iAcmConfigVersion != KDunUsbSupportedConfigVersion ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfiguration() (not supported) complete" ))); + return KErrNotSupported; + } + // Check that count is within bounds + if ( aConfig.iAcmCount > TPublishedAcmConfigs::KAcmMaxFunctions ) + { + FTRACE(FPrint( _L("CDunUsbConfig::GetConfiguration() (overflow) complete" ))); + return KErrOverflow; + } + iConfigExist = ETrue; + FTRACE(FPrint( _L("CDunUsbConfig::GetConfiguration() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when ACM configuration changes +// --------------------------------------------------------------------------- +// +void CDunUsbConfig::RunL() + { + FTRACE(FPrint( _L("CDunUsbConfig::RunL()" ))); + iConfigState = EUsbConfigStateIdle; + + TPublishedAcmConfigs newConfig; + TInt retTemp = GetConfiguration( newConfig ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunUsbConfig::RunL() (ERROR) complete (%d)" ), retTemp)); + iServer->NotifyPluginCloseRequest( KDunUsbPluginUid, ETrue ); + return; + } + // Change that is same is not possible so check that first + if ( newConfig.iAcmCount == iConfig.iAcmCount ) + { + FTRACE(FPrint( _L("CDunUsbConfig::RunL() (no change) complete" ))); + iServer->NotifyPluginCloseRequest( KDunUsbPluginUid, ETrue ); + return; + } + + // Now we have the changed configuration so find out are there added or + // removed USB ACMs + + TInt i; + if ( newConfig.iAcmCount > iConfig.iAcmCount ) // addition + { + // Addition is always done to end of ACM queue by N entry addition + // Scan through new array and report change if necessary + for ( i=iConfig.iAcmCount; iNotifyConfigAddition( i ); + } + } + } + else // removal ( newConfig.iAcmCount < iConfig.iAcmCount ) + { + // Removal is always done to end of ACM queue by N entry removal + // Scan through old array and report change if necessary + for ( i=newConfig.iAcmCount; iNotifyConfigRemoval( i ); + } + } + } + + // Update config and restart listening + iConfig = newConfig; + IssueRequest(); + + FTRACE(FPrint( _L("CDunUsbConfig::RunL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunUsbConfig::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/src/usb/DunUsbListen.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/src/usb/DunUsbListen.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,259 @@ +/* +* Copyright (c) 2006-2008 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: DUN USB plugin's listener +* +*/ + + +#include +#include "DunUtils.h" +#include "DunUsbListen.h" +#include "DunDebug.h" + +const TUint KDunUsbDeviceStateMask = 0x00ff; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunUsbListen* CDunUsbListen::NewL( MDunServerCallback* aServer, + MDunListenCallback* aParent, + RUsb& aUsbServer ) + { + CDunUsbListen* self = new (ELeave) CDunUsbListen( aServer, + aParent, + aUsbServer ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunUsbListen::~CDunUsbListen() + { + FTRACE(FPrint( _L( "CDunUsbListen::~CDunUsbListen()" ) )); + ResetData(); + FTRACE(FPrint( _L( "CDunUsbListen::~CDunUsbListen() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunUsbListen::ResetData() + { + // APIs affecting this: + // IssueRequestL() + Stop(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// IssueRequest to USB server for device state change notifications +// --------------------------------------------------------------------------- +// +TInt CDunUsbListen::IssueRequestL() + { + FTRACE(FPrint( _L( "CDunUsbListen::IssueRequestL()" ))); + + if ( iUsbServer.Handle() == KNullHandle ) + { + FTRACE(FPrint( _L( "CDunUsbListen::IssueRequestL() (iUsbServer) complete" ) )); + User::Leave( KErrGeneral ); + } + + TUsbDeviceState usbDeviceState; + User::LeaveIfError( iUsbServer.GetDeviceState(usbDeviceState) ); + FTRACE(FPrint( _L( "CDunUsbListen::IssueRequestL() Usb device state = %X" ), usbDeviceState)); + if ( iDeviceState == EUsbDeviceStateUndefined ) + { + iDeviceState = usbDeviceState; + } + + // USB device state now set; if configured already, notify parent + // If not yet configured, start listening + + if ( usbDeviceState == EUsbDeviceStateConfigured ) + { + FTRACE(FPrint( _L( "CDunUsbListen::IssueRequestL() (already exists) complete" ) )); + return KErrAlreadyExists; + } + + Activate(); + + FTRACE(FPrint( _L( "CDunUsbListen::IssueRequestL() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops listening +// --------------------------------------------------------------------------- +// +TInt CDunUsbListen::Stop() + { + FTRACE(FPrint( _L( "CDunUsbListen::Stop()" ) )); + if ( iListenState != EUsbListenStateListening ) + { + FTRACE(FPrint( _L( "CDunUsbListen::Stop() (not ready) complete" ) )); + return KErrNotReady; + } + iUsbServer.DeviceStateNotificationCancel(); + Cancel(); + iListenState = EUsbListenStateIdle; + iDeviceState = EUsbDeviceStateUndefined; + iDeviceStatePrev = EUsbDeviceStateUndefined; + FTRACE(FPrint( _L( "CDunUsbListen::Stop() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunUsbListen::CDunUsbListen +// --------------------------------------------------------------------------- +// +CDunUsbListen::CDunUsbListen( MDunServerCallback* aServer, + MDunListenCallback* aParent, + RUsb& aUsbServer ) : + CActive( EPriorityStandard ), + iServer( aServer ), + iParent( aParent ), + iUsbServer( aUsbServer ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunUsbListen::ConstructL +// --------------------------------------------------------------------------- +// +void CDunUsbListen::ConstructL() + { + FTRACE(FPrint( _L( "CDunUsbListen::ConstructL()" ) )); + if ( !iServer || !iParent ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L( "CDunUsbListen::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunUsbListen::Initialize() + { + // Don't initialize iServer here (it is set through NewL) + // Don't initialize iParent here (it is set through NewL) + // Don't initialize iUsbServer here (it is set through NewL) + iDeviceState = EUsbDeviceStateUndefined; + iDeviceStatePrev = EUsbDeviceStateUndefined; + } + +// --------------------------------------------------------------------------- +// Activates listening request +// --------------------------------------------------------------------------- +// +TInt CDunUsbListen::Activate() + { + FTRACE(FPrint( _L( "CDunUsbListen::Activate()" ) )); + + if ( iListenState != EUsbListenStateIdle ) + { + FTRACE(FPrint( _L( "CDunUsbListen::Activate() (not ready) complete" ) )); + return KErrNotReady; + } + iDeviceStatePrev = iDeviceState; + iStatus = KRequestPending; + iUsbServer.DeviceStateNotification( KDunUsbDeviceStateMask, + iDeviceState, + iStatus ); + SetActive(); + iListenState = EUsbListenStateListening; + FTRACE(FPrint( _L( "CDunUsbListen::Activate() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Called when read or write operation is ready. +// --------------------------------------------------------------------------- +// +void CDunUsbListen::RunL() + { + FTRACE(FPrint( _L( "CDunUsbListen::RunL() iStatus=%d"), iStatus.Int() )); + iListenState = EUsbListenStateIdle; + + if ( iStatus.Int() != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbListen::RunL() (ERROR) complete" ))); + iServer->NotifyPluginCloseRequest( KDunUsbPluginUid, ETrue ); + return; + } + + FTRACE(FPrint( _L( "CDunUsbListen::RunL() Usb device state =%X, Issue request" ), iDeviceState)); + + TDunPluginState parentState = iServer->GetPluginStateByUid( KDunUsbPluginUid ); + + TInt retTemp = KErrNone; + if ( iDeviceState == EUsbDeviceStateConfigured && + iDeviceStatePrev != EUsbDeviceStateConfigured && + parentState != EDunStateChanneled ) + { + // USB has been connected&configured and we are in PC Suite mode + FTRACE(FPrint( _L( "CDunUsbListen::RunL() DeviceState is configured -> open connection" ) )); + TBool noFreeChans = EFalse; + // noFreeChans will be omitted (not needed to set to RComm) + retTemp = iParent->NotifyChannelAllocate( noFreeChans ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbListen::RunL() channel allocation failed!" ) )); + iServer->NotifyPluginCloseRequest( KDunUsbPluginUid, ETrue ); + return; + } + } + else if ( iDeviceState < EUsbDeviceStateConfigured && + iDeviceStatePrev >= EUsbDeviceStateConfigured && + parentState == EDunStateChanneled ) + { + FTRACE(FPrint( _L( "CDunUsbListen::RunL() DeviceState is not configured -> close connection" ) )); + retTemp = iParent->NotifyChannelFree(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbListen::RunL() channel free failed!" ) )); + iServer->NotifyPluginCloseRequest( KDunUsbPluginUid, ETrue ); + return; + } + } + + // Start listening again + Activate(); + + FTRACE(FPrint( _L( "CDunUsbListen::RunL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Cancel current activity. +// --------------------------------------------------------------------------- +// +void CDunUsbListen::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/plugins/src/usb/DunUsbPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/plugins/src/usb/DunUsbPlugin.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,781 @@ +/* +* Copyright (c) 2006-2007 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: DUN USB plugin +* +*/ + + +#include +#include +#include "DunPlugin.h" +#include "DunUtils.h" +#include "DunUsbPlugin.h" +#include "DunDebug.h" + +_LIT( KUsbCsyName, "ECACM" ); +_LIT( KUsbPortName, "ACM" ); +_LIT( KUsbPortPort, "::" ); +_LIT( KUsbLddName, "EUSBC" ); +_LIT( KUsbChannelName, "DUNUSB::" ); + +const TInt KCharactersInTInt = 10; // For "2147483648" +const TUint8 KDefaultAcmProtocolNum = 0x01; // Hayes compatible modem + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CDunUsbPlugin::CDunUsbPlugin +// --------------------------------------------------------------------------- +// +CDunUsbPlugin::CDunUsbPlugin() : + iServer( NULL ), + iUsbListen( NULL ), + iUsbConfig( NULL ), + iTransporter( NULL ) + { + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunUsbPlugin::~CDunUsbPlugin() + { + FTRACE(FPrint( _L( "CDunUsbPlugin::~CDunUsbPlugin()" ) )); + Uninitialize(); + FTRACE(FPrint( _L( "CDunUsbPlugin::~CDunUsbPlugin() complete" ) )); + } + +// --------------------------------------------------------------------------- +// State of this plugin +// --------------------------------------------------------------------------- +// +TDunPluginState CDunUsbPlugin::PluginState() + { + return iServer->GetPluginStateByUid( KDunUsbPluginUid ); + } + +// --------------------------------------------------------------------------- +// Constructs a listener object for this plugin +// --------------------------------------------------------------------------- +// +void CDunUsbPlugin::ConstructListenerL() + { + FTRACE(FPrint(_L("CDunUsbPlugin::ConstructListenerL()"))); + if ( PluginState() != EDunStateLoaded ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::ConstructListenerL() (not ready) complete"))); + User::Leave( KErrNotReady ); + } + ReportStateChangeUp( EDunStateTryListen ); + if ( iUsbListen ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::ConstructListenerL() (already exists) complete"))); + User::Leave( KErrAlreadyExists ); + } + InitUsbL(); + CDunUsbListen* listen = CDunUsbListen::NewL( iServer, this, iUsbServer ); + CleanupStack::PushL( listen ); + TInt retTemp = listen->IssueRequestL(); + CleanupStack::Pop( listen ); + iUsbListen = listen; + // Here return value of KErrAlreadyExists means the device is already + // configured + // In this case we have to switch directly to channeled mode + ReportStateChangeUp( EDunStateListening ); + if ( retTemp == KErrAlreadyExists ) + { + TBool noFreeChans = EFalse; + // noFreeChans will be omitted (not needed to set to RComm) + NotifyChannelAllocate( noFreeChans ); // Create channel and change state + } + FTRACE(FPrint(_L("CDunUsbPlugin::ConstructListenerL() complete"))); + } + +// --------------------------------------------------------------------------- +// Initializes USB by loading LDD +// --------------------------------------------------------------------------- +// +void CDunUsbPlugin::InitUsbL() + { + FTRACE(FPrint( _L( "CDunUsbPlugin::InitUsbL()") )); + // Load Logical device driver for USB + FTRACE(FPrint( _L( "CDunUsbPlugin::InitUsbL() LoadLogicalDevice") )); + TInt retTemp = User::LoadLogicalDevice( KUsbLddName ); + if ( retTemp!=KErrAlreadyExists && retTemp!=KErrNone ) + { + User::Leave( retTemp ); + } + // Connect to the USB Manager server + FTRACE(FPrint( _L( "CDunUsbPlugin::InitUsbL() Connect()") )); + User::LeaveIfError( iUsbServer.Connect() ); + // Create USB configuration accessor and listener + iUsbConfig = CDunUsbConfig::NewL( iServer, this, KDefaultAcmProtocolNum ); + FTRACE(FPrint( _L( "CDunUsbPlugin::InitUsbL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes all usable USB ports for DUN +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::InitPorts() + { + FTRACE(FPrint( _L( "CDunUsbPlugin::InitPorts() (num=%d)" ), iUsbPorts.Count())); + TInt i; + TInt retTemp = CreateAllPorts(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::InitPorts() (ERROR) complete" ))); + return retTemp; + } + TInt count = iUsbPorts.Count(); + for ( i=0; iStop(); + // Find out what ports can be supported and append them to array + TBool validConfig; + TUsbPortEntity entity; + for ( TInt i=0;; i++ ) + { + retTemp = iUsbConfig->GetConfigValidityByIndex( i, validConfig ); + if ( retTemp != KErrNone ) + { + break; + } + if ( !validConfig ) + { + continue; + } + // Valid config found, append it to array + entity.iPortNum = i; + retTemp = iUsbPorts.Append( entity ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::CreateAllPorts() (append failed!) complete" ) )); + return retTemp; + } + } + FTRACE(FPrint( _L( "CDunUsbPlugin::CreateAllPorts() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Initializes one USB port for DUN +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::InitOnePort( TUsbPortEntity* aEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::InitOnePort()" ))); + if ( !aEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::InitOnePort() (not initialized!) complete" ))); + return KErrGeneral; + } + TInt retTemp; + TName portName; + portName.Copy( KUsbPortName ); + portName.Append( KUsbPortPort ); + portName.AppendNum( aEntity->iPortNum ); + retTemp = aEntity->iUsbPort.Open( iCommServer, + portName, + ECommExclusive, + ECommRoleDCE ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::InitOnePort() Open failed (%d)" ), retTemp)); + return retTemp; + } + TRAPD( retTrap, SetChannelL(aEntity) ); + if ( retTrap != KErrNone ) + { + iTransporter->FreeChannel( &aEntity->iUsbPort ); + FTRACE(FPrint( _L( "CDunUsbPlugin::InitOnePort() (trapped!) complete" ))); + return retTrap; + } + FTRACE(FPrint( _L( "CDunUsbPlugin::InitOnePort() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets channel for one USB port +// --------------------------------------------------------------------------- +// +void CDunUsbPlugin::SetChannelL( TUsbPortEntity* aEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::SetChannelL()" ))); + if ( !aEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::SetChannelL() (not initialized!) complete" ))); + User::Leave( KErrGeneral ); + } + HBufC8* channelName = HBufC8::NewMaxLC( KUsbChannelName().Length() + + KCharactersInTInt ); + TPtr8 channelNamePtr = channelName->Des(); + channelNamePtr.Copy( KUsbChannelName ); + channelNamePtr.AppendNum( aEntity->iPortNum ); + iTransporter->AllocateChannelL( &aEntity->iUsbPort, + KDunUsbPluginUid, + channelNamePtr, + ETrue, + this ); + AddSkippedErrorL( KErrUsbInterfaceChange, &aEntity->iUsbPort ); + iTransporter->AddConnMonCallbackL( &aEntity->iUsbPort, + this, + EDunReaderUpstream, + EFalse ); + iTransporter->AddConnMonCallbackL( &aEntity->iUsbPort, + this, + EDunWriterUpstream, + EFalse ); + iTransporter->AddConnMonCallbackL( &aEntity->iUsbPort, + this, + EDunReaderDownstream, + EFalse ); + iTransporter->AddConnMonCallbackL( &aEntity->iUsbPort, + this, + EDunWriterDownstream, + EFalse ); + iTransporter->IssueTransferRequestsL( &aEntity->iUsbPort ); + CleanupStack::PopAndDestroy( channelName ); + FTRACE(FPrint( _L( "CDunUsbPlugin::SetChannelL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Adds skipped error code to Transporter +// The skipped error is added to local media's read and write operations +// --------------------------------------------------------------------------- +// +void CDunUsbPlugin::AddSkippedErrorL( TInt aError, RComm* aComm ) + { + iTransporter->AddSkippedErrorL( aError, aComm, EDunReaderUpstream ); + iTransporter->AddSkippedErrorL( aError, aComm, EDunWriterDownstream ); + } + +// --------------------------------------------------------------------------- +// Sets new state +// New state must be one more than the old state +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::ReportStateChangeUp( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::ReportStateChangeUp()"))); + TInt retTemp = iServer->NotifyPluginStateChangeUp( aPluginState, + KDunUsbPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::ReportStateChangeUp() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunUsbPlugin::ReportStateChangeUp() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets new state +// New state must be one less than the old state +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::ReportStateChangeDown( TDunPluginState aPluginState ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::ReportStateChangeDown()"))); + TInt retTemp = iServer->NotifyPluginStateChangeDown( aPluginState, + KDunUsbPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::ReportStateChangeDown() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunUsbPlugin::ReportStateChangeDown() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Frees existing channels +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::FreeChannels() + { + FTRACE(FPrint(_L("CDunUsbPlugin::FreeChannels()"))); + if ( PluginState() != EDunStateTryUninitialize ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::FreeChannels() (not ready) complete" ) )); + return KErrNotReady; + } + TInt i; + TInt count = iUsbPorts.Count(); + for ( i=0; iFreeChannel( &iUsbPorts[i].iUsbPort ); + iUsbPorts[i].iUsbPort.SetSignals( 0, KSignalDCEOutputs ); + iUsbPorts[i].iUsbPort.Close(); + } + } + iUsbPorts.Close(); + if ( iCommServer.Handle() != KNullHandle ) + { + iCommServer.UnloadCommModule( KUsbCsyName ); + iCommServer.Close(); + } + FTRACE(FPrint(_L("CDunUsbPlugin::FreeChannels() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Uninitializes this plugin +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::Uninitialize() + { + FTRACE(FPrint( _L( "CDunUsbPlugin::Uninitialize()" ) )); + ReportStateChangeDown( EDunStateTryUninitialize ); + // Free channel(s), ignore errors + FreeChannels(); + delete iUsbListen; // delete before iUsbServer close + iUsbListen = NULL; + delete iUsbConfig; + iUsbConfig = NULL; + if ( iUsbServer.Handle() != KNullHandle ) + { + iUsbServer.Close(); + } + User::FreeLogicalDevice( KUsbLddName ); + ReportStateChangeUp( EDunStateUninitialized ); + ReportStateChangeUp( EDunStateTryLoad ); + ReportStateChangeUp( EDunStateLoaded ); + FTRACE(FPrint( _L( "CDunUsbPlugin::Uninitialize() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Gets port's index and entity by connection ID +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::GetEntityByConnId( TConnId aConnId, + TUsbPortEntity*& aEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::GetEntityByConnId()")) ); + TInt i; + TInt count = iUsbPorts.Count(); + for ( i=0; iIssueRequest(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::NotifyChannelAllocate() (ERROR) complete"))); + return retTemp; + } + iShutdown = EFalse; + ReportStateChangeUp( EDunStateChanneled ); + FTRACE(FPrint(_L("CDunUsbPlugin::NotifyChannelAllocate() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunListenCallback. +// Gets called when an existing channel must be freed +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::NotifyChannelFree() + { + FTRACE(FPrint(_L("CDunUsbPlugin::NotifyChannelFree()"))); + if ( PluginState() != EDunStateChanneled ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::NotifyChannelFree() (not ready) complete"))); + return KErrNotReady; + } + // Cable removed or PC sleep, hibernate or reset. + // Just remove channels. + ReportStateChangeDown( EDunStateTryUninitialize ); + TInt retTemp = FreeChannels(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunUsbPlugin::NotifyChannelFree() (ERROR) complete"))); + return retTemp; + } + ReportStateChangeUp( EDunStateUninitialized ); + ReportStateChangeUp( EDunStateTryLoad ); + ReportStateChangeUp( EDunStateLoaded ); + ReportStateChangeUp( EDunStateTryListen ); + ReportStateChangeUp( EDunStateListening ); + FTRACE(FPrint(_L("CDunUsbPlugin::NotifyChannelFree() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunConnMon. +// Gets called when line status changes or when any type of error is detected +// --------------------------------------------------------------------------- +// +void CDunUsbPlugin::NotifyProgressChangeL( + TConnId aConnId, + TDunConnectionReason aConnReason ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyProgressChangeL()")) ); + // Find matching failed ID + TUsbPortEntity* foundEntity = NULL; + TInt foundIndex = GetEntityByConnId( aConnId, foundEntity ); + if ( !foundEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyProgressChangeL() (not found) complete")) ); + User::Leave( KErrNotFound ); + } + if ( aConnReason.iReasonType == EDunReasonTypeRW || + aConnReason.iReasonType == EDunReasonTypeRunL ) + { + // The following check will make it possible for CDunUsbListen to react + // to cable removal (iUsbPort.SubSessionHandle() ) + { + iTransporter->FreeChannel( &foundEntity->iUsbPort ); + foundEntity->iUsbPort.SetSignals( 0, KSignalDCEOutputs ); + foundEntity->iUsbPort.Close(); + } + TInt retTemp = InitOnePort( foundEntity ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyProgressChangeL() (ERROR) complete")) ); + User::Leave( KErrGeneral ); + } + // Now this plugin was basically "restarted", but only for one + // channel. Because transporter has channels with waiters, notify + // server to reopen queued plugin(s) + iServer->NotifyPluginReopenRequest(); + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyProgressChangeL() complete")) ); + } + +// --------------------------------------------------------------------------- +// From class MDunBufferCorrection. +// Gets called when request to change local media's buffer size +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::NotifyBufferCorrection( TInt aLength ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyBufferCorrection()")) ); + /* + * This method modifies the default buffer length to match the maximum value + * used by "CanHandleZLP=0" configuration option. This length is nearest length + * divisible by 64 - 1. With slow USB compared to high speed HSDPA some products + * can start to collect data to Dataport which results in full packet writes to + * USB. However, the default full packet must not be divisible by 64, which results + * in the ACM to send the full packet to LDD plus one extra packet with one byte + * (disabling interrupts for a long time with current non-DMA USB driver). + */ + TInt newLength = aLength; + if ( newLength % 64 == 0 ) + { + newLength = ((aLength >> 6) << 6) - 1; + } + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyBufferCorrection() complete")) ); + return newLength; + } + +// --------------------------------------------------------------------------- +// From class MDunUsbConfig. +// Gets called when one or more ACM configurations are added +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::NotifyConfigAddition( TInt aIndex ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigAddition()")) ); + // Configuration added so aIndex is the port number to be added to array. + // This port number must not already exist in the array. + TUsbPortEntity* foundEntity = NULL; + TInt foundIndex = GetEntityByPortNumber( aIndex, foundEntity ); + if ( foundEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigAddition() (already exists) complete")) ); + return KErrAlreadyExists; + } + // Now either find port with KErrNotFound set as port number or if that is + // not found then try to append to array + foundIndex = GetFirstFreeEntity( foundEntity ); + if ( !foundEntity ) // free not found so add new + { + // Now append the new port to array + TUsbPortEntity newEntity; + newEntity.iPortNum = aIndex; + TInt retTemp = iUsbPorts.Append( newEntity ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigAddition() (append failed!) complete")) ); + return KErrGeneral; + } + // entity not valid here so set now + foundEntity = &iUsbPorts[iUsbPorts.Count()-1]; + } + else // free found so change array + { + foundEntity->iPortNum = aIndex; + } + // Open port and create channel for it + TInt retTemp = InitOnePort( foundEntity ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigAddition() (ERROR) complete" ))); + return KErrGeneral; + } + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigAddition() complete")) ); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunUsbConfig. +// Gets called when one or more ACM configurations are removed +// --------------------------------------------------------------------------- +// +TInt CDunUsbPlugin::NotifyConfigRemoval( TInt aIndex ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigRemoval()")) ); + // Configuration removed so aIndex is the port number to be added to array. + // This port number must already exist in the array. + TUsbPortEntity* foundEntity = NULL; + TInt foundIndex = GetEntityByPortNumber( aIndex, foundEntity ); + if ( !foundEntity ) + { + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigRemoval() (not found) complete")) ); + return KErrNotFound; + } + // Now free channel and mark as unused + iTransporter->FreeChannel( &foundEntity->iUsbPort ); + foundEntity->iUsbPort.SetSignals( 0, KSignalDCEOutputs ); + foundEntity->iUsbPort.Close(); + iUsbPorts[foundIndex].iPortNum = KErrNotFound; + FTRACE(FPrint( _L( "CDunUsbPlugin::NotifyConfigRemoval() complete")) ); + return KErrNone; + } + +// ======== GLOBAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLocalPluginL implements factory construction for +// the class CDunUsbPlugin. +// The function is exported at ordinal 1. +// Returns: Pointer: The new instance of CDunUsbPlugin +// --------------------------------------------------------------------------- +// +EXPORT_C MDunLocalMediaPlugin* NewLocalPluginL() + { + return new (ELeave) CDunUsbPlugin; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunatext.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunatext.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2008 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: Image description file for project DUN ATEXT +* +*/ + + +#ifndef __DUNATEXT_IBY__ +#define __DUNATEXT_IBY__ + +#ifdef __DIALUP_NETWORKING +file=ABI_DIR\BUILD_DIR\dunatext.dll SHARED_LIB_DIR\dunatext.dll +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunbt.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunbt.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2006-2007 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: Image description file for project DUN BT plugin +* +*/ + + +#ifndef __DUNBT_IBY__ +#define __DUNBT_IBY__ + +#ifdef __DIALUP_NETWORKING +#ifdef __BT +file=ABI_DIR\BUILD_DIR\dunbt.dll SHARED_LIB_DIR\dunbt.dll +#endif +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunclient.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunclient.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2006-2007 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: Image description file for project DUN +* +*/ + + +#ifndef __DUNCLIENT_IBY__ +#define __DUNCLIENT_IBY__ + +#ifdef __DIALUP_NETWORKING +ECOM_PLUGIN(dunclient.dll,dunclient.rsc) +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunir.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunir.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2006-2007 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: Image description file for project DUN IR plugin +* +*/ + + +#ifndef __DUNIR_IBY__ +#define __DUNIR_IBY__ + +#ifdef __DIALUP_NETWORKING +#ifdef __IRDA +file=ABI_DIR\BUILD_DIR\dunir.dll SHARED_LIB_DIR\dunir.dll +#endif +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunserver.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunserver.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2006-2007 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: Image description file for project DUN +* +*/ + + +#ifndef __DUNSERVER_IBY__ +#define __DUNSERVER_IBY__ + +#ifdef __DIALUP_NETWORKING +file=ABI_DIR\BUILD_DIR\dunserver.exe PROGRAMS_DIR\dunserver.exe +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunusb.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunusb.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2006-2007 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: Image description file for project DUN USB plugin +* +*/ + + +#ifndef __DUNUSB_IBY__ +#define __DUNUSB_IBY__ + +#ifdef __DIALUP_NETWORKING +#ifdef __USB +file=ABI_DIR\BUILD_DIR\dunusb.dll SHARED_LIB_DIR\dunusb.dll +#endif +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/rom/dunutils.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/rom/dunutils.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2006-2007 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: Image description file for project DUN utilities +* +*/ + + +#ifndef __DUNUTILS_IBY__ +#define __DUNUTILS_IBY__ + +#ifdef __DIALUP_NETWORKING +file=ABI_DIR\BUILD_DIR\dunutils.dll SHARED_LIB_DIR\dunutils.dll +#endif + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2006 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: +* This file provides the information required for building the +* whole of a DUN server +* +*/ + +#include + +PRJ_PLATFORMS + +PRJ_EXPORTS +../../rom/dunserver.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunserver.iby) + +PRJ_MMPFILES +dunserver.mmp + +PRJ_TESTMMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/group/dunserver.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/group/dunserver.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2006-2007 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: Project definition file for project DUN server +* +*/ + + +#include + +TARGET dunserver.exe +TARGETTYPE EXE +UID 0x1000008d 0x0100387D + +CAPABILITY CAP_SERVER NetworkControl CommDD LocalServices WriteDeviceData +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE DunSession.cpp +SOURCE DunServer.cpp +SOURCE DunServerUtils.cpp +SOURCE DunCloseWait.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc ../../utils/inc +USERINCLUDE ../../../inc ../../../../inc + +LIBRARY euser.lib +LIBRARY dunutils.lib +LIBRARY btfeatures.lib +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/inc/DunCloseWait.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/inc/DunCloseWait.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,152 @@ +/* +* Copyright (c) 2006-2007 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: Common waiter for closing self-destruct plugins +* +*/ + +#ifndef C_CDUNCLOSEWAIT_H +#define C_CDUNCLOSEWAIT_H + +#include + +class MDunLocalMediaPlugin; + +/** + * Notification interface class to report requst for closing a plugin + * + * @since S60 v5.0 + */ +NONSHARABLE_CLASS( MDunCloseWait ) + { + +public: + + /** + * Gets called when closing of plugins should be done + * + * @since S60 5.0 + * @param aPluginsToClose Plugins to be closed + * @return Symbian error code on error, KErrNone otherwise + */ + virtual void NotifyPluginCloseAfterWait( + RPointerArray& aPluginsToClose ) = 0; + + }; + +/** + * Common waiter for closing self-destruct plugins + * + * @since S60 v5.0 + */ +NONSHARABLE_CLASS( CDunCloseWait ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aCallback Callback to call when notification via MDunCloseWait + * to be made + * @return Instance of self + */ + static CDunCloseWait* NewL( MDunCloseWait* aCallback ); + + /** + * Destructor. + */ + virtual ~CDunCloseWait(); + + /** + * Resets data to initial values + * + * @since S60 5.0 + * @return None + */ + void ResetData(); + + /** + * Adds a new plugin to be closed to the list + * + * @since S60 5.0 + * @param aPluginToClose The plugin to be closed + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddPluginToClose( MDunLocalMediaPlugin* aPluginToClose ); + + /** + * Issues request to start closing the objects in the close list + * + * @since S60 5.0 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops closing the objects in the close list + * + * @since S60 5.0 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunCloseWait( MDunCloseWait* aCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 5.0 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when closing of the plugins should be done + * + * @since S60 5.0 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 5.0 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback to call when notification via MDunCloseWait to be made + */ + MDunCloseWait* iCallback; + + /** + * List of plugins to be closed + * Not own. + */ + RPointerArray iCloseList; + +}; + +#endif // C_CDUNCLOSEWAIT_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/inc/DunServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/inc/DunServer.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,361 @@ +/* +* Copyright (c) 2006-2007 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: DUN server +* +*/ + + +#ifndef C_CDUNSERVER_H +#define C_CDUNSERVER_H + +#include +#include "DunPlugin.h" +#include "DunCloseWait.h" +#include "dunserverdef.h" +#include "dundomainpskeys.h" + +_LIT( KDunPluginBt, "dunbt.dll" ); +_LIT( KDunPluginIrda, "dunir.dll" ); +_LIT( KDunPluginUsb, "dunusb.dll" ); + +class MDunSession; +class MDunServerUtility; + +/** + * Class used to store data needed for each separate plugin + * One TDunConnectionData data contains objects needed for one plugin + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunConnectionData ) + { + +public: + + /** + * Pointer to plugin DLL + * Not own. + */ + MDunLocalMediaPlugin* iLocalModulePtr; + + /** + * Current state of plugin + */ + TDunPluginState iPluginState; + + /** + * DLL library server needed to open/close existing plugin + */ + RLibrary iModuleLibrary; + + /** + * Loaded plugin's UID + */ + TUid iLocalModuleUid; + + }; + +/** + * Main DUN server's class + * + * @since S60 v3.2 + */ +class CDunServer : public CPolicyServer, + public MDunServerCallback, + public MDunCloseWait + { + + friend class CDunServerUtils; + +public: + + /** + * Two-phased constructor. + * @return Instance of self + */ + static CDunServer* NewL(); + + /** + * Destructor. + */ + virtual ~CDunServer(); + + /** + * Notification to manage local media On request + * This comes from client + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to open + * @return None + */ + TInt NotifyMediaOpenRequest( TUid aPluginUid ); + + /** + * Notification to manage local media Off request + * This comes from client + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to close + * @return None + */ + TInt NotifyMediaCloseRequest( TUid aPluginUid ); + + /** + * Current active connection + * (For testing purposes only) + * + * @since S60 5.0 + * @return Active connection, NULL otherwise + */ + TConnId ActiveConnection(); + + /** + * Increases reference count made by sessions + * This comes from client + * + * @since S60 3.2 + * @return None + */ + void IncRefCount(); + + /** + * Decreases reference count made by sessions + * This comes from client + * + * @since S60 3.2 + * @return None + */ + void DecRefCount(); + +// from base class CServer2 (CPolicyServer -> CServer2) + + /** + * From CServer2 (CPolicyServer derived from CServer2). + * Creates a server-side client session object. + * + * @since S60 3.2 + * @param aVersion Version information supplied by the client + * @return A pointer to the newly created server-side client session + */ + CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& ) const; + +private: + + CDunServer( TInt aPriority ); + + void ConstructL(); + + /** + * Opens local media plugin by UID + * + * @since S60 3.2 + * @param aPluginUid UID of local media plugin to open + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also TryClosePlugin()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt OpenMediaByUid( TUid aPluginUid, TBool aDequeue ); + + /** + * Closes local media plugin by UID + * + * @since S60 3.2 + * @param aPluginUid UID of local media plugin to close + * @param aClearQueued ETrue if clear from plugin queue wanted, + * EFalse otherwise + * @param aClientClose ETrue if close originator is client + * @param aSelfDelete ETrue if plugin closes itself, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt CloseMediaByUid( TUid aPluginUid, + TBool aClearQueued, + TBool aClientClose, + TBool aSelfDelete ); + + /** + * Reopens plugins from plugin queue + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ReopenQueuedPlugins(); + +// from base class MDunServerCallback + + /** + * From MDunServerCallback. + * Searches for plugin in connection data and returns its state + * + * @since S60 3.2 + * @param aPluginUid UID of local media plugin to search for + * @return State of plugin + */ + TDunPluginState GetPluginStateByUid( TUid aPluginUid ); + + /** + * From MDunServerCallback. + * Notification about request to change plugin state up by one level + * + * @since S60 3.2 + * @param aPluginState New state to set for a local media plugin + * @param aPluginUid UID of the local media plugin whose state to change + * @return KErrNotFound if plugin not found by UID, + KErrNotSupported if unknown state, + KErrNone otherwise + */ + TInt NotifyPluginStateChangeUp( TDunPluginState aPluginState, + TUid aPluginUid ); + + /** + * From MDunServerCallback. + * Notification about request to change plugin state down by one level + * + * @since S60 3.2 + * @param aPluginState New state to set for a local media plugin + * @param aPluginUid UID of the local media plugin whose state to change + * @return KErrNotFound if plugin not found by UID, + KErrNotSupported if unknown state, + KErrNone otherwise + */ + TInt NotifyPluginStateChangeDown( TDunPluginState aPluginState, + TUid aPluginUid ); + + /** + * From MDunServerCallback. + * Notification about plugin restart request + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to restart + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyPluginRestart( TUid aPluginUid ); + + /** + * From MDunServerCallback. + * Notification about plugin reopen request + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyPluginReopenRequest(); + +// from base class MDunPluginManager (MDunServerCallback->MDunPluginManager). + + /** + * From MDunPluginManager (MDunServerCallback->MDunPluginManager). + * Notification about request to enqueue a plugin to plugin queue + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to enqueue + * @return KErrNotFound = plugin not found by UID, + KErrAlreadyExists = plugin already in queue, + KErrNone otherwise + */ + TInt NotifyPluginEnqueueRequest( TUid aPluginUid ); + + /** + * From MDunPluginManager (MDunServerCallback->MDunPluginManager). + * Notification about request to dequeue a plugin from plugin queue + * Just removes a found UID from the queue + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to dequeue + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyPluginDequeueRequest( TUid aPluginUid ); + + /** + * From MDunPluginManager (MDunServerCallback->MDunPluginManager). + * Notification about request to close a plugin + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to close + * @param aSelfClose ETrue if plugin closes itself, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyPluginCloseRequest( TUid aPluginUid, + TBool aSelfClose ); + +// from base class MDunCloseWait + + /** + * From MDunCloseWait. + * Notification about request to close a plugin after wait + * + * @since S60 5.0 + * @param aPluginsToClose Plugins to be closed + * @return Symbian error code on error, KErrNone otherwise + */ + void NotifyPluginCloseAfterWait( + RPointerArray& aPluginsToClose ); + +private: // data + + /** + * Pointer to common utility class + * Own. + */ + MDunServerUtility* iUtility; + + /** + * Transporter to use for network side communication + * Own. + */ + CDunTransporter* iTransporter; + + /** + * Waiter for closing self-destruct plugins + * Own. + */ + CDunCloseWait* iCloseWait; + + /** + * Array of TDunConnectionData needed for each loaded plugin + */ + RArray iConnData; + + /** + * Array of plugin UIDs + * Used for queuing plugins that have no resources to use + * Used for dequeuing plugins when free resources detected + */ + RArray iPluginQueue; + + /** + * Array of plugin UIDs + * Used for queuing plugins that were successfully closed outside + * this server. This is to avoid returning KErrNotFound to LOCOD + * when NotifyMediaCloseRequest() is caught + */ + RArray iClosedQueue; + + /** + * Connection status of dialup: active or inactive + * Used for updating KPSUidDialupConnStatus Pub&Sub key + */ + TDialupConnStatus iConnStatus; + + /** + * Reference count of client sides + */ + TInt iRefCount; + + }; + +#endif // C_CDUNSERVER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/inc/DunServerSecurityPolicy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/inc/DunServerSecurityPolicy.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2006-2007 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: DUN server security policy definition +* +*/ + + +#ifndef DUNSERVER_SECURITYPOLICY_H +#define DUNSERVER_SECURITYPOLICY_H + +#include "dunserverdef.h" + +// First range for KServerRanges[] definition, do not change +const TInt KFirstServerRange = 0; + +// First range for KServerElementsIndex[] definition, do not change +const TInt KFirstElementRange = 0; + +// --------------------------------------------------------------------------- +// DunServer's policy +// --------------------------------------------------------------------------- +// + +// Definition of the ranges of IPC numbers +const TInt KServerRanges[] = + { + KFirstServerRange, // Range 1: all client APIs + EInvalidIpc // Range 2: Invalid IPC opcode + }; + +const TUint KServerRangeCount = sizeof( KServerRanges ) / sizeof( TInt ); + +// Policy to implement for each of the above ranges +const TUint8 KServerElementsIndex[KServerRangeCount] = + { + KFirstElementRange, // applies to 0th range + CPolicyServer::ENotSupported // out of range DUN's IPC + }; + +//Specific capability checks +const CPolicyServer::TPolicyElement KServerElements[] = + { + {_INIT_SECURITY_POLICY_C2(ECapabilityLocalServices, ECapabilityNetworkServices), + CPolicyServer::EFailClient + } // Policy 0 + }; + +// Policy structure for DunServer. This is passed to DunServer's constructor +const CPolicyServer::TPolicy KDunServerPolicy = + { + CPolicyServer::EAlwaysPass, // Indicates that Connect attempts should be processed without any further checks. + KServerRangeCount, // Range count + KServerRanges, // ranges array + KServerElementsIndex, // elements' index + KServerElements // array of elements + }; + +#endif // DUNSERVER_SECURITYPOLICY_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/inc/DunServerUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/inc/DunServerUtils.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,389 @@ +/* +* Copyright (c) 2006-2007 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: Utility class for CDunServer +* +*/ + + +#ifndef C_CDUNSERVERUTILS_H +#define C_CDUNSERVERUTILS_H + +#include +#include "DunPlugin.h" + +class CDunServer; + +/** + * Utility accessor class for CDunServer class + * Basically a collection of miscellaneous helper methods + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunServerUtility ) + { + +public: + + /** + * From MDunServerUtility. + * Closes plugins with state marked as zombie + * + * @since S60 3.2 + * @return KErrGeneral = close on any of the plugins failed, + KErrNone otherwise + */ + virtual TInt RemoveZombiePlugins() = 0; + + /** + * From MDunServerUtility. + * Loads local media module + * + * @since S60 3.2 + * @param aPluginUid UID of the local media module to load + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt CreateNewPlugin( TUid aPluginUid ) = 0; + + /** + * From MDunServerUtility. + * Constructs local media module + * + * @since S60 3.2 + * @param aPluginUid UID of the local media module to construct + * @param aDllName Name of the DLL to the constructed local media module + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt ConstructLocalMediaModule( const TUid& aPluginUid, + const TPtrC& aDllName ) = 0; + + /** + * From MDunServerUtility. + * Clears queued UIDs + * + * @since S60 3.2 + * @param aPluginUid UID of local media plugin to remove + * @param aClearClosed ETrue if clear from closed queued wanted + * @param aClearQueued ETrue if clear from plugin queue wanted + * @return ETrue if plugin UID was removed, EFalse otherwise + */ + virtual TBool ClearQueuedUIDs( TUid aPluginUid, + TBool aClearClosed, + TBool aClearQueued ) = 0; + + /** + * From MDunServerUtility. + * Tries to close loaded local media plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also OpenMediaByUid()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @param aClientClose ETrue if close originator is client + * @param aSelfClose ETrue if plugin closes itself, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt TryClosePlugin( TInt aIndex, + TBool aDequeue, + TBool aClientClose, + TBool aSelfClose ) = 0; + + /** + * From MDunServerUtility. + * Closes a plugin directly without uninitializing it + * + * @since S60 5.0 + * @param aIndex Index of plugin in connectiondata + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also OpenMediaByUid()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @param aClientClose ETrue if close originator is client + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoClosePlugin( TInt aIndex, + TBool aDequeue, + TBool aClientClose ) = 0; + + /** + * From MDunServerUtility. + * Does immediate close of plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also OpenMediaByUid()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoImmediatePluginClose( TInt aIndex, + TBool aDequeue ) = 0; + + /** + * From MDunServerUtility. + * Tries uninitialization and after that listening state switch on a plugin + * + * @since S60 3.2 + * @param aPluginUid UID of the plugin to initialize to listening state + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt TryInitializeToListening( TUid aPluginUid ) = 0; + + /** + * From MDunServerUtility. + * Tries listening state switch on a plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @return KErrNotFound = plugin not found, + KErrNotReady = wrong state, + KErrNone otherwise + */ + virtual TInt TryListening( TInt aIndex ) = 0; + + /** + * From MDunServerUtility. + * Tries uninitialization of a plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @return KErrNotFound = plugin not found, KErrNone otherwise + */ + virtual TInt TryUninitialize( TInt aIndex ) = 0; + + }; + +/** + * DUN server's utility class + * + * @since S60 v3.2 + */ +class CDunServerUtils : public CBase, + public MDunServerUtility + { + +public: + + /** + * Two-phased constructor. + * @param aParent Parent class owning this friend class (CDunServer) + * @return Instance of self + */ + static CDunServerUtils* NewL( CDunServer& aParent ); + + /** + * Destructor. + */ + virtual ~CDunServerUtils(); + +private: + + CDunServerUtils( CDunServer& aParent ); + + void ConstructL(); + +// from base class MDunServerUtility + + /** + * From MDunServerUtility. + * Closes plugins with state marked as zombie + * + * @since S60 3.2 + * @return KErrGeneral = close on any of the plugins failed, + KErrNone otherwise + */ + TInt RemoveZombiePlugins(); + + /** + * From MDunServerUtility. + * Loads local media module + * + * @since S60 3.2 + * @param aPluginUid UID of the local media module to load + * @return Symbian error code on error, KErrNone otherwise + */ + TInt CreateNewPlugin( TUid aPluginUid ); + + /** + * From MDunServerUtility. + * Constructs local media module + * + * @since S60 3.2 + * @param aPluginUid UID of the local media module to construct + * @param aDllName Name of the DLL to the constructed local media module + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ConstructLocalMediaModule( const TUid& aPluginUid, + const TPtrC& aDllName ); + + /** + * From MDunServerUtility. + * Clears queued UIDs + * + * @since S60 3.2 + * @param aPluginUid UID of local media plugin to remove + * @param aClearClosed ETrue if clear from closed queued wanted + * @param aClearQueued ETrue if clear from plugin queue wanted + * @return ETrue if plugin UID was removed, EFalse otherwise + */ + TBool ClearQueuedUIDs( TUid aPluginUid, + TBool aClearClosed, + TBool aClearQueued ); + + /** + * From MDunServerUtility. + * Tries to close loaded local media plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also OpenMediaByUid()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @param aClientClose ETrue if close originator is client + * @param aSelfClose ETrue if plugin closes itself, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt TryClosePlugin( TInt aIndex, + TBool aDequeue, + TBool aClientClose, + TBool aSelfClose ); + + /** + * From MDunServerUtility. + * Closes a plugin directly without uninitializing it + * + * @since S60 5.0 + * @param aIndex Index of plugin in connectiondata + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also OpenMediaByUid()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @param aClientClose ETrue if close originator is client + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoClosePlugin( TInt aIndex, + TBool aDequeue, + TBool aClientClose ); + + /** + * From MDunServerUtility. + * Does immediate close of plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @param aDequeue ETrue if restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (normal case, see also OpenMediaByUid()), + * EFalse if no restarting of queued plugins and plugin + * dequeue wanted after successful plugin close + * (in this case caller is reopener itself, see also + * ReopenQeueuedPlugins()) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoImmediatePluginClose( TInt aIndex, + TBool aDequeue ); + + /** + * From MDunServerUtility. + * Tries uninitialization and after that listening state switch on a plugin + * + * @since S60 3.2 + * @param aPluginUid UID of the plugin to initialize to listening state + * @return Symbian error code on error, KErrNone otherwise + */ + TInt TryInitializeToListening( TUid aPluginUid ); + + /** + * From MDunServerUtility. + * Tries listening state switch on a plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @return KErrNotFound = plugin not found, + KErrNotReady = wrong state, + KErrNone otherwise + */ + TInt TryListening( TInt aIndex ); + + /** + * From MDunServerUtility. + * Tries uninitialization of a plugin + * + * @since S60 3.2 + * @param aIndex Index of plugin in connectiondata + * @return KErrNotFound = plugin not found, KErrNone otherwise + */ + TInt TryUninitialize( TInt aIndex ); + +private: // data + + /** + * Parent class owning this friend class (CDunServer) + */ + CDunServer& iParent; + + /** + * Transporter to use for network side communication + * (from parent iParent) + */ + CDunTransporter*& iTransporter; + + /** + * Waiter for closing self-destruct plugins + * (from parent iParent) + */ + CDunCloseWait*& iCloseWait; + + /** + * Array of TDunConnectionData needed for each loaded plugin + * (from parent iParent) + */ + RArray& iConnData; + + /** + * Array of plugin UIDs (from parent iParent) + * Used for queuing plugins that have no resources to use + * Used for dequeuing plugins when free resources detected + */ + RArray& iPluginQueue; + + /** + * Array of plugin UIDs (from parent iParent) + * Used for queuing plugins that were successfully closed outside + * this server. This is to avoid returning KErrNotFound to LOCOD + * when NotifyMediaCloseRequest() is caught + */ + RArray& iClosedQueue; + + }; + +#endif // C_CDUNSERVERUTILS_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/inc/DunSession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/inc/DunSession.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2006-2007 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: The session object for DUN server +* +*/ + + +#include "DunServer.h" + +#ifndef C_CDUNSESSION_H +#define C_CDUNSESSION_H + +/** + * Manages separate DUN server sessions for client(s) + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunSession ) : public CSession2 + { + +public: + + CDunSession( CDunServer* aDunServer ); + + /** + * Destructor. + */ + virtual ~CDunSession(); + + /** + * Return the version number + * + * @since S60 3.2 + * @return Version number + */ + TVersion Version() const; + +// from base class CSession2 + + /** + * From CSession2. + * Handles the servicing of client requests passed to the server + * + * @since S60 3.2 + * @param aMessage Message containing the client request + * @return None + */ + void ServiceL( const RMessage2 &aMessage ); + + /** + * From CSession2. + * Return a reference to DUN server + * + * @since S60 3.2 + * @return Server reference + */ + CDunServer& Server() const; + +private: + + /** + * Handles incoming service messages + * + * @since S60 3.2 + * @param aMessage Message containing the client request + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoService( const RMessage2& aMessage ); + + /** + * Handles incoming test service messages + * + * @since S60 5.0 + * @param aMessage Message containing the client request + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoTestService( const RMessage2& aMessage ); + +private: // data + + /** + * Message containing the client request + */ + RMessage2 iMessage; + + /** + * Pointer to DUN server + * Not own. + */ + CDunServer* iDunServer; + +}; + +#endif // C_CDUNSESSION_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/inc/dunserverdef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/inc/dunserverdef.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2008 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: Definitions for server +* +*/ + + +#ifndef DUN_SERVERDEF_H +#define DUN_SERVERDEF_H + +// INCLUDES +#include +#include + +// DATA TYPES +enum TDunIpc + { + EDunFuncManageService, + EDunFuncActiveConnection, // For testing purposes only + EInvalidIpc + }; + +// GLOBAL CONSTANTS + +_LIT( KDialupServerName, "dunserver" ); + +const TUint KDunServerMajorVersionNumber = 2; +const TUint KDunServerMinorVersionNumber = 0; +const TUint KDunServerBuildVersionNumber = 0; + +#endif // DUN_SERVERDEF_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/src/DunCloseWait.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/src/DunCloseWait.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2006-2007 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: Common waiter for closing self-destruct plugins +* +*/ + +#include "DunCloseWait.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunCloseWait* CDunCloseWait::NewL( MDunCloseWait* aCallback ) + { + CDunCloseWait* self = new (ELeave) CDunCloseWait( aCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunCloseWait::~CDunCloseWait() + { + FTRACE(FPrint( _L("CDunCloseWait::~CDunCloseWait()" ))); + ResetData(); + FTRACE(FPrint( _L("CDunCloseWait::~CDunCloseWait() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunCloseWait::ResetData() + { + // IssueRequest() + Stop(); + // AddPluginToClose() + iCloseList.Close(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Adds a new object to be destructed to the list +// --------------------------------------------------------------------------- +// +TInt CDunCloseWait::AddPluginToClose( MDunLocalMediaPlugin* aPluginToClose ) + { + FTRACE(FPrint( _L("CDunCloseWait::AddPluginToClose()" ) )); + if ( !aPluginToClose ) + { + FTRACE(FPrint( _L("CDunCloseWait::AddPluginToClose() (ERROR) complete" ) )); + return KErrGeneral; + } + TInt retTemp = iCloseList.Find( aPluginToClose ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunCloseWait::AddPluginToClose() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = iCloseList.Append( aPluginToClose ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunCloseWait::AddPluginToClose() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunCloseWait::AddPluginToClose() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Issues request to start closing the objects in the close list +// --------------------------------------------------------------------------- +// +TInt CDunCloseWait::IssueRequest() + { + FTRACE(FPrint( _L("CDunCloseWait::IssueRequest()" ))); + if ( IsActive() ) + { + FTRACE(FPrint( _L("CDunCloseWait::IssueRequest() (not ready) complete" ))); + return KErrNotReady; + } + iStatus = KRequestPending; + SetActive(); + TRequestStatus* requestStatus = &iStatus; + User::RequestComplete( requestStatus, KErrNone ); + FTRACE(FPrint( _L("CDunCloseWait::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops closing the objects in the close list +// --------------------------------------------------------------------------- +// +TInt CDunCloseWait::Stop() + { + FTRACE(FPrint( _L("CDunCloseWait::Stop()" ))); + if ( !IsActive() ) + { + FTRACE(FPrint( _L("CDunCloseWait::Stop() (not ready) complete" ))); + return KErrNotReady; + } + Cancel(); + FTRACE(FPrint( _L("CDunCloseWait::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunCloseWait::CDunCloseWait +// --------------------------------------------------------------------------- +// +CDunCloseWait::CDunCloseWait( MDunCloseWait* aCallback ) : + CActive( EPriorityHigh ), + iCallback( aCallback ) + { + } + +// --------------------------------------------------------------------------- +// CDunCloseWait::ConstructL +// --------------------------------------------------------------------------- +// +void CDunCloseWait::ConstructL() + { + FTRACE(FPrint( _L("CDunCloseWait::ConstructL()" ) )); + if ( !iCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunCloseWait::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunCloseWait::Initialize() + { + // Don't initialize iCallback here (it is set through NewL) + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when closing of the plugins should be done +// --------------------------------------------------------------------------- +// +void CDunCloseWait::RunL() + { + FTRACE(FPrint( _L("CDunCloseWait::RunL()" ))); + iCallback->NotifyPluginCloseAfterWait( iCloseList ); + iCloseList.Reset(); + FTRACE(FPrint( _L("CDunCloseWait::RunL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunCloseWait::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/src/DunServer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/src/DunServer.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,674 @@ +/* +* Copyright (c) 2006-2007 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: DUN server +* +*/ + + +#include +#include "DunServer.h" +#include "DunServerUtils.h" +#include "DunSession.h" +#include "DunDebug.h" +#include "DunServerSecurityPolicy.h" +#include "dundomainpskeys.h" +#include "DunTransporter.h" + +// PubSub security settings constants +_LIT_SECURITY_POLICY_PASS( KConnStatusReadPolicy ); +_LIT_SECURITY_POLICY_C2( KConnStatusWritePolicy, + ECapabilityLocalServices, + ECapabilityWriteDeviceData ); + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// StartServerL Create Active Scheduler and CDunServer. +// --------------------------------------------------------------------------- +// +static void StartServerL() + { + FTRACE(FPrint( _L("CDunServer::StartServerL()") )); + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL( scheduler ); + CActiveScheduler::Install( scheduler ); + + CDunServer* server = CDunServer::NewL(); + CleanupStack::PushL( server ); + + User::RenameThread( KDialupServerName ); + RProcess::Rendezvous( KErrNone ); + FTRACE(FPrint( _L("CDunServer::StartServerL() Initialization done. Server is running.") )); + + CActiveScheduler::Start(); // run the server + + CleanupStack::PopAndDestroy( server ); + CleanupStack::PopAndDestroy( scheduler ); + FTRACE(FPrint( _L("CDunServer::StartServerL() complete") )); + } + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunServer* CDunServer::NewL() + { + CDunServer* self = new (ELeave) CDunServer( EPriorityStandard ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunServer::~CDunServer() + { + FTRACE(FPrint(_L("CDunServer::~CDunServer()"))); + // Destroy iConnData + TInt i; + for ( i=iConnData.Count()-1; i>=0; i-- ) + { + if ( iUtility ) + { + iUtility->TryClosePlugin( i, EFalse, EFalse, EFalse ); + } + } + if ( iConnData.Count() == 0 ) + { + iConnData.Close(); + } + else + { + FTRACE(FPrint(_L("CDunServer::~CDunServer() (ERROR) complete"))); + } + // Destroy iPluginQueue + iPluginQueue.Close(); + // Destroy iClosedQueue + iClosedQueue.Close(); + // Destroy transporter + delete iTransporter; + iTransporter = NULL; + // Destroy utility + CDunServerUtils* utility = static_cast( iUtility ); + delete utility; + iUtility = NULL; + // Destroy close waiter + delete iCloseWait; + iCloseWait = NULL; + // Remove key + RProperty::Delete( KPSUidDialupConnStatus, KDialupConnStatus ); + FTRACE(FPrint(_L("CDunServer::~CDunServer() complete"))); + } + +// --------------------------------------------------------------------------- +// Notification to manage local media On request +// This comes from client +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyMediaOpenRequest( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::NotifyMediaOpenRequest()"))); + iUtility->ClearQueuedUIDs( aPluginUid, ETrue, ETrue ); + iUtility->RemoveZombiePlugins(); + TInt retVal = OpenMediaByUid( aPluginUid, ETrue ); + FTRACE(FPrint(_L("CDunServer::NotifyMediaOpenRequest() complete (%d)"), retVal)); + return retVal; + } + +// --------------------------------------------------------------------------- +// Notification to manage local media Off request +// This comes from client +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyMediaCloseRequest( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::NotifyMediaCloseRequest()"))); + // If plugin can be found with iEnqueue or iClosed marked ETrue, + // Close also them in the same way (no special processing needed) + TInt retVal = CloseMediaByUid( aPluginUid, ETrue, ETrue, ETrue ); + FTRACE(FPrint(_L("CDunServer::NotifyMediaCloseRequest() complete (%d)"), retVal)); + return retVal; + } + +// --------------------------------------------------------------------------- +// Current active connection +// This comes from client +// --------------------------------------------------------------------------- +// +TConnId CDunServer::ActiveConnection() + { + FTRACE(FPrint(_L("CDunServer::ActiveConnection()"))); + if ( iConnData.Count()<1 || iConnData.Count()>1 ) + { + FTRACE(FPrint(_L("CDunServer::ActiveConnection() (unknown plugin amount) complete"))); + return NULL; + } + TDunConnectionData& plugin = iConnData[0]; + if ( !plugin.iLocalModulePtr ) + { + FTRACE(FPrint(_L("CDunServer::ActiveConnection() (no instance) complete"))); + return NULL; + } + TConnId connId = plugin.iLocalModulePtr->ActiveConnection(); + FTRACE(FPrint(_L("CDunServer::ActiveConnection() complete"))); + return connId; + } + +// --------------------------------------------------------------------------- +// Increases reference count made by sessions +// This comes from client +// --------------------------------------------------------------------------- +// +void CDunServer::IncRefCount() + { + FTRACE(FPrint(_L("CDunServer::IncRefCount()"))); + iRefCount++; + FTRACE(FPrint(_L("CDunServer::IncRefCount() complete"))); + } + +// --------------------------------------------------------------------------- +// Decreases reference count made by sessions +// This comes from client +// --------------------------------------------------------------------------- +// +void CDunServer::DecRefCount() + { + FTRACE(FPrint(_L("CDunServer::DecRefCount()"))); + if ( iRefCount > 0 ) + { + iRefCount--; + FTRACE(FPrint(_L("CDunServer::DecRefCount() reference count decreased"))); + if ( iRefCount == 0 ) + { + FTRACE(FPrint(_L("CDunServer::DecRefCount() stopping activescheduler..."))); + CActiveScheduler::Stop(); + } + } + FTRACE(FPrint(_L("CDunServer::DecRefCount() complete"))); + } + +// --------------------------------------------------------------------------- +// From class CServer2 (CPolicyServer -> CServer2). +// Creates a server-side client session object. +// --------------------------------------------------------------------------- +// +CSession2* CDunServer::NewSessionL( const TVersion& aVersion, + const RMessage2& /*aMessage*/ ) const + { + FTRACE(FPrint(_L("CDunServer::NewSessionL()"))); + TVersion version(KDunServerMajorVersionNumber, + KDunServerMinorVersionNumber, + KDunServerBuildVersionNumber ); + TBool supported = User::QueryVersionSupported( version, aVersion ); + if ( !supported ) + { + FTRACE(FPrint(_L("CDunServer::NewSessionL() (not supported) complete"))); + User::Leave( KErrNotSupported ); + } + CDunSession* session = new (ELeave) CDunSession(const_cast( this )); + FTRACE(FPrint(_L("CDunServer::NewSessionL() complete"))); + return session; + } + +// --------------------------------------------------------------------------- +// CDunServer::CDunServer +// --------------------------------------------------------------------------- +// +CDunServer::CDunServer( TInt aPriority ) : + // aPriority: priority of AO + // KDunServerPolicy: TPolicy structure of DUN + CPolicyServer( aPriority, KDunServerPolicy ), + iTransporter( NULL ), + iConnStatus( EDialupUndefined ), + iRefCount( 0 ) + { + FTRACE( FPrint( _L( "CDunServer::CDunServer()" ))); + } + +// --------------------------------------------------------------------------- +// CDunServer::ConstructL +// --------------------------------------------------------------------------- +// +void CDunServer::ConstructL() + { + FTRACE( FPrint( _L( "CDunServer::ConstructL()" ))); + StartL( KDialupServerName ); + // Initialize pubsub key properties + User::LeaveIfError( + RProperty::Define( KPSUidDialupConnStatus, + KDialupConnStatus, + RProperty::EInt, + KConnStatusReadPolicy, + KConnStatusWritePolicy) ); + // Set key to initial value + RProperty::Set( KPSUidDialupConnStatus, + KDialupConnStatus, + EDialupInactive ); + // Create waiter for closing self-destruct plugins + CDunCloseWait* closeWait = CDunCloseWait::NewL( this ); + CleanupStack::PushL( closeWait ); + // Create transporter + CDunTransporter* transporter = CDunTransporter::NewL( this ); + CleanupStack::PushL( transporter ); + // Create utility + CDunServerUtils* utility = CDunServerUtils::NewL( *this ); + iUtility = static_cast( utility ); + iTransporter = transporter; + iCloseWait = closeWait; + CleanupStack::Pop( transporter ); + CleanupStack::Pop( closeWait ); + FTRACE( FPrint( _L( "CDunServer::ConstructL() complete"))); + } + +// --------------------------------------------------------------------------- +// Opens local media plugin by UID +// --------------------------------------------------------------------------- +// +TInt CDunServer::OpenMediaByUid( TUid aPluginUid, TBool aDequeue ) + { + FTRACE(FPrint(_L("CDunServer::OpenMediaByUid()"))); + TInt i; + TInt count = iConnData.Count(); + for ( i=0; iCreateNewPlugin( aPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServer::OpenMediaByUid() (ERROR) complete"))); + return retTemp; + } + TInt pluginIndex = iConnData.Count() - 1; + FTRACE(FPrint(_L("CDunServer::OpenMediaByUid() trying listen at index %d"), pluginIndex)); + retTemp = iUtility->TryListening( pluginIndex ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServer::OpenMediaByUid() trying close at index %d"), pluginIndex)); + iUtility->TryClosePlugin( pluginIndex, aDequeue, EFalse, EFalse ); + // Ignore error(s), TryClosePlugin()'s TryUninitialize already sets to Zombie if error(s) + FTRACE(FPrint(_L("CDunServer::OpenMediaByUid() (ERROR) complete"))); + return retTemp; + } + // Clear queued also from queued plugin UIDs, just to be safe + iUtility->ClearQueuedUIDs( aPluginUid, ETrue, ETrue ); + FTRACE(FPrint(_L("CDunServer::OpenMediaByUid() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Closes local media plugin by UID +// --------------------------------------------------------------------------- +// +TInt CDunServer::CloseMediaByUid( TUid aPluginUid, + TBool aClearQueued, + TBool aClientClose, + TBool aSelfDelete ) + { + FTRACE(FPrint(_L("CDunServer::CloseMediaByUid()"))); + TInt i; + TBool cleared = EFalse; + if ( aClearQueued ) + { + cleared = iUtility->ClearQueuedUIDs( aPluginUid, ETrue, ETrue ); + } + TInt count = iConnData.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint(_L("CDunServer::CloseMediaByUid() (not found) complete"))); + return KErrNotFound; + } + FTRACE(FPrint(_L("CDunServer::CloseMediaByUid() trying close at index %d"), i)); + // Plugin found from main list, now close + TInt retTemp = iUtility->TryClosePlugin( i, + ETrue, + aClientClose, + aSelfDelete ); + if ( retTemp!=KErrNone && !cleared ) + { + FTRACE(FPrint(_L("CDunServer::CloseMediaByUid() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunServer::CloseMediaByUid() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Reopens plugins from plugin queue +// --------------------------------------------------------------------------- +// +TInt CDunServer::ReopenQueuedPlugins() + { + FTRACE(FPrint(_L("CDunServer::ReopenQueuedPlugins() (%d)"), iPluginQueue.Count())); + TInt i = iPluginQueue.Count() - 1; + while ( i >= 0 ) + { + TInt retTemp = OpenMediaByUid( iPluginQueue[i], EFalse ); + if ( retTemp == KErrNone ) + { + // Open succeeded so plugin UID was removed by ClearQueuedUIDs(). + // Recalculate i because this method can remove more than one + // match. + i = iPluginQueue.Count() - 1; + } + else + { + // Open failed so the plugin UID was not removed from queue. + // Just decrease index (avoid forever loop). + i--; + } + } + FTRACE(FPrint(_L("CDunServer::ReopenQueuedPlugin()"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerCallback. +// Searches for plugin in connection data and returns its state +// --------------------------------------------------------------------------- +// +TDunPluginState CDunServer::GetPluginStateByUid( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::GetPluginStateByUid()"))); + TInt i; + TInt count = iConnData.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint(_L("CDunServer::GetPluginStateByUid() (not found) complete"))); + return EDunStateNone; + } + FTRACE(FPrint(_L("CDunServer::GetPluginStateByUid() state at index %d is %d"), i, iConnData[i].iPluginState)); + FTRACE(FPrint(_L("CDunServer::GetPluginStateByUid() complete"))); + return iConnData[i].iPluginState; + } + +// --------------------------------------------------------------------------- +// From class MDunServerCallback. +// Notification about request to change plugin state up by one level +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyPluginStateChangeUp( TDunPluginState aPluginState, + TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeUp()"))); + TInt i; + TInt count = iConnData.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeUp() (not found) complete"))); + return KErrNotFound; + } + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeUp() found at index %d"), i)); + TDunPluginState pluginState = iConnData[i].iPluginState; + if ( pluginState= count ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeDown() (not found) complete"))); + return KErrNotFound; + } + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeDown() found at index %d"), i)); + TDunPluginState pluginState = iConnData[i].iPluginState; + if ( aPluginState >= pluginState ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeDown() (unknown state) complete (%d/%d)"), pluginState, aPluginState)); + return KErrNotSupported; + } + // Next catch the cases where state is not "try" + if ( aPluginState != EDunStateTryUninitialize && + aPluginState != EDunStateTryLoad && + aPluginState != EDunStateTryListen && + aPluginState != EDunStateTryChannel ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeDown() (unknown state) complete (%d/%d)"), pluginState, aPluginState)); + return KErrNotSupported; + } + iConnData[i].iPluginState = aPluginState; + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeDown() state changed to %d(%d)"), aPluginState, pluginState)); + FTRACE(FPrint(_L("CDunServer::NotifyPluginStateChangeDown() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerCallback. +// Notification about plugin restart request +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyPluginRestart( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginRestart()"))); + TInt retTemp = iUtility->TryInitializeToListening( aPluginUid ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginRestart() (ERROR) initialize failed"))); + return retTemp; + } + // Restarting may have freed channel(s), + // try to reopen queued plugins (ignore error(s)) + ReopenQueuedPlugins(); + FTRACE(FPrint(_L("CDunServer::NotifyPluginRestart() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerCallback. +// Notification about plugin restart request +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyPluginReopenRequest() + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginReopenRequest()"))); + TInt retVal = ReopenQueuedPlugins(); + FTRACE(FPrint(_L("CDunServer::NotifyPluginReopenRequest() complete"))); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class MDunPluginManager (MDunServerCallback->MDunPluginManager). +// Notification about request to enqueue a plugin to plugin queue +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyPluginEnqueueRequest( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginEnqueueRequest()"))); + TInt i; + TInt count = iConnData.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginEnqueueRequest() (not found) complete"))); + return KErrNotFound; + } + FTRACE(FPrint(_L("CDunServer::NotifyPluginEnqueueRequest() found at index %d"), i)); + // Plugin exists, now try to find it from plugin queue + count = iPluginQueue.Count(); + for ( i=0; iMDunPluginManager). +// Notification about request to dequeue a plugin from plugin queue +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyPluginDequeueRequest( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginDequeueRequest()"))); + TBool cleared = iUtility->ClearQueuedUIDs( aPluginUid, ETrue, ETrue ); + if ( !cleared ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginDequeueRequest() (not found) complete"))); + return KErrNotFound; + } + FTRACE(FPrint(_L("CDunServer::NotifyPluginDequeueRequest() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunPluginManager (MDunServerCallback->MDunPluginManager). +// Notification about request to close a plugin +// --------------------------------------------------------------------------- +// +TInt CDunServer::NotifyPluginCloseRequest( TUid aPluginUid, TBool aSelfClose ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginCloseRequest()"))); + TInt retTemp = CloseMediaByUid( aPluginUid, ETrue, EFalse, aSelfClose ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginCloseRequest() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunServer::NotifyPluginCloseRequest() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From MDunCloseWait. +// Notification about request to close a plugin after wait +// --------------------------------------------------------------------------- +// +void CDunServer::NotifyPluginCloseAfterWait( + RPointerArray& aPluginsToClose ) + { + FTRACE(FPrint(_L("CDunServer::NotifyPluginCloseAfterWait()"))); + TInt i; + TInt j; + TInt closeCount = aPluginsToClose.Count(); + for ( i=0; iDoClosePlugin( j, ETrue, EFalse ); + } + } + } + FTRACE(FPrint(_L("CDunServer::NotifyPluginCloseAfterWait() complete"))); + } + +// ======== GLOBAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// WinsMain/E32Main implements main function for DUN +// exe. +// Create Cleanup Stack, initialise server and start Active +// Scheduler. +// Returns: Error value: General error value +// --------------------------------------------------------------------------- +// +TInt E32Main() + { + FTRACE(FPrint( _L("CDunServer::Main() Process started.") )); +__UHEAP_MARK; + CTrapCleanup* cleanup = CTrapCleanup::New(); + TInt retVal = KErrNoMemory; + + if ( cleanup ) + { + TRAP( retVal, StartServerL() ); // perform all other initialisation + delete cleanup; + } +__UHEAP_MARKEND; + + FTRACE(FPrint( _L("CDunServer::Main() Process exit code = %d"), retVal)); + return retVal; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/src/DunServerUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/src/DunServerUtils.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,497 @@ +/* +* Copyright (c) 2006-2007 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: Utility class for CDunServer +* +*/ + + +#include +#include "DunServer.h" +#include "DunServerUtils.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunServerUtils* CDunServerUtils::NewL( CDunServer& aParent ) + { + CDunServerUtils* self = new (ELeave) CDunServerUtils( aParent ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunServerUtils::~CDunServerUtils() + { + FTRACE(FPrint(_L("CDunServerUtils::~CDunServerUtils()"))); + FTRACE(FPrint(_L("CDunServerUtils::~CDunServerUtils() complete"))); + } + +// --------------------------------------------------------------------------- +// CDunServerUtils::CDunServerUtils +// --------------------------------------------------------------------------- +// +CDunServerUtils::CDunServerUtils( CDunServer& aParent ) : + iParent( aParent ), + iTransporter( aParent.iTransporter ), + iCloseWait( aParent.iCloseWait ), + iConnData( aParent.iConnData ), + iPluginQueue( aParent.iPluginQueue ), + iClosedQueue( aParent.iClosedQueue ) + { + } + +// --------------------------------------------------------------------------- +// CDunServerUtils::ConstructL +// --------------------------------------------------------------------------- +// +void CDunServerUtils::ConstructL() + { + FTRACE(FPrint( _L("CDunServerUtils::ConstructL()" ) )); + FTRACE(FPrint( _L("CDunServerUtils::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Closes plugins with state marked as zombie +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::RemoveZombiePlugins() + { + FTRACE(FPrint(_L("CDunServerUtils::RemoveZombiePlugins()"))); + TInt i; + TInt retVal = KErrNone; + for ( i=iConnData.Count()-1; i>=0; i-- ) + { + if ( iConnData[i].iPluginState == EDunStateZombie ) + { + // Following closes and removes if remove ok + FTRACE(FPrint(_L("CDunServerUtils::RemoveZombiePlugins() trying close at index %d"), i)); + TInt retTemp = TryClosePlugin( i, ETrue, EFalse, EFalse ); + if ( retTemp != KErrNone ) + { + retVal = KErrGeneral; + } + } + } + FTRACE(FPrint(_L("CDunServerUtils::RemoveZombiePlugins() complete"))); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Loads local media module +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::CreateNewPlugin( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServerUtils::CreateNewPlugin()"))); + // plugin not constructed, construct now + TFileName pluginFile; + switch ( aPluginUid.iUid ) + { + case KDunBtPluginUidValue: + pluginFile.Copy( KDunPluginBt ); + break; + case KDunIrPluginUidValue: + pluginFile.Copy( KDunPluginIrda ); + break; + case KDunUsbPluginUidValue: + pluginFile.Copy( KDunPluginUsb ); + break; + default: + FTRACE(FPrint(_L("CDunServerUtils::CreateNewPlugin() (not supported) complete"))); + return KErrNotSupported; + } + TDunConnectionData emptyConn; + emptyConn.iLocalModulePtr = NULL; + emptyConn.iLocalModuleUid = TUid::Null(); + emptyConn.iPluginState = EDunStateNone; + TInt retTemp = iConnData.Append( emptyConn ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServerUtils::CreateNewPlugin() (append failed!) complete"))); + return retTemp; + } + retTemp = ConstructLocalMediaModule( aPluginUid, pluginFile ); + if ( retTemp != KErrNone ) + { + iConnData.Remove( iConnData.Count()-1 ); + FTRACE(FPrint(_L("CDunServerUtils::CreateNewPlugin() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunServerUtils::CreateNewPlugin() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Constructs local media module +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::ConstructLocalMediaModule( const TUid& aPluginUid, + const TPtrC& aDllName ) + { + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule()"))); + // Create a new library object + if ( iConnData.Count() == 0 ) + { + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() (not ready) complete"))); + return KErrNotReady; + } + TInt index = iConnData.Count() - 1; + iConnData[index].iLocalModuleUid = aPluginUid; + iConnData[index].iPluginState = EDunStateTryLoad; + // Load the DLL containing the plug-in + TUidType uidType( KDynamicLibraryUid, + KDunLocalMediaPluginInterfaceUid, + aPluginUid ); + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() loading"))); + TInt retTemp = iConnData[index].iModuleLibrary.Load( aDllName, uidType ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() (ERROR) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() plugin 0x%08X loaded"), aPluginUid.iUid)); + // Create the plugin object. + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() looking up"))); + TLibraryFunction factoryFunction = iConnData[index].iModuleLibrary.Lookup( 1 ); + if ( !factoryFunction ) + { + iConnData[index].iModuleLibrary.Close(); + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() (ERROR) complete"))); + return KErrNotFound; + } + MDunLocalMediaPlugin* localPlugin = + reinterpret_cast( factoryFunction() ); + if ( !localPlugin ) + { + iConnData[index].iModuleLibrary.Close(); + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() (ERROR) complete"))); + return KErrGeneral; + } + iConnData[index].iLocalModulePtr = localPlugin; + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() constructing"))); + TRAPD( retTrap, localPlugin->ConstructL(&iParent, iTransporter) ); + if ( retTrap != KErrNone ) + { + delete iConnData[index].iLocalModulePtr; + iConnData[index].iLocalModulePtr = NULL; + iConnData[index].iModuleLibrary.Close(); + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() (ERROR) complete"))); + return retTrap; + } + iConnData[index].iPluginState = EDunStateLoaded; + FTRACE(FPrint(_L("CDunServerUtils::ConstructLocalMediaModule() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Clears queued UIDs +// --------------------------------------------------------------------------- +// +TBool CDunServerUtils::ClearQueuedUIDs( TUid aPluginUid, + TBool aClearClosed, + TBool aClearQueued ) + { + FTRACE(FPrint(_L("CDunServerUtils::ClearQueuedUIDs()"))); + TInt i; + TBool cleared = EFalse; + if ( aClearClosed ) + { + for ( i=iClosedQueue.Count()-1; i>=0; i-- ) + { + if ( iClosedQueue[i] == aPluginUid ) + { + iClosedQueue.Remove( i ); + cleared = ETrue; + FTRACE(FPrint(_L("CDunServerUtils::ClearQueuedUIDs() removed from closed queue at %d"), i)); + } + } + } + if ( aClearQueued ) + { + for ( i=iPluginQueue.Count()-1; i>=0; i-- ) + { + if ( iPluginQueue[i] == aPluginUid ) + { + iPluginQueue.Remove( i ); + cleared = ETrue; + FTRACE(FPrint(_L("CDunServerUtils::ClearQueuedUIDs() removed from plugin queue at %d"), i)); + } + } + } + FTRACE(FPrint(_L("CDunServerUtils::ClearQueuedUIDs() complete"))); + return cleared; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Tries to close loaded local media plugin +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::TryClosePlugin( TInt aIndex, + TBool aDequeue, + TBool aClientClose, + TBool aSelfClose ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin()"))); + if ( aIndex < 0 || + aIndex >= iConnData.Count() ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin() (not found) complete"))); + return KErrNotFound; + } + TInt retTemp = TryUninitialize( aIndex ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin() (ERROR) complete"))); + return retTemp; + } + if ( !aSelfClose ) + { + retTemp = DoClosePlugin( aIndex, aDequeue, aClientClose ); + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin() complete"))); + return retTemp; + } + retTemp = iCloseWait->AddPluginToClose( iConnData[aIndex].iLocalModulePtr ); + if ( retTemp != KErrNone ) + { + iConnData[aIndex].iPluginState = EDunStateZombie; + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin() state changed to %d"), EDunStateZombie)); + return retTemp; + } + retTemp = iCloseWait->IssueRequest(); + if ( retTemp != KErrNone ) + { + iConnData[aIndex].iPluginState = EDunStateZombie; + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin() state changed to %d"), EDunStateZombie)); + return retTemp; + } + FTRACE(FPrint(_L("CDunServerUtils::TryClosePlugin() (waiting) complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Closes a plugin directly without uninitializing it +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::DoClosePlugin( + TInt aIndex, + TBool aDequeue, + TBool aClientClose ) + { + FTRACE(FPrint(_L("CDunServerUtils::DoClosePlugin()"))); + if ( aIndex < 0 || + aIndex >= iConnData.Count() ) + { + FTRACE(FPrint(_L("CDunServerUtils::DoClosePlugin() (not found) complete"))); + return KErrNotFound; + } + TUid pluginUid = iConnData[aIndex].iLocalModuleUid; + DoImmediatePluginClose( aIndex, aDequeue ); + if ( !aClientClose ) + { + // Plugin was closed by something else than client + // Enqueue it to closed queue + TInt i; + TInt count = iClosedQueue.Count(); + for ( i=0; i= iConnData.Count() ) + { + FTRACE(FPrint(_L("CDunServerUtils::DoImmediatePluginClose() (not found) complete"))); + return KErrNotFound; + } + delete iConnData[aIndex].iLocalModulePtr; + iConnData[aIndex].iLocalModulePtr = NULL; + if ( iConnData[aIndex].iModuleLibrary.Handle() != KNullHandle ) + { + iConnData[aIndex].iModuleLibrary.Close(); + } + iConnData.Remove( aIndex ); + // Now, the following check is needed to avoid recursion by: + // ReopenQueuedPlugins()->OpenMediaByUid()->TryClosePlugin()-> + // DoImmediatePluginClose()->ReopenQueuedPlugins() + if ( aDequeue ) + { + iParent.ReopenQueuedPlugins(); + } + // Ignore error(s); this function must only report it's own operation status + FTRACE(FPrint(_L("CDunServerUtils::DoImmediatePluginClose() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Tries uninitialization and after that listening state switch on a plugin +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::TryInitializeToListening( TUid aPluginUid ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryInitializeToListening()"))); + TInt i; + TInt count = iConnData.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryInitializeToListening() (not found) complete"))); + return KErrNotFound; + } + TInt retTemp = TryUninitialize( i ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryInitializeToListening() (uninitialize error) complete"))); + return retTemp; + } + // Change from Uninitialized to Loaded because listening mode needs it + // (plugin is already loaded anyway) + iConnData[i].iPluginState = EDunStateLoaded; + retTemp = TryListening( i ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryInitializeToListening() (listening error) complete"))); + return retTemp; + } + FTRACE(FPrint(_L("CDunServerUtils::TryInitializeToListening() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Tries listening state switch on a plugin +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::TryListening( TInt aIndex ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryListening()"))); + if ( aIndex < 0 || + aIndex >= iConnData.Count() ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryListening() (not found) complete"))); + return KErrNotFound; + } + if ( iConnData[aIndex].iPluginState != EDunStateLoaded ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryListening() (not ready) complete"))); + return KErrNotReady; + } + FTRACE(FPrint(_L("CDunServerUtils::TryListening() notifying server state change (%d)"), EDunStateTryListen)); + TInt retTemp = + iConnData[aIndex].iLocalModulePtr->NotifyServerStateChange( EDunStateTryListen ); + if ( retTemp != KErrNone ) + { + iConnData[aIndex].iPluginState = EDunStateZombie; + FTRACE(FPrint(_L("CDunServerUtils::TryListening() state changed to %d"), EDunStateZombie)); + FTRACE(FPrint(_L("CDunServerUtils::TryListening() (ERROR) complete"))); + return retTemp; + } + // Plugin could have changed state, only change state if possible + // This can happen if plugin has no real listening and switches directly + // from listening mode to channeled mode + if ( iConnData[aIndex].iPluginState == EDunStateTryListen ) + { + iConnData[aIndex].iPluginState = EDunStateListening; + } + FTRACE(FPrint(_L("CDunServerUtils::TryListening() state changed to %d"), EDunStateListening)); + FTRACE(FPrint(_L("CDunServerUtils::TryListening() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunServerUtility. +// Tries uninitialization of a plugin +// --------------------------------------------------------------------------- +// +TInt CDunServerUtils::TryUninitialize( TInt aIndex ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize()"))); + if ( aIndex < 0 || + aIndex >= iConnData.Count() ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() (not found) complete"))); + return KErrNotFound; + } + if ( iConnData[aIndex].iPluginState == EDunStateUninitialized ) + { + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() (already uninitialized) complete"))); + return KErrNotReady; + } + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() notifying server state change (%d)"), EDunStateTryUninitialize)); + TInt retTemp = + iConnData[aIndex].iLocalModulePtr->NotifyServerStateChange( EDunStateTryUninitialize ); + if ( retTemp != KErrNone ) + { + iConnData[aIndex].iPluginState = EDunStateZombie; + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() state changed to %d"), EDunStateZombie)); + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() (ERROR) complete"))); + return retTemp; + } + // Plugin state must be EDunStateLoaded after uninitialization + if ( iConnData[aIndex].iPluginState == EDunStateLoaded ) + { + iConnData[aIndex].iPluginState = EDunStateUninitialized; + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() state changed to %d"), EDunStateUninitialized)); + } + else + { + // Should never come here + iConnData[aIndex].iPluginState = EDunStateZombie; + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() state changed to %d"), EDunStateZombie)); + } + FTRACE(FPrint(_L("CDunServerUtils::TryUninitialize() complete"))); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/server/src/DunSession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/server/src/DunSession.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,195 @@ +/* +* Copyright (c) 2006-2007 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: The session object for DUN server +* +*/ + + +#include +#include +#include +#include +#include +#include +#include "dunserverdef.h" +#include "DunSession.h" +#include "DunServer.h" +#include "DunPlugin.h" +#include "DunDebug.h" + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CDunSession::CDunSession +// --------------------------------------------------------------------------- +// +CDunSession::CDunSession( CDunServer* aDunServer ) : + CSession2(), + iDunServer( aDunServer ) + { + FTRACE(FPrint( _L( "CDunSession::CDunSession()") )); + iDunServer->IncRefCount(); + FTRACE(FPrint( _L( "CDunSession::CDunSession() complete") )); + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunSession::~CDunSession() + { + FTRACE(FPrint(_L("CDunSession::~CDunSession()"))); + if ( iDunServer ) + { + iDunServer->DecRefCount(); + iDunServer = NULL; + } + FTRACE(FPrint(_L("CDunSession::~CDunSession() complete"))); + } + +// --------------------------------------------------------------------------- +// Return the version number +// --------------------------------------------------------------------------- +// +TVersion CDunSession::Version(void) const + { + return (TVersion( KDunServerMajorVersionNumber, + KDunServerMinorVersionNumber, + KDunServerBuildVersionNumber )); + } + +// --------------------------------------------------------------------------- +// From class CSession2. +// Handles the servicing of client requests passed to the server +// --------------------------------------------------------------------------- +// +void CDunSession::ServiceL( const RMessage2& aMessage ) + { + FTRACE(FPrint(_L("CDunSession::ServiceL()"))); + TBool hasCapability = aMessage.HasCapability( ECapabilityLocalServices ); + if ( !hasCapability ) + { + aMessage.Complete( KErrPermissionDenied ); + FTRACE(FPrint(_L("CDunSession::ServiceL() (no capability) complete"))); + return; + } + TInt retVal = KErrNotSupported; + switch ( aMessage.Function() ) + { + case EDunFuncManageService: + retVal = DoService( aMessage ); + break; + case EDunFuncActiveConnection: + retVal = DoTestService( aMessage ); + break; + default: + FTRACE(FPrint(_L("CDunSession::ServiceL() (not supported) complete"))); + break; + } + aMessage.Complete( retVal ); + FTRACE(FPrint(_L("CDunSession::ServiceL() complete"))); + } + +// --------------------------------------------------------------------------- +// From class CSession2. +// Return a reference to DUN server +// --------------------------------------------------------------------------- +// +CDunServer& CDunSession::Server() const + { + return *iDunServer; + } + +// --------------------------------------------------------------------------- +// Handles incoming service messages +// --------------------------------------------------------------------------- +// +TInt CDunSession::DoService( const RMessage2& aMessage ) + { + FTRACE(FPrint(_L("CDunSession::DoService()"))); + if ( !iDunServer ) + { + FTRACE(FPrint(_L("CDunSession::DoService() (iDunServer) not initialized!"))); + return KErrGeneral; + } + + TLocodBearer bearer = static_cast( aMessage.Int0() ); + TBool bearerStatus = static_cast( aMessage.Int1() ); + + TUid pluginUid; + switch ( bearer ) + { + case ELocodBearerBT: + { + pluginUid = KDunBtPluginUid; + FTRACE(FPrint(_L("CDunSession::DoService() Managing service for BT, bearer status %d"), bearerStatus)); + + BluetoothFeatures::TEnterpriseEnablementMode mode = BluetoothFeatures::EDisabled; + TRAPD(err, mode = BluetoothFeatures::EnterpriseEnablementL()); + if ( err ) + { + FTRACE(FPrint(_L("CDunSession::DoService() complete: failed to get BluetoothFeatures::EnterpriseEnablementL"))); + return err; + } + if ( mode != BluetoothFeatures::EEnabled ) + { + FTRACE(FPrint(_L("CDunSession::DoService() complete: !BluetoothFeatures::EEnabled"))); + return KErrNotSupported; + } + } + break; + case ELocodBearerIR: + pluginUid = KDunIrPluginUid; + FTRACE(FPrint(_L("CDunSession::DoService() Managing service for IR, bearer status %d"), bearerStatus)); + break; + case ELocodBearerUSB: + pluginUid = KDunUsbPluginUid; + FTRACE(FPrint(_L("CDunSession::DoService() Managing service for USB, bearer status %d"), bearerStatus)); + break; + default: + FTRACE(FPrint(_L("CDunSession::DoService() Unknown service %d, bearer status %d!"), bearer, bearerStatus)); + return KErrNotSupported; + } + TInt retVal = KErrNone; + if ( bearerStatus ) // ON + { + retVal = iDunServer->NotifyMediaOpenRequest( pluginUid ); + } + else // OFF + { + retVal = iDunServer->NotifyMediaCloseRequest( pluginUid ); + } + FTRACE(FPrint(_L("CDunSession::DoService() complete"))); + return retVal; + } + +// --------------------------------------------------------------------------- +// Handles incoming test service messages +// --------------------------------------------------------------------------- +// +TInt CDunSession::DoTestService( const RMessage2& aMessage ) + { + FTRACE(FPrint(_L("CDunSession::DoTestService()"))); + if ( !iDunServer ) + { + FTRACE(FPrint(_L("CDunSession::DoTestService() (iDunServer) not initialized!"))); + return KErrGeneral; + } + TConnId connId = iDunServer->ActiveConnection(); + TPckgBuf connIdPckg( connId ); + aMessage.Write( 0, connIdPckg ); // First argument in EDunFuncActiveConnection + FTRACE(FPrint(_L("CDunSession::DoTestService() complete"))); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/bwins/dunutilstestu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/bwins/dunutilstestu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/conf/dunutilstest.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/conf/dunutilstest.cfg Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2010 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: +* +*/ + +[Test] +title Launch the dialog +create dunutilstest Dun_Handler_Tester +Dun_Handler_Tester LaunchDialog +delete Dun_Handler_Tester +[Endtest] + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/eabi/dunutilstestu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/eabi/dunutilstestu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + _Z9LibEntryLR13CTestModuleIf @ 1 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2010 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: +* +*/ + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +PRJ_MMPFILES +dunutilstest.mmp diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/group/dunutilstest.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/group/dunutilstest.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2010 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: +* +*/ + +TARGET dunutilstest.dll +TARGETTYPE dll +UID 0x1000008d 0xE9AF118D + +CAPABILITY ALL -TCB + +DEFFILE dunutilstest.def + +USERINCLUDE ../inc ../../utils/inc + +MW_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src + +SOURCE dunutilstest.cpp + +SOURCEPATH ../../utils/src + +SOURCE DunNoteHandler.cpp + + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY sysutil.lib +LIBRARY HbWidgets.lib + +LANG SC diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/inc/dunutilstest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/inc/dunutilstest.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2010 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: +* +*/ + +// This file defines the API for dunutilstest.dll + +#ifndef DUNUTILSTEST_H +#define DUNUTILSTEST_H + +// Include Files + +#include +#include +#include + +#include "DunNoteHandler.h" + +// Constants + +// Class Definitions + + +NONSHARABLE_CLASS(Cdunutilstest) : public CScriptBase + { +public: + // new functions + + static Cdunutilstest* NewL(CTestModuleIf& aTestModuleIf); + + virtual ~Cdunutilstest(); + +public: // Functions from base classes + + /** + * From CScriptBase Runs a script line. + * @since ?Series60_version + * @param aItem Script line containing method name and parameters + * @return Symbian OS error code + */ + virtual TInt RunMethodL( CStifItemParser& aItem ); + +private: + // new functions + Cdunutilstest(CTestModuleIf& aTestModuleIf); + void ConstructL(); + + virtual TInt LaunchDialogL( CStifItemParser& aItem ); + +private: + // data + CDunNoteHandler* mDunandler; + }; + +#endif // DUNUTILSTEST_H + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/init/dunutilstest.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/init/dunutilstest.ini Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,233 @@ +# +# Copyright (c) 2010 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: +# +# + +# +# This is STIF initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. +# - Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation +# DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02 +# + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', + # 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= e:\testing\logs\ +TestReportFileName= obexServApiTest_TestReport + +TestReportFormat= TXT # Possible values: TXT, HTML or XML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting + +DisableMeasurement= stifmeasurementdisablenone # Possible values are: + # 'stifmeasurementdisablenone', 'stifmeasurementdisableall' + # 'stifmeasurementplugin01', 'stifmeasurementplugin02', + # 'stifmeasurementplugin03', 'stifmeasurementplugin04', + # 'stifmeasurementplugin05' or 'stifbappeaprofiler' + +Timeout= 0 # Default timeout value for each test case. In milliseconds +#UITestingSupport= YES # Possible values: YES or NO +#SeparateProcesses= YES # Possible values: YES or NO (default: NO) +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= XXXXXXXXX +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +[New_Module] +ModuleName= testscripter +TestCaseFile= c:\testing\conf\dunutilstest.cfg +[End_Module] + + +# Load testmoduleXXX, optionally with initialization file and/or test case files +#[New_Module] +#ModuleName= testmodulexxx + +#TestModuleXXX used initialization file +#IniFile= c:\testframework\init.txt + +#TestModuleXXX used configuration file(s) +#TestCaseFile= c:\testframework\testcases1.cfg +#TestCaseFile= c:\testframework\testcases2.cfg +#TestCaseFile= c:\testframework\manualtestcases.cfg + +#[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIF logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# +# - Will write log file in unicode format. +# + YES, Log file will be written in unicode format +# + NO, Log will be written as normal, not unicode, file. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' +#NOTE: TestEngine and TestServer logging settings cannot change here + +CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +#FileUnicode= YES # Possible values: YES or NO +#AddTestCaseTitle= YES # Possible values: YES or NO +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set filters to be used by ConsoleUI. +# If you want to use filter with ConsoleUI, simply remove comments +# from section below and provide valid filter entries. +# Each filter line has to start with "filter= " keyword. +# Filter can contain special wildcard characters: +# * which stands for none or any literal; +# ? which stands for single character. +# Filters are not case-sensitive. + +#[Filters] +#filter= *math* +#filter= *radio* +#[End_Filters] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/tsrc/src/dunutilstest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/tsrc/src/dunutilstest.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2010 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 "dunutilstest.h" // Cdunutilstest + +// Member Functions + + +Cdunutilstest* Cdunutilstest::NewL(CTestModuleIf& aTestModuleIf) + { + Cdunutilstest* self = new (ELeave) Cdunutilstest( aTestModuleIf ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +Cdunutilstest::Cdunutilstest(CTestModuleIf& aTestModuleIf ): + CScriptBase( aTestModuleIf ) + { + } + +void Cdunutilstest::ConstructL() + { + // second phase constructor, anything that may leave must be constructed here + mDunandler = CDunNoteHandler::NewL(); + + } + +Cdunutilstest::~Cdunutilstest() + { + delete mDunandler; + } + +TInt Cdunutilstest::RunMethodL( CStifItemParser& aItem ) + { + + static TStifFunctionInfo const KFunctions[] = + { + // Copy this line for every implemented function. + // First string is the function name used in TestScripter script file. + // Second is the actual implementation member function. + ENTRY( "LaunchDialog", Cdunutilstest::LaunchDialogL ) + }; + + const TInt count = sizeof( KFunctions ) / + sizeof( TStifFunctionInfo ); + + return RunInternalL( KFunctions, count, aItem ); + + } + +TInt Cdunutilstest::LaunchDialogL( CStifItemParser& /*aItem*/ ) + { + + TTimeIntervalMicroSeconds32 time(7000000); //7 Seconds + + mDunandler->IssueRequest(); + User::After(time); + return KErrNone; + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point. +// Returns: CScriptBase: New CScriptBase derived object +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* LibEntryL( + CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework + { + + return ( CScriptBase* ) Cdunutilstest::NewL( aTestModuleIf ); + + } + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/bwins/dunutilsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/bwins/dunutilsu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +EXPORTS + ?NewL@CDunTransporter@@SAPAV1@PAVMDunPluginManager@@H@Z @ 1 NONAME ; class CDunTransporter * CDunTransporter::NewL(class MDunPluginManager *, int) + ?NumberOfAllocatedChannels@CDunTransporter@@QAEHXZ @ 2 NONAME ; int CDunTransporter::NumberOfAllocatedChannels(void) + ?AllocateChannelL@CDunTransporter@@QAEXPAVRComm@@VTUid@@ABVTDesC8@@HPAVMDunBufferCorrection@@@Z @ 3 NONAME ; void CDunTransporter::AllocateChannelL(class RComm *, class TUid, class TDesC8 const &, int, class MDunBufferCorrection *) + ?SetAdvertisementMonitorL@CDunTransporter@@QAEXVTUid@@PAVMDunServAdvMon@@@Z @ 4 NONAME ; void CDunTransporter::SetAdvertisementMonitorL(class TUid, class MDunServAdvMon *) + ?InitializeL@CDunTransporter@@AAEHXZ @ 5 NONAME ; int CDunTransporter::InitializeL(void) + ?AllocateChannelL@CDunTransporter@@QAEXPAVRSocket@@VTUid@@ABVTDesC8@@HAAH@Z @ 6 NONAME ; void CDunTransporter::AllocateChannelL(class RSocket *, class TUid, class TDesC8 const &, int, int &) + ?GetNumberOfAllocatedChannelsByUid@CDunTransporter@@QAEHVTUid@@@Z @ 7 NONAME ; int CDunTransporter::GetNumberOfAllocatedChannelsByUid(class TUid) + ?FreeChannel@CDunTransporter@@QAEHPAVRComm@@@Z @ 8 NONAME ; int CDunTransporter::FreeChannel(class RComm *) + ?FreeChannel@CDunTransporter@@QAEHPAVRSocket@@@Z @ 9 NONAME ; int CDunTransporter::FreeChannel(class RSocket *) + ?FreeAdvertisementMonitor@CDunTransporter@@QAEHVTUid@@PAVMDunServAdvMon@@@Z @ 10 NONAME ; int CDunTransporter::FreeAdvertisementMonitor(class TUid, class MDunServAdvMon *) + ?GetNumberOfWaitingChannelsByUid@CDunTransporter@@QAEHVTUid@@@Z @ 11 NONAME ; int CDunTransporter::GetNumberOfWaitingChannelsByUid(class TUid) + ?StopTransfers@CDunTransporter@@QAEHPAVRComm@@@Z @ 12 NONAME ; int CDunTransporter::StopTransfers(class RComm *) + ?NumberOfWaitingChannels@CDunTransporter@@QAEHXZ @ 13 NONAME ; int CDunTransporter::NumberOfWaitingChannels(void) + ?AddSkippedErrorL@CDunTransporter@@QAEXHPAVRComm@@W4TDunDirection@@@Z @ 14 NONAME ; void CDunTransporter::AddSkippedErrorL(int, class RComm *, enum TDunDirection) + ?ConnectCommsServer@CDunUtils@@SAHAAVRCommServ@@@Z @ 15 NONAME ; int CDunUtils::ConnectCommsServer(class RCommServ &) + ?IssueTransferRequestsL@CDunTransporter@@QAEXPAVRSocket@@@Z @ 16 NONAME ; void CDunTransporter::IssueTransferRequestsL(class RSocket *) + ?AddConnMonCallbackL@CDunTransporter@@QAEXPAVRSocket@@PAVMDunConnMon@@W4TDunDirection@@H@Z @ 17 NONAME ; void CDunTransporter::AddConnMonCallbackL(class RSocket *, class MDunConnMon *, enum TDunDirection, int) + ?UnInitialize@CDunTransporter@@AAEXXZ @ 18 NONAME ; void CDunTransporter::UnInitialize(void) + ?StopTransfers@CDunTransporter@@QAEHPAVRSocket@@@Z @ 19 NONAME ; int CDunTransporter::StopTransfers(class RSocket *) + ?AddSkippedErrorL@CDunTransporter@@QAEXHPAVRSocket@@W4TDunDirection@@@Z @ 20 NONAME ; void CDunTransporter::AddSkippedErrorL(int, class RSocket *, enum TDunDirection) + ?AddConnMonCallbackL@CDunTransporter@@QAEXPAVRComm@@PAVMDunConnMon@@W4TDunDirection@@H@Z @ 21 NONAME ; void CDunTransporter::AddConnMonCallbackL(class RComm *, class MDunConnMon *, enum TDunDirection, int) + ?IssueTransferRequestsL@CDunTransporter@@QAEXPAVRComm@@@Z @ 22 NONAME ; void CDunTransporter::IssueTransferRequestsL(class RComm *) + ?SetRCommBufferLength@CDunUtils@@SAHAAVRComm@@H@Z @ 23 NONAME ; int CDunUtils::SetRCommBufferLength(class RComm &, int) + ?AdvertisementStatus@CDunTransporter@@QAEHXZ @ 24 NONAME ; int CDunTransporter::AdvertisementStatus(void) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/eabi/dunutilsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/eabi/dunutilsu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +EXPORTS + _ZN15CDunTransporter11FreeChannelEP5RComm @ 1 NONAME + _ZN15CDunTransporter11FreeChannelEP7RSocket @ 2 NONAME + _ZN15CDunTransporter11InitializeLEv @ 3 NONAME + _ZN15CDunTransporter12UnInitializeEv @ 4 NONAME + _ZN15CDunTransporter13StopTransfersEP5RComm @ 5 NONAME + _ZN15CDunTransporter13StopTransfersEP7RSocket @ 6 NONAME + _ZN15CDunTransporter16AddSkippedErrorLEiP5RComm13TDunDirection @ 7 NONAME + _ZN15CDunTransporter16AddSkippedErrorLEiP7RSocket13TDunDirection @ 8 NONAME + _ZN15CDunTransporter16AllocateChannelLEP5RComm4TUidRK6TDesC8iP20MDunBufferCorrection @ 9 NONAME + _ZN15CDunTransporter16AllocateChannelLEP7RSocket4TUidRK6TDesC8iRi @ 10 NONAME + _ZN15CDunTransporter19AddConnMonCallbackLEP5RCommP11MDunConnMon13TDunDirectioni @ 11 NONAME + _ZN15CDunTransporter19AddConnMonCallbackLEP7RSocketP11MDunConnMon13TDunDirectioni @ 12 NONAME + _ZN15CDunTransporter19AdvertisementStatusEv @ 13 NONAME + _ZN15CDunTransporter22IssueTransferRequestsLEP5RComm @ 14 NONAME + _ZN15CDunTransporter22IssueTransferRequestsLEP7RSocket @ 15 NONAME + _ZN15CDunTransporter23NumberOfWaitingChannelsEv @ 16 NONAME + _ZN15CDunTransporter24FreeAdvertisementMonitorE4TUidP14MDunServAdvMon @ 17 NONAME + _ZN15CDunTransporter24SetAdvertisementMonitorLE4TUidP14MDunServAdvMon @ 18 NONAME + _ZN15CDunTransporter25NumberOfAllocatedChannelsEv @ 19 NONAME + _ZN15CDunTransporter31GetNumberOfWaitingChannelsByUidE4TUid @ 20 NONAME + _ZN15CDunTransporter33GetNumberOfAllocatedChannelsByUidE4TUid @ 21 NONAME + _ZN15CDunTransporter4NewLEP17MDunPluginManageri @ 22 NONAME + _ZN9CDunUtils18ConnectCommsServerER9RCommServ @ 23 NONAME + _ZN9CDunUtils20SetRCommBufferLengthER5RCommi @ 24 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2007 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: +* This file provides the information required for building the +* whole of DUN utilities +* +*/ + +#include + +PRJ_PLATFORMS + +PRJ_EXPORTS +../../rom/dunutils.iby CORE_MW_LAYER_IBY_EXPORT_PATH(dunutils.iby) + + +PRJ_MMPFILES +dunutils.mmp + +PRJ_TESTMMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/group/dunutils.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/group/dunutils.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2006-2008 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: Project definition file for project DUN utilities +* +*/ + + +// Define the following flag to enable network side logging. +// This makes it possible to test AT commands with idle Telephony/RComm. +// Note that because RComm is a stub the only way to test the connection +// is via RSocket (Bluetooth). + +#undef ENABLE_NETWORK_STUBS + +#include +#include + +#ifdef ENABLE_NETWORK_STUBS +MACRO PRJ_USE_NETWORK_STUBS +#define PRJ_USE_NETWORK_STUBS +#endif // ENABLE_NETWORK_STUBS + +TARGET dunutils.dll +TARGETTYPE DLL +UID 0x1000008d 0x101F6E2A + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE DunStream.cpp +SOURCE DunUpstream.cpp +SOURCE DunDownstream.cpp +SOURCE DunSignalCopy.cpp +SOURCE DunSignalNotify.cpp +SOURCE DunSignalWaiter.cpp +SOURCE DunDataWaiter.cpp +SOURCE DunNetDataport.cpp +SOURCE DunTransUtils.cpp +SOURCE DunTransporter.cpp +SOURCE DunChanMan.cpp +SOURCE DunDataPusher.cpp +SOURCE DunNoteHandler.cpp +SOURCE DunUtils.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc ../../atext/inc +USERINCLUDE ../../../inc + +LIBRARY bafl.lib +#ifdef PRJ_USE_NETWORK_STUBS +LIBRARY c32comm_stub.lib +LIBRARY etelmm_stub.lib +#else +LIBRARY c32.lib +LIBRARY etel.lib +LIBRARY etelmm.lib +#endif +LIBRARY esock.lib +LIBRARY dunatext.lib +LIBRARY efsrv.lib +LIBRARY euser.lib +LIBRARY HbWidgets.lib + +DEBUGLIBRARY flogger.lib diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunChanMan.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunChanMan.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,407 @@ +/* +* Copyright (c) 2006-2008 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: RComm channel management related functionality (waiter) +* +*/ + + +#ifndef C_CDUNCHANMAN_H +#define C_CDUNCHANMAN_H + +#include "DunTransUtils.h" +#include "DunTransporter.h" + +class CDunSignalWaiter; +class CDunDataWaiter; + +/** + * Class for CDunDataWaiter's and CDunSignalWaiter's connection monitoring + * support + * When CDunDataWaiter or CDunSignalWaiter detects activity, data in this + * class is used as helper data to create subsequent calls to + * CDunTransporter::AddConnMonCallbackL + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunConnMonCallback ) + { + +public: + + /** + * Callback to call when notification via MDunConnMon to be made + * (CDunTransporter::AddConnMonCallbackL, aCallback parameter) + * Not own. + */ + MDunConnMon* iCallback; + + /** + * Direction where to add connection monitor + * (CDunTransporter::AddConnMonCallbackL, aDirection parameter) + */ + TDunDirection iDirection; + + }; + +/** + * Class for CDunDataWaiter's and CDunSignalWaiter's connection monitoring + * support + * When CDunConnWaiter or CDunSignalWaiter detects activity, data in this + * class is used as helper data to create subsequent calls to + * CDunTransporter::AddSkippedErrorL + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunSkippedError ) + { + +public: + + /** + * Error code of read/write condition that should be skipped + * (CDunTransporter::AddSkippedErrorL, aError parameter) + */ + TInt iError; + + /** + * Direction of read/write error condition + * (CDunTransporter::AddSkippedErrorL, aDirection parameter) + */ + TDunDirection iDirection; + + }; + +/** + * Class for CDunDataWaiter's or CDunSignalWaiter's connection monitoring + * support + * When CDunDataWaiter or CDunSignalWaiter detects activity, data in this + * class is used as helper + * data to create subsequent calls to the following APIs + * CDunTransporter::AddConnMonCallbackL + * CDunTransporter::AddSkippedErrorL + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunWaiterData ) + { + +public: + + /** + * RComm object of local media side + * Not own. + */ + RComm* iComm; + + /** + * Name for the channel + */ + HBufC8* iChannelName; + + /** + * Signal waiter object for a channel + * Not own. + */ + CDunSignalWaiter* iSignalWaiter; + + /** + * Data waiter object for a channel + * Not own. + */ + CDunDataWaiter* iDataWaiter; + + /** + * Pointer to object implementing buffer correction + * Not own. + */ + MDunBufferCorrection* iCorrection; + + /** + * Connection monitor raw data that will be added to TDunChannelData array + * after activity detected by iDataWaiter or iSignalWaiter + */ + RArray iConnMons; + + /** + * Skipped error raw data that will be added to TDunChannelData array + * after activity detected by iDataWaiter or iSignalWaiter + */ + RArray iOkErrors; + + /** + * Flag to indicate whether enqueued channel allocation required. + * Second option is to use service advertisement API. + */ + TBool iEnqueuedFail; + + /** + * UID of plugin that allocated this channel + * Used for making notification via MDunPluginManager callback + * Added to TDunChannelData array after activity detected by iDataWaiter + */ + TUid iOwnerUid; + + }; + +/** + * Notification interface class for creating new channel + * Used by CDunDataWaiter ro CDunSignalWaiter to create new channel when + * activity is detected + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunChannelAllocator ) + { + +public: + + /** + * CDunTransporter callback: gets called when waiter wants new channel + * + * @since S60 3.2 + * @param aComm Connection where new data exists + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyNewChannelRequest( RComm* aComm ) = 0; + + }; + +/** + * Class for RComm channel management related functionality (waiter) + * activity is detected by CDunDataWaiter or CDunSignalWaiter objects + * Also takes care of waiter object creation. + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunChanMan ) : public CBase, + public MDunChannelAllocator + { + +public: + + /** + * Two-phased constructor. + * @param aParent Parent class owning this friend class (CDunTransporter) + * @param aUtility Pointer to common utility class + * @param aUtilityAux Pointer to other than CDunTransporter utility class + * @param aPluginManager Callback to call when notification via + * MDunPluginManager to be made + * @return Instance of self + */ + static CDunChanMan* NewL( CDunTransporter& aParent, + MDunTransporterUtility* aUtility, + MDunTransporterUtilityAux* aUtilityAux, + MDunPluginManager* aPluginManager ); + + /** + * Destructor. + */ + virtual ~CDunChanMan(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Number of waiters + * + * @since S60 3.2 + * @return Number of waiters + */ + TInt NumberOfWaiters(); + + /** + * Gets number of waiters by owner UID + * + * @since S60 5.0 + * @param aOwnerUid UID of the channel owner + * @return Number of waiters + */ + TInt GetNumberOfWaitersByUid( TUid aOwnerUid ); + + /** + * Adds new connection waiter to connection waiter array + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @param aOwnerUid UID of the channel owner + * @param aName Name for the channel + * @param aEnqueuedFail ETrue if enqueued failure, EFalse otherwise + * @param aCorrection Pointer to object implementing buffer correction + * @return None + */ + void AddConnWaiterL( RComm* aComm, + TUid aOwnerUid, + const TDesC8& aName, + TBool aEnqueuedFail, + MDunBufferCorrection* aCorrection ); + + /** + * Removes existing waiter from connection waiter array + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @return KErrNotFound if waiter not found, KErrNone if removed + */ + TInt RemoveConnWaiter( RComm* aComm ); + + /** + * Makes CDunDataWaiter and CDunSignalWaiter ready to detect activity + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @return KErrNotFound if waiter not found, KErrNone if request issued + */ + TInt IssueConnWaiterRequest( RComm* aComm ); + + /** + * Stops CDunDataWaiter and CDunSignalWaiter to detect new data + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @return KErrNotFound if waiter not found, KErrNone if stopped + */ + TInt StopConnWaiter( RComm* aComm ); + + /** + * Saves waiter's connection monitor callback data + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @param aCallback Pointer to object whose callbacks will be called + * @param aDirection Direction of operation to monitor for read/write + * error + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SaveWaiterConnMonCallbackL( RComm* aComm, + MDunConnMon* aCallback, + TDunDirection aDirection ); + + /** + * Saves waiter's skipped error data + * + * @since S60 3.2 + * @param aError Error code to consider as "no error" + * @param aComm Pointer to opened local media RComm ID object + * @param aDirection One of four data transfer endpoints where to add a + * skipped error code + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SaveWaiterSkippedErrorL( TInt aError, + RComm* aComm, + TDunDirection aDirection ); + +private: + + CDunChanMan( CDunTransporter& aParent, + MDunTransporterUtility* aUtility, + MDunTransporterUtilityAux* aUtilityAux, + MDunPluginManager* aPluginManager ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Fills data for channel created by waiter + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @param aFirstFree Index to first free channel + * @return Symbian error code on error, KErrNone otherwise + */ + TInt FillNewWaiterChannelData(RComm* aComm, TInt aFirstFree); + + /** + * Restores saved waiter data to connection data + * + * @since S60 3.2 + * @param aWaiterIndex Index to waiter data + * @param aChannelIndex Index to connection data + * @return Symbian error code on error, KErrNone otherwise + */ + TInt RestoreWaiterData( TInt aWaiterIndex, TInt aChannelIndex ); + + /** + * Deletes waiter objects of aIndex:th waiters + * + * @since S60 3.2 + * @param aIndex Index of waiters to delete + * @param aNewOwnership ETrue if ownership transferred, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DeleteWaiters( TInt aIndex, TBool aNewOwnership=EFalse ); + +// from base class MDunChannelAllocator + + /** + * From MDunChannelAllocator. + * Notifies when new channel is wanted + * + * @since S60 3.2 + * @param aComm Connection where new data exists + * @return KErrNone + */ + TInt NotifyNewChannelRequest( RComm* aComm ); + +private: // data + + /** + * Parent class owning this friend class (CDunTransporter) + */ + CDunTransporter& iParent; + + /** + * Pointer to common utility class + * Not own. + */ + MDunTransporterUtility* iUtility; + + /** + * Pointer to other than CDunTransporter utility class + * Not own. + */ + MDunTransporterUtilityAux* iUtilityAux; + + /** + * Callback to call when notification via MDunPluginManager to be made + * Not own. + */ + MDunPluginManager* iPluginManager; + + /** + * Waiter's data that will be added to iChannelData when waiter detects + * read activity. After copying to iChannelData the data will be removed + * from this array. + */ + RArray iWaiterData; + + }; + +#endif // C_CDUNCHANMAN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunDataPusher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunDataPusher.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,284 @@ +/* +* Copyright (c) 2008-2010 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: Pushes data to existing stream from outside +* +*/ + + +#ifndef C_CDUNDATAPUSHER_H +#define C_CDUNDATAPUSHER_H + +#include "DunTransporter.h" + +class MDunCompletionReporter; + +/** + * Class used for storing data related to data push + * (data coming from MDunStreamManipulator::NotifyDataPushRequest()) + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunDataPush ) + { + +public: + + /** + * Data to push to the stream (not copied) + */ + const TDesC8* iDataToPush; + + /** + * Callback to call when data is processed by the stream + * If this is NULL then no callback will be made + */ + MDunCompletionReporter* iCallback; + + }; + +/** + * Class for notifications of stream manipulator's completion events + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunCompletionReporter ) + { + +public: + + /** + * Gets called when data from + * MDunStreamManipulator::NotifyDataPushRequest() has been processed and + * CDunDownstream is ready to process more data. + * + * @since S60 5.0 + * @param aAllPushed ETrue if all in the queue were pushed, EFalse otherwise + * @return None + */ + virtual void NotifyDataPushComplete( TBool aAllPushed ) = 0; + + }; + +/** + * Class for pushing data to existing CDunDownstream stream from outside + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunDataPusher ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aParent Parent class owning this friend class (CDunDownstream) + * @param aStreamCallback Callback to call when events processed + * @return Instance of self + */ + static CDunDataPusher* NewL( CDunDownstream& aParent, + MDunCompletionReporter* aStreamCallback ); + + /** + * Destructor. + */ + virtual ~CDunDataPusher(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Sets media to be used for this endpoint + * + * @since S60 3.2 + * @param aComm RComm pointer to use as the endpoint + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RComm* aComm ); + + /** + * Sets media to be used for this endpoint + * + * @since S60 3.2 + * @param aSocket RSocket pointer to use as the endpoint + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RSocket* aSocket ); + + /** + * Adds event notification to queue + * + * @since S60 3.2 + * @param aDataToPush Data to push to the stream (not copied) + * @param aCallback Callback to call when data is processed by the stream + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddToEventQueue( const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ); + + /** + * Finds an event from queue + * + * @since S60 5.0 + * @param aDataToPush Data to push to the stream (not copied) + * @return Index of found event, Symbian error code otherwise + */ + TInt FindEventFromQueue( const TDesC8* aDataToPush ); + + /** + * Stops one event in the event queue + * + * @since S60 5.0 + * @param aDataToPush Data to push to the stream (not copied) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StopOneEvent( const TDesC8* aDataToPush ); + + /** + * Sends queued data in round robin + * + * @since S60 3.2 + * @return ETrue if sending started, EFalse if nothing to do + */ + TBool SendQueuedData(); + + /** + * Stops sending for write endpoint + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + + /** + * Stops sending for write endpoint and clears event queue + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StopAndClearQueue(); + + /** + * Signals completion status in round robin and clears event queue + * + * @return Symbian error code on error, KErrNone otherwise + * @return None + */ + TInt SignalCompletionAndClearQueue(); + +private: + + CDunDataPusher( CDunDownstream& aParent, + MDunCompletionReporter* aStreamCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Manages one event's data push + * + * @since S60 3.2 + * @return None + */ + TInt ManageOneEvent(); + + /** + * Check whether an error code is severe error or not + * + * @since S60 3.2 + * @param aError Error code to check for severity + * @param aIsError ETrue if error code is error, EFalse if not error + * @return ETrue if severe error detected, EFalse if not severe error + */ + TBool ProcessErrorCondition( TInt aError, TBool& aIsError ); + +// from base class CActive + + /** + * From CActive. + * Gets called when endpoint data write complete + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Parent class owning this friend class (CDunDownstream) + */ + CDunDownstream& iParent; + + /** + * Callback to call when notification via MDunCompletionReporter to be made + * Not own. + */ + MDunCompletionReporter* iStreamCallback; + + /** + * Event queue for pushed data requests + */ + RArray iEventQueue; + + /** + * Current state of data push: active or inactive + */ + TDunState iPushState; + + /** + * Index of current event to serve + */ + TInt iEventIndex; + + /** + * RSocket object of local media side + * If this is set then iComm is not used + * Not own. + */ + RSocket* iSocket; + + /** + * RComm object of local media or network side + * If this is set then iSocket is not used + * Not own. + */ + RComm* iComm; + + }; + +#endif // C_DUNDATAPUSHER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunDataWaiter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunDataWaiter.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,156 @@ +/* +* Copyright (c) 2006-2007 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: Monitors for new data in RComm local media side +* +*/ + + +#ifndef C_CDUNDATAWAITER_H +#define C_CDUNDATAWAITER_H + +#include "DunChanMan.h" + +/** + * Class to monitor for new data in RComm local media side + * This class is needed to avoid unnecessary resource allocation of Dataport + * side when number of supported Dataport ports for DUN is less than the + * number of local media side plugins that use RComm + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunDataWaiter ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aChannelCallback Callback to call when notification via + * MDunChannelAllocator to be made + * @return Instance of self + */ + static CDunDataWaiter* NewL( MDunChannelAllocator* aChannelCallback ); + + /** + * Destructor. + */ + virtual ~CDunDataWaiter(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Adds callback for RunL error controlling + * The callback will be called when error is detected in asynchronous + * operation + * + * @since S60 3.2 + * @param aCallback Callback to call when line status changes + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddCallback( MDunConnMon* aCallback ); + + /** + * Sets media to use for this endpoint + * + * @since S60 3.2 + * @param aComm RComm pointer to use as the endpoint + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RComm* aComm ); + + /** + * Issues request to start waiting for new data in RComm + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops monitoring for new data + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunDataWaiter( MDunChannelAllocator* aChannelCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when new data in RComm object + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback(s) to call when notification(s) via MDunConnMon to be made + * Normally contains only one callback + */ + RPointerArray iCallbacks; + + /** + * Callback to call when notification via MDunChannelAllocator to be made + * Not own. + */ + MDunChannelAllocator* iChannelCallback; + + /** + * Current state of data monitoring: active or inactive + */ + TDunState iDataWaiterState; + + /** + * RComm object of local media side + * Not own. + */ + RComm* iComm; + + }; + +#endif // C_CDUNDATAWAITER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunDebug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunDebug.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2006-2007 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: Common debug functionality for this component +* +*/ + + +#ifndef DUN_DEBUG_H +#define DUN_DEBUG_H + +_LIT( KComponentName, "[DUN] " ); + +//#define FILE_LOGGING + +#ifdef _DEBUG + +#ifdef FILE_LOGGING + +#include +#include +#include + +#define FTRACE(a) {a;} + +_LIT( KLogFile,"dun.txt" ); +_LIT( KLogDir, "dun" ); +_LIT( KLogDirFullName,"c:\\logs\\dun\\" ); + +// Declare the FPrint function +// +inline void FPrint( const TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list ); + } + +inline void FPrintRaw( const TDesC8& /*aDes*/ ) + { + } + +#else + +#include + +#define FTRACE(a) {a;} + +/** +Overflow handler for VA_LIST parsing into a fixed size buffer to +be printed out using RDebug. +*/ +NONSHARABLE_CLASS( TRDebugOverflowHander ) : public TDesOverflow +{ + /** + The function that will get called when the buffer is over-flowed. + In this case we just ignore the overflow, so the buffer will + effectively be truncated. + */ + virtual void Overflow( TDes16& /*aDes*/ ) { return; } +}; + +/** The maximum length of a log line (in characters) output using RDebug. */ +const TUint KRDebugMaxLineLen = 0x100; + +// Declare the FPrint function +// + +inline void FPrint( const TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START( list, aFmt ); + TRDebugOverflowHander overflow; + TBuf buf; + TRefByValue fmt = aFmt; + buf.Copy( KComponentName ); + buf.AppendFormatList( fmt, list, &overflow ); + RDebug::Print( buf ); + } + +inline void FPrintRaw( const TDesC8& aDes ) + { + RDebug::RawPrint( aDes ); + } + +#endif // FILE_LOGGING + +// =========================================================================== +#else // // No loggings --> Reduced binary size +// =========================================================================== +#define FTRACE( a ) + +#endif // _DEBUG + +#endif // DUN_DEBUG_H + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunDownstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunDownstream.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,276 @@ +/* +* Copyright (c) 2007-2010 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: Definitions needed for one "stream" of CDunTransporter +* +*/ + + +#ifndef C_CDUNDOWNSTREAM_H +#define C_CDUNDOWNSTREAM_H + +#include "DunTransUtils.h" +#include "DunStream.h" +#include "DunAtCmdHandler.h" +#include "DunDataPusher.h" + +class MDunCompletionReporter; +class MDunAtCmdHandler; + +/** + * Class used for storing data related to data pushing + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunPushData ) + { + +public: + + /** + * Flag for command mode notifier's MDunCmdModeMonitor callback + * This flag is needed to mark command mode start/end + */ + TBool iDataMode; + + /** + * Data pusher for stream manipulation + */ + CDunDataPusher* iDataPusher; + + /** + * AT command handling related functionality for CDunDownstream + * Not own. + */ + MDunAtCmdHandler* iAtCmdHandler; + + }; + +/** + * Class for manipulating existing stream's contents from outside + * (outside of class CDunDownstream) + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunStreamManipulator ) + { + +public: + + /** + * Gets called when outside party wants to push data to the existing stream + * + * @since S60 5.0 + * @param aDataToPush Data to push to the stream (not copied) + * @param aCallback Callback to call when data is processed by the stream + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyDataPushRequest( + const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ) = 0; + + /** + * Checks if data is in queue + * + * @since TB9.2 + * @param aDataToPush Data to check + * @return ETrue if data is in queue, EFalse otherwise + */ + virtual TBool IsDataInQueue( const TDesC8 *aDataToPush ) = 0; + + }; + +/** + * Class for data transmission of one "stream" from network to local media + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunDownstream ) : public CDunStream, + public MDunStreamManipulator, + public MDunCompletionReporter, + public MDunCmdModeMonitor + { + + friend class CDunDataPusher; + +public: + + /** + * Two-phased constructor. + * @param aUtility Pointer to common utility class + * @return Instance of self + */ + static CDunDownstream* NewL( MDunTransporterUtilityAux* aUtility ); + + /** + * Destructor. + */ + virtual ~CDunDownstream(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Starts downstream by issuing read request + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StartStream(); + + /** + * Stops transfer for read or write endpoints + * + * @since S60 3.2 + * @param aStopMplex ETrue if multiplexer stop, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop( TBool aStopMplex=ETrue ); + + /** + * Initializes this stream for data pushing + * + * @since S60 3.2 + * @param aAtCmdHandler AT command handling related functionality + * @return Symbian error code on error, KErrNone otherwise + */ + TInt InitializeForDataPushing( MDunAtCmdHandler* aAtCmdHandler ); + + /** + * Checks if data is in queue + * + * @since TB9.2 + * @param aDataToPush Data to check + * @return ETrue if data is in queue, EFalse otherwise + */ + TBool IsDataInQueue( const TDesC8* aDataToPush ); + + /** + * Adds data to event queue and starts sending if needed + * + * @since S60 5.0 + * @param aDataToPush Data to push to the stream (not copied) + * @param aCallback Callback to call when data is processed by the stream + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddToQueueAndSend( const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ); + +private: + + CDunDownstream( MDunTransporterUtilityAux* aUtility ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Issues transfer request for this stream + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + +// from base class CActive + + /** + * From CActive. + * Gets called when endpoint data read complete + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +// from base class MDunStreamManipulator + + /** + * Gets called when outside party wants to push data to the existing stream + * + * @since S60 3.2 + * @param aDataToPush Data to push to the stream (not copied) + * @param aCallback Callback to call when data is processed by the stream + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyDataPushRequest( const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ); + +// from base class MDunCompletionReporter + + /** + * Gets called when data push is complete + * + * @since S60 5.0 + * @param aAllPushed ETrue if all in the queue were pushed, EFalse otherwise + * @return None + */ + void NotifyDataPushComplete( TBool aAllPushed ); + +// from base class MDunCmdModeMonitor + + /** + * Notifies about command mode start + * + * @since S60 5.0 + * @return None + */ + void NotifyCommandModeStart(); + + /** + * Notifies about command mode end + * + * @since S60 5.0 + * @return None + */ + void NotifyCommandModeEnd(); + +private: // data + + /** + * Pointer to common utility class + * Not own. + */ + MDunTransporterUtilityAux* iUtility; + + /** + * Data related to data pushing + */ + TDunPushData iPushData; + + }; + +#endif // C_CDUNDOWNSTREAM_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunNetDataport.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunNetDataport.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,286 @@ +/* +* Copyright (c) 2006-2007 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: Dataport specific network resource accessor implementation +* +*/ + + +#ifndef C_CDUNNETDATAPORT_H +#define C_CDUNNETDATAPORT_H + +#include +#ifdef PRJ_USE_NETWORK_STUBS +#include +#include +#else +#include +#endif + +/** + * Class to store data needed for each separate "call" + * One TDunDataportEntity entity contains objects needed for one network data + * connection + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunDataportEntity ) + { + +public: + + /** + * Dataport for one call + */ + RComm iDataport; + + /** + * Call for this entity + */ + RMobileCall iMobileCall; + + /** + * Specifies whether this entity is in use or not + */ + TBool iEntityInUse; + + }; + +/** + * Class for common network resource usage + * This class provides network side independent functionality + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunNetwork ) + { + +public: + + /** + * Abstract; Initializes network + * Must be called before any other operation + * + * @since S60 3.2 + * @return None + */ + virtual void InitializeL() = 0; + + }; + +/** + * Class for Dataport specific network resource usage + * This class is provides Dataport (RComm) dependent functionality + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunNetDataport ) : public MDunNetwork + { + +public: + + /** + * Abstract; Called when channel was created by transporter + * Initializes network for channel creation + * + * @since S60 3.2 + * @param aComm Network ID returned when allocation successful + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt AllocateChannel( RComm*& aComm ) = 0; + + /** + * Abstract; Called when channel was deleted/closed by transporter + * Uninitializes network for channel deletion/close + * + * @since S60 3.2 + * @param aComm Network ID of owning entity that will be freed + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt FreeChannel( RComm* aComm ) = 0; + + /** + * Gets index by network ID for Dataport + * + * @since S60 3.2 + * @param aComm Index to get by this network ID + * @return Symbian error code on error, index otherwise + */ + virtual TInt GetIndexById( RComm* aComm ) = 0; + + }; + +/** + * Class for accessing network functionality through Dataport + * This class is needed by CDunTransporter to create abstract "channels" + * for data communication. + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunNetDataport ) : public CBase, public MDunNetDataport + { + +public: + + /** + * Two-phased constructor. + * @param aNumOfMaxChannels Maximum number of supported Dataport ports + * for DUN + * @return Instance of self + */ + static CDunNetDataport* NewL( TInt aNumOfMaxChannels ); + + /** + * Destructor. + */ + ~CDunNetDataport(); + +// from base class MDunNetwork (MDunNetDataport -> MDunNetwork) + + /** + * From MDunNetwork (MDunNetDataport -> MDunNetwork). + * Initializes network for Dataport + * Must be called before any other operation + * + * @since S60 3.2 + * @return None + */ + void InitializeL(); + +// from base class MDunNetDataport + + /** + * From MDunNetDataport. + * Called when channel was created by transporter for Dataport + * Initializes network for channel creation + * + * @since S60 3.2 + * @param aComm Network ID returned when allocation successful + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AllocateChannel( RComm*& aComm ); + + /** + * From MDunNetDataport. + * Called when channel was deleted/closed by transporter for Dataport + * Uninitializes network for channel deletion/close + * + * @since S60 3.2 + * @param aComm Network ID of owning entity that will be freed + * @return Symbian error code on error, KErrNone otherwise + */ + TInt FreeChannel( RComm* aComm ); + + /** + * From MDunNetDataport. + * Gets index by network ID for Dataport + * + * @since S60 3.2 + * @param aComm Index to get by this network ID + * @return Symbian error code on error, index otherwise + */ + TInt GetIndexById( RComm* aComm ); + +private: + + CDunNetDataport( TInt aNumOfMaxChannels ); + + void ConstructL(); + + /** + * Allocates phone objects for use + * + * @since S60 3.2 + * @return None + */ + void AllocatePhoneObjectsL(); + + /** + * Initializes first free entity + * + * @since S60 3.2 + * @return Symbian error code on error, found index otherwise + */ + TInt InitializeFirstFreeEntity(); + + /** + * Remove network entity by index + * + * @since S60 3.2 + * @param aIndex Index which entity to remove + * @return Symbian error code on error, KErrNone otherwise + */ + TInt RemoveEntity( TInt aIndex ); + + /** + * Deletes own internal data + * + * @since S60 3.2 + * @return None + */ + void DeleteNetwork(); + + /** + * Deletes one network entity at index aIndex for Dataport + * + * @since S60 3.2 + * @param aIndex Index where to delete an entity + * @param aCheckFree Check free status before deletion + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DeleteNetworkEntity( TInt aIndex, TBool aCheckFree ); + +private: // data + + /** + * Maximum number of supported Dataport ports for DUN + */ + TInt iNumOfMaxChannels; + + /** + * Array of abstractions of each "call". + * One TDunDataportEntity entity contains objects needed for one network + * data connection + */ + RArray iEntities; + + /** + * Communication server needed for Dataport port opening, port information + * fetching, and Dataport communication module loading and unloading + */ + RCommServ iCommServer; + + /** + * Telephony server needed for opening iMobilePhone mobile phone session + * and for telephony module loading and unloading + */ + RTelServer iTelServer; + + /** + * Mobile phone server needed for opening iMobileLine mobile line session + */ + RMobilePhone iMobilePhone; + + /** + * Mobile line server needed for opening new calls to Dataport. + * Each new call is also new network data connection + */ + RMobileLine iMobileLine; + + }; + +#endif // C_CDUNNETDATAPORT_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunNoteHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunNoteHandler.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,115 @@ +/* +* Copyright (c) 2007 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: Manages note showing in UI +* +*/ + + +#ifndef C_CDUNNOTEHANDLER_H +#define C_CDUNNOTEHANDLER_H + +#include +#include +#include "DunTransporter.h" + +/** + * Class for managing note showing in UI + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunNoteHandler ) : public CBase, + public MHbDeviceMessageBoxObserver + { + +public: + + /** + * Two-phased constructor. + * @return Instance of self + */ + static CDunNoteHandler* NewL(); + + /** + * Destructor. + */ + virtual ~CDunNoteHandler(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Issues request to start showing UI note + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops showing UI note + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunNoteHandler(); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Issues request to start showing UI note + * + * @since S60 3.2 + * @return None + */ + void DoIssueRequestL(); + +// from base class MHbDeviceMessageBoxObserver + + // TODO: ADD DESCRIPTION HERE! + void MessageBoxClosed( const CHbDeviceMessageBoxSymbian* aMessageBox, + CHbDeviceMessageBoxSymbian::TButtonId aButton ); + +private: // data + + /** + * Note to show + */ + CHbDeviceMessageBoxSymbian* iNote; + + /** + * Current state of note showing: active or inactive + */ + TDunState iNoteState; + + }; + +#endif // C_CDUNNOTEHANDLER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunPlugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,243 @@ +/* +* Copyright (c) 2006-2008 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: Common definitions and classes needed by DUN plugins +* +*/ + + +#ifndef DUN_PLUGIN_H +#define DUN_PLUGIN_H + +#include + +typedef TAny* TConnId; // supported now: RSocket*, RComm* + +enum TDunPluginState + { + EDunStateNone = KErrNotFound, // -1 + EDunStateZombie = 0, // 0 + EDunStateTryUninitialize, // 1 + EDunStateUninitialized, // 2 + EDunStateTryLoad, // 3 + EDunStateLoaded, // 4 + EDunStateTryListen, // 5 + EDunStateListening, // 6 + EDunStateTryChannel, // 7 + EDunStateChanneled // 8 + }; + +const TInt KDunLocalMediaPluginInterfaceUidValue = 0x101F6E2D; +const TUid KDunLocalMediaPluginInterfaceUid = { KDunLocalMediaPluginInterfaceUidValue }; + +const TInt KDunBtPluginUidValue = 0x101F6E2B; +const TUid KDunBtPluginUid = { KDunBtPluginUidValue }; +const TInt KDunIrPluginUidValue = 0x101FBAEB; +const TUid KDunIrPluginUid = { KDunIrPluginUidValue }; +const TInt KDunUsbPluginUidValue = 0x101F6E2F; +const TUid KDunUsbPluginUid = { KDunUsbPluginUidValue }; + +class CDunTransporter; + +/** + * Notification interface class to report request for plugin enqueue + * This reqeust is made when there are not enough network resources for a + * certain plugin's needs + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunPluginManager ) + { + +public: + + /** + * Gets called when old plugin should be enqueued + * + * @since S60 3.2 + * @param aPluginUid UID of the plugin that should be enqueued + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginEnqueueRequest( TUid aPluginUid ) = 0; + + /** + * Gets called when new plugin should be dequeued + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to dequeue + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginDequeueRequest( TUid aPluginUid ) = 0; + + /** + * Get callen when plugin should be closed + * + * @since S60 3.2 + * @param aPluginUid UID of the local media plugin to close + * @param aSelfClose ETrue if plugin closes itself, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginCloseRequest( TUid aPluginUid, + TBool aSelfClose ) = 0; + + }; + +/** + * Interface class for accessing CDunServer's functionality + * Shares basic interface for all plugins to use when plugin needs to access + * server's functionality + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunServerCallback ) : public MDunPluginManager + { + +public: + + /** + * Callback from plugins to server to get a plugin's state + * + * @since S60 3.2 + * @param aPluginUid Plugin's UID which state to get + * @return Plugin's state + */ + virtual TDunPluginState GetPluginStateByUid( TUid aPluginUid ) = 0; + + /** + * Callback from plugins to server to set a new state + * New state must be one more than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @param aPluginUid Plugin's UID for which to change state + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginStateChangeUp( TDunPluginState aPluginState, + TUid aPluginUid ) = 0; + + /** + * Callback from plugins to server to set a new state + * New state must be one less than the old state + * + * @since S60 3.2 + * @param aPluginState New state to set for a plugin + * @param aPluginUid Plugin's UID for which to change state + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginStateChangeDown( TDunPluginState aPluginState, + TUid aPluginUid ) = 0; + + /** + * Callback from plugins to server to restart a plugin + * Restarting must be done by uninitialization->listening switch since + * context is in plugin + * + * @since S60 3.2 + * @param aPluginUid Plugin's UID to restart + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginRestart( TUid aPluginUid ) = 0; + + /** + * Callback from plugins to server to reopen a plugin from queue + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyPluginReopenRequest() = 0; + + }; + +/** + * Interface class for accessing plugins' functionality + * Shares basic interface for server to use when server needs to access + * plugin's functionality + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunLocalMediaPlugin ) + { + +public: + + /** + * Destructor. Derived class must have virtual destructor also as a plugin + * module is always destructed via M-class. + */ + inline virtual ~MDunLocalMediaPlugin() {}; + + /** + * Symbian 2nd phase constructor. + */ + virtual void ConstructL( MDunServerCallback* aServer, + CDunTransporter* aTransporter ) = 0; + + /** + * Callback from server to plugins to notify when server changes a + * plugin's state + * + * @since S60 3.2 + * @param aPluginState New changed state + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyServerStateChange( TDunPluginState aPluginState ) = 0; + + /** + * Callback from server to plugins to ask for current active connection + * (For testing purposes only) + * + * @since S60 5.0 + * @return Active connection, NULL otherwise + */ + virtual TConnId ActiveConnection() = 0; + + }; + +/** + * Interface class for accessing plugin's main class when its listener + * reports that channel can be created. Can be used also to notify plugin's + * main class when channel can be deleted. + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunListenCallback ) + { + +public: + + /** + * Callback from plugin's listener to plugin to notify about need to + * allocate new channel + * + * @since S60 3.2 + * @param aNoFreeChan ETrue if no free channels, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyChannelAllocate( TBool& aNoFreeChans ) = 0; + + /** + * Callback from plugin's listener to plugin to notify about need to free + * an existing channel + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyChannelFree() = 0; + + }; + +#endif // DUN_PLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunSignalCopy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunSignalCopy.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,226 @@ +/* +* Copyright (c) 2006-2010 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: Copies signals changes between network and local media +* +*/ + + +#ifndef C_CDUNSIGNALCOPY_H +#define C_CDUNSIGNALCOPY_H + +#include "DunTransporter.h" +#include "DunTransUtils.h" +#include "DunAtCmdHandler.h" + +/** + * Class for copying signal changes between to endpoints + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunSignalCopy ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @return Instance of self + */ + static CDunSignalCopy* NewL(); + + /** + * Destructor. + */ + virtual ~CDunSignalCopy(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Adds callback for line status change controlling + * The callback will be called when RunL error is detected + * + * @since S60 3.2 + * @param aCallback Callback to call when line status changes + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddCallback( MDunConnMon* aCallback ); + + /** + * Sets media to use for this endpoint monitor + * + * @since S60 3.2 + * @param aComm RComm pointer to local media side + * @param aNetwork RComm pointer to network side + * @param aStreamType Stream type for this endpoint + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RComm* aComm, + RComm* aNetwork, + TDunStreamType aStreamType ); + + /** + * Issues request to start monitoring the endpoint for line status change + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops monitoring the endpoint for line status change + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunSignalCopy(); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Manages upstream signal changes + * + * @since S60 3.2 + * @return None + */ + void ManageSignalChange(); + + /** + * Manages signal changes + * + * @since S60 3.2 + * @return None + */ + void ManageSignalChangeUpstream(); + + /** + * Manages downstream signal changes + * + * @since S60 3.2 + * @return None + */ + void ManageSignalChangeDownstream(); + + /** + * Changes upstream signal + * + * @since S60 5.0 + * @param aSetMask Set the handshaking lines in the mask + * @param aClearMask Clear the handshaking lines in the mask + * @return None + */ + void ChangeUpstreamSignal( TUint aSetMask, TUint aClearMask ); + + /** + * Changes downstream signal + * + * @since S60 3.2 + * @param aSetMask Set the handshaking lines in the mask + * @param aClearMask Clear the handshaking lines in the mask + * @return None + */ + void ChangeDownstreamSignal( TUint aSetMask, TUint aClearMask ); + +// from base class CActive + + /* + * From CActive. + * Gets called when line status changes + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback(s) to call when notification(s) via MDunConnMon to be made + * Normally contains only one callback + */ + RPointerArray iCallbacks; + + /** + * Callback(s) to call when command mode starts or ends + * Usually two needed: one for upstream and second for downstream + */ + RPointerArray iCmdCallbacks; + + /** + * Used media context: network or local + */ + TDunMediaContext iContextInUse; + + /** + * Used stream type: upstream or downstream + */ + TDunStreamType iStreamType; + + /** + * Current state of connection monitoring: active or inactive + */ + TDunState iSignalCopyState; + + /** + * Signal to listen with RComm::NotifySignalChange() + */ + TUint iListenSignals; + + /** + * Signals set when RComm::NotifySignalChange() request completes + */ + TUint iSignals; + + /** + * RComm object of network side + * Not own. + */ + RComm* iNetwork; + + /** + * RComm object of local media side + * Not own. + */ + RComm* iComm; + + }; + +#endif // C_CDUNSIGNALCOPY_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunSignalNotify.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunSignalNotify.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2006-2010 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: Monitors signal changes on network side and reports changes +* +*/ + + +#ifndef C_CDUNSIGNALNOTIFY_H +#define C_CDUNSIGNALNOTIFY_H + +#include "DunTransUtils.h" +#include "DunAtCmdHandler.h" + +/** + * Class for monitoring line status and reporting changes + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunSignalNotify ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aUtility Pointer to common utility class + * @return Instance of self + */ + static CDunSignalNotify* NewL( MDunTransporterUtilityAux* aUtility ); + + /** + * Destructor. + */ + virtual ~CDunSignalNotify(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Adds callback for line status change controlling + * The callback will be called when line status change is detected in + * endpoint + * + * @since S60 3.2 + * @param aCallback Callback to call when line status changes + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddCallback( MDunConnMon* aCallback ); + + /** + * Sets media to use for this endpoint monitor (network side) + * + * @since S60 3.2 + * @param aComm RComm pointer to use as the endpoint + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RComm* aComm ); + + /** + * Issues request to start monitoring the endpoint for line status change + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops monitoring the endpoint for line status change + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunSignalNotify( MDunTransporterUtilityAux* aUtility ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Manages signal changes + * + * @since S60 3.2 + * @return None + */ + void ManageSignalChange(); + + /** + * Reports signal change + * + * @since S60 3.2 + * @param aSetMask Set the handshaking lines in the mask + * @param aClearMask Clear the handshaking lines in the mask. + * @return None + */ + void ReportSignalChange( TUint aSetMask, TUint aClearMask ); + +// from base class CActive + + /* + * From CActive. + * Gets called when line status changes + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback(s) to call when notification(s) via MDunConnMon to be made + * Normally contains only one callback + */ + RPointerArray iCallbacks; + + /** + * Pointer to common utility class + * Not own. + */ + MDunTransporterUtilityAux* iUtility; + + /** + * Current state of signal monitoring: active or inactive + */ + TDunState iSignalNotifyState; + + /** + * Signals to listen with RComm::NotifySignalChange() + */ + TUint iListenSignals; + + /** + * Signals set when RComm::NotifySignalChange() request completes + */ + TUint iSignals; + + /** + * RComm object of network side + * Not own. + */ + RComm* iNetwork; + + }; + +#endif // C_CDUNSIGNALNOTIFY_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunSignalWaiter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunSignalWaiter.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,161 @@ +/* +* Copyright (c) 2006-2007 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: Monitors for signal change in RComm local media side +* +*/ + + +#ifndef C_CDUNSIGNALWAITER_H +#define C_CDUNSIGNALWAITER_H + +#include "DunChanMan.h" + +/** + * Class to monitor for signal change in RComm local media side + * This class is needed to avoid unnecessary resource allocation of Dataport + * side when number of supported Dataport ports for DUN is less than the + * number of local media side plugins that use RComm + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunSignalWaiter ) : public CActive + { + +public: + + /** + * Two-phased constructor. + * @param aChannelCallback Callback to call when notification via + * MDunChannelAllocator to be made + * @return Instance of self + */ + static CDunSignalWaiter* NewL( MDunChannelAllocator* aChannelCallback ); + + /** + * Destructor. + */ + virtual ~CDunSignalWaiter(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Adds callback for RunL error controlling + * The callback will be called when error is detected in asynchronous + * operation + * + * @since S60 3.2 + * @param aCallback Callback to call when line status changes + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddCallback( MDunConnMon* aCallback ); + + /** + * Sets media to use for this endpoint + * + * @since S60 3.2 + * @param aComm RComm pointer to use as the endpoint + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RComm* aComm ); + + /** + * Issues request to start waiting for new data in RComm + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Stops monitoring for new data + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + +private: + + CDunSignalWaiter( MDunChannelAllocator* aChannelCallback ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + +// from base class CActive + + /** + * From CActive. + * Gets called when new data in RComm object + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +private: // data + + /** + * Callback(s) to call when notification(s) via MDunConnMon to be made + * Normally contains only one callback + */ + RPointerArray iCallbacks; + + /** + * Callback to call when notification via MDunChannelAllocator to be made + * Not own. + */ + MDunChannelAllocator* iChannelCallback; + + /** + * Current state of data monitoring: active or inactive + */ + TDunState iSignalWaiterState; + + /** + * Signals set when RComm::NotifySignalChange() request completes + */ + TUint iSignals; + + /** + * RComm object of local media side + * Not own. + */ + RComm* iComm; + + }; + +#endif // C_CDUNSIGNALWAITER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunStream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunStream.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,229 @@ +/* +* Copyright (c) 2007 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: Definitions needed for common stream functionality +* +*/ + + +#ifndef C_CDUNSTREAM_H +#define C_CDUNSTREAM_H + +#include "DunTransporter.h" + +/** + * Class for common stream functionality + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunStream ) : public CActive + { + +public: + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Adds error code to consider as "no error" to either endpoint + * + * @since S60 3.2 + * @param aError Error code to add + * @param aOperationType Type of operation for which to add error + * (read or write) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddSkippedError( TInt aError, TDunOperationType aOperationType ); + + /** + * Adds callback for line status change controlling + * The callback will be called when serious read error is detected + * + * @since S60 3.2 + * @param aCallback Callback to call when read error occurs + * @param aOperationType Type of operation for which to add error + * (read or write) + * @return Symbian error code on error, KErrNone otherwise + */ + TInt AddConnMonCallback( MDunConnMon* aCallback, + TDunOperationType aOperationType ); + + /** + * Sets buffering for this stream + * + * @since S60 3.2 + * @param aBufferPtr Pointer to the buffer + * @return KErrGeneral if buffer pointer null, KErrNone otherwise + */ + TInt SetBuffering( TPtr8* aBufferPtr ); + + /** + * Sets media to be used for this endpoint + * + * @since S60 3.2 + * @param aComm RComm pointer to use as the endpoint + * @param aMediaContext Media context to use for this endpoint, either + * local or network + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RComm* aComm, TDunMediaContext aMediaContext ); + + /** + * Sets media to be used for this endpoint + * + * @since S60 3.2 + * @param aSocket RSocket pointer to use as the endpoint + * @param aMediaContext Media context to use for this endpoint, either + * local or network + * @return Symbian error code on error, KErrNone otherwise + */ + TInt SetMedia( RSocket* aSocket, TDunMediaContext aMediaContext ); + + /** + * Gets media context + * + * @since S60 3.2 + * @param aStreamType Stream type + * @return Media context in use + */ + TDunMediaContext GetMediaContext( TDunStreamType aStreamType ); + +protected: + + CDunStream(); + + /** + * Destructor. + */ + virtual ~CDunStream(); + + /** + * Check whether an error code is severe error or not + * + * @since S60 3.2 + * @param aError Error code to check for severity + * @param aIsError ETrue if error code is error, EFalse if not error + * @return ETrue if severe error detected, EFalse if not severe error + */ + TBool ProcessErrorCondition( TInt aError, TBool& aIsError ); + +// from base class CActive + + /** + * From CActive. + * Gets called when endpoint data read/write complete + * + * @since S60 3.2 + * @return None + */ + virtual void RunL() {}; + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + virtual void DoCancel() {}; + +private: + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + +protected: // data + + /** + * Pointer to stream's data buffer: upstream or downstream + * Not own. + */ + TPtr8* iBufferPtr; + + /** + * Callback(s) to call when notification(s) via MDunConnMon to be made + * These callbacks are called on read failures + */ + RPointerArray iCallbacksR; + + /** + * Callback(s) to call when notification(s) via MDunConnMon to be made + * These callbacks are called on write failures + */ + RPointerArray iCallbacksW; + + /** + * Read length set when RSocket::RecvOneOrMore() request completes + */ + TSockXfrLength iReadLengthSocket; + + /** + * Type of current operation: read or write + */ + TDunOperationType iOperationType; + + /** + * Current state of transfer: active or inactive + */ + TDunState iTransferState; + + /** + * Direction of data transfer + * This is set after iStreamType and iOperationType are known + */ + TDunDirection iDirection; + + /** + * Array of error codes that will be skipped for read operations + */ + RArray iOkErrorsR; + + /** + * Array of error codes that will be skipped for write operations + */ + RArray iOkErrorsW; + + /** + * RComm object of network side + * Not own. + */ + RComm* iNetwork; + + /** + * RSocket object of local media side + * If this is set then iComm is not used + * Not own. + */ + RSocket* iSocket; + + /** + * RComm object of local media side + * If this is set then iSocket is not used + * Not own. + */ + RComm* iComm; + + }; + +#endif // C_CDUNSTREAM_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunTransUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunTransUtils.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,531 @@ +/* +* Copyright (c) 2006-2008 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: Utility class for other CDunTransporter classes +* +*/ + + +#ifndef C_CDUNTRANSUTILS_H +#define C_CDUNTRANSUTILS_H + +#include "DunTransporter.h" + +/** + * Notification interface class for managing channel's activity + * This class is needed to update KPSUidDialupConnStatus pub&sub key + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunActivityManager ) + { + +public: + + /** + * CDunTransporter callback: gets called when activity is detected on a + * channel + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt NotifyChannelActivity() = 0; + + /** + * CDunTransporter callback: gets called when inactivity is detected on a + * channel + * + * @since S60 3.2 + * @return KErrGeneral if mismatch in channel activity, KErrNone otherwise + */ + virtual TInt NotifyChannelInactivity() = 0; + + }; + +/** + * Utility accessor class for CDunTransporter class itself + * Shares basic functionality of CDunTransporter by simplifying it + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunTransporterUtility ) + { + +public: + + /** + * Initializes first free channel + * + * @since S60 3.2 + * @param aLocalIdNew Identifier of the new local endpoint + * @return Symbian error code on error, found index otherwise + */ + virtual TInt InitializeFirstFreeChannel( TConnId aLocalIdNew ) = 0; + + /** + * Allocates a channel by creating and setting local media independent + * objects + * This is a common method used by exported local media dependent methods + * + * @since S60 3.2 + * @param aBufferLength Buffer length selected for this channel + * @param aFirstFree Index to first free channel data + * @param aCorrection Pointer to object implementing buffer correction + * @return Symbian error code on error, KErrNone otherwise + */ + virtual void DoAllocateChannelL( + RComm* aComm, + TInt& aBufferLength, + TInt aFirstFree, + MDunBufferCorrection* aCorrection ) = 0; + + /** + * Adds connection monitor callback for either local media or network side + * by connection ID + * Error will be added to aIndex:th endpoint + * + * @since S60 3.2 + * @param aIndex Index where to add new connection monitor callback + * @param aCallback Pointer to object whose callbacks will be called + * @param aDirection Direction of operation to monitor for read/write error + * @param aSignal Receive also signal change if ETrue + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoAddConnMonCallback( TInt aIndex, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool aSignal ) = 0; + + /** + * Adds error to consider as no error condition when doing any of the four + * endpoint's read/writer operation + * Error will be added to aIndex:th endpoint + * + * @since S60 3.2 + * @param aIndex Index where to add new "no error" code + * @param aError Error code to consider as "no error" + * @param aDirection One of four data transfer endpoints where to add a + * skipped error code + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoAddSkippedError( TInt aIndex, + TInt aError, + TDunDirection aDirection ) = 0; + + /** + * Issues transfers requests for aIndex:th transfer objects + * + * @since S60 3.2 + * @param aIndex Index to transfer objects that will be activated + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoIssueTransferRequests( TInt aIndex ) = 0; + + /** + * Stops transfers for aIndex:th transfer objects + * + * @since S60 3.2 + * @param aIndex Index to transfer objects that will be stopped + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoStopTransfers( TInt aIndex ) = 0; + + /** + * Free aIndex:th channel's objects + * + * @since S60 3.2 + * @param aIndex Index of channel to free + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoFreeChannel( TInt aIndex ) = 0; + + }; + +/** + * Utility accessor class for other than CDunTransporter classes + * Basically a collection of miscellaneous helper methods + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunTransporterUtilityAux ) + { + +public: + + /** + * Gets local ID counterpart of a network ID + * + * @since S60 3.2 + * @param aComm Network ID to search for + * @return Null if ID not found, otherwise found ID + */ + virtual TConnId GetLocalId( RComm* aComm ) = 0; + + /** + * Notifies when serious read/write error is detected on a connection + * + * @since S60 3.2 + * @param aComm Non-null if error on RComm + * @param aSocket Non-null if error on RSocket + * @param aConnReason Reason of connection error + * @param aCallbacks Callbacks to notify on connections error + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt DoNotifyConnectionNotOk( + RComm* aComm, + RSocket* aSocket, + TDunConnectionReason& aConnReason, + RPointerArray& aCallbacks) = 0; + + }; + +/** + * Utility class for other CDunTransporter classes + * This class implements basic functionality that is shared by different + * CDunTransporter classes, also for simplifying CDunTransporter itself + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunTransUtils ) : public CBase, + public MDunActivityManager, + public MDunTransporterUtility, + public MDunTransporterUtilityAux + { + +public: + + /** + * Two-phased constructor. + * @param aParent Parent class owning this friend class (CDunTransporter) + * @param aPluginManager Callback to call when notification via + * MDunPluginManager to be made + * @return Instance of self + */ + static CDunTransUtils* NewL( CDunTransporter& aParent, + MDunPluginManager* aPluginManager ); + + /** + * Destructor. + */ + virtual ~CDunTransUtils(); + +private: + + CDunTransUtils( CDunTransporter& aParent, + MDunPluginManager* aPluginManager ); + + void ConstructL(); + + /** + * Manages service advertisement status changes + * + * @since S60 5.0 + * @param aAdvertise New advertisement status + * @param aCreation ETrue if channel creation + * EFalse if channel free + * @return None + */ + void ManageAdvertisementStatusChange( TBool aAdvertise, + TBool aCreation=EFalse ); + + /** + * Creates empty channel data + * + * @since S60 3.2 + * @param aChannel Channel data to set empty + * @return None + */ + void CreateEmptyChannelData( TDunChannelData& aChannel ); + + /** + * Creates new buffer if source buffer defined, otherwise already existing + * buffer will be used + * + * @since S60 3.2 + * @param aSrcBuffer Source buffer + * @param aSrcPtr Pointer to source buffer + * @param aDstBuffer Destination buffer + * @param aDstPtr Pointer to destination buffer + * @param aItemsInCs Items in cleanup stack, will be incremented if + * necessary + * @return None + */ + void DoCreateBufferLC( TUint8* aSrcBuffer, + TPtr8* aSrcPtr, + TUint8*& aDstBuffer, + TPtr8*& aDstPtr, + TInt aBufferLength, + TInt& aItemsInCs ); + + /** + * Creates new signal copy object if source defined, otherwise + * already existing will be used + * + * @since S60 3.2 + * @param aSrcSignalCopy Source signal copy object + * @param aDstSignalCopy Destination signal copy object + * @param aItemsInCs Items in cleanup stack, will be incremented if + * necessary + * @return None + */ + void DoCreateSignalCopyLC( CDunSignalCopy* aSrcSignalCopy, + CDunSignalCopy*& aDstSignalCopy, + TInt& aItemsInCs ); + + /** + * Creates new signal notify object if source defined, otherwise + * already existing will be used + * + * @since S60 3.2 + * @param aSrcSignalNotify Source signal notify object + * @param aDstSignalNotify Destination signal notify object + * @param aItemsInCs Items in cleanup stack, will be incremented if + * necessary + * @return None + */ + void DoCreateSignalNotifyLC( CDunSignalNotify* aSrcSignalNotify, + CDunSignalNotify*& aDstSignalNotify, + TInt& aItemsInCs ); + + /** + * Creates transfer objects for reader and writer if sources defined, + * otherwise already existing ones will be used + * + * @since S60 3.2 + * @param aSrcReader Source reader object + * @param aDstReader Destination reader object + * @param aItemsInCs Items in cleanup stack, will be incremented if + * necessary + * @return None + */ + void DoCreateUpTransferObjectL( CDunUpstream* aSrcReader, + CDunUpstream*& aDstReader, + TInt& aItemsInCs ); + + /** + * Creates transfer objects for reader and writer if sources defined, + * otherwise already existing ones will be used + * + * @since S60 3.2 + * @param aSrcReader Source reader object + * @param aDstReader Destination reader object + * @param aItemsInCs Items in cleanup stack, will be incremented if + * necessary + * @return None + */ + void DoCreateDownTransferObjectL( CDunDownstream* aSrcReader, + CDunDownstream*& aDstReader, + TInt& aItemsInCs ); + + /** + * Resets/frees network data of aIndex:th channel + * + * @since S60 3.2 + * @param aIndex Index of channel to reset/free + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DeleteOneNetworkData( TInt aIndex ); + + /** + * Deletes local data of aIndex:th channel + * + * @since S60 3.2 + * @param aIndex Index of channel to delete + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DeleteOneLocalData( TInt aIndex ); + + /** + * Deletes buffering objects of aIndex:th channel + * + * @since S60 3.2 + * @param aIndex Index of channel to delete + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DeleteBuffering( TInt aIndex ); + +// from base class MDunTransporterUtility + + /** + * From MDunTransporterUtility. + * Initializes first free channel + * + * @since S60 3.2 + * @param aLocalIdNew Identifier of the new local endpoint + * @return Symbian error code on error, found index otherwise + */ + TInt InitializeFirstFreeChannel( TConnId aLocalIdNew ); + + /** + * From MDunTransporterUtility. + * Allocates a channel by creating and setting local media independent + * objects + * This is a common method used by exported local media dependent methods + * + * @since S60 3.2 + * @param aBufferLength Buffer length selected for this channel + * @param aFirstFree Index to first free channel data + * @param aCorrection Pointer to object implementing buffer correction + * @return Symbian error code on error, KErrNone otherwise + */ + void DoAllocateChannelL( RComm* aComm, + TInt& aBufferLength, + TInt aFirstFree, + MDunBufferCorrection* aCorrection ); + + /** + * From MDunTransporterUtility. + * Adds connection monitor callback for either local media or network side + * by connection ID + * Connection monitor will be added to aIndex:th endpoint + * + * @since S60 3.2 + * @param aIndex Index where to add new connection monitor callback + * @param aCallback Pointer to object whose callbacks will be called + * @param aDirection Direction of operation to monitor for read/write error + * @param aSignal Receive also signal change if ETrue + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoAddConnMonCallback( TInt aIndex, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool aSignal ); + + /** + * From MDunTransporterUtility. + * Adds error to consider as no error condition when doing any of the four + * endpoint's read/writer operation + * Error will be added to aIndex:th endpoint + * + * @since S60 3.2 + * @param aIndex Index where to add new "no error" code + * @param aError Error code to consider as "no error" + * @param aDirection One of four data transfer endpoints where to add a + * skipped error code + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoAddSkippedError( TInt aIndex, + TInt aError, + TDunDirection aDirection ); + + /** + * From MDunTransporterUtility. + * Issues transfers requests for aIndex:th transfer objects + * + * @since S60 3.2 + * @param aIndex Index to transfer objects that will be activated + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoIssueTransferRequests( TInt aIndex ); + + /** + * From MDunTransporterUtility. + * Stops transfers for aIndex:th transfer objects + * + * @since S60 3.2 + * @param aIndex Index to transfer objects that will be stopped + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoStopTransfers( TInt aIndex ); + + /** + * From MDunTransporterUtility. + * Free aIndex:th channel's objects + * + * @since S60 3.2 + * @param aIndex Index of channel to free + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoFreeChannel( TInt aIndex ); + +// from base class MDunTransporterUtilityAux + + /** + * From MDunTransporterUtilityAux. + * Gets local ID counterpart of a network ID + * + * @since S60 3.2 + * @param aComm Network ID to search for + * @return Null if ID not found, otherwise found ID + */ + TConnId GetLocalId( RComm* aComm ); + + /** + * From MDunTransporterUtilityAux. + * Notifies when serious read/write error is detected on a connection + * + * @since S60 3.2 + * @param aComm Non-null if error on RComm + * @param aSocket Non-null if error on RSocket + * @param aConnReason Reason of connection error + * @param aCallbacks Callbacks to notify on connections error + * @return Symbian error code on error, KErrNone otherwise + */ + TInt DoNotifyConnectionNotOk( + RComm* aComm, + RSocket* aSocket, + TDunConnectionReason& aConnReason, + RPointerArray& aCallbacks); + +// from base class MDunActivityManager + + /** + * From MDunActivityManager. + * Notifies about activity on a channel + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyChannelActivity(); + + /** + * From MDunActivityManager. + * Notifies about inactivity on a channel + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt NotifyChannelInactivity(); + +private: // data + + /** + * Parent class owning this friend class (CDunTransporter) + */ + CDunTransporter& iParent; + + /** + * Array of abstractions of each "channel" (from parent iParent) + * One TDunChannelData entry contains objects needed for one channel + */ + RArray& iChannelData; + + /** + * Array of service advertisement data for each plugin (from parent iParent) + * One TDunServAdvData entry contains objects needed for one plugin + */ + RArray& iServAdvData; + + /** + * Callback to call when notification via MDunPluginManager to be made + * Not own. + */ + MDunPluginManager* iPluginManager; + + }; + +#endif // C_CDUNTRANSUTILS_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunTransporter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunTransporter.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,800 @@ +/* +* Copyright (c) 2006-2008 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: Managing abstracted "channels" of network side communication +* +*/ + + +#ifndef C_CDUNTRANSPORTER_H +#define C_CDUNTRANSPORTER_H + +#include +#ifdef PRJ_USE_NETWORK_STUBS +#include +#else +#include +#endif +#include +#include "DunNetDataport.h" + +typedef TAny* TConnId; // supported now: RSocket*, RComm* + +const TInt KDunStreamTypeMask = 0x02; // 10 +const TInt KDunOperationTypeMask = 0x01; // 01 + +enum TDunOperationType + { + EDunOperationTypeUndefined = KErrNotFound, + EDunOperationTypeRead = 0x00, // 00 + EDunOperationTypeWrite = 0x01 // 01 + }; + +enum TDunMediaContext + { + EDunMediaContextUndefined = KErrNotFound, + EDunMediaContextNetwork = 0, + EDunMediaContextLocal + }; + +enum TDunMedia + { + EDunMediaUndefined = KErrNotFound, + EDunMediaNetwork = 0, + EDunMediaRComm, + EDunMediaRSocket + }; + +enum TDunDirection + { + EDunDirectionUndefined = KErrNotFound, + EDunReaderUpstream = 0x00, // 00 + EDunWriterUpstream = 0x01, // 01 + EDunReaderDownstream = 0x02, // 10 + EDunWriterDownstream = 0x03 // 11 + }; + +enum TDunStreamType + { + EDunStreamTypeUndefined = KErrNotFound, + EDunStreamTypeUpstream = 0x00, // 00 + EDunStreamTypeDownstream = 0x02 // 10 + }; + +enum TDunState + { + EDunStateIdle, + EDunStateTransferring, // Transporter state for data tranfer (up/downstream) + EDunStateSignalCopy, // Transporter state for signal copying (RComm) + EDunStateSignalNotify, // Transporter state for signal notifying (RSocket) + EDunStateDataWaiting, // Transporter state for data waiting + EDunStateSignalWaiting, // Transporter state for signal waiting + EDunStateDataPushing, // Transporter state for data pushing (multiplexer) + EDunStateCallListen, // Transporter state for call state listening + EDunStateAtCmdHandling, // ATEXT state for AT command handling + EDunStateAtCmdPushing, // ATEXT state for AT command reply pushing + EDunStateAtCmdEchoing, // ATEXT state for AT command character echoing (text mode) + EDunStateAtUrcHandling, // ATEXT state for URC handling + EDunStateModeListening, // ATEXT state for mode change listening + EDunStateEcomListening, // ATEXT state for ECOM change listening + EDunStateNvramListening, // ATEXT state for NVRAM change listening + EDunStateUiNoting // Transporter state for UI note showing + }; + +enum TDunReasonType + { + EDunReasonTypeSignal, + EDunReasonTypeRW, + EDunReasonTypeRunL + }; + +class CDunChanMan; +class MDunPluginManager; +class MDunTransporterUtility; +class CDunTransUtils; +class CDunConnWaiter; +class TDunWaiterData; +class CDunUpstream; +class CDunDownstream; +class CDunSignalCopy; +class CDunSignalNotify; +class CDunNoteHandler; + +/** + * Class used for reporting connection error's reason and signal changes + * of network side + * Connection error can happen in read/write and RunL error cases + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunConnectionReason ) + { + +public: + + /** + * Reason type of error; either R/W or RunL + * or signal (network side) + * Set in all cases (signal, R/W, RunL) + */ + TDunReasonType iReasonType; + + /** + * Context of media where error occurred: network or local + * Set in all error cases (signal, R/W, RunL) + */ + TDunMediaContext iContext; + + /** + * Signal type of network side + * Set if signal case, 0 otherwise + */ + TUint iSignalType; + + /** + * Is signal high or low of network side + * Set if signal case, 0 otherwise + */ + TBool iSignalHigh; + + /** + * Direction of data transfer + * Set if R/W case, EDunDirectionUndefined otherwise + */ + TDunDirection iDirection; + + /** + * Error code of failure + * Set if R/W or RunL case, KErrNone otherwise + */ + TInt iErrorCode; + + }; + +/** + * Notification interface class to report line status + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunConnMon ) + { + +public: + + /** + * Gets called when line status changes or when any type of error is + * detected + * + * @since S60 3.2 + * @param aConnId Connection ID for callback + * @param aConnReason Reason for progress change + * @return None + */ + virtual void NotifyProgressChangeL( + TConnId aConnId, + TDunConnectionReason aConnReason ) = 0; + + }; + +/** + * Notification interface class to report service advertisement status changes + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunServAdvMon ) + { + +public: + + /** + * Gets called when advertisement status changes to start + * + * @since S60 5.0 + * @param aCreation ETrue if channel creation + * EFalse if channel free + * @return None + */ + virtual void NotifyAdvertisementStart( TBool aCreation ) = 0; + + /** + * Gets called when advertisement status changes to end + * + * @since S60 5.0 + * @return None + */ + virtual void NotifyAdvertisementEnd() = 0; + + }; + +/** + * Notification interface class for buffer correction + * This interface makes possible to change suggested local media buffer size + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunBufferCorrection ) + { + +public: + + /** + * Notifies about request to change local media's buffer size + * + * @since S60 3.2 + * @param aLength Suggested buffer length that will be used if no + * correction done + * @return New (corrected) buffer length + */ + virtual TInt NotifyBufferCorrection( TInt aLength ) = 0; + + }; + +/** + * Class to store data needed for each separate "channel" + * One TDunChannelData data contains objects needed for one channel + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunChannelData ) + { + +public: + + /** + * RComm object of network side + * Not own. + */ + RComm* iNetwork; + + /** + * RComm object of local media side + * If this is set then iSocket is not used + * Not own. + */ + RComm* iComm; + + /** + * RSocket object of local media side + * If this is set then iComm is not used + * Not own. + */ + RSocket* iSocket; + + /** + * Name for the channel + */ + HBufC8* iChannelName; + + /** + * Upstream read/write object + * Reads data from local media and writes to network + * Not own. + */ + CDunUpstream* iUpstreamRW; + + /** + * Downstream read/write object + * Reads data from network and writes to local media + * Not own. + */ + CDunDownstream* iDownstreamRW; + + /** + * Upstream buffer (Local -> Network) + * Not own. + */ + TUint8* iBufferUpstream; + + /** + * Downstream buffer (Local <- Network) + * Not own. + */ + TUint8* iBufferDownstream; + + /** + * Pointer to upstream's buffer (Local -> Network) + * Not own. + */ + TPtr8* iBufferUpPtr; + + /** + * Pointer to downstream's buffer (Local <- Network) + * Not own. + */ + TPtr8* iBufferDownPtr; + + /** + * Upstream signal copy + * If this is set then iSignalNotify is not used + * Not own. + */ + CDunSignalCopy* iUpstreamSignalCopy; + + /** + * Downstream signal copy + * If this is set then iSignalNotify is not used + * Not own. + */ + CDunSignalCopy* iDownstreamSignalCopy; + + /** + * Signal notifier + * If this is set then the following are not used: + * iUpstreamSignalCopy, iDownstreamSignalCopy + * Not own. + */ + CDunSignalNotify* iSignalNotify; + + /** + * Owner's UID + */ + TUid iOwnerUid; + + /** + * Flag that indicates whether this channel is allocated or not + */ + TBool iChannelInUse; + + }; + +/** + * Class to store data needed for each plugin service advertisement + * One TDunChannelData data contains objects needed for one plugin + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunServAdvData ) + { + +public: + + /** + * Owner's UID for which to have the monitor + */ + TUid iOwnerUid; + + /** + * Service advertisement monitor + * Not own. + */ + MDunServAdvMon* iServAdvMon; + + }; + +/** + * Class for managing abstracted "channels" of network side communication + * This is main class to be used by other components + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunTransporter ) : public CBase + { + + friend class CDunTransUtils; + friend class CDunChanMan; + +public: + + /** + * Two-phased constructor. + * @param aPluginManager Callback to call when notification via + * MDunPluginManager to be made + * @param aNumOfMaxChannels Number of wanted maximum channels + * (can be omitted with 0) + * @return Instance of self + */ + IMPORT_C static CDunTransporter* NewL( MDunPluginManager* aPluginManager, + TInt aNumOfMaxChannels=0 ); + + /** + * Destructor. + */ + virtual ~CDunTransporter(); + + /** + * Number of allocated channels, is the same number as allocated and active + * (non-waiting) channels + * + * @since S60 3.2 + * @return Number of allocated channels + */ + IMPORT_C TInt NumberOfAllocatedChannels(); + + /** + * Number of waiting channels, is the same number as allocated and inactive + * (waiting) channels + * + * @since S60 3.2 + * @return Number of waiting channels + */ + IMPORT_C TInt NumberOfWaitingChannels(); + + /** + * Gets the number of allocated channels by owner UID, is the same number + * as allocated and active (non-waiting) channels + * + * @since S60 5.0 + * @param aOwnerUid UID of the channel owner + * @return Number of allocated channels by UID + */ + IMPORT_C TInt GetNumberOfAllocatedChannelsByUid( TUid aOwnerUid ); + + /** + * Gets the number of waiting channels by owner UID, is the same number + * as allocated and inactive (waiting) channels + * + * @since S60 5.0 + * @param aOwnerUid UID of the channel owner + * @return Number of waiting channels by UID + */ + IMPORT_C TInt GetNumberOfWaitingChannelsByUid( TUid aOwnerUid ); + + /** + * Service advertisement status + * + * @since S60 5.0 + * @return ETrue if OK to advertise, EFalse otherwise + */ + IMPORT_C TBool AdvertisementStatus(); + + /** + * Creates a channel of communication between local media (aComm) and + * network + * Local media object pointer also works as a connection ID for the + * allocated channel + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @param aOwnerUid UID of the channel owner + * @param aName Name for the channel + * @param aEnqueuedFail ETrue if enqueued failure, EFalse otherwise + * @param aCorrection Pointer to object implementing buffer correction + * @return None + */ + IMPORT_C void AllocateChannelL( + RComm* aComm, + TUid aOwnerUid, + const TDesC8& aName, + TBool aEnqueuedFail, + MDunBufferCorrection* aCorrection=NULL ); + + /** + * Creates a channel of communication between local media (aSocket) and + * network + * Local media object pointer also works as a connection ID for the + * allocated channel + * + * @since S60 3.2 + * @param aSocket Pointer to opened local media RSocket ID object + * @param aOwnerUid UID of the channel owner + * @param aName Name for the channel + * @param aEnqueuedFail ETrue if enqueued failure, EFalse otherwise + * @param aNoFreeChans ETrue if no free channels, EFalse otherwise + * @return None + */ + IMPORT_C void AllocateChannelL( + RSocket* aSocket, + TUid aOwnerUid, + const TDesC8& aName, + TBool aEnqueuedFail, + TBool& aNoFreeChans ); + + /** + * Frees an allocated channel by local media (aComm) connection ID + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt FreeChannel( RComm* aComm ); + + /** + * Frees an allocated channel by local media (aSocket) connection ID + * + * @since S60 3.2 + * @param aSocket Pointer to opened local media RSocket ID object + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt FreeChannel( RSocket* aSocket ); + + /** + * Issues transfer requests for all transfer objects by local media + * (aComm) connection ID + * This will cause the Transporter by be ready for transferring data + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @return None + */ + IMPORT_C void IssueTransferRequestsL( RComm* aComm ); + + /** + * Issues transfer requests for all transfer objects by local media + * (aSocket) connection ID + * This will cause the Transporter by be ready for transferring data + * + * @since S60 3.2 + * @param aSocket Pointer to opened local media RSocket ID object + * @return None + */ + IMPORT_C void IssueTransferRequestsL( RSocket* aSocket ); + + /** + * Stops transfers for all transfer objects by local media (aComm) + * connection ID + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt StopTransfers( RComm* aComm ); + + /** + * Stops transfers for all transfer objects by local media (aSocket) + * connection ID + * + * @since S60 3.2 + * @param aSocket Pointer to opened local media RSocket ID object + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt StopTransfers( RSocket* aSocket ); + + /** + * Adds connection monitor callback for either local media or network side + * by connection ID + * Callbacks will be called read/write error is detected during endpoint + * operation + * + * @since S60 3.2 + * @param aComm Pointer to opened local media RComm ID object + * @param aCallback Pointer to object whose callbacks will be called + * @param aDirection Direction of operation to monitor for read/write error + * @param aSignal ETrue if also signal notification wanted from network side + * @return None + */ + IMPORT_C void AddConnMonCallbackL( RComm* aComm, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool aSignal ); + + /** + * Adds connection monitor callback for either local media or network side + * by connection ID + * Callbacks will be called when line status switches to high or low + * + * @since S60 3.2 + * @param aSocket Pointer to opened local media RSocket ID object + * @param aCallback Pointer to object whose callbacks will be called + * @param aDirection Direction of operation to monitor for read/write error + * @param aSignal ETrue if also signal notification wanted from network side + * @return None + */ + IMPORT_C void AddConnMonCallbackL( RSocket* aSocket, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool aSignal ); + + /** + * Adds error to consider as no error condition when doing any of the four + * endpoint's read/writer operation + * + * @since S60 3.2 + * @param aError Error code to consider as "no error" + * @param aComm Pointer to opened local media RComm ID object + * @param aDirection One of four data transfer endpoints where to add a + * skipped error code + * @return None + */ + IMPORT_C void AddSkippedErrorL( TInt aError, + RComm* aComm, + TDunDirection aDirection ); + + /** + * Adds error to consider as no error condition when doing any of the four + * endpoint's read/writer operation + * + * @since S60 3.2 + * @param aError Error code to consider as "no error" + * @param aSocket Pointer to opened local media RSocket ID object + * @param aDirection One of four data transfer endpoints where to add a + * skipped error code + * @return None + */ + IMPORT_C void AddSkippedErrorL( TInt aError, + RSocket* aSocket, + TDunDirection aDirection ); + + /** + * Sets service advertisement monitor callback by owner UID + * Callbacks will be called when advertisement status changes. + * The callbacks are updated with every successfully completed + * channel allocation/free (and allocation failure) so it is recommended + * to call this method after AllocateChannelL(). + * + * @since S60 5.0 + * @param aOwnerUid Owner's UID for which to have the monitor + * @param aCallback Pointer to object whose callbacks will be called + * @return None + */ + IMPORT_C void SetAdvertisementMonitorL( TUid aOwnerUid, + MDunServAdvMon* aCallback ); + + /** + * Frees service advertisement monitor callback by owner UID + * + * @since S60 5.0 + * @param aOwnerUid Owner's UID for which to have the monitor + * @param aCallback Pointer to object whose callbacks will be called + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C TInt FreeAdvertisementMonitor( TUid aOwnerUid, + MDunServAdvMon* aCallback ); + +private: + + CDunTransporter( MDunPluginManager* aPluginManager, + TInt aNumOfMaxChannels ); + + void ConstructL(); + + /** + * Initializes the transporter, must be called as the first operation + * + * @since S60 3.2 + * @return KErrAlreadyExists = already initialized, + * KErrGeneral = network initialization failed, + * KErrNone otherwise + */ + TInt InitializeL(); + + /** + * UnInitializes the transporter, can be called as the last operation + * + * @since S60 3.2 + * @return None + */ + void UnInitialize(); + + /** + * Initialize the transporter + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt InitializeOnDemand(); + + /** + * UnInitialize the transporter + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt UnInitializeOnDemand(); + + /** + * Returns index of media for connection ID + * + * @since S60 3.2 + * @param aConnId Connection ID for media + * @param aMediaContext Context of media to search for; either local or + * network + * @return Symbian error code on error, found index otherwise + */ + TInt GetMediaIndex( TConnId aConnId, + TDunMediaContext aMediaContext=EDunMediaContextLocal ); + + /** + * Returns index of media for connection ID + * + * @since S60 3.2 + * @param aConnId Connection ID for media + * @param aMediaContext Context of media to search for; either local or + * network + * @return Found index + */ + TInt GetMediaIndexL( TConnId aConnId, + TDunMediaContext aMediaContext=EDunMediaContextLocal ); + + /** + * Checks initialization and RSubSessionBase() handle + * + * @since S60 3.2 + * @param aConnId Connection ID for media + * @return KErrNotReady if not initialized, KErrBadHandle if no handle + */ + TInt CheckInitAndHandle( TConnId aConnId ); + + /** + * Deletes own internal data + * + * @since S60 3.2 + * @return None + */ + void DeleteTransporter(); + +private: // data + + /** + * Pointer to common utility class + * Own. + */ + MDunTransporterUtility* iUtility; + + /** + * Pointer to RComm channel manager class + * Own. + */ + CDunChanMan* iChanMan; + + /** + * Pointer to note handler class + * Own. + */ + CDunNoteHandler* iNoteHandler; + + /** + * Array of abstractions of each "channel" + * One TDunChannelData entry contains objects needed for one channel + */ + RArray iChannelData; + + /** + * Array of service advertisement data for each plugin + * One TDunServAdvData entry contains objects needed for one plugin + */ + RArray iServAdvData; + + /** + * Callback to call when notification via MDunPluginManager to be made + * Not own. + */ + MDunPluginManager* iPluginManager; + + /** + * Number of channels that are active + * Used for updating KPSUidDialupConnStatus Pub&Sub key + */ + TInt iActiveChannels; + + /** + * Number of wanted maximum channels (can be omitted with 0) + * Used for initialization of this class + */ + TInt iNumOfMaxChannels; + + /** + * Indicates whether this class is initialized or not + */ + TBool iInitialized; + + /** + * Indicates whether or not it is OK to advertise services + */ + TBool iAdvertise; + + /** + * Instance of network side abstraction + * Own. + */ + CDunNetDataport* iNetwork; + + }; + +#endif // C_CDUNTRANSPORTER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunUpstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunUpstream.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,347 @@ +/* +* Copyright (c) 2007-2010 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: Definitions needed for one "stream" of CDunTransporter +* +*/ + + +#ifndef C_CDUNUPSTREAM_H +#define C_CDUNUPSTREAM_H + +#include "DunTransUtils.h" +#include "DunStream.h" +#include "DunAtCmdHandler.h" +#include "DunAtCmdEchoer.h" +#include "DunDataPusher.h" + +class MDunCmdModeMonitor; + +/** + * Class used for storing data related to activity monitoring + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunActivityData ) + { + +public: + + /** + * Callback to call when notification via MDunActivityManager to be made + * Not own. + */ + MDunActivityManager* iActivityCallback; + + /** + * Flag for data read activity's MDunActivityManager callback + * This flag is needed to prevent multiple notifications of same activity + */ + TBool iDataRead; + + /** + * Used as a flag for the first notification of read activity + * This flag is needed to keep MDunActivityManager notifications in sync + * (inactivity notification done only if activity notification done first) + */ + TBool iNotified; + + }; + +/** + * Class used for storing data related to AT command parsing + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( TDunParseData ) + { + +public: + + /** + * Flag for command mode notifier's MDunCmdModeMonitor callback + * This flag is needed to mark command mode start/end for parse start/end + */ + TBool iDataMode; + + /** + * AT Command handler. + */ + CDunAtCmdHandler* iAtCmdHandler; + + }; + +/** + * Accessor class for AT command handling related functionality + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( MDunAtCmdHandler ) + { + +public: + + /** + * Starts URC message handling + * This is an accessor for CDunDownstream's StartStream() + * + * @since S60 5.0 + * @return Symbian error code on error, KErrNone otherwise + */ + virtual TInt StartUrc() = 0; + + /** + * Stops AT command handling downstream related activity (also URC) + * This is an accessor for CDunDownstream's Stop() + * + * @since S60 3.2 + * @return None + */ + virtual TInt StopAtCmdHandling() = 0; + + }; + +/** + * Class for data transmission of one "stream" from local media to network + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunUpstream ) : public CDunStream, + public MDunAtCmdHandler, + public MDunCmdModeMonitor, + public MDunAtCmdStatusReporter, + public MDunAtCmdEchoer + { + +public: + + /** + * Two-phased constructor. + * @param aUtility Pointer to common utility class + * @return Instance of self + */ + static CDunUpstream* NewL( MDunTransporterUtilityAux* aUtility ); + + /** + * Destructor. + */ + virtual ~CDunUpstream(); + + /** + * Resets data to initial values + * + * @since S60 3.2 + * @return None + */ + void ResetData(); + + /** + * Sets activity callback for this stream + * + * @since S60 3.2 + * @param aActivityCallback Pointer to activity callback + * @return KErrGeneral if callback null, KErrNone otherwise + */ + TInt SetActivityCallback( MDunActivityManager* aActivityCallback ); + + /** + * Initializes this stream for AT command notifications + * + * @since S60 5.0 + * @param aStreamCallback Pointer to stream callback + * @param aConnectionName Connection identifier name + * @param aCallbackUp Upstream callback to call when command mode starts or + * ends + * @param aCallbackDown Downstream callback to call when command mode starts + * or ends + * @return Symbian error code on error, KErrNone otherwise + */ + TInt InitializeForAtParsing( MDunStreamManipulator* aStreamCallback, + const TDesC8* aConnectionName, + MDunCmdModeMonitor* aCallbackUp, + MDunCmdModeMonitor* aCallbackDown ); + + /** + * Starts upstream by issuing read request + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StartStream(); + + /** + * Stops transfer for read & write endpoints + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt Stop(); + + /** + * Data transmission state (if read completed) + * + * @since S60 3.2 + * @return ETrue if data successfully read, EFalse otherwise + */ + TBool DataReadStatus(); + +private: + + CDunUpstream( MDunTransporterUtilityAux* aUtility ); + + void ConstructL(); + + /** + * Initializes this class + * + * @since S60 3.2 + * @return None + */ + void Initialize(); + + /** + * Issues transfer request for this stream + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt IssueRequest(); + + /** + * Processes data that was read + * + * @since S60 5.0 + * @return ETrue if request to be reissued, EFalse otherwise + */ + TBool ProcessReadData(); + + /** + * Manages activity in a channel + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt ManageChannelActivity(); + +// from base class CActive + + /** + * From CActive. + * Gets called when endpoint data read/write complete + * + * @since S60 3.2 + * @return None + */ + void RunL(); + + /** + * From CActive. + * Gets called on cancel + * + * @since S60 3.2 + * @return None + */ + void DoCancel(); + +// from base class MDunAtCmdStatusReporter + + /** + * Notifies about parser's need to get more data + * + * @since TB9.2 + * @return None + */ + void NotifyParserNeedsMoreData(); + + /** + * Notifies about editor mode reply + * + * @since TB9.2 + * @param aStart ETrue if start of editor mode, EFalse otherwise + * @return Symbian error code on error, KErrNone otherwise + */ + void NotifyEditorModeReply( TBool aStart ); + +// from base class MDunAtCmdHandler + + /** + * Starts URC message handling + * This is an accessor for CDunDownstream's StartStream() + * + * @since S60 5.0 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StartUrc(); + + /** + * Stops AT command handling downstream related activity (also URC) + * This is an accessor for CDunDownstream's Stop() + * + * @since S60 3.2 + * @return Symbian error code on error, KErrNone otherwise + */ + TInt StopAtCmdHandling(); + +// from base class MDunCmdModeMonitor + + /** + * Notifies about command mode start + * + * @since S60 5.0 + * @return None + */ + void NotifyCommandModeStart(); + + /** + * Notifies about command mode end + * + * @since S60 5.0 + * @return None + */ + void NotifyCommandModeEnd(); + +// from base class MDunAtCmdEchoer + + /** + * Notifies about completed echo in text mode + * + * @since TB9.2 + * @return None + */ + void NotifyEchoComplete(); + +private: // data + + /** + * Pointer to common utility class + * Not own. + */ + MDunTransporterUtilityAux* iUtility; + + /** + * Data related to activity monitoring + */ + TDunActivityData iActivityData; + + /** + * Data related to AT command parsing + */ + TDunParseData iParseData; + + }; + +#endif // C_CDUNUPSTREAM_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/inc/DunUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/inc/DunUtils.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2006-2008 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: Common utility methods for DUN +* +*/ + + +#ifndef C_CDUNUTILS_H +#define C_CDUNUTILS_H + +#ifdef PRJ_USE_NETWORK_STUBS +#include +#else +#include +#endif +#include + +/** + * This class contains common utility methods for DUN + * + * @lib dunutils.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CDunUtils ) : public CBase + { + +public: + + /** + * Connects to comms server + * + * @since S60 3.2 + * @param aCommServer Comms server where to connect + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C static TInt ConnectCommsServer( RCommServ& aCommServer ); + + /** + * Sets RComm buffer length + * + * @since S60 3.2 + * @param aComm RComm object whose length to set + * @param aLength Length to set to aComm + * @return Symbian error code on error, KErrNone otherwise + */ + IMPORT_C static TInt SetRCommBufferLength( RComm& aComm, TInt aLength ); + + }; + +#endif // C_CDUNUTILS_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunChanMan.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunChanMan.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,577 @@ +/* +* Copyright (c) 2006-2008 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: RComm channel management related functionality (waiter) +* +*/ + + +#include "DunSignalWaiter.h" +#include "DunDataWaiter.h" +#include "DunUpstream.h" +#include "DunDownstream.h" +#include "DunSignalCopy.h" +#include "DunChanMan.h" +#include "DunUtils.h" +#include "DunDebug.h" +#include "DunPlugin.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunChanMan* CDunChanMan::NewL( CDunTransporter& aParent, + MDunTransporterUtility* aUtility, + MDunTransporterUtilityAux* aUtilityAux, + MDunPluginManager* aPluginManager ) + { + CDunChanMan* self = new (ELeave) CDunChanMan( aParent, + aUtility, + aUtilityAux, + aPluginManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunChanMan::~CDunChanMan() + { + FTRACE(FPrint( _L("CDunChanMan::~CDunChanMan()") )); + ResetData(); + FTRACE(FPrint( _L("CDunChanMan::~CDunChanMan() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunChanMan::ResetData() + { + FTRACE(FPrint( _L("CDunChanMan::ResetData()") )); + // APIs affecting this: + // AddConnWaiterL() + // IssueConnWaiterRequest() + TInt i; + TInt count = iWaiterData.Count(); + for ( i=0; iSetMedia( aComm ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunChanMan::AddConnWaiterL() (ERROR) complete" ))); + User::Leave( retTemp ); + } + CDunDataWaiter* dataWaiter = CDunDataWaiter::NewL( this ); + CleanupStack::PushL( dataWaiter ); + retTemp = dataWaiter->SetMedia( aComm ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunChanMan::AddConnWaiterL() (ERROR) complete" ))); + User::Leave( retTemp ); + } + TDunWaiterData waiterData; + waiterData.iComm = aComm; + waiterData.iChannelName = HBufC8::NewMaxL( aName.Length() ); + TPtr8 chanNamePtr = waiterData.iChannelName->Des(); + chanNamePtr.Copy( aName ); + waiterData.iSignalWaiter = signalWaiter; + waiterData.iDataWaiter = dataWaiter; + waiterData.iCorrection = aCorrection; + waiterData.iEnqueuedFail = aEnqueuedFail; + waiterData.iOwnerUid = aOwnerUid; + iWaiterData.AppendL( waiterData ); + CleanupStack::Pop( dataWaiter ); + CleanupStack::Pop( signalWaiter ); + FTRACE(FPrint( _L("CDunChanMan::AddConnWaiterL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Removes existing waiter from connection waiter array +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::RemoveConnWaiter( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunChanMan::RemoveConnWaiter()" ))); + TInt i; + for ( i=iWaiterData.Count()-1; i>=0; i-- ) + { + TDunWaiterData& waiterData = iWaiterData[i]; + if ( waiterData.iComm == aComm ) + { + DeleteWaiters( i ); + iWaiterData.Remove( i ); + FTRACE(FPrint( _L("CDunChanMan::RemoveConnWaiter() complete" ))); + return KErrNone; + } + } + FTRACE(FPrint( _L("CDunChanMan::RemoveConnWaiter() (not found) complete" ))); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Makes CDunConnWaiter ready to detect new data +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::IssueConnWaiterRequest( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunChanMan::IssueConnWaiterRequest()" ))); + TInt i; + TInt count = iWaiterData.Count(); + for ( i=0; iIssueRequest(); + waiterData.iDataWaiter->IssueRequest(); + FTRACE(FPrint( _L("CDunChanMan::IssueConnWaiterRequest() complete" ))); + return KErrNone; + } + } + FTRACE(FPrint( _L("CDunChanMan::IssueConnWaiterRequest() (not found) complete" ))); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Stops CDunConnWaiter to detect new data +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::StopConnWaiter( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunChanMan::StopConnWaiter()" ))); + TInt i; + TInt count = iWaiterData.Count(); + for ( i=0; iStop(); + waiterData.iDataWaiter->Stop(); + FTRACE(FPrint( _L("CDunChanMan::StopConnWaiter() complete" ))); + return KErrNone; + } + } + FTRACE(FPrint( _L("CDunChanMan::StopConnWaiter() (not found) complete" ))); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Saves waiter's connection monitor callback data +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::SaveWaiterConnMonCallbackL( RComm* aComm, + MDunConnMon* aCallback, + TDunDirection aDirection ) + { + FTRACE(FPrint( _L("CDunChanMan::SaveWaiterConnMonCallbackL()" ))); + TInt i; + TInt count = iWaiterData.Count(); + for ( i=0; i add to object + // Add signal waiter's callback (for RunL error monitoring) + if ( !waiterData.iSignalWaiter ) + { + FTRACE(FPrint( _L("CDunTransUtils::SaveWaiterConnMonCallbackL() (ERROR) complete" ))); + return KErrGeneral; + } + waiterData.iSignalWaiter->AddCallback( aCallback ); + // Add data waiter's callback (for RunL error monitoring) + if ( !waiterData.iDataWaiter ) + { + FTRACE(FPrint( _L("CDunTransUtils::SaveWaiterConnMonCallbackL() (ERROR) complete" ))); + return KErrGeneral; + } + waiterData.iDataWaiter->AddCallback( aCallback ); + // Now just store information for R/W case + waiterData.iConnMons.AppendL( connMon ); + FTRACE(FPrint( _L("CDunChanMan::SaveWaiterConnMonCallbackL() complete" ))); + return KErrNone; + } + else if ( aDirection==EDunWriterUpstream || + aDirection==EDunReaderDownstream ) + { + // Network -> just store information for R/W case + waiterData.iConnMons.AppendL( connMon ); + FTRACE(FPrint( _L("CDunChanMan::SaveWaiterConnMonCallbackL() complete" ))); + return KErrNone; + } + else + { + FTRACE(FPrint( _L("CDunTransUtils::SaveWaiterConnMonCallbackL() (ERROR) complete" ))); + return KErrGeneral; + } + } + FTRACE(FPrint( _L("CDunChanMan::SaveWaiterConnMonCallbackL() (not found) complete" ))); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Saves waiter's skipped error data +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::SaveWaiterSkippedErrorL( TInt aError, + RComm* aComm, + TDunDirection aDirection ) + { + FTRACE(FPrint( _L("CDunChanMan::SaveWaiterSkippedErrorL()" ))); + TInt i; + TInt count = iWaiterData.Count(); + for ( i=0; iSubSessionHandle() ) + { + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (RComm) (bad handle) complete" ) )); + return KErrBadHandle; + } + // Get plugin UID for connection ID + TInt i; + TUid foundUid = TUid::Null(); + TInt count = iWaiterData.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (RComm) (not found) complete" ))); + return KErrNotFound; + } + TDunWaiterData& waiterData = iWaiterData[i]; + // Try to stop if either one of the waiters are still runnig + waiterData.iSignalWaiter->Stop(); + waiterData.iDataWaiter->Stop(); + // enqueued will be omitted (not needed to set to RComm) + TInt firstFree = iUtility->InitializeFirstFreeChannel( aComm ); + if ( firstFree < 0 ) + { + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (RComm) (firstfree failed!) complete" ) )); + return firstFree; + } + if ( firstFree >= iParent.iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (RComm) (firstfree failed!) complete" ))); + return KErrGeneral; + } + TInt bufferLength = KErrNotFound; + MDunBufferCorrection* correction = waiterData.iCorrection; + TRAPD( retTrap, + iUtility->DoAllocateChannelL(aComm, bufferLength, firstFree, correction) ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() trapped!" ) )); + iParent.UnInitializeOnDemand(); // remove unused initialized channel + if ( retTrap == KErrTooBig ) + { + if ( waiterData.iEnqueuedFail ) + { + // Inform plugin enqueue request + iPluginManager->NotifyPluginEnqueueRequest( foundUid ); + } + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) complete" ))); + return KErrTooBig; + } + iPluginManager->NotifyPluginCloseRequest( foundUid, EFalse ); + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (ERROR) complete" ))); + return retTrap; + } + TInt retTemp = CDunUtils::SetRCommBufferLength( *aComm, bufferLength ); + if ( retTemp != KErrNone ) + { + iParent.UnInitializeOnDemand(); // remove unused initialized channel + iPluginManager->NotifyPluginCloseRequest( foundUid, EFalse ); + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (ERROR) complete" ))); + } + // Next find aComm from iWaiterData and copy its contents to channel data + retTemp = FillNewWaiterChannelData( aComm, firstFree ); + if ( retTemp != KErrNone ) + { + iParent.UnInitializeOnDemand(); // remove unused initialized channel + iPluginManager->NotifyPluginCloseRequest( foundUid, EFalse ); + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (RComm) (not found) complete" ))); + } + FTRACE(FPrint( _L("CDunChanMan::NotifyNewChannelRequest() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Fills data for channel created by waiter +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::FillNewWaiterChannelData( RComm* aComm, + TInt aFirstFree ) + { + FTRACE(FPrint( _L("CDunChanMan::FillNewWaiterChannelData()" ))); + TInt i; + TInt count = iWaiterData.Count(); + for ( i=0; i= count || + aFirstFree < 0 || + aFirstFree >= iParent.iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunChanMan::FillNewWaiterChannelData() (not found) complete" ))); + return KErrNotFound; + } + TUid thisUid = iWaiterData[i].iOwnerUid; // pick up before remove + TDunChannelData& channelData = iParent.iChannelData[aFirstFree]; + TDunWaiterData& waiterData = iWaiterData[i]; + channelData.iComm = waiterData.iComm; + channelData.iChannelName = waiterData.iChannelName; + channelData.iUpstreamRW->SetMedia( aComm, EDunMediaContextLocal ); + channelData.iDownstreamRW->SetMedia( aComm, EDunMediaContextLocal ); + channelData.iOwnerUid = thisUid; + // Channel now occupied + channelData.iChannelInUse = ETrue; + // Restore data from waiter to transfer objects + RestoreWaiterData( i, aFirstFree ); + // Now delete waiters before request issuing + DeleteWaiters( i, ETrue ); + iWaiterData.Remove( i ); + // Issue transfer requests + iUtility->DoIssueTransferRequests( aFirstFree ); + // Clear the queue, just to be sure + iPluginManager->NotifyPluginDequeueRequest( thisUid ); + FTRACE(FPrint( _L("CDunChanMan::FillNewWaiterChannelData() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Restores saved waiter data to connection data +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::RestoreWaiterData( TInt aWaiterIndex, + TInt aChannelIndex ) + { + FTRACE(FPrint( _L("CDunChanMan::RestoreWaiterData()" ))); + if ( aWaiterIndex < 0 || + aWaiterIndex >= iWaiterData.Count() || + aChannelIndex < 0 || + aChannelIndex >= iParent.iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunChanMan::RestoreWaiterData() (not found) complete" ))); + return KErrNotFound; + } + TInt i; + TInt count = iWaiterData[aWaiterIndex].iConnMons.Count(); + for ( i=0; iDoAddConnMonCallback( aChannelIndex, + connMon.iCallback, + connMon.iDirection, + NULL ); + } + count = iWaiterData[aWaiterIndex].iOkErrors.Count(); + for (i=0; iDoAddSkippedError( aChannelIndex, + skippedError.iError, + skippedError.iDirection ); + } + FTRACE(FPrint( _L("CDunChanMan::RestoreWaiterData() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Deletes waiter objects of aIndex:th waiters +// --------------------------------------------------------------------------- +// +TInt CDunChanMan::DeleteWaiters( TInt aIndex, TBool aNewOwnership ) + { + FTRACE(FPrint( _L("CDunChanMan::DeleteWaiters()" ))); + + if ( aIndex < 0 || + aIndex >= iWaiterData.Count() ) + { + FTRACE(FPrint( _L("CDunChanMan::DeleteWaiters() (not found) complete" ))); + return KErrNotFound; + } + + TDunWaiterData& waiterData = iWaiterData[aIndex]; + if ( !aNewOwnership ) + { + delete waiterData.iChannelName; + } + waiterData.iChannelName = NULL; + delete waiterData.iSignalWaiter; + waiterData.iSignalWaiter = NULL; + delete waiterData.iDataWaiter; + waiterData.iDataWaiter = NULL; + + waiterData.iConnMons.Close(); + waiterData.iOkErrors.Close(); + + FTRACE(FPrint( _L("CDunChanMan::DeleteWaiters() complete" ))); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunDataPusher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunDataPusher.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,450 @@ +/* +* Copyright (c) 2009-2010 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: Pushes data to existing stream from outside +* +*/ + + +#include "DunDataPusher.h" +#include "DunDownstream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunDataPusher* CDunDataPusher::NewL( CDunDownstream& aParent, + MDunCompletionReporter* aStreamCallback ) + { + CDunDataPusher* self = new (ELeave) CDunDataPusher( aParent, + aStreamCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunDataPusher::~CDunDataPusher() + { + FTRACE(FPrint( _L("CDunDataPusher::~CDunDataPusher()" ))); + ResetData(); + FTRACE(FPrint( _L("CDunDataPusher::~CDunDataPusher() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunDataPusher::ResetData() + { + // APIs affecting this: + // SendQueuedData() + Stop(); + // AddToEventQueue() + iEventQueue.Close(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Sets media to be used for this endpoint +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::SetMedia( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunDataPusher::SetMedia() (RComm)" ))); + if ( !aComm ) + { + FTRACE(FPrint( _L("CDunDataPusher::SetMedia() (RComm) (not initialized!) complete" ))); + return KErrGeneral; + } + iComm = aComm; + FTRACE(FPrint( _L("CDunDataPusher::SetMedia() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to be used for this endpoint +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::SetMedia( RSocket* aSocket ) + { + FTRACE(FPrint( _L("CDunDataPusher::SetMedia() (RSocket)" ))); + if ( !aSocket ) + { + FTRACE(FPrint( _L("CDunDataPusher::SetMedia() (RSocket) (not initialized!) complete" ))); + return KErrGeneral; + } + iSocket = aSocket; + FTRACE(FPrint( _L("CDunDataPusher::SetMedia() (RSocket) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Adds event notification to queue +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::AddToEventQueue( const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ) + { + FTRACE(FPrint( _L("CDunDataPusher::AddToQueue()" ))); + if ( !aDataToPush || aDataToPush->Length()<0 ) + { + FTRACE(FPrint( _L("CDunDataPusher::AddToQueue() (unknown data) complete" ))); + return KErrGeneral; + } + // Check if identical pointer to data already exists + TInt foundIndex = FindEventFromQueue( aDataToPush ); + if ( foundIndex >= 0 ) + { + FTRACE(FPrint( _L("CDunDataPusher::AddToQueue() (already exists) complete" ))); + return KErrAlreadyExists; + } + // Unique pointer -> add to event queue + TDunDataPush dataPush; + dataPush.iDataToPush = aDataToPush; + dataPush.iCallback = aCallback; + TInt retTemp = iEventQueue.Append( dataPush ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunDataPusher::AddToQueue() (append failed!) complete" ))); + return retTemp; + } + FTRACE(FPrint( _L("CDunDataPusher::AddToQueue() complete (count=%d)" ), iEventQueue.Count() )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Finds an event from queue +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::FindEventFromQueue( const TDesC8* aDataToPush ) + { + FTRACE(FPrint( _L("CDunDataPusher::FindEventFromQueue()" ))); + TInt i; + TInt count = iEventQueue.Count(); + for ( i=0; i= 0 ) + { + if ( iEventIndex == foundIndex ) + { + Stop(); + } + FTRACE(FPrint( _L("CDunDataPusher::StopOneEvent() complete" ))); + return KErrNone; + } + FTRACE(FPrint( _L("CDunDataPusher::StopOneEvent() (not found) complete" ))); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// Sends queued data in round robin +// --------------------------------------------------------------------------- +// +TBool CDunDataPusher::SendQueuedData() + { + FTRACE(FPrint( _L("CDunDataPusher::SendQueuedData()" ))); + if ( iPushState!=EDunStateIdle || iEventQueue.Count()==0 ) + { + FTRACE(FPrint( _L("CDunDataPusher::SendQueuedData() (not ready) complete" ))); + return EFalse; + } + TInt retTemp = ManageOneEvent(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunDataPusher::SendQueuedData() (ERROR) complete" ))); + return EFalse; + } + iPushState = EDunStateDataPushing; + FTRACE(FPrint( _L("CDunDataPusher::SendQueuedData() complete (%d)" ), iEventQueue.Count() )); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Stops sending for write endpoint +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::Stop() + { + FTRACE(FPrint( _L("CDunDataPusher::Stop()" ))); + if ( iPushState != EDunStateDataPushing ) + { + FTRACE(FPrint( _L("CDunDataPusher::Stop() (not ready) complete" ))); + return KErrNotReady; + } + // As the EDunStateDataPushing can be on even with multiple requests, + // cancel the actual operation in DoCancel() + Cancel(); + iPushState = EDunStateIdle; + FTRACE(FPrint( _L("CDunDataPusher::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops sending for write endpoint and clears event queue +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::StopAndClearQueue() + { + FTRACE(FPrint( _L("CDunDataPusher::StopAndClearQueue()" ))); + TInt retVal = Stop(); + iEventQueue.Reset(); + iEventIndex = 0; + FTRACE(FPrint( _L("CDunDataPusher::StopAndClearQueue() complete" ))); + return retVal; + } + +// --------------------------------------------------------------------------- +// Signals completion status in round robin and clears event queue +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::SignalCompletionAndClearQueue() + { + FTRACE(FPrint( _L("CDunDataPusher::SignalCompletionAndClearQueue()" ))); + // First copy the event queue to temporary notitication queue and + // reset the real event queue before notifications. This is done because + // implementor of NotifyDataPushComplete() can call AddToEventQueue() + // (and KErrAlreadyExists will happen there) + TInt i; + TInt retTemp; + RPointerArray notify; + TInt count = iEventQueue.Count(); + for ( i=0; iNotifyDataPushComplete( EFalse ); + } + notify.Close(); + FTRACE(FPrint( _L("CDunDataPusher::SignalCompletionAndClearQueue() complete (%d)" ), count )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunDataPusher::CDunDataPusher +// --------------------------------------------------------------------------- +// +CDunDataPusher::CDunDataPusher( CDunDownstream& aParent, + MDunCompletionReporter* aStreamCallback ) : + CActive( EPriorityHigh ), + iParent( aParent ), + iStreamCallback( aStreamCallback ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunDataPusher::ConstructL +// --------------------------------------------------------------------------- +// +void CDunDataPusher::ConstructL() + { + FTRACE(FPrint( _L("CDunDataPusher::ConstructL()" ))); + if ( !iStreamCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunDataPusher::ConstructL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunDataPusher::Initialize() + { + // Don't initialize iUtility here (it is set through NewL) + // Don't initialize iStreamCallback here (it is set through NewL) + iPushState = EDunStateIdle; + iEventIndex = 0; + iSocket = NULL; + iComm = NULL; + } + +// --------------------------------------------------------------------------- +// Manages one event's data push +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::ManageOneEvent() + { + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent()" ))); + if ( IsActive() ) + { + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent() (not ready) complete" ))); + return KErrNotReady; + } + if ( iEventIndex < 0 || + iEventIndex >= iEventQueue.Count() ) + { + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent() (buffer mismatch) complete" ))); + return KErrGeneral; + } + const TDesC8* dataToPush = iEventQueue[iEventIndex].iDataToPush; + if ( iComm ) + { + iStatus = KRequestPending; + iComm->Write( iStatus, *dataToPush ); + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent() RComm Write() requested (buffer=0x%08X)" ), dataToPush )); + } + else if ( iSocket ) + { + iStatus = KRequestPending; + iSocket->Send( *dataToPush, 0, iStatus ); + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent() RSocket Send() requested (buffer=0x%08X)" ), dataToPush )); + } + else + { + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent() (ERROR) complete" ))); + return KErrGeneral; + } + SetActive(); + FTRACE(FPrint( _L("CDunDataPusher::ManageOneEvent() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Check whether an error code is severe error or not +// --------------------------------------------------------------------------- +// +TInt CDunDataPusher::ProcessErrorCondition( TInt aError, TBool& aIsError ) + { + FTRACE(FPrint( _L("CDunDataPusher::ProcessErrorCondition() (Dir=%d)" ), EDunWriterDownstream)); + aIsError = EFalse; + if ( aError != KErrNone ) + { + aIsError = ETrue; + TInt retTemp = iParent.iOkErrorsW.Find( aError ); + if ( retTemp == KErrNotFound ) + { + FTRACE(FPrint( _L("CDunDataPusher::ProcessErrorCondition() (Dir=%d) (%d=ETrue) complete" ), EDunWriterDownstream, aError)); + return ETrue; + } + } + FTRACE(FPrint( _L("CDunDataPusher::ProcessErrorCondition() (Dir=%d) (%d=EFalse) complete" ), EDunWriterDownstream, aError)); + return EFalse; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when endpoint data write complete +// --------------------------------------------------------------------------- +// +void CDunDataPusher::RunL() + { + FTRACE(FPrint( _L("CDunDataPusher::RunL() (buffer=0x%08X)" ), iEventQueue[iEventIndex].iDataToPush )); + + TBool isError; + TInt retTemp = iStatus.Int(); + TInt stop = ProcessErrorCondition( retTemp, isError ); + + if ( !stop ) // no real error detected -> continue + { + if ( !isError ) + { + iEventIndex++; + } + if ( iEventIndex < iEventQueue.Count() ) + { + // More to serve so start again + ManageOneEvent(); + } + else + { + // Last was served so stop processing and notify + iPushState = EDunStateIdle; + iStreamCallback->NotifyDataPushComplete( ETrue ); + } + } // if ( !stop ) + else // stop -> tear down connection + { + TDunConnectionReason connReason; + connReason.iReasonType = EDunReasonTypeRW; + connReason.iContext = EDunMediaContextLocal; + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = EDunWriterDownstream; + connReason.iErrorCode = retTemp; + iParent.iUtility->DoNotifyConnectionNotOk( iComm, + iSocket, + connReason, + iParent.iCallbacksW ); + } // else + + FTRACE(FPrint( _L("CDunDataPusher::RunL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunDataPusher::DoCancel() + { + FTRACE(FPrint( _L("CDunDataPusher::DoCancel()" ))); + if ( iComm ) + { + iComm->WriteCancel(); + FTRACE(FPrint( _L("CDunDataPusher::DoCancel() (RComm) cancelled" ))); + } + else if ( iSocket ) + { + iSocket->CancelWrite(); + FTRACE(FPrint( _L("CDunDataPusher::DoCancel() (RSocket) cancelled" ))); + } + FTRACE(FPrint( _L("CDunDataPusher::DoCancel() complete" ))); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunDataWaiter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunDataWaiter.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,253 @@ +/* +* Copyright (c) 2006-2007 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: Monitors for new data in RComm local media side +* +*/ + + +#include "DunTransporter.h" +#include "DunDataWaiter.h" +#include "DunSignalCopy.h" +#include "DunDebug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunDataWaiter* CDunDataWaiter::NewL( MDunChannelAllocator* aChannelCallback ) + { + CDunDataWaiter* self = new (ELeave) CDunDataWaiter( aChannelCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunDataWaiter::~CDunDataWaiter() + { + FTRACE(FPrint( _L("CDunDataWaiter::~CDunDataWaiter()") )); + ResetData(); + FTRACE(FPrint( _L("CDunDataWaiter::~CDunDataWaiter() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunDataWaiter::ResetData() + { + FTRACE(FPrint( _L("CDunDataWaiter::ResetData()") )); + Stop(); + // APIs affecting this: + // AddConnMonCallbackL() + iCallbacks.Close(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunDataWaiter::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Adds callback for RunL error controlling +// The callback will be called when error is detected in asynchronous +// operation +// --------------------------------------------------------------------------- +// +TInt CDunDataWaiter::AddCallback( MDunConnMon* aCallback ) + { + FTRACE(FPrint( _L("CDunDataWaiter::AddCallback()" ) )); + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() (ERROR) complete" ) )); + return KErrGeneral; + } + TInt retTemp = iCallbacks.Find( aCallback ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = iCallbacks.Append( aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to use for this endpoint +// --------------------------------------------------------------------------- +// +TInt CDunDataWaiter::SetMedia( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunDataWaiter::SetMedia(RComm) (addr=0x%08X)" ), aComm)); + if ( !aComm ) + { + FTRACE(FPrint( _L("CDunDataWaiter::SetMedia() (aComm) not initialized!" ))); + return KErrGeneral; + } + TCommCaps2 caps; + aComm->Caps( caps ); + if ( !(caps().iNotificationCaps & KNotifyDataAvailableSupported) ) + { + FTRACE(FPrint( _L("CDunDataWaiter::SetMedia() (RComm) (not supported) complete" ))); + return KErrNotSupported; + } + iComm = aComm; + FTRACE(FPrint( _L("CDunDataWaiter::SetMedia() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Issues request to start waiting for new data in RComm +// --------------------------------------------------------------------------- +// +TInt CDunDataWaiter::IssueRequest() + { + FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest()" ))); + if ( iDataWaiterState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iComm ) + { + FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest() (iComm) not initialized!" ) )); + return KErrGeneral; + } + iStatus = KRequestPending; + iComm->ResetBuffers(); + iComm->NotifyDataAvailable( iStatus ); + SetActive(); + iDataWaiterState = EDunStateDataWaiting; + FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops monitoring for new data +// --------------------------------------------------------------------------- +// +TInt CDunDataWaiter::Stop() + { + FTRACE(FPrint( _L("CDunDataWaiter::Stop()" ))); + if ( iDataWaiterState != EDunStateDataWaiting ) + { + FTRACE(FPrint( _L("CDunDataWaiter::Stop() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iComm ) + { + FTRACE(FPrint( _L("CDunDataWaiter::Stop() (iComm) not initialized!" ))); + return KErrGeneral; + } + iComm->NotifyDataAvailableCancel(); + Cancel(); + iDataWaiterState = EDunStateIdle; + FTRACE(FPrint( _L("CDunDataWaiter::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunDataWaiter::CDunDataWaiter +// --------------------------------------------------------------------------- +// +CDunDataWaiter::CDunDataWaiter( MDunChannelAllocator* aChannelCallback ) : + CActive( EPriorityHigh ), + iChannelCallback( aChannelCallback ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunDataWaiter::ConstructL +// --------------------------------------------------------------------------- +// +void CDunDataWaiter::ConstructL() + { + FTRACE(FPrint( _L("CDunDataWaiter::ConstructL()" ) )); + if ( !iChannelCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunDataWaiter::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunDataWaiter::Initialize() + { + FTRACE(FPrint( _L("CDunDataWaiter::Initialize()" ) )); + // Don't initialize iChannelCallback here (it is set through NewL) + iDataWaiterState = EDunStateIdle; + iComm = NULL; + FTRACE(FPrint( _L("CDunDataWaiter::Initialize() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when new data in RComm object +// --------------------------------------------------------------------------- +// +void CDunDataWaiter::RunL() + { + FTRACE(FPrint( _L("CDunDataWaiter::RunL()" ) )); + iDataWaiterState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunDataWaiter::RunL() (failed) complete (%d)"), retTemp)); + TInt count = iCallbacks.Count(); + TDunConnectionReason connReason; + connReason.iReasonType = EDunReasonTypeRunL; + connReason.iContext = EDunMediaContextLocal; + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = EDunDirectionUndefined; + connReason.iErrorCode = retTemp; + for ( TInt i=0; iNotifyProgressChangeL( iComm, connReason ) ); + } + return; + } + if ( iChannelCallback ) + { + iChannelCallback->NotifyNewChannelRequest( iComm ); + } + // Don't check other iMediaInUse values here + // They can't be other than EDunMediaRComm (checked in IssueRequest()) + FTRACE(FPrint( _L("CDunDataWaiter::RunL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunDataWaiter::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunDownstream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunDownstream.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,468 @@ +/* +* Copyright (c) 2009-2010 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: Definitions needed for one "stream" of CDunTransporter +* +*/ + + +/* + * TODO: When local media is of type RComm, listening on it is started with + * RComm::NotifyDataAvailable() call. Check that USB ACM port and Irda RCOMM + * (and any other new media in the future) behaves correctly so that when + * RComm::ReadOneOrMore() is issued, the read is issued immediately without + * checking for new data. If waiting for new data happens in this + * NotifyDataAvailable/ReadOneOrMore combination, raise a defect to Symbian. + */ + +#include "DunTransporter.h" +#include "DunDownstream.h" +#include "DunUpstream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunDownstream* CDunDownstream::NewL( MDunTransporterUtilityAux* aUtility ) + { + CDunDownstream* self = new (ELeave) CDunDownstream( aUtility ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunDownstream::~CDunDownstream() + { + FTRACE(FPrint( _L("CDunDownstream::~CDunDownstream()" ))); + ResetData(); + FTRACE(FPrint( _L("CDunDownstream::~CDunDownstream() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunDownstream::ResetData() + { + // APIs affecting this: + // IssueRequest() + Stop(); + // InitializeForDataPushing() + delete iPushData.iDataPusher; + iPushData.iDataPusher = NULL; + // AddConnMonCallbackL() + iCallbacksR.Close(); + iCallbacksW.Close(); + // AddSkippedErrorL() + iOkErrorsR.Close(); + iOkErrorsW.Close(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Initializes this stream for AT command notifications +// --------------------------------------------------------------------------- +// +TInt CDunDownstream::InitializeForDataPushing( + MDunAtCmdHandler* aAtCmdHandler ) + { + FTRACE(FPrint( _L("CDunDownstream::InitializeForDataPushing()" ) )); + if ( iPushData.iDataPusher || iPushData.iAtCmdHandler ) // optional + { + FTRACE(FPrint( _L("CDunDownstream::InitializeForDataPushing() (already exists) complete" ) )); + return KErrAlreadyExists; + } + if ( !aAtCmdHandler ) + { + FTRACE(FPrint( _L("CDunDownstream::InitializeForDataPushing() (aAtCmdHandler) not initialized!" ) )); + return KErrGeneral; + } + CDunDataPusher* dataPusher = NULL; + TRAPD( retTrap, dataPusher = CDunDataPusher::NewL(*this,this) ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunDownstream::InitializeForDataPushing() (trapped!) complete" ) )); + return retTrap; + } + if ( iComm ) + { + dataPusher->SetMedia( iComm ); + } + else if ( iSocket ) + { + dataPusher->SetMedia( iSocket ); + } + iPushData.iDataPusher = dataPusher; + iPushData.iAtCmdHandler = aAtCmdHandler; + FTRACE(FPrint( _L("CDunDownstream::InitializeForDataPushing() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Checks if data is in queue +// --------------------------------------------------------------------------- +// +TBool CDunDownstream::IsDataInQueue( const TDesC8* aDataToPush ) + { + FTRACE(FPrint( _L("CDunDownstream::IsDataInQueue()" ) )); + if ( !iPushData.iDataPusher ) + { + FTRACE(FPrint( _L("CDunDownstream::IsDataInQueue() (iPushData.iDataPusher not initialized!) complete" ))); + return EFalse; + } + TInt foundIndex = iPushData.iDataPusher->FindEventFromQueue( aDataToPush ); + FTRACE(FPrint( _L("CDunDownstream::IsDataInQueue() complete" ) )); + return ( foundIndex >= 0 ) ? ETrue : EFalse; + } + +// --------------------------------------------------------------------------- +// Adds data to event queue and starts sending if needed +// --------------------------------------------------------------------------- +// +TInt CDunDownstream::AddToQueueAndSend( const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ) + { + FTRACE(FPrint( _L("CDunDownstream::AddToQueueAndSend()" ) )); + if ( !iPushData.iDataPusher ) + { + FTRACE(FPrint( _L("CDunDownstream::AddToQueueAndSend() (iPushData.iDataPusher not initialized!) complete" ))); + return KErrGeneral; + } + // Add to event queue. If something went wrong, just return + TInt retTemp = iPushData.iDataPusher->AddToEventQueue( aDataToPush, aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunDownstream::AddToQueueAndSend() (ERROR) complete" ))); + return retTemp; + } + // Now push the data. If already active, push will start later, if not + // active it will start immediately. + iPushData.iDataPusher->SendQueuedData(); + FTRACE(FPrint( _L("CDunDownstream::AddToQueueAndSend() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Starts downstream by issuing read request +// --------------------------------------------------------------------------- +// +TInt CDunDownstream::StartStream() + { + FTRACE(FPrint( _L("CDunDownstream::StartStream()" ) )); + FTRACE(FPrint( _L("CDunDownstream::StartStream() (buffer=0x%08X)" ), iBufferPtr )); + // Note: only start URC here. + // The downstream read request is started when command mode ends. + // This is done to make the data arrive in the correct order (reply vs. + // data) with "ATD" command. + TInt retVal = KErrNone; + if ( iPushData.iAtCmdHandler ) + { + retVal = iPushData.iAtCmdHandler->StartUrc(); + } + FTRACE(FPrint( _L("CDunDownstream::StartStream() complete" ) )); + return retVal; + } + +// --------------------------------------------------------------------------- +// Stops transfer for read or write endpoints +// --------------------------------------------------------------------------- +// +TInt CDunDownstream::Stop( TBool aStopMplex ) + { + FTRACE(FPrint( _L("CDunDownstream::Stop() (Dir=%d)" ), iDirection)); + if ( !iPushData.iDataPusher ) + { + FTRACE(FPrint( _L("CDunDownstream::Stop() (iPushData.iDatapusher not initialized!) complete" ))); + return KErrGeneral; + } + // Stop the downstream related AT command handling functionality + if ( aStopMplex ) // optional + { + if ( iPushData.iAtCmdHandler ) + { + iPushData.iAtCmdHandler->StopAtCmdHandling(); + } + // Stop the multiplexer separately + iPushData.iDataPusher->Stop(); + } + if ( iTransferState != EDunStateTransferring ) + { + FTRACE(FPrint( _L("CDunDownstream::Stop() (not ready) complete" ))); + return KErrNotReady; + } + // Stop only current operation + if ( iOperationType == EDunOperationTypeRead ) + { + if ( iNetwork ) + { + iNetwork->ReadCancel(); + Cancel(); + FTRACE(FPrint( _L("CDunDownstream::Stop() (Network) cancelled" ))); + } + } + else if ( iOperationType == EDunOperationTypeWrite ) + { + iPushData.iDataPusher->StopOneEvent( iBufferPtr ); + } + iTransferState = EDunStateIdle; + FTRACE(FPrint( _L("CDunDownstream::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunDownstream::CDunDownstream +// --------------------------------------------------------------------------- +// +CDunDownstream::CDunDownstream( MDunTransporterUtilityAux* aUtility ) : + iUtility( aUtility ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunDownstream::ConstructL +// --------------------------------------------------------------------------- +// +void CDunDownstream::ConstructL() + { + FTRACE(FPrint( _L("CDunDownstream::ConstructL()" ) )); + if ( !iUtility ) + { + User::Leave( KErrGeneral ); + } + FTRACE(FPrint( _L("CDunDownstream::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunDownstream::Initialize() + { + // Don't initialize iUtility here (it is set through NewL) + iPushData.iDataMode = EFalse; + iPushData.iDataPusher = NULL; + iPushData.iAtCmdHandler = NULL; + } + +// --------------------------------------------------------------------------- +// Issues transfer request for this stream +// --------------------------------------------------------------------------- +// +TInt CDunDownstream::IssueRequest() + { + // Set direction + iDirection = static_cast( EDunStreamTypeDownstream | iOperationType ); + + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() (Dir=%d)" ), iDirection)); + if ( !iPushData.iDataPusher ) + { + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() (iPushData.iDataPusher not initialized!) complete" ) )); + return KErrGeneral; + } + + if ( iTransferState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() (not ready) complete" ) )); + return KErrNotReady; + } + + if ( iOperationType == EDunOperationTypeRead ) + { + iBufferPtr->SetLength( iBufferPtr->MaxLength() ); + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() trying to read %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection)); + } + else // iOperationType == EDunOperationTypeWrite + { + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() writing %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection)); + } + + switch ( iDirection ) + { + case EDunReaderDownstream: + iStatus = KRequestPending; + iNetwork->ReadOneOrMore( iStatus, *iBufferPtr ); + SetActive(); + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() RComm ReadOneOrMore() requested" ) )); + break; + case EDunWriterDownstream: + AddToQueueAndSend( iBufferPtr, this ); + break; + default: + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() (ERROR) complete" ) )); + return KErrGeneral; + } + + iTransferState = EDunStateTransferring; + + FTRACE(FPrint( _L("CDunDownstream::IssueRequest() (Dir=%d) complete" ), iDirection)); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when endpoint data read complete +// --------------------------------------------------------------------------- +// +void CDunDownstream::RunL() + { + FTRACE(FPrint( _L("CDunDownstream::RunL() (Dir=%d)" ), iDirection)); + iTransferState = EDunStateIdle; + if ( iOperationType != EDunOperationTypeRead ) + { + FTRACE(FPrint( _L("CDunDownstream::RunL() (wrong operation type!) complete" ))); + return; + } + + TBool isError; + TInt retTemp = iStatus.Int(); + TInt stop = ProcessErrorCondition( retTemp, isError ); + + if ( !stop ) // no real error detected -> continue + { + if ( !isError ) + { + // Operation type was read so now set to write + iOperationType = EDunOperationTypeWrite; + } // if ( !isError ) + + IssueRequest(); + + } // if ( !stop ) + else // stop -> tear down connection + { + // Now CDunDataPusher notifies to write case so here we just notify the + // read case. + TDunConnectionReason connReason; + connReason.iReasonType = EDunReasonTypeRW; + connReason.iContext = GetMediaContext( EDunStreamTypeDownstream ); + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = iDirection; + connReason.iErrorCode = retTemp; + iUtility->DoNotifyConnectionNotOk( iComm, + iSocket, + connReason, + iCallbacksR ); + FTRACE(FPrint( _L("CDunDownstream::RunL() stop" ))); + } // else + + FTRACE(FPrint( _L("CDunDownstream::RunL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunDownstream::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// From class MDunStreamManipulator. +// Gets called when outside party wants to push data to the existing stream +// --------------------------------------------------------------------------- +// +TInt CDunDownstream::NotifyDataPushRequest( const TDesC8* aDataToPush, + MDunCompletionReporter* aCallback ) + { + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushRequest()" ))); + // If in data mode push the reply anyway as "CONNECT" or "NO CARRIER" + // reply could arrive before/after the command mode information itself. + TInt retVal = AddToQueueAndSend( aDataToPush, aCallback ); + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushRequest() complete" ))); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class MDunCompletionReporter. +// Gets called when data push is complete +// --------------------------------------------------------------------------- +// +void CDunDownstream::NotifyDataPushComplete( TBool aAllPushed ) + { + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushComplete()" ))); + // Next just skip the notifications of atomic operations because also this + // class initiates the pushing of atomic data. + if ( !aAllPushed ) + { + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushComplete() (continue) complete" ))); + return; + } + iTransferState = EDunStateIdle; + iOperationType = EDunOperationTypeUndefined; + if ( !iPushData.iDataPusher ) + { + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushComplete() (iPushData.iDataPusher not initialized!) complete" ))); + return; + } + // Now the multiplexer might have pushed the contained data in this class + // or it might have pushed only the external data. If the pushed data + // contains this classes data then reissue request, otherwise just clear + // the queue. + TInt foundIndex = iPushData.iDataPusher->FindEventFromQueue( iBufferPtr ); + iPushData.iDataPusher->SignalCompletionAndClearQueue(); + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushComplete() (find event)" ))); + if ( foundIndex >= 0 ) + { + // Restart the reading from Dataport only if in data mode + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushComplete() (issue request)" ))); + if ( iPushData.iDataMode ) + { + iOperationType = EDunOperationTypeRead; + IssueRequest(); + } + } + FTRACE(FPrint( _L("CDunDownstream::NotifyDataPushComplete() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunCmdModeMonitor. +// Notifies about command mode start +// --------------------------------------------------------------------------- +// +void CDunDownstream::NotifyCommandModeStart() + { + FTRACE(FPrint( _L("CDunDownstream::NotifyCommandModeStart()" ))); + iPushData.iDataMode = EFalse; + // Now the data mode has ended. + // If read operation then cancel it. + if ( iOperationType == EDunOperationTypeRead ) + { + Stop( EFalse ); + } + FTRACE(FPrint( _L("CDunDownstream::NotifyCommandModeStart() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunCmdModeMonitor. +// Notifies about command mode end +// --------------------------------------------------------------------------- +// +void CDunDownstream::NotifyCommandModeEnd() + { + FTRACE(FPrint( _L("CDunDownstream::NotifyCommandModeEnd()" ))); + iPushData.iDataMode = ETrue; + // Command mode ends here so start reading from Dataport + iOperationType = EDunOperationTypeRead; + IssueRequest(); + FTRACE(FPrint( _L("CDunDownstream::NotifyCommandModeEnd() complete" ))); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunNetDataport.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunNetDataport.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,395 @@ +/* +* Copyright (c) 2006-2008 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: Dataport specific network resource accessor implementation +* +*/ + + +#include +#include "DunNetDataport.h" +#include "DunUtils.h" +#include "DunDebug.h" + +_LIT(DUN_GGP_DATAPORT_CSY_PORT, "::DUN"); +_LIT(DUN_GGP_DATAPORT_CSY, "DATAPORT"); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunNetDataport* CDunNetDataport::NewL( TInt aNumOfMaxChannels ) + { + CDunNetDataport* self = new (ELeave) CDunNetDataport( aNumOfMaxChannels ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunNetDataport::~CDunNetDataport() + { + FTRACE(FPrint(_L( "CDunNetDataport::~CDunNetDataport()"))); + TInt i; + TInt count = iEntities.Count(); + for ( i=0; i MDunNetwork). +// Initializes network for Dataport +// Must be called before any other operation +// --------------------------------------------------------------------------- +// +void CDunNetDataport::InitializeL() + { + FTRACE(FPrint(_L( "CDunNetDataport::InitializeL()"))); + AllocatePhoneObjectsL(); + FTRACE(FPrint(_L( "CDunNetDataport::InitializeL() complete"))); + } + +// --------------------------------------------------------------------------- +// From class MDunNetDataport. +// Called when channel was created by transporter for Dataport +// Initializes network for channel creation +// --------------------------------------------------------------------------- +// +TInt CDunNetDataport::AllocateChannel( RComm*& aComm ) + { + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel()"))); + TInt firstFree = InitializeFirstFreeEntity(); + if ( firstFree < 0 ) + { + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (not found) complete"))); + return firstFree; + } + if ( firstFree >= iEntities.Count() ) + { + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (firstfree failed!) complete"))); + return KErrGeneral; + } + TInt retTemp = iEntities[firstFree].iMobileCall.OpenNewCall( iMobileLine ); + if ( retTemp != KErrNone ) + { + RemoveEntity( firstFree ); // remove unused initialized channel + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() OpenNewCall FAILED %d" ), retTemp)); + return KErrGeneral; + } + retTemp = iEntities[firstFree].iMobileCall.Connect(); + if ( retTemp != KErrNone ) + { + RemoveEntity( firstFree ); // remove unused initialized channel + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() iEntities[%d]->iMobileCall.Connect FAILED %d" ), firstFree, retTemp)); + return KErrGeneral; + } + RCall::TCommPort portName; + portName.iPort.Copy( DUN_GGP_DATAPORT_CSY ); + portName.iPort.Append( DUN_GGP_DATAPORT_CSY_PORT ); + retTemp = iEntities[firstFree].iMobileCall.LoanDataPort( portName ); + if ( retTemp != KErrNone ) + { + RemoveEntity( firstFree ); // remove unused initialized channel + if ( retTemp == KErrEtelPortNotLoanedToClient ) + { + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (too big) complete"))); + return KErrTooBig; + } + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() iEntities[%d]->iMobileCall.LoanDataPort FAILED %d" ), firstFree, retTemp)); + return KErrGeneral; + } + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() Created call object at index %d" ), firstFree)); + retTemp = iEntities[firstFree].iDataport.Open( iCommServer, + portName.iPort, + ECommExclusive, + ECommRoleDTE ); + if ( retTemp != KErrNone ) + { + RemoveEntity( firstFree ); // remove unused initialized channel + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() FAILED to open dataport %d"), retTemp)); + return KErrGeneral; + } + iEntities[firstFree].iDataport.ResetBuffers(); + iEntities[firstFree].iEntityInUse = ETrue; + aComm = &iEntities[firstFree].iDataport; + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (iEntities[%d]->iDataport) opened"), firstFree)); + FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunNetDataport. +// Called when channel was deleted/closed by transporter for Dataport +// Uninitializes network for channel deletion/close +// --------------------------------------------------------------------------- +// +TInt CDunNetDataport::FreeChannel( RComm* aComm ) + { + FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel()"))); + TInt i; + TInt count = iEntities.Count(); + for ( i=0; i= count ) + { + FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel() (not found) complete"))); + return KErrNotFound; + } + DeleteNetworkEntity( i, ETrue ); + FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel() (iEntities[%d]->iDataport) freed"), i)); + FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunNetDataport. +// Gets index by network ID for Dataport +// --------------------------------------------------------------------------- +// +TInt CDunNetDataport::GetIndexById( RComm* aComm ) + { + FTRACE(FPrint(_L( "CDunNetDataport::GetIndexById()"))); + TInt i; + TInt count = iEntities.Count(); + for ( i=0; i=iNumOfMaxChannels ) + { + FTRACE(FPrint( _L("CDunNetDataport::InitializeFirstFreeEntity() (too big) complete" ))); + return KErrTooBig; + } + TDunDataportEntity emptyEntity; + emptyEntity.iEntityInUse = EFalse; + retTemp = iEntities.Append( emptyEntity ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunNetDataport::InitializeFirstFreeEntity() (append failed!) complete" ))); + return retTemp; + } + FTRACE(FPrint(_L( "CDunNetDataport::InitializeFirstFreeEntity() complete"))); + return i; + } + +// --------------------------------------------------------------------------- +// Remove network entity by index +// --------------------------------------------------------------------------- +// +TInt CDunNetDataport::RemoveEntity( TInt aIndex ) + { + FTRACE(FPrint(_L( "CDunNetDataport::RemoveEntity()"))); + if ( aIndex < 0 || + aIndex >= iEntities.Count() ) + { + FTRACE(FPrint(_L( "CDunNetDataport::RemoveEntity() (not found) complete"))); + return KErrNotFound; + } + DeleteNetworkEntity( aIndex, EFalse ); + FTRACE(FPrint(_L( "CDunNetDataport::RemoveEntity() complete"))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Deletes own internal data +// --------------------------------------------------------------------------- +// +void CDunNetDataport::DeleteNetwork() + { + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork()"))); + if ( iMobileLine.SubSessionHandle() ) + { + iMobileLine.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() mobile line closed"))); + } + if ( iMobilePhone.SubSessionHandle() ) + { + iMobilePhone.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() mobile phone closed"))); + } + if ( iTelServer.Handle() ) + { + iTelServer.UnloadPhoneModule( KMmTsyModuleName ); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() phone module unloaded"))); + iTelServer.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() phone module closed"))); + } + if ( iCommServer.Handle() ) + { + iCommServer.UnloadCommModule( DUN_GGP_DATAPORT_CSY ); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() comm module unloaded"))); + iCommServer.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() comm module closed"))); + } + iEntities.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() complete"))); + } + +// --------------------------------------------------------------------------- +// Deletes one network entity at index aIndex for Dataport +// --------------------------------------------------------------------------- +// +TInt CDunNetDataport::DeleteNetworkEntity( TInt aIndex, TBool aCheckFree ) + { + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity()"))); + if ( aIndex < 0 || + aIndex >= iEntities.Count() ) + { + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() (not found) complete"), aIndex)); + return KErrGeneral; + } + TDunDataportEntity& entity = iEntities[aIndex]; + if ( (aCheckFree&&entity.iEntityInUse) || !aCheckFree ) + { + if ( entity.iDataport.SubSessionHandle() ) + { + // The next will set KSignalDTEOutputs down twice for RComm + // local media case because CDunSignalCopy clears them also which + // in turn causes plugin to free channel. But this probably won't + // cause any harm. + entity.iDataport.SetSignals( 0, KSignalDTEOutputs ); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() RComm signals set"))); + entity.iDataport.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() RComm closed"))); + } + if ( entity.iMobileCall.SubSessionHandle() ) + { + entity.iMobileCall.RecoverDataPort(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() Dataport recovered"))); + entity.iMobileCall.Close(); + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() Dataport closed"))); + } + entity.iEntityInUse = EFalse; + } + FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() complete"))); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunNoteHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunNoteHandler.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,184 @@ +/* +* Copyright (c) 2007-2008 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: Manages note showing in UI +* +*/ + + +#include "DunNoteHandler.h" +#include "DunDebug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunNoteHandler* CDunNoteHandler::NewL() + { + CDunNoteHandler* self = new (ELeave) CDunNoteHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDunNoteHandler::~CDunNoteHandler() + { + FTRACE(FPrint( _L("CDunNoteHandler::~CDunNoteHandler()") )); + ResetData(); + FTRACE(FPrint( _L("CDunNoteHandler::~CDunNoteHandler() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunNoteHandler::ResetData() + { + FTRACE(FPrint( _L("CDunNoteHandler::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + delete iNote; + iNote = NULL; + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunNoteHandler::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Issues request to start showing UI note +// --------------------------------------------------------------------------- +// +TInt CDunNoteHandler::IssueRequest() + { + FTRACE(FPrint( _L("CDunNoteHandler::IssueRequest()") )); + if ( iNoteState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunNoteHandler::IssueRequest() (not ready) complete") )); + return KErrNotReady; + } + TRAPD( retTrap, DoIssueRequestL() ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunNoteHandler::IssueRequest() (trapped!) complete (%d)"), retTrap)); + return retTrap; + } + iNoteState = EDunStateUiNoting; + FTRACE(FPrint( _L("CDunNoteHandler::IssueRequest() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops showing UI note +// --------------------------------------------------------------------------- +// +TInt CDunNoteHandler::Stop() + { + FTRACE(FPrint( _L("CDunNoteHandler::Stop()") )); + if ( iNoteState != EDunStateUiNoting ) + { + FTRACE(FPrint( _L("CDunNoteHandler::Stop() (not ready) complete") )); + return KErrNotReady; + } + if ( !iNote ) + { + FTRACE(FPrint( _L("CDunNoteHandler::Stop() (iNote not initialized!) complete") )); + return KErrGeneral; + } + iNote->Close(); + iNoteState = EDunStateIdle; + FTRACE(FPrint( _L("CDunNoteHandler::Stop() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunNoteHandler::CDunNoteHandler +// --------------------------------------------------------------------------- +// +CDunNoteHandler::CDunNoteHandler() + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunNoteHandler::ConstructL +// --------------------------------------------------------------------------- +// +void CDunNoteHandler::ConstructL() + { + FTRACE(FPrint( _L("CDunNoteHandler::ConstructL()") )); + FTRACE(FPrint( _L("CDunNoteHandler::ConstructL() complete") )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunNoteHandler::Initialize() + { + FTRACE(FPrint( _L("CDunNoteHandler::Initialize()" ) )); + iNote = NULL; + iNoteState = EDunStateIdle; + FTRACE(FPrint( _L("CDunNoteHandler::Initialize() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Issues request to start showing UI note +// --------------------------------------------------------------------------- +// +void CDunNoteHandler::DoIssueRequestL() + { + FTRACE(FPrint( _L("CDunNoteHandler::DoIssueRequestL()") )); + if ( iNote ) + { + FTRACE(FPrint( _L("CDunNoteHandler::DoIssueRequestL() (ERROR) complete") )); + User::Leave( KErrGeneral ); + } + + CHbDeviceMessageBoxSymbian* messageBox = + CHbDeviceMessageBoxSymbian::NewL( + CHbDeviceMessageBoxSymbian::EWarning); + CleanupStack::PushL(messageBox); + //ToDo: Need to use localised strings. + _LIT(KText, "Maximum number of dialup-connections. Dial-up failed."); + messageBox->SetTextL(KText); + messageBox->SetObserver(this); + messageBox->SetTimeout(0); + messageBox->ShowL(); + CleanupStack::Pop(messageBox); + iNote = messageBox; + FTRACE(FPrint( _L("CDunNoteHandler::DoIssueRequestL() complete") )); + } + +// --------------------------------------------------------------------------- +// From class MHbDeviceMessageBoxObserver. +// Gets called on dialog close. +// --------------------------------------------------------------------------- +// +void CDunNoteHandler::MessageBoxClosed( + const CHbDeviceMessageBoxSymbian* /*aMessageBox*/, + CHbDeviceMessageBoxSymbian::TButtonId /*aButton*/ ) + { + FTRACE(FPrint( _L("CDunNoteHandler::MessageBoxClosed()" ) )); + iNoteState = EDunStateIdle; + delete iNote; + iNote = NULL; + FTRACE(FPrint( _L("CDunNoteHandler::MessageBoxClosed() complete" ) )); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunSignalCopy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunSignalCopy.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,475 @@ +/* +* Copyright (c) 2008-2010 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: Copies signals changes between network and local media +* +*/ + + +#ifdef PRJ_USE_NETWORK_STUBS +#include +#else +#include +#endif +#include "DunTransporter.h" +#include "DunSignalCopy.h" +#include "DunDebug.h" + +const TUint KDunSixLowestBitsMask = 0x3F; // Symbian magic + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunSignalCopy* CDunSignalCopy::NewL() + { + CDunSignalCopy* self = new (ELeave) CDunSignalCopy(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDunSignalCopy::~CDunSignalCopy() + { + FTRACE(FPrint( _L("CDunSignalCopy::~CDunSignalCopy()") )); + ResetData(); + FTRACE(FPrint( _L("CDunSignalCopy::~CDunSignalCopy() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ResetData() + { + FTRACE(FPrint( _L("CDunSignalCopy::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // AddCallback() + iCallbacks.Close(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunSignalCopy::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Adds callback for line status change controlling +// The callback will be called when RunL error is detected +// --------------------------------------------------------------------------- +// +TInt CDunSignalCopy::AddCallback( MDunConnMon* aCallback ) + { + FTRACE(FPrint( _L("CDunSignalCopy::AddCallback()" ) )); + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunSignalCopy::AddCallback() (aCallback) not initialized!" ) )); + return KErrGeneral; + } + TInt retTemp = iCallbacks.Find( aCallback ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunSignalCopy::AddCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = iCallbacks.Append( aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunSignalCopy::AddCallback() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunSignalCopy::AddCallback() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to use for this endpoint monitor +// --------------------------------------------------------------------------- +// +TInt CDunSignalCopy::SetMedia( RComm* aComm, + RComm* aNetwork, + TDunStreamType aStreamType ) + { + FTRACE(FPrint( _L("CDunSignalCopy::SetMedia()" ))); + if ( !aNetwork ) + { + FTRACE(FPrint( _L("CDunSignalCopy::SetMedia() (aComm) not initialized!" ))); + return KErrGeneral; + } + RComm* comm = NULL; + if ( aStreamType == EDunStreamTypeUpstream ) + { + iContextInUse = EDunMediaContextLocal; + comm = aComm; + } + else if ( aStreamType == EDunStreamTypeDownstream ) + { + iContextInUse = EDunMediaContextNetwork; + comm = aNetwork; + } + else + { + FTRACE(FPrint( _L("CDunSignalCopy::SetMedia() (aStreamtype) not initialized!" ))); + return KErrGeneral; + } + // No possibility to do iUtility->GetLocalId() here as aComm is not yet + // in channel data; use aComm directly + TCommCaps2 caps; + comm->Caps( caps ); + if ( !(caps().iNotificationCaps & KNotifySignalsChangeSupported) ) + { + FTRACE(FPrint( _L("CDunSignalCopy::SetMedia() (RComm) (not supported) complete" ))); + return KErrNotSupported; + } + iComm = aComm; + iNetwork = aNetwork; + iStreamType = aStreamType; + FTRACE(FPrint( _L("CDunSignalCopy::SetMedia() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Issues request to start monitoring the endpoint for line status change +// --------------------------------------------------------------------------- +// +TInt CDunSignalCopy::IssueRequest() + { + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest()" ))); + if ( iSignalCopyState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() (not ready) complete" ) )); + return KErrNotReady; + } + RComm* comm = NULL; + if ( iStreamType == EDunStreamTypeUpstream ) + { + iListenSignals = KSignalDCEInputs; + comm = iComm; + } + else if ( iStreamType == EDunStreamTypeDownstream ) + { + iListenSignals = KSignalDTEInputs; + comm = iNetwork; + } + else + { + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() (ERROR) complete" ) )); + return KErrGeneral; + } + TUint currentSignals = comm->Signals( iListenSignals ); + TUint oldSignalsLow = iSignals & KDunSixLowestBitsMask; + TUint newSignalsLow = currentSignals & KDunSixLowestBitsMask; + TUint oldSignalsHigh = oldSignalsLow * KSignalChanged; + TUint newSignalsHigh = newSignalsLow * KSignalChanged; + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() oldSignalsLow=0x%08X" ), oldSignalsLow )); + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() newSignalsLow=0x%08X" ), newSignalsLow )); + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() oldSignalsHigh=0x%08X" ), oldSignalsHigh )); + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() newSignalsHigh=0x%08X" ), newSignalsHigh )); + if ( newSignalsLow != oldSignalsLow ) + { + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() signals already set..." ) )); + iSignals = newSignalsLow | (oldSignalsHigh ^ newSignalsHigh); + ManageSignalChange(); + } + else + { + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() start waiting for change..." ) )); + iStatus = KRequestPending; + comm->NotifySignalChange( iStatus, iSignals, iListenSignals ); + SetActive(); + iSignalCopyState = EDunStateSignalCopy; + } + FTRACE(FPrint( _L("CDunSignalCopy::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops monitoring the endpoint for line status change +// --------------------------------------------------------------------------- +// +TInt CDunSignalCopy::Stop() + { + FTRACE(FPrint( _L("CDunSignalCopy::Stop()" ))); + if ( iSignalCopyState != EDunStateSignalCopy ) + { + FTRACE(FPrint( _L("CDunSignalCopy::Stop() (not ready) complete" ))); + return KErrNotReady; + } + if ( iStreamType == EDunStreamTypeUpstream ) + { + iComm->NotifySignalChangeCancel(); + } + else if ( iStreamType == EDunStreamTypeDownstream ) + { + iNetwork->NotifySignalChangeCancel(); + } + else + { + FTRACE(FPrint( _L("CDunSignalCopy::Stop() (ERROR) complete" ))); + return KErrGeneral; + } + Cancel(); + iSignalCopyState = EDunStateIdle; + FTRACE(FPrint( _L("CDunSignalCopy::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunSignalCopy::CDunSignalCopy +// --------------------------------------------------------------------------- +// +CDunSignalCopy::CDunSignalCopy() : + CActive( EPriorityHigh ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunSignalCopy::ConstructL +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ConstructL() + { + FTRACE(FPrint( _L("CDunSignalCopy::ConstructL()" ) )); + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunSignalCopy::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::Initialize() + { + FTRACE(FPrint( _L("CDunSignalCopy::Initialize()" ) )); + iContextInUse = EDunMediaContextUndefined; + iStreamType = EDunStreamTypeUndefined; + iSignalCopyState = EDunStateIdle; + iListenSignals = 0; + iSignals = 0; + iNetwork = NULL; + iComm = NULL; + FTRACE(FPrint( _L("CDunSignalCopy::Initialize() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Manages signal changes +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ManageSignalChange() + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChange()" ) )); + + if ( iStreamType == EDunStreamTypeUpstream ) + { + // Manage upstream case + ManageSignalChangeUpstream(); + } + else // iStreamType == EDunStreamTypeDownstream + { + // Manage downstream case + ManageSignalChangeDownstream(); + } + + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChange() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Manages upstream signal changes +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ManageSignalChangeUpstream() + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream()" ) )); + // For upstream the following signals are set for local media: + // KSignalDCEInputs = KSignalRTS | KSignalDTR + if ( iSignals & KRTSChanged ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() checking RTS..." ) )); + if ( iSignals & KSignalRTS ) // RTS changed to high + { + ChangeUpstreamSignal( KSignalRTS, 0 ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() RTS changed high" ) )); + } + else // RTS changed to low + { + ChangeUpstreamSignal( 0, KSignalRTS ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() RTS changed low" ) )); + } + } + if ( iSignals & KDTRChanged ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() checking DTR..." ) )); + if ( iSignals & KSignalDTR ) // DTR changed to high + { + ChangeUpstreamSignal( KSignalDTR, 0 ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() DTR changed high" ) )); + } + else // DTR changed to low + { + ChangeUpstreamSignal( 0, KSignalDTR ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() DTR changed low" ) )); + } + } + IssueRequest(); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeUpstream() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Manages downstream signal changes +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ManageSignalChangeDownstream() + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream()" ) )); + // For downstream the following signals are set for network: + // KSignalDTEInputs = KSignalCTS | KSignalDSR | KSignalDCD | KSignalRNG + if ( iSignals & KCTSChanged ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() checking CTS..." ) )); + if ( iSignals & KSignalCTS ) // CTS changed to high or initially high + { + ChangeDownstreamSignal( KSignalCTS, 0 ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() CTS changed high" ) )); + } + else // CTS changed to low + { + ChangeDownstreamSignal( 0, KSignalCTS ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() CTS changed low" ) )); + } + } + if ( iSignals & KDSRChanged ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() checking DSR..." ) )); + if ( iSignals & KSignalDSR ) // DSR changed to high + { + ChangeDownstreamSignal( KSignalDSR, 0 ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() DSR changed high" ) )); + } + else // DSR changed to low + { + ChangeDownstreamSignal( 0, KSignalDSR ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() DSR changed low" ) )); + } + } + if ( iSignals & KDCDChanged ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() checking DCD..." ) )); + if ( iSignals & KSignalDCD ) // DCD changed to high + { + ChangeDownstreamSignal( KSignalDCD, 0 ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() DCD changed high" ) )); + } + else // DCD changed to low + { + ChangeDownstreamSignal( 0, KSignalDCD ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() DCD changed low" ) )); + } + } + if ( iSignals & KRNGChanged ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() checking RNG..." ) )); + if ( iSignals & KSignalRNG ) // RNG changed to high + { + ChangeDownstreamSignal( KSignalRNG, 0 ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() RNG changed high" ) )); + } + else // RNG changed to low + { + ChangeDownstreamSignal( 0, KSignalRNG ); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() RNG changed low" ) )); + } + } + IssueRequest(); + FTRACE(FPrint( _L("CDunSignalCopy::ManageSignalChangeDownstream() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Changes upstream signal +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ChangeUpstreamSignal( TUint aSetMask, TUint aClearMask ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ChangeUpstreamSignal()" ) )); + if ( iNetwork ) + { + iNetwork->SetSignals( aSetMask, aClearMask ); + } + // Add other cases here if necessary + FTRACE(FPrint( _L("CDunSignalCopy::ChangeUpstreamSignal() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Changes downstream signal +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::ChangeDownstreamSignal( TUint aSetMask, TUint aClearMask ) + { + FTRACE(FPrint( _L("CDunSignalCopy::ChangeDownstreamSignal()" ) )); + if ( iComm ) + { + iComm->SetSignals( aSetMask, aClearMask ); + } + // Add other cases here if necessary + FTRACE(FPrint( _L("CDunSignalCopy::ChangeDownstreamSignal() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when line status changes +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::RunL() + { + FTRACE(FPrint( _L("CDunSignalCopy::RunL()" ) )); + iSignalCopyState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunSignalCopy::RunL() (failed) complete (%d)"), retTemp)); + TInt i; + TInt count = iCallbacks.Count(); + TDunConnectionReason connReason; + connReason.iReasonType = EDunReasonTypeRunL; + connReason.iContext = iContextInUse; + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = EDunDirectionUndefined; + connReason.iErrorCode = retTemp; + for ( i=0; iNotifyProgressChangeL( iComm, connReason ) ); + } + return; + } + FTRACE(FPrint( _L("CDunSignalCopy::RunL() managing signal 0x%08X" ), iSignals )); + ManageSignalChange(); + FTRACE(FPrint( _L("CDunSignalCopy::RunL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunSignalCopy::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunSignalNotify.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunSignalNotify.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,385 @@ +/* +* Copyright (c) 2006-2010 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: Monitors signal changes on network side and reports changes +* +*/ + + +#ifdef PRJ_USE_NETWORK_STUBS +#include +#else +#include +#endif +#include "DunTransporter.h" +#include "DunSignalNotify.h" +#include "DunDebug.h" + +const TUint KDunSixLowestBitsMask = 0x3F; // Symbian magic + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunSignalNotify* CDunSignalNotify::NewL( MDunTransporterUtilityAux* aUtility ) + { + CDunSignalNotify* self = new (ELeave) CDunSignalNotify( aUtility ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDunSignalNotify::~CDunSignalNotify() + { + FTRACE(FPrint( _L("CDunSignalNotify::~CDunSignalNotify()") )); + ResetData(); + FTRACE(FPrint( _L("CDunSignalNotify::~CDunSignalNotify() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::ResetData() + { + FTRACE(FPrint( _L("CDunSignalNotify::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // AddCallback() + iCallbacks.Close(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunSignalNotify::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Adds callback for line status change controlling +// The callback will be called when line status change is detected in +// endpoint +// --------------------------------------------------------------------------- +// +TInt CDunSignalNotify::AddCallback( MDunConnMon* aCallback ) + { + FTRACE(FPrint( _L("CDunSignalNotify::AddCallback()" ) )); + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunSignalNotify::AddCallback() (ERROR) complete" ) )); + return KErrGeneral; + } + TInt retTemp = iCallbacks.Find( aCallback ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunSignalNotify::AddCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = iCallbacks.Append( aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunSignalNotify::AddCallback() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunSignalNotify::AddCallback() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to use for this endpoint monitor +// --------------------------------------------------------------------------- +// +TInt CDunSignalNotify::SetMedia( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunSignalNotify::SetMedia()" ))); + if ( !aComm ) + { + FTRACE(FPrint( _L("CDunSignalNotify::SetMedia() (aComm) not initialized!" ))); + return KErrGeneral; + } + // As it's not possible to listen for RFCOMM signal changes the RTS and DTR + // signals should be anyway set high to Dataport + aComm->SetSignals( KSignalRTS|KSignalDTR, 0 ); + // Next check if signal change notification from Dataport supported + TCommCaps2 caps; + aComm->Caps( caps ); + if ( !(caps().iNotificationCaps & KNotifySignalsChangeSupported) ) + { + FTRACE(FPrint( _L("CDunSignalNotify::SetMedia() (RComm) (not supported) complete" ))); + return KErrNotSupported; + } + iListenSignals = KSignalDTEInputs; + iNetwork = aComm; + FTRACE(FPrint( _L("CDunSignalNotify::SetMedia() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Issues request to start monitoring the endpoint for line status change +// --------------------------------------------------------------------------- +// +TInt CDunSignalNotify::IssueRequest() + { + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest()" ))); + if ( iSignalNotifyState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iNetwork ) + { + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() (iNetwork) not initialized!" ) )); + return KErrGeneral; + } + TUint currentSignals = iNetwork->Signals( iListenSignals ); + TUint oldSignalsLow = iSignals & KDunSixLowestBitsMask; + TUint newSignalsLow = currentSignals & KDunSixLowestBitsMask; + TUint oldSignalsHigh = oldSignalsLow * KSignalChanged; + TUint newSignalsHigh = newSignalsLow * KSignalChanged; + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() oldSignalsLow=0x%08X" ), oldSignalsLow )); + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() newSignalsLow=0x%08X" ), newSignalsLow )); + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() oldSignalsHigh=0x%08X" ), oldSignalsHigh )); + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() newSignalsHigh=0x%08X" ), newSignalsHigh )); + if ( newSignalsLow != oldSignalsLow ) + { + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() signals already set..." ) )); + iSignals = newSignalsLow | (oldSignalsHigh ^ newSignalsHigh); + ManageSignalChange(); + } + else + { + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() start waiting for change..." ) )); + iStatus = KRequestPending; + iNetwork->NotifySignalChange( iStatus, iSignals, iListenSignals ); + SetActive(); + iSignalNotifyState = EDunStateSignalNotify; + } + FTRACE(FPrint( _L("CDunSignalNotify::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops monitoring the endpoint for line status change +// --------------------------------------------------------------------------- +// +TInt CDunSignalNotify::Stop() + { + FTRACE(FPrint( _L("CDunSignalNotify::Stop()" ))); + if ( iSignalNotifyState != EDunStateSignalNotify ) + { + FTRACE(FPrint( _L("CDunSignalNotify::Stop() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iNetwork ) + { + FTRACE(FPrint( _L("CDunSignalNotify::Stop() (iNetwork) not initialized!" ))); + return KErrGeneral; + } + iNetwork->NotifySignalChangeCancel(); + Cancel(); + iSignalNotifyState = EDunStateIdle; + FTRACE(FPrint( _L("CDunSignalNotify::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunSignalNotify::CDunSignalNotify +// --------------------------------------------------------------------------- +// +CDunSignalNotify::CDunSignalNotify( MDunTransporterUtilityAux* aUtility ) : + CActive( EPriorityHigh ), + iUtility( aUtility ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunSignalNotify::ConstructL +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::ConstructL() + { + FTRACE(FPrint( _L("CDunSignalNotify::ConstructL()" ) )); + if ( !iUtility ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunSignalNotify::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::Initialize() + { + FTRACE(FPrint( _L("CDunSignalNotify::Initialize()" ) )); + // Don't initialize iUtility here (it is set through NewL) + iSignalNotifyState = EDunStateIdle; + iListenSignals = 0; + iSignals = 0; + iNetwork = NULL; + FTRACE(FPrint( _L("CDunSignalNotify::Initialize() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Manages signal changes +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::ManageSignalChange() + { + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange()" ) )); + // The following signals are input signals from network side: + // KSignalDTEInputs = KSignalCTS | KSignalDSR | KSignalDCD | KSignalRNG + if ( iSignals & KCTSChanged ) + { + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() checking CTS..." ) )); + if ( iSignals & KSignalCTS ) // CTS changed to high + { + ReportSignalChange( KSignalCTS, 0 ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() CTS changed high" ) )); + } + else // CTS changed to low + { + ReportSignalChange( 0, KSignalCTS ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() CTS changed low" ) )); + } + } + if ( iSignals & KDSRChanged ) + { + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() checking DSR..." ) )); + if ( iSignals & KSignalDSR ) // DSR changed to high + { + ReportSignalChange( KSignalDSR, 0 ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() DSR changed high" ) )); + } + else // DSR changed to low + { + ReportSignalChange( 0, KSignalDSR ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() DSR changed low" ) )); + } + } + if ( iSignals & KDCDChanged ) + { + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() checking DCD..." ) )); + if ( iSignals & KSignalDCD ) // DCD changed to high + { + ReportSignalChange( KSignalDCD, 0 ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() DCD changed high" ) )); + } + else // DCD changed to low + { + ReportSignalChange( 0, KSignalDCD ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() DCD changed low" ) )); + } + } + if ( iSignals & KRNGChanged ) + { + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() checking RNG..." ) )); + if ( iSignals & KSignalRNG ) // RNG changed to high + { + ReportSignalChange( KSignalRNG, 0 ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() RNG changed high" ) )); + } + else // RNG changed to low + { + ReportSignalChange( 0, KSignalRNG ); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() RNG changed low" ) )); + } + } + IssueRequest(); + FTRACE(FPrint( _L("CDunSignalNotify::ManageSignalChange() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Reports signal change +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::ReportSignalChange( TUint aSetMask, TUint aClearMask ) + { + FTRACE(FPrint( _L("CDunSignalNotify::ReportSignalChange()" ) )); + + TUint signalType = aClearMask; + TUint signalHigh = EFalse; + if ( aSetMask != 0 ) + { + signalType = aSetMask; + signalHigh = ETrue; + } + TInt i; + TInt count = iCallbacks.Count(); + TDunConnectionReason connReason; + TConnId localId = iUtility->GetLocalId( iNetwork ); + connReason.iReasonType = EDunReasonTypeSignal; + connReason.iContext = EDunMediaContextNetwork; + connReason.iSignalType = signalType; + connReason.iSignalHigh = signalHigh; + connReason.iDirection = EDunDirectionUndefined; + connReason.iErrorCode = KErrNone; + for ( i=0; iNotifyProgressChangeL( localId, connReason ) ); + } + + FTRACE(FPrint( _L("CDunSignalNotify::ReportSignalChange() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when line status changes +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::RunL() + { + FTRACE(FPrint( _L("CDunSignalNotify::RunL()" ) )); + iSignalNotifyState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + TInt i; + TInt count = iCallbacks.Count(); + TDunConnectionReason connReason; + TConnId localId = iUtility->GetLocalId( iNetwork ); + connReason.iReasonType = EDunReasonTypeRunL; + connReason.iContext = EDunMediaContextNetwork; + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = EDunDirectionUndefined; + connReason.iErrorCode = retTemp; + for ( i=0; iNotifyProgressChangeL( localId, connReason ) ); + } + return; + } + FTRACE(FPrint( _L("CDunSignalNotify::RunL() managing signal 0x%08X" ), iSignals )); + ManageSignalChange(); + FTRACE(FPrint( _L("CDunSignalNotify::RunL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunSignalNotify::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunSignalWaiter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunSignalWaiter.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2006-2007 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: Monitors for new data in RComm local media side +* +*/ + + +#ifdef PRJ_USE_NETWORK_STUBS +#include +#else +#include +#endif +#include "DunTransporter.h" +#include "DunSignalWaiter.h" +#include "DunSignalCopy.h" +#include "DunDebug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunSignalWaiter* CDunSignalWaiter::NewL( MDunChannelAllocator* aChannelCallback ) + { + CDunSignalWaiter* self = new (ELeave) CDunSignalWaiter( aChannelCallback ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunSignalWaiter::~CDunSignalWaiter() + { + FTRACE(FPrint( _L("CDunSignalWaiter::~CDunSignalWaiter()") )); + ResetData(); + FTRACE(FPrint( _L("CDunSignalWaiter::~CDunSignalWaiter() complete") )); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunSignalWaiter::ResetData() + { + FTRACE(FPrint( _L("CDunSignalWaiter::ResetData()") )); + // APIs affecting this: + // IssueRequest() + Stop(); + // AddConnMonCallbackL() + iCallbacks.Close(); + // Internal + Initialize(); + FTRACE(FPrint( _L("CDunSignalWaiter::ResetData() complete") )); + } + +// --------------------------------------------------------------------------- +// Adds callback for RunL error controlling +// The callback will be called when error is detected in asynchronous +// operation +// --------------------------------------------------------------------------- +// +TInt CDunSignalWaiter::AddCallback( MDunConnMon* aCallback ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::AddCallback()" ) )); + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::AddCallback() (ERROR) complete" ) )); + return KErrGeneral; + } + TInt retTemp = iCallbacks.Find( aCallback ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::AddCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = iCallbacks.Append( aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::AddCallback() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunSignalWaiter::AddCallback() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to use for this endpoint +// --------------------------------------------------------------------------- +// +TInt CDunSignalWaiter::SetMedia( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::SetMedia(RComm) (addr=0x%08X)" ), aComm)); + if ( !aComm ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::SetMedia() (aComm) not initialized!" ))); + return KErrGeneral; + } + TCommCaps2 caps; + aComm->Caps( caps ); + if ( !(caps().iNotificationCaps & KNotifySignalsChangeSupported) ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::SetMedia() (RComm) (not supported) complete" ))); + return KErrNotSupported; + } + iComm = aComm; + FTRACE(FPrint( _L("CDunSignalWaiter::SetMedia() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Issues request to start waiting for new data in RComm +// --------------------------------------------------------------------------- +// +TInt CDunSignalWaiter::IssueRequest() + { + FTRACE(FPrint( _L("CDunSignalWaiter::IssueRequest()" ))); + if ( iSignalWaiterState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::IssueRequest() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iComm ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::IssueRequest() (iComm) not initialized!" ) )); + return KErrGeneral; + } + iStatus = KRequestPending; + iComm->NotifySignalChange( iStatus, iSignals, KSignalDCEInputs ); + SetActive(); + iSignalWaiterState = EDunStateSignalWaiting; + FTRACE(FPrint( _L("CDunSignalWaiter::IssueRequest() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops monitoring for new data +// --------------------------------------------------------------------------- +// +TInt CDunSignalWaiter::Stop() + { + FTRACE(FPrint( _L("CDunSignalWaiter::Stop()" ))); + if ( iSignalWaiterState != EDunStateSignalWaiting ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::Stop() (not ready) complete" ))); + return KErrNotReady; + } + if ( !iComm ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::Stop() (iComm) not initialized!" ))); + return KErrGeneral; + } + iComm->NotifySignalChangeCancel(); + Cancel(); + iSignalWaiterState = EDunStateIdle; + FTRACE(FPrint( _L("CDunSignalWaiter::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CDunSignalWaiter::CDunSignalWaiter +// --------------------------------------------------------------------------- +// +CDunSignalWaiter::CDunSignalWaiter( MDunChannelAllocator* aChannelCallback ) : + CActive( EPriorityHigh ), + iChannelCallback( aChannelCallback ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunSignalWaiter::ConstructL +// --------------------------------------------------------------------------- +// +void CDunSignalWaiter::ConstructL() + { + FTRACE(FPrint( _L("CDunSignalWaiter::ConstructL()" ) )); + if ( !iChannelCallback ) + { + User::Leave( KErrGeneral ); + } + CActiveScheduler::Add( this ); + FTRACE(FPrint( _L("CDunSignalWaiter::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunSignalWaiter::Initialize() + { + FTRACE(FPrint( _L("CDunSignalWaiter::Initialize()" ) )); + // Don't initialize iChannelCallback here (it is set through NewL) + iSignalWaiterState = EDunStateIdle; + iSignals = 0; + iComm = NULL; + FTRACE(FPrint( _L("CDunSignalWaiter::Initialize() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when signals changed in RComm object +// --------------------------------------------------------------------------- +// +void CDunSignalWaiter::RunL() + { + FTRACE(FPrint( _L("CDunSignalWaiter::RunL()" ) )); + iSignalWaiterState = EDunStateIdle; + TInt retTemp = iStatus.Int(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunSignalWaiter::RunL() (failed) complete (%d)"), retTemp)); + TInt count = iCallbacks.Count(); + TDunConnectionReason connReason; + connReason.iReasonType = EDunReasonTypeRunL; + connReason.iContext = EDunMediaContextLocal; + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = EDunDirectionUndefined; + connReason.iErrorCode = retTemp; + for ( TInt i=0; iNotifyProgressChangeL( iComm, connReason ) ); + } + return; + } + if ( iChannelCallback ) + { + iChannelCallback->NotifyNewChannelRequest( iComm ); + } + FTRACE(FPrint( _L("CDunSignalWaiter::RunL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunSignalWaiter::DoCancel() + { + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunStream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunStream.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,320 @@ +/* +* Copyright (c) 2007 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: Definitions needed for common stream functionality +* +*/ + + +/* + * TODO: When local media is of type RComm, listening on it is started with + * RComm::NotifyDataAvailable() call. Check that USB ACM port and Irda RCOMM + * (and any other new media in the future) behaves correctly so that when + * RComm::ReadOneOrMore() is issued, the read is issued immediately without + * checking for new data. If waiting for new data happens in this + * NotifyDataAvailable/ReadOneOrMore combination, raise a defect to Symbian. + */ + +#include "DunStream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunStream::~CDunStream() + { + FTRACE(FPrint( _L("CDunStream::~CDunStream()" ))); + ResetData(); + FTRACE(FPrint( _L("CDunStream::~CDunStream() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunStream::ResetData() + { + // APIs affecting this: + // AddConnMonCallback() + iCallbacksR.Close(); + iCallbacksW.Close(); + // AddSkippedError() + iOkErrorsR.Close(); + iOkErrorsW.Close(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Adds error code to consider as "no error" to either endpoint +// --------------------------------------------------------------------------- +// +TInt CDunStream::AddSkippedError( TInt aError, + TDunOperationType aOperationType ) + { + FTRACE(FPrint( _L("CDunStream::AddSkippedError()" ) )); + RArray* okErrors = NULL; + if ( aOperationType == EDunOperationTypeRead ) + { + okErrors = &iOkErrorsR; + } + else if ( aOperationType == EDunOperationTypeWrite ) + { + okErrors = &iOkErrorsW; + } + else + { + FTRACE(FPrint( _L("CDunStream::AddSkippedError() (ERROR) complete" ) )); + return KErrGeneral; + } + if ( aError >= 0 ) // errors can't be >= 0 + { + FTRACE(FPrint( _L("CDunStream::AddSkippedError() (ERROR) complete" ) )); + return KErrGeneral; + } + TInt retTemp = okErrors->Find( aError ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunStream::AddSkippedError() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = okErrors->Append( aError ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunStream::AddSkippedError() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunStream::AddSkippedError() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Adds callback for line status change controlling +// The callback will be called when serious read error is detected +// --------------------------------------------------------------------------- +// +TInt CDunStream::AddConnMonCallback( MDunConnMon* aCallback, + TDunOperationType aOperationType ) + { + FTRACE(FPrint( _L("CDunStream::AddConnMonCallback()" ) )); + RPointerArray* callbacks = NULL; + if ( aOperationType == EDunOperationTypeRead ) + { + callbacks = &iCallbacksR; + } + else if ( aOperationType == EDunOperationTypeWrite ) + { + callbacks = &iCallbacksW; + } + else + { + FTRACE(FPrint( _L("CDunStream::AddConnMonCallback() (ERROR) complete" ) )); + return KErrGeneral; + } + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunStream::AddConnMonCallback() (aCallback) not initialized!" ) )); + return KErrGeneral; + } + TInt retTemp = callbacks->Find( aCallback ); + if ( retTemp != KErrNotFound ) + { + FTRACE(FPrint( _L("CDunStream::AddCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + retTemp = callbacks->Append( aCallback ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunStream::AddCallback() (append failed!) complete" ) )); + return retTemp; + } + FTRACE(FPrint( _L("CDunStream::AddCallback() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets buffering for this stream +// --------------------------------------------------------------------------- +// +TInt CDunStream::SetBuffering( TPtr8* aBufferPtr ) + { + FTRACE(FPrint( _L("CDunStream::SetBuffering()" ) )); + if ( !aBufferPtr ) + { + FTRACE(FPrint( _L("CDunStream::SetBuffering() (aBufferPtr) not initialized!" ) )); + return KErrGeneral; + } + if ( iBufferPtr ) + { + FTRACE(FPrint( _L("CDunStream::SetBuffering() (already exists) complete" ) )); + return KErrAlreadyExists; + } + iBufferPtr = aBufferPtr; + FTRACE(FPrint( _L("CDunStream::SetBuffering() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to use for this endpoint +// --------------------------------------------------------------------------- +// +TInt CDunStream::SetMedia( RComm* aComm, TDunMediaContext aMediaContext ) + { + FTRACE(FPrint( _L("CDunStream::SetMedia() (RComm)" ) )); + if ( !aComm ) + { + FTRACE(FPrint( _L("CDunStream::SetMedia() (RComm) (aComm not initialized!) complete" ) )); + return KErrGeneral; + } + if ( aMediaContext == EDunMediaContextNetwork ) + { + iNetwork = aComm; + } + else if ( aMediaContext == EDunMediaContextLocal ) + { + iComm = aComm; + } + else + { + FTRACE(FPrint( _L("CDunStream::SetMedia() (RComm) (ERROR) complete" ))); + return KErrGeneral; + } + FTRACE(FPrint( _L("CDunStream::SetMedia() (RComm) complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets media to use for this endpoint +// --------------------------------------------------------------------------- +// +TInt CDunStream::SetMedia( RSocket* aSocket, + TDunMediaContext aMediaContext ) + { + FTRACE(FPrint( _L("CDunStream::SetMedia() (RSocket)" ) )); + if ( !aSocket ) + { + FTRACE(FPrint( _L("CDunStream::SetMedia() (RSocket) (aSocket not initialized!) complete" ) )); + return KErrGeneral; + } + if ( aMediaContext == EDunMediaContextLocal ) + { + iSocket = aSocket; + } + else + { + FTRACE(FPrint( _L("CDunStream::SetMedia() (RSocket) (not supported) complete" ) )); + return KErrNotSupported; + } + FTRACE(FPrint( _L("CDunStream::SetMedia() (RSocket) complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Gets media context +// --------------------------------------------------------------------------- +// +TDunMediaContext CDunStream::GetMediaContext( TDunStreamType aStreamType ) + { + FTRACE(FPrint( _L("CDunStream::GetMediaContext()" ) )); + if ( aStreamType == EDunStreamTypeUpstream ) + { + if ( iOperationType == EDunOperationTypeRead ) + { + return EDunMediaContextLocal; + } + else if ( iOperationType == EDunOperationTypeWrite ) + { + return EDunMediaContextNetwork; + } + else + { + return EDunMediaContextUndefined; + } + } + else if ( aStreamType == EDunStreamTypeDownstream ) + { + if ( iOperationType == EDunOperationTypeRead ) + { + return EDunMediaContextNetwork; + } + else if ( iOperationType == EDunOperationTypeWrite ) + { + return EDunMediaContextLocal; + } + else + { + return EDunMediaContextUndefined; + } + } + FTRACE(FPrint( _L("CDunStream::GetMediaContext() complete" ) )); + return EDunMediaContextUndefined; + } + +// --------------------------------------------------------------------------- +// Check whether an error code is severe error or not +// --------------------------------------------------------------------------- +// +TInt CDunStream::ProcessErrorCondition( TInt aError, TBool& aIsError ) + { + FTRACE(FPrint( _L("CDunStream::ProcessErrorCondition() (Dir=%d)" ), iDirection)); + aIsError = EFalse; + if ( aError != KErrNone ) + { + aIsError = ETrue; + RArray* okErrors = NULL; + if ( iOperationType == EDunOperationTypeRead ) + { + okErrors = &iOkErrorsR; + } + else // iOperationType == EDunOperationTypeWrite + { + okErrors = &iOkErrorsW; + } + TInt retTemp = okErrors->Find( aError ); + if ( retTemp == KErrNotFound ) + { + FTRACE(FPrint( _L("CDunStream::ProcessErrorCondition() (Dir=%d) (%d=ETrue) complete" ), iDirection, aError)); + return ETrue; + } + } + FTRACE(FPrint( _L("CDunStream::ProcessErrorCondition() (Dir=%d) (%d=EFalse) complete" ), iDirection, aError)); + return EFalse; + } + +// --------------------------------------------------------------------------- +// CDunStream::CDunStream +// --------------------------------------------------------------------------- +// +CDunStream::CDunStream() : CActive( EPriorityHigh ) + { + Initialize(); + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunStream::Initialize() + { + // Don't initialize iUtility here (it is set through NewL) + iBufferPtr = NULL; + iReadLengthSocket = 0; + iOperationType = EDunOperationTypeUndefined; + iTransferState = EDunStateIdle; + iDirection = EDunDirectionUndefined; + iNetwork = NULL; + iSocket = NULL; + iComm = NULL; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunTransUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunTransUtils.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1077 @@ +/* +* Copyright (c) 2006-2010 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: Utility class for other CDunTransporter classes +* +*/ + + +#include +#include +#include "dundomainpskeys.h" +#include "DunTransUtils.h" +#include "DunDataWaiter.h" +#include "DunUpstream.h" +#include "DunDownstream.h" +#include "DunSignalCopy.h" +#include "DunSignalNotify.h" +#include "DunNoteHandler.h" +#include "DunUtils.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunTransUtils* CDunTransUtils::NewL( CDunTransporter& aParent, + MDunPluginManager* aPluginManager ) + { + CDunTransUtils* self = new (ELeave) CDunTransUtils( aParent, + aPluginManager ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunTransUtils::~CDunTransUtils() + { + FTRACE(FPrint( _L("CDunTransUtils::~CDunTransUtils()" ))); + FTRACE(FPrint( _L("CDunTransUtils::~CDunTransUtils() complete" ))); + } + +// --------------------------------------------------------------------------- +// CDunTransUtils::CDunTransUtils +// --------------------------------------------------------------------------- +// +CDunTransUtils::CDunTransUtils( CDunTransporter& aParent, + MDunPluginManager* aPluginManager ) : + iParent( aParent ), + iChannelData( aParent.iChannelData ), + iServAdvData( aParent.iServAdvData ), + iPluginManager( aPluginManager ) + { + } + +// --------------------------------------------------------------------------- +// CDunTransUtils::ConstructL +// --------------------------------------------------------------------------- +// +void CDunTransUtils::ConstructL() + { + FTRACE(FPrint( _L("CDunTransUtils::ConstructL()" ))); + if ( !iPluginManager ) + { + User::Leave( KErrGeneral ); + } + FTRACE(FPrint( _L("CDunTransUtils::ConstructL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Manages service advertisement status changes +// --------------------------------------------------------------------------- +// +void CDunTransUtils::ManageAdvertisementStatusChange( TBool aAdvertise, + TBool aCreation ) + { + FTRACE(FPrint( _L("CDunTransUtils::ManageAdvertisementStatusChange()" ))); + TInt i; + TInt count; + iParent.iAdvertise = aAdvertise; + count = iServAdvData.Count(); + for ( i=0; iNotifyAdvertisementStart( aCreation ); + } + else + { + servAdvData.iServAdvMon->NotifyAdvertisementEnd(); + } + } + } + FTRACE(FPrint( _L("CDunTransUtils::ManageAdvertisementStatusChange() complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates empty channel data +// --------------------------------------------------------------------------- +// +void CDunTransUtils::CreateEmptyChannelData( TDunChannelData& aChannel ) + { + FTRACE(FPrint( _L("CDunTransUtils::CreateEmptyChannelData()" ))); + aChannel.iNetwork = NULL; + aChannel.iComm = NULL; + aChannel.iSocket = NULL; + aChannel.iChannelName = NULL; + aChannel.iUpstreamRW = NULL; + aChannel.iDownstreamRW = NULL; + aChannel.iBufferUpstream = NULL; + aChannel.iBufferDownstream = NULL; + aChannel.iBufferUpPtr = NULL; + aChannel.iBufferDownPtr = NULL; + aChannel.iUpstreamSignalCopy = NULL; + aChannel.iDownstreamSignalCopy = NULL; + aChannel.iSignalNotify = NULL; + aChannel.iOwnerUid = TUid::Null(); + aChannel.iChannelInUse = EFalse; + FTRACE(FPrint( _L("CDunTransUtils::CreateEmptyChannelData() complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates new buffer if source buffer defined, otherwise already existing +// buffer will be used +// --------------------------------------------------------------------------- +// +void CDunTransUtils::DoCreateBufferLC( TUint8* aSrcBuffer, + TPtr8* aSrcPtr, + TUint8*& aDstBuffer, + TPtr8*& aDstPtr, + TInt aBufferLength, + TInt& aItemsInCs ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoCreateBufferLC()" ))); + TUint8* buffer; + if ( !aSrcBuffer ) + { + buffer = new (ELeave) TUint8[aBufferLength]; + CleanupStack::PushL( buffer ); + aItemsInCs++; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateBufferLC() new created" ))); + } + else + { + buffer = aSrcBuffer; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateBufferLC() existing set" ))); + } + TPtr8* bufferPtr; + if ( !aSrcPtr ) + { + bufferPtr = new (ELeave) TPtr8( buffer, aBufferLength, aBufferLength ); + CleanupStack::PushL( bufferPtr ); + aItemsInCs++; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateBufferLC() new created" ))); + } + else + { + bufferPtr = aSrcPtr; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateBufferLC() existing set" ))); + } + aDstBuffer = buffer; + aDstPtr = bufferPtr; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateBufferLC() complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates new signal copy object if source defined, otherwise already +// existing will be used +// --------------------------------------------------------------------------- +// +void CDunTransUtils::DoCreateSignalCopyLC( CDunSignalCopy* aSrcSignalCopy, + CDunSignalCopy*& aDstSignalCopy, + TInt& aItemsInCs ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalCopyLC()" ))); + CDunSignalCopy* signalCopy; + if ( !aSrcSignalCopy ) + { + signalCopy = CDunSignalCopy::NewL(); + CleanupStack::PushL( signalCopy ); + aItemsInCs++; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalCopyLC() new created" ))); + } + else + { + signalCopy = aSrcSignalCopy; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalCopyLC() existing set" ))); + } + aDstSignalCopy = signalCopy; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalCopyLC() complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates new signal notify object if source defined, otherwise already +// existing will be used +// --------------------------------------------------------------------------- +// +void CDunTransUtils::DoCreateSignalNotifyLC( + CDunSignalNotify* aSrcSignalNotify, + CDunSignalNotify*& aDstSignalNotify, + TInt& aItemsInCs ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalNotifyLC()" ))); + CDunSignalNotify* signalNotify; + if ( !aSrcSignalNotify ) + { + signalNotify = CDunSignalNotify::NewL( this ); + CleanupStack::PushL( signalNotify ); + aItemsInCs++; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalNotifyLC() new created" ))); + } + else + { + signalNotify = aSrcSignalNotify; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalNotifyLC() existing set" ))); + } + aDstSignalNotify = signalNotify; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateSignalNotifyLC() complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates transfer objects for reader and writer if sources defined, +// otherwise already existing ones will be used +// --------------------------------------------------------------------------- +// +void CDunTransUtils::DoCreateUpTransferObjectL( CDunUpstream* aSrcReader, + CDunUpstream*& aDstReader, + TInt& aItemsInCs ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoCreateUpTransferObjectL()" ))); + CDunUpstream* dunReader; + if ( !aSrcReader ) + { + dunReader = CDunUpstream::NewL( this ); + CleanupStack::PushL( dunReader ); + aItemsInCs++; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateUpTransferObjectL() new created" ))); + } + else + { + dunReader = aSrcReader; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateUpTransferObjectL() existing set" ))); + } + aDstReader = dunReader; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateUpTransferObjectL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates transfer objects for reader and writer if sources defined, +// otherwise already existing ones will be used +// --------------------------------------------------------------------------- +// +void CDunTransUtils::DoCreateDownTransferObjectL( CDunDownstream* aSrcReader, + CDunDownstream*& aDstReader, + TInt& aItemsInCs ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoCreateDownTransferObjectL()" ))); + CDunDownstream* dunReader; + if ( !aSrcReader ) + { + dunReader = CDunDownstream::NewL( this ); + CleanupStack::PushL( dunReader ); + aItemsInCs++; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateDownTransferObjectL() new created" ))); + } + else + { + dunReader = aSrcReader; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateDownTransferObjectL() existing set" ))); + } + aDstReader = dunReader; + FTRACE(FPrint( _L("CDunTransUtils::DoCreateDownTransferObjectL() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets/frees network data of aIndex:th channel +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DeleteOneNetworkData( TInt aIndex ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneNetworkData()" ))); + + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneNetworkData (not found) complete" ))); + return KErrNotFound; + } + + TDunChannelData& channelData = iChannelData[aIndex]; + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneNetworkData() (channel not found) complete" ), aIndex)); + return KErrGeneral; + } + + // channelData.iDownstreamSignalCopy may or may not exist (optional) + // channelData.iSignalNotify may or may not exist (optional) + delete channelData.iDownstreamSignalCopy; + channelData.iDownstreamSignalCopy = NULL; + delete channelData.iSignalNotify; + channelData.iSignalNotify = NULL; + delete channelData.iDownstreamRW; + channelData.iDownstreamRW = NULL; + + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneNetworkData complete()" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Resets/frees network data of aIndex:th channel +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DeleteOneLocalData( TInt aIndex ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneLocalData()" ))); + + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneLocalData() (not found) complete" ))); + return KErrNotFound; + } + + TDunChannelData& channelData = iChannelData[aIndex]; + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneLocalData() (channel not found) complete" ), aIndex)); + return KErrGeneral; + } + + // channelData.iUpstreamSignalCopy may or may not exist (optional) + delete channelData.iUpstreamSignalCopy; + channelData.iUpstreamSignalCopy = NULL; + delete channelData.iUpstreamRW; + channelData.iUpstreamRW = NULL; + + FTRACE(FPrint( _L("CDunTransUtils::DeleteOneLocalData() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Deletes buffering objects of aIndex:th channel +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DeleteBuffering( TInt aIndex ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteBuffering()" ))); + + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteBuffering() (not found) complete" ))); + return KErrNotFound; + } + TDunChannelData& channelData = iChannelData[aIndex]; + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DeleteBuffering() (channel not found) complete" ), aIndex)); + return KErrGeneral; + } + + delete channelData.iChannelName; + channelData.iChannelName = NULL; + delete channelData.iBufferUpstream; + channelData.iBufferUpstream = NULL; + delete channelData.iBufferDownstream; + channelData.iBufferDownstream = NULL; + delete channelData.iBufferUpPtr; + channelData.iBufferUpPtr = NULL; + delete channelData.iBufferDownPtr; + channelData.iBufferDownPtr = NULL; + + FTRACE(FPrint( _L("CDunTransUtils::DeleteBuffering() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Initializes first free channel +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::InitializeFirstFreeChannel( TConnId aLocalIdNew ) + { + FTRACE(FPrint( _L("CDunTransUtils::InitializeFirstFreeChannel()" ))); + TInt i; + TInt count; + TInt retTemp; + TInt firstFree = KErrNotFound; + count = iChannelData.Count(); + for ( i=0; i= 0 ) + { + FTRACE(FPrint( _L("CDunTransUtils::InitializeFirstFreeChannel() complete" ))); + return i; + } + // Free channel not found, now create new if possible + TDunChannelData emptyChannel; + CreateEmptyChannelData( emptyChannel ); + retTemp = iChannelData.Append( emptyChannel ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransUtils::InitializeFirstFreeChannel() (append failed!) complete" ))); + return retTemp; + } + FTRACE(FPrint( _L("CDunTransUtils::InitializeFirstFreeChannel() complete" ))); + return i; + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtility. +// Allocates a channel by creating and setting local media independent +// objects +// This is a common method used by exported local media dependent methods +// --------------------------------------------------------------------------- +// +void CDunTransUtils::DoAllocateChannelL( RComm* aComm, + TInt& aBufferLength, + TInt aFirstFree, + MDunBufferCorrection* aCorrection ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL()" ))); + TInt retTemp; + TInt itemsInCs = 0; + + if ( !iParent.iNetwork ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() (iNetwork) not initialized!" ))); + User::Leave( KErrGeneral ); + } + + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() aFirstFree = %d" ), aFirstFree)); + + // Allocate network channel + RComm* networkEntity; + retTemp = iParent.iNetwork->AllocateChannel( networkEntity ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() network allocation failed" ))); + if ( retTemp == KErrTooBig ) + { + // Start to show note + if ( iParent.iNoteHandler ) + { + iParent.iNoteHandler->IssueRequest(); + } + // Set flag to indicate that advertisement is not possible anymore + ManageAdvertisementStatusChange( EFalse ); + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() (too big) complete" ))); + User::Leave( KErrTooBig ); + } + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() (ERROR) complete" ))); + User::Leave( KErrGeneral ); + } + + TInt currentLength = networkEntity->ReceiveBufferLength(); + TInt newLength = currentLength; + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() buffer length before = %d" ), currentLength)); + if ( aCorrection ) + { + // Get network side buffer length and request change if required. + // Check "newlength>currentLength" here as it is not possible to + // increase Dataport's buffer length + newLength = aCorrection->NotifyBufferCorrection( currentLength ); + if ( newLength<=0 || newLength>currentLength ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() unknown buffer length" ))); + User::Leave( KErrGeneral ); + } + // It is not possible to set Dataport side receive buffer length to any + // arbitrary value (currently only 8kB..20kB are supported but that + // can't be queried via an API). So here only default buffer size will + // be used from Dataport while this component's local buffering uses + // Dataport's default buffer size if not adjusted via plugin side. + // NOTE: If Dataport side starts to support arbitrary receive buffer + // size, it should be changed here if newLength != currentLength. + } + aBufferLength = newLength; + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() buffer length after = %d" ), newLength)); + + // Get channel data + + TDunChannelData& channelData = iChannelData[aFirstFree]; + + // Create buffers and set length + + TUint8* bufferUpstream; + TPtr8* bufferUpPtr; + DoCreateBufferLC( channelData.iBufferUpstream, + channelData.iBufferUpPtr, + bufferUpstream, + bufferUpPtr, + newLength, + itemsInCs ); + + TUint8* bufferDownstream; + TPtr8* bufferDownPtr; + DoCreateBufferLC( channelData.iBufferDownstream, + channelData.iBufferDownPtr, + bufferDownstream, + bufferDownPtr, + newLength, + itemsInCs ); + + // Create signal copy objects + + CDunSignalCopy* upstreamCopy = channelData.iUpstreamSignalCopy; + CDunSignalCopy* downstreamCopy = channelData.iDownstreamSignalCopy; + if ( aComm ) + { + DoCreateSignalCopyLC( channelData.iUpstreamSignalCopy, + upstreamCopy, + itemsInCs ); + DoCreateSignalCopyLC( channelData.iDownstreamSignalCopy, + downstreamCopy, + itemsInCs ); + retTemp = upstreamCopy->SetMedia( aComm, + networkEntity, + EDunStreamTypeUpstream ); + if ( retTemp != KErrNone ) + { + delete upstreamCopy; + upstreamCopy = NULL; + } + retTemp = downstreamCopy->SetMedia( aComm, + networkEntity, + EDunStreamTypeDownstream ); + if ( retTemp != KErrNone ) + { + delete downstreamCopy; + downstreamCopy = NULL; + } + } + + // Create signal notify objects + + CDunSignalNotify* signalNotify = channelData.iSignalNotify; + if ( !aComm ) // RSocket + { + DoCreateSignalNotifyLC( channelData.iSignalNotify, + signalNotify, + itemsInCs ); + retTemp = signalNotify->SetMedia( networkEntity ); + if ( retTemp != KErrNone ) + { + delete signalNotify; + signalNotify = NULL; + } + } + + // Create upstream objects + + CDunUpstream* upstreamRW; + DoCreateUpTransferObjectL( channelData.iUpstreamRW, + upstreamRW, + itemsInCs ); + upstreamRW->SetBuffering( bufferUpPtr ); + upstreamRW->SetMedia( networkEntity, EDunMediaContextNetwork ); + upstreamRW->SetActivityCallback( this ); + + // Create downstream objects + + CDunDownstream* downstreamRW; + DoCreateDownTransferObjectL( channelData.iDownstreamRW, + downstreamRW, + itemsInCs ); + downstreamRW->SetBuffering( bufferDownPtr ); + downstreamRW->SetMedia( networkEntity, EDunMediaContextNetwork ); + + // Save values + + channelData.iNetwork = networkEntity; + channelData.iUpstreamRW = upstreamRW; + channelData.iDownstreamRW = downstreamRW; + channelData.iBufferUpstream = bufferUpstream; + channelData.iBufferDownstream = bufferDownstream; + channelData.iBufferUpPtr = bufferUpPtr; + channelData.iBufferDownPtr = bufferDownPtr; + channelData.iUpstreamSignalCopy = upstreamCopy; + channelData.iDownstreamSignalCopy = downstreamCopy; + channelData.iSignalNotify = signalNotify; + + CleanupStack::Pop( itemsInCs ); + + // Set flag to indicate that advertisement is now possible + ManageAdvertisementStatusChange( ETrue, ETrue ); + + FTRACE(FPrint( _L("CDunTransUtils::DoAllocateChannelL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtility. +// Adds connection monitor callback for either local media or network side +// by connection ID +// Connection monitor will be added to aIndex:th endpoint +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DoAddConnMonCallback( TInt aIndex, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool aSignal ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddConnMonCallback()" ))); + + if ( !iParent.iNetwork ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddConnMonCallback() (iNetwork) not initialized!" ))); + return KErrGeneral; + } + + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddConnMonCallback() (not found) complete" ))); + return KErrNotFound; + } + + TDunChannelData& channelData = iChannelData[aIndex]; + + // Get upstream and downstream + CDunUpstream* upstream = channelData.iUpstreamRW; + CDunDownstream* downstream = channelData.iDownstreamRW; + + if ( aDirection == EDunReaderUpstream ) + { + // Initialize stream for AT parsing (ignore errors) + upstream->InitializeForAtParsing( downstream, + channelData.iChannelName, + upstream, + downstream ); + downstream->InitializeForDataPushing( upstream ); + } + + // Get stream type and operation type + + TDunStreamType streamType = + static_cast( aDirection & KDunStreamTypeMask ); + TDunOperationType operationType = + static_cast( aDirection & KDunOperationTypeMask ); + + if ( streamType == EDunStreamTypeUpstream ) + { + // If signal copy object(s) exist then add RunL error monitoring for them + if ( channelData.iUpstreamSignalCopy ) // optional + { + // Add callback (ignore errors) + channelData.iUpstreamSignalCopy->AddCallback( aCallback ); + } + } + else if ( streamType == EDunStreamTypeDownstream ) + { + // If signal copy object(s) exist then add RunL error monitoring for them + if ( channelData.iDownstreamSignalCopy ) // optional + { + // Add callback (ignore errors) + channelData.iDownstreamSignalCopy->AddCallback( aCallback ); + } + } + else + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddConnMonCallback() (stream) not initialized!" ) )); + return KErrGeneral; + } + + // Set signal notify callback + + if ( aSignal && aDirection==EDunReaderDownstream ) + { + if ( !channelData.iSignalNotify ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddConnMonCallback() (iSignalNotify) not initialized" ))); + return KErrGeneral; + } + // Add callback (ignore errors) + channelData.iSignalNotify->AddCallback( aCallback ); + } + + // Add callback (ignore errors) + if ( streamType == EDunStreamTypeUpstream ) + { + upstream->AddConnMonCallback( aCallback, operationType ); + } + else // streamType == EDunStreamTypeDownstream + { + downstream->AddConnMonCallback( aCallback, operationType ); + } + + FTRACE(FPrint( _L("CDunTransUtils::DoAddConnMonCallback() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtility. +// Adds error to consider as no error condition when doing any of the four +// endpoint's read/writer operation +// Error will be added to aIndex:th endpoint +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DoAddSkippedError( TInt aIndex, + TInt aError, + TDunDirection aDirection ) + { + FTRACE(FPrint( _L("CDunTransUtils::AddOneSkippedError" ) )); + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddSkippedError() (not found) complete" ))); + return KErrNotFound; + } + TDunChannelData& channelData = iChannelData[aIndex]; + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddSkippedError() (channel not found) complete" ), aIndex)); + return KErrGeneral; + } + + if ( aDirection != EDunReaderUpstream && + aDirection != EDunWriterUpstream && + aDirection != EDunReaderDownstream && + aDirection != EDunWriterDownstream ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddSkippedError() (ERROR) added" ) )); + return KErrNotSupported; + } + + TDunStreamType streamType = + static_cast( aDirection & KDunStreamTypeMask ); + TDunOperationType operationType = + static_cast( aDirection & KDunOperationTypeMask ); + + if ( streamType != EDunStreamTypeUpstream && + streamType != EDunStreamTypeDownstream ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddSkippedError() (stream) not initialized!" ) )); + return KErrGeneral; + } + + // Add skipped error (ignore errors) + + if ( streamType == EDunStreamTypeUpstream ) + { + channelData.iUpstreamRW->AddSkippedError( aError, operationType ); + } + else if ( streamType == EDunStreamTypeDownstream ) + { + channelData.iDownstreamRW->AddSkippedError( aError, operationType ); + } + else + { + FTRACE(FPrint( _L("CDunTransUtils::DoAddSkippedError() (stream) not initialized!" ) )); + return KErrGeneral; + } + + FTRACE(FPrint( _L("CDunTransUtils::DoAddSkippedError() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtility. +// Issues transfers requests for aIndex:th transfer objects +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DoIssueTransferRequests( TInt aIndex ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoIssueTransferRequests()" ))); + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoIssueTransferRequests() (not found) complete" ))); + return KErrNotFound; + } + TDunChannelData& channelData = iChannelData[aIndex]; + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoIssueTransferRequests() (channel not found) complete" ), aIndex)); + return KErrGeneral; + } + + if ( !channelData.iUpstreamRW ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoIssueTransferRequests() (iUpstreamRW) not initialized!" ))); + return KErrGeneral; + } + if ( !channelData.iDownstreamRW ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoIssueTransferRequests() (iDownstreamRW) not initialized!" ))); + return KErrGeneral; + } + + // Below issuing requests on signal objects (CDunSignalCopy, + // CDunSignalNotify) before issuing request on read/write objects + // (CDunUpstream/CDunDownstream). This is to guarantee that if signals are + // already set in local media side then they will be copied to network side + // before data. + + if ( channelData.iUpstreamSignalCopy ) // optional (RComm) + { + channelData.iUpstreamSignalCopy->IssueRequest(); + } + if ( channelData.iDownstreamSignalCopy ) // optional (RComm) + { + channelData.iDownstreamSignalCopy->IssueRequest(); + } + if ( channelData.iSignalNotify ) // optional (RSocket) + { + channelData.iSignalNotify->IssueRequest(); + } + channelData.iUpstreamRW->StartStream(); + channelData.iDownstreamRW->StartStream(); + + FTRACE(FPrint( _L("CDunTransUtils::DoIssueTransferRequests() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtility. +// Stops transfers for aIndex:th transfer objects +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DoStopTransfers( TInt aIndex ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoStopTransfers()" ))); + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoStopTransfers() (not found) complete" ))); + return KErrNotFound; + } + + TDunChannelData& channelData = iChannelData[aIndex]; + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoStopTransfers() (channel not found) complete" ), aIndex)); + return KErrGeneral; + } + + if ( !channelData.iUpstreamRW ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoStopTransfers() (iUpstreamRW) not initialized!" ))); + return KErrGeneral; + } + if ( !channelData.iDownstreamRW ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoStopTransfers() (iDownstreamRW) not initialized!" ))); + return KErrGeneral; + } + + // Now stop operation of signal objects (CDunSignalCopy, CDunSignalNotify) + // before stopping operation on read/write objects (CDunUpstream/ + // CDunDownstream). This is to ensure that signals don't change after + // stopping read/write which in turn could cause problems. + + if ( channelData.iUpstreamSignalCopy ) // optional (RComm) + { + channelData.iUpstreamSignalCopy->Stop(); + } + if ( channelData.iDownstreamSignalCopy ) // optional (RComm) + { + channelData.iDownstreamSignalCopy->Stop(); + } + if ( channelData.iSignalNotify ) // optional (RSocket) + { + channelData.iSignalNotify->Stop(); + } + channelData.iUpstreamRW->Stop(); + channelData.iDownstreamRW->Stop(); + + FTRACE(FPrint( _L("CDunTransUtils::DoStopTransfers() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtility. +// Free aIndex:th channel's objects +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DoFreeChannel( TInt aIndex ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoFreeChannel()" ))); + + TDunChannelData& channelData = iChannelData[aIndex]; + if ( aIndex < 0 || + aIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoFreeChannel (not found) complete" ))); + return KErrNotFound; + } + if ( !channelData.iChannelInUse ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoFreeChannel (already free) complete" ))); + return KErrNone; + } + if ( !iParent.iNetwork ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoFreeChannel (iNetwork) not initialized!" ))); + return KErrGeneral; + } + + DoStopTransfers( aIndex ); + DeleteOneNetworkData( aIndex ); + DeleteOneLocalData( aIndex ); + DeleteBuffering( aIndex ); + + iParent.iNetwork->FreeChannel( channelData.iNetwork ); + + channelData.iNetwork = NULL; + channelData.iComm = NULL; + channelData.iSocket = NULL; + channelData.iChannelInUse = EFalse; + + // If note exist then stop it now as no reason to show it anymore + if ( iParent.iNoteHandler ) + { + iParent.iNoteHandler->Stop(); + } + // Set flag to indicate that advertisement is now possible + ManageAdvertisementStatusChange( ETrue, EFalse ); + + FTRACE(FPrint( _L("CDunTransUtils::DoFreeChannel() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunTransporterUtilityAux. +// Gets local ID counterpart of a network ID +// --------------------------------------------------------------------------- +// +TConnId CDunTransUtils::GetLocalId( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunTransUtils::GetLocalId()" ))); + TInt mediaIndex = iParent.GetMediaIndex( aComm, EDunMediaContextNetwork ); + if ( mediaIndex < 0 ) + { + FTRACE(FPrint( _L("CDunTransUtils::GetLocalId() (ERROR) complete (%d)" ), mediaIndex)); + return NULL; + } + if ( mediaIndex >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransUtils::GetLocalId() (not found) complete" ) )); + return NULL; + } + TDunChannelData& channelData = iChannelData[mediaIndex]; + if ( channelData.iComm ) + { + FTRACE(FPrint( _L("CDunTransUtils::GetLocalId() (iComm) complete" ))); + return channelData.iComm; + } + if ( channelData.iSocket ) + { + FTRACE(FPrint( _L("CDunTransUtils::GetLocalId() (iSocket) complete" ))); + return channelData.iSocket; + } + FTRACE(FPrint( _L("CDunTransUtils::GetLocalId() (ERROR) complete" ))); + return NULL; + } + +// --------------------------------------------------------------------------- +// From MDunTransporterUtilityAux. +// Notifies when serious read/write error is detected on a connection +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::DoNotifyConnectionNotOk( + RComm* aComm, + RSocket* aSocket, + TDunConnectionReason& aConnReason, + RPointerArray& aCallbacks ) + { + FTRACE(FPrint( _L("CDunTransUtils::DoNotifyConnectionNotOk()" ))); + TConnId localId = NULL; + if ( aComm ) + { + localId = aComm; + } + else if ( aSocket ) + { + localId = aSocket; + } + TInt i; + TInt count = aCallbacks.Count(); + for ( i=0; iNotifyProgressChangeL( localId, aConnReason ) ); + } + FTRACE(FPrint( _L("CDunTransUtils::DoNotifyConnectionNotOk() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunActivityManager. +// Notifies about activity on a channel +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::NotifyChannelActivity() + { + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelActivity()" ))); + iParent.iActiveChannels++; + if ( iParent.iActiveChannels == 1 ) + { + // Now set key and notify (only once) that DUN is active + TInt retTemp = RProperty::Set( KPSUidDialupConnStatus, + KDialupConnStatus, + EDialupActive ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelActivity() (ERROR) complete" ))); + return retTemp; + } + } + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelActivity() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class MDunActivityManager. +// Notifies about inactivity on a channel +// --------------------------------------------------------------------------- +// +TInt CDunTransUtils::NotifyChannelInactivity() + { + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelInactivity()" ))); + if ( iParent.iActiveChannels <= 0 ) + { + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelInactivity() (wrong iActiveChannels!) complete" ))); + return KErrGeneral; + } + iParent.iActiveChannels--; + if ( iParent.iActiveChannels == 0 ) + { + // Now set key and notify (only once) that DUN is inactive + TInt retTemp = RProperty::Set( KPSUidDialupConnStatus, + KDialupConnStatus, + EDialupInactive ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelInactivity() (ERROR) complete" ))); + return retTemp; + } + } + FTRACE(FPrint( _L("CDunTransUtils::NotifyChannelInactivity() complete" ))); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunTransporter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunTransporter.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,891 @@ +/* +* Copyright (c) 2006-2008 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: Managing abstracted "channels" of network side communication +* +*/ + + +#include "DunTransUtils.h" +#include "DunTransporter.h" +#include "DunDataWaiter.h" +#include "DunUpstream.h" +#include "DunDownstream.h" +#include "DunSignalCopy.h" +#include "DunNoteHandler.h" +#include "DunUtils.h" +#include "DunDebug.h" +#include "DunPlugin.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CDunTransporter* CDunTransporter::NewL( + MDunPluginManager* aPluginManager, + TInt aNumOfMaxChannels ) + { + CDunTransporter* self = new (ELeave) CDunTransporter( aPluginManager, + aNumOfMaxChannels ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunTransporter::~CDunTransporter() + { + FTRACE(FPrint( _L("CDunTransporter::~CDunTransporter()" ))); + UnInitialize(); + FTRACE(FPrint( _L("CDunTransporter::~CDunTransporter() complete" ))); + } + +// --------------------------------------------------------------------------- +// Number of allocated channels, is the same number as allocated and active +// (non-waiting) channels +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunTransporter::NumberOfAllocatedChannels() + { + FTRACE(FPrint( _L("CDunTransporter::NumberOfAllocatedChannels()" ))); + TInt i; + TInt allocChannels = 0; + TInt count = iChannelData.Count(); + for ( i=0; iNumberOfWaiters(); + FTRACE(FPrint( _L("CDunTransporter::NumberWaitingChannels() complete" ))); + return waiters; + } + +// --------------------------------------------------------------------------- +// Gets the number of allocated channels by owner UID, is the same number as +// allocated and active (non-waiting) channels +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunTransporter::GetNumberOfAllocatedChannelsByUid( + TUid aOwnerUid ) + { + FTRACE(FPrint( _L("CDunTransporter::GetNumberOfAllocatedChannelsByUid()" ))); + TInt i; + TInt allocChannels = 0; + TInt count = iChannelData.Count(); + for ( i=0; iGetNumberOfWaitersByUid( aOwnerUid ); + FTRACE(FPrint( _L("CDunTransporter::GetNumberWaitingChannelsByUid() complete" ))); + return waiters; + } + +// --------------------------------------------------------------------------- +// Transporter's service advertisement status +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CDunTransporter::AdvertisementStatus() + { + FTRACE(FPrint( _L("CDunTransporter::AdvertisementStatus()" ))); + FTRACE(FPrint( _L("CDunTransporter::AdvertisementStatus() complete" ))); + return iAdvertise; + } + +// --------------------------------------------------------------------------- +// Creates a channel of communication between local media (aComm) and network +// Local media object pointer also works as a connection ID for the +// allocated channel +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::AllocateChannelL( + RComm* aComm, + TUid aOwnerUid, + const TDesC8& aName, + TBool aEnqueuedFail, + MDunBufferCorrection* aCorrection ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RComm)" ))); + + if ( !aComm ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (aComm not initialized!) complete" ))); + User::Leave( KErrGeneral ); + } + + if ( !aComm->SubSessionHandle() ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RComm) (bad handle) complete" ) )); + User::Leave( KErrBadHandle ); + } + + TInt retTemp = InitializeOnDemand(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RComm) (ERROR) complete" ) )); + User::Leave( retTemp ); + } + + iChanMan->AddConnWaiterL( aComm, + aOwnerUid, + aName, + aEnqueuedFail, + aCorrection ); + + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RComm) complete" ))); + } + +// --------------------------------------------------------------------------- +// Creates a channel of communication between local media (aSocket) and +// network +// Local media object pointer also works as a connection ID for the +// allocated channel +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::AllocateChannelL( + RSocket* aSocket, + TUid aOwnerUid, + const TDesC8& aName, + TBool aEnqueuedFail, + TBool& aNoFreeChans ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket)" ))); + + aNoFreeChans = EFalse; // Initialize now if plugin didn't do it already + + if ( !aSocket ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (aSocket not initialized!) complete" ))); + User::Leave( KErrGeneral ); + } + if ( !aSocket->SubSessionHandle() ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) (bad handle) complete" ) )); + User::Leave( KErrBadHandle ); + } + TInt retTemp = InitializeOnDemand(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) (ERROR) complete" ))); + User::Leave( retTemp ); + } + TInt firstFree = iUtility->InitializeFirstFreeChannel( aSocket ); + if ( firstFree < 0 ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) (firstfree failed!) complete" ) )); + User::Leave( firstFree ); + } + if ( firstFree >= iChannelData.Count() ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) (firstfree failed!) complete" ) )); + User::Leave( KErrGeneral ); + } + TInt bufferLength = KErrNotFound; + // bufferLength will be omitted (not needed to set to RSocket) + TRAPD( retTrap, + iUtility->DoAllocateChannelL(NULL, bufferLength, firstFree, NULL) ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) trapped!" ) )); + UnInitializeOnDemand(); // remove unused initialized channel + if ( retTrap == KErrTooBig ) + { + if ( aEnqueuedFail ) + { + // Inform plugin enqueue request + iPluginManager->NotifyPluginEnqueueRequest( aOwnerUid ); + } + aNoFreeChans = ETrue; // Inform plugin about no free channels + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) complete" ))); + User::Leave( KErrTooBig ); + } + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) complete" ))); + User::Leave( retTrap ); + } + TDunChannelData& channelData = iChannelData[firstFree]; + channelData.iSocket = aSocket; + channelData.iChannelName = HBufC8::NewMaxL( aName.Length() ); + TPtr8 chanNamePtr = channelData.iChannelName->Des(); + chanNamePtr.Copy( aName ); + channelData.iUpstreamRW->SetMedia( aSocket, EDunMediaContextLocal ); + channelData.iDownstreamRW->SetMedia( aSocket, EDunMediaContextLocal ); + channelData.iOwnerUid = aOwnerUid; + // Channel now occupied + channelData.iChannelInUse = ETrue; + + // Clear the queue, just to be sure + iPluginManager->NotifyPluginDequeueRequest( aOwnerUid ); + + FTRACE(FPrint( _L("CDunTransporter::AllocateChannel() (RSocket) complete" ))); + } + +// --------------------------------------------------------------------------- +// Frees an allocated channel by local media (aComm) connection ID +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunTransporter::FreeChannel( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RComm)" ))); + + TInt retTemp = CheckInitAndHandle( aComm ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RComm) (ERROR) complete" ) )); + return retTemp; + } + + retTemp = iChanMan->RemoveConnWaiter( aComm ); + if ( retTemp == KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RComm) complete" ))); + return KErrNone; + } + + // No waiter found, so try to find from channels + TInt mediaIndex = GetMediaIndex( aComm ); + if ( mediaIndex < 0 ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RComm) (ERROR) complete" ) )); + return mediaIndex; + } + + retTemp = iUtility->DoFreeChannel( mediaIndex ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RComm) (ERROR) complete" ))); + return retTemp; + } + UnInitializeOnDemand(); + + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Frees an allocated channel by local media (aSocket) connection ID +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunTransporter::FreeChannel( RSocket* aSocket ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RSocket)" ))); + + TInt retTemp = CheckInitAndHandle( aSocket ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RSocket) (ERROR) complete" ) )); + return retTemp; + } + + TInt mediaIndex = GetMediaIndex( aSocket ); + if ( mediaIndex < 0 ) + { + return mediaIndex; + } + + retTemp = iUtility->DoFreeChannel( mediaIndex ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RSocket) (ERROR) complete" ) )); + return retTemp; + } + UnInitializeOnDemand(); + + FTRACE(FPrint( _L("CDunTransporter::FreeChannel() (RSocket) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Issues transfer requests for all transfer objects by local media +// (aComm) connection ID +// This will cause the Transporter by be ready for transferring data +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::IssueTransferRequestsL( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunTransporter::IssueTransferRequests() (RComm)" ))); + + User::LeaveIfError( CheckInitAndHandle( aComm ) ); + TInt retTemp = iChanMan->IssueConnWaiterRequest( aComm ); + if ( retTemp == KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::IssueTransferRequests() (RComm) complete" ))); + return; + } + + // No waiter found, so try to find from channels + TInt mediaIndex = GetMediaIndexL( aComm ); + User::LeaveIfError( iUtility->DoIssueTransferRequests( mediaIndex ) ); + + FTRACE(FPrint( _L("CDunTransporter::IssueTransferRequests() (RComm) complete" ))); + } + +// --------------------------------------------------------------------------- +// Issues transfer requests for all transfer objects by local media +// (aSocket) connection ID +// This will cause the Transporter by be ready for transferring data +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::IssueTransferRequestsL( RSocket* aSocket ) + { + FTRACE(FPrint( _L("CDunTransporter::IssueTransferRequests() (RSocket)" ))); + + User::LeaveIfError( CheckInitAndHandle( aSocket ) ); + TInt mediaIndex = GetMediaIndexL( aSocket ); + User::LeaveIfError( iUtility->DoIssueTransferRequests(mediaIndex) ); + + FTRACE(FPrint( _L("CDunTransporter::IssueTransferRequests() (RSocket) complete" ))); + } + +// --------------------------------------------------------------------------- +// Stops transfers for all transfer objects by local media (aComm) +// connection ID +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunTransporter::StopTransfers( RComm* aComm ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RComm)" ))); + + TInt retTemp = CheckInitAndHandle( aComm ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RComm) (ERROR) complete" ) )); + return retTemp; + } + + retTemp = iChanMan->StopConnWaiter( aComm ); + if ( retTemp == KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RComm) complete" ))); + return KErrNone; + } + + // No waiter found, so try to find from channels + TInt mediaIndex = GetMediaIndex( aComm ); + if ( mediaIndex < 0 ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RComm) (ERROR) complete" ) )); + return mediaIndex; + } + + retTemp = iUtility->DoStopTransfers( mediaIndex ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RComm) (ERROR) complete" ))); + return retTemp; + } + + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RComm) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Stops transfers for all transfer objects by local media (aSocket) +// connection ID +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunTransporter::StopTransfers( RSocket* aSocket ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RSocket)" ))); + + TInt retTemp = CheckInitAndHandle( aSocket ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RSocket) (ERROR) complete" ) )); + return retTemp; + } + + TInt mediaIndex = GetMediaIndex( aSocket ); + if ( mediaIndex < 0 ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RSocket) (ERROR) complete" ) )); + return mediaIndex; + } + + retTemp = iUtility->DoStopTransfers( mediaIndex ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RSocket) (ERROR) complete" ))); + return retTemp; + } + + FTRACE(FPrint( _L("CDunTransporter::StopTransfers() (RSocket) complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Adds connection monitor callback for either local media or network side +// by connection ID +// Callbacks will be called read/write error is detected during endpoint +// operation +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::AddConnMonCallbackL( RComm* aComm, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool /*aSignal*/ ) + { + FTRACE(FPrint( _L("CDunTransporter::AddConnMonCallbackL() (RComm)" ))); + + User::LeaveIfError( CheckInitAndHandle( aComm ) ); + TInt retTemp = iChanMan->SaveWaiterConnMonCallbackL( aComm, + aCallback, + aDirection ); + if ( retTemp == KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::AddConnMonCallbackL() (RComm) complete" ))); + return; + } + + TInt mediaIndex = GetMediaIndexL( aComm ); + User::LeaveIfError( iUtility->DoAddConnMonCallback( mediaIndex, + aCallback, + aDirection, + NULL )); + + FTRACE(FPrint( _L("CDunTransporter::AddConnMonCallbackL() (RComm) complete" ))); + } + +// --------------------------------------------------------------------------- +// Adds connection monitor callback for either local media or network side +// by connection ID +// Callbacks will be called when line status switches to high or low +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::AddConnMonCallbackL( RSocket* aSocket, + MDunConnMon* aCallback, + TDunDirection aDirection, + TBool aSignal ) + { + FTRACE(FPrint( _L("CDunTransporter::AddConnMonCallbackL() (RSocket)" ))); + + User::LeaveIfError( CheckInitAndHandle( aSocket ) ); + TInt mediaIndex = GetMediaIndexL( aSocket ); + User::LeaveIfError( iUtility->DoAddConnMonCallback( mediaIndex, + aCallback, + aDirection, + aSignal )); + + FTRACE(FPrint( _L("CDunTransporter::AddConnMonCallbackL() (RSocket) complete" ))); + } + +// --------------------------------------------------------------------------- +// Adds error to consider as no error condition when doing any of the four +// endpoint's read/writer operation +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::AddSkippedErrorL( TInt aError, + RComm* aComm, + TDunDirection aDirection ) + { + FTRACE(FPrint( _L("CDunTransporter::AddSkippedErrorL() (RComm)" ))); + + User::LeaveIfError( CheckInitAndHandle( aComm ) ); + TInt retTemp = iChanMan->SaveWaiterSkippedErrorL( aError, + aComm, + aDirection ); + if ( retTemp == KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::AddSkippedErrorL() (RComm) complete" ))); + return; + } + + TInt mediaIndex = GetMediaIndexL( aComm ); + User::LeaveIfError( iUtility->DoAddSkippedError( mediaIndex, + aError, + aDirection )); + + FTRACE(FPrint( _L("CDunTransporter::AddSkippedErrorL() (RComm) complete" ))); + } + +// --------------------------------------------------------------------------- +// Adds error to consider as no error condition when doing any of the four +// endpoint's read/writer operation +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::AddSkippedErrorL( TInt aError, + RSocket* aSocket, + TDunDirection aDirection ) + { + FTRACE(FPrint( _L("CDunTransporter::AddSkippedErrorL() (RSocket)" ))); + + User::LeaveIfError( CheckInitAndHandle( aSocket ) ); + TInt mediaIndex = GetMediaIndexL( aSocket ); + User::LeaveIfError( iUtility->DoAddSkippedError( mediaIndex, + aError, + aDirection )); + + FTRACE(FPrint( _L("CDunTransporter::AddSkippedErrorL() (RSocket) complete" ))); + } + +// --------------------------------------------------------------------------- +// Sets service advertisement monitor callback by owner UID +// Callbacks will be called when advertisement status changes. +// The callbacks are updated with every successfully completed +// channel allocation/free (and allocation failure) so it is recommended +// to call this method after AllocateChannelL(). +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::SetAdvertisementMonitorL( + TUid aOwnerUid, + MDunServAdvMon* aCallback ) + { + FTRACE(FPrint( _L("CDunTransporter::SetAdvertisementMonitorL()" ))); + TInt i; + TInt count; + if ( !aCallback ) + { + FTRACE(FPrint( _L("CDunTransporter::SetAdvertisementMonitorL() (aCallback) not initialized!" ))); + User::Leave( KErrGeneral ); + } + count = iServAdvData.Count(); + for ( i=0; i( utility ); + MDunTransporterUtilityAux* utilityAux = static_cast( utility ); + iChanMan = CDunChanMan::NewL( *this, iUtility, utilityAux, iPluginManager ); + iNetwork = CDunNetDataport::NewL( iNumOfMaxChannels ); + iNetwork->InitializeL(); + iNoteHandler = CDunNoteHandler::NewL(); + iInitialized = ETrue; + + FTRACE(FPrint( _L("CDunTransporter::InitializeL() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// UnInitializes the transporter, can be called as the last operation +// --------------------------------------------------------------------------- +// +EXPORT_C void CDunTransporter::UnInitialize() + { + FTRACE(FPrint( _L("CDunTransporter::UnInitialize()" ))); + // first stop channel waiters before deletion + if ( iChanMan ) + { + iChanMan->ResetData(); + } + // now ready to remove channel data as no existing waiters + TInt i; + TInt count = iChannelData.Count(); + for ( i=0; iDoFreeChannel( i ); + } + } + iChannelData.Close(); + iServAdvData.Close(); + DeleteTransporter(); + iInitialized = EFalse; + FTRACE(FPrint( _L("CDunTransporter::UnInitialize() complete" ))); + } + +// --------------------------------------------------------------------------- +// Initialize the transporter +// --------------------------------------------------------------------------- +// +TInt CDunTransporter::InitializeOnDemand() + { + FTRACE(FPrint( _L("CDunTransporter::InitializeOnDemand()" ) )); + if ( !iInitialized ) + { + TRAPD( retTrap, InitializeL() ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunTransporter::InitializeOnDemand() initialize failed!" ) )); + return retTrap; + } + } + FTRACE(FPrint( _L("CDunTransporter::InitializeOnDemand() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// UnInitialize the transporter +// --------------------------------------------------------------------------- +// +TInt CDunTransporter::UnInitializeOnDemand() + { + FTRACE(FPrint( _L("CDunTransporter::UnInitializeOnDemand()" ) )); + if ( !iInitialized ) + { + FTRACE(FPrint( _L("CDunTransporter::UnInitializeOnDemand() (not ready) complete" ) )); + return KErrNotReady; + } + // Check if non-free channel exists, also remove empty channel(s) + TInt i; + TBool allFree = ETrue; + for ( i=iChannelData.Count()-1; i>=0; i-- ) + { + TDunChannelData& channelData = iChannelData[i]; + if ( !channelData.iChannelInUse ) + { + if ( !channelData.iNetwork ) + { + // iChannelData must not contain data here + iChannelData.Remove( i ); + } + } + else // channel not free + { + allFree = EFalse; + FTRACE(FPrint( _L("CDunTransporter::UnInitializeOnDemand() channel found" ) )); + } + } + if ( iChanMan->NumberOfWaiters() > 0 ) + { + allFree = EFalse; + FTRACE(FPrint( _L("CDunTransporter::UnInitializeOnDemand() waiter found" ) )); + } + if ( allFree ) + { + // All channels were free -> uninitialize + UnInitialize(); + FTRACE(FPrint( _L("CDunTransporter::UnInitializeOnDemand() complete" ) )); + return KErrNone; + } + FTRACE(FPrint( _L("CDunTransporter::UnInitializeOnDemand() (not ready) complete" ) )); + return KErrNotReady; + } + +// --------------------------------------------------------------------------- +// Returns index of media for connection ID +// --------------------------------------------------------------------------- +// +TInt CDunTransporter::GetMediaIndex( TConnId aConnId, + TDunMediaContext aMediaContext ) + { + FTRACE(FPrint( _L("CDunTransporter::GetMediaIndex()" ))); + if ( aMediaContext != EDunMediaContextNetwork && + aMediaContext != EDunMediaContextLocal ) + { + FTRACE(FPrint( _L("CDunTransporter::GetMediaIndex() (not supported) complete" ))); + return KErrNotSupported; + } + TInt i; + TInt count = iChannelData.Count(); + for ( i=0; i( aConnId ); + if ( !subBase->SubSessionHandle() ) + { + FTRACE(FPrint( _L("CDunTransporter::CheckInitAndHandle() (bad handle) complete" ))); + return KErrBadHandle; + } + FTRACE(FPrint( _L("CDunTransporter::CheckInitAndHandle() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Deletes own internal data +// --------------------------------------------------------------------------- +// +void CDunTransporter::DeleteTransporter() + { + FTRACE(FPrint( _L("CDunTransporter::DeleteTransporter()" ))); + // first, delete channel manager with waiters + delete iChanMan; + iChanMan = NULL; + // second, delete the network object + delete iNetwork; + iNetwork = NULL; + // as last step delete utility class + CDunTransUtils* utility = static_cast( iUtility ); + delete utility; + iUtility = NULL; + // delete note class + delete iNoteHandler; + iNoteHandler = NULL; + FTRACE(FPrint( _L("CDunTransporter::DeleteTransporter() complete" ))); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunUpstream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunUpstream.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,576 @@ +/* +* Copyright (c) 2008-2010 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: Definitions needed for one "stream" of CDunTransporter +* +*/ + +/* + * TODO: When local media is of type RComm, listening on it is started with + * RComm::NotifyDataAvailable() call. Check that USB ACM port and Irda RCOMM + * (and any other new media in the future) behaves correctly so that when + * RComm::ReadOneOrMore() is issued, the read is issued immediately without + * checking for new data. If waiting for new data happens in this + * NotifyDataAvailable/ReadOneOrMore combination, raise a defect to Symbian. + */ + +#include "DunTransporter.h" +#include "DunUpstream.h" +#include "DunDebug.h" + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CDunUpstream* CDunUpstream::NewL( MDunTransporterUtilityAux* aUtility ) + { + CDunUpstream* self = new (ELeave) CDunUpstream( aUtility ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CDunUpstream::~CDunUpstream() + { + FTRACE(FPrint( _L("CDunUpstream::~CDunUpstream()" ))); + ResetData(); + FTRACE(FPrint( _L("CDunUpstream::~CDunUpstream() complete" ))); + } + +// --------------------------------------------------------------------------- +// Resets data to initial values +// --------------------------------------------------------------------------- +// +void CDunUpstream::ResetData() + { + // APIs affecting this: + // IssueRequest() + Stop(); + // InitializeForAtParsing() + delete iParseData.iAtCmdHandler; + iParseData.iAtCmdHandler = NULL; + // AddConnMonCallbackL() + iCallbacksR.Close(); + iCallbacksW.Close(); + // AddSkippedErrorL() + iOkErrorsR.Close(); + iOkErrorsW.Close(); + // Internal + Initialize(); + } + +// --------------------------------------------------------------------------- +// Sets activity callback for this stream +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::SetActivityCallback( + MDunActivityManager* aActivityCallback ) + { + if ( !aActivityCallback ) + { + FTRACE(FPrint( _L("CDunUpstream::SetActivityCallback() (aActivityCallback) not initialized!" ) )); + return KErrGeneral; + } + if ( iActivityData.iActivityCallback ) + { + FTRACE(FPrint( _L("CDunUpstream::SetActivityCallback() (already exists) complete" ) )); + return KErrAlreadyExists; + } + iActivityData.iActivityCallback = aActivityCallback; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Initializes this stream for AT command notifications +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::InitializeForAtParsing( + MDunStreamManipulator* aStreamCallback, + const TDesC8* aConnectionName, + MDunCmdModeMonitor* aCallbackUp, + MDunCmdModeMonitor* aCallbackDown ) + { + FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing()" ) )); + if ( iParseData.iAtCmdHandler ) + { + FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing() (already exists) complete" ) )); + return KErrAlreadyExists; + } + TInt retTrap = KErrNone; + CDunAtCmdHandler* atCmdHandler = NULL; + TRAP( retTrap, atCmdHandler = CDunAtCmdHandler::NewL(this, + aStreamCallback, + aConnectionName) ); + if ( retTrap != KErrNone ) + { + FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing() (trapped!) complete" ) )); + return retTrap; + } + atCmdHandler->AddCmdModeCallback( aCallbackUp ); + atCmdHandler->AddCmdModeCallback( aCallbackDown ); + iParseData.iDataMode = EFalse; + iParseData.iAtCmdHandler = atCmdHandler; + FTRACE(FPrint( _L("CDunUpstream::InitializeForAtParsing() complete" ) )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Starts upstream by issuing read request +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::StartStream() + { + FTRACE(FPrint( _L("CDunUpstream::StartStream()" ) )); + if ( !iNetwork ) + { + FTRACE(FPrint( _L("CDunUpstream::StartStream() (iNetwork) not initialized!" ) )); + return KErrGeneral; + } + if ( !iComm && !iSocket ) + { + FTRACE(FPrint( _L("CDunUpstream::StartStream() (iComm&iSocket) not initialized!" ) )); + return KErrGeneral; + } + iOperationType = EDunOperationTypeRead; + TInt retVal = IssueRequest(); + FTRACE(FPrint( _L("CDunUpstream::StartStream() complete" ) )); + return retVal; + } + +// --------------------------------------------------------------------------- +// Stops transfer for read or write endpoints +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::Stop() + { + FTRACE(FPrint( _L("CDunUpstream::Stop() (Dir=%d)" ), iDirection)); + // Don't stop CDunAtCmdHandler here as it is downstream related! + if ( iTransferState != EDunStateTransferring ) + { + FTRACE(FPrint( _L("CDunUpstream::Stop() (not ready) complete" ))); + return KErrNotReady; + } + // Stop only current operation + if ( iOperationType == EDunOperationTypeRead ) + { + if ( iComm ) + { + iComm->ReadCancel(); + FTRACE(FPrint( _L("CDunUpstream::Stop() (RComm) cancelled" ))); + } + else if ( iSocket ) + { + iSocket->CancelRecv(); + FTRACE(FPrint( _L("CDunUpstream::Stop() (RSocket) cancelled" ))); + } + } + else if ( iOperationType == EDunOperationTypeWrite ) + { + if ( iNetwork ) + { + iNetwork->WriteCancel(); + FTRACE(FPrint( _L("CDunUpstream::Stop() (Network) cancelled" ))); + } + } + Cancel(); + iTransferState = EDunStateIdle; + // Notify parent about inactivity + if ( iActivityData.iActivityCallback && iActivityData.iNotified ) + { + iActivityData.iActivityCallback->NotifyChannelInactivity(); + iActivityData.iNotified = EFalse; + } + FTRACE(FPrint( _L("CDunUpstream::Stop() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Data transmission state (if read completed) +// --------------------------------------------------------------------------- +// +TBool CDunUpstream::DataReadStatus() + { + return iActivityData.iDataRead; + } + +// --------------------------------------------------------------------------- +// CDunUpstream::CDunUpstream +// --------------------------------------------------------------------------- +// +CDunUpstream::CDunUpstream( MDunTransporterUtilityAux* aUtility ) : + iUtility( aUtility ) + { + Initialize(); + } + +// --------------------------------------------------------------------------- +// CDunUpstream::ConstructL +// --------------------------------------------------------------------------- +// +void CDunUpstream::ConstructL() + { + FTRACE(FPrint( _L("CDunUpstream::ConstructL()" ) )); + if ( !iUtility ) + { + User::Leave( KErrGeneral ); + } + FTRACE(FPrint( _L("CDunUpstream::ConstructL() complete" ) )); + } + +// --------------------------------------------------------------------------- +// Initializes this class +// --------------------------------------------------------------------------- +// +void CDunUpstream::Initialize() + { + // Don't initialize iUtility here (it is set through NewL) + iActivityData.iActivityCallback = NULL; + iActivityData.iDataRead = EFalse; + iActivityData.iNotified = EFalse; + iParseData.iDataMode = EFalse; + iParseData.iAtCmdHandler = NULL; + } + +// --------------------------------------------------------------------------- +// Issues transfer request for this stream +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::IssueRequest() + { + // Set direction + iDirection = static_cast( EDunStreamTypeUpstream | iOperationType ); + + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (Dir=%d)" ), iDirection)); + + if ( iTransferState != EDunStateIdle ) + { + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (not ready) complete" ) )); + return KErrNotReady; + } + + if ( iOperationType == EDunOperationTypeRead ) + { + iBufferPtr->SetLength( iBufferPtr->MaxLength() ); + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() trying to read %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection)); + } + else // iOperationType == EDunOperationTypeWrite + { + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() writing %d bytes... (Dir=%d)" ), iBufferPtr->Length(), iDirection)); + } + + switch ( iDirection ) + { + case EDunReaderUpstream: + if ( iComm ) + { + iStatus = KRequestPending; + iComm->ReadOneOrMore( iStatus, *iBufferPtr ); + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RComm ReadOneOrMore() requested" ) )); + } + else if ( iSocket ) + { + iStatus = KRequestPending; + iSocket->RecvOneOrMore( *iBufferPtr, 0, iStatus, iReadLengthSocket ); + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RSocket RecvOneOrMore() requested" ) )); + } + else + { + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (ERROR) complete" ) )); + return KErrGeneral; + } + break; + case EDunWriterUpstream: + iStatus = KRequestPending; + iNetwork->Write( iStatus, *iBufferPtr ); + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() RComm Write() requested" ) )); + break; + default: + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (ERROR) complete" ) )); + return KErrGeneral; + } + + SetActive(); + iTransferState = EDunStateTransferring; + + FTRACE(FPrint( _L("CDunUpstream::IssueRequest() (Dir=%d) complete" ), iDirection)); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Processes data that was read +// --------------------------------------------------------------------------- +// +TBool CDunUpstream::ProcessReadData() + { + FTRACE(FPrint( _L("CDunUpstream::ProcessReadData()" ))); + // The following will be transferred to Dataport + if ( iParseData.iDataMode ) + { + iOperationType = EDunOperationTypeWrite; + FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (next write) complete" ))); + return ETrue; + } + if ( !iParseData.iAtCmdHandler ) // optional + { + FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (no handler) complete" ))); + return ETrue; + } + // The following will be transferred to parser + TInt retTemp = KErrNone; + TBool moreNeeded = EFalse; + retTemp = iParseData.iAtCmdHandler->AddDataForParsing( *iBufferPtr, + moreNeeded ); + if ( retTemp!=KErrNone || !moreNeeded ) + { + // If error or no error but no more data needed, don't reissue + FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (no reissue) complete" ))); + return EFalse; + } + // If no error and more data needed, reissue + FTRACE(FPrint( _L("CDunUpstream::ProcessReadData() (reissue) complete" ))); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Manages activity in a channel +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::ManageChannelActivity() + { + FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity()" ))); + if ( iActivityData.iDataRead ) + { + FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity() (not ready) complete" ))); + return KErrNotReady; + } + iActivityData.iDataRead = ETrue; + if ( iActivityData.iActivityCallback && !iActivityData.iNotified ) + { + iActivityData.iActivityCallback->NotifyChannelActivity(); + iActivityData.iNotified = ETrue; + } + FTRACE(FPrint( _L("CDunUpstream::ManageChannelActivity() complete" ))); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called when endpoint data read/write complete +// --------------------------------------------------------------------------- +// +void CDunUpstream::RunL() + { + FTRACE(FPrint( _L("CDunUpstream::RunL() (Dir=%d)" ), iDirection)); + iTransferState = EDunStateIdle; + + TBool isError; + TInt retTemp = iStatus.Int(); + TInt stop = ProcessErrorCondition( retTemp, isError ); + + if ( !stop ) // no real error detected -> continue + { + TBool reIssue = ETrue; + if ( !isError ) + { + if ( iOperationType == EDunOperationTypeRead ) + { + ManageChannelActivity(); + reIssue = ProcessReadData(); + } // if ( iOperationType == EDunOperationTypeRead ) + else // iOperationType == EDunOperationTypeWrite + { + iOperationType = EDunOperationTypeRead; + } + } // if ( !isError ) + + if ( reIssue ) + { + IssueRequest(); + } + + } // if ( !stop ) + else // stop -> tear down connection + { + FTRACE(FPrint( _L("CDunUpstream::RunL() stop" ))); + TDunConnectionReason connReason; + connReason.iReasonType = EDunReasonTypeRW; + connReason.iContext = GetMediaContext( EDunStreamTypeUpstream ); + connReason.iSignalType = 0; + connReason.iSignalHigh = EFalse; + connReason.iDirection = iDirection; + connReason.iErrorCode = retTemp; + if ( iOperationType == EDunOperationTypeRead ) + { + iUtility->DoNotifyConnectionNotOk( iComm, + iSocket, + connReason, + iCallbacksR ); + } + else // iOperationType == EDunOperationTypeWrite + { + iUtility->DoNotifyConnectionNotOk( iComm, + iSocket, + connReason, + iCallbacksW ); + } + } // else + + FTRACE(FPrint( _L("CDunUpstream::RunL() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class CActive. +// Gets called on cancel +// --------------------------------------------------------------------------- +// +void CDunUpstream::DoCancel() + { + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdStatusReporter +// Notifies about parser's need to get more data +// --------------------------------------------------------------------------- +// +void CDunUpstream::NotifyParserNeedsMoreData() + { + FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData()" ))); + IssueRequest(); // iOperationType must be read here (don't set) + FTRACE(FPrint( _L("CDunUpstream::NotifyParserNeedsMoreData() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdStatusReporter +// Notifies about editor mode reply +// --------------------------------------------------------------------------- +// +void CDunUpstream::NotifyEditorModeReply( TBool aStart ) + { + FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply()" ))); + if ( iParseData.iDataMode ) + { + FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() (not ready) complete" ))); + return; + } + // If start of editor mode then just reissue the read request + // If continuation then echo and reissue the read request + if ( aStart ) + { + IssueRequest(); + FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() (start) complete" ))); + return; + } + iParseData.iAtCmdHandler->SendEchoCharacter( iBufferPtr, this ); + FTRACE(FPrint( _L("CDunUpstream::NotifyEditorModeReply() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdHandler +// Starts URC message handling +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::StartUrc() + { + FTRACE(FPrint( _L("CDunUpstream::StartUrc()" ))); + TInt retVal = KErrNone; + if ( iParseData.iAtCmdHandler ) // optional + { + retVal = iParseData.iAtCmdHandler->StartUrc(); + } + FTRACE(FPrint( _L("CDunUpstream::StartUrc() complete" ))); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdHandler +// Stops AT command handling downstream related activity (also URC) +// --------------------------------------------------------------------------- +// +TInt CDunUpstream::StopAtCmdHandling() + { + FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling()" ))); + TInt retVal = KErrNone; + if ( iParseData.iAtCmdHandler ) // optional + { + retVal = iParseData.iAtCmdHandler->StopUrc(); + if ( retVal != KErrNone ) + { + iParseData.iAtCmdHandler->Stop(); + FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling() (iAtCmdHandler) complete" ))); + return retVal; + } + retVal = iParseData.iAtCmdHandler->Stop(); + } + FTRACE(FPrint( _L("CDunUpstream::StopAtCmdHandling() complete" ))); + return retVal; + } + +// --------------------------------------------------------------------------- +// From class MDunCmdModeMonitor. +// Notifies about command mode start +// --------------------------------------------------------------------------- +// +void CDunUpstream::NotifyCommandModeStart() + { + FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeStart()" ))); + iParseData.iDataMode = EFalse; + // Stop processing (just to be sure). + // This will stop any possibly pending operations of + // CDunAtCmdHandler and CDunAtUrcHandler. CDunDownstream will take care of + // clearing (and stopping) non-callback write queues. + StopAtCmdHandling(); + // Also restart the URC handling after the data mode + StartUrc(); + FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeStart() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunCmdModeMonitor. +// Notifies about command mode end +// --------------------------------------------------------------------------- +// +void CDunUpstream::NotifyCommandModeEnd() + { + FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeEnd()" ))); + iParseData.iDataMode = ETrue; + // Stop processing (mandatory). + // This will stop any possibly pending operations of + // CDunAtCmdHandler and CDunAtUrcHandler. CDunDownstream will take care of + // clearing (and stopping) non-callback write queues. + StopAtCmdHandling(); + // The follow is needed because stopping the AT command handling here + // prevents the subsequent AT command handling notification to reach the + // NotifyAtCmdHandlingEnd() in this class (the notification starts from + // CDunAtCmdPusher's SetToIdleAndNotifyEnd()). + // So here we have to do the block "if ( aStartIndex < 0 )" in function + // NotifyAtCmdHandlingEnd(). + IssueRequest(); + FTRACE(FPrint( _L("CDunUpstream::NotifyCommandModeEnd() complete" ))); + } + +// --------------------------------------------------------------------------- +// From class MDunAtCmdEchoer. +// Notifies about command mode end +// --------------------------------------------------------------------------- +// +void CDunUpstream::NotifyEchoComplete() + { + FTRACE(FPrint( _L("CDunUpstream::NotifyEchoComplete()" ))); + IssueRequest(); + FTRACE(FPrint( _L("CDunUpstream::NotifyEchoComplete() complete" ))); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/dun/utils/src/DunUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/dun/utils/src/DunUtils.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2006-2007 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: Common utility methods for DUN +* +*/ + + +#include +#include "DunUtils.h" +#include "DunDebug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Connects to comms server +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunUtils::ConnectCommsServer( RCommServ& aCommServer ) + { + FTRACE(FPrint(_L( "CDunUtils::ConnectCommsServer()") )); + TInt retTemp; +#ifndef PRJ_USE_NETWORK_STUBS + retTemp = StartC32(); + if ( retTemp!=KErrNone && retTemp!=KErrAlreadyExists ) + { + FTRACE(FPrint(_L( "CDunUtils::ConnectCommsServer() StartC32 %d" ), retTemp)); + return retTemp; + } +#endif + retTemp = aCommServer.Connect(); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L( "CDunUtils::ConnectCommsServer() aCommServer.Connect %d" ), retTemp)); + return retTemp; + } + FTRACE(FPrint(_L( "CDunUtils::ConnectCommsServer() complete") )); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Sets RComm buffer length +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CDunUtils::SetRCommBufferLength( RComm& aComm, TInt aLength ) + { + FTRACE(FPrint(_L( "CDunUtils::SetRCommBufferLength()") )); + TInt retTemp = aComm.SetReceiveBufferLength( aLength ); + if ( retTemp != KErrNone ) + { + FTRACE(FPrint(_L( "CDunUtils::SetRCommBufferLength() (set failed) complete (%d)"), retTemp)); + return retTemp; + } + TInt setLength = aComm.ReceiveBufferLength(); + if ( setLength != aLength ) + { + FTRACE(FPrint(_L( "CDunUtils::SetRCommBufferLength() (get failed) complete") )); + return KErrGeneral; + } + FTRACE(FPrint(_L( "CDunUtils::SetRCommBufferLength() complete") )); + return KErrNone; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/bwins/generichidu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/bwins/generichidu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,101 @@ +EXPORTS + ?Unit@CField@@QBEHXZ @ 1 NONAME ; int CField::Unit(void) const + ?IsInReport@CField@@QBEHH@Z @ 2 NONAME ; int CField::IsInReport(int) const + ?NewLC@CGenericHid@@SAPAV1@PAVMTransportLayer@@@Z @ 3 NONAME ; class CGenericHid * CGenericHid::NewLC(class MTransportLayer *) + ?UsageMax@CField@@QBEHXZ @ 4 NONAME ; int CField::UsageMax(void) const + ?UnitExponent@CField@@QBEHXZ @ 5 NONAME ; int CField::UnitExponent(void) const + ?StringMin@CField@@QBEHXZ @ 6 NONAME ; int CField::StringMin(void) const + ?NewL@CHidDriver@@SAPAV1@VTUid@@PAVMDriverAccess@@@Z @ 7 NONAME ; class CHidDriver * CHidDriver::NewL(class TUid, class MDriverAccess *) + ?SetOffset@CField@@QAEXH@Z @ 8 NONAME ; void CField::SetOffset(int) + ?NewLC@CParser@@SAPAV1@XZ @ 9 NONAME ; class CParser * CParser::NewLC(void) + ?SetStringRange@CField@@QAEXHH@Z @ 10 NONAME ; void CField::SetStringRange(int, int) + ?ReportSizeBytes@CReportRoot@@QBEHHW4TType@CField@@@Z @ 11 NONAME ; int CReportRoot::ReportSizeBytes(int, enum CField::TType) const + ?ClearUsageList@CField@@QAEXXZ @ 12 NONAME ; void CField::ClearUsageList(void) + ?IsNamedArray@CCollection@@QBEHXZ @ 13 NONAME ; int CCollection::IsNamedArray(void) const + ?SetUnitExponent@CField@@QAEXH@Z @ 14 NONAME ; void CField::SetUnitExponent(int) + ?SetAttributes@CField@@QAEXK@Z @ 15 NONAME ; void CField::SetAttributes(unsigned long) + ?SetPhysicalMin@CField@@QAEXH@Z @ 16 NONAME ; void CField::SetPhysicalMin(int) + ?SetUsagePage@CField@@QAEXH@Z @ 17 NONAME ; void CField::SetUsagePage(int) + ?SetStringMin@CField@@QAEXH@Z @ 18 NONAME ; void CField::SetStringMin(int) + ?CollectionByIndex@CCollection@@QBEPBV1@H@Z @ 19 NONAME ; class CCollection const * CCollection::CollectionByIndex(int) const + ?FieldByIndex@CCollection@@QBEPBVCField@@H@Z @ 20 NONAME ; class CField const * CCollection::FieldByIndex(int) const + ?SetPhysicalRange@CField@@QAEXHH@Z @ 21 NONAME ; void CField::SetPhysicalRange(int, int) + ?SetDesignatorRange@CField@@QAEXHH@Z @ 22 NONAME ; void CField::SetDesignatorRange(int, int) + ?CollectionCount@CCollection@@QBEHXZ @ 23 NONAME ; int CCollection::CollectionCount(void) const + ?NewLC@CReportGenerator@@SAPAV1@PBVCReportRoot@@HW4TType@CField@@@Z @ 24 NONAME ; class CReportGenerator * CReportGenerator::NewLC(class CReportRoot const *, int, enum CField::TType) + ?IsInput@CField@@QBEHXZ @ 25 NONAME ; int CField::IsInput(void) const + ?StringMax@CField@@QBEHXZ @ 26 NONAME ; int CField::StringMax(void) const + ?SetLogicalMin@CField@@QAEXH@Z @ 27 NONAME ; void CField::SetLogicalMin(int) + ?GetUsageId@TReportTranslator@@QBEHAAHH@Z @ 28 NONAME ; int TReportTranslator::GetUsageId(int &, int) const + ?SearchL@THidFieldSearch@@QAEXPBVCReportRoot@@PAVMHidFieldFinder@@@Z @ 29 NONAME ; void THidFieldSearch::SearchL(class CReportRoot const *, class MHidFieldFinder *) + ?IsConstant@CField@@QBEHXZ @ 30 NONAME ; int CField::IsConstant(void) const + ?PhysicalMin@CField@@QBEHXZ @ 31 NONAME ; int CField::PhysicalMin(void) const + ?ParseL@CParser@@QAEPAVCReportRoot@@ABVTDesC8@@@Z @ 32 NONAME ; class CReportRoot * CParser::ParseL(class TDesC8 const &) + ?AddUsageL@CField@@QAEXH@Z @ 33 NONAME ; void CField::AddUsageL(int) + ?Count@CField@@QBEHXZ @ 34 NONAME ; int CField::Count(void) const + ?SetSize@CField@@QAEXH@Z @ 35 NONAME ; void CField::SetSize(int) + ??0TReportTranslator@@QAE@ABVTDesC8@@PBVCField@@@Z @ 36 NONAME ; TReportTranslator::TReportTranslator(class TDesC8 const &, class CField const *) + ?ReportId@CField@@QBEHXZ @ 37 NONAME ; int CField::ReportId(void) const + ?IsArray@CField@@QBEHXZ @ 38 NONAME ; int CField::IsArray(void) const + ?SetPhysicalMax@CField@@QAEXH@Z @ 39 NONAME ; void CField::SetPhysicalMax(int) + ?NewL@CGenericHid@@SAPAV1@PAVMTransportLayer@@@Z @ 40 NONAME ; class CGenericHid * CGenericHid::NewL(class MTransportLayer *) + ?HasUsage@CField@@QBEHH@Z @ 41 NONAME ; int CField::HasUsage(int) const + ?SetStringMax@CField@@QAEXH@Z @ 42 NONAME ; void CField::SetStringMax(int) + ?IsFeature@CField@@QBEHXZ @ 43 NONAME ; int CField::IsFeature(void) const + ?StringIndex@CField@@QBEHXZ @ 44 NONAME ; int CField::StringIndex(void) const + ?Report@CReportGenerator@@QAE?AVTPtr8@@XZ @ 45 NONAME ; class TPtr8 CReportGenerator::Report(void) + ??0CHidDriver@@IAE@XZ @ 46 NONAME ; CHidDriver::CHidDriver(void) + ?AllowedToHandleEvent@CHidInputDataHandlingReg@@QAEHHH@Z @ 47 NONAME ; int CHidInputDataHandlingReg::AllowedToHandleEvent(int, int) + ?UsageIdL@TReportTranslator@@QBEHH@Z @ 48 NONAME ; int TReportTranslator::UsageIdL(int) const + ?SetLogicalMax@CField@@QAEXH@Z @ 49 NONAME ; void CField::SetLogicalMax(int) + ?IsOutput@CField@@QBEHXZ @ 50 NONAME ; int CField::IsOutput(void) const + ?Usage@CCollection@@QBEHXZ @ 51 NONAME ; int CCollection::Usage(void) const + ?SetUnit@CField@@QAEXH@Z @ 52 NONAME ; void CField::SetUnit(int) + ?PhysicalMax@CField@@QBEHXZ @ 53 NONAME ; int CField::PhysicalMax(void) const + ?IsData@CField@@QBEHXZ @ 54 NONAME ; int CField::IsData(void) const + ?SetUsageRange@CField@@QAEXHH@Z @ 55 NONAME ; void CField::SetUsageRange(int, int) + ?DesignatorIndex@CField@@QBEHXZ @ 56 NONAME ; int CField::DesignatorIndex(void) const + ?IsApplication@CCollection@@QBEHXZ @ 57 NONAME ; int CCollection::IsApplication(void) const + ?LogicalMin@CField@@QBEHXZ @ 58 NONAME ; int CField::LogicalMin(void) const + ?DesignatorMin@CField@@QBEHXZ @ 59 NONAME ; int CField::DesignatorMin(void) const + ?RawValueL@TReportTranslator@@QBEHH@Z @ 60 NONAME ; int TReportTranslator::RawValueL(int) const + ?SetDesignatorIndex@CField@@QAEXH@Z @ 61 NONAME ; void CField::SetDesignatorIndex(int) + ?AddHandledEvent@CHidInputDataHandlingReg@@QAEXHH@Z @ 62 NONAME ; void CHidInputDataHandlingReg::AddHandledEvent(int, int) + ?Type@CField@@QBE?AW4TType@1@XZ @ 63 NONAME ; enum CField::TType CField::Type(void) const + ?Attributes@CField@@QBEKXZ @ 64 NONAME ; unsigned long CField::Attributes(void) const + ?IsReport@CCollection@@QBEHXZ @ 65 NONAME ; int CCollection::IsReport(void) const + ?IsUsageModifier@CCollection@@QBEHXZ @ 66 NONAME ; int CCollection::IsUsageModifier(void) const + ?LastUsage@CField@@QBEHXZ @ 67 NONAME ; int CField::LastUsage(void) const + ?SetUsageMin@CField@@QAEXH@Z @ 68 NONAME ; void CField::SetUsageMin(int) + ?IsUsageSwitch@CCollection@@QBEHXZ @ 69 NONAME ; int CCollection::IsUsageSwitch(void) const + ?Size@CField@@QBEHXZ @ 70 NONAME ; int CField::Size(void) const + ?IsLogical@CCollection@@QBEHXZ @ 71 NONAME ; int CCollection::IsLogical(void) const + ?FieldCount@CCollection@@QBEHXZ @ 72 NONAME ; int CCollection::FieldCount(void) const + ?SetField@CReportGenerator@@QAEHPBVCField@@HHH@Z @ 73 NONAME ; int CReportGenerator::SetField(class CField const *, int, int, int) + ?IsPhysical@CCollection@@QBEHXZ @ 74 NONAME ; int CCollection::IsPhysical(void) const + ?LogicalMax@CField@@QBEHXZ @ 75 NONAME ; int CField::LogicalMax(void) const + ?SetDesignatorMin@CField@@QAEXH@Z @ 76 NONAME ; void CField::SetDesignatorMin(int) + ?DesignatorMax@CField@@QBEHXZ @ 77 NONAME ; int CField::DesignatorMax(void) const + ?Type@CCollection@@QBEKXZ @ 78 NONAME ; unsigned long CCollection::Type(void) const + ?Count@TReportTranslator@@QBEHXZ @ 79 NONAME ; int TReportTranslator::Count(void) const + ?GetValue@TReportTranslator@@QBEHAAHHH@Z @ 80 NONAME ; int TReportTranslator::GetValue(int &, int, int) const + ?IsVariable@CField@@QBEHXZ @ 81 NONAME ; int CField::IsVariable(void) const + ?ValueL@TReportTranslator@@QBEHHH@Z @ 82 NONAME ; int TReportTranslator::ValueL(int, int) const + ?SetUsageMax@CField@@QAEXH@Z @ 83 NONAME ; void CField::SetUsageMax(int) + ?SetType@CField@@QAEXABW4TType@1@@Z @ 84 NONAME ; void CField::SetType(enum CField::TType const &) + ?Usage@CField@@QBEHH@Z @ 85 NONAME ; int CField::Usage(int) const + ?NewL@CReportGenerator@@SAPAV1@PBVCReportRoot@@HW4TType@CField@@@Z @ 86 NONAME ; class CReportGenerator * CReportGenerator::NewL(class CReportRoot const *, int, enum CField::TType) + ?UsagePage@CField@@QBEHXZ @ 87 NONAME ; int CField::UsagePage(void) const + ?SetStringIndex@CField@@QAEXH@Z @ 88 NONAME ; void CField::SetStringIndex(int) + ?UsageMin@CField@@QBEHXZ @ 89 NONAME ; int CField::UsageMin(void) const + ?UsageArray@CField@@QBE?AV?$TArray@H@@XZ @ 90 NONAME ; class TArray CField::UsageArray(void) const + ?SetCount@CField@@QAEXH@Z @ 91 NONAME ; void CField::SetCount(int) + ?UsagePage@CCollection@@QBEHXZ @ 92 NONAME ; int CCollection::UsagePage(void) const + ??1CHidDriver@@UAE@XZ @ 93 NONAME ; CHidDriver::~CHidDriver(void) + ?Offset@CField@@QBEHXZ @ 94 NONAME ; int CField::Offset(void) const + ?SetDesignatorMax@CField@@QAEXH@Z @ 95 NONAME ; void CField::SetDesignatorMax(int) + ?SetReportId@CField@@QAEXH@Z @ 96 NONAME ; void CField::SetReportId(int) + ?NewL@CParser@@SAPAV1@XZ @ 97 NONAME ; class CParser * CParser::NewL(void) + ?UsageCount@CField@@QBEHXZ @ 98 NONAME ; int CField::UsageCount(void) const + ?SetLogicalRange@CField@@QAEXHH@Z @ 99 NONAME ; void CField::SetLogicalRange(int, int) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/eabi/generichidu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/eabi/generichidu.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,122 @@ +EXPORTS + _ZN10CHidDriver4NewLE4TUidP13MDriverAccess @ 1 NONAME + _ZN10CHidDriverC2Ev @ 2 NONAME + _ZN10CHidDriverD0Ev @ 3 NONAME + _ZN10CHidDriverD1Ev @ 4 NONAME + _ZN10CHidDriverD2Ev @ 5 NONAME + _ZN11CGenericHid4NewLEP15MTransportLayer @ 6 NONAME + _ZN11CGenericHid5NewLCEP15MTransportLayer @ 7 NONAME + _ZN15THidFieldSearch7SearchLEPK11CReportRootP15MHidFieldFinder @ 8 NONAME + _ZN16CReportGenerator4NewLEPK11CReportRootiN6CField5TTypeE @ 9 NONAME + _ZN16CReportGenerator5NewLCEPK11CReportRootiN6CField5TTypeE @ 10 NONAME + _ZN16CReportGenerator6ReportEv @ 11 NONAME + _ZN16CReportGenerator8SetFieldEPK6CFieldiii @ 12 NONAME + _ZN17TReportTranslatorC1ERK6TDesC8PK6CField @ 13 NONAME + _ZN17TReportTranslatorC2ERK6TDesC8PK6CField @ 14 NONAME + _ZN24CHidInputDataHandlingReg15AddHandledEventEii @ 15 NONAME + _ZN24CHidInputDataHandlingReg20AllowedToHandleEventEii @ 16 NONAME + _ZN6CField11SetReportIdEi @ 17 NONAME + _ZN6CField11SetUsageMaxEi @ 18 NONAME + _ZN6CField11SetUsageMinEi @ 19 NONAME + _ZN6CField12SetStringMaxEi @ 20 NONAME + _ZN6CField12SetStringMinEi @ 21 NONAME + _ZN6CField12SetUsagePageEi @ 22 NONAME + _ZN6CField13SetAttributesEm @ 23 NONAME + _ZN6CField13SetLogicalMaxEi @ 24 NONAME + _ZN6CField13SetLogicalMinEi @ 25 NONAME + _ZN6CField13SetUsageRangeEii @ 26 NONAME + _ZN6CField14ClearUsageListEv @ 27 NONAME + _ZN6CField14SetPhysicalMaxEi @ 28 NONAME + _ZN6CField14SetPhysicalMinEi @ 29 NONAME + _ZN6CField14SetStringIndexEi @ 30 NONAME + _ZN6CField14SetStringRangeEii @ 31 NONAME + _ZN6CField15SetLogicalRangeEii @ 32 NONAME + _ZN6CField15SetUnitExponentEi @ 33 NONAME + _ZN6CField16SetDesignatorMaxEi @ 34 NONAME + _ZN6CField16SetDesignatorMinEi @ 35 NONAME + _ZN6CField16SetPhysicalRangeEii @ 36 NONAME + _ZN6CField18SetDesignatorIndexEi @ 37 NONAME + _ZN6CField18SetDesignatorRangeEii @ 38 NONAME + _ZN6CField7SetSizeEi @ 39 NONAME + _ZN6CField7SetTypeERKNS_5TTypeE @ 40 NONAME + _ZN6CField7SetUnitEi @ 41 NONAME + _ZN6CField8SetCountEi @ 42 NONAME + _ZN6CField9AddUsageLEi @ 43 NONAME + _ZN6CField9SetOffsetEi @ 44 NONAME + _ZN7CParser4NewLEv @ 45 NONAME + _ZN7CParser5NewLCEv @ 46 NONAME + _ZN7CParser6ParseLERK6TDesC8 @ 47 NONAME + _ZNK11CCollection10FieldCountEv @ 48 NONAME + _ZNK11CCollection10IsPhysicalEv @ 49 NONAME + _ZNK11CCollection12FieldByIndexEi @ 50 NONAME + _ZNK11CCollection12IsNamedArrayEv @ 51 NONAME + _ZNK11CCollection13IsApplicationEv @ 52 NONAME + _ZNK11CCollection13IsUsageSwitchEv @ 53 NONAME + _ZNK11CCollection15CollectionCountEv @ 54 NONAME + _ZNK11CCollection15IsUsageModifierEv @ 55 NONAME + _ZNK11CCollection17CollectionByIndexEi @ 56 NONAME + _ZNK11CCollection4TypeEv @ 57 NONAME + _ZNK11CCollection5UsageEv @ 58 NONAME + _ZNK11CCollection8IsReportEv @ 59 NONAME + _ZNK11CCollection9IsLogicalEv @ 60 NONAME + _ZNK11CCollection9UsagePageEv @ 61 NONAME + _ZNK11CReportRoot15ReportSizeBytesEiN6CField5TTypeE @ 62 NONAME + _ZNK17TReportTranslator10GetUsageIdERii @ 63 NONAME + _ZNK17TReportTranslator5CountEv @ 64 NONAME + _ZNK17TReportTranslator6ValueLEii @ 65 NONAME + _ZNK17TReportTranslator8GetValueERiii @ 66 NONAME + _ZNK17TReportTranslator8UsageIdLEi @ 67 NONAME + _ZNK17TReportTranslator9RawValueLEi @ 68 NONAME + _ZNK6CField10AttributesEv @ 69 NONAME + _ZNK6CField10IsConstantEv @ 70 NONAME + _ZNK6CField10IsInReportEi @ 71 NONAME + _ZNK6CField10IsVariableEv @ 72 NONAME + _ZNK6CField10LogicalMaxEv @ 73 NONAME + _ZNK6CField10LogicalMinEv @ 74 NONAME + _ZNK6CField10UsageArrayEv @ 75 NONAME + _ZNK6CField10UsageCountEv @ 76 NONAME + _ZNK6CField11PhysicalMaxEv @ 77 NONAME + _ZNK6CField11PhysicalMinEv @ 78 NONAME + _ZNK6CField11StringIndexEv @ 79 NONAME + _ZNK6CField12UnitExponentEv @ 80 NONAME + _ZNK6CField13DesignatorMaxEv @ 81 NONAME + _ZNK6CField13DesignatorMinEv @ 82 NONAME + _ZNK6CField15DesignatorIndexEv @ 83 NONAME + _ZNK6CField4SizeEv @ 84 NONAME + _ZNK6CField4TypeEv @ 85 NONAME + _ZNK6CField4UnitEv @ 86 NONAME + _ZNK6CField5CountEv @ 87 NONAME + _ZNK6CField5UsageEi @ 88 NONAME + _ZNK6CField6IsDataEv @ 89 NONAME + _ZNK6CField6OffsetEv @ 90 NONAME + _ZNK6CField7IsArrayEv @ 91 NONAME + _ZNK6CField7IsInputEv @ 92 NONAME + _ZNK6CField8HasUsageEi @ 93 NONAME + _ZNK6CField8IsOutputEv @ 94 NONAME + _ZNK6CField8ReportIdEv @ 95 NONAME + _ZNK6CField8UsageMaxEv @ 96 NONAME + _ZNK6CField8UsageMinEv @ 97 NONAME + _ZNK6CField9IsFeatureEv @ 98 NONAME + _ZNK6CField9LastUsageEv @ 99 NONAME + _ZNK6CField9StringMaxEv @ 100 NONAME + _ZNK6CField9StringMinEv @ 101 NONAME + _ZNK6CField9UsagePageEv @ 102 NONAME + _ZTI10CHidDriver @ 103 NONAME ; ## + _ZTI11CCollection @ 104 NONAME ; ## + _ZTI11CGenericHid @ 105 NONAME ; ## + _ZTI11CReportRoot @ 106 NONAME ; ## + _ZTI15CDriverListItem @ 107 NONAME ; ## + _ZTI16CReportGenerator @ 108 NONAME ; ## + _ZTI24CHidInputDataHandlingReg @ 109 NONAME ; ## + _ZTI6CField @ 110 NONAME ; ## + _ZTI7CParser @ 111 NONAME ; ## + _ZTV10CHidDriver @ 112 NONAME ; ## + _ZTV11CCollection @ 113 NONAME ; ## + _ZTV11CGenericHid @ 114 NONAME ; ## + _ZTV11CReportRoot @ 115 NONAME ; ## + _ZTV15CDriverListItem @ 116 NONAME ; ## + _ZTV16CReportGenerator @ 117 NONAME ; ## + _ZTV24CHidInputDataHandlingReg @ 118 NONAME ; ## + _ZTV6CField @ 119 NONAME ; ## + _ZTV7CParser @ 120 NONAME ; ## + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2005-2007 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: Build information file for project generichid +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../rom/generichid.iby CORE_MW_LAYER_IBY_EXPORT_PATH(generichid.iby) + +PRJ_MMPFILES +generichid.mmp diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/group/generichid.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/group/generichid.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2004-2007 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: Project definition file for project generichid +* +*/ + + +#include +#include + +TARGET generichid.dll +TARGETTYPE DLL +UID 0x1000008d 0x10281cfe + +CAPABILITY CAP_APPLICATION CommDD ProtServ // two latter needed by USB +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE hidgeneric.cpp +SOURCE hiddriveritem.cpp +SOURCE hidfield.cpp +SOURCE hidparser.cpp +SOURCE hiditem.cpp +SOURCE hidcollection.cpp +SOURCE hidsearch.cpp +SOURCE hidreporttranslator.cpp +SOURCE hidreportroot.cpp +SOURCE hidreportbase.cpp +SOURCE hidreportgenerator.cpp +SOURCE hidinterfaces.cpp +SOURCE hidconnectioninfo.cpp + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc +USERINCLUDE ../../../inc + +LIBRARY euser.lib +LIBRARY ecom.lib + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/group/generichid.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/group/generichid.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component generichid + +source \sf\mw\remoteconn\localconnectivityservice\generichid + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/debug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/debug.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2006 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: Logging definition +* +*/ + + +#ifndef PRJ_LOGGING_H +#define PRJ_LOGGING_H + +#include "debugconfig.h" + +#ifdef PRJ_ENABLE_TRACE + +#ifdef PRJ_FILE_TRACE +#include +#else +#include +#endif + +const TInt KMaxLogLineLength = 512; + +#define KPRINTERROR 0x00000001 // Tracing level: error +#define KPRINTINFO 0x00000002 // Tracing level: function trace +#define KPRINTSTATE 0x00000004 // Tracing level: state machine info +#define KPRINTWARNING 0x00000008 // Tracing level: warning + +const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING; + +NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow + { +public: + void Overflow(TDes16& /*aDes*/) {} + }; + +NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow + { +public: + void Overflow(TDes8& /*aDes*/) {} + }; + +inline void Trace(TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list,aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TBuf16 theFinalString; + theFinalString.Append(KTracePrefix16); + TOverflowTruncate16 overflow; + theFinalString.AppendFormatList(aFmt,list,&overflow); + RDebug::Print(theFinalString); +#endif + } + +inline void Trace(TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list, aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TOverflowTruncate8 overflow; + TBuf8 buf8; + buf8.Append(KTracePrefix8); + buf8.AppendFormatList(aFmt, list, &overflow); + TBuf16 buf16(buf8.Length()); + buf16.Copy(buf8); + TRefByValue tmpFmt(_L("%S")); + RDebug::Print(tmpFmt, &buf16); +#endif + } + +inline void TracePanic( + char* aFile, + TInt aLine, + TInt aPanicCode, + const TDesC& aPanicCategory) + { + TPtrC8 fullFileName((const TUint8*)aFile); + TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1); + TBuf8 buf; + buf.Append(KPanicPrefix8); + buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName); + Trace(buf); + User::Panic(aPanicCategory, aPanicCode); + } + +inline void TraceLeave(char* aFile, TInt aLine, TInt aReason) + { + TPtrC8 fullFileName((const TUint8*)aFile); + TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1); + TBuf8 buf; + buf.Append(KLeavePrefix8); + buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName); + Trace(buf); + User::LeaveIfError(aReason); + } + +#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;} + +#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;} + +#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;} + +#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;} + +#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;} + +#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);} + +#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory) + +#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);} + +#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);} + +#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}} + +#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}} + +#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}} + +#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}} + +#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}} + +#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}} + +#else // PRJ_ENABLE_TRACE not defined + +#define TRACE_INFO(p) + +#define TRACE_ERROR(p) + +#define TRACE_STATE(p) + +#define TRACE_WARNING(p) + +#define TRACE_INFO_SEG(p) + +#define TRACE_ASSERT(GUARD, CODE) + +#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);} + +#define LEAVE_IF_ERROR(REASON) {static_cast(User::LeaveIfError(REASON));} + +#define LEAVE(REASON) {static_cast(User::Leave(REASON));} + +#define TRACE_FUNC_ENTRY + +#define TRACE_FUNC_ENTRY_THIS + +#define TRACE_FUNC_EXIT + +#define TRACE_FUNC + +#define TRACE_FUNC_THIS + +#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;} +#endif // PRJ_ENABLE_TRACE + +#endif // PRJ_LOGGING_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/debugconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/debugconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2006 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: Project configure file. +* +*/ + + +#ifndef GENERICHID_DEBUGCONFIG_H +#define GENERICHID_DEBUGCONFIG_H + +#include "prjconfig.h" + + +/** + * Custom logging variations. + */ +#ifdef PRJ_FILE_TRACE +_LIT(KLogFile,"generichid.txt"); +_LIT(KLogDir,"generichid"); +#endif + +#ifdef PRJ_ENABLE_TRACE +_LIT(KTracePrefix16, "[generichid] "); +_LIT8(KTracePrefix8, "[generichid] "); +_LIT8(KFuncFormat8, "><%S"); +_LIT8(KFuncThisFormat8, "><%S, [0x%08X]"); +_LIT8(KFuncEntryFormat8, ">%S"); +_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]"); +_LIT8(KFuncExitFormat8, "<%S"); + +_LIT(KPanicCategory, "generichid"); +_LIT8(KPanicPrefix8, "PANIC code "); +_LIT8(KLeavePrefix8, "LEAVE code "); +#endif + +#endif // OBEXSM_DEBUGCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hidconnectioninfo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hidconnectioninfo.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 2008-2008 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: ?Description +* +*/ + + +#ifndef C_CONNECTIONINFO_H_ +#define C_CONNECTIONINFO_H_ + + +#include + +class CReportRoot; +class CHidDriver; + +/** + * CConnectionInfo + * Connection information + * + * + * @lib generichid.lib + * @since S60 v5.0 + */ +NONSHARABLE_CLASS ( CConnectionInfo ) : public CBase + { + +public: + /** + * Two-phased constructor. + * @param aConnectionID Connection identifier + * @param aReportRoot Connection ReportRoot + */ + static CConnectionInfo* NewL(TInt aConnectionID, CReportRoot* aReportRoot); + static CConnectionInfo* NewLC(TInt aConnectionID, CReportRoot* aReportRoot); + + /** + * Destructor. + */ + virtual ~CConnectionInfo(); + +public: + /** + * Get Connection id + * + * @since S60 v5.0 + * @return connection id + */ + TInt ConnectionID(); + + /** + * Get report id + * + * @since S60 v5.0 + * @return report id + */ + CReportRoot* ReportRoot(); + + /** + * Set last command handler + * + * @since S60 v5.0 + * @param aHidDriverItem hiddriver item + * @return None + */ + void SetLastCommandHandler(CHidDriver* aHidDriverItem); + + /** + * Set last command handler + * + * @since S60 v5.0 + * @param aHidDriverItem hiddriver item + * @return None + */ + CHidDriver* ReturnLastCommandHandler(); + +private: + CConnectionInfo(TInt aConnectionID, CReportRoot* aReportRoot); + +private: + + /** + * Connection id + */ + TInt iConnectionID; + + /** + * Connection id + * Own. + */ + CReportRoot* iReportRoot; + + /** + * Pointer to last driver which handled last command + * Not own. + */ + CHidDriver* iLastCmdDriver; + }; + +#endif /* C_CONNECTIONINFO_H_ */ diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hiddriveritem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hiddriveritem.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2004-2007 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: Declares driver list itemapplication class. +* +*/ + + + +#ifndef C_DRIVERLISTITEM_H +#define C_DRIVERLISTITEM_H + +#include "hidreportroot.h" +#include "hidinterfaces.h" + +/** + * Container class so we can maintain a list of driver instances + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CDriverListItem : public CBase + { + // Give access to the TSglQueLink offset: + friend class CGenericHid; + +public : + + explicit CDriverListItem(TInt aConnectionId); + + /** + * Destructor. + */ + virtual ~CDriverListItem(); + + + /** + * Set driver instance + * + * @since S60 v5.0 + * @param aDriver Driver instance + * @return None + */ + void SetDriver(CHidDriver* aDriver); + + /** + * Return connection ID + * + * @since S60 v5.0 + * @return Connection id + */ + TInt ConnectionId() const; + + /** + * Return driver instance + * + * @since S60 v5.0 + * @return driver instance + */ + CHidDriver* Driver() const; + + +private : + + /** + * Queue link + */ + TSglQueLink iSlink; + + /** + * The transport-layer ID for the connection + */ + TInt iConnectionId; + + /** + * The device driver + * Own. + */ + CHidDriver* iDriver; + + }; +#endif + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hiditem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hiditem.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,198 @@ +/* +* Copyright (c) 2005-2007 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: BTHid item +* +*/ + + +#ifndef T_ITEM_H +#define T_ITEM_H + +#include + +/** + * HID item class + * A HID report descriptor is comprised of a sequence of "items" + * that provide information about the device. Items consist of a + * header and zero or more bytes of data. The header contains the item + * type (main/global/local), an item "tag" (subtype) and the item size. + * Items can be "short" (containing a maximum of 4 bytes of data) or + * "long" (a maximum of 255 bytes of data). + + * A TItem represents a single HID report descriptor item. It is + * constructed from an eight bit non-modifiable (Symbian-) descriptor, + * which is assumed to contain report (HID-) descriptor data. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TItem + { +public: + /** + * The possible item types: main, global or local. Item type is + * a two-bit field -- the 11b value is reserved for "long items", which + * are only used for vendor-specific commands. + */ + enum TItemType + { + EMain = 0, //!< Input, output, feature and begin or end collection + EGlobal = 1, //!< Global item items affect all subsequent fields + ELocal = 2, //!< Local items only persist until the next main item + EReserved = 3 //!< No defined use in the current HID standard (v1.11) + }; + +public: + + /** + * The constructor takes a an eight bit non-modifiable (Symbian-) + * descriptor containing report (HID-) descriptor data. + * The item tag, type, data size and offset are calculated here. + * + * @since S60 v5.0 + * @param aRawData The raw item data, represented as a Symbian + * descriptor. The item data is assumed to be at the beginning of the + * descriptor. The size of the TDesC8 may be greater than the size + * of the item, as the item size will be calculated from the raw HID + * descriptor data. Of course, the TDesC8 should be at least as + * long as the raw item data. + */ + TItem(const TDesC8& aRawData); + + /** + * DataSize() returns the size of the item data in bytes. This + * is the total item size minus the size of any header information. + * (A short item header is a single byte, a long item header is + * three bytes long.) + * + * @since S60 v5.0 + * @return The size, in bytes, of the item data. Range 0-255. + */ + TInt DataSize() const; + + /** + * Tag() returns the tag (subtype) value for this item. + * + * @since S60 v5.0 + * @return The item tag. + */ + TInt Tag() const; + + /** + * Data() returns the data associated with the item, represented as a + * 32-bit unsigned integer. This is only meaningful if the data length + * is less than 4 bytes. + * + * @since S60 v5.0 + * @return The item data as a 32-bit unsigned integer. + */ + TUint32 Data() const; + + /** + * SignedData() returns the data associated with the item, + * represented as a 32-bit signed integer. This is only + * meaningful if the data length is less than 4 bytes. + * + * @since S60 v5.0 + * @return The item data as a 32-bit signed integer. + */ + TInt32 SignedData() const; + + /** + * Returns the byte at the given offset within the item data block. + * + * @since S60 v5.0 + * @param aIndex The index within the data block for the current tag. + * @return The data at the specified index. + */ + TUint8 operator[](TInt aIndex) const; + + /** + * Type() returns the item type (e.g. "global"). + * + * @since S60 v5.0 + * @return The item type. + */ + TItemType Type() const; + + /** + * Check if item is main + * + * @since S60 v5.0 + * @return ETrue if item type is "main" + */ + TBool IsMain() const; + + /** + * Check if item is local + * + * @since S60 v5.0 + * @return ETrue if item type is "local" + */ + TBool IsLocal() const; + + /** + * Check if item is global + * + * @since S60 v5.0 + * @return ETrue if item type is "global" + */ + TBool IsGlobal() const; + + /** + * Check if item is global + * + * @since S60 v5.0 + * @return ETrue if this is a long item + */ + TBool IsLong() const; + + /** + * ItemSize() returns the total size of this item, including the + * header data. + * + * @since S60 v5.0 + * @return The total size of this item, in bytes. + */ + TInt ItemSize() const; + +private: + /** + * Pointer to the raw report descriptor data + */ + TPtrC8 iRawData; + + /** + * Item data size + */ + + TInt iSize; + /** + * Item tag value + */ + TInt iTag; + + /** + * Offset in bytes of the data block + */ + TInt iDataOffset; + + /** + * Item type + */ + TItemType iType; + }; + +#endif + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hidparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hidparser.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1041 @@ +/* +* Copyright (c) 2005-2007 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: BTHid item +* +*/ + +#ifndef C_PARSER_H +#define C_PARSER_H + +#include "hidreportroot.h" + +class TItem; + +/** + * HID Parser error codes. For a description of the error code + * format, see "HID Parser Error Codes", Revision 1.2, USB + * Implementers' Forum, February 2000. + */ +enum THidParserError + { + // General: + // + EUnknownItem = 0xbf00, + ELongItemDefined = 0x3e00, + // + // Global: + // + EZeroUsagePage = 0x8004, + EUsagePageOutOfRange = 0x8104, + ELogicalMinInvalidForArray = 0x8214, + ELogicalMaxInvalidForArray = 0x8224, + ELonelyPhysicalMin = 0x8034, + ELonelyPhysicalMax = 0x8044, + EZeroReportId = 0x8084, + EReportIdTooBig = 0x8184, + ELateReportId = 0x8284, + EReportIdOutsideTopLevel = 0x8484, + EZeroReportCount = 0x8094, + EPushWithoutPop = 0x80a4, + EPushHasData = 0x81a4, + EPopWithoutPush = 0x80b4, + EPopHasData = 0x81b4, + ERedundantGlobalItem = 0x80f4, + EReservedUsagePage = 0x0004, + ELogicalMinExceedsMax = 0x0014, + EPhysicalMinExceedsMax = 0x0034, + EExponentReservedBitsNonZero = 0x0054, + EUnitReservedBitsNonZero = 0x0064, + // + // Local: + // + ELonelyUsageMin = 0x8018, + EUsageMinExceedsMax = 0x8118, + EUsagePageMismatchMin = 0x8318, + ELonelyUsageMax = 0x8028, + EUsagePageMismatchMax = 0x8228, + ELonelyDesignatorMin = 0x8048, + EDesignatorMinExceedsMax = 0x8148, + ELonelyDesignatorMax = 0x8058, + ELonelyStringMin = 0x8088, + EStringMinExceedsMax = 0x8188, + ELonelyStringMax = 0x8098, + EUnknownDelimiter = 0x80a8, + ENestedDelimiter = 0x81a8, + ELonelyDelimiter = 0x82a8, + EInvalidItemWithinDelimiter = 0x83a8, + EDelimiterAtTopLevel = 0x84a8, + EZeroUsage = 0x0008, + // + // Main: + // + EInputMissingItems = 0x8080, + EInputItemWithinDelimiter = 0x8180, + EInputReportSize = 0x8280, + EInputMinExceedsMax = 0x8380, + EOutputMissingItems = 0x8090, + EOutputItemWithinDelimiter = 0x8190, + EOutputReportSize = 0x8290, + EOutputMinExceedsMax = 0x8390, + EFeatureMissingItems = 0x80b0, + EFeatureItemWithinDelimiter = 0x81b0, + EFeatureReportSize = 0x82b0, + EFeatureMinExceedsMax = 0x83b0, + ENoMatchingBeginCollection = 0x80c0, + EEndCollectionWithinDelimiter = 0x81c0, + EReportMustBeEightBitMultiple = 0x82c0, + ENoMatchingEndCollection = 0x80a0, + EBeginCollectionWithinDelimiter = 0x81a0, + EApplicationCollectionLevel = 0x82a0, + EInputReservedBitsNonZero = 0x0080, + EInputLocalMultipleUse = 0x0280, + EOutputReservedBitsNonZero = 0x0090, + EOutputLocalMultipleUse = 0x0290, + EFeatureReservedBitsNonZero = 0x00b0, + EFeatureLocalMultipleUse = 0x02b0, + ECollectionLocalUnused = 0x00a0, + ECollectionTypeUnknownReserved = 0x01a0, + EEndCollectionLocalUnused = 0x00c0, + EEndCollectionHasData = 0x01c0, + // + // Our ("vendor specific") codes: + // + EInvalidItemLength = 0xC000, + EApplicationHasDelimiter = 0x40a0, + EDelimiterWithinNamedArray = 0x40a8, + ECollectionHasNoUsage = 0x40c0, + ECollectionHasNoUsagePage = 0x41c0 + }; + +/** + * HID parser panics + */ +enum THidParsingError + { + // ASSERT_ALWAYS: + // + EZeroLengthItem = 1, //!< Zero descriptor length in TItem constructor + ENoReportRoot = 2, //!< iReportRoot is 0 in CreateFieldL() + ENoCurrentCollection = 3, //!< No current collection in Collection() + // + // ASSERT_DEBUG: + // + ENoCollectionToCheck = 10, //!< No collection in CheckForCollectionErrors() + EPopFailed = 11, //!< Empty collection stack in PopCollection() + EIndexOutOfRange = 12, //!< Index out of range in TItem::operator[] + EItemTooLong = 13 //!< Data() called for item with size > 4 + }; + + +/** + * Parser global states + * + * CParser uses TParserGlobalState objects to store the global item + * state during parsing. The global state can be saved and restored + * using the HID descriptor POP and PUSH tags, therefore CParser + * incorporates a stack of TParserGlobalState objects. + * + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TParserGlobalState + { + friend class CParser; + +public: + + TParserGlobalState(); + + /** + * Copies all data members into a CField object. The other + * members of the CField object (those corresponding to local + * HID descriptor tags) are unaffected. + * + * @since S60 v5.0 + * @param aField Pointer to the field object to populate. + * @return None. + */ + void Populate(CField *aField) const; + +private: + /** + * Usage page + */ + TInt iUsagePage; + + /** + * Logical minimum + */ + TInt iLogicalMin; + + /** + * Logical maximum + */ + TInt iLogicalMax; + + /** + * Physical minimum + */ + TInt iPhysicalMin; + + /** + * Physical maximum + */ + TInt iPhysicalMax; + + /** + * Unit type + */ + TInt iUnit; + + /** + * Unit exponent + */ + TInt iUnitExponent; + + /** + * Associated report ID + */ + TInt iReportId; + + /** + * Report size + */ + TInt iSize; + + /** + * Report count + */ + TInt iCount; + }; + + +/** + * + * HID parser + * CParser parses a HID report descriptor. It outputs a CReportRoot + * containing a tree of CCollection and CField objects representing + * the descriptor information. A HID device driver can then use this, + * in conjunction with TReportTranslator and CReportGenerator objects, + * to facilitate communication with a HID device. + * + * The parsing process conforms to the HID class specification + * document: "USB Device Class Definition for Human Interface Devices + * (HID)", Firmware Specification, Version 1.11, USB Implementers' Forum, + * June 2001. + * + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CParser : public CBase + { +public: + IMPORT_C static CParser* NewL(); + IMPORT_C static CParser* NewLC(); + + virtual ~CParser(); + + /** + * ParseL() parses a string of bytes representing a HID report + * descriptor. It returns a tree of collection and field objects (a + * CReportRoot). Ownership of the CReportRoot is transferred to the + * caller. + * + * Warning messages produced during the parse process are added to + * a list which the driver can retrieve using the Warnings() + * function. Note that the list will be overwritten by the next + * ParseL() operation. + * + * Errors and warnings are represented using the format described + * in "HID Parser Error Codes", Revision 1.2, USB Implementers' + * Forum, February 2000. + * + * @since S60 v5.0 + * @param aRawData The report descriptor data to be processed + * @return The root collection, a tree of CCollection and CField objects + */ + IMPORT_C CReportRoot* ParseL(const TDesC8& aRawData); + + /** + * Return field count + * + * @since S60 v5.0 + * @return field count + */ + TInt FieldCount(); + + + + + +private: + CParser(); + void ConstructL(); + + /** + * Handle a HID descriptor main item. This includes the creation + * of new field objects in the current collection and management of + * the global item state stack. + * + * @since S60 v5.0 + * @param aItem The current report descriptor tag and its associated data + * @return KErrNone (0) on success, otherwise a critical error code in + * the standard HID format. + */ + TInt MainItemL(const TItem& aItem); + + /** + * Handle a HID descriptor local item. Stores the data in the + * appropriate member of the local state object, *iLocal. + * + * @since S60 v5.0 + * @param aItem The current report descriptor tag and its associated data + * @return KErrNone (0) on success, otherwise a critical error code in + * the standard HID format. + */ + TInt LocalItemL(const TItem& aItem); + + /** + * Handle a HID descriptor global item. Stores the data in the + * appropriate member of the current global state object, iGlobal. + * + * @since S60 v5.0 + * @param aItem The current report descriptor tag and its associated data + * @return KErrNone (0) on success, otherwise a critical error code in + * the standard HID format. + */ + TInt GlobalItemL(const TItem& aItem); + + /** + * Used to access the current collection object, i.e. the object + * at the top of the collection stack (iCollectionStack). + * + * + * @since S60 v5.0 + * @return A pointer to the current collection object. + * + */ + CCollection* Collection(); + + /** + * Pushes a pointer to the current collection object on to the + * collection stack. + * + * Note that the collection stack is used to create the tree of + * collections. It should not be confused with the global state + * stack, iGlobalStack. + * + * @since S60 v5.0 + * @param aCollection The collection to be pushed onto the stack + * @return None. + * + */ + void PushCollectionL(const CCollection* aCollection); + + /** + * Pushes a pointer to the current collection object on to the + * collection stack. + * + * Note that the collection stack is used to create the tree of + * collections. It should not be confused with the global state + * stack, iGlobalStack. + * + * @since S60 v5.0 + * @return None. + * + */ + void PopCollection(); + + /** + * CreateFieldL() is called to instantiate a new CField object + * when an input, output or feature item is encountered in the + * report descriptor. + * + * The current local and global states extracted from the report + * descriptor are copied to the CField, which is placed into the + * current CCollection. + * + * @since S60 v5.0 + * @param aType The type of field: input, output or feature + * @param aAttributes The attributes for the field (e.g. Data, Array, + * Absolute.) + * @return KErrNone (0) on success, otherwise a critical error code + * in the standard HID format. + * + */ + TInt CreateFieldL(CField::TType aType, TUint32 aAttributes); + + /** + * ClearLocalState() clears the appropriate fields in the CField + * object that represents the current local item state. + * + * @since S60 v5.0 + * @return None + * + */ + void ClearLocalState(); + + /** + * DumpStateTableL() copies the current local and global item state + * into a CField object. + * + * @since S60 v5.0 + * @param aField The field object to receive the data + * @return None + * + */ + void DumpStateTableL(CField *aField) const; + + /** + * CreateCollectionL() is called to instantiate a new CCollection + * object when a "begin collection" item is encountered in the + * report descriptor. + * + * @since S60 v5.0 + * @param aType The type of the collection. This can be one of the + * seven standard types defined in CCollection::TType, + * or a vendor defined value. + * @return KErrNone (0) on success, otherwise a critical error code in + * the standard HID format. + */ + TInt CreateCollectionL(TUint32 aType); + + /** + * CheckForCollectionErrors() validates the current collection + * object. It adds non-critical errors to the warnings list. It + * returns an error code if a critical error is encountered. + * + * @since S60 v5.0 + * @param aType The type of the collection (one of the CCollection::TType + * values, or vendor defined). + * @return KErrNone (0) if there was no error, otherwise a critical + * error code in the standard HID format. + */ + TInt CheckForCollectionErrors(TUint32 aType); + + /** + * CheckForFieldErrors() validates the current global and local + * item state in preparation for creating a CField object. It adds + * non-critical errors to the warnings list. It returns an error + * code if a critical error is encountered. + * + * @since S60 v5.0 + * @param @param aType The type of the field (input, output or feature). + * @param aAttributes The attributes for the field (e.g. Data, Array, + * Absolute.) + * @return KErrNone (0) if there was no error, otherwise a critical + * error code in the standard HID format. + */ + TInt CheckForFieldErrors(CField::TType aType, TUint32 aAttributes); + + /** + * CheckForMainErrors() performs error checking common to + * CheckForCollectionErrors() and CheckForFieldErrors(). It adds + * non-critical errors to the warnings list. It returns an error + * code if a critical error is encountered. + * + * @since S60 v5.0 + * @return KErrNone (0) if there was no error, otherwise a critical + * error code in the standard HID format. + */ + TInt CheckForMainErrors(); + + /** + * CheckAllReportSizes() checks if all report sizes are integral + * multiples of 8 bits. + * + * @since S60 v5.0 + * @return ETrue if all report sizes are integral multiples of + * 8 bits. + */ + TBool CheckAllReportSizes() const; + + /** + * BitsToRepresentRange() returns the number of bits required to + * represent all values in a given range. It is used to check + * that the report field size is appropriate for the given + * logical minimum and maximum. + * + * If the range is all positive then it is assumed that there is no + * sign bit, otherwise twos complement format is assumed, as per + * the HID class specification, v1.11, Section 6.2.2.7. + * + * @since S60 v5.0 + * @param aMin Logical minimum + * @param aMax Logical maximum + * @return The number of bits required to represent the range aMin + * to aMax (inclusive). + */ + static TInt BitsToRepresentRange(TInt aMin, TInt aMax); + + /** + * NumberOfLeadingZeros() is used by BitsToRepresentRange(). It + * returns the number of leading zeros in the binary representation + * of a number, effectively performing a log_2 operation. + * + * @since S60 v5.0 + * @param aValue Unsigned 32-bit value + * @return Number of leading zeros in the binary representation of aValue + */ + static TInt NumberOfLeadingZeros(TUint32 aValue); + + /** + * IssueWarning() adds a TParserWarning to the warning list. + * + * @since S60 v5.0 + * @param aHidWarningCode The error or warning code, which should + * be in the standard HID format. + * @return None + */ + void IssueWarning(TInt aHidWarningCode); + + /** + * IsReservedUsagePage() checks if the given HID usage page is + * listed as reserved according to the HID clas specification, + * v1.11. + * + * @since S60 v5.0 + * @param aUsagePage The usage page to check. + * @result ETrue if the usage page is listed as reserved. + */ + static TBool IsReservedUsagePage(TInt aUsagePage); + + + /** + * HandleMainInputTagL + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleMainInputTagL(const TItem& aItem); + + + /** + * HandleMainOutputTag + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleMainOutputTagL(const TItem& aItem); + + /** + * HandleMainFeature + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleMainFeatureL( const TItem& aItem ); + + /** + * HandleMainCollection + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleMainCollectionL( const TItem& aItem ); + + + /** + * MainEndCollection + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleMainEndCollection( const TItem& aItem); + + /** + * HandleGlobalReportId + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalReportId( const TItem& aItem ); + + /** + * HandleGlobalUsagePage + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalUsagePage( const TItem& aItem ); + + /** + * HandleGlobalLogicalMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalLogicalMinimum( const TItem& aItem ); + + /** + * HandleGlobalLogicalMaximum + * + * @since S60 ?S60_version *** for example, S60 v3.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalLogicalMaximum( const TItem& aItem ); + + /** + * HandleGlobalPhysicalMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalPhysicalMinimum( const TItem& aItem ); + + /** + * HandleGlobalPhysicalMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalPhysicalMaximum( const TItem& aItem ); + + /** + * HandleGlobalUnit + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalUnit( const TItem& aItem ); + + /** + * HandleGlobalUnitExponent + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalUnitExponent( const TItem& aItem ); + + /** + * HandleGlobalReportSize + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalReportSize( const TItem& aItem ); + + /** + * HandleGlobalReportSize + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalReportCount( const TItem& aItem ); + + /** + * HandleGlobalPush + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalPushL( const TItem& aItem ); + + /** + * HandleGlobalPop + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleGlobalPop( const TItem& aItem ); + + /** + * HandleLocalUsage + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalUsageL( const TItem& aItem ); + + /** + * HandleLocalUsageMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalUsageMinimum( const TItem& aItem ); + + /** + * HandleLocalUsageMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalUsageMaximum( const TItem& aItem ); + + /** + * HandleLocalDesignatorIndex + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalDesignatorIndex( const TItem& aItem ); + + /** + * HandleLocalDesignatorMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalDesignatorMinimum( const TItem& aItem ); + + /** + * HandleLocalDesignatorMaximum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalDesignatorMaximum( const TItem& aItem ); + + /** + * HandleLocalStringIndex + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalStringIndex( const TItem& aItem ); + + /** + * HandleLocalStringMinimum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalStringMinimum( const TItem& aItem ); + + /** + * HandleLocalStringMaximum + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalStringMaximum( const TItem& aItem ); + + /** + * HandleLocalDelimiter + * + * @since S60 v5.0 + * @param aItem a Hid field item + * @result error code + */ + TInt HandleLocalDelimiter( const TItem& aItem ); + + /** + * CheckMandatoryFieldError + * + * @since S60 v5.0 + * @param aType a field type + * @param aAttributes attributes + * @result error code + */ + TInt CheckMandatoryFieldExistence( CField::TType aType, TUint32 aAttributes ); + + /** + * CheckUsageMinAndMaxErrors + * + * @since S60 v5.0 + * @result error code + */ + TInt CheckUsageMinAndMaxErrors(); + + /** + * CheckDesignatorMinAndMaxErrors + * + * @since S60 v5.0 + * @result error code + */ + TInt CheckDesignatorMinAndMaxErrors(); + + /** + * CheckStringMinAndMaxErrors + * + * @since S60 v5.0 + * @result error code + */ + TInt CheckStringMinAndMaxErrors(); + + /** + * CheckMandatoryFieldError + * + * @since S60 v5.0 + * @param aType a field type + * @param aAttributes attributes + * @result error code + */ + TInt CheckMandatoryFieldErrors( CField::TType aType, TUint32 aAttributes ); + + /** + * CheckLogicalMinAndMax + * Check if logical minimum and maximum must match the number of usage + * values + * + * @since S60 v5.0 + * @param aAttributes attributes + * @result error code + */ + void CheckLogicalMinAndMax( TUint32 aAttributes ); + + /** + * CheckMandatoryFieldError + * + * @since S60 v5.0 + * @param aType a field type + * @param aAttributes attributes + * @result error code + */ + void CheckFieldBitNeeded( CField::TType aType, TUint32 aAttributes ); + + /** + * HandleItem + * + * @since S60 v5.0 + * @result error code + */ + void HandleItemL(TItem& aItem); + + /** + * CheckParseErrors + * + * @since S60 v5.0 + * @result error code + */ + void CheckParseErrors(); + + /** + * ResetParser + * + * @since S60 v5.0 + * @result error code + */ + void ResetParserL(); + +private: + /** + * A bitmask containing the THidItem flags which represent local + * (as opposed to main or global) items. + */ + static const TUint32 KLocalItemMask; + + /** + * A bitmask containing the THidItem flags which represent local + * unused items. + */ + static const TUint32 KUnusedLocalItemsMask; + + /** + * A bitmask containing the THidItem flags which represent mandatory + * items. + */ + static const TUint32 KMandatoryItemMask; + + /** + * A bitmask containing the THidItem flags which represent report + * items. + */ + static const TUint32 KReportItemMask; + +private: + + /** + * THidItem defineds a set of flags used for keeping track of + * which items have been encountered in the report descriptor for + * the current report field. The flags are used with the + * iItemsDefined and iGlobalItemsDefined data members. + */ + enum THidItem + { + EUsagePage = 1<<0, + ELogicalMin = 1<<1, + ELogicalMax = 1<<2, + EReportSize = 1<<3, + EReportCount = 1<<4, + EReportId = 1<<5, + EUsageMin = 1<<6, + EUsageMax = 1<<7, + EPhysicalMin = 1<<8, + EPhysicalMax = 1<<9, + EUnit = 1<<10, + EUnitExponent = 1<<11, + EDesignatorIndex = 1<<12, + EDesignatorMin = 1<<13, + EDesignatorMax = 1<<14, + EStringIndex = 1<<15, + EStringMin = 1<<16, + EStringMax = 1<<17, + EInputReport = 1<<18, + EOutputReport = 1<<19, + EFeatureReport = 1<<20, + EDelimiter = 1<<21, + EUsageId = 1<<22 + }; + + /** + * HID local tags + */ + enum THidLocalTags + { + ELocalUsage = 0x00, + ELocalUsageMinimum = 0x01, + ELocalUsageMaximum = 0x02, + ELocalDesignatorIndex = 0x03, + ELocalDesignatorMinimum = 0x04, + ELocalDesignatorMaximum = 0x05, + ELocalStringIndex = 0x07, + ELocalStringMinimum = 0x08, + ELocalStringMaximum = 0x09, + ELocalDelimiter = 0x0a + }; + + /** + * HID global tags + */ + enum THidGlobalTags + { + EGlobalUsagePage = 0x00, + EGlobalLogicalMinimum = 0x01, + EGlobalLogicalMaximum = 0x02, + EGlobalPhysicalMinimum = 0x03, + EGlobalPhysicalMaximum = 0x04, + EGlobalUnitExponent = 0x05, + EGlobalUnit = 0x06, + EGlobalReportSize = 0x07, + EGlobalReportId = 0x08, + EGlobalReportCount = 0x09, + EGlobalPush = 0x0a, + EGlobalPop = 0x0b + }; + + /** + * HID main tags + */ + enum THidMainTags + { + EMainInput = 0x08, + EMainOutput = 0x09, + EMainFeature = 0x0b, + EMainCollection = 0x0a, + EMainEndCollection = 0x0c + }; + + /** + * The local state, cleared after each "Main" item + * Own. + */ + CField* iLocal; + + /** + * Current global state + */ + TParserGlobalState iGlobal; + + /** + * Global state stack, to allow HID descriptor PUSH and POP commands + */ + RArray iGlobalStack; + + // For delimiter handling: + // + /** + * ETrue if currently within a delimiter pair + */ + TBool iWithinDelimiter; + + /** + * Count of alternate USAGE declarations so far + */ + TInt iAliasCount; + + /** + * Count of alternate USAGE_MIN declarations + */ + TInt iAliasCountMin; + + /** + * Count of alternate USAGE_MAX declarations + */ + TInt iAliasCountMax; + + /** + * The root node of the collection tree + * Own. + */ + CReportRoot* iReportRoot; + + /** + * Stack used to create the collection tree + */ + RPointerArray iCollectionStack; + + // Keep track of which items have been seen in the descriptor: + // + /** + * All items forming the current item state + */ + TUint32 iItemsDefined; + + /** + * Global items seen since the last main tag + */ + TUint32 iGlobalItemsDefined; + + /** + * ETrue if a redundant local item is seen + */ + TBool iLocalMultipleUse; + + /** + * Number of the item we're currently processing + */ + TInt iItemNumber; + + /** + * Record of any critical error encountered + */ + TInt iErrorCode; + + /** + * Field count + */ + TInt iFieldCount; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hidreportgenerator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hidreportgenerator.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,129 @@ +/* +* Copyright (c) 2005-2007 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: Report generator +* +*/ + +#ifndef C_REPORT_GENERATOR_H +#define C_REPORT_GENERATOR_H + +#include "hidreportroot.h" +#include "hidtranslate.h" + +/** + * HID report generator + * + * Class used for generating output or feature reports to send to the device. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CReportGenerator : public CBase + { +public: + /** + * Constructs a CReportGenerator. + * + * @since S60 v5.0 + * @param aReportRoot Tree generated by CParser from the report + * descriptor. + * @param aReportId Report ID of the report to generate. + * @param aType Type of report to generate (output or feature). + */ + IMPORT_C static CReportGenerator* NewLC(const CReportRoot* aReportRoot, + TInt aReportId, CField::TType aType); + + /** + * Constructs a CReportGenerator. + * + * @since S60 v5.0 + * @param aReportRoot Tree generated by CParser from the report + * descriptor. + * @param aReportId Report ID of the report to generate. + * @param aType Type of report to generate (output or feature). + */ + IMPORT_C static CReportGenerator* NewL(const CReportRoot* aReportRoot, + TInt aReportId, CField::TType aType); + + virtual ~CReportGenerator(); + + /** + * Sets the value of a single field in the report. Stores the requested + * control value in a field in the report buffer. For array fields, adds + * the requested usage ID to the array. + * + * @since S60 v5.0 + * @param aField Pointer to the field in which to set a value. + * @param aUsageId Usage ID of the control to set. + * @param aValue Value to write to the field, used for variable + * fields only. + * @param aControlOffset Which control to set when more than one + * have the same usage ID. + * @return Error code indicating success or reason for failure. + */ + IMPORT_C TInt SetField(const CField* aField, TInt aUsageId, TInt aValue, + TInt aControlOffset = 0); + + /** + * Get the buffer holding the generated report + * + * @since S60 v5.0 + * @return pointer to buffer + */ + IMPORT_C TPtr8 Report(); + +private: + /** + * Constructor for CReportGenerator. + * + * @since S60 v5.0 + * @param aReportId Report ID of the report to generate. + * @param aType Type of report to generate (output or feature). + */ + CReportGenerator(TInt aReportId, CField::TType aType); + + /** + * 2nd phase constructor for CReportGenerator. Allocates the + * report buffer iBuf. + * + * @since S60 v5.0 + * @param aReportRoot Tree generated by CParser from the report + * descriptor. + */ + void ConstructL(const CReportRoot* aReportRoot); + + /** + * Report ID of the report to generate + */ + TInt iReportId; + + /** + * Type of report to generate + */ + CField::TType iType; + + /** + * Tree of fields from the report descriptor + * Not own. + */ + const CReportRoot* iReportRoot; + + /** + * Buffer to hold the generated report + * Own. + */ + HBufC8* iBuf; + }; + +#endif // __REPORT_GENERATOR_H__ diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/hiduids.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/hiduids.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2007 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: UID definitions. +* +*/ + + +#ifndef HIDUIDS_H +#define HIDUIDS_H + +#define ECOM_UID 0x10009d8d +#define REMCON_PLUGIN_IF 0x10204546 +//----- original HID uids, reserved from Symbian +#define LAYOUT_PLUGIN_UID 0x10201d25 +#define DRIVER_PLUGIN_IF 0x10201d26 +#define LAYOUT_PLUGIN_IF 0x10201d27 +#define BTHID_SRV_UID 0x10201d28 +#define LAYOUTMGR_UID 0x10201d29 +#define BTKEYBOARD_APP_UID 0x10201d2a +#define STARTER_UID 0x10201d2b +#define BTHID_PLUGIN_UID 0x10201d2c +//----- reserved from NSS list +#define MOUSE_UID 0x10281cfc +#define BTHID_CLIENT_UID 0x10281cfd +#define GENERICHID_UID 0x10281cfe +#define GSPLUGIN_IMP 0x10281cff +#define BTHID_MAIN_IMP 0x10281d00 +#define BTHID_SETTINGS_IMP 0x10281d01 +#define BTHID_PLUGIN_IF 0x10281d02 +#define INSTALLER_UID 0x10281d03 +#define KEYBOARD_UID 0x10281d04 +#define KEYBOARD_DRIVER_IMP 0x10282bfd +#define MOUSE_DRIVER_IMP 0x10282bfe +#define BELGIAN_LAYOUT_IMP 0x10282bff +#define DANISH_LAYOUT_IMP 0x10282c00 +#define DUTCH_LAYOUT_IMP 0x10282c01 +#define FINSWE_LAYOUT_IMP 0x10282c02 +#define FRENCH_LAYOUT_IMP 0x10282c03 +#define GERMAN_LAYOUT_IMP 0x10282c04 +#define ITALIAN_LAYOUT_IMP 0x10282c05 +#define NORWEGIAN_LAYOUT_IMP 0x10282c06 +#define PORTUGUESE_LAYOUT_IMP 0x10282c07 +#define SPANISH_LAYOUT_IMP 0x10282c08 +#define SU8GERMAN_LAYOUT_IMP 0x10282c09 +#define SU8RUSSIAN_LAYOUT_IMP 0x10282c0a +#define SU8RUSSIANINT_LAYOUT_IMP 0x10282c0b +#define SU8FINSWE_LAYOUT_IMP 0x10282c0c +#define SU8DANNOR_LAYOUT_IMP 0x10282c0d +#define SU8USENGLISH_LAYOUT_IMP 0x10282c0e +#define SU8INTUSENGLISH_LAYOUT_IMP 0x10282c0f +#define UK_LAYOUT_IMP 0x10282c10 +#define US_LAYOUT_IMP 0x10282c11 +#define USDVORAK_LAYOUT_IMP 0x10282c12 +#define USINT_LAYOUT_IMP 0x10282c13 +#define KBDCLIENT_UID 0x10282c14 +#define HEADSET_UID 0x10282c15 +#define HEADSET_DRIVER_IMP 0x10282c16 +#define HIDREMCON_UID 0x10282c17 +#define HIDREMCON_IMP 0x10282c18 +#define HIDEVENTPUBLISHER_UID 0x10282c19 +// Last reserved UID 0x10282c3c + +#endif // __HIDUIDS_H__ diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/inc/prjconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/inc/prjconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006 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: Project configure file. +* +*/ + + +#ifndef GENERICHID_PRJCONFIG_H +#define GENERICHID_PRJCONFIG_H + +/** + * Traces are enabled via RDebug::Print() in UDEB build, by default. + */ +#ifdef _DEBUG +#define PRJ_ENABLE_TRACE +#endif + +/** + * Traces will be written to file if this is defined. + */ +//#define PRJ_FILE_TRACE + + +/** + * build the project for module test purpose if this is defined + */ +//#define PRJ_MODULETEST_BUILD + +/** + * build the project using stubs to replace the dependencies if this is defined + */ +//#define PRJ_USE_STUB + +#endif // OBEXSM_PRJCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/rom/generichid.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/rom/generichid.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2008-2008 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: Image description file for project generichid +* +*/ + + +#ifndef __GENERICHID_IBY__ +#define __GENERICHID_IBY__ + +file=ABI_DIR\BUILD_DIR\generichid.dll SHARED_LIB_DIR\generichid.dll + + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidcollection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidcollection.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,284 @@ +/* +* Copyright (c) 2004-2007 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: HID collection implementation +* +*/ + + +#include +#include +#include +#include + +#include "hidreportroot.h" +#include "debug.h" + +// ======== MEMBER FUNCTIONS ======== + +// ----------------------------------------------------------------------------- +// NewLC() +// ----------------------------------------------------------------------------- +// +CCollection* CCollection::NewLC() + { + CCollection* self = new (ELeave) CCollection(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } +// ----------------------------------------------------------------------------- +// NewL() +// ----------------------------------------------------------------------------- +// +CCollection* CCollection::NewL() + { + CCollection* self=NewLC(); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// ConstructL() +// ----------------------------------------------------------------------------- +// +void CCollection::ConstructL() + { + // Nothing to do here + } + +// ----------------------------------------------------------------------------- +// CCollection() +// ----------------------------------------------------------------------------- +// +CCollection::CCollection() + { + // Nothing to do here + } + +// ----------------------------------------------------------------------------- +// ~CCollection() +// ----------------------------------------------------------------------------- +// +CCollection::~CCollection() + { + iCollections.ResetAndDestroy(); + iFields.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// Type() +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint32 CCollection::Type() const + { + return iType; + } + +// ----------------------------------------------------------------------------- +// UsagePage() +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CCollection::UsagePage() const + { + return iUsagePage; + } + +// ----------------------------------------------------------------------------- +// Usage() +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CCollection::Usage() const + { + return iUsage; + } + +// ----------------------------------------------------------------------------- +// CollectionCount() +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CCollection::CollectionCount() const + { + return iCollections.Count(); + } + +// ----------------------------------------------------------------------------- +// FieldCount() +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CCollection::FieldCount() const + { + return iFields.Count(); + } + +// ----------------------------------------------------------------------------- +// CollectionByIndex +// ----------------------------------------------------------------------------- +// +EXPORT_C const CCollection* CCollection::CollectionByIndex(TInt aIndex) const + { + return (0 <= aIndex && aIndex < iCollections.Count()) ? + iCollections[aIndex] : NULL; + } + +// ----------------------------------------------------------------------------- +// FieldByIndex +// ----------------------------------------------------------------------------- +// +EXPORT_C const CField* CCollection::FieldByIndex(TInt aIndex) const + { + return (0 <= aIndex && aIndex < iFields.Count()) ? + iFields[aIndex] : NULL; + } + +// ----------------------------------------------------------------------------- +// IsPhysical() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsPhysical() const + { + return iType == EPhysical; + } + +// ----------------------------------------------------------------------------- +// IsApplication() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsApplication() const + { + return iType == EApplication; + } + +// ----------------------------------------------------------------------------- +// IsLogical() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsLogical() const + { + return iType == ELogical; + } + +// ----------------------------------------------------------------------------- +// IsReport() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsReport() const + { + return iType == EReport; + } + +// ----------------------------------------------------------------------------- +// IsNamedArray() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsNamedArray() const + { + return iType == ENamedArray; + } + +// ----------------------------------------------------------------------------- +// IsUsageSwitch() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsUsageSwitch() const + { + return iType == EUsageSwitch; + } + +// ----------------------------------------------------------------------------- +// IsUsageModifier() +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CCollection::IsUsageModifier() const + { + return iType == EUsageModifier; + } + +// ----------------------------------------------------------------------------- +// SetType() +// ----------------------------------------------------------------------------- +// +void CCollection::SetType(TUint32 aType) + { + iType = aType; + } + +// ----------------------------------------------------------------------------- +// SetUsagePage() +// ----------------------------------------------------------------------------- +// +void CCollection::SetUsagePage(TInt aUsagePage) + { + iUsagePage = aUsagePage; + } + +// ----------------------------------------------------------------------------- +// SetUsage() +// ----------------------------------------------------------------------------- +// +void CCollection::SetUsage(TInt aUsage) + { + iUsage = aUsage; + } +// ----------------------------------------------------------------------------- +// AddFieldL() +// ----------------------------------------------------------------------------- +// +CField* CCollection::AddFieldL() + { + CField* field = CField::NewL(); + CleanupStack::PushL(field); + User::LeaveIfError(iFields.Append(field)); + CleanupStack::Pop(field); + return field; + } + +// ----------------------------------------------------------------------------- +// AddCollectionL() +// ----------------------------------------------------------------------------- +// +CCollection* CCollection::AddCollectionL() + { + CCollection* collection = CCollection::NewL(); + CleanupStack::PushL(collection); + User::LeaveIfError(iCollections.Append(collection)); + CleanupStack::Pop(collection); + return collection; + } + + + + + +// ----------------------------------------------------------------------------- +// Match() +// ----------------------------------------------------------------------------- +// +TBool TReportSize::Match(const TReportSize& aFirst, + const TReportSize& aSecond) + { + return (aFirst.iReportId == aSecond.iReportId) && + (aFirst.iType == aSecond.iType); + } + + +// ----------------------------------------------------------------------------- +// TReportSize() +// ----------------------------------------------------------------------------- +// +TReportSize::TReportSize(TInt aReportId, CField::TType aType) + : iReportId(aReportId), iType(aType), iSize(0) + { + // Nothing else to do + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidconnectioninfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidconnectioninfo.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,106 @@ +/* +* Copyright (c) 2008-2008 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 "hidconnectioninfo.h" +#include "hidreportroot.h" +#include "debug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CConnectionInfo::CConnectionInfo(TInt aConnectionID, CReportRoot* aReportRoot): +iConnectionID(aConnectionID), +iReportRoot(aReportRoot) + { + TRACE_FUNC + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CConnectionInfo* CConnectionInfo::NewL(TInt aConnectionID, CReportRoot* aReportRoot) + { + CConnectionInfo* self = CConnectionInfo::NewLC(aConnectionID, aReportRoot); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CConnectionInfo* CConnectionInfo::NewLC(TInt aConnectionID, CReportRoot* aReportRoot) + { + CConnectionInfo* self = new( ELeave ) CConnectionInfo( aConnectionID, aReportRoot); + CleanupStack::PushL( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CConnectionInfo::~CConnectionInfo() + { + TRACE_FUNC_ENTRY + delete iReportRoot; + iReportRoot = NULL; + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// ConnectionID +// --------------------------------------------------------------------------- +// +TInt CConnectionInfo::ConnectionID() + { + return iConnectionID; + } + +// --------------------------------------------------------------------------- +// ReportRoot +// --------------------------------------------------------------------------- +// +CReportRoot* CConnectionInfo::ReportRoot() + { + return iReportRoot; + } + +// --------------------------------------------------------------------------- +// SetLastCommandHandler +// --------------------------------------------------------------------------- +// +void CConnectionInfo::SetLastCommandHandler(CHidDriver* aHidDriverItem) + { + iLastCmdDriver = aHidDriverItem; + } +// --------------------------------------------------------------------------- +// ReturnLastCommandHandler +// --------------------------------------------------------------------------- +// +CHidDriver* CConnectionInfo::ReturnLastCommandHandler() + { + return iLastCmdDriver; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hiddriveritem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hiddriveritem.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 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: Driver list item implementation +* +*/ + + +#include +#include +#include + +#include "hiddriveritem.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CDriverListItem::CDriverListItem(TInt aConnectionId) + : iConnectionId(aConnectionId) + { + } +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDriverListItem::~CDriverListItem() + { + delete iDriver; + } + +// --------------------------------------------------------------------------- +// ConnectionId() +// --------------------------------------------------------------------------- +// +TInt CDriverListItem::ConnectionId() const + { + return iConnectionId; + } + +// --------------------------------------------------------------------------- +// Driver() +// --------------------------------------------------------------------------- +// +CHidDriver* CDriverListItem::Driver() const + { + return iDriver; + } + +// --------------------------------------------------------------------------- +// SetDriver() +// --------------------------------------------------------------------------- +// +void CDriverListItem::SetDriver(CHidDriver* aDriver) + { + delete iDriver; + iDriver = aDriver; + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidfield.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidfield.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,638 @@ +/* +* Copyright (c) 2004-2007 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: Hid field implementation +* +*/ + + +#include +#include +#include +#include + +#include "hidreportroot.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewL() +// --------------------------------------------------------------------------- +// +CField* CField::NewL() + { + CField* self = NewLC(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC() +// --------------------------------------------------------------------------- +// +CField* CField::NewLC() + { + // Two-phase construction isn't necessary at present: + CField* self = new (ELeave) CField; + CleanupStack::PushL(self); + return self; + } + +// --------------------------------------------------------------------------- +// CField() +// --------------------------------------------------------------------------- +// +CField::CField() + { + // nothing else to do + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CField::~CField() + { + iUsageList.Close(); + } + +// --------------------------------------------------------------------------- +// UsagePage() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::UsagePage() const + { + return iUsagePage; + } + +// --------------------------------------------------------------------------- +// ReportId() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::ReportId() const + { + return iReportId; + } + +// --------------------------------------------------------------------------- +// Offset() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::Offset() const + { + return (iReportId == 0) ? iPos : (iPos+KSizeOfByte); + } + +// --------------------------------------------------------------------------- +// Size() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::Size() const + { + return iSize; + } + +// --------------------------------------------------------------------------- +// Count() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::Count() const + { + return iCount; + } + +// --------------------------------------------------------------------------- +// LogicalMin() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::LogicalMin() const + { + return iLogicalMin; + } + +// --------------------------------------------------------------------------- +// LogicalMax() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::LogicalMax() const + { + return iLogicalMax; + } + +// --------------------------------------------------------------------------- +// UsageMin() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::UsageMin() const + { + return iUsageMin; + } + +// --------------------------------------------------------------------------- +// UsageMax() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::UsageMax() const + { + return iUsageMax; + } + +// --------------------------------------------------------------------------- +// PhysicalMin() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::PhysicalMin() const + { + return iPhysicalMin; + } + +// --------------------------------------------------------------------------- +// PhysicalMax() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::PhysicalMax() const + { + return iPhysicalMax; + } + +// --------------------------------------------------------------------------- +// Unit() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::Unit() const + { + return iUnit; + } + +// --------------------------------------------------------------------------- +// UnitExponent() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::UnitExponent() const + { + return iUnitExponent; + } + +// --------------------------------------------------------------------------- +// DesignatorIndex() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::DesignatorIndex() const + { + return iDesignatorIndex; + } + +// --------------------------------------------------------------------------- +// DesignatorMin() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::DesignatorMin() const + { + return iDesignatorMin; + } + +// --------------------------------------------------------------------------- +// DesignatorMax() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::DesignatorMax() const + { + return iDesignatorMax; + } + +// --------------------------------------------------------------------------- +// StringMin() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::StringMin() const + { + return iStringMin; + } + +// --------------------------------------------------------------------------- +// StringMax() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::StringMax() const + { + return iStringMax; + } + +// --------------------------------------------------------------------------- +// StringIndex() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::StringIndex() const + { + return iStringIndex; + } + +// --------------------------------------------------------------------------- +// UsageArray() +// --------------------------------------------------------------------------- +// +EXPORT_C TArray CField::UsageArray() const + { + return iUsageList.Array(); + } + +// --------------------------------------------------------------------------- +// HasUsage() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::HasUsage(const TInt aUsage) const + { + return iUsageList.Find(aUsage) != KErrNotFound; + } + +// --------------------------------------------------------------------------- +// AddUsageL +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::AddUsageL(const TInt aUsage) + { + User::LeaveIfError(iUsageList.Append(aUsage)); + } + +// --------------------------------------------------------------------------- +// ClearUsageList() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::ClearUsageList() + { + iUsageList.Reset(); + } + +// --------------------------------------------------------------------------- +// LastUsage() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::LastUsage() const + { + TInt usage = 0; + if (iUsageList.Count() > 0) + { + usage = iUsageList[iUsageList.Count()-1]; + } + return usage; + } + +// --------------------------------------------------------------------------- +// Attributes() +// --------------------------------------------------------------------------- +// +EXPORT_C TUint32 CField::Attributes() const + { + return iAttributes; + } + +// --------------------------------------------------------------------------- +// Type() +// --------------------------------------------------------------------------- +// +EXPORT_C CField::TType CField::Type() const + { + return iType; + } + +// --------------------------------------------------------------------------- +// IsVariable() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsVariable() const + { + return (( iAttributes & KFieldAttributeVariable ) != 0); + } + +// --------------------------------------------------------------------------- +// IsArray() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsArray() const + { + return ( ( iAttributes & KFieldAttributeVariable ) == 0); + } + +// --------------------------------------------------------------------------- +// IsConstant() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsConstant() const + { + return (( iAttributes & KFieldAttributeConstant ) != 0 ); + } + +// --------------------------------------------------------------------------- +// IsData() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsData() const + { + // Field atribute first bit present if data is constat or is it data. + // If first bit is zero field attibute data is set. + return ( ( iAttributes & KFieldAttributeConstant ) == 0 ); + } + +// --------------------------------------------------------------------------- +// SetType() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetType(const TType& aType) + { + iType = aType; + } + +// --------------------------------------------------------------------------- +// SetUsagePage() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetUsagePage(const TInt aUsagePage) + { + iUsagePage = aUsagePage; + } + +// --------------------------------------------------------------------------- +// Destructor() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetReportId(const TInt aId) + { + iReportId = aId; + } + +// --------------------------------------------------------------------------- +// SetOffset() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetOffset(const TInt aOffset) + { + iPos = aOffset; + } + +// --------------------------------------------------------------------------- +// SetSize() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetSize(const TInt aSize) + { + iSize = aSize; + } + +// --------------------------------------------------------------------------- +// SetCount() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetCount(const TInt aCount) + { + iCount = aCount; + } + +// --------------------------------------------------------------------------- +// SetLogicalMin() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetLogicalMin(const TInt aMin) + { + iLogicalMin = aMin; + } + +// --------------------------------------------------------------------------- +// SetLogicalMax() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetLogicalMax(const TInt aMax) + { + iLogicalMax = aMax; + } + +// --------------------------------------------------------------------------- +// SetUsageMin() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetUsageMin(const TInt aMin) + { + iUsageMin = aMin; + } + +// --------------------------------------------------------------------------- +// SetUsageMax() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetUsageMax(const TInt aMax) + { + iUsageMax = aMax; + } + +// --------------------------------------------------------------------------- +// SetAttributes() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetAttributes(const TUint32 aAttributes) + { + iAttributes = aAttributes; + } + +// --------------------------------------------------------------------------- +// SetPhysicalMin() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetPhysicalMin(TInt aValue) + { + iPhysicalMin = aValue; + } + +// --------------------------------------------------------------------------- +// SetPhysicalMax() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetPhysicalMax(TInt aValue) + { + iPhysicalMax = aValue; + } + +// --------------------------------------------------------------------------- +// SetUnit() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetUnit(TInt aValue) + { + iUnit = aValue; + } + +// --------------------------------------------------------------------------- +// SetUnitExponent() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetUnitExponent(TInt aValue) + { + iUnitExponent = aValue; + } + +// --------------------------------------------------------------------------- +// SetDesignatorIndex() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetDesignatorIndex(TInt aValue) + { + iDesignatorIndex = aValue; + } + +// --------------------------------------------------------------------------- +// SetDesignatorMin() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetDesignatorMin(TInt aValue) + { + iDesignatorMin = aValue; + } + +// --------------------------------------------------------------------------- +// SetDesignatorMax() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetDesignatorMax(TInt aValue) + { + iDesignatorMax = aValue; + } + +// --------------------------------------------------------------------------- +// SetStringMin() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetStringMin(TInt aValue) + { + iStringMin = aValue; + } + +// --------------------------------------------------------------------------- +// SetStringMax() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetStringMax(TInt aValue) + { + iStringMax = aValue; + } + +// --------------------------------------------------------------------------- +// SetStringIndex() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetStringIndex(TInt aValue) + { + iStringIndex = aValue; + } + +// --------------------------------------------------------------------------- +// SetLogicalRange() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetLogicalRange(TInt aMin, TInt aMax) + { + iLogicalMin = aMin; + iLogicalMax = aMax; + } + +// --------------------------------------------------------------------------- +// SetUsageRange() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetUsageRange(TInt aMin, TInt aMax) + { + iUsageMin = aMin; + iUsageMax = aMax; + } + +// --------------------------------------------------------------------------- +// SetPhysicalRange +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetPhysicalRange(TInt aMin, TInt aMax) + { + iPhysicalMin = aMin; + iPhysicalMax = aMax; + } + +// --------------------------------------------------------------------------- +// SetStringRange() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetStringRange(TInt aMin, TInt aMax) + { + iStringMin = aMin; + iStringMax = aMax; + } + +// --------------------------------------------------------------------------- +// SetDesignatorRange() +// --------------------------------------------------------------------------- +// +EXPORT_C void CField::SetDesignatorRange(TInt aMin, TInt aMax) + { + iDesignatorMin = aMin; + iDesignatorMax = aMax; + } + +// --------------------------------------------------------------------------- +// IsInput() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsInput() const + { + return iType == EInput; + } + +// --------------------------------------------------------------------------- +// IsOutput() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsOutput() const + { + return iType == EOutput; + } + +// --------------------------------------------------------------------------- +// IsFeature() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsFeature() const + { + return iType == EFeature; + } + +// --------------------------------------------------------------------------- +// UsageCount() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::UsageCount() const + { + return iUsageList.Count(); + } + +// --------------------------------------------------------------------------- +// Usage() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CField::Usage(TInt aIndex) const + { + return iUsageList[aIndex]; + } + +// --------------------------------------------------------------------------- +// IsInReport() +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CField::IsInReport(TInt aReportId) const + { + return ( 0 == iReportId || aReportId == iReportId ); + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidgeneric.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidgeneric.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,533 @@ +/* +* Copyright (c) 2004-2007 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: Generic hid implementation +* +*/ + +#include + +#include "debug.h" +#include "hidgeneric.h" +#include "hidreportroot.h" +#include "hidparser.h" +#include "hiddriveritem.h" +#include "hidconnectioninfo.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +EXPORT_C CGenericHid* CGenericHid::NewLC(MTransportLayer* aTransportLayer) + { + TRACE_INFO((_L("[HID]\tCGenericHid::NewLC(0x%08x)"), aTransportLayer)); + CGenericHid* self = new (ELeave) CGenericHid(aTransportLayer); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +EXPORT_C CGenericHid* CGenericHid::NewL(MTransportLayer* aTransportLayer) + { + TRACE_INFO((_L("[HID]\tCGenericHid::NewL(0x%08x)"), aTransportLayer)); + CGenericHid* self = NewLC(aTransportLayer); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CGenericHid::ConstructL() + { + TRACE_INFO(_L("[HID]\tCGenericHid::ConstructL()")); + TRACE_INFO(_L("[HID]\tCGenericHid::ConstructL(): Creating Parser...")); + iParser = CParser::NewL(); + iInputHandlingReg = CHidInputDataHandlingReg::NewL(); + } + +// --------------------------------------------------------------------------- +// CGenericHid() +// --------------------------------------------------------------------------- +// +CGenericHid::CGenericHid(MTransportLayer* aTransportLayer) : + iDriverList(_FOFF(CDriverListItem, iSlink)), + iTransportLayer(aTransportLayer) + { + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CGenericHid::~CGenericHid() + { + TRACE_FUNC_ENTRY + RemoveDrivers(); + iConnectionInfo.ResetAndDestroy(); + iConnectionInfo.Close(); + delete iInputHandlingReg; + delete iParser; + REComSession::FinalClose(); + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// CountryCodeL +// --------------------------------------------------------------------------- +// +TUint CGenericHid::CountryCodeL(TInt aConnID) + { + // Pass the request through to the transport layer. + return (iTransportLayer->CountryCodeL(aConnID)); + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// VendorIdL +// --------------------------------------------------------------------------- +// +TUint CGenericHid::VendorIdL(TInt aConnID) + { + // Pass the request through to the transport layer. + return (iTransportLayer->VendorIdL(aConnID)); + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// ProductIdL() +// --------------------------------------------------------------------------- +// +TUint CGenericHid::ProductIdL(TInt aConnID) + { + // Pass the request through to the transport layer. + return iTransportLayer->ProductIdL(aConnID); + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// SetProtocol +// --------------------------------------------------------------------------- +// +void CGenericHid::SetProtocolL(TInt aConnectionId, TUint16 aInterface, + MDriverAccess::TProtocols aProtocol, + CHidDriver* aDriver) + { + iTransportLayer->SetProtocolL(aConnectionId, static_cast(aProtocol), + aInterface); + CConnectionInfo* conninfo = SeekConnectionInfo( aConnectionId ); + if ( conninfo ) + { + conninfo->SetLastCommandHandler(aDriver); + } + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// GetProtocol +// --------------------------------------------------------------------------- +// +void CGenericHid::GetProtocolL(TInt aConnectionId,TUint16 aInterface) + { + iTransportLayer->GetProtocolL(aConnectionId, aInterface); + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// GetReport +// --------------------------------------------------------------------------- +// +void CGenericHid::GetReportL(TInt aConnectionId, + TUint8 aReportId, TUint16 aInterface, TUint16 aLength) + { + iTransportLayer->GetReportL(aConnectionId, MDriverAccess::EInput, aReportId, + aInterface, aLength); + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// SetReport() +// --------------------------------------------------------------------------- +// +void CGenericHid::SetReportL(TInt aConnectionId, TUint8 aReportId, + MDriverAccess::TReportType aReportType, const TDesC8& aPayload, + TUint16 aInterface, CHidDriver* aDriver) + { + iTransportLayer->SetReportL(aConnectionId, static_cast(aReportType), + aReportId, aInterface, aPayload); + CConnectionInfo* conninfo = SeekConnectionInfo( aConnectionId ); + if ( conninfo ) + { + conninfo->SetLastCommandHandler(aDriver); + } + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// DataOut() +// --------------------------------------------------------------------------- +// +void CGenericHid::DataOutL(TInt aConnectionId, TUint8 aReportId, + const TDesC8& aPayload, + TUint16 aInterface) + { + iTransportLayer->DataOutL(aConnectionId, aReportId, aInterface, aPayload); + } + + +// --------------------------------------------------------------------------- +// From MDriverAccess +// GetIdle() +// --------------------------------------------------------------------------- +// +void CGenericHid::GetIdleL(TInt aConnectionId, TUint8 aReportId, + TUint16 aInterface ) + { + iTransportLayer->GetIdleL(aConnectionId, aReportId, aInterface); + } + +// --------------------------------------------------------------------------- +// From MDriverAccess +// SetIdle() +// --------------------------------------------------------------------------- +// +void CGenericHid::SetIdleL(TInt aConnectionId, TUint8 aDuration, + TUint8 aReportId, TUint16 aInterface, CHidDriver* aDriver) + { + iTransportLayer->SetIdleL(aConnectionId, aDuration, aReportId, aInterface); + CConnectionInfo* conninfo = SeekConnectionInfo( aConnectionId ); + if ( conninfo ) + { + conninfo->SetLastCommandHandler(aDriver); + } + + } + +// --------------------------------------------------------------------------- +// RemoveDrivers() +// --------------------------------------------------------------------------- +// +void CGenericHid::RemoveDrivers() + { + TRACE_FUNC + // Driver instances + CDriverListItem* driverItem; + while ( !iDriverList.IsEmpty() ) + { + driverItem = iDriverList.Last(); + iDriverList.Remove( *driverItem ); + delete driverItem; + } + } + +// --------------------------------------------------------------------------- +// From CHidTransport +// Disconnected() +// --------------------------------------------------------------------------- +// +TInt CGenericHid::Disconnected( TInt aConnectionId ) + { + TRACE_FUNC_ENTRY + TInt retVal = KErrNone; + + TSglQueIter driverIter( iDriverList ); + driverIter.SetToFirst(); + + CDriverListItem* driverItem = driverIter; + while ( driverItem ) + { + driverIter++; + if ( driverItem->ConnectionId() == aConnectionId ) + { + TRACE_INFO(_L("[HID]\tCGenericHid::Disconnected driver")); + if (driverItem->Driver()) + { + driverItem->Driver()->Disconnected(0); + } + // Remove it from the list of driver instances + + iDriverList.Remove(*driverItem); + delete driverItem; + driverItem = NULL; + retVal = KErrNone; + } + driverItem = driverIter; + + TRACE_INFO(_L("[HID]\tCGenericHid::Disconnected next driver")); + } + TRACE_INFO(_L("[HID]\tCGenericHid::Disconnected remove connection info")); + TInt count = iConnectionInfo.Count(); + for (TInt i = count-1 ; i>=0; i--) + { + TRACE_INFO((_L("[HID]\tCGenericHid::Disconnected remove connection info %d"),i)); + CConnectionInfo* conninfo = iConnectionInfo[i]; + TRACE_INFO((_L("[HID]\tCGenericHid::Disconnected remove connection info %d"),i)); + if ( conninfo->ConnectionID() == aConnectionId ) + { + iConnectionInfo.Remove(i); + delete conninfo; + TRACE_INFO((_L("[HID]\tCGenericHid::Disconnected remove connection info %d removed"),i)); + } + } + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// From CHidTransport +// ConnectedL +// HID device has been connected. Attempt to find a driver that can +// handle reports in the format specified by the report descriptor. +// --------------------------------------------------------------------------- +// +TInt CGenericHid::ConnectedL( TInt aConnectionId, const TDesC8& aDescriptor ) + { + TRACE_INFO((_L("[HID]\tCGenericHid::ConnectedL(%d, ...)"), aConnectionId)) + + // Place the parsed report descriptor in the driver list item: + + TBool found = EFalse; + CConnectionInfo* conninfo = SeekConnectionInfo( aConnectionId ); + if ( conninfo ) + { + return KErrInUse; + } + + CReportRoot* reportRoot = iParser->ParseL( aDescriptor ); + CleanupStack::PushL(reportRoot); + + TRACE_INFO(_L("[HID]\tCGenericHid::ConnectedL: evaluate driver array")); + // Implementation info array + RImplInfoPtrArray implInfoArray; + REComSession::ListImplementationsL( KHidDriverPluginInterfaceUid, implInfoArray ); + CleanupClosePushL(implInfoArray); + + TRACE_INFO((_L("[HID]\tCGenericHid::ConnectedL: %d implementations found"), implInfoArray.Count())); + TInt index = 0; + TInt retVal = KErrHidNoDriver; + TInt supportedfields = 0; + CHidDriver* driver = NULL; + for ( index = 0; index < implInfoArray.Count(); index++ ) + { + // parse implementation UID + CImplementationInformation* info = implInfoArray[ index ]; + TUid implUid = info->ImplementationUid(); + TRACE_INFO((_L("[HID]\tCGenericHid::ConnectedL: load plugin 0x%08x"),implUid )); + // load driver + // Trap so other drivers will be enumerated even if + // this fails: + + TRAPD(retTrap, driver = CHidDriver::NewL( implUid, this )); + if ( retTrap != KErrNone) + { + continue; + } + CleanupStack::PushL(driver); + TRACE_INFO((_L("[HID]\tCGenericHid::ConnectedL: init plugin 0x%08x"),implUid )); + driver->InitialiseL( aConnectionId ); + TInt ret = driver->CanHandleReportL( reportRoot ); + if (ret == KErrNone) + { + TRACE_INFO(_L("[HID]\tCGenericHid::ConnectedL(): found driver")); + + // Make a new driver list item: + CDriverListItem* driverItem = new ( ELeave ) CDriverListItem( aConnectionId ); + CleanupStack::PushL( driverItem ); + driver->SetInputHandlingReg( iInputHandlingReg ); + supportedfields += driver->SupportedFieldCount(); + iDriverList.AddLast( *driverItem ); + CleanupStack::Pop( driverItem ); + driverItem->SetDriver( driver ); + CleanupStack::Pop( driver ); + retVal = KErrNone; + found = ETrue; + } + else + { + CleanupStack::PopAndDestroy( driver ); + } + } + TRACE_INFO((_L("[HID]\tCGenericHid::ConnectedL Partial supported hid device supported %d in report %d&"),supportedfields,iParser->FieldCount())); + if (supportedfields < iParser->FieldCount() && found ) + { + TRACE_INFO(_L("[HID]\tCGenericHid::ConnectedL Partial supported hid device")); + } + implInfoArray.ResetAndDestroy(); + CleanupStack::PopAndDestroy(); // info + if ( found ) + { + TRACE_INFO(_L("[HID]\tCGenericHid::ConnectedL append connection info")); + conninfo = CConnectionInfo::NewL(aConnectionId, reportRoot); + CleanupStack::Pop(reportRoot); // ownership transfered to conninfo + CleanupStack::PushL(conninfo); + iConnectionInfo.AppendL(conninfo); + CleanupStack::Pop(conninfo); + } + else + { + CleanupStack::PopAndDestroy(reportRoot); + } + + return retVal; + } + +// --------------------------------------------------------------------------- +// From CHidTransport +// DataIn +// Determine which driver is handling this connection ID and pass the payload +// reference to it +// --------------------------------------------------------------------------- +// +TInt CGenericHid::DataIn(TInt aConnectionId, + CHidTransport::THidChannelType aChannel, const TDesC8& aPayload) + { + TRACE_FUNC_ENTRY + TInt retVal = KErrHidNoDriver; + TInt ret = KErrNone; + + TSglQueIter driverIter( iDriverList ); + driverIter.SetToFirst(); + + CDriverListItem* item = driverIter; + TBool found = EFalse; + while ( item ) + { + if ( item->ConnectionId() == aConnectionId ) + { + ret = item->Driver()->DataIn( aChannel, aPayload ); + if (ret == KErrNone) + { + TRACE_INFO(_L("[HID]\tCGenericHid::DataIn command handled")); + found = ETrue; + retVal = KErrNone; + } + } + TRACE_INFO(_L("[HID]\tCGenericHid::DataIn next driver")); + driverIter++; + item = driverIter; + } + if ( !found && aChannel == CHidTransport::EHidChannelCtrl ) + { + retVal = KErrNone; + } + iInputHandlingReg->Reset(); + TRACE_FUNC_EXIT + return retVal; + } + + +// --------------------------------------------------------------------------- +// ReportDescriptor +// Provides access to the parsed results to the factory +// --------------------------------------------------------------------------- +// +CReportRoot* CGenericHid::ReportDescriptor(TInt aConnectionId) + { + CConnectionInfo* conninfo = SeekConnectionInfo( aConnectionId ); + if ( conninfo ) + { + return conninfo->ReportRoot(); + } + return NULL; + } + +// --------------------------------------------------------------------------- +// From CHidTransport +// DriverActive() +// --------------------------------------------------------------------------- +// +TInt CGenericHid::DriverActive(TInt aConnectionId, + CHidTransport::TDriverState aActive) + { + TRACE_FUNC_ENTRY + TInt retVal = KErrHidNoDriver; + // Find the driver handling the connection and stop it + TSglQueIter driverIter( iDriverList ); + driverIter.SetToFirst(); + CDriverListItem* item = driverIter; + + while ( item ) + { + TRACE_INFO(_L("[HID]\tCGenericHid::DriverActive")); + if ( item->ConnectionId() == aConnectionId && item->Driver() ) + { + TRACE_INFO(_L("[HID]\tCGenericHid::DriverActive driver found")); + if ( aActive == CHidTransport::EActive ) + { + TRAP(retVal, item->Driver()->StartL( aConnectionId )); + if (retVal != KErrNone) + { + break; + } + } + else if ( aActive == CHidTransport::ESuspend) + { + item->Driver()->Stop(); + retVal = KErrNone; + } + } + driverIter++; + item = driverIter; + } + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// CommandResult() +// --------------------------------------------------------------------------- +// +void CGenericHid::CommandResult(TInt aConnectionId, TInt aCmdAck) + { + // Get the driver handling this connection + CConnectionInfo* conninfo = SeekConnectionInfo( aConnectionId ); + if ( conninfo ) + { + CHidDriver* hiddriver = conninfo->ReturnLastCommandHandler(); + if (hiddriver) + { + hiddriver->CommandResult(aCmdAck); + } + } + } + +// --------------------------------------------------------------------------- +// SeekConnectionInfo() +// --------------------------------------------------------------------------- +// +CConnectionInfo* CGenericHid::SeekConnectionInfo(TInt aConnectionId) + { + TRACE_FUNC + CConnectionInfo* conninfo = NULL; + TInt count = iConnectionInfo.Count(); + TRACE_INFO((_L("[HID]\tCGenericHid::SeekConnectionInfo count %d"), count)); + for (TInt i = 0 ; i < count; i++) + { + conninfo = iConnectionInfo[i]; + TRACE_INFO((_L("[HID]\tCGenericHid::SeekConnectionInfo connection info check %d %d"),aConnectionId, conninfo->ConnectionID())); + if ( conninfo->ConnectionID() == aConnectionId) + { + TRACE_INFO(_L("[HID]\tCGenericHid::SeekConnectionInfo connection info found")); + return conninfo; + } + } + return NULL; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidinterfaces.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidinterfaces.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 2007-2007 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: Hid interface implementation +* +*/ + + +#include + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CHidDriver::CHidDriver() + { + } + +// ----------------------------------------------------------------------------- +// Desturctor +// ----------------------------------------------------------------------------- +// +EXPORT_C CHidDriver::~CHidDriver() + { + REComSession::DestroyedImplementation( iDtor_ID_Key ); + } + +// ----------------------------------------------------------------------------- +// NewL() +// ----------------------------------------------------------------------------- +// +EXPORT_C CHidDriver* CHidDriver::NewL( + TUid aImplementationUid, + MDriverAccess* aHid ) + { + TAny* ptr; + TInt32 keyOffset = _FOFF( CHidDriver, iDtor_ID_Key ); + ptr = REComSession::CreateImplementationL( + aImplementationUid, + keyOffset, + aHid + ); + return reinterpret_cast (ptr); + } + + +// ----------------------------------------------------------------------------- +// NewL() +// ----------------------------------------------------------------------------- +// +CHidInputDataHandlingReg* CHidInputDataHandlingReg::NewL() + { + CHidInputDataHandlingReg* self = new (ELeave) CHidInputDataHandlingReg(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +CHidInputDataHandlingReg::CHidInputDataHandlingReg() + { + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +void CHidInputDataHandlingReg::ConstructL() + { + iEventArray = new ( ELeave ) CArrayFixFlat( 2 ); + } +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CHidInputDataHandlingReg::~CHidInputDataHandlingReg() + { + Reset(); + delete iEventArray; + } + +// ----------------------------------------------------------------------------- +// AddHandledEvent +// ----------------------------------------------------------------------------- +// +EXPORT_C void CHidInputDataHandlingReg::AddHandledEvent( TInt aUsagePage, TInt aUsage ) + { + THidEvent event; + event.iUsagePage = aUsagePage; + event.iKeyCode = aUsage; + TRAP_IGNORE(iEventArray->AppendL( event )); + } + +// ----------------------------------------------------------------------------- +// AllowedToHandleEvent +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CHidInputDataHandlingReg::AllowedToHandleEvent(TInt aUsagePage, TInt aUsage) + { + TInt i; + for (i = 0; i< iEventArray->Count() ;i++) + { + if ( iEventArray->At(i).iUsagePage == aUsagePage && iEventArray->At(i).iKeyCode == aUsage ) + { + return EFalse; + } + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// Reset +// ----------------------------------------------------------------------------- +// +void CHidInputDataHandlingReg::Reset() + { + iEventArray->Reset(); + } + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hiditem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hiditem.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,263 @@ +/* +* Copyright (c) 2004-2007 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: Item implementation +* +*/ + + +// References: +// +// [1] USB Device Class Definition for Human Interface Devices (HID), +// Firmware Specification, Version 1.11, USB Implementers' Forum, +// June 2001 +// +// ---------------------------------------------------------------------- + +#include + +#include "hiditem.h" +#include "hidparser.h" + +const TInt KSizeMask = 0x03; +const TInt KTypeMask = 0x03; +const TInt KTypePosn = 2; +const TInt KTagMask = 0x0F; +const TInt KTagPosn = 4; +const TInt KLongItemId = 0xfe; +const TInt KMaxItemlength = 4; +const TInt KSizeThree = 3; +const TInt KSizeFour = 4; +const TInt KLongItemMin = 3; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +TItem::TItem(const TDesC8& aRawData) + : iRawData(aRawData) + { + if (aRawData.Length() < 1) + { + return; + } + TBool isShortItem = (aRawData[0] != KLongItemId); + + if (isShortItem) + { + // +----+----+----+----+----+----+----+----+ + // | Tag | Type | Size | [data...] + // | . . . | . | . | + // +----+----+----+----+----+----+----+----+ + // 7 6 5 4 3 2 1 0 + // + // A short item is followed by 0, 1, 2 or 4 bytes of data, as + // specified in the size field. See [1], Section 6.2.2.2. + iSize = aRawData[0] & KSizeMask; + if (iSize == KSizeThree) + { + iSize = KSizeFour; + } + iType = static_cast((aRawData[0] >> KTypePosn) & KTypeMask); + iTag = (aRawData[0] >> KTagPosn) & KTagMask; + iDataOffset = 1; + } + else + { + // Byte 0 Byte 1 Byte 2 + // +------+------+------+ +-----------+ +-----------+ + // | Tag | Type | Size | | Data size | | Long item | [data...] + // | 1111 | 11 | 10 | | (0-255) | | tag | + // +------+------+------+ +-----------+ +-----------+ + // 7654 32 10 + // + // A long item is followed by 0-255 bytes of data, as specified + // in the data size byte. See [1], Section 6.2.2.3. + + iType = EReserved; + + if (aRawData.Length() > KLongItemMin) + { + iSize = aRawData[1]; + iTag = aRawData[2]; + iDataOffset = KLongItemMin; + } + else + { + iSize = 0; + iTag = 0; + iDataOffset = 0; + } + } + +#ifdef DBG_ACTIVE + for (TInt i=0; (i KMaxItemlength) + { + size = KMaxItemlength; + } + + // Ensure we don't overrun the source buffer: + // + if (size > (iRawData.Length() - 1)) + { + size = iRawData.Length() - 1; + } + + // Concatenate each byte into a TUint32. Note that this function must + // return zero if the data size is zero (see Parser.cpp, MainItemL()). + // + TUint32 tagData = 0; + for (TInt i=0; i(data); + } + +// --------------------------------------------------------------------------- +// Operator [] +// --------------------------------------------------------------------------- +// +TUint8 TItem::operator[](TInt aIndex) const + { + + TUint8 value = 0; + if ((aIndex >= 0) && (aIndex < iSize)) + { + value = iRawData[iDataOffset + aIndex]; + } + return value; + } + +// --------------------------------------------------------------------------- +// Type() +// --------------------------------------------------------------------------- +// +TItem::TItemType TItem::Type() const + { + return iType; + } + +// --------------------------------------------------------------------------- +// IsMain() +// --------------------------------------------------------------------------- +// +TBool TItem::IsMain() const + { + return iType == TItem::EMain; + } + +// --------------------------------------------------------------------------- +// IsLocal() +// --------------------------------------------------------------------------- +// +TBool TItem::IsLocal() const + { + return iType == TItem::ELocal; + } + +// --------------------------------------------------------------------------- +// IsGlobal() +// --------------------------------------------------------------------------- +// +TBool TItem::IsGlobal() const + { + return iType == TItem::EGlobal; + } + +// --------------------------------------------------------------------------- +// IsLong() +// --------------------------------------------------------------------------- +// +TBool TItem::IsLong() const + { + return iType == TItem::EReserved; + } + +// --------------------------------------------------------------------------- +// ItemSize() +// --------------------------------------------------------------------------- +// +TInt TItem::ItemSize() const + { + return iSize + iDataOffset; + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidparser.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1941 @@ +/* +* Copyright (c) 2004-2007 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: HID parser implementation +* +*/ + + +// ---------------------------------------------------------------------- + +// References: +// +// [1] USB Device Class Definition for Human Interface Devices (HID), +// Firmware Specification, Version 1.11, USB Implementers' Forum, +// June 2001 +// +// [2] HID Parser Error Codes (HID Parser Error Checking), Revision +// 1.2, USB Implementers' Forum, February 2000 +// +// [3] USB HID Usage Tables, Version 1.11, USB Implementers' Forum, +// June 2001 +// +// ---------------------------------------------------------------------- + +#include +#include +#include +#include + +#include "hidreportroot.h" +#include "hiditem.h" +#include "hidparser.h" +#include "debug.h" + + + + +// ---------------------------------------------------------------------- +/* +// Define PARSER_DEBUG to activate trace output for WINS debug builds: +#undef PARSER_DEBUG + +#if defined(PARSER_DEBUG) && defined(_DEBUG) && defined(__WINS__) +#define PDBG(a) a; +#define PDBG_ACTIVE +#else +#define PDBG(a) +#endif +*/ +#define PDBG_ACTIVE + +const TUint32 CParser::KLocalItemMask = + EUsageMin | EUsageMax | EUsageId | + EDesignatorIndex | EDesignatorMin | EDesignatorMax | + EStringIndex | EStringMin | EStringMax; + + +const TUint32 KMaxStandardType = 0x06; +const TUint32 KMinVendorType = 0x80; +const TUint32 KMaxVendorType = 0xFF; +const TUint32 KMaxUsagePage = 0xffff; +const TUint32 KUnitData = 0x0f; + +const TUint32 CParser::KUnusedLocalItemsMask = KLocalItemMask & ~EUsageId; + +const TUint32 KInputReservedBitsMask = 0xffffff00; +const TUint32 KOutputReservedBitsMask = 0xffffff00; +const TUint32 KFeatureReservedBitsMask = 0xffffff00; +const TUint32 KUnitReservedBitsMask = 0xf0000000; + +const TInt KConstantFlag = 1<<0; // Constant (1) or Data (0) +const TInt KVariableFlag = 1<<1; // Array (0) or Variable (1) +const TInt KNullStateFlag = 1<<6; + +const TInt KExtendedDataSize = 4; // 32-bit extended data size +const TInt KExtendedDataShift = 16; // 16 bit shift if extended usage page is used +const TInt KMaxReportIDMax = 255; +const TInt K32Bit = 32; + +const TUint K32BitFirstBitOn = 1u<<31; +const TInt KUnitSystemMin = 5; +const TInt KUnitSystem15 = 15; + +const TUint32 CParser::KMandatoryItemMask = EUsagePage | + ELogicalMin | ELogicalMax | EReportSize | EReportCount; + +const TUint32 CParser::KReportItemMask = EInputReport | + EOutputReport | EFeatureReport; + + +// Reserved values as per the HUT document 1.11, [3]: +// This ranges are reserverd in future use. + +const TInt KReservedUsage = 0x0e; +const TInt KReservedUsageRange1Min = 0x11; +const TInt KReservedUsageRange1Max = 0x13; +const TInt KReservedUsageRange2Min = 0x15; +const TInt KReservedUsageRange2Max = 0x3f; +const TInt KReservedUsageRange3Min = 0x41; +const TInt KReservedUsageRange3Max = 0x7f; +const TInt KReservedUsageRange4Min = 0x88; +const TInt KReservedUsageRange4Max = 0x8b; +const TInt KReservedUsageRange5Min = 0x92; +const TInt KReservedUsageRange5Max = 0xfeff; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLC() +// --------------------------------------------------------------------------- +// +EXPORT_C CParser* CParser::NewLC() + { + CParser* self = new (ELeave) CParser; + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL() +// --------------------------------------------------------------------------- +// +EXPORT_C CParser* CParser::NewL() + { + CParser* self = NewLC(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CParser::ConstructL() + { + TRACE_FUNC_THIS + iLocal = CField::NewL(); + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CParser::CParser(): + iFieldCount(0) + { + TRACE_FUNC_THIS + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CParser:: ~CParser() + { + TRACE_FUNC_THIS + + // Free all RArray storage: + iGlobalStack.Reset(); + + + // Although iCollectionStack is an RPointerArray, we aren't doing + // a ResetAndDestroy() here, as all the collections are owned by + // the report root object, iReportRoot: + iCollectionStack.Reset(); + + delete iReportRoot; + delete iLocal; + } + +// --------------------------------------------------------------------------- +// CreateCollectionL +// --------------------------------------------------------------------------- +// +TInt CParser::CreateCollectionL(TUint32 aType) + { + TInt err = CheckForCollectionErrors(aType); + + if (err == KErrNone) + { + CCollection* collection = Collection()->AddCollectionL(); // Created collection added + // Collection's collection array + collection->SetType(aType); + collection->SetUsagePage(iGlobal.iUsagePage); + collection->SetUsage(iLocal->LastUsage()); + PushCollectionL(collection); + } + return err; + } + +// --------------------------------------------------------------------------- +// CheckForMainErrors() +// --------------------------------------------------------------------------- +// +TInt CParser::CheckForMainErrors() + { + if ( ( iItemsDefined & ELogicalMin ) && ( iItemsDefined & ELogicalMax ) ) + { + if ( iGlobal.iLogicalMin > iGlobal.iLogicalMax ) + { + IssueWarning( ELogicalMinExceedsMax ); + } + } + if ( iItemsDefined & (EPhysicalMin | EPhysicalMax ) ) + { + if ( !( iItemsDefined & EPhysicalMax ) ) + { + return ELonelyPhysicalMin; + } + if (!( iItemsDefined & EPhysicalMin )) + { + return ELonelyPhysicalMax; + } + + if ( iGlobal.iPhysicalMin > iGlobal.iPhysicalMax ) + { + IssueWarning(EPhysicalMinExceedsMax); + } + } + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CheckForCollectionErrors() +// --------------------------------------------------------------------------- +// +TInt CParser::CheckForCollectionErrors(TUint32 aType) + { + if (iCollectionStack.Count() == 0 ) + { + return ENoCollectionToCheck; + } + + if (aType > KMaxStandardType) + { + if ((aType < KMinVendorType) || (aType > KMaxVendorType)) + { + IssueWarning( ECollectionTypeUnknownReserved ); + } + } + + if ( iItemsDefined & KUnusedLocalItemsMask ) + { + IssueWarning( ECollectionLocalUnused ); + } + + TInt numUsages = iLocal->UsageCount(); + + if ( numUsages > 1 ) + { + // Only a single usage value can be associated with a collection: + IssueWarning( ECollectionLocalUnused ); + } + + if ( numUsages == 0 ) + { + // A usage tag must be associated with a collection (see [1], + // Section 6.2.2.6): + IssueWarning( ECollectionHasNoUsage ); + } + + if ( !( iItemsDefined & EUsagePage ) ) + { + // A usage page must be associated with a collection (see [1], + // Section 6.2.2.6): + IssueWarning( ECollectionHasNoUsagePage ); + } + + if (( aType == CCollection::EApplication ) && ( iItemsDefined & EDelimiter )) + { + // Delimiters can't be used when defining usages that apply to + // Application Collections ([1], Section 6.2.2.8): + IssueWarning(EApplicationHasDelimiter); + + // It is an error to declare a delimiter for a top-level + // application collection, [2]: + if (iCollectionStack.Count() == 1) + { + return EDelimiterAtTopLevel; + } + } + return CheckForMainErrors(); + } + + +// --------------------------------------------------------------------------- +// CheckForFieldErrors() +// --------------------------------------------------------------------------- +// +TInt CParser::CheckForFieldErrors(CField::TType aType, TUint32 aAttributes) + { + TInt ret = KErrNone; + ret = CheckMandatoryFieldErrors(aType, aAttributes); + if ( ret != KErrNone ) + { + return ret; + } + + const TInt KLimitsError[] = + { EInputMinExceedsMax, EOutputMinExceedsMax, EFeatureMinExceedsMax }; + + if ( iGlobal.iLogicalMin > iGlobal.iLogicalMax ) + { + return KLimitsError[aType]; + } + + if ( ( iItemsDefined & ( EPhysicalMin | EPhysicalMax ) ) + && ( iGlobal.iPhysicalMin > iGlobal.iPhysicalMax )) + { + return KLimitsError[aType]; + } + CheckLogicalMinAndMax( aAttributes ); + CheckFieldBitNeeded( aType, aAttributes ); + return CheckForMainErrors(); + } + + +// --------------------------------------------------------------------------- +// BitsToRepresentRange() +// --------------------------------------------------------------------------- +// +TInt CParser::BitsToRepresentRange(TInt aMin, TInt aMax) + { + // The number of bits required to represent all values in the + // range aMin to aMax inclusive. If the range is all positive + // then there is no sign bit, otherwise twos complement format is + // assumed. ([1], Section 6.2.2.7.) + + TInt bitsNeeded = 0; + + if (aMin != aMax) + { + TUint absVal = static_cast(Max(Abs(aMin), Abs(aMax))); + + bitsNeeded = K32Bit - NumberOfLeadingZeros(absVal); + + // If either are negative, we'll need space for the sign bit: + // + if ((aMax < 0) || (aMin < 0)) + { + bitsNeeded++; + + // However, 2s complement allows us to represent one extra + // negative number than positive, and so our calculation + // may be one bit over. Catch this with a special case: + // + if (bitsNeeded > 1) + { + TInt n = 1 << (bitsNeeded - 2); + if ((aMin == -n) && (aMax < n)) + { + bitsNeeded--; + } + } + } + } + + return bitsNeeded; + } + +// --------------------------------------------------------------------------- +// NumberOfLeadingZeros() +// --------------------------------------------------------------------------- +// +TInt CParser::NumberOfLeadingZeros(TUint32 aValue) + { + TInt count = 0; + + TUint32 pos = K32BitFirstBitOn; + while ((pos != 0) && ((aValue & pos) == 0)) + { + count++; + pos >>= 1; + } + + return count; + } + + +// --------------------------------------------------------------------------- +// CheckAllReportSizes() +// --------------------------------------------------------------------------- +// +TBool CParser::CheckAllReportSizes() const + { + // Final report sizes must be an integral number of bytes, [2]: + + TBool sizesOk = ETrue; + + for (TInt i=0; sizesOk && (iNumberOfReports()); ++i) + { + TInt bits = iReportRoot->ReportSize(i); + + if ((bits == 0) || ((bits % 8) != 0)) + { + sizesOk = EFalse; + } + } + return sizesOk; + } + + +// --------------------------------------------------------------------------- +// CreateFieldL() +// --------------------------------------------------------------------------- +// +TInt CParser::CreateFieldL(CField::TType aType, TUint32 aAttributes) + { + TInt err = CheckForFieldErrors( aType, aAttributes ); + //Microsoft Elite 2 keyboard HID bug fix + if ( err == EInputMissingItems && iGlobal.iUsagePage == 0x07 ) + if ( iLocal->UsageMin( ) == 0xe0 && iLocal->UsageMax( ) == 0xe7 ) + { + iGlobal.iLogicalMin = 0x0; + iGlobal.iLogicalMax = 0x1; + err = KErrNone; + } + else + { + iGlobal.iLogicalMin = 0x0; + err = KErrNone; + } + + if (err == KErrNone) + { + // Create a new field object: + CField* field = Collection()->AddFieldL( ); // Created field added + // to collection's field array + DumpStateTableL( field ); + field->SetType( aType ); + field->SetAttributes( aAttributes ); + + // Set the field offset to the current report size, and + // increase the report size by the size of this field: + if ( !iReportRoot ) + { + User::Leave(ENoReportRoot); + } + field->SetOffset( iReportRoot->ReportSize( field->ReportId( ), aType) ); + iReportRoot->IncrementReportSizeL( field->ReportId(), + aType, field->Count() * field->Size() ); + TRACE_INFO(_L("CParser::CreateFieldL Field added")); + if ( field->UsageCount() ) + { + iFieldCount++; + } + } + return err; + } + +// --------------------------------------------------------------------------- +// DumpStateTableL() +// --------------------------------------------------------------------------- +// +void CParser::DumpStateTableL(CField *aField) const + { + TRACE_INFO((_L("DumpStateTableL(0x%08x)\n"), aField)); + + // Copy global state: + // + iGlobal.Populate(aField); + + // Copy local state: + // + aField->SetUsageRange( iLocal->UsageMin(), iLocal->UsageMax() ); + aField->SetDesignatorIndex( iLocal->DesignatorIndex() ); + aField->SetDesignatorRange( iLocal->DesignatorMin(), + iLocal->DesignatorMax() ); + aField->SetStringIndex( iLocal->StringIndex() ); + aField->SetStringRange( iLocal->StringMin(), iLocal->StringMax() ); + + // Copy usage list (local state) and calculate the usage range, if + // it hasn't already been explicitly specified: + // + if ( iLocal->UsageCount() > 0 ) + { + TInt minUsage, maxUsage; + minUsage = maxUsage = iLocal->Usage( 0 ); + + for (TInt i=0; iUsageCount(); ++i) + { + TInt value = iLocal->Usage( i ); + aField->AddUsageL( value ); + if ( value < minUsage ) + { + minUsage = value; + } + if ( value > maxUsage ) + { + maxUsage = value; + } + } + if ( (iItemsDefined & (EUsageMin | EUsageMax) ) == 0) + { + aField->SetUsageRange( minUsage, maxUsage ); + } + } + } + + +// --------------------------------------------------------------------------- +// Collection() +// --------------------------------------------------------------------------- +// +CCollection* CParser::Collection() + { + CCollection* lastcollection = NULL; + if ( iCollectionStack.Count( ) > 0 ) + { + lastcollection = iCollectionStack[ iCollectionStack.Count() - 1 ]; + } + return lastcollection; + } + +// --------------------------------------------------------------------------- +// PushCollectionL() +// --------------------------------------------------------------------------- +// +void CParser::PushCollectionL(const CCollection* aCollection) + { + User::LeaveIfError( iCollectionStack.Append( aCollection ) ); + } + +// --------------------------------------------------------------------------- +// PopCollection() +// --------------------------------------------------------------------------- +// +void CParser::PopCollection() + { + + if ( iCollectionStack.Count() > 0 ) + { + iCollectionStack.Remove( iCollectionStack.Count() - 1 ); + } + } + + +// --------------------------------------------------------------------------- +// IssueWarning() +// --------------------------------------------------------------------------- +// +void CParser::IssueWarning(TInt aHidWarningCode) + { + TRACE_ERROR((_L("Item %3d: Warning 0x%04x\n"), iItemNumber, aHidWarningCode)); + (void)aHidWarningCode; + } + +// --------------------------------------------------------------------------- +// ParseL() +// --------------------------------------------------------------------------- +// +EXPORT_C CReportRoot* CParser::ParseL(const TDesC8& aRawData) + { + ResetParserL(); + // Now we can parse the descriptor data: + const TInt length = aRawData.Length(); + TInt posn = 0; + TRACE_INFO((_L("CParser::ParseL() Start parsing length %d"), length)); + while ((posn < length) && (iErrorCode == 0)) + { + iItemNumber++; + TRACE_INFO((_L("posn is %d"), posn)); + + TItem item(aRawData.Right(length-posn)); + +#ifdef PDBG_ACTIVE + TRACE_INFO((_L("Item: size %d, tag %d, type %d\n"), + item.DataSize(), item.Tag(), item.Type())); + for (TInt i=0; i length) + { + iErrorCode = EInvalidItemLength; + } + } + + PopCollection(); + + // PUSH without POP: + CheckParseErrors(); + + iGlobalStack.Reset(); + iCollectionStack.Reset(); + + TRACE_INFO((_L("CParser::ParseL() error code is %d"), iErrorCode)); + // Finished, transfer ownership to caller: + CReportRoot* reportRoot = iReportRoot; + iReportRoot = 0; + return reportRoot; + } + +// --------------------------------------------------------------------------- +// CParser::FieldCount() +// --------------------------------------------------------------------------- +// +TInt CParser::FieldCount() + { + return iFieldCount; + } + +// --------------------------------------------------------------------------- +// CParser::MainItemL() +// --------------------------------------------------------------------------- +// +TInt CParser::MainItemL(const TItem& aItem) + { + TInt retVal = 0; + + switch (aItem.Tag()) + { + case EMainInput: + retVal = HandleMainInputTagL( aItem ); + break; + + case EMainOutput: + retVal = HandleMainOutputTagL( aItem ); + break; + + case EMainFeature: + retVal = HandleMainFeatureL( aItem ); + break; + + case EMainCollection: + retVal = HandleMainCollectionL( aItem ); + break; + + case EMainEndCollection: + retVal = HandleMainEndCollection( aItem ); + break; + default: + TRACE_ERROR(_L("Error: unknown main item\n")); + retVal = EUnknownItem; + break; + } + + // All main items cause local state to be cleared: + ClearLocalState(); + + // For checking if global items declared more than once between + // main items: + iGlobalItemsDefined = 0; + + return retVal; + } +// --------------------------------------------------------------------------- +// ClearLocalState() +// --------------------------------------------------------------------------- +// +void CParser::ClearLocalState() + { + iLocal->ClearUsageList(); + iLocal->SetUsageRange(0, 0); + iLocal->SetStringIndex(0); + iLocal->SetStringRange(0, 0); + iLocal->SetDesignatorIndex(0); + iLocal->SetDesignatorRange(0, 0); + + iItemsDefined &= ~(KLocalItemMask | EDelimiter); + iLocalMultipleUse = EFalse; + } + +// --------------------------------------------------------------------------- +// GlobalItemL() +// --------------------------------------------------------------------------- +// +TInt CParser::GlobalItemL(const TItem& aItem) + { + TInt retVal = 0; + switch (aItem.Tag()) + { + case EGlobalReportId: + retVal = HandleGlobalReportId( aItem ); + break; + case EGlobalUsagePage: + retVal = HandleGlobalUsagePage( aItem ); + break; + case EGlobalLogicalMinimum: + retVal = HandleGlobalLogicalMinimum( aItem ); + break; + case EGlobalLogicalMaximum: + retVal = HandleGlobalLogicalMaximum( aItem ); + break; + case EGlobalPhysicalMinimum: + retVal = HandleGlobalPhysicalMinimum( aItem ); + break; + case EGlobalPhysicalMaximum: + retVal = HandleGlobalPhysicalMaximum( aItem ); + break; + case EGlobalUnit: + retVal = HandleGlobalUnit( aItem ); + break; + case EGlobalUnitExponent: + retVal = HandleGlobalUnitExponent( aItem ); + break; + case EGlobalReportSize: + retVal = HandleGlobalReportSize( aItem ); + break; + case EGlobalReportCount: + retVal = HandleGlobalReportCount(aItem ); + break; + case EGlobalPush: + retVal = HandleGlobalPushL( aItem ); + break; + case EGlobalPop: + retVal = HandleGlobalPop( aItem ); + break; + default: + TRACE_ERROR(_L("Error: unknown global item\n")); + retVal = EUnknownItem; + break; + } + + return retVal; + } + +// --------------------------------------------------------------------------- +// LocalItemL() +// --------------------------------------------------------------------------- +// +TInt CParser::LocalItemL(const TItem& aItem) + { + TInt retVal = 0; + switch (aItem.Tag()) + { + case ELocalUsage: + retVal = HandleLocalUsageL( aItem ); + break; + case ELocalUsageMinimum: + retVal = HandleLocalUsageMinimum( aItem ); + break; + case ELocalUsageMaximum: + retVal = HandleLocalUsageMaximum( aItem ); + break; + case ELocalDesignatorIndex: + retVal = HandleLocalDesignatorIndex( aItem ); + break; + case ELocalDesignatorMinimum: + retVal = HandleLocalDesignatorMinimum( aItem ); + break; + case ELocalDesignatorMaximum: + retVal = HandleLocalDesignatorMaximum( aItem ); + break; + case ELocalStringIndex: + retVal = HandleLocalStringIndex( aItem ); + break; + case ELocalStringMinimum: + retVal = HandleLocalStringMinimum( aItem ); + break; + case ELocalStringMaximum: + retVal = HandleLocalStringMaximum( aItem ); + break; + // "HID parsers must handle Delimiters however, the support + // for the alternative usages that they define is optional. + // Usages other than the first (most preferred) usage defined + // may not be made accessible by system software.", [1], + // Section 6.2.2.8. + // + // This parser only supports the first usage in a delimiter list. + case ELocalDelimiter: + retVal = HandleLocalDelimiter( aItem ); + break; + default: + TRACE_ERROR(_L("Error: unknown local item\n")); + retVal = EUnknownItem; + break; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// IsReservedUsagePage() +// --------------------------------------------------------------------------- +// +TBool CParser::IsReservedUsagePage(TInt aId) + { + return (aId == KReservedUsage) || + ((aId >= KReservedUsageRange1Min ) && (aId <= KReservedUsageRange1Max)) || + ((aId >= KReservedUsageRange2Min ) && (aId <= KReservedUsageRange2Max)) || + ((aId >= KReservedUsageRange3Min) && (aId <= KReservedUsageRange3Max)) || + ((aId >= KReservedUsageRange4Min ) && (aId <= KReservedUsageRange4Max)) || + ((aId >= KReservedUsageRange5Min) && (aId <= KReservedUsageRange5Max)); + } + +// --------------------------------------------------------------------------- +// Populate() +// --------------------------------------------------------------------------- +// +void TParserGlobalState::Populate(CField *aField) const + { + aField->SetUsagePage(iUsagePage); + aField->SetReportId(iReportId); + aField->SetLogicalRange(iLogicalMin, iLogicalMax); + aField->SetSize(iSize); + aField->SetCount(iCount); + aField->SetUnit(iUnit); + aField->SetUnitExponent(iUnitExponent); + + // If the physical min and max are both zero, then the HID class + // document specifies that they should be assumed to be equal to + // the corresponding logical values ([1], Section 6.2.2.7): + // + if ((iPhysicalMin == 0) && (iPhysicalMax == 0)) + { + aField->SetPhysicalRange(iLogicalMin, iLogicalMax); + } + else + { + aField->SetPhysicalRange(iPhysicalMin, iPhysicalMax); + } + } + + +// --------------------------------------------------------------------------- +// TParserGlobalState() +// --------------------------------------------------------------------------- +// +TParserGlobalState::TParserGlobalState() + : iUsagePage(0), iLogicalMin(0), iLogicalMax(0), + iPhysicalMin(0), iPhysicalMax(0), iUnit(0), + iUnitExponent(0), iReportId(0), iSize(0), iCount(0) + { + // Nothing else to do + } + +// --------------------------------------------------------------------------- +// HandleMainInputTagL +// --------------------------------------------------------------------------- +// +TInt CParser::HandleMainInputTagL(const TItem& aItem) + { + // Section 6.2.2.4 of the HID class specification, [1], + // states that an Input item may have a data size of zero + // bytes: + // + // "In this case the value of each data bit for the item + // can be assumed to be zero. This is functionally + // identical to using a item tag that specifies a 4-byte + // data item followed by four zero bytes." + // + // For a data size of zero, TItem::Data() will return zero + // and so we will get the required behaviour. + TRACE_INFO((_L("Input %d\n"), aItem.Data())); + TInt retVal=0; + + iItemsDefined |= EInputReport; + + if ( aItem.Data() & KInputReservedBitsMask ) + { + IssueWarning( EInputReservedBitsNonZero ); + } + if ( iLocalMultipleUse ) + { + IssueWarning( EInputLocalMultipleUse ); + } + if ( iWithinDelimiter ) + { + retVal = EInputItemWithinDelimiter; + } + else + { + retVal = CreateFieldL( CField::EInput, aItem.Data() ); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleMainOutputTagL +// --------------------------------------------------------------------------- +// +TInt CParser::HandleMainOutputTagL(const TItem& aItem) + { + TRACE_INFO((_L("Output %d\n"), aItem.Data())); + TInt retVal=0; + iItemsDefined |= EOutputReport; + + if ( aItem.Data() & KOutputReservedBitsMask ) + { + IssueWarning( EOutputReservedBitsNonZero ); + } + + if ( iLocalMultipleUse ) + { + IssueWarning( EOutputLocalMultipleUse ); + } + + if ( iWithinDelimiter ) + { + retVal = EOutputItemWithinDelimiter; + } + else + { + retVal = CreateFieldL( CField::EOutput, aItem.Data() ); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleMainFeatureL +// --------------------------------------------------------------------------- +// +TInt CParser::HandleMainFeatureL( const TItem& aItem ) + { + TRACE_INFO((_L("Feature %d\n"), aItem.Data())); + TInt retVal=0; + iItemsDefined |= EFeatureReport; + + if ( aItem.Data() & KFeatureReservedBitsMask ) + { + IssueWarning(EFeatureReservedBitsNonZero ); + } + + if ( iLocalMultipleUse ) + { + IssueWarning( EFeatureLocalMultipleUse ); + } + + if ( iWithinDelimiter ) + { + retVal = EFeatureItemWithinDelimiter; + } + else + { + retVal = CreateFieldL( CField::EFeature, aItem.Data() ); + } + + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleMainCollectionL +// --------------------------------------------------------------------------- +// +TInt CParser::HandleMainCollectionL( const TItem& aItem ) + { + TRACE_INFO((_L("Start collection %d\n"), aItem.Data())); + TInt retVal = 0; + + if ( iWithinDelimiter ) + { + retVal = EBeginCollectionWithinDelimiter; + } + else + { + // Application collections can only be declared at + // top-level: + if ((aItem.Data() == CCollection::EApplication) && + (iCollectionStack.Count() != 1)) + { + retVal = EApplicationCollectionLevel; + } + else + { + retVal = CreateCollectionL(aItem.Data()); + } + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleMainEndCollection +// --------------------------------------------------------------------------- +// +TInt CParser::HandleMainEndCollection( const TItem& aItem ) + { + TRACE_INFO((_L("Start collection %d\n"), aItem.Data())); + TInt retVal = 0; + + if (aItem.DataSize() != 0) + { + IssueWarning(EEndCollectionHasData); + } + + if (iItemsDefined & KLocalItemMask) + { + IssueWarning(EEndCollectionLocalUnused); + } + + if (iCollectionStack.Count() > 1) + { + PopCollection(); + } + else + { + retVal = ENoMatchingBeginCollection; + } + + if (iWithinDelimiter) + { + retVal = EEndCollectionWithinDelimiter; + } + + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalReportId +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalReportId( const TItem& aItem ) + { + TRACE_INFO((_L("Global report ID %d\n"), aItem.Data())); + TInt retVal = 0; + TUint reportId = aItem.Data(); + + if (reportId == 0) + { + retVal = EZeroReportId; + } + if (reportId > KMaxReportIDMax) + { + retVal = EReportIdTooBig; + } + + // If there are to be any report IDs specified at all, + // then a report ID must be defined before the first + // input, output or feature report: + // + if ((iGlobal.iReportId == 0) && (iItemsDefined & KReportItemMask)) + { + retVal = ELateReportId; + } + + // Report ID defined outside a top level collection (Microsoft + // restriction) + // + if (iCollectionStack.Count() == 1) + { + retVal = EReportIdOutsideTopLevel; + } + + // Same item shouldn't have been declared since last main item: + // + if (iGlobalItemsDefined & EReportId) + { + // This is an error according to [2], but as it isn't + // a critical problem, and as some real-world devices + // fail this check, we issue a warning instead: + IssueWarning(ERedundantGlobalItem); + } + iGlobalItemsDefined |= EReportId; + + iItemsDefined |= EReportId; + iGlobal.iReportId = reportId; + + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalUsagePage +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalUsagePage( const TItem& aItem ) + { + TRACE_INFO((_L("Global usage page %d\n"), aItem.Data())); + TInt retVal = 0; + + iGlobal.iUsagePage = aItem.Data(); + + if (aItem.Data() == 0) + { + retVal = EZeroUsagePage; + } + + if (aItem.Data() > KMaxUsagePage) + { + retVal = EUsagePageOutOfRange; + } + + if (IsReservedUsagePage(aItem.Data())) + { + IssueWarning(EReservedUsagePage); + } + + iItemsDefined |= EUsagePage; + + if (iGlobalItemsDefined & EUsagePage) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EUsagePage; + + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalLogicalMinimum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalLogicalMinimum( const TItem& aItem ) + { + TRACE_INFO((_L("Global logical min %d\n"), aItem.SignedData())); + TInt retVal = 0; + iGlobal.iLogicalMin = aItem.SignedData(); + iItemsDefined |= ELogicalMin; + + if (iGlobalItemsDefined & ELogicalMin) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= ELogicalMin; + + // "Until Physical Minimum and Physical Maximum are + // declared in a report descriptor they are assumed by the + // HID parser to be equal to Logical Minimum and Logical + // Maximum, respectively.", [1], Section 6.2.2.7. + // + if (!(iItemsDefined & EPhysicalMin)) + { + iGlobal.iPhysicalMin = aItem.SignedData(); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalLogicalMaximum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalLogicalMaximum( const TItem& aItem ) + { + TRACE_INFO((_L("Global logical max %d\n"), aItem.SignedData())); + TInt retVal = 0; + + iGlobal.iLogicalMax = aItem.SignedData(); + if ( !(iItemsDefined & EPhysicalMax) ) + { + iGlobal.iPhysicalMax = aItem.SignedData(); + } + iItemsDefined |= ELogicalMax; + + if (iGlobalItemsDefined & ELogicalMax) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= ELogicalMax; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalPhysicalMinimum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalPhysicalMinimum( const TItem& aItem ) + { + TRACE_INFO((_L("Global physical min %d\n"), aItem.SignedData())); + TInt retVal = 0; + iGlobal.iPhysicalMin = aItem.SignedData(); + iItemsDefined |= EPhysicalMin; + + if (iGlobalItemsDefined & EPhysicalMin) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EPhysicalMin; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalPhysicalMaximum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalPhysicalMaximum( const TItem& aItem ) + { + TRACE_INFO((_L("Global physical max %d\n"), aItem.SignedData())); + + TInt retVal = 0; + iGlobal.iPhysicalMax = aItem.SignedData(); + iItemsDefined |= EPhysicalMax; + + if ( iGlobalItemsDefined & EPhysicalMax ) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EPhysicalMax; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalUnit +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalUnit( const TItem& aItem ) + { + TRACE_INFO((_L("Global unit %d\n"), aItem.Data())); + TInt retVal = 0; + iGlobal.iUnit = aItem.Data(); + iItemsDefined |= EUnit; + + if (iGlobalItemsDefined & EUnit) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EUnit; + + TInt unitSystem = aItem.Data() & KUnitData; + if (((unitSystem >= KUnitSystemMin ) && (unitSystem != KUnitSystem15)) || + (aItem.Data() & KUnitReservedBitsMask )) + { + IssueWarning(EUnitReservedBitsNonZero); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalUnitExponent +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalUnitExponent( const TItem& aItem ) + { + TRACE_INFO((_L("Global unit exponent %d\n"), aItem.Data())); + TInt retVal = 0; + iGlobal.iUnitExponent = aItem.Data(); + iItemsDefined |= EUnitExponent; + + if (iGlobalItemsDefined & EUnitExponent) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EUnitExponent; + const TUint32 KReservedBits = ~0x0fUL; + if (aItem.Data() & KReservedBits) + { + IssueWarning( EExponentReservedBitsNonZero ); + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalReportSize +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalReportSize( const TItem& aItem ) + { + TRACE_INFO((_L("Global report size %d\n"), aItem.Data())); + TInt retVal = 0; + iGlobal.iSize = aItem.Data(); + iItemsDefined |= EReportSize; + + if (iGlobalItemsDefined & EReportSize) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EReportSize; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalReportCount +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalReportCount( const TItem& aItem ) + { + TRACE_INFO((_L("Global report count %d\n"), aItem.Data())); + TInt retVal = 0; + iGlobal.iCount = aItem.Data(); + if (aItem.Data() == 0) + { + retVal = EZeroReportCount; + } + iItemsDefined |= EReportCount; + + if (iGlobalItemsDefined & EReportCount) + { + retVal = ERedundantGlobalItem; + } + iGlobalItemsDefined |= EReportCount; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalPushL +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalPushL( const TItem& aItem ) + { + TRACE_INFO(_L("Global push\n")); + TInt retVal = 0; + if (aItem.DataSize() != 0) + { + retVal = EPushHasData; + } + User::LeaveIfError(iGlobalStack.Append(iGlobal)); + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleGlobalPop +// --------------------------------------------------------------------------- +// +TInt CParser::HandleGlobalPop( const TItem& aItem ) + { + TRACE_INFO(_L("Global pop\n")); + TInt retVal = 0; + if (aItem.DataSize() != 0) + { + retVal = EPopHasData; + } + + if (iGlobalStack.Count() > 0) + { + iGlobal = iGlobalStack[iGlobalStack.Count()-1]; + iGlobalStack.Remove(iGlobalStack.Count()-1); + } + else + { + retVal = EPopWithoutPush; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalUsageL +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalUsageL( const TItem& aItem ) + { + TRACE_INFO((_L("Local usage %d\n"), aItem.Data())); + TInt retVal = 0; + + if (aItem.DataSize() == KExtendedDataSize ) + { + // Extended (32-bit) usage: + TInt usagePage = (aItem.Data() >> KExtendedDataShift); + if (IsReservedUsagePage(usagePage)) + { + IssueWarning(EReservedUsagePage); + } + } + + if ((aItem.Data() & 0xffff) == 0) + { + IssueWarning(EZeroUsage); + } + + if (!iWithinDelimiter || (iAliasCount++ == 0)) + { + iLocal->AddUsageL(aItem.Data()); + iItemsDefined |= EUsageId; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalUsageMinimum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalUsageMinimum( const TItem& aItem ) + { + TRACE_INFO((_L("Local usage min %d\n"), aItem.Data())); + TInt retVal = 0; + if (!iWithinDelimiter || (iAliasCountMin++ == 0)) + { + TInt usagePage = iGlobal.iUsagePage; + + if (aItem.DataSize() == KExtendedDataSize ) + { + // Extended usage specified. + usagePage = aItem.Data() >> KExtendedDataShift; + } + + if (iItemsDefined & EUsageMax) + { + TInt maxPage = + static_cast(iLocal->UsageMax()) >> KExtendedDataShift; + if (maxPage == 0) + { + maxPage = iGlobal.iUsagePage; + } + if (usagePage != maxPage) + { + retVal = EUsagePageMismatchMin; + } + } + iLocal->SetUsageMin(aItem.Data()); + } + if (iItemsDefined & EUsageMin) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EUsageMin; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalUsageMaximum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalUsageMaximum( const TItem& aItem ) + { + TRACE_INFO((_L("Local usage max %d\n"), aItem.Data())); + + TInt retVal = 0; + + if (!iWithinDelimiter || (iAliasCountMax++ == 0)) + { + TInt usagePage = iGlobal.iUsagePage; + + if (aItem.DataSize() == KExtendedDataSize ) + { + // Extended usage specified. + usagePage = aItem.Data() >> KExtendedDataShift; + } + if (iItemsDefined & EUsageMin) + { + TInt minPage = + static_cast(iLocal->UsageMin()) >> KExtendedDataShift; + if (minPage == 0) + { + minPage = iGlobal.iUsagePage; + } + if (usagePage != minPage) + { + retVal = EUsagePageMismatchMax; + } + } + iLocal->SetUsageMax(aItem.Data()); + } + if (iItemsDefined & EUsageMax) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EUsageMax; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalDesignatorIndex +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalDesignatorIndex( const TItem& aItem ) + { + TRACE_INFO((_L("Local designator index %d\n"), + aItem.Data())); + TInt retVal = 0; + iLocal->SetDesignatorIndex(aItem.Data()); + if (iWithinDelimiter) + { + retVal = EInvalidItemWithinDelimiter; + } + if (iItemsDefined & EDesignatorIndex) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EDesignatorIndex; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalDesignatorMinimum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalDesignatorMinimum( const TItem& aItem ) + { + TRACE_INFO((_L("Local designator min %d\n"), aItem.Data())); + TInt retVal = 0; + iLocal->SetDesignatorMin(aItem.Data()); + if ( iWithinDelimiter ) + { + retVal = EInvalidItemWithinDelimiter; + } + if (iItemsDefined & EDesignatorMin) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EDesignatorMin; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalDesignatorMaximum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalDesignatorMaximum( const TItem& aItem ) + { + TRACE_INFO((_L("Local designator max %d\n"), aItem.Data())); + TInt retVal = 0; + iLocal->SetDesignatorMax(aItem.Data()); + if ( iWithinDelimiter ) + { + retVal = EInvalidItemWithinDelimiter; + } + if ( iItemsDefined & EDesignatorMax ) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EDesignatorMax; + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalStringIndex +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalStringIndex( const TItem& aItem ) + { + TRACE_INFO((_L("Local string index %d\n"), aItem.Data())); + TInt retVal = 0; + iLocal->SetStringIndex(aItem.Data()); + if ( iItemsDefined & EStringIndex ) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EStringIndex; + if ( iWithinDelimiter ) + { + retVal = EInvalidItemWithinDelimiter; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalStringMinimum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalStringMinimum( const TItem& aItem ) + { + TRACE_INFO((_L("Local string min %d\n"), + aItem.Data())); + TInt retVal = 0; + iLocal->SetStringMin(aItem.Data()); + if ( iItemsDefined & EStringMin) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EStringMin; + if (iWithinDelimiter) + { + retVal = EInvalidItemWithinDelimiter; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalStringMaximum +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalStringMaximum( const TItem& aItem ) + { + TRACE_INFO((_L("Local string max %d\n"), + aItem.Data())); + TInt retVal = 0; + iLocal->SetStringMax(aItem.Data()); + if ( iItemsDefined & EStringMax ) + { + iLocalMultipleUse = ETrue; + } + iItemsDefined |= EStringMax; + if ( iWithinDelimiter ) + { + retVal = EInvalidItemWithinDelimiter; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleLocalDelimiter +// --------------------------------------------------------------------------- +// +TInt CParser::HandleLocalDelimiter( const TItem& aItem ) + { + const TInt KBeginDelimiter = 1; + const TInt KEndDelimiter = 0; + TInt retVal = 0; + + switch ( aItem.Data() ) + { + case KBeginDelimiter: + if ( iWithinDelimiter ) + { + retVal = ENestedDelimiter; + } + // Delimiters can't be used when defining usages + // that apply to array items ([1], Section 6.2.2.8): + // + if ( Collection()->Type() == CCollection::ENamedArray ) + { + IssueWarning( EDelimiterWithinNamedArray ); + } + iWithinDelimiter = ETrue; + iAliasCount = 0; + iAliasCountMin = 0; + iAliasCountMax = 0; + break; + + case KEndDelimiter: + if ( !iWithinDelimiter ) + { + retVal = ELonelyDelimiter; + } + iWithinDelimiter = EFalse; + break; + + default: + retVal = EUnknownDelimiter; + TRACE_ERROR((_L("Error: Unknown delimiter type %d\n"), + aItem.Data())); + break; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// CheckMandatoryFieldExistence +// --------------------------------------------------------------------------- +// +TInt CParser::CheckMandatoryFieldExistence( CField::TType aType, TUint32 aAttributes ) + { + TInt retVal = KErrNone; + + if ( ( ( iItemsDefined & KMandatoryItemMask ) != KMandatoryItemMask ) + && (!(aAttributes & KConstantFlag))) + { + if ( aType == CField::EInput ) + { + retVal = EInputMissingItems; + } + if ( aType == CField::EOutput ) + { + retVal = EOutputMissingItems; + } + if ( aType == CField::EFeature ) + { + retVal = EFeatureMissingItems; + } + } + return retVal; + } + +// --------------------------------------------------------------------------- +// CheckUsageMinAndMaxErrors +// --------------------------------------------------------------------------- +// +TInt CParser::CheckUsageMinAndMaxErrors() + { + TInt retVal = KErrNone; + + if ( iItemsDefined & ( EUsageMin | EUsageMax )) + { + if (!( iItemsDefined & EUsageMax )) + { + retVal = ELonelyUsageMin; + } + if (!( iItemsDefined & EUsageMin )) + { + retVal = ELonelyUsageMax; + } + if ( iLocal->UsageMin() > iLocal->UsageMax() ) + { + retVal = EUsageMinExceedsMax; + } + } + return retVal; + } + +// --------------------------------------------------------------------------- +// CheckDesignatorMinAndMaxErrors +// --------------------------------------------------------------------------- +// +TInt CParser::CheckDesignatorMinAndMaxErrors() + { + TInt retVal = KErrNone; + + if ( iItemsDefined & ( EDesignatorMin | EDesignatorMax )) + { + if ( !( iItemsDefined & EDesignatorMax ) ) + { + retVal = ELonelyDesignatorMin; + } + if ( !( iItemsDefined & EDesignatorMin ) ) + { + retVal = ELonelyDesignatorMax; + } + if ( iLocal->DesignatorMin( ) > iLocal->DesignatorMax( ) ) + { + retVal = EDesignatorMinExceedsMax; + } + } + return retVal; + } + +// --------------------------------------------------------------------------- +// CheckStringMinAndMaxErrors +// --------------------------------------------------------------------------- +// +TInt CParser::CheckStringMinAndMaxErrors() + { + TInt retVal = KErrNone; + + if (iItemsDefined & (EStringMin | EStringMax)) + { + if ( !( iItemsDefined & EStringMax ) ) + { + retVal = ELonelyStringMin; + } + if ( !( iItemsDefined & EStringMin ) ) + { + retVal = ELonelyStringMax; + } + if ( iLocal->StringMin( ) > iLocal->StringMax( ) ) + { + retVal = EStringMinExceedsMax; + } + } + return retVal; + } + + +// --------------------------------------------------------------------------- +// CheckStringMinAndMaxErrors +// --------------------------------------------------------------------------- +// +TInt CParser::CheckMandatoryFieldErrors( CField::TType aType, TUint32 aAttributes ) + { + TInt ret = KErrNone; + // Check for mandatory items: + ret = CheckMandatoryFieldExistence( aType, aAttributes ); + if ( ret != KErrNone ) + { + return ret; + } + ret = CheckUsageMinAndMaxErrors(); + if ( ret != KErrNone ) + { + return ret; + } + ret = CheckDesignatorMinAndMaxErrors(); + if ( ret != KErrNone ) + { + return ret; + } + ret = CheckStringMinAndMaxErrors(); + if ( ret != KErrNone ) + { + return ret; + } + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CheckLogicalMinAndMax +// --------------------------------------------------------------------------- +// +void CParser::CheckLogicalMinAndMax( TUint32 aAttributes ) + { + // Logical minimum and maximum must match the number of usage + // values defined if the Array flag is set (Var=0). (Ignore this + // check for constant fields) + // + if ( !( aAttributes & KVariableFlag ) && ( ! ( aAttributes & KConstantFlag ) ) ) + { + // Logical minimum must equal 1: + // + if ( iGlobal.iLogicalMin != 1 ) + { + // This is an error according to [2], but we issue a + // warning instead, as many devices (including the + // Logitech diNovo keyboard) fail this check: + IssueWarning( ELogicalMinInvalidForArray ); + } + + // Logical maximum must equal the number of defined usages: + // + TInt numUsages = iLocal->UsageCount(); + if ( numUsages == 0 ) + { + numUsages = iLocal->UsageMax( ) - iLocal->UsageMin( ) + 1; + } + if ( iGlobal.iLogicalMax != numUsages ) + { + // Again, we issue a warning rather than an error: + IssueWarning( ELogicalMaxInvalidForArray ); + } + } + + } + +// --------------------------------------------------------------------------- +// CheckFieldBitNeeded +// --------------------------------------------------------------------------- +// +void CParser::CheckFieldBitNeeded( CField::TType aType, TUint32 aAttributes ) + { + // "The bit field declared by Report Size must be large enough to + // hold all values declared by Logical Minimum and Logical + // Maximum. This includes a sign bit if either are less than + // 0. Also if the Null flag is set then the field must be capable + // of reporting all values declared by Logical Minimum and Logical + // Maximum, and a null value.", [2] (footnote 5). + + TInt bitsNeeded = 0; + + if ( !( aAttributes & KConstantFlag ) ) + { + if ( aAttributes & KNullStateFlag ) + { + // The null state flag is set, so there needs to be at + // least one extra "out of range" value. This could be + // below the lowest value or above the highest, whichever + // will fit better: + bitsNeeded = Min( + BitsToRepresentRange(iGlobal.iLogicalMin - 1, + iGlobal.iLogicalMax), + BitsToRepresentRange(iGlobal.iLogicalMin, + iGlobal.iLogicalMax + 1)); + } + else + { + // No null state declared: + bitsNeeded = BitsToRepresentRange(iGlobal.iLogicalMin, + iGlobal.iLogicalMax); + } + } + + if ( iGlobal.iSize < bitsNeeded ) + { + // The Logitech diNovo is missing a Logical Min and Logical + // Max pair and so will trigger a range error here. As a + // workaround, we will treat this as a warning rather than + // a critical error: + const TInt KRangeError[] = + { EInputReportSize, EOutputReportSize, EFeatureReportSize }; + IssueWarning(KRangeError[aType]); + } + } + +// --------------------------------------------------------------------------- +// HandleItem +// --------------------------------------------------------------------------- +// +void CParser::HandleItemL( TItem& aItem ) + { + iErrorCode = EUnknownItem; + if (aItem.IsLocal()) + { + iErrorCode = LocalItemL(aItem); + } + else + { + // Not allowed non-local items within a delimiter pair: + // + if ( iWithinDelimiter ) + { + iErrorCode = EInvalidItemWithinDelimiter; + } + else + { + if ( aItem.IsMain() ) + { + iErrorCode = MainItemL(aItem); + } + + if ( aItem.IsGlobal() ) + { + iErrorCode = GlobalItemL(aItem); + } + if ( aItem.IsLong() ) + { + IssueWarning(ELongItemDefined); + iErrorCode = 0; + } + } + } + } + +// --------------------------------------------------------------------------- +// CheckParseErrors() +// --------------------------------------------------------------------------- +// +void CParser::CheckParseErrors() + { + if ( !iErrorCode && ( iGlobalStack.Count() > 0) ) + { + iErrorCode = EPushWithoutPop; + } + + // COLLECTION without END_COLLECTION: + if ( !iErrorCode && ( iCollectionStack.Count() != 0 ) ) + { + iErrorCode = ENoMatchingEndCollection; + } + + // DELIMITER(Open) without DELIMITER(Close): + if ( !iErrorCode && iWithinDelimiter ) + { + iErrorCode = ELonelyDelimiter; + } + + // Final size of all reports must be a multiple of eight bits: + if ( !CheckAllReportSizes() ) + { + IssueWarning( EReportMustBeEightBitMultiple ); + } + } + +// --------------------------------------------------------------------------- +// ResetParser +// --------------------------------------------------------------------------- +// +void CParser::ResetParserL() + { + // Create the root collection, which is the container for all + // other collections and fields: + // + delete iReportRoot; // may exist if there has been a Leave() + iReportRoot = 0; + iReportRoot = CReportRoot::NewL(); + iCollectionStack.Reset(); + PushCollectionL(iReportRoot); + + // Clear the error code and the warnings list: + // + iErrorCode = 0; + + // Reset the parser internal state: + // + iGlobal = TParserGlobalState(); + iGlobalStack.Reset(); + iWithinDelimiter = EFalse; + iItemsDefined = 0; + iGlobalItemsDefined = 0; + iItemNumber = 0; + ClearLocalState(); + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidreportbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidreportbase.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2004-2007 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: Report base class implementation +* +*/ + + +#include "hidfield.h" +#include "hidtranslate.h" +#include "hidinterfaces.h" + +const TUint KValueMask = 0xFFFFFFFF; +const TUint KSignBitMask = 0x80000000; +const TInt KThreeLSB = 7; +const TInt KThreeLSBShift = 3; +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// GetIndexOfUsage() +// --------------------------------------------------------------------------- +// +TBool TReportUtils::GetIndexOfUsage(const CField* aField, + TInt aUsageId, TInt& aUsageIndex) + { + TArray usages(aField->UsageArray()); + + if ( usages.Count() > 0 ) + { + // Find the usage in the array + for ( TInt i = 0; i < usages.Count(); i++ ) + { + if ( usages[i] == aUsageId ) + { + aUsageIndex = i; + return ETrue; + } + } + } + else + { + // The field includes all usages between the min and max + if ( aField->UsageMin() <= aUsageId && aUsageId <= aField->UsageMax() ) + { + aUsageIndex = aUsageId - aField->UsageMin(); + return ETrue; + } + } + + return EFalse; + } + +// --------------------------------------------------------------------------- +// UsageAtIndex() +// --------------------------------------------------------------------------- +// +TInt TReportUtils::UsageAtIndex(const CField* aField, TInt aUsageIndex) + { + TInt usageId = 0; + TArray usages(aField->UsageArray()); + + if ( usages.Count() > 0 ) + { + if ( aUsageIndex < 0 ) + { + // Null state for array control + } + else if ( aUsageIndex < usages.Count() ) + { + // Get the usage ID from the set of possible usages + usageId = usages[aUsageIndex]; + } + else + { + // If there aren't enough usages in the set, the last one repeats + usageId = usages[usages.Count() - 1]; + } + } + else + { + // Get the usage ID from the range + if ( 0 <= aUsageIndex + && aUsageIndex <= (aField->UsageMax() - aField->UsageMin()) ) + { + usageId = aField->UsageMin() + aUsageIndex; + } + } + + return usageId; + } + +// --------------------------------------------------------------------------- +// WriteData() +// --------------------------------------------------------------------------- +// +TInt TReportUtils::WriteData(HBufC8& aData, const CField* aField, + TInt aIndex, TInt aValue) + { + if ( 0 <= aIndex && aIndex < aField->Count() ) + { + // The offset in bits from the start of the report to the value + TInt offset = aField->Offset() + aIndex * aField->Size(); + + // How many bits in the least significant byte are not part of the value + TInt bitsToShift = offset & KThreeLSB; + + TUint mask = KValueMask >> ((KSizeOfByte * sizeof(TInt)) - aField->Size()); + mask <<= bitsToShift; + aValue <<= bitsToShift; + + TPtr8 data = aData.Des(); + + // Write out the bytes, least significant first + for ( TInt i = offset >> KThreeLSBShift; mask && i < aData.Length(); i++ ) + { + TUint8 maskByte = static_cast(mask); + + // The extra cast is because MSVC6 thinks that or-ing 2 + // TUint8s together gives an int. + data[i] = static_cast( + (static_cast(aValue) & maskByte) + | (aData[i] & ~maskByte)); + mask >>= KSizeOfByte; + aValue >>= KSizeOfByte; + } + + return KErrNone; + } + + return KErrBadControlIndex; + } + +// --------------------------------------------------------------------------- +// ReadData() +// --------------------------------------------------------------------------- +// +TInt TReportUtils::ReadData(const TDesC8& aData, const CField* aField, + TInt aIndex, TInt& aValue) + { + if ( 0 <= aIndex && aIndex < aField->Count() ) + { + // The offset in bits from the start of the report to the value + TInt offset = aField->Offset() + aIndex * aField->Size(); + + // How many bits in the least significant byte are not part of + // the value + TInt bitsToShift = offset & KThreeLSB; + + // How many consecutive bytes we need to read to get the whole + // value. According to the HID spec, a value cannot span more + // than 4 bytes in a report + TInt bytesToRead = (bitsToShift + aField->Size() + KThreeLSB) / KSizeOfByte; + + // Make sure we don't read past the end of the data + if ( (offset >> KThreeLSBShift) + bytesToRead > aData.Length() ) + { + bytesToRead = aData.Length() - (offset >> KThreeLSBShift); + } + + TInt value = 0; + + // Read in the bytes, most significant first + for ( TInt i = bytesToRead - 1; i >= 0; i-- ) + { + value = (value << KSizeOfByte) | aData[(offset >> KThreeLSBShift) + i]; + } + + value >>= bitsToShift; + + // Make masks for the whole value and just the sign bit + TUint valueMask = KValueMask >> ((KSizeOfByte * sizeof(TInt)) - aField->Size()); + TUint signMask = KSignBitMask >> ((KSizeOfByte * sizeof(TInt)) - aField->Size()); + + if ( aField->LogicalMin() < 0 && (value & signMask) ) + { + // The value is negative, so the leading bits should be 1s + aValue = value | ~valueMask; + } + else + { + // The value is positive, so the leading bits should be 0s + aValue = value & valueMask; + } + + return KErrNone; + } + + return KErrBadControlIndex; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidreportgenerator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidreportgenerator.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2004-2007 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: HID retport generator +* +*/ + + + +#include "hidreportgenerator.h" +#include "hidreportroot.h" +#include "hidinterfaces.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLC() +// --------------------------------------------------------------------------- +// +EXPORT_C CReportGenerator* CReportGenerator::NewLC(const CReportRoot* + aReportRoot, TInt aReportId, CField::TType aType) + { + CReportGenerator* self = new (ELeave) CReportGenerator(aReportId, aType); + CleanupStack::PushL(self); + self->ConstructL(aReportRoot); + return self; + } + +// --------------------------------------------------------------------------- +// NewL() +// --------------------------------------------------------------------------- +// +EXPORT_C CReportGenerator* CReportGenerator::NewL(const CReportRoot* + aReportRoot, TInt aReportId, CField::TType aType) + { + CReportGenerator* self = + CReportGenerator::NewLC(aReportRoot, aReportId, aType); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CReportGenerator::CReportGenerator(TInt aReportId, CField::TType aType) + : iReportId(aReportId), iType(aType) + { + // Nothing else to do + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CReportGenerator::ConstructL(const CReportRoot* aReportRoot) + { + User::LeaveIfNull(const_cast(aReportRoot)); + iReportRoot = aReportRoot; + + // Allocate the buffer, initialise to all zeros, and fill in the + // report ID if used. Zero should be a null value for all array fields + // according to the HID parser error checking spec. + iBuf = HBufC8::NewMaxL(aReportRoot->ReportSizeBytes(iReportId, iType)); + TPtr8 bufptr = iBuf->Des(); + bufptr.FillZ(); + if ( 0 != iReportId ) + { + bufptr[0] = static_cast(iReportId); + } + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CReportGenerator::~CReportGenerator() + { + delete iBuf; + } + +// --------------------------------------------------------------------------- +// SetField() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CReportGenerator::SetField(const CField* aField, + TInt aUsageId, TInt aValue, TInt aControlOffset /*= 0*/) + { + TInt usageIndex; + + if ( aField && TReportUtils::GetIndexOfUsage(aField, aUsageId, usageIndex) ) + { + if ( aField->IsArray() ) + { + // Convert usage ID to logical value + TInt logicalValue = usageIndex + aField->LogicalMin(); + + // Find unused position in the array and write the logical + // value to it + for ( TInt i = 0; i < aField->Count(); i++ ) + { + TInt value; + TInt error = TReportUtils::ReadData(*iBuf, aField, i, value); + + if ( KErrNone != error ) + { + return error; + } + + if ( value == logicalValue ) + { + // The array already contains this usage + return KErrNone; + } + else if ( 0 == value || value < aField->LogicalMin() || + aField->LogicalMax() < value ) + { + // This is an unused position + // + // NOTE: The comparison with zero is because the buffer is + // initialised to all zeros, and some reports erroneously + // include zero in the logical range. + // + return TReportUtils::WriteData(*iBuf, aField, i, logicalValue); + } + } + + return KErrNoSpaceInArray; + } + else + { + // Check the value to set is valid + if ( aValue < aField->LogicalMin() || + aField->LogicalMax() < aValue ) + { + return KErrValueOutOfRange; + } + + return TReportUtils::WriteData(*iBuf, aField, + usageIndex + aControlOffset, aValue); + } + } + + return KErrUsageNotFound; + } + +// --------------------------------------------------------------------------- +// SetField() +// --------------------------------------------------------------------------- +// +EXPORT_C TPtr8 CReportGenerator::Report() + { + return iBuf->Des(); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidreportroot.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidreportroot.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2004-2007 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: Reportroot implementation +* +*/ + + +#include + +#include "hidreportroot.h" +#include "debug.h" + +const TInt KSevenBits = 7; + +// ======== MEMBER FUNCTIONS ======== + +// ----------------------------------------------------------------------------- +// NewLC() +// ----------------------------------------------------------------------------- +// +CReportRoot* CReportRoot::NewLC() + { + CReportRoot* self = new (ELeave) CReportRoot(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } +// ----------------------------------------------------------------------------- +// NewL() +// ----------------------------------------------------------------------------- +// +CReportRoot* CReportRoot::NewL() + { + CReportRoot* self = NewLC(); + CleanupStack::Pop(self); + return self; + } +// ----------------------------------------------------------------------------- +// ~CReportRoot() +// ----------------------------------------------------------------------------- +// +CReportRoot::~CReportRoot() + { + iSizes.Reset(); + iSizes.Close(); + } +// ----------------------------------------------------------------------------- +// CReportRoot() +// ----------------------------------------------------------------------------- +// +CReportRoot::CReportRoot() + { + // Nothing to do here + } + + + +// ----------------------------------------------------------------------------- +// IncrementReportSizeL() +// Manage the report ID <-> size "map": +// ----------------------------------------------------------------------------- +// +void CReportRoot::IncrementReportSizeL(TInt aReportId, + CField::TType aType, TInt aIncrement) + { + TInt index = FindReportSizeIndex(aReportId, aType); + + if ( index == KErrNotFound ) + { + // Add a new entry for this report ID to the "map": + User::LeaveIfError(iSizes.Append(TReportSize(aReportId, aType))); + index = iSizes.Count() - 1; + + TRACE_INFO((_L("Adding size record for report %d:%d (%d)\n"), + aReportId, aType, iSizes[index].iSize)); + } + TRACE_INFO((_L("Size for report %d:%d changes %d + %d\n"), + aReportId, aType, iSizes[index].iSize, aIncrement)); + iSizes[index].iSize += aIncrement; + } + +// ----------------------------------------------------------------------------- +// NumberOfReports() +// ----------------------------------------------------------------------------- +// +TInt CReportRoot::NumberOfReports() const + { + return iSizes.Count(); + } +// ----------------------------------------------------------------------------- +// ReportSize() +// ----------------------------------------------------------------------------- +// +TInt CReportRoot::ReportSize(TInt aIndex) const + { + TInt size = 0; + + if (aIndex < iSizes.Count()) + { + size = iSizes[aIndex].iSize; + } + + return size; + } +// ----------------------------------------------------------------------------- +// ReportSize() +// ----------------------------------------------------------------------------- +// +TInt CReportRoot::ReportSize(TInt aReportId, CField::TType aType) const + { + TInt offset = 0; + + TInt index = FindReportSizeIndex(aReportId, aType); + if (index != KErrNotFound && index < iSizes.Count() ) + { + offset = iSizes[index].iSize; + } + return offset; + } + +// ----------------------------------------------------------------------------- +// ReportSizeBytes() +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CReportRoot::ReportSizeBytes(TInt aReportId, + CField::TType aType) const + { + TInt reportBytes = (ReportSize(aReportId, aType) + KSevenBits) / KSizeOfByte; + + // Add an extra byte if the report ID is used + return ( aReportId ) ? reportBytes + 1 : reportBytes; + } + +// ----------------------------------------------------------------------------- +// FindReportSizeIndex() +// ----------------------------------------------------------------------------- +// +TInt CReportRoot::FindReportSizeIndex(TInt aReportId, CField::TType aType) const + { + TIdentityRelation matcher(TReportSize::Match); + TInt index = iSizes.Find(TReportSize(aReportId, aType), matcher); + + TRACE_INFO((_L("FindReportSizeIndex(%d, %d) = %d\n"), + aReportId, aType, index)); + return index; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidreporttranslator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidreporttranslator.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,170 @@ +/* +* Copyright (c) 2004-2007 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: Report base class implementation +* +*/ + + +#include + +#include "hidtranslate.h" +#include "hidreportroot.h" +#include "hidinterfaces.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C TReportTranslator::TReportTranslator( + const TDesC8& aData, + const CField *aField) + : iData(aData), iField(aField) + { + } + +// --------------------------------------------------------------------------- +// GetValue() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt TReportTranslator::GetValue(TInt& aValue, TInt aUsageId, + TInt aControlOffset /*= 0*/) const + { + TInt usageIndex = 0; + + if ( iField && TReportUtils::GetIndexOfUsage(iField, aUsageId, usageIndex) ) + { + if ( iField->IsArray() ) + { + // Convert usage ID to logical value + TInt logicalValue = usageIndex + iField->LogicalMin(); + + // Find logical value in the array + for ( TInt i = 0; i < iField->Count(); i++ ) + { + TInt value = 0; + TInt error = TReportUtils::ReadData(iData, iField, i, value); + + if ( KErrNone != error ) + { + return error; + } + + if ( value == logicalValue ) + { + aValue = ETrue; + return KErrNone; + } + } + + aValue = EFalse; + return KErrNone; + } + else + { + return TReportUtils::ReadData(iData, iField, usageIndex + aControlOffset, aValue); + } + } + + return KErrUsageNotFound; + } + +// --------------------------------------------------------------------------- +// ValueL() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt TReportTranslator::ValueL(TInt aUsageId, + TInt aControlOffset /*= 0*/) const + { + TInt value = 0; + + User::LeaveIfError(GetValue(value, aUsageId, aControlOffset)); + + return value; + } + +// --------------------------------------------------------------------------- +// GetUsageId() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt TReportTranslator::GetUsageId(TInt& aUsageId, TInt aIndex) const + { + TInt logicalValue = 0; + TInt error = KErrNoMemory; + + if ( iField ) + { + error = TReportUtils::ReadData(iData, iField, aIndex, logicalValue); + + if ( KErrNone == error ) + { + if ( iField->IsArray() ) + { + // The logical value is a usage index + aUsageId = TReportUtils::UsageAtIndex(iField, logicalValue - + iField->LogicalMin()); + } + else + { + // Treat the logical value as an on/off control for the usage + aUsageId = ( logicalValue ) ? TReportUtils::UsageAtIndex(iField, + aIndex) : 0; + } + } + } + + return error; + } + +// --------------------------------------------------------------------------- +// GetUsageId() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt TReportTranslator::UsageIdL(TInt aIndex) const + { + TInt usageId = 0; + + User::LeaveIfError(GetUsageId(usageId, aIndex)); + + return usageId; + } + +// --------------------------------------------------------------------------- +// RawValueL() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt TReportTranslator::RawValueL(TInt aIndex) const + { + TInt value = 0; + User::LeaveIfNull(const_cast(iField)); + User::LeaveIfError(TReportUtils::ReadData(iData, iField, aIndex, value)); + return value; + } + +// --------------------------------------------------------------------------- +// Count() +// --------------------------------------------------------------------------- +// +EXPORT_C TInt TReportTranslator::Count() const + { + TInt count = 0; + + if (iField) + { + count = iField->Count(); + } + + return count; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/src/hidsearch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/src/hidsearch.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2004-2007 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: HID field search +* +*/ + +#include +#include + +#include "hidreportroot.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// SearchL() +// --------------------------------------------------------------------------- +// +EXPORT_C void THidFieldSearch::SearchL(const CReportRoot* aReportRoot, + MHidFieldFinder* aFinder) + { + iFinder = aFinder; + + if (aReportRoot) + { + TBool done = EFalse; + for (TInt i=0; (i < aReportRoot->CollectionCount()) && !done; ++i) + { + done = !DoSearchL(aReportRoot->CollectionByIndex(i)); + } + } + } + +// --------------------------------------------------------------------------- +// DoSearchL() +// --------------------------------------------------------------------------- +// +TBool THidFieldSearch::DoSearchL(const CCollection* aCollection) + { + if (iFinder->BeginCollection(aCollection)) + { + TInt i; + + for (i=0; i < aCollection->FieldCount(); ++i) + { + iFinder->Field(aCollection->FieldByIndex(i)); + } + + for (i=0; i < aCollection->CollectionCount(); ++i) + { + if (!DoSearchL(aCollection->CollectionByIndex(i))) + { + return EFalse; + } + } + } + + return iFinder->EndCollection(aCollection); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/Bmarm/GenericHidTestU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/Bmarm/GenericHidTestU.DEF Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/Bwins/GenericHidTestU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/Bwins/GenericHidTestU.DEF Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/conf/GenericHidTest.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/conf/GenericHidTest.cfg Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1749 @@ +/* +* Copyright (c) 2008-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: Test script config file +* +*/ + +[StifSettings] +CapsModifier= GenericHidTest.exe +[EndStifSettings] + +// GenericHidTest Module - total ... tc + +// GenericHidTest Api Tests (... tc) +/* + [Test] + title Example Api Test + create GenericHidTest tester + tester ExecuteApiTestBlock ExampleTestL API option 1 a + delete tester + [Endtest] +*/ +// Add new api tests here +// ... + + +// GenericHidTest Module Tests (... tc) +/* + [Test] + title Example Module Test + create GenericHidTest tester + tester ExecuteModuleTestBlock ExampleTestL MODULE option 2 b + delete tester + [Endtest] +*/ +// Add new module tests here +// ... + + +// GenericHidTest Branch Tests (... tc) + +[Test] +title Connect/Disconnect +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Connect Unsupported +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\dummyconnect.hid +delete tester +[Endtest] + +[Test] +title Multiple Connect wiht same id +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Headset Data In +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\headsetvolumeup.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Usage PoC Data In +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\UsagePoC.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Multipage Connect/Disconnect +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\multipagec.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Multipage Data In +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\multipagec.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\headsetvolumeupm.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Next track +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Wait BRANCH 1 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Next after next track +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Wait BRANCH 1 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 1 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Wait BRANCH 1 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +tester ExecuteBranchTestBlock Wait BRANCH 2 +delete tester +[Endtest] + +[Test] +title Stop Alarm when playing music +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock AddAlarm BRANCH 1000 +tester ExecuteBranchTestBlock Wait BRANCH 70 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +tester ExecuteBranchTestBlock DeleteAlarm BRANCH +delete tester +[Endtest] + +[Test] +title Volume up +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\volup.hid +tester ExecuteBranchTestBlock Wait BRANCH 6 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Volume down +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\voldown.hid +tester ExecuteBranchTestBlock Wait BRANCH 6 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Mute +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\mute.hid +tester ExecuteBranchTestBlock Wait BRANCH 1 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Short next +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 10 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\next.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Long press next +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 10 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\next.hid +tester ExecuteBranchTestBlock Wait BRANCH 3 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Long press back +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 10 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\prev.hid +tester ExecuteBranchTestBlock Wait BRANCH 3 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Short press back +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetcon2.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\play.hid +tester ExecuteBranchTestBlock Wait BRANCH 10 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\prev.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\empty.hid +tester ExecuteBranchTestBlock Wait BRANCH 20 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\stop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Connect/Disconnect ad83 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock Wait BRANCH 10 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Contry code +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CountryCode BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Vendor id +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock VendorId BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Product ID +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock ProductId BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Set Protocol +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock SetProtocol BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Get Protocol +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock GetProtocol BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Get Report +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock GetReport BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Set Report +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock SetReport BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Data out +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock DataOut BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Get idle +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock GetIdle BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Set idle +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock SetIdle BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Command Result +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock CommandResult BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Report Descriptor +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock ReportDescriptor BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Translator GetValue +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetValue BRANCH Ok +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Translator GetValue Field Null +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator_FieldNull BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetValue BRANCH NotFound +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator GetValue NotArray +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator_NotArray BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetValue BRANCH Ok +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator GetValue FieldCountZero +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator_FieldCountZero BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetValue BRANCH Ok +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Translator Value +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorValue BRANCH +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Translator GetUsageId +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetUsageId BRANCH Ok +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator GetUsageId BadIndex +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetUsageId BRANCH BadIndex +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator GetUsageId Field Null +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator_FieldNull BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetUsageId BRANCH Error +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator GetUsageId NotArray +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator_NotArray BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorGetUsageId BRANCH Ok +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator UsageId +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorUsageId BRANCH +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator Raw value +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorRawValue BRANCH +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator Count +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorCount BRANCH NotZero +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Translator Count Field Null +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportTranslator_FieldNull BRANCH c:\data\others\multipagein.hid +tester ExecuteBranchTestBlock ReportTranslatorCount BRANCH Zero +tester ExecuteBranchTestBlock DeleteReportTranslator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Collection type +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock Collectiontype BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsPhysical +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsPhysical BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsLogical +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsLogical BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsReport +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsReport BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsNamedArray +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsNamedArray BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsUsageSwitch +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsUsageSwitch BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsUsageModifier +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsUsageModifier BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection IsApplication +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionIsApplication BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection UsagePage +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionUsagePage BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection Usage +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionUsage BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection CollectionCount +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionCollectionCount BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection FieldCount +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionFieldCount BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection CollectionByIndex Present +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionCollectionByIndex BRANCH Present +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection CollectionByIndex NotPresent +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionCollectionByIndex BRANCH NotPresent +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Collection FieldByIndex +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CollectionFieldByIndex BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportSizeBytes +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock ReportrootReportSizeBytes BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Logical Max +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldLogicalMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Physical min +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldPhysicalMin BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Physical max +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldPhysicalMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Unit +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldUnit BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Unit Exponent +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldUnitExponent BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Count +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldCount BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Size +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSize BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Offset SetReport +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldOffset BRANCH SetReport +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Offset NotSetReport +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldOffset BRANCH NotSetReport +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Report Id +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldReportId BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Is In Report +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsInReport BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Designator Index +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldDesignatorIndex BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field String Index +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldStringIndex BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Usage Page +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldUsagePage BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field HasUsage +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldHasUsage BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Usage Array +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldUsageArray BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Usage +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldUsage BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Usage Count +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldUsageCount BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Clear Usage List +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldClearUsageList BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Last Usage Empty +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldLastUsage BRANCH Empty +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Last Usage NotEmpty +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldLastUsage BRANCH NotEmpty +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Attributes +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldAttributes BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field Type +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldType BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field IsVariable +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsVariable BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Field IsArray +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsArray BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + + +[Test] +title Field IsConstant +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsConstant BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Field IsData +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsData BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Field SetLogicalMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetLogicalMin BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetLogicalMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetLogicalMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetPhysicalMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetPhysicalMin BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetPhysicalMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetPhysicalMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetDesignatorMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetDesignatorMin BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetDesignatorMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetDesignatorMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetUsageMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetUsageMin BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetUsageMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetUsageMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetStringMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetStringMin BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetStringMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetStringMax BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetLogicalRange +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetLogicalRange BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetUsageRange +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetUsageRange BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetPhysicalRange +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetPhysicalRange BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetStringRange +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetStringRange BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field SetDesignatorRange +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldSetDesignatorRange BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field IsInput +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsInput BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Field IsOutput +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsOutput BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Field IsFeature +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock FieldIsFeature BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title ReportGeneratorReport +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorReport BRANCH +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportGeneratorReport SetField Array +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH Array +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportGeneratorReport SetField NotArray +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH NotArray +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportGeneratorReport SetField NotArrayOutOfRange +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH NotArrayOutOfRange +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title ReportGeneratorReport SetField FieldNull +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH FieldNull +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportGeneratorReport SetField FieldCountZero +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH FieldCountZero +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportGeneratorReport SetField NotExistingUsage +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH NotExistingUsage +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title ReportGeneratorReport SetField NotExistingUsage2 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH NotExistingUsage2 +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title ReportGeneratorReport SetField BadIndex +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\connectad83.hid +tester ExecuteBranchTestBlock CreateReportGenerator BRANCH +tester ExecuteBranchTestBlock ReportGeneratorSetField BRANCH BadIndex +tester ExecuteBranchTestBlock DeleteReportGenerator BRANCH +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title OutputReport +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\output.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title FeautureReport +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\feature.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global physical +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\physicalmax.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Unit +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\unit.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Unit exponent +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\unitexponent.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Designator limit test +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\designator.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Delimiter test +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\delimiter.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title String limit test +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\string.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Push whitout pop +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\push.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Pop whitout push +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\pop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title String index +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\stringindex.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Designator index +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\designatorindex.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Designator index +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localdesignatorindex.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Designator minimum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localdesignatorminimum.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Designator maximum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localdesignatormaximum.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local String index +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localstringindex.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local String minimum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localstringminimum.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local String maximum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localstringmaximum.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + + +[Test] +title Local Delimiter - unknown delimiter +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localdelimiter.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Delimiter - lonely delimiter +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localdelimiter_lonelydelimiter.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Delimiter - nested delimiter +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localdelimiter_nesteddelimiter.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Usage +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localusage.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Usage minimum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localusageminimum.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local Usage maximum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localusagemaximum.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Local item - unknown +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\localitem_unknown.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global Physical minimum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalphysicalmin.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global Physical maximum +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalphysicalmax.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global Unit +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalunit.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global Unit small value +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalunit_smallvalue.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global Unit exponent +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalunitexponent.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global Unit exponent2 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalunitexponent2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global push +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalpush.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global pop +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalpop.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global pop without push +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globalpop_withoutpush.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Global item - unknown +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\globaitem_unknown.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Main Output Tag +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\mainoutputtag.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Main Feature +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\mainfeature.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Long Item +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\longitem.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Handle Item - within delimiter +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\handleitem_withindelimiter.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Main Item - unknown +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\mainitem_unknown.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check usage min and max - LonelyUsageMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkusageminandmax.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check usage min and max - LonelyUsageMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkusageminandmax2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check usage min and max - UsageMinExceedsMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkusageminandmax3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check designator min and max - LonelyDesignatorMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkdesignatorminandmax.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check designator min and max - LonelyDesignatorMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkdesignatorminandmax2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check designator min and max - DesignatorMinExceedsMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkdesignatorminandmax3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check string min and max - LonelyStringMin +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkstringminandmax.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check string min and max - LonelyStringMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkstringminandmax2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check string min and max - StringMinExceedsMax +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkstringminandmax3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check mandatory field existence +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkmandatoryfieldexistence.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check mandatory field existence2 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkmandatoryfieldexistence2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check mandatory field existence3 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkmandatoryfieldexistence3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for field errors +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkforfielderrors.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for field errors2 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkforfielderrors2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check logical min and max +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checklogicalminandmax.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check field bit needed +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkfieldbitneeded.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for main errors +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkformainerrors.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for main errors2 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkformainerrors2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for main errors3 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkformainerrors3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for main errors3 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkformainerrors3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check parse errors +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkparseerrors.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check parse errors2 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkparseerrors2.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check parse errors3 +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkparseerrors3.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title check for collection errors +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\checkforcollectionerrors.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +///////////////////////////////// +[Test] +title Hangup +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock Wait BRANCH 2 +tester ExecuteBranchTestBlock CreateCall BRANCH +48607939016 //+358405695587 +tester ExecuteBranchTestBlock Wait BRANCH 5 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Redial +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock Wait BRANCH 2 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Wait BRANCH 1 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Wait BRANCH 2 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +delete tester +[Endtest] + +[Test] +title Snooze Alarm +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock AddAlarm BRANCH 1 +tester ExecuteBranchTestBlock Wait BRANCH 80 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +tester ExecuteBranchTestBlock DeleteAlarm BRANCH +delete tester +[Endtest] + +[Test] +title Stop Alarm +create GenericHidTest tester +tester ExecuteBranchTestBlock Connect BRANCH c:\data\others\headsetconnect.hid +tester ExecuteBranchTestBlock AddAlarm BRANCH 1 +tester ExecuteBranchTestBlock Wait BRANCH 80 +tester ExecuteBranchTestBlock DataIn BRANCH c:\data\others\hook.hid +tester ExecuteBranchTestBlock Disconnect BRANCH +tester ExecuteBranchTestBlock DeleteAlarm BRANCH +delete tester +[Endtest] +// +// Add new branch tests here +// ... + +//Field SetLogicalRange \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/E000B181.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/E000B181.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,49 @@ +/* +* 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: +* +*/ + + +#include + +// Declares info for two implementations +RESOURCE REGISTRY_INFO theInfo + { + // UID for the DLL + dll_uid = 0xE000B181; + // Declare array of interface info + interfaces = + { + INTERFACE_INFO + { + // UID of interface that is implemented + interface_uid = 0x10201d26; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0xE000B187; + version_no = 1; + display_name = "CHidDriverPlugin"; + default_data = ""; + opaque_data = ""; + } + }; + } + }; + } + +// +// End of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/UsagePoC.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/UsagePoC.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ + 0x33, 0x01 + \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkdesignatorminandmax.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkdesignatorminandmax.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x49, 0x00, //define designator minimum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkdesignatorminandmax2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkdesignatorminandmax2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x59, 0x00, //define designator maximum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkdesignatorminandmax3.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkdesignatorminandmax3.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x49, 0x10, //define designator minimum +0x59, 0x00, //define designator maximum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkfieldbitneeded.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkfieldbitneeded.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,28 @@ +//0x91, 0x00, // main output tag - create field +0x91, 0x41, // main output tag - create field KNullStateFlag + + +//tests for BitsToRepresentRange +0x15, 0x10, //define logical minimum +0x25, 0x10, //define logical maximum +0x91, 0x01, // main output tag - create field + +0x15, 0x05, //define logical minimum +0x25, 0x10, //define logical maximum +0x91, 0x01, // main output tag - create field + + +0x17, 0xFF, 0xFF, 0xFF, 0xFF, //define logical minimum - negative minimum +0x25, 0x10, //define logical maximum +0x91, 0x01, // main output tag - create field + +0x15, 0x05, //define logical minimum +0x25, 0x10, //define logical maximum + +//0x75, 0x00, // set iGlobal.iSize to 0 +0x77, 0xFF, 0xFF, 0xFF, 0xFF, // set iGlobal.iSize to -1 + +0x91, 0x01, // main output tag - create field + +0x75, 0x00, // set iGlobal.iSize to 0 +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkforcollectionerrors.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkforcollectionerrors.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,16 @@ +0xA1, 0x81, //main collection +0xC0, //end collection + +0xA1, 0x07, //main collection +0xC0, //end collection + +0x09, 0xc8, // add local usage +0x05, 0xc8, // add local usage page + +0xA1, 0x01, //main collection +0xC0, //end collection + +0x79, 0xc8, //local string index - KUnusedLocalItemsMask + +0xA1, 0x01, //main collection +0xC0, //end collection \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkforfielderrors.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkforfielderrors.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x15, 0x10, //define logical minimum +0x25, 0x00, //define logical maximum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkforfielderrors2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkforfielderrors2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x35, 0x10, //define physical minimum +0x45, 0x00, //define physical maximum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkformainerrors.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkformainerrors.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,15 @@ +0x35, 0x10, //define physical minimum +0x45, 0x00, //define physical maximum + +0xA1, 0x01, //main collection +0xC0 //end collection + +0x15, 0x10, //define logical minimum +0x25, 0x00, //define logical maximum +0xA1, 0x01, //main collection +0xC0 //end collection + +0x15, 0x00, //define logical minimum +0x25, 0x10, //define logical maximum +0xA1, 0x01, //main collection +0xC0 //end collection \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkformainerrors2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkformainerrors2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x35, 0x00, //define physical minimum + +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkformainerrors3.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkformainerrors3.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x45, 0x00, //define physical maximum + +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checklogicalminandmax.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checklogicalminandmax.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,9 @@ +//0x91, 0x01, // main output tag - create field +//0x91, 0xf0, // main output tag - create field + +0x25, 0x20, //define logical maximum +0x15, 0x10, //define logical minimum - wrong for array +0x91, 0x03, // main output tag - create field ELogicalMinInvalidForArray + +0x09, 0xc8, // add local usage +0x91, 0x03 // main output tag - create field ELogicalMinInvalidForArray \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkmandatoryfieldexistence.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkmandatoryfieldexistence.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x91, 0x00 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkmandatoryfieldexistence2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkmandatoryfieldexistence2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xB1, 0x00 // main feature - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkmandatoryfieldexistence3.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkmandatoryfieldexistence3.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x81, 0x00 // main input tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkparseerrors.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkparseerrors.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xa9, 0x01 // begin delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkparseerrors2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkparseerrors2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xA1, 0x01 //main collection \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkparseerrors3.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkparseerrors3.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xA4 //global push - no data \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkstringminandmax.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkstringminandmax.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x89, 0x00, // define string minimum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkstringminandmax2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkstringminandmax2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x99, 0x00, // define string maximum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkstringminandmax3.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkstringminandmax3.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x89, 0x10, // define string minimum +0x99, 0x00, // define string maximum +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkusageminandmax.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkusageminandmax.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x19, 0x00, //define usage min to 0 +0x91, 0x01 // main output tag - create field \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkusageminandmax2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkusageminandmax2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x29, 0x00, //define usage max to 0 +0x91, 0x01 // main output tag - create field diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkusageminandmax3.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/checkusageminandmax3.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0x19, 0x10, //define usage min to 0 +0x29, 0x00, //define usage max to 0 +0x91, 0x01 // main output tag - create field diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/connectad83.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/connectad83.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,36 @@ +0x05, 0x0C, +0x09, 0x01, +0xA1, 0x01, +0x15, 0x00, +0x25, 0x01, +0x75, 0x01, +0x09, 0xE9, +0x09, 0xEA, +0x95, 0x02, +0x81, 0x02, +0x05, 0x0B, +0x09, 0x2F, +0x95, 0x01, +0x81, 0x06, +0x09, 0x20, +0x81, 0x02, +0x06, 0x00, 0xFF, +0x09, 0x01, +0x09, 0x02, +0x95, 0x02, +0x81, 0x02, +0x95, 0x02, +0x81, 0x01, +0x05, 0x0C, +0x09, 0xB0, +0x09, 0xB3, +0x09, 0xB4, +0x09, 0xB7, +0x09, 0xB5, +0x09, 0xB6, +0x09, 0xB9, +0x95, 0x07, +0x81, 0x06, +0x95, 0x01, +0x81, 0x01, +0xC0 diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/delimiter.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/delimiter.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,36 @@ +// Filename: delimiter1.hid.txt +// A valid delimiter Open and Close + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0xA9, 0x01, // DELIMITER (OPEN) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0xA9, 0x00, // DELIMITER (CLOSE) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/designator.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/designator.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,154 @@ +// File: DesignatorMin1.hid.txt +// Designator Min defined, but no Designator Max + + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) +// Designator Min defined, but no Designator Max + 0x49, 0x01, // DESIGNATOR_MINIMUM (1) + 0x59, 0x20 // DESIGNATOR_MAXIMUM (32) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x1C, // REPORT_COUNT (28) + 0x09, 0xE2, // USAGE (Mute) + 0x09, 0xB7, // USAGE (Stop) + 0x09, 0xCD, // USAGE (Play/pause) + 0x09, 0xEA, // USAGE (Volume Down) + 0x09, 0xE9, // USAGE (Volume Up) + 0x09, 0xB6, // USAGE (Scan Previous Track) + 0x09, 0xB5, // USAGE (Scan Next Track) + 0x0A, 0x83, 0x01, // USAGE (Control config) + 0x0A, 0x1A, 0x02, // USAGE (Undo) + 0x0A, 0x79, 0x02, // USAGE (Redo) + 0x0A, 0xAB, 0x01, // USAGE (Spell check) + 0x0A, 0x08, 0x02, // USAGE (Print) + 0x0A, 0x02, 0x02, // USAGE (Open) + 0x0A, 0x03, 0x02, // USAGE (Close) + 0x0A, 0x07, 0x02, // USAGE (Save) + 0x0A, 0x01, 0x02, // USAGE (New) + 0x0A, 0x92, 0x01, // USAGE (Calculator) + 0x0A, 0x9C, 0x01, // USAGE (Logoff) + 0x09, 0x95, // USAGE (Help) + 0x0A, 0x23, 0x02, // USAGE (Home) + 0x0A, 0x89, 0x02, // USAGE (Reply) + 0x0A, 0x8B, 0x02, // USAGE (Sendto + 0x0A, 0x8C, 0x02, // USAGE (Send) + 0x0A, 0x8A, 0x01, // USAGE (Email + 0x0A, 0x99, 0x01, // USAGE (Chat) + 0x0A, 0xA7, 0x01, // USAGE (Documents) + 0x0A, 0xB6, 0x01, // USAGE (Unknown 0x01b6) + 0x0A, 0xB7, 0x01, // USAGE (Unknown 0x01b7) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x0A, 0x02, 0xFF, // USAGE (Unknown 0xff02) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x03, // REPORT_ID (3) + 0x19, 0x81, // USAGE_MINIMUM (System Power Down) + 0x29, 0x83, // USAGE_MAXIMUM (System Wake Up) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x04, // REPORT_ID (4) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x0A, 0x01, 0xFE, // USAGE (Unknown 1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x05, // REPORT_ID (5) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x02, // REPORT_COUNT (2) + 0x0A, 0x03, 0xFE, // USAGE (Unknown 0xfe03) + 0x0A, 0x04, 0xFE, // USAGE (Unknown 0xfe04) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0xFF, // REPORT_ID (255) + 0x05, 0x06, // USAGE_PAGE (Generic Device Controls) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x19, 0x24, // USAGE_MINIMUM (Unknown 0x24) + 0x29, 0x26, // USAGE_MAXIMUM (Unknown 0x26) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0 // END_COLLECTION +// }; diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/designatorindex.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/designatorindex.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,155 @@ +// File: DesignatorMin1.hid.txt +// Designator Min defined, but no Designator Max + + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) +// Designator Min defined, but no Designator Max + 0x49, 0x01, // DESIGNATOR_MINIMUM (1) + 0x59, 0x20 // DESIGNATOR_MAXIMUM (32) + 0x39, 0x14 // DESIGNATOR_INDEX + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x1C, // REPORT_COUNT (28) + 0x09, 0xE2, // USAGE (Mute) + 0x09, 0xB7, // USAGE (Stop) + 0x09, 0xCD, // USAGE (Play/pause) + 0x09, 0xEA, // USAGE (Volume Down) + 0x09, 0xE9, // USAGE (Volume Up) + 0x09, 0xB6, // USAGE (Scan Previous Track) + 0x09, 0xB5, // USAGE (Scan Next Track) + 0x0A, 0x83, 0x01, // USAGE (Control config) + 0x0A, 0x1A, 0x02, // USAGE (Undo) + 0x0A, 0x79, 0x02, // USAGE (Redo) + 0x0A, 0xAB, 0x01, // USAGE (Spell check) + 0x0A, 0x08, 0x02, // USAGE (Print) + 0x0A, 0x02, 0x02, // USAGE (Open) + 0x0A, 0x03, 0x02, // USAGE (Close) + 0x0A, 0x07, 0x02, // USAGE (Save) + 0x0A, 0x01, 0x02, // USAGE (New) + 0x0A, 0x92, 0x01, // USAGE (Calculator) + 0x0A, 0x9C, 0x01, // USAGE (Logoff) + 0x09, 0x95, // USAGE (Help) + 0x0A, 0x23, 0x02, // USAGE (Home) + 0x0A, 0x89, 0x02, // USAGE (Reply) + 0x0A, 0x8B, 0x02, // USAGE (Sendto + 0x0A, 0x8C, 0x02, // USAGE (Send) + 0x0A, 0x8A, 0x01, // USAGE (Email + 0x0A, 0x99, 0x01, // USAGE (Chat) + 0x0A, 0xA7, 0x01, // USAGE (Documents) + 0x0A, 0xB6, 0x01, // USAGE (Unknown 0x01b6) + 0x0A, 0xB7, 0x01, // USAGE (Unknown 0x01b7) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x0A, 0x02, 0xFF, // USAGE (Unknown 0xff02) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x03, // REPORT_ID (3) + 0x19, 0x81, // USAGE_MINIMUM (System Power Down) + 0x29, 0x83, // USAGE_MAXIMUM (System Wake Up) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x04, // REPORT_ID (4) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x0A, 0x01, 0xFE, // USAGE (Unknown 1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x05, // REPORT_ID (5) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x02, // REPORT_COUNT (2) + 0x0A, 0x03, 0xFE, // USAGE (Unknown 0xfe03) + 0x0A, 0x04, 0xFE, // USAGE (Unknown 0xfe04) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0xFF, // REPORT_ID (255) + 0x05, 0x06, // USAGE_PAGE (Generic Device Controls) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x19, 0x24, // USAGE_MINIMUM (Unknown 0x24) + 0x29, 0x26, // USAGE_MAXIMUM (Unknown 0x26) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0 // END_COLLECTION +// }; diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/dummyconnect.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/dummyconnect.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +0x05, 0x02, //Global usage page 12 +0x09, 0x01, //Local usage page 1 +0xa1, 0x01, //Collection Application +0x15, 0x00, //Global Locgical minimium +0x25, 0x01, //Global Logical maxim +0x75, 0x01, //Global Report size 1 +0x09, 0xE9, //Local usage Volume up +0x09, 0xEA, //Local usage Volume down +0x95, 0x02, //Global Report Count 2 +0x81, 0x02, //Input 2 First field +0x05, 0x03, //Global usage page 11 +0x09, 0x2F, //Local usage mute +0x95, 0x01, //Global Report Count 1 +0x81, 0x06, //Input 6 2. field +0x09, 0x20, //Local usage hook +0x95, 0x01, //Global Report Count 1 +0x81, 0x02, //Input 2 3. field +0x05, 0x02, //Global usage page 12 (consumer) +0x09, 0xCD, //Local usage play/pause +0x09, 0xb5, //Local usage 0xb5 ScanNext +0x09, 0xb6, //Local usage 0xb6 ScanPrev +0x09, 0xb7, //Local usage 0xb7 Stop +0x95, 0x04, //Global Report Count 4 +0x81, 0x02, //Input 2 6. field +0xc0 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/empty.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/empty.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x0 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/feature.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/feature.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,37 @@ +// File: Feature1.hid.txt +// A Feature item defined with no Global or Local items defined + + 0xa1, 0x02, // COLLECTION (Logical) + 0xa1, 0x02, // COLLECTION (Logical) +// No global or Local items defined + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0x09, 0x47, // USAGE (Usage Indicator Color) + 0xa1, 0x02, // COLLECTION (Logical) + 0x09, 0x48, // USAGE (Red) + 0x09, 0x49, // USAGE (Green) + 0x09, 0x4a, // USAGE (Amber) + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0xc0, // END_COLLECTION + 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) + 0x19, 0xb7, // USAGE_MINIMUM (Stop) + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x09, 0x3c, // USAGE (Usage Multi Mode Indicator) + 0xa1, 0x02, // COLLECTION (Logical) + 0x09, 0x3d, // USAGE (Indicator On) + 0x09, 0x3f, // USAGE (Indicator Slow Blink) + 0x09, 0x41, // USAGE (Indicator Off) + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0x09, 0x47, // USAGE (Usage Indicator Color) + 0xa1, 0x02, // COLLECTION (Logical) + 0x09, 0x48, // USAGE (Red) + 0x09, 0x49, // USAGE (Green) + 0x09, 0x4a, // USAGE (Amber) + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0xc0 // END_COLLECTION +//}; + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/feature1.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/feature1.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,37 @@ +// File: Feature1.hid.txt +// A Feature item defined with no Global or Local items defined + + 0xa1, 0x02, // COLLECTION (Logical) + 0xa1, 0x02, // COLLECTION (Logical) +// No global or Local items defined + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0x09, 0x47, // USAGE (Usage Indicator Color) + 0xa1, 0x02, // COLLECTION (Logical) + 0x09, 0x48, // USAGE (Red) + 0x09, 0x49, // USAGE (Green) + 0x09, 0x4a, // USAGE (Amber) + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0xc0, // END_COLLECTION + 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) + 0x19, 0xb7, // USAGE_MINIMUM (Stop) + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x09, 0x3c, // USAGE (Usage Multi Mode Indicator) + 0xa1, 0x02, // COLLECTION (Logical) + 0x09, 0x3d, // USAGE (Indicator On) + 0x09, 0x3f, // USAGE (Indicator Slow Blink) + 0x09, 0x41, // USAGE (Indicator Off) + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0x09, 0x47, // USAGE (Usage Indicator Color) + 0xa1, 0x02, // COLLECTION (Logical) + 0x09, 0x48, // USAGE (Red) + 0x09, 0x49, // USAGE (Green) + 0x09, 0x4a, // USAGE (Amber) + 0xb1, 0x40, // FEATURE (Data,Ary,Abs,Null) + 0xc0, // END_COLLECTION + 0xc0 // END_COLLECTION +//}; + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globaitem_unknown.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globaitem_unknown.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xF5, 0x01 // global item - unknown \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalphysicalmax.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalphysicalmax.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x45, 0xc8, //global physical maximum (200) +0x45, 0xc8 //global physical maximum (200) \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalphysicalmin.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalphysicalmin.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x35, 0xc8, //global physical minimum (200) +0x35, 0xc8 //global physical minimum (200) \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalpop.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalpop.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,4 @@ +0xA4, //global push - no data +0xB4, // global pop +0xA4, //global push - no data +0xB5, 0x01 // global pop with data \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalpop_withoutpush.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalpop_withoutpush.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xB4 // global pop \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalpush.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalpush.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0xA4, //global push - no data +0xB4, // global pop +0xA5, 0x01 // global push with data \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunit.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunit.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x65, 0x06, //global unit +0x65, 0x06 //global unit \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunit_smallvalue.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunit_smallvalue.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x65, 0x02 //global unit \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunitexponent.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunitexponent.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x55, 0x00, //global unit exponent +0x55, 0x00 //global unit exponent \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunitexponent2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/globalunitexponent2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x55, 0xff //global unit exponent \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/handleitem_withindelimiter.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/handleitem_withindelimiter.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +0xa9, 0x01, // begin delimiter - set iWithinDelimiter +0xB1, 0xff, // main feature +0xa9, 0x00 // end delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetcon2.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetcon2.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +0x05, 0x0c, //Global usage page 12 +0x09, 0x01, //Local usage page 1 +0xa1, 0x01, //Collection Application +0x15, 0x00, //Global Locgical minimium +0x25, 0x01, //Global Logical maxim +0x75, 0x01, //Global Report size 1 +0x09, 0xE9, //Local usage Volume up +0x09, 0xEA, //Local usage Volume down +0x95, 0x02, //Global Report Count 2 +0x81, 0x02, //Input 2 First field +0x05, 0x0B, //Global usage page 11 +0x09, 0x2F, //Local usage mute +0x95, 0x01, //Global Report Count 1 +0x81, 0x06, //Input 6 2. field +0x09, 0x20, //Local usage hook +0x95, 0x01, //Global Report Count 1 +0x81, 0x02, //Input 2 3. field +0x05, 0x0C, //Global usage page 12 (consumer) +0x09, 0xCD, //Local usage play/pause +0x09, 0xb5, //Local usage 0xb5 ScanNext +0x09, 0xb6, //Local usage 0xb6 ScanPrev +0x09, 0xb7, //Local usage 0xb7 Stop +0x95, 0x04, //Global Report Count 4 +0x81, 0x02, //Input 2 6. field +0xc0 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetconnect.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetconnect.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,24 @@ + 0x95, 0x01, //Report count 1 + 0x05, 0x0c, //Usage page telephony + 0x09, 0x01, // Usage Phone + 0xa1, 0x01, // COLLECTION (Application) + 0x09, 0x01, // USAGE (Programmable Button) + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x0c, // USAGE_PAGE (Button) + 0x19, 0x00, // USAGE_MINIMUM (Button 1) + 0x29, 0x2f, // USAGE_MAXIMUM (Button 6) + 0x75, 0x08, // REPORT_SIZE (3) + 0x15, 0x00, // LOGICAL_MINIMUM (1) + 0x25, 0x06, // LOGICAL_MAXIMUM (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0, // END_COLLECTION + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x0b, // USAGE_PAGE (Button) + 0x19, 0x20, // USAGE_MINIMUM (Button 1) + 0x29, 0x2f, // USAGE_MAXIMUM (Button 6) + 0x75, 0x08, // REPORT_SIZE (3) + 0x15, 0x00, // LOGICAL_MINIMUM (1) + 0x25, 0x2f, // LOGICAL_MAXIMUM (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0, // END_COLLECTION + 0xc0 //End collection \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetvolumeup.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetvolumeup.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ + 0x2f \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetvolumeupm.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/headsetvolumeupm.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ + 0x01, 0x2f \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/hook.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/hook.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ + 0x20, 0x01 + \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/hookconnect.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/hookconnect.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,24 @@ + 0x95, 0x01, //Report count 1 + 0x05, 0x0c, //Usage page telephony + 0x09, 0x01, // Usage Phone + 0xa1, 0x01, // COLLECTION (Application) + 0x09, 0x01, // USAGE (Programmable Button) + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x0c, // USAGE_PAGE (Button) + 0x19, 0x00, // USAGE_MINIMUM (Button 1) + 0x29, 0x2f, // USAGE_MAXIMUM (Button 6) + 0x75, 0x08, // REPORT_SIZE (3) + 0x15, 0x00, // LOGICAL_MINIMUM (1) + 0x25, 0x06, // LOGICAL_MAXIMUM (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0, // END_COLLECTION + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x0b, // USAGE_PAGE (Button) + 0x19, 0x20, // USAGE_MINIMUM (Button 1) + 0x29, 0x2f, // USAGE_MAXIMUM (Button 6) + 0x75, 0x08, // REPORT_SIZE (3) + 0x15, 0x00, // LOGICAL_MINIMUM (1) + 0x25, 0x2f, // LOGICAL_MAXIMUM (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0, // END_COLLECTION + 0xc0 //End collection \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/inputdata.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/inputdata.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,5 @@ +0x01,0x48, +0x00,0x00, +0x00,0x00, +0x01,0x02, +0x02,0x03 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdelimiter.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdelimiter.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xa9, 0x01, // begin delimiter0xa9, 0x00, // end delimiter0xa9, 0x02, // unknown delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdelimiter_lonelydelimiter.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdelimiter_lonelydelimiter.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xa9, 0x00 // end delimiter - lonely delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdelimiter_nesteddelimiter.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdelimiter_nesteddelimiter.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xa1, 0x04, // COLLECTION (CCollection::ENamedArray) - warning 0xa9, 0x01, // begin delimiter0xa9, 0x01 // begin delimiter - nested \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdesignatorindex.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdesignatorindex.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x39, 0xc8,0x39, 0xc8,0xa9, 0x01, // begin delimiter0x39, 0xc8, // ELocalDesignatorIndex (200)0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdesignatormaximum.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdesignatormaximum.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x59, 0xc8,0x59, 0xc8,0xa9, 0x01, // begin delimiter0x59, 0xc8, // (200)0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdesignatorminimum.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localdesignatorminimum.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x49, 0xc8,0x49, 0xc8,0xa9, 0x01, // begin delimiter0x49, 0xc8, // (200)0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localitem_unknown.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localitem_unknown.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xf9, 0x01 // unknow item \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localstringindex.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localstringindex.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x79, 0xc8,0x79, 0xc8,0xa9, 0x01, // begin delimiter0x79, 0xc8, // (200)0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localstringmaximum.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localstringmaximum.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x99, 0xc8,0x99, 0xc8,0xa9, 0x01, // begin delimiter0x99, 0xc8, // (200)0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localstringminimum.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localstringminimum.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x89, 0xc8,0x89, 0xc8,0xa9, 0x01, // begin delimiter0x89, 0xc8, // ELocalDesignatorIndex (200)0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localusage.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localusage.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x09, 0xc8,0x09, 0x00, // zero usage0xa9, 0x01, // begin delimiter0x09, 0xc8,0x09, 0xc8,0x0B, 0xc8, 0xc9, 0xca, 0xcb, //data size - 40x0B, 0x00, 0x00, 0x00, 0x00, //data size - 40xa9, 0x00 // end delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localusagemaximum.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localusagemaximum.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x29, 0x00,0x19, 0x00, //define usage min to 00x29, 0x00,0xa9, 0x01, // begin delimiter0x29, 0x00,0x29, 0x00,0xa9, 0x00, // end delimiter0x19, 0xc8, //set usage min to 0xc80x29, 0xca,0x2B, 0x00, 0x00, 0x00, 0x00, //data size - 4 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/localusageminimum.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/localusageminimum.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x19, 0x00,0x29, 0x00, //define usage max to 00x19, 0x00,0xa9, 0x01, // begin delimiter0x19, 0x00,0x19, 0x00,0xa9, 0x00, // end delimiter0x29, 0xca, //set usage max to 0xca0x19, 0xc8,0x1B, 0xc8, 0xc9, 0xca, 0xcb, //data size - 4 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/longitem.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/longitem.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x0C //long item \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/mainfeature.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/mainfeature.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,11 @@ +0xB1, 0x01, // main feature + +0x39, 0xc8, +0x39, 0xc8, //local designator index - set iLocalMultipleUse + +0xB1, 0x01, // main feature +0xB2, 0xff, 0xff, // main feature - EOutputReservedBitsNonZero + +//0xa9, 0x01, // begin delimiter - set iWithinDelimiter +//0xB2, 0xff, 0xff, // main feature EOutputReservedBitsNonZero +//0xa9, 0x00 // end delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/mainitem_unknown.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/mainitem_unknown.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xF0 //main item - unknown \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/mainoutputtag.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/mainoutputtag.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,11 @@ +0x91, 0x01, // main output tag + +0x39, 0xc8, +0x39, 0xc8, //local designator index - set iLocalMultipleUse + +0x91, 0x01, // main output tag +0x92, 0xff, 0xff, // main output tag EOutputReservedBitsNonZero + +//0xa9, 0x01, // begin delimiter - set iWithinDelimiter +//0x91, 0x01, // main output tag +//0xa9, 0x00 // end delimiter \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/multipagec.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/multipagec.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,53 @@ + + 0x95, 0x01, //Report count 1 + 0x05, 0x0c, //Usage page telephony + 0x09, 0x01, // Usage Phone + 0xa1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // Report id 1 + 0x09, 0x01, // USAGE (Programmable Button) + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x0c, // USAGE_PAGE (Button) + 0x19, 0x00, // USAGE_MINIMUM (Button 1) + 0x29, 0x2f, // USAGE_MAXIMUM (Button 6) + 0x75, 0x08, // REPORT_SIZE (3) + 0x15, 0x00, // LOGICAL_MINIMUM (1) + 0x25, 0x06, // LOGICAL_MAXIMUM (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0, // END_COLLECTION + 0xa1, 0x02, // COLLECTION (Logical) + 0x05, 0x0b, // USAGE_PAGE (Button) + 0x19, 0x20, // USAGE_MINIMUM (Button 1) + 0x29, 0x2f, // USAGE_MAXIMUM (Button 6) + 0x75, 0x08, // REPORT_SIZE (3) + 0x15, 0x00, // LOGICAL_MINIMUM (1) + 0x25, 0x2f, // LOGICAL_MAXIMUM (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xc0, // END_COLLECTION + 0xc0, //End collection +0x05, 0x01, // USAGE_PAGE (Generic Desktop) +0x09, 0x02, // USAGE (Mouse) +0xa1, 0x01, // COLLECTION (Application) +0x85, 0x02, // Report id 2 +0x09, 0x01, // USAGE (Pointer) +0xa1, 0x00, // COLLECTION (Physical) +0x05, 0x09, // USAGE_PAGE (Button) +0x19, 0x01, // USAGE_MINIMUM (Button 1) +0x29, 0x03, // USAGE_MAXIMUM (Button 3) +0x15, 0x00, // LOGICAL_MINIMUM (0) +0x25, 0x01, // LOGICAL_MAXIMUM (1) +0x95, 0x03, // REPORT_COUNT (3) +0x75, 0x01, // REPORT_SIZE (1) +0x81, 0x02, // INPUT (Data,Var,Abs) +0x95, 0x01, // REPORT_COUNT (1) +0x75, 0x05, // REPORT_SIZE (5) +0x81, 0x03, // INPUT (Cnst,Var,Abs) +0x05, 0x01, // USAGE_PAGE (Generic Desktop) +0x09, 0x30, // USAGE (X) +0x09, 0x31, // USAGE (Y) +0x15, 0x81, // LOGICAL_MINIMUM (-127) +0x25, 0x7f, // LOGICAL_MAXIMUM (127) +0x75, 0x08, // REPORT_SIZE (8) +0x95, 0x02, // REPORT_COUNT (2) +0x81, 0x06, // INPUT (Data,Var,Rel) +0xc0, // END_COLLECTION +0xc0 // END_COLLECTION \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/multipagein.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/multipagein.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ +0x01,0x48, +0x00 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/multiple_usage_page_connect.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/multiple_usage_page_connect.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,18 @@ + 0x05, 0x0c, // Global usage page 12 + 0x09, 0x01, // Local usage page 1 + 0xa1, 0x01, // Start Application collection + 0x15, 0x00, // Global Locgical minimium + 0x20, 0x01, // Global Locgical maximum + 0x75, 0x01, // Global Report size 1 + 0x09, 0xe9, // Local usage Volume up + 0x09, 0xea, // Local usage Volume down + 0x95, 0x02, // Global Report Count 2 + 0x81, 0x02, // Input 2 First field + 0x05, 0x0b, // Global usage page 11 + 0x09, 0x2f, // Local usage mute + 0x95, 0x01, // Global Report Count 1 + 0x81, 0x06m // Input 6 2. field + 0x81, 0x20, // Local usage hook + 0x95, 0x01, // Global Report Count 1 + 0x81, 0x02, // Input 2 3. field + 0xc0 // End collection \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/mute.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/mute.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x24, 0x01 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/next.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/next.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0xE0, 0x04 diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/output.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/output.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +// File: Output1.hid.txt +// Output item with no Global or Local items defined + + 0xA1, 0x01, // COLLECTION (Application) +// Output item with no Global or Local items defined + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/output1.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/output1.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +// File: Output1.hid.txt +// Output item with no Global or Local items defined + + 0xA1, 0x01, // COLLECTION (Application) +// Output item with no Global or Local items defined + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/physicalmax.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/physicalmax.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,45 @@ +// File: PhysicalMax1.hid.txt +// Physical Max defined, but no Physical Min + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x09, 0x04, // USAGE (Joystick) + 0xa1, 0x01, // COLLECTION (Application) + 0x05, 0x02, // USAGE_PAGE (Simulation Controls) + 0x09, 0xbb, // USAGE (Throttle) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + 0x09, 0x39, // USAGE (Hat switch) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) +// Physical Max defined, but no Physical Min +// 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x46, 0x0e, 0x01, // PHYSICAL_MAXIMUM (270) + 0x65, 0x14, // UNIT (Eng Rot:Angular Pos) + 0x75, 0x04, // REPORT_SIZE (4) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x04, // USAGE_MAXIMUM (Button 4) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x55, 0x00, // UNIT_EXPONENT (0) + 0x65, 0x00, // UNIT (None) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0 // END_COLLECTION +//}; + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/play.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/play.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2 @@ + 0xB0, 0x01, + 0x81, 0x01 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/pop.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/pop.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,152 @@ +// File: Pop1.hid.txt +// Pop defined with no corresponding Push + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) +// Pop defined with no corresponding Push + 0xb4, // POP + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x1C, // REPORT_COUNT (28) + 0x09, 0xE2, // USAGE (Mute) + 0x09, 0xB7, // USAGE (Stop) + 0x09, 0xCD, // USAGE (Play/pause) + 0x09, 0xEA, // USAGE (Volume Down) + 0x09, 0xE9, // USAGE (Volume Up) + 0x09, 0xB6, // USAGE (Scan Previous Track) + 0x09, 0xB5, // USAGE (Scan Next Track) + 0x0A, 0x83, 0x01, // USAGE (Control config) + 0x0A, 0x1A, 0x02, // USAGE (Undo) + 0x0A, 0x79, 0x02, // USAGE (Redo) + 0x0A, 0xAB, 0x01, // USAGE (Spell check) + 0x0A, 0x08, 0x02, // USAGE (Print) + 0x0A, 0x02, 0x02, // USAGE (Open) + 0x0A, 0x03, 0x02, // USAGE (Close) + 0x0A, 0x07, 0x02, // USAGE (Save) + 0x0A, 0x01, 0x02, // USAGE (New) + 0x0A, 0x92, 0x01, // USAGE (Calculator) + 0x0A, 0x9C, 0x01, // USAGE (Logoff) + 0x09, 0x95, // USAGE (Help) + 0x0A, 0x23, 0x02, // USAGE (Home) + 0x0A, 0x89, 0x02, // USAGE (Reply) + 0x0A, 0x8B, 0x02, // USAGE (Sendto + 0x0A, 0x8C, 0x02, // USAGE (Send) + 0x0A, 0x8A, 0x01, // USAGE (Email + 0x0A, 0x99, 0x01, // USAGE (Chat) + 0x0A, 0xA7, 0x01, // USAGE (Documents) + 0x0A, 0xB6, 0x01, // USAGE (Unknown 0x01b6) + 0x0A, 0xB7, 0x01, // USAGE (Unknown 0x01b7) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x0A, 0x02, 0xFF, // USAGE (Unknown 0xff02) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x03, // REPORT_ID (3) + 0x19, 0x81, // USAGE_MINIMUM (System Power Down) + 0x29, 0x83, // USAGE_MAXIMUM (System Wake Up) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x04, // REPORT_ID (4) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x0A, 0x01, 0xFE, // USAGE (Unknown 1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x05, // REPORT_ID (5) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x02, // REPORT_COUNT (2) + 0x0A, 0x03, 0xFE, // USAGE (Unknown 0xfe03) + 0x0A, 0x04, 0xFE, // USAGE (Unknown 0xfe04) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0xFF, // REPORT_ID (255) + 0x05, 0x06, // USAGE_PAGE (Generic Device Controls) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x19, 0x24, // USAGE_MINIMUM (Unknown 0x24) + 0x29, 0x26, // USAGE_MAXIMUM (Unknown 0x26) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0 // END_COLLECTION +// }; diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/prev.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/prev.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ + 0x40, 0x02 diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/push.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/push.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,152 @@ +// File: Push1.hid.txt +// Push defined with no corresponding Pop + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) +// Push defined with no corresponding Pop + 0xa4, // PUSH + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x1C, // REPORT_COUNT (28) + 0x09, 0xE2, // USAGE (Mute) + 0x09, 0xB7, // USAGE (Stop) + 0x09, 0xCD, // USAGE (Play/pause) + 0x09, 0xEA, // USAGE (Volume Down) + 0x09, 0xE9, // USAGE (Volume Up) + 0x09, 0xB6, // USAGE (Scan Previous Track) + 0x09, 0xB5, // USAGE (Scan Next Track) + 0x0A, 0x83, 0x01, // USAGE (Control config) + 0x0A, 0x1A, 0x02, // USAGE (Undo) + 0x0A, 0x79, 0x02, // USAGE (Redo) + 0x0A, 0xAB, 0x01, // USAGE (Spell check) + 0x0A, 0x08, 0x02, // USAGE (Print) + 0x0A, 0x02, 0x02, // USAGE (Open) + 0x0A, 0x03, 0x02, // USAGE (Close) + 0x0A, 0x07, 0x02, // USAGE (Save) + 0x0A, 0x01, 0x02, // USAGE (New) + 0x0A, 0x92, 0x01, // USAGE (Calculator) + 0x0A, 0x9C, 0x01, // USAGE (Logoff) + 0x09, 0x95, // USAGE (Help) + 0x0A, 0x23, 0x02, // USAGE (Home) + 0x0A, 0x89, 0x02, // USAGE (Reply) + 0x0A, 0x8B, 0x02, // USAGE (Sendto + 0x0A, 0x8C, 0x02, // USAGE (Send) + 0x0A, 0x8A, 0x01, // USAGE (Email + 0x0A, 0x99, 0x01, // USAGE (Chat) + 0x0A, 0xA7, 0x01, // USAGE (Documents) + 0x0A, 0xB6, 0x01, // USAGE (Unknown 0x01b6) + 0x0A, 0xB7, 0x01, // USAGE (Unknown 0x01b7) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x0A, 0x02, 0xFF, // USAGE (Unknown 0xff02) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x03, // REPORT_ID (3) + 0x19, 0x81, // USAGE_MINIMUM (System Power Down) + 0x29, 0x83, // USAGE_MAXIMUM (System Wake Up) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x04, // REPORT_ID (4) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x0A, 0x01, 0xFE, // USAGE (Unknown 1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x05, // REPORT_ID (5) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x02, // REPORT_COUNT (2) + 0x0A, 0x03, 0xFE, // USAGE (Unknown 0xfe03) + 0x0A, 0x04, 0xFE, // USAGE (Unknown 0xfe04) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0xFF, // REPORT_ID (255) + 0x05, 0x06, // USAGE_PAGE (Generic Device Controls) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x19, 0x24, // USAGE_MINIMUM (Unknown 0x24) + 0x29, 0x26, // USAGE_MAXIMUM (Unknown 0x26) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0 // END_COLLECTION +// }; diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/stop.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/stop.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ + 0xb7, 0x01 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/string.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/string.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,153 @@ +// File: StringMin1.hid.txt +// String Min defined, but no String Max + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) +// String Min defined, but no String Max + 0x89, 0x01, // STRING_MINIMUM (1) + 0x99, 0x20, // STRING_MAXIMUM (32) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x1C, // REPORT_COUNT (28) + 0x09, 0xE2, // USAGE (Mute) + 0x09, 0xB7, // USAGE (Stop) + 0x09, 0xCD, // USAGE (Play/pause) + 0x09, 0xEA, // USAGE (Volume Down) + 0x09, 0xE9, // USAGE (Volume Up) + 0x09, 0xB6, // USAGE (Scan Previous Track) + 0x09, 0xB5, // USAGE (Scan Next Track) + 0x0A, 0x83, 0x01, // USAGE (Control config) + 0x0A, 0x1A, 0x02, // USAGE (Undo) + 0x0A, 0x79, 0x02, // USAGE (Redo) + 0x0A, 0xAB, 0x01, // USAGE (Spell check) + 0x0A, 0x08, 0x02, // USAGE (Print) + 0x0A, 0x02, 0x02, // USAGE (Open) + 0x0A, 0x03, 0x02, // USAGE (Close) + 0x0A, 0x07, 0x02, // USAGE (Save) + 0x0A, 0x01, 0x02, // USAGE (New) + 0x0A, 0x92, 0x01, // USAGE (Calculator) + 0x0A, 0x9C, 0x01, // USAGE (Logoff) + 0x09, 0x95, // USAGE (Help) + 0x0A, 0x23, 0x02, // USAGE (Home) + 0x0A, 0x89, 0x02, // USAGE (Reply) + 0x0A, 0x8B, 0x02, // USAGE (Sendto + 0x0A, 0x8C, 0x02, // USAGE (Send) + 0x0A, 0x8A, 0x01, // USAGE (Email + 0x0A, 0x99, 0x01, // USAGE (Chat) + 0x0A, 0xA7, 0x01, // USAGE (Documents) + 0x0A, 0xB6, 0x01, // USAGE (Unknown 0x01b6) + 0x0A, 0xB7, 0x01, // USAGE (Unknown 0x01b7) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x0A, 0x02, 0xFF, // USAGE (Unknown 0xff02) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x03, // REPORT_ID (3) + 0x19, 0x81, // USAGE_MINIMUM (System Power Down) + 0x29, 0x83, // USAGE_MAXIMUM (System Wake Up) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x04, // REPORT_ID (4) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x0A, 0x01, 0xFE, // USAGE (Unknown 1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x05, // REPORT_ID (5) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x02, // REPORT_COUNT (2) + 0x0A, 0x03, 0xFE, // USAGE (Unknown 0xfe03) + 0x0A, 0x04, 0xFE, // USAGE (Unknown 0xfe04) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0xFF, // REPORT_ID (255) + 0x05, 0x06, // USAGE_PAGE (Generic Device Controls) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x19, 0x24, // USAGE_MINIMUM (Unknown 0x24) + 0x29, 0x26, // USAGE_MAXIMUM (Unknown 0x26) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0 // END_COLLECTION +// }; diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/stringindex.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/stringindex.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,154 @@ +// File: StringMin1.hid.txt +// String Min defined, but no String Max + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x01, // REPORT_ID (1) + 0x05, 0x08, // USAGE_PAGE (LEDs) + 0x19, 0x01, // USAGE_MINIMUM (Num Lock) + 0x29, 0x03, // USAGE_MAXIMUM (Scroll Lock) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x03, // REPORT_COUNT (3) +// String Min defined, but no String Max + 0x89, 0x01, // STRING_MINIMUM (1) + 0x99, 0x20, // STRING_MAXIMUM (32) + 0x79, 0x01, // STRING_MINIMUM (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x09, 0x4B, // USAGE (Generic indicator) + 0x95, 0x01, // REPORT_COUNT (1) + 0x91, 0x02, // OUTPUT (Data,Var,Abs) + 0x95, 0x04, // REPORT_COUNT (4) + 0x91, 0x01, // OUTPUT (Cnst,Ary,Abs) + 0x05, 0x07, // USAGE_PAGE (Keyboard) + 0x19, 0xE0, // USAGE_MINIMUM (Keyboard LeftControl) + 0x29, 0xE7, // USAGE_MAXIMUM (Keyboard Right GUI) + 0x95, 0x08, // REPORT_COUNT (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x19, 0x00, // USAGE_MINIMUM (No event) + 0x29, 0x91, // USAGE_MAXIMUM (Keyboard LANG2) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x00, // INPUT (Data,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x02, // REPORT_ID (2) + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x1C, // REPORT_COUNT (28) + 0x09, 0xE2, // USAGE (Mute) + 0x09, 0xB7, // USAGE (Stop) + 0x09, 0xCD, // USAGE (Play/pause) + 0x09, 0xEA, // USAGE (Volume Down) + 0x09, 0xE9, // USAGE (Volume Up) + 0x09, 0xB6, // USAGE (Scan Previous Track) + 0x09, 0xB5, // USAGE (Scan Next Track) + 0x0A, 0x83, 0x01, // USAGE (Control config) + 0x0A, 0x1A, 0x02, // USAGE (Undo) + 0x0A, 0x79, 0x02, // USAGE (Redo) + 0x0A, 0xAB, 0x01, // USAGE (Spell check) + 0x0A, 0x08, 0x02, // USAGE (Print) + 0x0A, 0x02, 0x02, // USAGE (Open) + 0x0A, 0x03, 0x02, // USAGE (Close) + 0x0A, 0x07, 0x02, // USAGE (Save) + 0x0A, 0x01, 0x02, // USAGE (New) + 0x0A, 0x92, 0x01, // USAGE (Calculator) + 0x0A, 0x9C, 0x01, // USAGE (Logoff) + 0x09, 0x95, // USAGE (Help) + 0x0A, 0x23, 0x02, // USAGE (Home) + 0x0A, 0x89, 0x02, // USAGE (Reply) + 0x0A, 0x8B, 0x02, // USAGE (Sendto + 0x0A, 0x8C, 0x02, // USAGE (Send) + 0x0A, 0x8A, 0x01, // USAGE (Email + 0x0A, 0x99, 0x01, // USAGE (Chat) + 0x0A, 0xA7, 0x01, // USAGE (Documents) + 0x0A, 0xB6, 0x01, // USAGE (Unknown 0x01b6) + 0x0A, 0xB7, 0x01, // USAGE (Unknown 0x01b7) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x0A, 0x02, 0xFF, // USAGE (Unknown 0xff02) + 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x03, // REPORT_ID (3) + 0x19, 0x81, // USAGE_MINIMUM (System Power Down) + 0x29, 0x83, // USAGE_MAXIMUM (System Wake Up) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x95, 0x03, // REPORT_COUNT (3) + 0x75, 0x01, // REPORT_SIZE (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x04, // REPORT_ID (4) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x0A, 0x01, 0xFE, // USAGE (Unknown 1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0x05, // REPORT_ID (5) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x06, // USAGE (Keyboard) + 0xA1, 0x02, // COLLECTION (Logical) + 0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x02, // REPORT_COUNT (2) + 0x0A, 0x03, 0xFE, // USAGE (Unknown 0xfe03) + 0x0A, 0x04, 0xFE, // USAGE (Unknown 0xfe04) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x95, 0x06, // REPORT_COUNT (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0, // END_COLLECTION + 0xC0, // END_COLLECTION + //... // + 0x05, 0x0C, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xA1, 0x01, // COLLECTION (Application) + 0x85, 0xFF, // REPORT_ID (255) + 0x05, 0x06, // USAGE_PAGE (Generic Device Controls) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x02, // REPORT_SIZE (2) + 0x19, 0x24, // USAGE_MINIMUM (Unknown 0x24) + 0x29, 0x26, // USAGE_MAXIMUM (Unknown 0x26) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x06, // REPORT_SIZE (6) + 0x81, 0x01, // INPUT (Cnst,Ary,Abs) + 0xC0 // END_COLLECTION +// }; diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/unit.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/unit.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,44 @@ +// File: UnitExponent1.hid.txt +// Unit Exponent with non-zero data in the reserved field + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x09, 0x04, // USAGE (Joystick) + 0xa1, 0x01, // COLLECTION (Application) + 0x05, 0x02, // USAGE_PAGE (Simulation Controls) + 0x09, 0xbb, // USAGE (Throttle) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + 0x09, 0x39, // USAGE (Hat switch) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x46, 0x0e, 0x01, // PHYSICAL_MAXIMUM (270) + 0x65, 0x14, // UNIT (Eng Rot:Angular Pos) + 0x75, 0x04, // REPORT_SIZE (4) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x04, // USAGE_MAXIMUM (Button 4) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) + 0x55, 0x00, // UNIT_EXPONENT (16) +// Non-zero data in the Reserved field +// 0x65, 0x00, // UNIT (None) + 0x67, 0x00, 0x00, 0x00, 0x80, // UNIT (Non-zero value in reserverd) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0 // END_COLLECTION diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/unitexponent.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/unitexponent.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,43 @@ +// File: UnitExponent1.hid.txt +// Unit Exponent with non-zero data in the reserved field + + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x09, 0x04, // USAGE (Joystick) + 0xa1, 0x01, // COLLECTION (Application) + 0x05, 0x02, // USAGE_PAGE (Simulation Controls) + 0x09, 0xbb, // USAGE (Throttle) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0, // END_COLLECTION + 0x09, 0x39, // USAGE (Hat switch) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x03, // LOGICAL_MAXIMUM (3) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) + 0x46, 0x0e, 0x01, // PHYSICAL_MAXIMUM (270) + 0x65, 0x14, // UNIT (Eng Rot:Angular Pos) + 0x75, 0x04, // REPORT_SIZE (4) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x04, // USAGE_MAXIMUM (Button 4) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x04, // REPORT_COUNT (4) +// Non-zero data in the Reserved field + 0x55, 0x10, // UNIT_EXPONENT (16) + 0x65, 0x00, // UNIT (None) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0xc0 // END_COLLECTION diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/voldown.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/voldown.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x22, 0x01 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/data/volup.hid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/data/volup.hid Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ +0x21,0x01 \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/eabi/GenericHidTestU.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/eabi/GenericHidTestU.def Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,3 @@ +EXPORTS + _Z9LibEntryLR13CTestModuleIf @ 1 NONAME + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/CHidDriverPlugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/CHidDriverPlugin.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2007 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 + +//CAPABILITY CAP_ECOM_PLUGIN +CAPABILITY CAP_APPLICATION CommDD ProtServ + +VENDORID VID_DEFAULT + +TARGET chiddriverplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0xE000B181 + +SOURCEPATH ../src +SOURCE CHidDriverPluginProxy.cpp +SOURCE CHidDriverPlugin.cpp + +USERINCLUDE ../inc +USERINCLUDE ../../../inc + +MW_LAYER_SYSTEMINCLUDE + + +START RESOURCE ../data/E000B181.RSS +TARGET chiddriverplugin.rsc +END + +LIBRARY ECom.lib +LIBRARY euser.lib +LIBRARY generichid.lib + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,62 @@ +/*TYPE TESTCLASS*/ +/* +* Copyright (c) 2008-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: +* +*/ + + +#if defined(__S60_) + // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition + #include +#endif + +TARGET GenericHidTest.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E3 + +//CAPABILITY ALL -TCB +CAPABILITY CAP_APPLICATION CommDD ProtServ + +DEFFILE GenericHidTest.def + +MW_LAYER_SYSTEMINCLUDE + +USERINCLUDE ../inc +USERINCLUDE ../../../inc + +SOURCEPATH ../src +SOURCE GenericHidTest.cpp +SOURCE GenericHidTestBlocks.cpp +SOURCE tGenericHIDAPI.cpp +SOURCE tdialclient.cpp +SOURCE alarmcontrol.cpp +SOURCE timer.cpp +SOURCE CHidDriverPlugin.cpp + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib + +LIBRARY sysutil.lib +LIBRARY efsrv.lib +LIBRARY generichid.lib +LIBRARY etel3rdparty.lib +LIBRARY alarmclient.lib +LIBRARY alarmshared.lib + + +LANG SC + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest_ats.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest_ats.pkg Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,171 @@ +; +; Copyright (c) 2008-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: +; +; + +; Languages +&EN + +; Provide value for uid +#{"STIF"},(0x00000000),1,1,0,TYPE=SA + +; Series60 product id for S60 5.1 +[0x10283160], 0, 0, 0, {"Series60ProductID"} + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Logo +; None + +; Package signature - Optional +; None + +; Start of Package body + +; Condition blocks +; None + +; Options list +; None + +; Install files +"\epoc32\release\armv5\udeb\GenericHidTest.dll"-"c:\Sys\Bin\GenericHidTest.dll" +"\epoc32\release\armv5\udeb\GenericHidTest.exe" - "C:\Sys\Bin\GenericHidTest.exe" + +"\epoc32\release\armv5\udeb\chiddriverplugin.dll"-"C:\Sys\Bin\chiddriverplugin.dll" +"\epoc32\data\Z\resource\plugins\chiddriverplugin.rsc"-"C:\resource\plugins\chiddriverplugin.rsc" + +"..\init\GenericHidTest_ats.ini"-"e:\testing\init\GenericHidTest.ini" +"..\conf\GenericHidTest.cfg"-"e:\testing\conf\GenericHidTest.cfg" + +"..\data\connectad83.hid"-"c:\data\others\connectad83.hid" +"..\data\delimiter.hid"-"c:\data\others\delimiter.hid" +"..\data\designator.hid"-"c:\data\others\designator.hid" +"..\data\designatorindex.hid"-"c:\data\others\designatorindex.hid" +"..\data\dummyconnect.hid"-"c:\data\others\dummyconnect.hid" +"..\data\empty.hid"-"c:\data\others\empty.hid" +"..\data\feature.hid"-"c:\data\others\feature.hid" +"..\data\feature1.hid"-"c:\data\others\feature1.hid" +"..\data\headsetcon2.hid"-"c:\data\others\headsetcon2.hid" +"..\data\headsetconnect.hid"-"c:\data\others\headsetconnect.hid" +"..\data\headsetvolumeup.hid"-"c:\data\others\headsetvolumeup.hid" +"..\data\headsetvolumeupm.hid"-"c:\data\others\headsetvolumeupm.hid" +"..\data\hook.hid"-"c:\data\others\hook.hid" +"..\data\hookconnect.hid"-"c:\data\others\hookconnect.hid" +"..\data\inputdata.hid"-"c:\data\others\inputdata.hid" +"..\data\multipagec.hid"-"c:\data\others\multipagec.hid" +"..\data\multipagein.hid"-"c:\data\others\multipagein.hid" +"..\data\multiple_usage_page_connect.hid"-"c:\data\others\multiple_usage_page_connect.hid" +"..\data\mute.hid"-"c:\data\others\mute.hid" +"..\data\next.hid"-"c:\data\others\next.hid" +"..\data\output.hid"-"c:\data\others\output.hid" +"..\data\output1.hid"-"c:\data\others\output1.hid" +"..\data\physicalmax.hid"-"c:\data\others\physicalmax.hid" +"..\data\play.hid"-"c:\data\others\play.hid" +"..\data\pop.hid"-"c:\data\others\pop.hid" +"..\data\prev.hid"-"c:\data\others\prev.hid" +"..\data\push.hid"-"c:\data\others\push.hid" +"..\data\stop.hid"-"c:\data\others\stop.hid" +"..\data\string.hid"-"c:\data\others\string.hid" +"..\data\stringindex.hid"-"c:\data\others\stringindex.hid" +"..\data\unit.hid"-"c:\data\others\unit.hid" +"..\data\unitexponent.hid"-"c:\data\others\unitexponent.hid" +"..\data\voldown.hid"-"c:\data\others\voldown.hid" +"..\data\volup.hid"-"c:\data\others\volup.hid" + +"..\data\localdesignatorindex.hid"-"c:\data\others\localdesignatorindex.hid" +"..\data\localdesignatorminimum.hid"-"c:\data\others\localdesignatorminimum.hid" +"..\data\localdesignatormaximum.hid"-"c:\data\others\localdesignatormaximum.hid" + +"..\data\localstringindex.hid"-"c:\data\others\localstringindex.hid" +"..\data\localstringminimum.hid"-"c:\data\others\localstringminimum.hid" +"..\data\localstringmaximum.hid"-"c:\data\others\localstringmaximum.hid" + +"..\data\localdelimiter.hid"-"c:\data\others\localdelimiter.hid" +"..\data\localdelimiter_lonelydelimiter.hid"-"c:\data\others\localdelimiter_lonelydelimiter.hid" +"..\data\localdelimiter_nesteddelimiter.hid"-"c:\data\others\localdelimiter_nesteddelimiter.hid" + +"..\data\localusage.hid"-"c:\data\others\localusage.hid" +"..\data\localusageminimum.hid"-"c:\data\others\localusageminimum.hid" +"..\data\localusagemaximum.hid"-"c:\data\others\localusagemaximum.hid" + +"..\data\localitem_unknown.hid"-"c:\data\others\localitem_unknown.hid" + +"..\data\globalphysicalmin.hid"-"c:\data\others\globalphysicalmin.hid" +"..\data\globalphysicalmax.hid"-"c:\data\others\globalphysicalmax.hid" +"..\data\globalunit.hid"-"c:\data\others\globalunit.hid" +"..\data\globalunit_smallvalue.hid"-"c:\data\others\globalunit_smallvalue.hid" +"..\data\globalunitexponent.hid"-"c:\data\others\globalunitexponent.hid" +"..\data\globalunitexponent2.hid"-"c:\data\others\globalunitexponent2.hid" +"..\data\globalpush.hid"-"c:\data\others\globalpush.hid" +"..\data\globalpop.hid"-"c:\data\others\globalpop.hid" +"..\data\globalpop_withoutpush.hid"-"c:\data\others\globalpop_withoutpush.hid" +"..\data\globaitem_unknown.hid"-"c:\data\others\globaitem_unknown.hid" + +"..\data\mainoutputtag.hid"-"c:\data\others\mainoutputtag.hid" +"..\data\mainfeature.hid"-"c:\data\others\mainfeature.hid" + +"..\data\longitem.hid"-"c:\data\others\longitem.hid" +"..\data\handleitem_withindelimiter.hid"-"c:\data\others\handleitem_withindelimiter.hid" + +"..\data\mainitem_unknown.hid"-"c:\data\others\mainitem_unknown.hid" + +"..\data\checkusageminandmax.hid"-"c:\data\others\checkusageminandmax.hid" +"..\data\checkusageminandmax2.hid"-"c:\data\others\checkusageminandmax2.hid" +"..\data\checkusageminandmax3.hid"-"c:\data\others\checkusageminandmax3.hid" + +"..\data\checkdesignatorminandmax.hid"-"c:\data\others\checkdesignatorminandmax.hid" +"..\data\checkdesignatorminandmax2.hid"-"c:\data\others\checkdesignatorminandmax2.hid" +"..\data\checkdesignatorminandmax3.hid"-"c:\data\others\checkdesignatorminandmax3.hid" + +"..\data\checkstringminandmax.hid"-"c:\data\others\checkstringminandmax.hid" +"..\data\checkstringminandmax2.hid"-"c:\data\others\checkstringminandmax2.hid" +"..\data\checkstringminandmax3.hid"-"c:\data\others\checkstringminandmax3.hid" + +"..\data\checkmandatoryfieldexistence.hid"-"c:\data\others\checkmandatoryfieldexistence.hid" +"..\data\checkmandatoryfieldexistence2.hid"-"c:\data\others\checkmandatoryfieldexistence2.hid" +"..\data\checkmandatoryfieldexistence3.hid"-"c:\data\others\checkmandatoryfieldexistence3.hid" + +"..\data\checkforfielderrors.hid"-"c:\data\others\checkforfielderrors.hid" +"..\data\checkforfielderrors2.hid"-"c:\data\others\checkforfielderrors2.hid" + +"..\data\checklogicalminandmax.hid"-"c:\data\others\checklogicalminandmax.hid" + +"..\data\checkfieldbitneeded.hid"-"c:\data\others\checkfieldbitneeded.hid" + +"..\data\checkformainerrors.hid"-"c:\data\others\checkformainerrors.hid" +"..\data\checkformainerrors2.hid"-"c:\data\others\checkformainerrors2.hid" +"..\data\checkformainerrors3.hid"-"c:\data\others\checkformainerrors3.hid" + +"..\data\checkparseerrors.hid"-"c:\data\others\checkparseerrors.hid" +"..\data\checkparseerrors2.hid"-"c:\data\others\checkparseerrors2.hid" +"..\data\checkparseerrors3.hid"-"c:\data\others\checkparseerrors3.hid" + +"..\data\checkforcollectionerrors.hid"-"c:\data\others\checkforcollectionerrors.hid" + +; Embedded SIS +; None + +; End of Package body + +; PKG dependencies +; None + +; PKG capabilities +; None diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest_exe.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest_exe.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/*TYPE TESTCLASS*/ +/* +* Copyright (c) 2008-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: +* +*/ + + +#if defined(__S60_) + #include +#endif + +TARGET GenericHidTest.exe +TARGETTYPE exe +UID 0 0xEF4892C6 + +CAPABILITY LocalServices CommDD + + +MW_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src + +SOURCE GenericHidTest_exe.cpp + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib + +EPOCSTACKSIZE 40960 + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest_phone.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/GenericHidTest_phone.pkg Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,172 @@ +; +; Copyright (c) 2008-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: +; +; + +; Languages +&EN + +; Provide value for uid +#{"STIF"},(0x00000000),1,1,0,TYPE=SA + +; Series60 product id for S60 5.1 +[0x10283160], 0, 0, 0, {"Series60ProductID"} + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Logo +; None + +; Package signature - Optional +; None + +; Start of Package body + +; Condition blocks +; None + +; Options list +; None + +; Install files +"\epoc32\release\armv5\udeb\GenericHidTest.dll"-"c:\Sys\Bin\GenericHidTest.dll" +"\epoc32\release\armv5\udeb\GenericHidTest.exe" - "C:\Sys\Bin\GenericHidTest.exe" + +"\epoc32\release\armv5\udeb\chiddriverplugin.dll"-"C:\Sys\Bin\chiddriverplugin.dll" +"\epoc32\data\Z\resource\plugins\chiddriverplugin.rsc"-"C:\resource\plugins\chiddriverplugin.rsc" + +"..\init\GenericHidTest_phone.ini"-"c:\testframework\testframework.ini" +"..\conf\GenericHidTest.cfg"-"c:\testframework\GenericHidTest.cfg" + +"..\data\connectad83.hid"-"c:\data\others\connectad83.hid" +"..\data\delimiter.hid"-"c:\data\others\delimiter.hid" +"..\data\designator.hid"-"c:\data\others\designator.hid" +"..\data\designatorindex.hid"-"c:\data\others\designatorindex.hid" +"..\data\dummyconnect.hid"-"c:\data\others\dummyconnect.hid" +"..\data\empty.hid"-"c:\data\others\empty.hid" +"..\data\feature.hid"-"c:\data\others\feature.hid" +"..\data\feature1.hid"-"c:\data\others\feature1.hid" +"..\data\headsetcon2.hid"-"c:\data\others\headsetcon2.hid" +"..\data\headsetconnect.hid"-"c:\data\others\headsetconnect.hid" +"..\data\headsetvolumeup.hid"-"c:\data\others\headsetvolumeup.hid" +"..\data\headsetvolumeupm.hid"-"c:\data\others\headsetvolumeupm.hid" +"..\data\hook.hid"-"c:\data\others\hook.hid" +"..\data\hookconnect.hid"-"c:\data\others\hookconnect.hid" +"..\data\inputdata.hid"-"c:\data\others\inputdata.hid" +"..\data\multipagec.hid"-"c:\data\others\multipagec.hid" +"..\data\multipagein.hid"-"c:\data\others\multipagein.hid" +"..\data\multiple_usage_page_connect.hid"-"c:\data\others\multiple_usage_page_connect.hid" +"..\data\mute.hid"-"c:\data\others\mute.hid" +"..\data\next.hid"-"c:\data\others\next.hid" +"..\data\output.hid"-"c:\data\others\output.hid" +"..\data\output1.hid"-"c:\data\others\output1.hid" +"..\data\physicalmax.hid"-"c:\data\others\physicalmax.hid" +"..\data\play.hid"-"c:\data\others\play.hid" +"..\data\pop.hid"-"c:\data\others\pop.hid" +"..\data\prev.hid"-"c:\data\others\prev.hid" +"..\data\push.hid"-"c:\data\others\push.hid" +"..\data\stop.hid"-"c:\data\others\stop.hid" +"..\data\string.hid"-"c:\data\others\string.hid" +"..\data\stringindex.hid"-"c:\data\others\stringindex.hid" +"..\data\unit.hid"-"c:\data\others\unit.hid" +"..\data\unitexponent.hid"-"c:\data\others\unitexponent.hid" +"..\data\voldown.hid"-"c:\data\others\voldown.hid" +"..\data\volup.hid"-"c:\data\others\volup.hid" +"..\data\UsagePoC.hid"-"c:\data\others\UsagePoC.hid" + +"..\data\localdesignatorindex.hid"-"c:\data\others\localdesignatorindex.hid" +"..\data\localdesignatorminimum.hid"-"c:\data\others\localdesignatorminimum.hid" +"..\data\localdesignatormaximum.hid"-"c:\data\others\localdesignatormaximum.hid" + +"..\data\localstringindex.hid"-"c:\data\others\localstringindex.hid" +"..\data\localstringminimum.hid"-"c:\data\others\localstringminimum.hid" +"..\data\localstringmaximum.hid"-"c:\data\others\localstringmaximum.hid" + +"..\data\localdelimiter.hid"-"c:\data\others\localdelimiter.hid" +"..\data\localdelimiter_lonelydelimiter.hid"-"c:\data\others\localdelimiter_lonelydelimiter.hid" +"..\data\localdelimiter_nesteddelimiter.hid"-"c:\data\others\localdelimiter_nesteddelimiter.hid" + +"..\data\localusage.hid"-"c:\data\others\localusage.hid" +"..\data\localusageminimum.hid"-"c:\data\others\localusageminimum.hid" +"..\data\localusagemaximum.hid"-"c:\data\others\localusagemaximum.hid" + +"..\data\localitem_unknown.hid"-"c:\data\others\localitem_unknown.hid" + +"..\data\globalphysicalmin.hid"-"c:\data\others\globalphysicalmin.hid" +"..\data\globalphysicalmax.hid"-"c:\data\others\globalphysicalmax.hid" +"..\data\globalunit.hid"-"c:\data\others\globalunit.hid" +"..\data\globalunit_smallvalue.hid"-"c:\data\others\globalunit_smallvalue.hid" +"..\data\globalunitexponent.hid"-"c:\data\others\globalunitexponent.hid" +"..\data\globalunitexponent2.hid"-"c:\data\others\globalunitexponent2.hid" +"..\data\globalpush.hid"-"c:\data\others\globalpush.hid" +"..\data\globalpop.hid"-"c:\data\others\globalpop.hid" +"..\data\globalpop_withoutpush.hid"-"c:\data\others\globalpop_withoutpush.hid" +"..\data\globaitem_unknown.hid"-"c:\data\others\globaitem_unknown.hid" + +"..\data\mainoutputtag.hid"-"c:\data\others\mainoutputtag.hid" +"..\data\mainfeature.hid"-"c:\data\others\mainfeature.hid" + +"..\data\longitem.hid"-"c:\data\others\longitem.hid" +"..\data\handleitem_withindelimiter.hid"-"c:\data\others\handleitem_withindelimiter.hid" + +"..\data\mainitem_unknown.hid"-"c:\data\others\mainitem_unknown.hid" + +"..\data\checkusageminandmax.hid"-"c:\data\others\checkusageminandmax.hid" +"..\data\checkusageminandmax2.hid"-"c:\data\others\checkusageminandmax2.hid" +"..\data\checkusageminandmax3.hid"-"c:\data\others\checkusageminandmax3.hid" + +"..\data\checkdesignatorminandmax.hid"-"c:\data\others\checkdesignatorminandmax.hid" +"..\data\checkdesignatorminandmax2.hid"-"c:\data\others\checkdesignatorminandmax2.hid" +"..\data\checkdesignatorminandmax3.hid"-"c:\data\others\checkdesignatorminandmax3.hid" + +"..\data\checkstringminandmax.hid"-"c:\data\others\checkstringminandmax.hid" +"..\data\checkstringminandmax2.hid"-"c:\data\others\checkstringminandmax2.hid" +"..\data\checkstringminandmax3.hid"-"c:\data\others\checkstringminandmax3.hid" + +"..\data\checkmandatoryfieldexistence.hid"-"c:\data\others\checkmandatoryfieldexistence.hid" +"..\data\checkmandatoryfieldexistence2.hid"-"c:\data\others\checkmandatoryfieldexistence2.hid" +"..\data\checkmandatoryfieldexistence3.hid"-"c:\data\others\checkmandatoryfieldexistence3.hid" + +"..\data\checkforfielderrors.hid"-"c:\data\others\checkforfielderrors.hid" +"..\data\checkforfielderrors2.hid"-"c:\data\others\checkforfielderrors2.hid" + +"..\data\checklogicalminandmax.hid"-"c:\data\others\checklogicalminandmax.hid" + +"..\data\checkfieldbitneeded.hid"-"c:\data\others\checkfieldbitneeded.hid" + +"..\data\checkformainerrors.hid"-"c:\data\others\checkformainerrors.hid" +"..\data\checkformainerrors2.hid"-"c:\data\others\checkformainerrors2.hid" +"..\data\checkformainerrors3.hid"-"c:\data\others\checkformainerrors3.hid" + +"..\data\checkparseerrors.hid"-"c:\data\others\checkparseerrors.hid" +"..\data\checkparseerrors2.hid"-"c:\data\others\checkparseerrors2.hid" +"..\data\checkparseerrors3.hid"-"c:\data\others\checkparseerrors3.hid" + +"..\data\checkforcollectionerrors.hid"-"c:\data\others\checkforcollectionerrors.hid" + +; Embedded SIS +; None + +; End of Package body + +; PKG dependencies +; None + +; PKG capabilities +; None diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2008-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: Build file +* +*/ + + + +PRJ_PLATFORMS +DEFAULT + +PRJ_TESTEXPORTS + +PRJ_EXPORTS + +PRJ_TESTMMPFILES +GenericHidTest.mmp +GenericHidTest_exe.mmp +CHidDriverPlugin.mmp + + +PRJ_MMPFILES + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/build_sis_ats.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/build_sis_ats.bat Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,22 @@ +@rem +@rem Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: Test script config file +@rem +@rem + + +call bldmake bldfiles +call abld test build armv5 +call makesis GenericHidTest_ats.pkg +call signsis GenericHidTest_ats.sis GenericHidTest_ats.sisx rd.cer rd-key.pem diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/group/build_sis_phone.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/group/build_sis_phone.bat Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,27 @@ +@rem +@rem Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: Test script config file +@rem +@rem + +rd /q /s x:\epoc32\build +del GenericHidTest_phone.sisx + +call bldmake bldfiles +call abld test build armv5 udeb +call makesis GenericHidTest_phone.pkg +call signsis GenericHidTest_phone.sis GenericHidTest_phone.sisx rd.cer rd-key.pem + +del GenericHidTest_phone.sis +call pause \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/CHidDriverPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/CHidDriverPlugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,55 @@ +/* +* 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: +* +*/ + + +#ifndef REFERENCE_HIDDRIVER_IMPL_H +#define REFERENCE_HIDDRIVER_IMPL_H + +#include + +NONSHARABLE_CLASS(CHidDriverPlugin) : public CHidDriver + { + public: + + /** + * Two-phased constructor. + */ + static CHidDriverPlugin* NewL(MDriverAccess* aHid); + + TInt CanHandleReportL(CReportRoot* aReportDescriptor); + + TInt DataIn(CHidTransport::THidChannelType aChannel, + const TDesC8& aPayload); + + void Disconnected(TInt aReason); + void InitialiseL(TInt aConnectionId); + void StartL(TInt aConnectionId); + void Stop(); + void CommandResult(TInt aCmdAck); + TInt SupportedFieldCount(); + void SetInputHandlingReg(CHidInputDataHandlingReg* aHandlingReg); + +private: + CHidDriverPlugin(); + +private: // Data + + }; + +#endif // REFERENCE_HIDDRIVER_IMPL_H + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/GenericHidTest.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/GenericHidTest.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,377 @@ +/* +* Copyright (c) 2008-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: +* +*/ + + + + +#ifndef GENERICHIDTEST_H +#define GENERICHIDTEST_H + +// INCLUDES +#include +#include +#include +#include + +#include "hidparser.h" + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def +#define TEST_CLASS_VERSION_MAJOR 0 +#define TEST_CLASS_VERSION_MINOR 0 +#define TEST_CLASS_VERSION_BUILD 0 + +#ifdef STIF_LOG +#undef STIF_LOG +#endif + +#define STIF_LOG( s )\ + {\ + TBuf traceBuf;\ + traceBuf.Append( _L( "[STIF_LOG] " ) );\ + traceBuf.Append( _L( s ) );\ + iLog->Log( _L( s ) );\ + RDebug::Print( traceBuf );\ + } + +#define STIF_LOG1( s, v ) \ + {\ + TBuf traceBuf;\ + traceBuf.Append( _L( "[STIF_LOG] " ) );\ + traceBuf.Append( _L( s ) );\ + iLog->Log( _L( s ), v );\ + RDebug::Print( traceBuf, v );\ + } + +#define STIF_LOG2( s, v1, v2 ) \ + {\ + TBuf traceBuf;\ + traceBuf.Append( _L( "[STIF_LOG] " ) );\ + traceBuf.Append( _L( s ) );\ + iLog->Log( _L( s ), v1, v2 );\ + RDebug::Print( traceBuf, v1, v2 );\ + } + +#define STIF_LOG3( s, v1, v2, v3 ) \ + {\ + TBuf traceBuf;\ + traceBuf.Append( _L( "[STIF_LOG] " ) );\ + traceBuf.Append( _L( s ) );\ + iLog->Log( _L( s ), v1, v2, v3 );\ + RDebug::Print( traceBuf, v1, v2, v3 );\ + } + +// Logging path +//_LIT( KGenericHidTestLogPath, "\\logs\\testframework\\GenericHidTest\\" ); + +// Logging path for ATS - for phone builds comment this line +_LIT( KGenericHidTestLogPath, "e:\\testing\\stiflogs\\" ); + +// Log file +_LIT( KGenericHidTestLogFile, "GenericHidTest.txt" ); +_LIT( KGenericHidTestLogFileWithTitle, "GenericHidTest_[%S].txt" ); + +// FUNCTION PROTOTYPES +//?type ?function_name(?arg_list); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; +class CGenericHidTest; + +class CHidTestLogger; +class CtGenericHIDAPI; +//class CMediaControl; +class CDialClient; +class CAlarmControl; + +// DATA TYPES +//enum ?declaration + +enum TGenericHidTestResult + { + ETestCasePassed, + ETestCaseFailed + }; + +//typedef ?declaration +//extern ?data_type; + +// CLASS DECLARATION + +NONSHARABLE_CLASS( TGenericHidTestBlockParams ) + { + public: + TPtrC iTestBlockName; + + TPtrC iTestOption1; + TPtrC iTestOption2; + TPtrC iTestOption3; + + TInt iTestIntOption1; + TInt iTestIntOption2; + + TChar iTestCharOption1; + TChar iTestCharOption2; + }; + +/** +* CGenericHidTest test class for STIF Test Framework TestScripter. +* ?other_description_lines +* +* @lib ?library +* @since ?Series60_version +*/ +NONSHARABLE_CLASS( CGenericHidTest ) : public CScriptBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CGenericHidTest* NewL( CTestModuleIf& aTestModuleIf ); + + /** + * Destructor. + */ + virtual ~CGenericHidTest(); + + public: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + public: // Functions from base classes + + /** + * From CScriptBase Runs a script line. + * @since ?Series60_version + * @param aItem Script line containing method name and parameters + * @return Symbian OS error code + */ + virtual TInt RunMethodL( CStifItemParser& aItem ); + + protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + protected: // Functions from base classes + + /** + * From ?base_class ?member_description + */ + //?type ?member_function(); + + private: + + /** + * C++ default constructor. + */ + CGenericHidTest( CTestModuleIf& aTestModuleIf ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor if not deriving from CBase. + // ?classname( const ?classname& ); + // Prohibit assigment operator if not deriving from CBase. + // ?classname& operator=( const ?classname& ); + + /** + * Frees all resources allocated from test methods. + * @since ?Series60_version + */ + void Delete(); + + /** + * Test methods are listed below. + */ + + virtual TInt ExecuteApiTestBlock( CStifItemParser& aItem ); + virtual TInt ExecuteModuleTestBlock( CStifItemParser& aItem ); + virtual TInt ExecuteBranchTestBlock( CStifItemParser& aItem ); + + /** + * Method used to log version of test class + */ + void SendTestClassVersion(); + + //ADD NEW METHOD DEC HERE + //[TestMethods] - Do not remove + + void GetTestBlockParamsL( CStifItemParser& aItem ); + + void DoExecuteApiTestBlockL( CStifItemParser& aItem, TGenericHidTestResult& aTestResult ); + void DoExecuteModuleTestBlockL( CStifItemParser& aItem, TGenericHidTestResult& aTestResult ); + void DoExecuteBranchTestBlockL( CStifItemParser& aItem, TGenericHidTestResult& aTestResult ); + + void ExampleTestL( TPtrC aTestOption, TPtrC aTestSubOption, + TInt aTestIntOption, TInt aTestCharOption, TGenericHidTestResult& aTestResult ); + + virtual TInt ConnectL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt DisconnectL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt DataIn( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt WaitL( TPtrC aTestOption, TInt aTestIntOption, TGenericHidTestResult& aTestResult ); + virtual TInt CreateCallL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt AddAlarmL( TPtrC aTestOption, TInt aTestIntOption, TGenericHidTestResult& aTestResult ); + virtual TInt DeleteAlarm( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CountryCodeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt VendorIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ProductIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt SetProtocolL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt GetProtocoL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt GetReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt SetReportL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt DataOutL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult); + virtual TInt GetIdleL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt SetIdleL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt CommandResultL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportDescriptorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CreateReportGeneratorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt DeleteReportGeneratorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportGeneratorReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportGeneratorSetFieldL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt CreateReportTranslatorL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt CreateReportTranslator_FieldNullL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt CreateReportTranslator_NotArrayL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt CreateReportTranslator_FieldCountZeroL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt DeleteReportTranslatorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportTranslatorGetValueL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportTranslatorValueL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportTranslatorGetUsageIdL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportTranslatorUsageIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportTranslatorRawValueL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt ReportTranslatorCountL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + + virtual TInt CollectiontypeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionIsPhysicalL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionIsLogicalL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionIsReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionIsNamedArrayL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionIsUsageSwitchL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionIsUsageModifierL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt CollectionIsApplicationL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionUsagePageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionUsageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionCollectionCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionFieldCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionCollectionByIndexL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt CollectionFieldByIndexL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt ReportrootReportSizeBytes( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt FieldLogicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldPhysicalMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldPhysicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldUnitL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldUnitExponentL( TPtrC aTestOption, TGenericHidTestResult& aTestResult); + + virtual TInt FieldCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSizeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldOffsetL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldReportIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsInReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldDesignatorIndexL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldStringIndexL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldUsagePageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt FieldHasUsageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt FieldUsageArrayL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldUsageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldUsageCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldClearUsageListL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldLastUsageL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ); + + virtual TInt FieldAttributesL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldTypeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsVariableL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsArrayL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsConstantL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsDataL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetLogicalMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetLogicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetPhysicalMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetPhysicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetDesignatorMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetDesignatorMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetUsageMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetUsageMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetStringMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetStringMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt FieldSetLogicalRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetUsageRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetPhysicalRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetStringRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldSetDesignatorRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsInputL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + virtual TInt FieldIsOutputL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + virtual TInt FieldIsFeatureL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ); + + HBufC8* ConvertArray(const TPtrC& aFilename); + TUint ConvSingleItem(TBuf8<2>& singleItem); + + public: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + protected: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + private: // Data + TGenericHidTestBlockParams iTestBlockParams; + + CtGenericHIDAPI* iGenericHIDTest; + CDialClient* iDialClient; + CAlarmControl* iAlarmControl; + + CParser* iParser; + // Reserved pointer for future extension + //TAny* iReserved; + + public: // Friend classes + //?friend_class_declaration; + protected: // Friend classes + //?friend_class_declaration; + private: // Friend classes + //?friend_class_declaration; + + }; + +#endif // GENERICHIDTEST_H + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/alarmcontrol.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/alarmcontrol.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 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: Dialhandling class for hid test application +* +*/ + + +#ifndef C_ALARMCONTROL_H +#define C_ALARMCONTROL_H + +#include +#include +#include +#include +#include "GenericHidTest.h" + +// RDebug +#include + +NONSHARABLE_CLASS ( CAlarmControl ): public CBase +{ +public: + static CAlarmControl* NewL(CStifLogger* aLogger); + static CAlarmControl* NewLC(CStifLogger* aLogger); + + void CreateClockAlarm( TInt aTime ); + void DeleteAlarm(); +public: + + virtual ~CAlarmControl(); + +private: + CAlarmControl(CStifLogger* aLogger); + void ConstructL(); + + RASCliSession iAlarmServer; + TInt iAlarmID; + CStifLogger * iLog; +}; + +#endif /*ALARMCONTROL_H*/ diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/hidreports.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/hidreports.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2004-2007 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: HID field descriptor definition +* +*/ + +#ifndef __HIDREPORTS_H +#define __HIDREPORTS_H + + +#include +#include + +const TUint headsetconnnection[]={ + 0x95, 0x01, //Report count 1 + 0x05, 0x0b, //Usage page telephony + 0x09, 0x01, // Usage Phone + 0xa1, 0x02, // Collection (logical) + 0x05, 0x09, //Usage button + 0xc0 //End collection +}; + +#endif + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/tdialclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/tdialclient.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 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: Dialhandling class for hid test application +* +*/ + + +#ifndef TDIALCLIENT_H_ +#define TDIALCLIENT_H_ + +#include +#include + +NONSHARABLE_CLASS ( CDialClient ): public CActive + { + +public: + + static CDialClient* NewL(); + static CDialClient* NewLC(); + + void ConstructL(); + ~CDialClient(); + + void CreateCall(const TDesC& aNumber); + void HangUp(); + + +private: + void RunL(); + void DoCancel(); + +private: + CDialClient(); + + private: + CTelephony* iTelephony; + CTelephony::TCallId iCallId; + CTelephony::TCallParamsV1 iCallParams; + CTelephony::TCallParamsV1Pckg iCallParamsPckg; + CActiveSchedulerWait iSyncWaiter; + TBool iCallStarted; + }; + +#endif /*TDIALCLIENT_H_*/ diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/tgenerichidapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/tgenerichidapi.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,340 @@ +/* +* Copyright (c) 2004-2007 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: HID generic api test class +* +*/ + +#ifndef __TESTGEHERICHIDAPI_H +#define __TESTGEHERICHIDAPI_H + + +#include +#include +#include +#include "hidreportgenerator.h" +#include "hidtranslate.h" + +#include "CHidDriverPlugin.h" +#include "hiduids.h" + + +/** + * HID generic api test class + * + * @lib + * @since S60 v.3.2 + */ +NONSHARABLE_CLASS(CtGenericHIDAPI): public CBase, public MTransportLayer + { + public: + static CtGenericHIDAPI* NewL(); + static CtGenericHIDAPI* NewLC(); + + /** + * Destructor. + */ + virtual ~CtGenericHIDAPI(); + + public: + + /** + * Connect + * + * @since S60 v.3.2 + * @param aConnectionId connection id + * @param aDescriptor report descriptor + * @return None + */ + void ConnectL(TInt aConnectionId, const TDesC8& aDescriptor); + + /** + * Disconnect + * + * @since S60 v.3.2 + * @param aConnectionId a connection id + * @return None + */ + void DisconnectL(TInt aConnectionId); + + /** + * DataIn + * + * @since S60 v.3.2 + * @param aConnectionId connection id + * @param aDescriptor report descriptor + * @return error code + */ + TInt DataInL(TInt aConnectionId, const TDesC8& aDescriptor); + + TInt RunCountryCodeL(); + + TInt RunVendorIdL(); + + TInt RunProductIdL( ); + + TInt RunSetProtocolL(); + + TInt RunGetProtocoL( ); + + TInt RunGetReportL( ); + + TInt RunSetReportL(const TDesC8& aDescriptor ); + + TInt RunDataOutL( const TDesC8& aDescriptor ); + + TInt GetGetIdleL( ); + + TInt RunSetIdleL( ); + + TInt GetCommandResultL( ); + + TInt GetReportDescriptorL(); + + TInt CreateReportGeneratorL(); + + TInt DeleteReportGeneratorL(); + + TInt ReportGeneratorReport(); + + TInt ReportGeneratorSetFieldL( TBool aIsArray, TBool aOutOfRange, TBool aFieldNull, TBool aFieldCountZero, TBool aExistingUsageId, TBool aBadIndex ); + + TInt CreateReportTranslatorL( const TDesC8& aDescriptor, TBool aIsArray, TBool aFieldNull, TBool aFieldCountZero); + + //TInt CreateReportTranslator_FieldNullL( const TDesC8& aDescriptor ); + + TInt DeleteReportTranslatorL( ); + + TInt ReportTranslatorGetValueL( ); + + TInt ReportTranslatorValueL( ); + + TInt ReportTranslatorGetUsageIdL( TBool aBadControlIndex ); + + TInt ReportTranslatorUsageIdL( ); + + TInt ReportTranslatorRawValueL( ); + + TInt ReportTranslatorCountL( ); + + TInt CollectiontypeL( ); + TInt CollectionIsPhysicalL( ); + TInt CollectionIsLogicalL( ); + TInt CollectionIsReportL( ); + TInt CollectionIsNamedArrayL( ); + TInt CollectionIsUsageSwitchL( ); + TInt CollectionIsUsageModifierL( ); + + TInt CollectionIsApplicationL( ); + TInt CollectionUsagePageL( ); + TInt CollectionUsageL( ); + TInt CollectionCollectionCountL( ); + TInt CollectionFieldCountL( ); + TInt CollectionCollectionByIndexL( TBool aPresent ); + TInt CollectionFieldByIndexL( ); + + TInt ReportrootReportSizeBytes( ); + + + TInt FieldLogicalMaxL( ); + TInt FieldPhysicalMinL( ); + TInt FieldPhysicalMaxL( ); + TInt FieldUnitL( ); + TInt FieldUnitExponentL( ); + TInt FieldCountL( ); + TInt FieldSizeL( ); + TInt FieldOffsetL( TBool setReport ); + TInt FieldReportIdL( ); + TInt FieldIsInReportL( ); + TInt FieldUsagePageL( ); + TInt FieldDesignatorIndexL( ); + TInt FieldStringIndexL( ); + TInt FieldHasUsageL( ); + TInt FieldUsageArrayL( ); + TInt FieldUsageL( ); + TInt FieldUsageCountL( ); + TInt FieldClearUsageListL( ); + TInt FieldLastUsageL( TBool empty ); + TInt FieldAttributesL( ); + TInt FieldTypeL( ); + TInt FieldIsArrayL( ); + TInt FieldIsVariableL( ); + TInt FieldIsConstantL( ); + TInt FieldIsDataL( ); + TInt FieldSetLogicalMinL(); + TInt FieldSetLogicalMaxL( ); + TInt FieldSetPhysicalMinL( ); + TInt FieldSetPhysicalMaxL( ); + TInt FieldSetDesignatorMinL( ); + TInt FieldSetDesignatorMaxL( ); + TInt FieldSetUsageMinL( ); + TInt FieldSetUsageMaxL( ); + TInt FieldSetStringMinL( ); + TInt FieldSetStringMaxL( ); + TInt FieldSetLogicalRangeL( ); + TInt FieldSetUsageRangeL( ); + TInt FieldSetPhysicalRangeL( ); + TInt FieldSetStringRangeL( ); + TInt FieldSetDesignatorRangeL( ); + TInt FieldIsInputL( ); + TInt FieldIsOutputL( ); + TInt FieldIsFeatureL( ); + + + +private: //from MTransportLayer + + /** + * Request for the country code of the given device. + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @return country code. + */ + TUint CountryCodeL(TInt aConnID); + + /** + * Request for the vendor identifier for the given device. + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @return vendor id. + */ + TUint VendorIdL(TInt aConnID); + + /** + * Request for the product identifier for the given device. + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @return product id. + */ + TUint ProductIdL(TInt aConnID); + + /** + * Request for the current device report protocol. The protocol will be + * received as a control report via the CHidTransport::DataIn function + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param aInterface The interface we want to get the protocol from + * @return None. + */ + void GetProtocolL(TInt aConnID, TUint16 aInterface); + + /** + * Request to put the device in the specified protocol + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param aValue The requested protocol for the device (boot or report) + * @param aInterface The interface we want to set the protocol for + * @return None. + */ + void SetProtocolL(TInt aConnID, TUint16 aValue, + TUint16 aInterface); + + /** + * Request for a device report. The data will be received as a control report + * via the CHidTransport::DataIn function + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param aReportType The type of report (input/output/feature) requested + * @param aReportID The specific report required + * @param aInterface The interface we want the report from + * @param aLength The expected length of the report buffer + * @return None. + */ + void GetReportL(TInt aConnID, TUint8 aReportType,TUint8 aReportID, + TUint16 aInterface, TUint16 aLength); + + /** + * Request to send a report to a device. The response will be reported via the + * CHidTransport::CommandResult function + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param aReportType The type of report (input/output/feature) requested + * @param aReportID The specific report required to set + * @param aInterface The interface we want to send the report to + * @param aReport The report payload to be sent to the device + * @return None. + */ + void SetReportL(TInt aConnID, TUint8 aReportType,TUint8 aReportID, + TUint16 aInterface, const TDesC8& aReport); + + /** + * Request to send data to a device. There are no responses to this report from device. + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param @param aReportID The specific report required + * @param aInterface The interface we want to send the report to + * @param aReport The report payload to be sent to the device + * @return None. + */ + void DataOutL(TInt aConnID, TUint8 aReportID, + TUint16 aInterface, const TDesC8& aReport); + + /** + * Request for the current idle rate of a report from the device. The response + * will be recevied via the CHidTransport::DataIn function + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param aReportID The specific report to be queried + * @param aInterface The interface we want to query for idle rate + * @return None. + */ + void GetIdleL(TInt aConnID, TUint8 aReportID, + TUint16 aInterface); + + /** + * Request to set the current idle rate for a report on the device. + * The response will be received via the CHidTransport::CommandResult function + * + * @since S60 v3.2 + * @param aConnID The device identifier + * @param aReportID The specific report to be queried + * @param aDuration The time period between idle reports (4ms per bit. An + * interval of 0 disables idle reports so that Interrupt reports are only ever + * received when the reported data has changed + * @param aReportID The specific report to be queried + * @param aInterface The interface we want to query for idle rate + * @return None. + */ + void SetIdleL(TInt aConnID, TUint8 aDuration, TUint8 aReportID, + TUint16 aInterface); + + +private: + CtGenericHIDAPI(); + void ConstructL(); + + const CField* CreateConstCFieldL(); + CField* CreateCFieldL(); + +private: + CGenericHid* iGenHID; + MDriverAccess* iDriverAcces; + CReportGenerator* iReportGenerator; + TReportTranslator* iTranslator; + + CHidDriver* iHidDriver; + + RPointerArray iFieldList; + }; +#endif + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/inc/timer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/inc/timer.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2004-2007 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: Hid timeout timer +* +*/ + +#ifndef C_TIMER_H +#define C_TIMER_H + +#include + + +/** + * HID headset driver class + * + * This class will notify an object after a specified timeout. + * + * @since S60 v3.2 + */ +NONSHARABLE_CLASS ( CWaitTimer ) : public CTimer + { +public: + /** + * Two-phased constructor. + * @param aPriority priority to use for this timer + * @param aTimeOutNotify object to notify of timeout event + */ + static CWaitTimer* NewL( TTimeIntervalMicroSeconds32 aTimeOutTime ); + + /** + * Two-phased constructor. + * @param aPriority priority to use for this timer + * @param aTimeOutNotify object to notify of timeout event + */ + static CWaitTimer* NewLC(TTimeIntervalMicroSeconds32 aTimeOutTime ); + + /** + * Destructor + */ + ~CWaitTimer(); + +protected: + + /** + * From CTimer + * Invoked when a timeout occurs + * + * @since S60 v3.2 + * @return None. + */ + virtual void RunL(); + +private: + CWaitTimer(); + void ConstructL( TTimeIntervalMicroSeconds32 aTimeOutTime ); + +private: // Member variables + CActiveSchedulerWait iSyncWaiter; + + }; +#endif // C_TIMER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/init/GenericHidTest_ats.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/init/GenericHidTest_ats.ini Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,235 @@ +# +# Copyright (c) 2008-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: +# +# + +# +# This is STIF initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# + XML, Test report will be xml type, for example 'TestReport.xml'. +# Note, that xml format is available only when output is set to FILE. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. +# - Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation +# DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02 +# + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', + 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= e:\testing\logs\ +TestReportFileName= GenericHidTest_TestReport + +TestReportFormat= TXT # Possible values: TXT, HTML or XML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting + +DisableMeasurement= stifmeasurementdisablenone # Possible values are: + # 'stifmeasurementdisablenone', 'stifmeasurementdisableall' + # 'stifmeasurementplugin01', 'stifmeasurementplugin02', + # 'stifmeasurementplugin03', 'stifmeasurementplugin04', + # 'stifmeasurementplugin05' or 'stifbappeaprofiler' + +Timeout= 0 # Default timeout value for each test case. In milliseconds +UITestingSupport= YES # Possible values: YES or NO +#SeparateProcesses= YES # Possible values: YES or NO (default: NO) +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= GenericHidTestGenericHidTestGenericHidTest +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +[New_Module] +ModuleName= testscripter +TestCaseFile= e:\testing\conf\GenericHidTest.cfg +[End_Module] + + +# Load testmoduleGenericHidTest, optionally with initialization file and/or test case files +#[New_Module] +#ModuleName= testmodulexxx + +#TestModuleGenericHidTest used initialization file +#IniFile= c:\testframework\init.txt + +#TestModuleGenericHidTest used configuration file(s) +#TestCaseFile= c:\testframework\testcases1.cfg +#TestCaseFile= c:\testframework\testcases2.cfg +#TestCaseFile= c:\testframework\manualtestcases.cfg + +#[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIF logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# +# - Will write log file in unicode format. +# + YES, Log file will be written in unicode format +# + NO, Log will be written as normal, not unicode, file. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' +#NOTE: TestEngine and TestServer logging settings cannot change here + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +#FileUnicode= YES # Possible values: YES or NO +#AddTestCaseTitle= YES # Possible values: YES or NO +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set filters to be used by ConsoleUI. +# If you want to use filter with ConsoleUI, simply remove comments +# from section below and provide valid filter entries. +# Each filter line has to start with "filter= " keyword. +# Filter can contain special wildcard characters: +# * which stands for none or any literal; +# ? which stands for single character. +# Filters are not case-sensitive. + +#[Filters] +#filter= *math* +#filter= *radio* +#[End_Filters] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/init/GenericHidTest_phone.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/init/GenericHidTest_phone.ini Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,235 @@ +# +# Copyright (c) 2008-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: +# +# + +# +# This is STIF initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# + XML, Test report will be xml type, for example 'TestReport.xml'. +# Note, that xml format is available only when output is set to FILE. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. +# - Sets a device reset module's dll name(Reboot). +# + If Nokia specific reset module is not available or it is not correct one +# StifHWResetStub module may use as a template for user specific reset +# module. +# - Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation +# DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02 +# + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: 'Empty', 'Summary', 'Environment', + 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= c:\logs\testframework\GenericHidTest\ +TestReportFileName= testreport + +TestReportFormat= TXT # Possible values: TXT, HTML or XML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting + +DisableMeasurement= stifmeasurementdisablenone # Possible values are: + # 'stifmeasurementdisablenone', 'stifmeasurementdisableall' + # 'stifmeasurementplugin01', 'stifmeasurementplugin02', + # 'stifmeasurementplugin03', 'stifmeasurementplugin04', + # 'stifmeasurementplugin05' or 'stifbappeaprofiler' + +Timeout= 0 # Default timeout value for each test case. In milliseconds +UITestingSupport= YES # Possible values: YES or NO +#SeparateProcesses= YES # Possible values: YES or NO (default: NO) +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= GenericHidTestGenericHidTestGenericHidTest +# Modules might have initialisation file, specified as +# IniFile= c:\testframework\YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= c:\testframework\NormalCases.txt +# TestCaseFile= c:\testframework\SmokeCases.txt +# TestCaseFile= c:\testframework\ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +[New_Module] +ModuleName= testscripter +TestCaseFile= c:\testframework\GenericHidTest.cfg +[End_Module] + + +# Load testmoduleGenericHidTest, optionally with initialization file and/or test case files +#[New_Module] +#ModuleName= testmodulexxx + +#TestModuleGenericHidTest used initialization file +#IniFile= c:\testframework\init.txt + +#TestModuleGenericHidTest used configuration file(s) +#TestCaseFile= c:\testframework\testcases1.cfg +#TestCaseFile= c:\testframework\testcases2.cfg +#TestCaseFile= c:\testframework\manualtestcases.cfg + +#[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIF logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# +# - Will write log file in unicode format. +# + YES, Log file will be written in unicode format +# + NO, Log will be written as normal, not unicode, file. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' +#NOTE: TestEngine and TestServer logging settings cannot change here + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +#FileUnicode= YES # Possible values: YES or NO +#AddTestCaseTitle= YES # Possible values: YES or NO +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set filters to be used by ConsoleUI. +# If you want to use filter with ConsoleUI, simply remove comments +# from section below and provide valid filter entries. +# Each filter line has to start with "filter= " keyword. +# Filter can contain special wildcard characters: +# * which stands for none or any literal; +# ? which stands for single character. +# Filters are not case-sensitive. + +#[Filters] +#filter= *math* +#filter= *radio* +#[End_Filters] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/CHidDriverPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/CHidDriverPlugin.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2007 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 "CHidDriverPlugin.h" + +CHidDriverPlugin* CHidDriverPlugin::NewL(MDriverAccess* /*aHid*/) + { + CHidDriverPlugin* self = new (ELeave) CHidDriverPlugin(); + return self; + } + + +CHidDriverPlugin::CHidDriverPlugin() : CHidDriver() + { + } + +TInt CHidDriverPlugin::CanHandleReportL(CReportRoot* aReportDescriptor) + { + return KErrNone; + } + +TInt CHidDriverPlugin::DataIn(CHidTransport::THidChannelType aChannel, + const TDesC8& aPayload) + { + return KErrNone; + } + +void CHidDriverPlugin::Disconnected(TInt aReason) + { + + } +void CHidDriverPlugin::InitialiseL(TInt aConnectionId) + { + + } +void CHidDriverPlugin::StartL(TInt aConnectionId) + { + + } +void CHidDriverPlugin::Stop() + { + + } +void CHidDriverPlugin::CommandResult(TInt aCmdAck) + { + + } +TInt CHidDriverPlugin::SupportedFieldCount() + { + return KErrNone; + } +void CHidDriverPlugin::SetInputHandlingReg(CHidInputDataHandlingReg* aHandlingReg) + { + ///////todo!! + aHandlingReg->AddHandledEvent(1,1); + TBool allowed = aHandlingReg->AllowedToHandleEvent(1,1); + if(allowed == EFalse) + { + //User::Leave(1); + } + allowed = aHandlingReg->AllowedToHandleEvent(2,2); + if(allowed != EFalse) + { + //User::Leave(1); + } + + } + + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/CHidDriverPluginProxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/CHidDriverPluginProxy.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2007 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: +* +*/ + + +#ifndef REFERENCE_HIDDRIVER_H +#define REFERENCE_HIDDRIVER_H + +#include +#include +#include "CHidDriverPlugin.h" + +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(0xE000B187, CHidDriverPlugin::NewL), + }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + + return ImplementationTable; + } + +#endif //REFERENCE_HIDDRIVER_H + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/GenericHidTest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/GenericHidTest.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,210 @@ +/* +* Copyright (c) 2008-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 FILES +#include +#include "GenericHidTest.h" +#include + +//#include "testlogger.h" + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CGenericHidTest +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CGenericHidTest::CGenericHidTest( + CTestModuleIf& aTestModuleIf ): + CScriptBase( aTestModuleIf ) + { + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CGenericHidTest::ConstructL() + { + //iTestLogger = CHidTestLogger::NewL( &TestModuleIf() ); + + //Read logger settings to check whether test case name is to be + //appended to log file name. + RSettingServer settingServer; + TInt ret = settingServer.Connect(); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Struct to StifLogger settigs. + TLoggerSettings loggerSettings; + // Parse StifLogger defaults from STIF initialization file. + ret = settingServer.GetLoggerSettings(loggerSettings); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Close Setting server session + settingServer.Close(); + + TFileName logFileName; + + if(loggerSettings.iAddTestCaseTitle) + { + TName title; + TestModuleIf().GetTestCaseTitleL(title); + logFileName.Format(KGenericHidTestLogFileWithTitle, &title); + } + else + { + logFileName.Copy(KGenericHidTestLogFile); + } + + iLog = CStifLogger::NewL( KGenericHidTestLogPath, + logFileName, + CStifLogger::ETxt, + CStifLogger::EFile, + EFalse ); + + SendTestClassVersion(); + + iParser = CParser::NewL(); + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CGenericHidTest* CGenericHidTest::NewL( + CTestModuleIf& aTestModuleIf ) + { + CGenericHidTest* self = new (ELeave) CGenericHidTest( aTestModuleIf ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +// Destructor +CGenericHidTest::~CGenericHidTest() + { + + // Delete resources allocated from test methods + Delete(); + + // Delete logger + delete iLog; + + delete iParser; + + } + +//----------------------------------------------------------------------------- +// CGenericHidTest::SendTestClassVersion +// Method used to send version of test class +//----------------------------------------------------------------------------- +// +void CGenericHidTest::SendTestClassVersion() + { + TVersion moduleVersion; + moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR; + moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR; + moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD; + + TFileName moduleName; + moduleName = _L("GenericHidTest.dll"); + + TBool newVersionOfMethod = ETrue; + TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point. +// Returns: CScriptBase: New CScriptBase derived object +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* LibEntryL( + CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework + { + + return ( CScriptBase* ) CGenericHidTest::NewL( aTestModuleIf ); + + } + + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/GenericHidTestBlocks.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/GenericHidTestBlocks.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,2839 @@ +/* +* Copyright (c) 2008-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 FILES] - do not remove +#include +#include +#include +#include "GenericHidTest.h" + +#include "hidreports.h" +#include "tGenericHIDAPI.h" +#include "tdialclient.h" +#include "alarmcontrol.h" +#include "timer.h" + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CGenericHidTest::Delete +// Delete here all resources allocated and opened from test methods. +// Called from destructor. +// ----------------------------------------------------------------------------- +// +void CGenericHidTest::Delete() + { + if ( iGenericHIDTest ) + { + delete iGenericHIDTest; + iGenericHIDTest = NULL; + } + + if ( iDialClient ) + { + delete iDialClient; + iDialClient = NULL; + } + + if ( iAlarmControl ) + { + delete iAlarmControl; + iAlarmControl = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::RunMethodL +// Run specified method. Contains also table of test mothods and their names. +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::RunMethodL( + CStifItemParser& aItem ) + { + + static TStifFunctionInfo const KFunctions[] = + { + //ADD NEW ENTRY HERE + // [test cases entries] - Do not remove + ENTRY( "ExecuteApiTestBlock", CGenericHidTest::ExecuteApiTestBlock ), + ENTRY( "ExecuteModuleTestBlock", CGenericHidTest::ExecuteModuleTestBlock ), + ENTRY( "ExecuteBranchTestBlock", CGenericHidTest::ExecuteBranchTestBlock ), + }; + + const TInt count = sizeof( KFunctions ) / + sizeof( TStifFunctionInfo ); + + return RunInternalL( KFunctions, count, aItem ); + + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::GetTestBlockParamsL +// ----------------------------------------------------------------------------- + +void CGenericHidTest::GetTestBlockParamsL( CStifItemParser& aItem ) + { + STIF_LOG( ">>> GetTestBlockParamsL" ); + + // Add new test block branches below, get all required test parameters + if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + User::LeaveIfError( aItem.GetNextInt( iTestBlockParams.iTestIntOption1 ) ); + User::LeaveIfError( aItem.GetNextChar( iTestBlockParams.iTestCharOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Connect" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Disconnect" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DataIn" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Wait" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextInt( iTestBlockParams.iTestIntOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateCall" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "AddAlarm" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextInt( iTestBlockParams.iTestIntOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DeleteAlarm" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CountryCode" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "VendorId" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ProductId" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "SetProtocol" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "GetProtocol" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "GetReport" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "SetReport" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DataOut" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "GetIdle" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "SetIdle" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CommandResult" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportDescriptor" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportGenerator" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DeleteReportGenerator" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportGeneratorReport" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportGeneratorSetField" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator_FieldNull" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator_NotArray" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator_FieldCountZero" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DeleteReportTranslator" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorGetValue" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorValue" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorGetUsageId" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorUsageId" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorRawValue" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorCount" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Collectiontype" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsPhysical" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsLogical" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsReport" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsNamedArray" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsUsageSwitch" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsUsageModifier" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsApplication" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionUsagePage" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionUsage" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionCollectionCount" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionFieldCount" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionCollectionByIndex" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionFieldByIndex" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportrootReportSizeBytes" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldLogicalMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldPhysicalMin" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldPhysicalMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUnit" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUnitExponent" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldCount" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSize" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldOffset" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldReportId" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsInReport" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldDesignatorIndex" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldStringIndex" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsagePage" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldHasUsage" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsageArray" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsage" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsageCount" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldClearUsageList" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldLastUsage" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldAttributes" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldType" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsVariable" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsArray" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsConstant" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsData" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetLogicalMin" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetLogicalMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetPhysicalMin" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetPhysicalMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetDesignatorMin" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetDesignatorMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetUsageMin" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetUsageMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetStringMin" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetStringMax" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetLogicalRange" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetUsageRange" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetPhysicalRange" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetStringRange" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetDesignatorRange" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsInput" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsOutput" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsFeature" ) ) ) + { + User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); + } + else + { + STIF_LOG( "GetTestBlockParamsL, Test type: not found" ); + User::Leave( KErrNotFound ); + } + STIF_LOG( "<<< GetTestBlockParams" ); + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ExecuteApiTestBlock +// ----------------------------------------------------------------------------- + +TInt CGenericHidTest::ExecuteApiTestBlock( CStifItemParser& aItem ) + { + STIF_LOG( ">>>ExecuteApiTestBlock" ); + + TInt res; + TGenericHidTestResult testResult; + + TRAP( res, DoExecuteApiTestBlockL( aItem, testResult ) ); + if ( res != KErrNone ) + { + STIF_LOG1( "DoExecuteApiTestBlockL error: %d", res ); + return res; + } + + STIF_ASSERT_EQUALS( ETestCasePassed, testResult ); + STIF_LOG( "Test case passed" ); + STIF_LOG( "<<>>DoExecuteApiTestBlock" ); + + User::LeaveIfError( aItem.GetString( _L( "ExecuteApiTestBlock" ), iTestBlockParams.iTestBlockName ) ); + STIF_LOG1( "Api test type: %S", &iTestBlockParams.iTestBlockName ); + + GetTestBlockParamsL( aItem ); + + // Add new API test block branches with optional test parameters here + if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) ) + { + ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, + iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult ); + } + else + { + STIF_LOG( "Test type: not found" ); + User::Leave( KErrNotFound ); + } + + STIF_LOG( "<<>>ExecuteModuleTestBlock" ); + + TInt res; + TGenericHidTestResult testResult; + + TRAP( res, DoExecuteModuleTestBlockL( aItem, testResult ) ); + if ( res != KErrNone ) + { + STIF_LOG1( "DoExecuteModuleTestBlockL error: %d", res ); + return res; + } + + STIF_ASSERT_EQUALS( ETestCasePassed, testResult ); + STIF_LOG( "[STIF_LOG] Test case passed" ); + STIF_LOG( "[STIF_LOG] <<>>DoExecuteModuleTestBlockL" ); + + User::LeaveIfError( aItem.GetString( _L( "ExecuteModuleTestBlock" ), iTestBlockParams.iTestBlockName ) ); + STIF_LOG1( "Module test type: %S", &iTestBlockParams.iTestBlockName ); + + GetTestBlockParamsL( aItem ); + + // Add new module test block branches with optional test parameters here + if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) ) + { + ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, + iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult ); + } + else + { + STIF_LOG( "Test type: not found" ); + User::Leave( KErrNotFound ); + } + + STIF_LOG( "[STIF_LOG] <<>>ExecuteBranchTestBlock" ); + + TInt res; + TGenericHidTestResult testResult = ETestCaseFailed; + + TRAP( res, DoExecuteBranchTestBlockL( aItem, testResult ) ); + if ( res != KErrNone ) + { + STIF_LOG1( "DoExecuteBranchTestBlockL error: %d", res ); + return res; + } + + STIF_ASSERT_EQUALS( ETestCasePassed, testResult ); + STIF_LOG( "[STIF_LOG] Test case passed" ); + STIF_LOG( "[STIF_LOG] <<>>DoExecuteBranchTestBlockL" ); + + User::LeaveIfError( aItem.GetString( _L( "ExecuteBranchTestBlock" ), iTestBlockParams.iTestBlockName ) ); + STIF_LOG1( "Branch test type: %S", &iTestBlockParams.iTestBlockName ); + + GetTestBlockParamsL( aItem ); + + // Add new branch test block branches with optional test parameters here + if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) ) + { + ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, + iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Connect" ) ) ) + { + ConnectL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Disconnect" ) ) ) + { + DisconnectL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DataIn" ) ) ) + { + DataIn( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Wait" ) ) ) + { + WaitL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestIntOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateCall" ) ) ) + { + CreateCallL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "AddAlarm" ) ) ) + { + AddAlarmL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestIntOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DeleteAlarm" ) ) ) + { + DeleteAlarm( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CountryCode" ) ) ) + { + CountryCodeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "VendorId" ) ) ) + { + VendorIdL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ProductId" ) ) ) + { + ProductIdL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "SetProtocol" ) ) ) + { + SetProtocolL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "GetProtocol" ) ) ) + { + GetProtocoL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "GetReport" ) ) ) + { + GetReportL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "SetReport" ) ) ) + { + SetReportL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DataOut" ) ) ) + { + DataOutL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "GetIdle" ) ) ) + { + GetIdleL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "SetIdle" ) ) ) + { + SetIdleL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CommandResult" ) ) ) + { + CommandResultL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportDescriptor" ) ) ) + { + ReportDescriptorL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportGenerator" ) ) ) + { + CreateReportGeneratorL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DeleteReportGenerator" ) ) ) + { + DeleteReportGeneratorL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportGeneratorReport" ) ) ) + { + ReportGeneratorReportL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportGeneratorSetField" ) ) ) + { + ReportGeneratorSetFieldL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator" ) ) ) + { + CreateReportTranslatorL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator_FieldNull" ) ) ) + { + CreateReportTranslator_FieldNullL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator_NotArray" ) ) ) + { + CreateReportTranslator_NotArrayL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CreateReportTranslator_FieldCountZero" ) ) ) + { + CreateReportTranslator_FieldCountZeroL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "DeleteReportTranslator" ) ) ) + { + DeleteReportTranslatorL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorGetValue" ) ) ) + { + ReportTranslatorGetValueL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorValue" ) ) ) + { + ReportTranslatorValueL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorGetUsageId" ) ) ) + { + ReportTranslatorGetUsageIdL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorUsageId" ) ) ) + { + ReportTranslatorUsageIdL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorRawValue" ) ) ) + { + ReportTranslatorRawValueL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportTranslatorCount" ) ) ) + { + ReportTranslatorCountL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "Collectiontype" ) ) ) + { + CollectiontypeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsPhysical" ) ) ) + { + CollectionIsPhysicalL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsLogical" ) ) ) + { + CollectionIsLogicalL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsReport" ) ) ) + { + CollectionIsReportL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsNamedArray" ) ) ) + { + CollectionIsNamedArrayL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsUsageSwitch" ) ) ) + { + CollectionIsUsageSwitchL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsUsageModifier" ) ) ) + { + CollectionIsUsageModifierL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionIsApplication" ) ) ) + { + CollectionIsApplicationL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionUsagePage" ) ) ) + { + CollectionUsagePageL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionUsage" ) ) ) + { + CollectionUsageL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionCollectionCount" ) ) ) + { + CollectionFieldCountL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionFieldCount" ) ) ) + { + CollectionFieldCountL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionCollectionByIndex" ) ) ) + { + CollectionCollectionByIndexL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CollectionFieldByIndex" ) ) ) + { + CollectionFieldByIndexL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ReportrootReportSizeBytes" ) ) ) + { + ReportrootReportSizeBytes( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldLogicalMax" ) ) ) + { + FieldLogicalMaxL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldPhysicalMin" ) ) ) + { + FieldPhysicalMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldPhysicalMax" ) ) ) + { + FieldPhysicalMaxL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUnit" ) ) ) + { + FieldUnitL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUnitExponent" ) ) ) + { + FieldUnitExponentL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldCount" ) ) ) + { + FieldCountL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSize" ) ) ) + { + FieldSizeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldOffset" ) ) ) + { + FieldOffsetL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldReportId" ) ) ) + { + FieldReportIdL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsInReport" ) ) ) + { + FieldIsInReportL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldDesignatorIndex" ) ) ) + { + FieldDesignatorIndexL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldStringIndex" ) ) ) + { + FieldStringIndexL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsagePage" ) ) ) + { + FieldUsagePageL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldHasUsage" ) ) ) + { + FieldHasUsageL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsageArray" ) ) ) + { + FieldUsageArrayL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsage" ) ) ) + { + FieldUsageL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldUsageCount" ) ) ) + { + FieldUsageCountL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldClearUsageList" ) ) ) + { + FieldClearUsageListL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldLastUsage" ) ) ) + { + FieldLastUsageL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldAttributes" ) ) ) + { + FieldAttributesL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldType" ) ) ) + { + FieldTypeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsVariable" ) ) ) + { + FieldIsVariableL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsArray" ) ) ) + { + FieldIsArrayL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsConstant" ) ) ) + { + FieldIsConstantL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsData" ) ) ) + { + FieldIsDataL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetLogicalMin" ) ) ) + { + FieldSetLogicalMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetLogicalMax" ) ) ) + { + FieldSetPhysicalMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetPhysicalMin" ) ) ) + { + FieldSetPhysicalMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetPhysicalMax" ) ) ) + { + FieldSetPhysicalMaxL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetDesignatorMin" ) ) ) + { + FieldSetDesignatorMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetDesignatorMax" ) ) ) + { + FieldSetUsageMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetUsageMin" ) ) ) + { + FieldSetUsageMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetUsageMax" ) ) ) + { + FieldSetUsageMaxL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetStringMin" ) ) ) + { + FieldSetStringMinL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetStringMax" ) ) ) + { + FieldSetStringMaxL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetLogicalRange" ) ) ) + { + FieldSetLogicalRangeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetUsageRange" ) ) ) + { + FieldSetUsageRangeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetPhysicalRange" ) ) ) + { + FieldSetPhysicalRangeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetStringRange" ) ) ) + { + FieldSetStringRangeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldSetDesignatorRange" ) ) ) + { + FieldSetDesignatorRangeL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsInput" ) ) ) + { + FieldIsInputL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsOutput" ) ) ) + { + FieldIsOutputL( iTestBlockParams.iTestOption1, aTestResult ); + } + else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FieldIsFeature" ) ) ) + { + FieldIsFeatureL( iTestBlockParams.iTestOption1, aTestResult ); + } + else + { + STIF_LOG( "DoExecuteBranchTestBlockL; Test type: not found" ); + User::Leave( KErrNotFound ); + } + + STIF_LOG( "[STIF_LOG] <<>>ExampleTest" ); + + if ( !aTestOption.Compare( _L( "API" ) ) ) + { + STIF_LOG1( "Api test option: %S", &aTestOption ); + STIF_LOG1( "Api test sub-option: %S", &aTestSubOption ); + STIF_LOG1( "Api test int option: %d", aTestIntOption ); + STIF_LOG1( "Api test char option: %c", aTestCharOption ); + } + else if ( !aTestOption.Compare( _L( "MODULE" ) ) ) + { + STIF_LOG1( "Module test option: %S", &aTestOption ); + STIF_LOG1( "Module test sub-option: %S", &aTestSubOption ); + STIF_LOG1( "Module test int option: %d", aTestIntOption ); + STIF_LOG1( "Module test char option: %c", aTestCharOption ); + } + else if ( !aTestOption.Compare( _L( "BRANCH" ) ) ) + { + STIF_LOG1( "Branch test option: %S", &aTestOption ); + STIF_LOG1( "Branch test sub-option: %S", &aTestSubOption ); + STIF_LOG1( "Branch test int option: %d", aTestIntOption ); + STIF_LOG1( "Branch test char option: %c", aTestCharOption ); + } + else + { + STIF_LOG( "Invalid test parameter" ); + User::Leave( KErrNotFound ); + } + + aTestResult = ETestCasePassed; + + STIF_LOG( "<<ConnectL(0,*report); + CleanupStack::PopAndDestroy(); + + STIF_LOG( "Connect passed" ); + + aTestResult = ETestCasePassed; + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::DisconnectL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::DisconnectL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->DisconnectL(0); + delete iGenericHIDTest; + iGenericHIDTest = NULL; + + STIF_LOG( "Disconnect passed" ); + + aTestResult = ETestCasePassed; + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::DataIn +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::DataIn( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt retVal = KErrNone; + HBufC8* report = ConvertArray(aTestSubOption); + TInt firstByte = (*report)[0]; + STIF_LOG1("aTestSubOption >> report: %d", firstByte); + + retVal = iGenericHIDTest->DataInL(0,*report); + STIF_LOG1( "DataInL return value: %d" , retVal); + + delete report; + report = NULL; + + STIF_LOG( "Test case passed" ); + + aTestResult = ETestCasePassed; + + return retVal; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::Wait +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::WaitL( TPtrC aTestOption, TInt aTestIntOption, TGenericHidTestResult& aTestResult ) + { + CWaitTimer* timer = CWaitTimer::NewLC(aTestIntOption * 1000000); + CleanupStack::PopAndDestroy(timer); + + STIF_LOG( "Test case passed" ); + + aTestResult = ETestCasePassed; + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CreateCallL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CreateCallL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt err = KErrNone; + + if ( iDialClient ) + { + delete iDialClient; + iDialClient = NULL; + } + iDialClient = CDialClient::NewL(); + + iDialClient->CreateCall( aTestSubOption ); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::AddAlarm +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::AddAlarmL( TPtrC aTestOption, TInt aTestIntOption, TGenericHidTestResult& aTestResult ) + { + STIF_LOG( ">>AddAlarmL" ); + + if ( !iAlarmControl ) + { + iAlarmControl = CAlarmControl::NewL( iLog ); + } + + STIF_LOG( "Create alarm" ); + + iAlarmControl->CreateClockAlarm( aTestIntOption ); + + STIF_LOG( "Test case passed" ); + + aTestResult = ETestCasePassed; + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::DeleteAlarm +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::DeleteAlarm( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iAlarmControl->DeleteAlarm(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CountryCodeL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CountryCodeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->RunCountryCodeL(); + STIF_LOG2( "RunCountryCodeL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::VendorIdL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::VendorIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->RunVendorIdL(); + STIF_LOG2( "RunVendorIdL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ProductIdL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ProductIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->RunProductIdL(); + STIF_LOG2( "RunProductIdL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::SetProtocol +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::SetProtocolL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->RunSetProtocolL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::GetProtocoL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::GetProtocoL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->RunGetProtocoL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::GetReportL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::GetReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->RunGetReportL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::SetReportL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::SetReportL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + HBufC8* report = ConvertArray(aTestSubOption); + CleanupStack::PushL( report ); + iGenericHIDTest->RunSetReportL( *report ); + CleanupStack::PopAndDestroy(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::DataOutL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::DataOutL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + HBufC8* report = ConvertArray(aTestSubOption); + CleanupStack::PushL( report ); + iGenericHIDTest->RunDataOutL( *report ); + CleanupStack::PopAndDestroy(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::GetIdleL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::GetIdleL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->GetGetIdleL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::SetIdleL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::SetIdleL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->RunSetIdleL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::CommandResultL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CommandResultL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->GetCommandResultL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportDescriptorL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportDescriptorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->GetReportDescriptorL(); + STIF_LOG2( "GetReportDescriptorL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportDescriptorL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CreateReportGeneratorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->CreateReportGeneratorL(); + STIF_LOG2( "CreateReportGeneratorL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportDescriptorL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::DeleteReportGeneratorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->DeleteReportGeneratorL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportDescriptorL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportGeneratorReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->ReportGeneratorReport(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportGeneratorSetFieldL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportGeneratorSetFieldL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt ret; + TInt expectedResult = KErrNone; + + if ( !aTestSubOption.Compare( _L( "Array" ) ) ) + { + iLog -> Log( _L("Test type: Array") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( ETrue, EFalse, EFalse, EFalse, ETrue, EFalse ); + } + else if ( !aTestSubOption.Compare( _L( "NotArray" ) ) ) + { + iLog -> Log( _L("Test type: NotArray") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( EFalse, EFalse, EFalse, EFalse, ETrue, EFalse ); + } + else if ( !aTestSubOption.Compare( _L( "NotArrayOutOfRange" ) ) ) + { + iLog -> Log( _L("Test type: NotArrayOutOfRange") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( EFalse, ETrue, EFalse, EFalse, ETrue, EFalse ); + expectedResult = KErrValueOutOfRange; + } + else if ( !aTestSubOption.Compare( _L( "FieldNull" ) ) ) + { + iLog -> Log( _L("Test type: FieldNull") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( EFalse, EFalse, ETrue, EFalse, ETrue, EFalse ); + expectedResult = KErrUsageNotFound; + } + else if ( !aTestSubOption.Compare( _L( "FieldCountZero" ) ) ) + { + iLog -> Log( _L("Test type: FieldCountZero") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( ETrue, EFalse, EFalse, ETrue, ETrue, EFalse ); + expectedResult = KErrNoSpaceInArray; + } + else if ( !aTestSubOption.Compare( _L( "NotExistingUsage" ) ) ) + { + iLog -> Log( _L("Test type: NotExistingUsage") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( ETrue, EFalse, EFalse, ETrue, EFalse, EFalse );//getIndexOfUsage + expectedResult = KErrUsageNotFound; + } + else if ( !aTestSubOption.Compare( _L( "NotExistingUsage2" ) ) ) + { + iLog -> Log( _L("Test type: NotExistingUsage2") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( ETrue, EFalse, EFalse, EFalse, EFalse, EFalse );//getIndexOfUsage + expectedResult = KErrUsageNotFound; + } + else if ( !aTestSubOption.Compare( _L( "BadIndex" ) ) ) + { + iLog -> Log( _L("Test type: BadIndex") ); + ret = iGenericHIDTest->ReportGeneratorSetFieldL( EFalse, EFalse, EFalse, EFalse, ETrue, ETrue ); + expectedResult = KErrBadControlIndex; + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + + STIF_LOG2( "ReportGeneratorSetFieldL return value: %d, expected: %d" , ret, expectedResult); + STIF_ASSERT_EQUALS(ret, expectedResult); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CreateReportTranslatorL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CreateReportTranslatorL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + HBufC8* report = ConvertArray(aTestSubOption); + CleanupStack::PushL( report ); + iGenericHIDTest->CreateReportTranslatorL( *report , ETrue, EFalse, EFalse); + CleanupStack::PopAndDestroy(); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CreateReportTranslator_FieldNullL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + HBufC8* report = ConvertArray(aTestSubOption); + CleanupStack::PushL( report ); + iGenericHIDTest->CreateReportTranslatorL( *report, EFalse, ETrue, EFalse ); + CleanupStack::PopAndDestroy(); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CreateReportTranslator_NotArrayL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + HBufC8* report = ConvertArray(aTestSubOption); + CleanupStack::PushL( report ); + iGenericHIDTest->CreateReportTranslatorL( *report , EFalse, EFalse, EFalse); + CleanupStack::PopAndDestroy(); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CreateReportTranslator_FieldCountZeroL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + HBufC8* report = ConvertArray(aTestSubOption); + CleanupStack::PushL( report ); + iGenericHIDTest->CreateReportTranslatorL( *report , ETrue, EFalse, ETrue); + CleanupStack::PopAndDestroy(); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CGenericHidTest::DeleteReportTranslatorL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::DeleteReportTranslatorL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->DeleteReportTranslatorL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::ReportTranslatorGetValueL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt ret; + TInt expectedResult = KErrNone; + + if ( !aTestSubOption.Compare( _L( "Ok" ) ) ) + { + iLog -> Log( _L("Test type: Ok") ); + } + else if ( !aTestSubOption.Compare( _L( "NotFound" ) ) ) + { + iLog -> Log( _L("Test type: NotFound") ); + expectedResult = KErrUsageNotFound; + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + ret = iGenericHIDTest->ReportTranslatorGetValueL(); + STIF_LOG2( "ReportTranslatorGetValueL return value: %d, expected: %d" , ret, expectedResult); + STIF_ASSERT_EQUALS(ret, expectedResult); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportTranslatorValueL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportTranslatorValueL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->ReportTranslatorValueL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportTranslatorGetUsageIdL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportTranslatorGetUsageIdL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt ret; + TInt expectedResult = KErrNone; + TInt badIndex = EFalse; + + if ( !aTestSubOption.Compare( _L( "Ok" ) ) ) + { + iLog -> Log( _L("Test type: Ok") ); + } + else if ( !aTestSubOption.Compare( _L( "Error" ) ) ) + { + iLog -> Log( _L("Test type: Error") ); + expectedResult = KErrNoMemory; + } + else if ( !aTestSubOption.Compare( _L( "BadIndex" ) ) ) + { + iLog -> Log( _L("Test type: BadIndex") ); + badIndex = ETrue; + expectedResult = KErrBadControlIndex; + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + ret = iGenericHIDTest->ReportTranslatorGetUsageIdL( badIndex ); + STIF_LOG2( "ReportTranslatorGetUsageIdL return value: %d, expected: %d" , ret, expectedResult); + STIF_ASSERT_EQUALS(ret, expectedResult); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportTranslatorUsageIdL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportTranslatorUsageIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->ReportTranslatorUsageIdL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportTranslatorRawValueL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportTranslatorRawValueL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->ReportTranslatorRawValueL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportTranslatorCountL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportTranslatorCountL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult) + { + TInt zeroExpected = EFalse; + + if ( !aTestSubOption.Compare( _L( "Zero" ) ) ) + { + iLog -> Log( _L("Test type: Zero") ); + zeroExpected = ETrue; + } + else if ( !aTestSubOption.Compare( _L( "NotZero" ) ) ) + { + iLog -> Log( _L("Test type: NotZero") ); + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + TInt count = iGenericHIDTest->ReportTranslatorCountL(); + + STIF_LOG1( "ReportTranslatorCountL return value: %d" , count); + if(zeroExpected != EFalse) + { + STIF_ASSERT_EQUALS(0, count) + } + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectiontypeL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectiontypeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectiontypeL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectionIsPhysicalL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectionIsPhysicalL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsPhysicalL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectionIsLogicalL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectionIsLogicalL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsLogicalL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectionIsReportL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectionIsReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsReportL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectionIsNamedArrayL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectionIsNamedArrayL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsNamedArrayL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectionIsUsageSwitchL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectionIsUsageSwitchL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsUsageSwitchL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::CollectionIsUsageModifierL +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::CollectionIsUsageModifierL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsUsageModifierL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CollectionIsApplicationL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionIsApplicationL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + + +TInt CGenericHidTest::CollectionUsagePageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionUsagePageL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CollectionUsageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionUsageL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CollectionCollectionCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionCollectionCountL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CollectionFieldCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->CollectionFieldCountL(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CollectionCollectionByIndexL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt ret; + + if ( !aTestSubOption.Compare( _L( "Present" ) ) ) + { + iLog -> Log( _L("Test type: Present") ); + ret = iGenericHIDTest->CollectionCollectionByIndexL(ETrue); + } + else if ( !aTestSubOption.Compare( _L( "NotPresent" ) ) ) + { + iLog -> Log( _L("Test type: NotPresent") ); + ret = iGenericHIDTest->CollectionCollectionByIndexL(EFalse); + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + STIF_LOG2( "CollectionCollectionByIndexL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::CollectionFieldByIndexL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->CollectionFieldByIndexL(); + STIF_LOG2( "CollectionFieldByIndexL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ReportrootReportSizeBytes +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::ReportrootReportSizeBytes( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + iGenericHIDTest->ReportrootReportSizeBytes(); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldLogicalMax +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldLogicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldLogicalMaxL(); + STIF_LOG2( "FieldLogicalMaxL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldPhysicalMin +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldPhysicalMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldPhysicalMinL(); + STIF_LOG2( "FieldPhysicalMinL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldPhysicalMax +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldPhysicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldPhysicalMaxL(); + STIF_LOG2( "FieldPhysicalMaxL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldUnit +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldUnitL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldUnitL(); + STIF_LOG2( "FieldUnitL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldUnitExponent +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldUnitExponentL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldUnitExponentL(); + STIF_LOG2( "FieldUnitExponentL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldCountL(); + STIF_LOG2( "FieldCountL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSizeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSizeL(); + STIF_LOG2( "FieldSizeL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldOffsetL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt ret; + + if ( !aTestSubOption.Compare( _L( "SetReport" ) ) ) + { + iLog -> Log( _L("Test type: SetReport") ); + ret = iGenericHIDTest->FieldOffsetL(ETrue); + } + else if ( !aTestSubOption.Compare( _L( "NotSetReport" ) ) ) + { + iLog -> Log( _L("Test type: NotSetReport") ); + ret = iGenericHIDTest->FieldOffsetL(EFalse); + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + STIF_LOG2( "FieldOffsetL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldReportIdL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldReportIdL(); + STIF_LOG2( "FieldReportIdL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldIsInReportL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsInReportL(); + STIF_LOG2( "FieldIsInReportL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldDesignatorIndexL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldDesignatorIndexL(); + STIF_LOG2( "FieldDesignatorIndexL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldStringIndexL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldStringIndexL(); + STIF_LOG2( "FieldStringIndexL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldUsagePageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldUsagePageL(); + STIF_LOG2( "FieldUsagePageL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldHasUsage +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldHasUsageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldHasUsageL(); + STIF_LOG2( "FieldHasUsageL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldUsageArrayL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldUsageArrayL(); + STIF_LOG2( "FieldUsageArrayL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldUsageL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldUsageL(); + STIF_LOG2( "FieldUsageL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldUsageCountL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldUsageCountL(); + STIF_LOG2( "FieldUsageCountL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldClearUsageListL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldClearUsageListL(); + STIF_LOG2( "FieldClearUsageListL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldLastUsageL( TPtrC aTestOption, TPtrC aTestSubOption, TGenericHidTestResult& aTestResult ) + { + TInt ret; + + if ( !aTestSubOption.Compare( _L( "Empty" ) ) ) + { + iLog -> Log( _L("Test type: Empty") ); + ret = iGenericHIDTest->FieldLastUsageL( ETrue ); + } + else if ( !aTestSubOption.Compare( _L( "NotEmpty" ) ) ) + { + iLog -> Log( _L("Test type: NotEmpty") ); + ret = iGenericHIDTest->FieldLastUsageL( EFalse ); + } + else + { + iLog -> Log( _L("Test type: not supported") ); + return KErrNotFound; + } + + STIF_LOG2( "FieldLastUsageL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldAttributes +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldAttributesL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldAttributesL(); + STIF_LOG2( "FieldAttributesL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldType +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldTypeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldTypeL(); + STIF_LOG2( "FieldTypeL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldIsVariable +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldIsVariableL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsVariableL(); + STIF_LOG2( "FieldIsVariableL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldIsArrayL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsArrayL(); + STIF_LOG2( "FieldIsArrayL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldIsConstant +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldIsConstantL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsConstantL(); + STIF_LOG2( "FieldIsConstantL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldIsDataL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsDataL(); + STIF_LOG2( "FieldIsDataL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetLogicalMin +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetLogicalMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetLogicalMinL(); + STIF_LOG2( "FieldSetLogicalMinL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetLogicalMax +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetLogicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetLogicalMaxL(); + STIF_LOG2( "FieldSetLogicalMaxL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetPhysicalMin +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetPhysicalMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetPhysicalMinL(); + STIF_LOG2( "FieldSetPhysicalMinL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetPhysicalMax +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetPhysicalMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetPhysicalMaxL(); + STIF_LOG2( "FieldSetPhysicalMaxL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetDesignatorMin +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetDesignatorMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetDesignatorMinL(); + STIF_LOG2( "FieldSetDesignatorMinL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetDesignatorMax +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetDesignatorMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetDesignatorMaxL(); + STIF_LOG2( "FieldSetDesignatorMaxL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetUsageMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetUsageMinL(); + STIF_LOG2( "FieldSetUsageMinL return value: %d, expected: %d" , ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetUsageMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetUsageMaxL(); + STIF_LOG2( "FieldSetUsageMaxL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetStringMin +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetStringMinL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetStringMinL(); + STIF_LOG2( "FieldSetStringMinL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldSetStringMax +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldSetStringMaxL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetStringMaxL(); + STIF_LOG2( "FieldSetStringMaxL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetLogicalRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetLogicalRangeL(); + STIF_LOG2( "FieldSetLogicalRangeL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetUsageRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetUsageRangeL(); + STIF_LOG2( "FieldSetUsageRangeL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetPhysicalRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetPhysicalRangeL(); + STIF_LOG2( "FieldSetPhysicalRangeL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetStringRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetStringRangeL(); + STIF_LOG2( "FieldSetStringRangeL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldSetDesignatorRangeL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldSetDesignatorRangeL(); + STIF_LOG2( "FieldSetDesignatorRangeL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +TInt CGenericHidTest::FieldIsInputL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsInputL(); + STIF_LOG2( "FieldIsInputL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldIsOutput +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldIsOutputL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsOutputL(); + STIF_LOG2( "FieldIsOutputL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::FieldIsFeature +// ----------------------------------------------------------------------------- +// +TInt CGenericHidTest::FieldIsFeatureL( TPtrC aTestOption, TGenericHidTestResult& aTestResult ) + { + TInt ret = iGenericHIDTest->FieldIsFeatureL(); + STIF_LOG2( "FieldIsFeatureL return value: %d, expected: %d", ret, KErrNone); + STIF_ASSERT_EQUALS(ret, KErrNone); + + aTestResult = ETestCasePassed; + + STIF_LOG( "Test case passed" ); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ConvSingleItem +// ----------------------------------------------------------------------------- +// +TUint CGenericHidTest::ConvSingleItem(TBuf8<2>& singleItem) + { + TLex8 lex(singleItem); + TUint value; + lex.Val(value,EHex); + singleItem.Delete(0,2); + return value; + } + +// ----------------------------------------------------------------------------- +// CGenericHidTest::ConvertArray +// ----------------------------------------------------------------------------- +// +HBufC8* CGenericHidTest::ConvertArray( const TPtrC& aFilename ) + { + RFs theFs; + + RFile someFile; + if(theFs.Connect() != KErrNone) + { + return NULL; + } + TInt error = someFile.Open(theFs, aFilename, EFileShareExclusive); + + RArray arrDesc; + if (!error) + { + TBool seekEOL = EFalse; + TBuf8<2> singleItem; + + TInt hexByte = 0; + + TBool bTerminator = EFalse; + + TBuf8<1> oneChar; + someFile.Read(oneChar, 1); + + while ( (!error) && (oneChar.Size()) ) + { + switch ( oneChar[0] ) + { + case 10: + case 13: + seekEOL = EFalse; + break; + + case '/': + seekEOL = ETrue; + // Comments are special case terminators + // interntional drop through to the next case line + case ' ': + case '\t': + case ',': + // whitespace - ignore, unless we've started storing a value + // (in which case treat the char as a terminator) + bTerminator = ETrue; + break; + + default: + if (!seekEOL) + { + if (4==hexByte) + { + error = KErrGeneral; // Can't store more than two digits + } + else if (hexByte>1) + { + singleItem.Append(oneChar); + } + + hexByte++; + } + break; + } + + if ( bTerminator && singleItem.Size() ) + { + TUint value = ConvSingleItem(singleItem); + arrDesc.Append(value); + hexByte = 0; + } + + bTerminator = EFalse; + + someFile.Read(oneChar, 1); + } + + if (singleItem.Size()) + { + TUint value = ConvSingleItem(singleItem); + arrDesc.Append(value); + } + + someFile.Close(); + } + + theFs.Close(); + + HBufC8* theDesc = 0; + + if (!error) + { + TInt size = arrDesc.Count(); + TRAPD( error, theDesc = HBufC8::NewL(size) ); + if ( error != KErrNone ) + { + return NULL; + } + TPtr8 des = theDesc->Des(); + for(TInt x=0; x +#include +#include +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// ================= OTHER EXPORTED FUNCTIONS ================================= + +/* +------------------------------------------------------------------------------- + + Class: - + + Method: E32Main + + Description: + + Parameters: None + + Return Values: TInt: Symbian error code + + Errors/Exceptions: None + + Status: Draft + +------------------------------------------------------------------------------- +*/ +GLDEF_C TInt E32Main() + { + _LIT( KProcessMsgStart, "New process starting" ); + RDebug::Print( KProcessMsgStart ); + + + // This starts a new session that get capabilites that is used in + // GenericHidTest_exe.mmp file. + TInt r = StartSession(); + + _LIT( KProcessMsgEnd, "New process ends" ); + RDebug::Print( KProcessMsgEnd ); + + return r; + + } + +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/alarmcontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/alarmcontrol.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,122 @@ +/* +* Copyright (c) 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: Dialhandling class for hid test application +* +*/ + + +#include "alarmcontrol.h" +#include "ASShdAlarm.h" +#include "asshddefs.h" + +_LIT(KSoundName, "a"); // For the alarm alert note. +const TUid KAlarmClockOne = { 0x101F793A }; + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CAlarmControl* CAlarmControl::NewL( CStifLogger* aLogger ) + { + CAlarmControl* self = CAlarmControl::NewLC(aLogger); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CAlarmControl* CAlarmControl::NewLC( CStifLogger* aLogger ) + { + CAlarmControl* self = new( ELeave ) CAlarmControl(aLogger); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CAlarmControl::CAlarmControl( CStifLogger* aLogger ): +iLog(aLogger) + { + } + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +// +CAlarmControl::~CAlarmControl() + { + if (iAlarmServer.Handle() != KNullHandle) + { + iAlarmServer.Close(); + } + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CAlarmControl::ConstructL() + { + User::LeaveIfError(iAlarmServer.Connect()); + } +// --------------------------------------------------------------------------- +// CreateClockAlarm +// --------------------------------------------------------------------------- +// +void CAlarmControl::CreateClockAlarm( TInt aTime ) + { + STIF_LOG("CreateClockAlarm"); + TInt minute; + TTime tmp; + tmp.HomeTime(); + TDateTime alarmdtime = tmp.DateTime(); + minute = alarmdtime.Minute(); + minute = minute+aTime; + alarmdtime.SetMinute(minute); + + STIF_LOG("CreateClockAlarm solve minutes"); + TASShdAlarm alarm; + alarm.Category() = KAlarmClockOne; + alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce; + alarm.OriginalExpiryTime() = alarmdtime; + alarm.NextDueTime() = alarmdtime; + alarm.SoundName() = KSoundName; + + STIF_LOG("CreateClockAlarm solve data"); + alarm.ClientFlags().Set( 0 ); + + STIF_LOG("CreateClockAlarm solve add alarm"); + iAlarmServer.AlarmAdd(alarm); + iAlarmID = alarm.Id(); + + STIF_LOG("CreateClockAlarm solve add activate alarm"); + iAlarmServer.SetAlarmStatus(iAlarmID, EAlarmStatusEnabled); + + STIF_LOG("CreateClockAlarm completed"); + } + +// --------------------------------------------------------------------------- +// CreateClockAlarm +// --------------------------------------------------------------------------- +// +void CAlarmControl::DeleteAlarm() + { + iAlarmServer.AlarmDelete(iAlarmID); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/tdialclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/tdialclient.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,123 @@ +/* +* Copyright (c) 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: Dialhandling class for hid test application +* +*/ + + +#include "tdialclient.h" + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +CDialClient* CDialClient::NewL() + { + CDialClient* self = CDialClient::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// ?description_if_needed +// --------------------------------------------------------------------------- +// +CDialClient* CDialClient::NewLC() + { + CDialClient* self = new( ELeave ) CDialClient; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CDialClient::CDialClient() +: CActive(EPriorityNormal), iCallParamsPckg(iCallParams), + iCallStarted(EFalse) + { + CActiveScheduler::Add(this); + } + +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CDialClient::ConstructL() + { + iTelephony = CTelephony::NewL(); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CDialClient::~CDialClient() + { + Cancel(); + delete iTelephony; + } + +// --------------------------------------------------------------------------- +// RunL +// --------------------------------------------------------------------------- +// +void CDialClient::RunL() + { + if ( iSyncWaiter.IsStarted() ) + { + iSyncWaiter.AsyncStop(); + } + } + +// --------------------------------------------------------------------------- +// DoCancel() +// --------------------------------------------------------------------------- +// +void CDialClient::DoCancel() + { + + } +// --------------------------------------------------------------------------- +// CreateCall() +// --------------------------------------------------------------------------- +// +void CDialClient::CreateCall(const TDesC& aNumber) + { + if ( IsActive() ) + { + return; + } + CTelephony::TTelNumber telNumber(aNumber); + iCallParams.iIdRestrict = CTelephony::ESendMyId; + iTelephony->DialNewCall(iStatus, iCallParamsPckg, telNumber, iCallId); + + SetActive(); + iSyncWaiter.Start(); + } + +// --------------------------------------------------------------------------- +// HangUp() +// --------------------------------------------------------------------------- +// +void CDialClient::HangUp() + { + iTelephony->Hangup( iStatus , iCallId ); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/tgenerichidapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/tgenerichidapi.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1540 @@ +/* +* Copyright (c) 2004-2007 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: HID field search +* +*/ + +#include + +#include "tGenericHIDAPI.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CtGenericHIDAPI* CtGenericHIDAPI::NewLC() + { + CtGenericHIDAPI* self = new (ELeave) CtGenericHIDAPI(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CtGenericHIDAPI* CtGenericHIDAPI::NewL() + { + CtGenericHIDAPI* self = NewLC(); + CleanupStack::Pop(); + return self; + } +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CtGenericHIDAPI::CtGenericHIDAPI() + { + } +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CtGenericHIDAPI::~CtGenericHIDAPI() + { + delete iHidDriver; + iFieldList.Close(); + delete iGenHID; + } +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::ConstructL() + { + iGenHID = CGenericHid::NewL( this ); + iDriverAcces=iGenHID; + + iHidDriver = CHidDriver::NewL(TUid::Uid(0xE000B187),iGenHID); + } +// --------------------------------------------------------------------------- +// ConnectL() +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::ConnectL(TInt aConnectionId, const TDesC8& aDescriptor) + { + TInt16 ret = iGenHID->ConnectedL( aConnectionId, aDescriptor ); + ret = iGenHID->DriverActive( aConnectionId , CHidTransport::EActive); + + //todo retval + } + +// --------------------------------------------------------------------------- +// DisconnectL() +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::DisconnectL(TInt aConnectionId ) + { + TInt16 ret = iGenHID->Disconnected( aConnectionId ); + //todo retval + } + +// --------------------------------------------------------------------------- +// DataInL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::DataInL(TInt aConnectionId, const TDesC8& aDescriptor) + { + TInt16 ret = iGenHID->DataIn(aConnectionId, CHidTransport::EHidChannelInt, aDescriptor); + return ret; + } + +// --------------------------------------------------------------------------- +// RunCountryCodeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunCountryCodeL() + { + TInt16 countryCode = iGenHID->CountryCodeL(0); + if(countryCode != 0) + return KErrNotFound; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunVendorIdL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunVendorIdL() + { + TUint vendorId = iGenHID->VendorIdL(0); + if(vendorId != 0x0421) + return KErrNotFound; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunProductIdL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunProductIdL() + { + TUint productId = iGenHID->ProductIdL(0); + if(productId != 0x0083) + return KErrNotFound; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunSetProtocol() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunSetProtocolL() + { + iGenHID->SetProtocolL(0,0,MDriverAccess::EReport,iHidDriver); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunGetProtocoL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunGetProtocoL() + { + iGenHID->GetProtocolL(0,0); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunGetReportL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunGetReportL() + { + iGenHID->GetReportL(0, 0 ,0 , 0); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunSetReportL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunSetReportL(const TDesC8& aDescriptor) + { + iGenHID->SetReportL(0,0, MDriverAccess::EOutput, aDescriptor,0, iHidDriver); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// GetDataOutL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunDataOutL(const TDesC8& aDescriptor) + { + iGenHID->DataOutL( 0, 0, aDescriptor, 0); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// GetGetIdleL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::GetGetIdleL() + { + iGenHID->GetIdleL(0, 0, 0); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// RunSetIdleL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::RunSetIdleL() + { + iGenHID->SetIdleL(0, 10, 0, 0, iHidDriver); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// GetCommandResultL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::GetCommandResultL() + { + iGenHID->CommandResult(0, 1); + return KErrNone; + } + +// --------------------------------------------------------------------------- +// GetReportDescriptorL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::GetReportDescriptorL() + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + if(tmp == NULL) + return KErrNotFound; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CreateReportGeneratorL +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CreateReportGeneratorL() + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + + if(tmp == NULL) + return KErrNotFound; + + iReportGenerator = CReportGenerator::NewL(tmp, 0, CField::EInput); + + if(iReportGenerator == NULL) + return KErrNotFound; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// DeleteReportGeneratorL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::DeleteReportGeneratorL() + { + delete iReportGenerator; + iReportGenerator = NULL; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// ReportGeneratorReport() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportGeneratorReport() + { + iReportGenerator->Report(); + //todo check return value??? + return KErrNone; + } + +// --------------------------------------------------------------------------- +// ReportGeneratorReport() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportGeneratorSetFieldL( TBool aIsArray, TBool aOutOfRange, TBool aFieldNull, TBool aFieldCountZero, TBool aExistingUsageId, TBool aBadIndex ) + { + CField* field = CreateCFieldL(); + + TInt usageId = EConsumerUsageVolumeInc;//233;//0xE9 + TInt indexOffset = 0; + + if(aBadIndex != EFalse) + { + indexOffset = 1000; + } + + if(aExistingUsageId == EFalse) + { + usageId = EConsumerUsagePlayPause;//205 + field->SetUsageRange(0,255); + } + + if(aIsArray == EFalse) + { + field->SetAttributes(KFieldAttributeVariable); + if(field->IsArray() != EFalse) + { + return KErrGeneral; + } + } + else + { + field->SetAttributes(!KFieldAttributeVariable); + if(field->IsArray() == EFalse) + { + return KErrGeneral; + } + } + + field->SetLogicalMax(10); + if(aOutOfRange != EFalse) + { + field->SetLogicalMin(5); + } + + if(aFieldCountZero != EFalse) + { + field->SetCount(0); + } + + const CField* constField; + if(aFieldNull == EFalse) + { + constField = (const CField*)field; + } + else + { + constField = NULL; + } + TInt16 ret = iReportGenerator->SetField(constField, usageId, 1, indexOffset); + return ret; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CreateReportTranslatorL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CreateReportTranslatorL( const TDesC8& aDescriptor, TBool aIsArray, TBool aFieldNull, TBool aFieldCountZero) + { + CField* field = CreateCFieldL(); + + + if(aIsArray == EFalse) + { + field->SetAttributes(KFieldAttributeVariable); + if(field->IsArray() != EFalse) + { + return KErrGeneral; + } + } + else + { + field->SetAttributes(!KFieldAttributeVariable); + if(field->IsArray() == EFalse) + { + return KErrGeneral; + } + } + + /* field->SetLogicalMax(10); + if(aOutOfRange != EFalse) + { + field->SetLogicalMin(5); + }*/ + + if(aFieldCountZero != EFalse) + { + field->SetCount(0); + } + + const CField* constField; + if(aFieldNull == EFalse) + { + constField = (const CField*)field; + } + else + { + constField = NULL; + } + + + + + //const CField* field = CreateConstCFieldL(); + iTranslator = new (ELeave) TReportTranslator(aDescriptor, constField); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CreateReportTranslator_FieldNullL +// ----------------------------------------------------------------------------- +// +/*TInt CtGenericHIDAPI::CreateReportTranslator_FieldNullL( const TDesC8& aDescriptor ) + { + const CField* field = NULL; + iTranslator = new (ELeave) TReportTranslator(aDescriptor, field); + return KErrNone; + }*/ + +// ----------------------------------------------------------------------------- +// CtGenericHid::DeleteReportTranslatorL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::DeleteReportTranslatorL( ) + { + delete iTranslator; + iTranslator =NULL; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportTranslatorGetValueL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportTranslatorGetValueL() + { + //todo if + TInt value = 0; + TInt res = iTranslator->GetValue(value,EConsumerUsageVolumeInc); + + return res; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportTranslatorValueL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportTranslatorValueL() + { + TInt value = iTranslator->ValueL(EConsumerUsageVolumeInc); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportTranslatorGetUsageIdL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportTranslatorGetUsageIdL( TBool aBadControlIndex ) + { + TInt id; + TInt index = 0; + + if(aBadControlIndex != EFalse) + { + index = -1;//bad index + } + //todo if + TInt ret = iTranslator->GetUsageId(id,index); + + return ret; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportTranslatorUsageIdL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportTranslatorUsageIdL( ) + { + TInt value = iTranslator->UsageIdL(0); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportTranslatorRawValueL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportTranslatorRawValueL( ) + { + TInt value = iTranslator->RawValueL(0); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportTranslatorCountL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportTranslatorCountL( ) + { + TInt count =iTranslator->Count(); + //todo if, retval + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectiontypeL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectiontypeL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TUint32 type=tmp->Type(); + //todo check type? + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsPhysicalL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsPhysicalL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TBool result=tmp->IsPhysical(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsLogicalL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsLogicalL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TBool result=tmp->IsLogical(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsReportL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsReportL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TBool result=tmp->IsReport(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsNamedArrayL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsNamedArrayL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TBool result =tmp->IsNamedArray(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsUsageSwitchL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsUsageSwitchL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TBool resul = tmp->IsUsageSwitch(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsUsageModifierL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsUsageModifierL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt result = tmp->IsUsageModifier(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionIsApplicationL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionIsApplicationL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt result = tmp->IsApplication(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionUsagePageL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionUsagePageL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt result = tmp->UsagePage(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionUsageL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionUsageL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt result = tmp->Usage(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionCollectionCountL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionCollectionCountL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt result = tmp->CollectionCount(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionFieldCountL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionFieldCountL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt result = tmp->FieldCount(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionCollectionByIndexL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionCollectionByIndexL( TBool aPresent ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt index; + + index = (aPresent != EFalse) ? 0 : -1; + + const CCollection* result = tmp->CollectionByIndex(index); + + if(aPresent != EFalse && result == NULL) + return KErrGeneral; + + if(aPresent == EFalse && result != NULL) + return KErrGeneral; + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::CollectionFieldByIndexL +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::CollectionFieldByIndexL( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + const CField* result = tmp->FieldByIndex(-1); + + if(result != NULL) + return KErrGeneral; + //todo if + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CtGenericHid::ReportrootReportSizeBytes +// ----------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::ReportrootReportSizeBytes( ) + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + TInt16 size = tmp->ReportSizeBytes(0,CField::EInput); + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldLogicalMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldLogicalMaxL( )//todo remove + { + CField* field = CreateCFieldL(); + const TInt max = 5; + field->SetLogicalMax(max); + TInt ret = field->LogicalMax(); + if(ret != max) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldPhysicalMinL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldPhysicalMinL( )//todo remove + { + CField* field = CreateCFieldL(); + const TInt min = 0; + field->SetPhysicalMin(min); + TInt ret = field->PhysicalMin(); + if(ret != min) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldPhysicalMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldPhysicalMaxL( )//todo remove + { + CField* field = CreateCFieldL(); + const TInt max = 5; + field->SetPhysicalMax(max); + TInt ret=field->PhysicalMax(); + if(ret != max) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldUnitL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldUnitL( ) + { + CField* field = CreateCFieldL(); + TInt unit = 5; + field->SetUnit(unit); + TInt ret = field->Unit(); + if(ret != unit) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldUnitExponentL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldUnitExponentL( ) + { + CField* field = CreateCFieldL(); + TInt unitExponent = 5; + field->SetUnitExponent(unitExponent); + TInt ret = field->UnitExponent(); + if(ret != unitExponent) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldCountL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldCountL( ) + { + CField* field = CreateCFieldL(); + TInt count = 5; + field->SetCount(count); + TInt ret = field->Count(); + if(ret != count) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSizeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSizeL( ) + { + CField* field = CreateCFieldL(); + TInt size = 5; + field->SetSize(size); + TInt ret = field->Size(); + if(ret != size) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldOffsetL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldOffsetL(TBool setReport ) + { + CField* field = CreateCFieldL(); + + if(setReport != EFalse) + { + field->SetReportId(5); + } + + TInt offset = 5; + field->SetOffset(offset); + TInt ret = field->Offset(); + + if(setReport != EFalse) + { + offset += KSizeOfByte; + } + + if(ret != offset) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldReportIdL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldReportIdL( ) + { + CField* field = CreateCFieldL(); + TInt reportId = 5; + field->SetReportId(reportId); + TInt ret = field->ReportId(); + if(ret != reportId) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsInReportL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsInReportL( ) + { + CField* field = CreateCFieldL(); + TInt reportId = 5; + field->SetReportId(reportId); + TBool ret = field->IsInReport(reportId); + if(!ret) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldDesignatorIndexL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldDesignatorIndexL( ) + { + CField* field = CreateCFieldL(); + TInt designatorIndex = 5; + field->SetDesignatorIndex(designatorIndex); + TInt ret = field->DesignatorIndex(); + if(ret != designatorIndex) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldStringIndexL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldStringIndexL( ) + { + CField* field = CreateCFieldL(); + TInt stringIndex = 5; + field->SetStringIndex(stringIndex); + TInt ret = field->StringIndex(); + if(ret != stringIndex) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldUsagePageL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldUsagePageL( ) + { + CField* field = CreateCFieldL(); + TInt usagePage = 5; + field->SetUsagePage(usagePage); + TInt ret = field->UsagePage(); + if(ret != usagePage) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldHasUsageL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldHasUsageL( ) + { + CField* field = CreateCFieldL(); + TInt usage = 233; + field->AddUsageL(usage); + TBool ret = field->HasUsage(usage); + if(!ret) + return KErrGeneral; + //todo check EFalse + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldUsageArrayL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldUsageArrayL( ) + { + CField* field = CreateCFieldL(); + TInt usage = 233; + field->AddUsageL(usage); + TArray usageArray = field->UsageArray(); + + if(usageArray[0] != usage) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldUsageL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldUsageL( ) + { + CField* field = CreateCFieldL(); + TInt usage = 233; + field->AddUsageL(usage); + TInt ret = field->Usage(0); + + if(ret != usage) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldUsageCountL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldUsageCountL( ) + { + CField* field = CreateCFieldL(); + TInt firstCount = field->UsageCount(); + TInt usage = 233; + field->AddUsageL(usage); + TInt secondCount = field->UsageCount(); + + if(secondCount != firstCount+1) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldClearUsageListL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldClearUsageListL( ) + { + CField* field = CreateCFieldL(); + TInt usage = 233; + field->AddUsageL(usage); + TInt ret = field->UsageCount(); + + if(ret == 0) + return KErrGeneral; + + field->ClearUsageList(); + ret = field->UsageCount(); + if(ret != 0) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldLastUsageL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldLastUsageL( TBool empty ) + { + CField* field = CreateCFieldL(); + //todo if - without add + TInt usage = 233; + + if(empty != EFalse) + { + field->ClearUsageList(); + usage = 0; + } + else + { + field->AddUsageL(usage); + } + + TInt ret = field->LastUsage(); + + if(ret != usage) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldAttributesL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldAttributesL( ) + { + CField* field = CreateCFieldL(); + TUint32 attributes = KFieldAttributeConstant; + field->SetAttributes(attributes); + TUint32 ret = field->Attributes(); + if(ret != attributes) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldTypeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldTypeL( ) + { + CField* field = CreateCFieldL(); + CField::TType type = CField::EInput; + field->SetType(type); + CField::TType ret = field->Type(); + if(ret != type) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsVariableL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsVariableL( ) + { + CField* field = CreateCFieldL(); + TUint32 attributes = KFieldAttributeVariable; + field->SetAttributes(attributes); + TBool ret = field->IsVariable(); + if(!ret) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsArrayL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsArrayL( ) + { + CField* field = CreateCFieldL(); + TUint32 attributes = KFieldAttributeVariable; + field->SetAttributes(attributes); + TBool ret = field->IsArray(); + if(ret) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsConstantL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsConstantL( ) + { + CField* field = CreateCFieldL(); + TUint32 attributes = KFieldAttributeConstant; + field->SetAttributes(attributes); + TBool ret = field->IsConstant(); + if(!ret) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsDataL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsDataL( ) + { + CField* field = CreateCFieldL(); + TUint32 attributes = KFieldAttributeConstant; + field->SetAttributes(attributes); + TBool ret = field->IsData(); + if(ret) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetLogicalMinL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetLogicalMinL() + { + CField* field = CreateCFieldL(); + + TInt value = 0; + field->SetLogicalMin(value); + + TInt ret = field->LogicalMin(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetLogicalMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetLogicalMaxL( ) + { + CField* field = CreateCFieldL(); + TInt value = 10; + field->SetLogicalMax(value); + + TInt ret = field->LogicalMax(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetPhysicalMinL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetPhysicalMinL( ) + { + CField* field = CreateCFieldL(); + TInt value = 0; + field->SetPhysicalMin(value); + TInt ret = field->PhysicalMin(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetPhysicalMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetPhysicalMaxL( ) + { + CField* field = CreateCFieldL(); + TInt value = 2; + field->SetPhysicalMax(value); + TInt ret = field->PhysicalMax(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetDesignatorMinL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetDesignatorMinL( ) + { + CField* field = CreateCFieldL(); + TInt value = 0; + field->SetDesignatorMin(value); + TInt ret = field->DesignatorMin(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetDesignatorMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetDesignatorMaxL( ) + { + CField* field = CreateCFieldL(); + TInt value = 2; + field->SetDesignatorMax(value); + TInt ret = field->DesignatorMax(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetUsageMinL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetUsageMinL( ) + { + CField* field = CreateCFieldL(); + TInt value = 0; + field->SetUsageMin(value); + TInt ret = field->UsageMin(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetUsageMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetUsageMaxL( ) + { + CField* field = CreateCFieldL(); + TInt value = 2; + field->SetUsageMax(value); + TInt ret = field->UsageMax(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetStringMinL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetStringMinL( ) + { + CField* field = CreateCFieldL(); + TInt value = 0; + field->SetStringMin(value); + TInt ret = field->StringMin(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } +// --------------------------------------------------------------------------- +// FieldSetStringMaxL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetStringMaxL( ) + { + CField* field = CreateCFieldL(); + TInt value = 2; + field->SetStringMax(value); + TInt ret = field->StringMax(); + if(ret != value) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetLogicalRangeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetLogicalRangeL( ) + { + CField* field = CreateCFieldL(); + TInt min = 0; + TInt max = 5; + field->SetLogicalRange(min,max); + TInt retMin = field->LogicalMin(); + TInt retMax = field->LogicalMax(); + if(min != retMin || max != retMax) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetUsageRangeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetUsageRangeL( ) + { + CField* field = CreateCFieldL(); + TInt min = 0; + TInt max = 5; + field->SetUsageRange(min,max); + TInt retMin = field->UsageMin(); + TInt retMax = field->UsageMax(); + if(min != retMin || max != retMax) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetPhysicalRangeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetPhysicalRangeL( ) + { + CField* field = CreateCFieldL(); + TInt min = 0; + TInt max = 5; + field->SetPhysicalRange(min,max); + TInt retMin = field->PhysicalMin(); + TInt retMax = field->PhysicalMax(); + if(min != retMin || max != retMax) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetStringRangeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetStringRangeL( ) + { + CField* field = CreateCFieldL(); + TInt min = 0; + TInt max = 5; + field->SetStringRange(min,max); + TInt retMin = field->StringMin(); + TInt retMax = field->StringMax(); + if(min != retMin || max != retMax) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldSetDesignatorRangeL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldSetDesignatorRangeL( ) + { + CField* field = CreateCFieldL(); + TInt min = 0; + TInt max = 5; + field->SetDesignatorRange(min,max); + TInt retMin = field->DesignatorMin(); + TInt retMax = field->DesignatorMax(); + if(min != retMin || max != retMax) + return KErrGeneral; + + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsInputL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsInputL( ) + { + CField* field = CreateCFieldL(); + CField::TType type = CField::EInput; + field->SetType(type); + TBool ret = field->IsInput(); + if(!ret) + return KErrGeneral; + //todo check EFalse + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsOutputL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsOutputL( ) + { + CField* field = CreateCFieldL(); + CField::TType type = CField::EOutput; + field->SetType(type); + TBool ret = field->IsOutput(); + if(!ret) + return KErrGeneral; + //todo check EFalse + return KErrNone; + } + +// --------------------------------------------------------------------------- +// FieldIsFeatureL() +// --------------------------------------------------------------------------- +// +TInt CtGenericHIDAPI::FieldIsFeatureL( ) + { + CField* field = CreateCFieldL(); + CField::TType type = CField::EFeature; + field->SetType(type); + TBool ret = field->IsFeature(); + if(!ret) + return KErrGeneral; + //todo check EFalse + return KErrNone; + } + +// --------------------------------------------------------------------------- +// CountryCodeL() +// --------------------------------------------------------------------------- +// +TUint CtGenericHIDAPI::CountryCodeL(TInt /*aConnID*/) + { + return 0; + } + +// --------------------------------------------------------------------------- +// VendorIdL +// --------------------------------------------------------------------------- +// +TUint CtGenericHIDAPI::VendorIdL(TInt /*aConnID*/) + { + return 0x0421; + } + +// --------------------------------------------------------------------------- +// ProductIdL +// --------------------------------------------------------------------------- +// +TUint CtGenericHIDAPI::ProductIdL(TInt /*aConnID*/) + { + return 0x0083; + } + +// --------------------------------------------------------------------------- +// GetProtocolL +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::GetProtocolL(TInt /*aConnID*/, TUint16 /*aInterface*/) + { + } + +// --------------------------------------------------------------------------- +// SetProtocolL +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::SetProtocolL(TInt /*aConnID*/, TUint16 /*aValue*/, + TUint16 /*aInterface*/) + { + } + +// --------------------------------------------------------------------------- +// GetReportL +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::GetReportL(TInt /*aConnID*/, TUint8 /*aReportType*/, + TUint8 /*aReportID*/, TUint16 /*aInterface*/, TUint16 /*aLength*/) + { + } + +// --------------------------------------------------------------------------- +// SetReportL +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::SetReportL(TInt /*aConnID*/, TUint8 /*aReportType*/,TUint8 /*aReportID*/, + TUint16 /*aInterface*/, const TDesC8& /*aReport*/) + { + } + +// --------------------------------------------------------------------------- +// DataOutL() +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::DataOutL(TInt /*aConnID*/, TUint8 /*aReportID*/, + TUint16 /*aInterface*/, const TDesC8& /*aReport*/) + { + } + +// --------------------------------------------------------------------------- +// GetIdleL +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::GetIdleL(TInt /*aConnID*/, TUint8 /*aReportID*/, + TUint16 /*aInterface*/) + { + } + +// --------------------------------------------------------------------------- +// SetIdleL +// --------------------------------------------------------------------------- +// +void CtGenericHIDAPI::SetIdleL(TInt /*aConnID*/, TUint8 /*aDuration*/, TUint8 /*aReportID*/, + TUint16 /*aInterface*/) + { + } + +const CField* CtGenericHIDAPI::CreateConstCFieldL() + { + CReportRoot* tmp=iGenHID->ReportDescriptor(0); + User::LeaveIfNull(tmp); + const CCollection* collection = tmp->CollectionByIndex(0); + if(collection == NULL) + User::Leave(KErrGeneral); + const CField* field=collection->FieldByIndex(0); + return field; + } + +CField* CtGenericHIDAPI::CreateCFieldL() + { + return (CField*)CreateConstCFieldL(); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/generichid/tsrc/GenericHidTest/src/timer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/generichid/tsrc/GenericHidTest/src/timer.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2007-2008 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: HID Heaset plugin timeouttimer +* +*/ + + +#include "timer.h" + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CWaitTimer* CWaitTimer::NewL( TTimeIntervalMicroSeconds32 aTimeOutTime ) + { + CWaitTimer* self = CWaitTimer::NewLC( aTimeOutTime ); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CWaitTimer* CWaitTimer::NewLC( TTimeIntervalMicroSeconds32 aTimeOutTime ) + { + CWaitTimer* self = new (ELeave) CWaitTimer(); + CleanupStack::PushL(self); + self->ConstructL( aTimeOutTime ); + return self; + } + +// --------------------------------------------------------------------------- +// CTimeOutTimer() +// --------------------------------------------------------------------------- +// +CWaitTimer::CWaitTimer(): + CTimer( EPriorityStandard ) + { + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CWaitTimer::~CWaitTimer() + { + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CWaitTimer::ConstructL( TTimeIntervalMicroSeconds32 aTimeOutTime ) + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + After( aTimeOutTime ); + iSyncWaiter.Start(); + } + +// --------------------------------------------------------------------------- +// From class CActive +// RunL() +// --------------------------------------------------------------------------- +// +void CWaitTimer::RunL() + { + // Timer request has completed, so notify the timer's owner + iSyncWaiter.AsyncStop(); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2006 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: Build information file for project ?myapp +* +*/ + + +PRJ_PLATFORMS +DEFAULT + +#include "../locod/group/bld.inf" +#include "../dun/group/bld.inf" +#include "../generichid/group/bld.inf" +#include "../headset/group/bld.inf" + +PRJ_EXPORTS + + +PRJ_MMPFILES + +PRJ_TESTMMPFILES + +PRJ_TESTEXPORTS diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/data/hidheadset.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/data/hidheadset.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,40 @@ +/* +* Copyright (c) 2007-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: ECOM plugin resource file for headset driver. +* +*/ + +#include +#include "headsetuids.h" + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = HEADSET_UID; + interfaces = + { + INTERFACE_INFO + { + interface_uid = DRIVER_PLUGIN_IF; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = HEADSET_DRIVER_IMP; + version_no = 1; + display_name = "HID Headset Driver Plugin"; + } + }; + } + }; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2006-2007 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: Build information file for project headset +* +*/ + +#include + +PRJ_MMPFILES +hidheadset.mmp + +PRJ_PLATFORMS +WINSCW ARMV5 + +#include "../hidremconbearer/group/bld.inf" + +PRJ_EXPORTS +../rom/hidheadset.iby CORE_MW_LAYER_IBY_EXPORT_PATH(hidheadset.iby) \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/group/headset.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/group/headset.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component headset + +source \sf\mw\remoteconn\localconnectivityservice\headset + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/group/hidheadset.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/group/hidheadset.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2006-2007 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: Project definition file for project hidheadset +* +*/ + + +#include +#include "../inc/headsetuids.h" + +TARGET hidheadset.dll +TARGETTYPE PLUGIN +UID ECOM_UID HEADSET_UID + +CAPABILITY CAP_APPLICATION CommDD ProtServ +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE headset.cpp +SOURCE finder.cpp +SOURCE hidheadsetdriverproxy.cpp +SOURCE keypresstimer.cpp + +START RESOURCE ../data/hidheadset.rss + TARGET hidheadset.rsc +END // ECOM resource definition + +#ifdef NO101APPDEPFIXES +APP_LAYER_SYSTEMINCLUDE +#else //NO101APPDEPFIXES +MW_LAYER_SYSTEMINCLUDE +#endif //NO101APPDEPFIXES + +USERINCLUDE ../inc ../hidremconbearer/inc +USERINCLUDE ../../../inc + +LIBRARY euser.lib +LIBRARY ecom.lib +LIBRARY generichid.lib +LIBRARY etel3rdparty.lib +LIBRARY alarmclient.lib +LIBRARY mpxplaybackutility.lib +LIBRARY mpxcommon.lib + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/data/hidremconbearer.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/data/hidremconbearer.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,54 @@ +/* +* Copyright (c) 2002-2007 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: Resource definitions for project hidremconbearer +* +*/ + + +// INCLUDES +#include +#include "headsetuids.h" + +// RESOURCE DEFINITIONS +// ----------------------------------------------------------------------------- +// +// REGISTRY_INFO theInfo +// Information needed for Ecom Plugin +// +// ----------------------------------------------------------------------------- +// +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = HIDREMCON_UID; + interfaces = + { + INTERFACE_INFO + { + interface_uid = REMCON_PLUGIN_IF; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = HIDREMCON_IMP; + version_no = 1; + display_name = "HidRemconBearer"; + default_data = ""; + opaque_data = ""; + } + }; + } + }; + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,23 @@ +/* +* Copyright (c) 2007-2007 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: Build information file for project hidremconbearer +* +*/ + +PRJ_PLATFORMS +DEFAULT + +PRJ_MMPFILES +hidremconbearer.mmp + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/group/hidremconbearer.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/group/hidremconbearer.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2007-2007 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: Project definition file for project hidremconbearer +* +*/ + +#include +#include +#include +#include "../../inc/headsetuids.h" + + +TARGET hidremconbearer.dll + +// CAPABILITY CAP_ECOM_PLUGIN +// capabilities are required as that of remconbearerplugin.dll +// getting it from #include + +TARGETTYPE PLUGIN +UID 0x10009d8d HIDREMCON_UID +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE hidremconbearermain.cpp +SOURCE hidremconbearerimplementation.cpp +SOURCE hidremconbearerobserver.cpp + + +START RESOURCE ../data/hidremconbearer.rss +TARGET hidremconbearer.rsc +END // ECOM resource definition + + +USERINCLUDE . ../inc ../../inc + +MW_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY ecom.lib +LIBRARY remconbearerplugin.lib +LIBRARY remcontypes.lib + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/debug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/debug.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,174 @@ +/* +* Copyright (c) 2006-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: Logging definition +* +*/ + +#ifndef DEBUG_H +#define DEBUG_H + +#include "debugconfig.h" + +#ifdef PRJ_ENABLE_TRACE + +#ifdef PRJ_FILE_TRACE +#include +#else +#include +#endif + +const TInt KMaxLogLineLength = 512; + +#define KPRINTERROR 0x00000001 // Tracing level: error +#define KPRINTINFO 0x00000002 // Tracing level: function trace +#define KPRINTSTATE 0x00000004 // Tracing level: state machine info +#define KPRINTWARNING 0x00000008 // Tracing level: warning + +const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING; + +NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow + { +public: + void Overflow(TDes16& /*aDes*/) {} + }; + +NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow + { +public: + void Overflow(TDes8& /*aDes*/) {} + }; + +inline void Trace(TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list,aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TBuf16 theFinalString; + theFinalString.Append(KTracePrefix16); + TOverflowTruncate16 overflow; + theFinalString.AppendFormatList(aFmt,list,&overflow); + RDebug::Print(theFinalString); +#endif + } + +inline void Trace(TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list, aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TOverflowTruncate8 overflow; + TBuf8 buf8; + buf8.Append(KTracePrefix8); + buf8.AppendFormatList(aFmt, list, &overflow); + TBuf16 buf16(buf8.Length()); + buf16.Copy(buf8); + TRefByValue tmpFmt(_L("%S")); + RDebug::Print(tmpFmt, &buf16); +#endif + } + +inline void TracePanic( + char* aFile, + TInt aLine, + TInt aPanicCode, + const TDesC& aPanicCategory) + { + TPtrC8 fullFileName((const TUint8*)aFile); + TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1); + TBuf8 buf; + buf.Append(KPanicPrefix8); + buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName); + Trace(buf); + User::Panic(aPanicCategory, aPanicCode); + } + +inline void TraceLeave(char* aFile, TInt aLine, TInt aReason) + { + TPtrC8 fullFileName((const TUint8*)aFile); + TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1); + TBuf8 buf; + buf.Append(KLeavePrefix8); + buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName); + Trace(buf); + User::LeaveIfError(aReason); + } + +#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;} + +#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;} + +#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;} + +#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;} + +#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;} + +#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);} + +#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory) + +#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);} + +#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);} + +#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}} + +#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}} + +#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}} + +#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}} + +#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}} + +#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}} + +#else // PRJ_ENABLE_TRACE not defined + +#define TRACE_INFO(p) + +#define TRACE_ERROR(p) + +#define TRACE_STATE(p) + +#define TRACE_WARNING(p) + +#define TRACE_INFO_SEG(p) + +#define TRACE_ASSERT(GUARD, CODE) + +#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);} + +#define LEAVE_IF_ERROR(REASON) {static_cast(User::LeaveIfError(REASON));} + +#define LEAVE(REASON) {static_cast(User::Leave(REASON));} + +#define TRACE_FUNC_ENTRY + +#define TRACE_FUNC_ENTRY_THIS + +#define TRACE_FUNC_EXIT + +#define TRACE_FUNC + +#define TRACE_FUNC_THIS + +#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;} +#endif // PRJ_ENABLE_TRACE + +#endif // PRJ_LOGGING_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/debugconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/debugconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006-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: Project configure file. +* +*/ + +#ifndef DEBUGCONFIG_H +#define DEBUGCONFIG_H + +#include "prjconfig.h" + + +/** + * Custom logging variations. + */ +#ifdef PRJ_FILE_TRACE +_LIT(KLogFile,"hidremcon.txt"); +_LIT(KLogDir,"hidremcon"); +#endif + +#ifdef PRJ_ENABLE_TRACE +_LIT(KTracePrefix16, "[hidremcon] "); +_LIT8(KTracePrefix8, "[hidremcon] "); +_LIT8(KFuncFormat8, "><%S"); +_LIT8(KFuncThisFormat8, "><%S, [0x%08X]"); +_LIT8(KFuncEntryFormat8, ">%S"); +_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]"); +_LIT8(KFuncExitFormat8, "<%S"); + +_LIT(KPanicCategory, "hidremcon"); +_LIT8(KPanicPrefix8, "PANIC code "); +_LIT8(KLeavePrefix8, "LEAVE code "); +#endif + +#endif // REMCONBEARER_DEBUGCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerimplementation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerimplementation.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,287 @@ +/* +* 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: Declaration of class CHidRemconBearer. + * +*/ + + +#ifndef C_HIDREMCONBEARER_H +#define C_HIDREMCONBEARER_H + +#include +#include +#include +#include +#include +#include +#include + +#include "hidremconbearerobserver.h" + +//CONSTANTS +const TInt KDataBufferSize = 10; + +/** + * CHidRemconBearer + * Implementation of the Rem Con Bearer Plugin + * + */ +class CHidRemconBearer : public CRemConBearerPlugin, + public MRemConBearerInterface, + public MCallBackReceiver + { +public: + + /** + * Two-phased constructor. + * @param aParams required for the CRemConBearerPlugin + * @return hidremconbearer plugin + */ + static CHidRemconBearer* NewL( TBearerParams& aParams ); + + /** + * Destructor. + */ + virtual ~CHidRemconBearer(); + +private: + + /** + * Constructor + * @param aParams bearer parameters + */ + CHidRemconBearer( TBearerParams& aParams ); + + /** + * Two - phase construction. + */ + void ConstructL(); + +private: + // from CRemConBearerPlugin + + /** + * From class CRemConBearerPlugin + * Called by RemCon server to get a pointer to an object which implements + * the bearer API with UID aUid. This is a mechanism for allowing future + * change to the bearer API without breaking BC in existing (non-updated) + * bearer plugins. + * + * @param aUid Inteface uid + * @return Return pointer to interface + */ + TAny* GetInterface( TUid aUid ); + +private: + // from MRemConBearerInterface + + /** + * From class MRemConBearerInterface + * Called by RemCon to retrieve a response on a connection. + * + * @param aInterfaceUid Inteface uid + * @param aTransactionId Transaction id + * @param aOperationId operation ID + * @param aData API-specific message data. + * @param aAddr The connection. + * @return Error code + */ + TInt GetResponse( TUid& aInterfaceUid, TUint& aTransactionId, + TUint& aOperationId, RBuf8& aData, TRemConAddress& aAddr ); + + /** + * From class MRemConBearerInterface + * Send Remcon command + * + * @param aInterfaceUid Inteface uid + * @param aCommand command id + * @param aTransactionId Transaction id + * @param aData API-specific message data. + * @param aAddr The connection. + * @return Error code + */ + TInt SendCommand( TUid aInterfaceUid, TUint aCommand, + TUint aTransactionId, RBuf8& aData, const TRemConAddress& aAddr ); + + /** + * From class MRemConBearerInterface + * Get Remcon command + * + * @param aInterfaceUid Inteface uid + * @param aTransactionId Transaction id + * @param aCommand command id + * @param aData API-specific message data. + * @param aAddr The connection. + * @return Error code + */ + TInt GetCommand( TUid& aInterfaceUid, TUint& aTransactionId, + TUint& aCommand, RBuf8& aData, TRemConAddress& aAddr ); + + /** + * From class MRemConBearerInterface + * Send Response + * + * @param aInterfaceUid Inteface uid + * @param aOperationID operation id + * @param aTransactionId Transaction id + * @param aData API-specific message data. + * @param aAddr The connection. + * @return Error code + */ + TInt SendResponse( TUid aInterfaceUid, TUint aOperationId, + TUint aTransactionId, RBuf8& aData, const TRemConAddress& aAddr ); + + /** + * From class MRemConBearerInterface + * Connect request + * + * @param aAddr The connection. + */ + void ConnectRequest( const TRemConAddress& aAddr ); + + /** + * From class MRemConBearerInterface + * Disconnect request + * + * @param aAddr The connection. + */ + void DisconnectRequest( const TRemConAddress& aAddr ); + + /** + * From class MRemConBearerInterface + * Clientstatus + * + * @param aControllerPresent Controllerpresent status + * @param aTargetPresent Target present status + */ + void ClientStatus( TBool aControllerPresent, TBool aTargetPresent ); + + /** + * From class MRemConBearerInterface + * Return security policy + * + * @return Security policy + */ + TSecurityPolicy SecurityPolicy() const; + +private: + // from MCallBackReceiver + + /** + * From class MCallBackReceiver + * Return security policy + * + * @param aScanCode a scancode + * @param aKeyType a Keytype + */ + void ReceivedKeyEvent( TInt aScanCode, TInt aKeyType ); + +private: + /** + * From class MCallBackReceiver + * Set SVK Operation ID and Data + * + * @param aEnumValue OperationID and data field + */ + void SetSVKOperationIdAndData( TInt aEnumValue ); + + /** + * From class MCallBackReceiver + * Set Mute Operation ID and Data + * + * @param aEnumValue OperationID and data field + */ + void SetMuteKeyOperationIdAndData( TInt aEnumValue ); + + /** + * From class MCallBackReceiver + * Set Media key Operation ID and Data + * + * @param aEnumValue OperationID and data field + */ + void SetMediaKeyOperationIdAndData( TInt aEnumValue ); + + /** + * From class MCallBackReceiver + * Set Media key Operation ID and Data + * + * @param aEnumValue OperationID and data field + */ + void SetPhoneKeyOperationIdAndData( TInt aEnumValue ); + + /** + * RestartExpired observer + * + * @param aKeyType type of key + */ + void RestartKeyObeserver( TInt aKeyType ); + + /** + * Restart Expired observer + * + * @param aEnumValue a value of key + * @param aKeyType A type of key + */ + void HandleKeyOperation( TInt aEnumValue, TInt aKeyType ); + +private: + // Data + + /** + * Interface uid of last correct-decoded message + */ + TUid iInterfaceUid; + + /** + * Operation uid of last correct-decoded message + */ + TUint iOperationId; + + /** + * Data of last correct-decoded message + */ + TBuf8 iData; + + /** + * Transactionid uid of last correct-decoded message + */ + TUint iTransactionId; + + /** + * Media key observer + * Own. + */ + CHidRemconBearerObserver* iMediaKeyObserver; + + /** + * Accessory volume key observer + * Own. + */ + CHidRemconBearerObserver* iAccessoryVolKeyObserver; + + /** + * Mute key observer + * Own. + */ + CHidRemconBearerObserver* iMuteKeyObserver; + + /** + * Phone key observer + * Own. + */ + CHidRemconBearerObserver* iHookKeyObserver; + + }; + +#endif // HIDREMCONBEARERIMPLEMENTATION_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerinternalpskeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerinternalpskeys.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,34 @@ +/* +* 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: HidRemconBearer internal Publish & Subscribe keys. + * +*/ + + +#ifndef HIDREMCONBEARERINTERNALPSKEYS_H +#define HIDREMCONBEARERINTERNALPSKEYS_H + +const TUid KPSUidHidEventNotifier = + { + 0x101f9067 + /*0x10282c19*/}; // hid event publisher uid + +// Media Keys Notification API + +const TUint32 KHidControlKeyEvent = 0x00000001; +const TUint32 KHidAccessoryVolumeEvent = 0x00000002; +const TUint32 KHidMuteKeyEvent = 0x00000003; +const TUint32 KHidHookKeyEvent = 0x00000004; + +#endif // __HIDREMCONBEARERINTERNALPSKEYS_H__ diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerobserver.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,147 @@ +/* +* 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: Declaration of class CHidRemconBearerObserver + * +*/ + + +#ifndef C_HIDREMCONBEAREROBSERVER_H +#define C_HIDREMCONBEAREROBSERVER_H + +#include +#include + +/** + * Observer key types + */ +enum TObserverKeyType + { + EMediaKeys = 0, + EAccessoryVolumeKeys, + EMuteKey, + EHookKeys + }; + +/** + * Call Back Receiver + * On receiving event from the P & S, CHidRemconBearerObserver calls + * this function + * + */ +class MCallBackReceiver + { +public: + /** + * Called when event has arrived from P&S. + * + * @param aEnumValue Enum value representing the key and action + * @param aKeyType will indicate whether it is Volume key or Media key + */ + virtual void ReceivedKeyEvent( TInt aEnumValue, TInt aKeyType ) = 0; + }; + +/** + * Hid remcon bearer observer + * This class inplements the Active Object. There will be two instance + * of this ,one for handling Volume keys and other for Media Keys + * + */ +class CHidRemconBearerObserver : public CActive + { +public: + // Constructors and destructor + + /** + * Two-phased constructor. + * @param aCallback reference of the class which implements + * MCallBackReceiver for handling call back + * functions + * @param aKeyType Indiacates whether it is side volume key or + * media key + * @return remconbearer observer + */ + static CHidRemconBearerObserver* NewL( MCallBackReceiver& aCallback, + TInt aKeyType ); + /** + * Destructor. + */ + virtual ~CHidRemconBearerObserver(); + +public: + /** + * Start remconbearer observer key events + * + * @return Error code + */ + TInt Start(); + + /** + * Stop remconbearer observer key events + * + */ + void Stop(); + +private: + /** + * Two-phased constructor. + * @param aCallback reference of the class which implements + * MCallBackReceiver for handling call back + * functions + */ + CHidRemconBearerObserver( MCallBackReceiver& aCallback ); + + /** + * Two-phased constructor. + * @param aKeyType Indiacates whether it is side volume key or + * media key + */ + void ConstructL( TInt aKeyType ); + +private: + // From Base class CActive + + /** + * From CActive + * Handles an active object's request completion event. + * + */ + void RunL(); + + /** + * From CActive + * Canceling outstanding request + * + */ + void DoCancel(); + +private: + // Data + /** + * RProperty for key subscribing key values + */ + RProperty iProperty; + + /** + * Callback to request handler + */ + MCallBackReceiver& iCallback; + + /** + * Key type + */ + TInt iKeyType; // Vol key or media Key + }; + +#endif // HIDREMCONBEAREROBSERVER_H +// End of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerscancodes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/hidremconbearerscancodes.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,70 @@ +/* +* 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: Hid remconbearer scan codes + * +*/ + + +#ifndef HIDREMCONBEARERBEARERSCANCODES_H +#define HIDREMCONBEARERBEARERSCANCODES_H + +/** + * Side volume Key Codes + */ +const TInt KPSVolumeDownReleased = -3; +const TInt KPSVolumeDownPressed = -2; +const TInt KPSVolumeDownClicked = -1; +const TInt KPSVolumeNoKey = 0; +const TInt KPSVolumeUpClicked = 1; +const TInt KPSVolumeUpPressed = 2; +const TInt KPSVolumeUpReleased = 3; +const TInt KPSMuteClicked = 4; +const TInt KPSMutePressed = 5; +const TInt KPSMuteReleased = 6; +// Hook keys keys +const TInt KPSAnsweClicked = 1; +const TInt KPSHangUpClicked = 2; +const TInt KPSRedial = 3; +const TInt KPSVoiceDial = 4; + +/** + * Media Key codes + */ +enum TMediaKeyValues + { + EPlayReleased = 0, + EPlayPressed, + EPlayClicked, + EStopReleased, + EStopPressed, + EStopClicked, + EForwardReleased, + EForwardPressed, + EForwardClicked, + ERewindReleased, + ERewindPressed, + ERewindClicked, + EFastForwardReleased, + EFastForwardPressed, + EFastForwardClicked, + EBackwardReleased, + EBackwardPressed, + EBackwardClicked, + EMuteReleased, + EMutePressed, + EMuteClicked + }; + +#endif // HIDREMCONBEARERBEARERSCANCODE_H +//End of File diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/inc/prjconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/inc/prjconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006-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: Project configure file. +* +*/ + + +#ifndef PRJCONFIG_H +#define PRJCONFIG_H + +/** + * Traces are enabled via RDebug::Print() in UDEB build, by default. + */ +#ifdef _DEBUG +#define PRJ_ENABLE_TRACE +#endif + +/** + * Traces will be written to file if this is defined. + */ +//#define PRJ_FILE_TRACE + + +/** + * build the project for module test purpose if this is defined + */ +//#define PRJ_MODULETEST_BUILD + +/** + * build the project using stubs to replace the dependencies if this is defined + */ +//#define PRJ_USE_STUB + +#endif // PRJCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/src/hidremconbearerimplementation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/src/hidremconbearerimplementation.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,522 @@ +/* +* 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: Bearer plugin API Implementation file + * +*/ + +#include +#include +#include +#include +#include +#include +#include // Property values +#include +#include "hidremconbearerinternalpskeys.h" +#include "hidremconbearerscancodes.h" +#include "hidremconbearerimplementation.h" +#include "hidremconbearerobserver.h" +#include "debug.h" + +_LIT8(KFormatString,"%c"); +_LIT8(KVoiceFormatString,"%d"); +_LIT_SECURITY_POLICY_C1(KHidRemconBearerReadPolicy, ECapability_None); +_LIT_SECURITY_POLICY_C1(KHidRemconBearerWritePolicy, ECapability_None); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CHidRemconBearer::NewL() +// Description: Factory function. +// return: Ownership of a new CHidRemconBearer. +// --------------------------------------------------------------------------- +// +CHidRemconBearer* CHidRemconBearer::NewL( TBearerParams& aParams ) + { + CHidRemconBearer* self = new ( ELeave ) CHidRemconBearer( aParams ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::~CHidRemconBearer() +// Destructor. +// --------------------------------------------------------------------------- +// +CHidRemconBearer::~CHidRemconBearer() + { + delete iMediaKeyObserver; + delete iAccessoryVolKeyObserver; + delete iMuteKeyObserver; + delete iHookKeyObserver; + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::CHidRemconBearer() +// construction. +// --------------------------------------------------------------------------- +// +CHidRemconBearer::CHidRemconBearer( TBearerParams& aParams ) : + CRemConBearerPlugin( aParams ) + { + //Pass + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::ConstructL() +// 2nd-phase construction. +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::ConstructL() + { + TRACE_FUNC_ENTRY + // throw an indication up to RemCon. + TRemConAddress addr; + addr.BearerUid() = Uid(); + TInt err = Observer().ConnectIndicate( addr ); + + //Define the P&S for Volume keys and Media Keys + RProperty::Define( KPSUidHidEventNotifier, KHidControlKeyEvent, + RProperty::EInt, KHidRemconBearerReadPolicy, + KHidRemconBearerWritePolicy ); + // Define P&S Key for Volume keys from Accessory device + RProperty::Define( KPSUidHidEventNotifier, KHidAccessoryVolumeEvent, + RProperty::EInt, KHidRemconBearerReadPolicy, + KHidRemconBearerWritePolicy ); + // Define P&S Key for Mute key from Accessory device + RProperty::Define( KPSUidHidEventNotifier, KHidMuteKeyEvent, + RProperty::EInt, KHidRemconBearerReadPolicy, + KHidRemconBearerWritePolicy ); + + // Define P&S Key for phone keys from Accessory device + RProperty::Define( KPSUidHidEventNotifier, KHidHookKeyEvent, + RProperty::EInt, KHidRemconBearerReadPolicy, + KHidRemconBearerWritePolicy ); + + // Start Active object for listening key events from P&S + + iMediaKeyObserver = CHidRemconBearerObserver::NewL( *this, EMediaKeys ); + iAccessoryVolKeyObserver = CHidRemconBearerObserver::NewL( *this, + EAccessoryVolumeKeys ); + + iMuteKeyObserver = CHidRemconBearerObserver::NewL( *this, EMuteKey ); + + iHookKeyObserver = CHidRemconBearerObserver::NewL( *this, EHookKeys ); + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::ConnectRequest() +// Rem Con server send connect request to Bearer Plugin +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::ConnectRequest( const TRemConAddress& /*aAddr*/) + { + TRACE_FUNC + // Pass + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::DisconnectRequest() +// Rem Con server send disconnect request to Bearer Plugin +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::DisconnectRequest( const TRemConAddress& /*aAddr*/) + { + TRACE_FUNC + // Pass + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::SendResponse() +// +// --------------------------------------------------------------------------- +// +TInt CHidRemconBearer::SendResponse( TUid /* aInterfaceUid */, + TUint /*aOperationId*/, + TUint /*aTransactionId*/, // we don't care about this transaction ID + RBuf8& aData, + const TRemConAddress& /*aAddr*/) + { + TRACE_FUNC + aData.Close(); + return KErrNone; + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::SendCommand() +// +// --------------------------------------------------------------------------- +// +TInt CHidRemconBearer::SendCommand( TUid /* aInterfaceUid */, + TUint /* aOperationId */, TUint /* aTransactionId */, + RBuf8& /* aData */, const TRemConAddress& /*aAddr*/) + { + TRACE_FUNC + return KErrNone; + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::GetResponse() +// +// --------------------------------------------------------------------------- +// +TInt CHidRemconBearer::GetResponse( TUid& /* aInterfaceUid */, + TUint& /* aTransactionId*/, TUint& /* aOperationId */, + RBuf8& /* aData */, TRemConAddress& /*aAddr */) + { + TRACE_FUNC + return KErrNone; + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::GetCommand() +// +// --------------------------------------------------------------------------- +// +TInt CHidRemconBearer::GetCommand( TUid& aInterfaceUid, + TUint& aTransactionId, TUint& aOperationId, RBuf8& aData, + TRemConAddress& aAddr ) + { + TRACE_FUNC + aInterfaceUid = iInterfaceUid; + aOperationId = iOperationId; + // Pass ownership of this to RemCon. + TRAPD(retTrap, aData.CreateL(iData)); + if ( retTrap != KErrNone ) + { + return retTrap; + } + aAddr.BearerUid() = Uid(); + aAddr.Addr() = KNullDesC8(); + aTransactionId = iTransactionId; + return KErrNone; + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::SetSVKOperationIdAndData() +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::SetSVKOperationIdAndData( TInt aEnumValue ) + { + TRACE_FUNC + // 1. Interface ID is required when Getcommand is called + iInterfaceUid = TUid::Uid( KRemConCoreApiUid ); // from Remconcoreapi.h + switch ( aEnumValue ) + { + case KPSVolumeUpPressed: + iOperationId = ERemConCoreApiVolumeUp; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case KPSVolumeUpReleased: + iOperationId = ERemConCoreApiVolumeUp; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case KPSVolumeUpClicked: + iOperationId = ERemConCoreApiVolumeUp; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case KPSVolumeDownPressed: + iOperationId = ERemConCoreApiVolumeDown; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case KPSVolumeDownReleased: + iOperationId = ERemConCoreApiVolumeDown; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case KPSVolumeDownClicked: + iOperationId = ERemConCoreApiVolumeDown; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case KPSVolumeNoKey: // This should never execute + break; + default: + iOperationId = aEnumValue; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + } + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::SetMuteKeyOperationIdAndData +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::SetMuteKeyOperationIdAndData( TInt aEnumValue ) + { + TRACE_INFO((_L("[HID]\tCHidRemconBearer::SetMuteKeyOperation \ + IdAndData( %d )"), aEnumValue)); + // 1. Interface ID is required when Getcommand is called + iInterfaceUid = TUid::Uid( KRemConCoreApiUid ); // from Remconcoreapi.h + switch ( aEnumValue ) + { + case KPSMutePressed: + iOperationId = ERemConCoreApiMute; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case KPSMuteReleased: + iOperationId = ERemConCoreApiMute; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case KPSMuteClicked: + iOperationId = ERemConCoreApiMute; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + default: + TRACE_INFO(_L("CHidRemconBearer::SetMuteKeyOperationIdAndData : \ + Not supported")) + ; + } + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::SetMediaKeyOperationIdAndData() +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::SetMediaKeyOperationIdAndData( TInt aEnumValue ) + { + TRACE_FUNC + // 1. Interface ID is required when Getcommand is called + iInterfaceUid = TUid::Uid( KRemConCoreApiUid ); // from Remconcoreapi.h + switch ( aEnumValue ) + { + case EPlayReleased: + iOperationId = ERemConCoreApiPausePlayFunction; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case EPlayPressed: + iOperationId = ERemConCoreApiPausePlayFunction; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case EPlayClicked: + iOperationId = ERemConCoreApiPausePlayFunction; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case EStopReleased: + iOperationId = ERemConCoreApiStop; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case EStopPressed: + iOperationId = ERemConCoreApiStop; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case EStopClicked: + iOperationId = ERemConCoreApiStop; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case EForwardReleased: + iOperationId = ERemConCoreApiForward; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case EForwardPressed: + iOperationId = ERemConCoreApiForward; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case EForwardClicked: + iOperationId = ERemConCoreApiForward; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case ERewindReleased: + iOperationId = ERemConCoreApiRewind; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case ERewindPressed: + iOperationId = ERemConCoreApiRewind; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case ERewindClicked: + iOperationId = ERemConCoreApiRewind; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case EFastForwardReleased: + iOperationId = ERemConCoreApiFastForward; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case EFastForwardPressed: + iOperationId = ERemConCoreApiFastForward; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case EFastForwardClicked: + iOperationId = ERemConCoreApiFastForward; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case EBackwardReleased: + iOperationId = ERemConCoreApiBackward; + iData.Format( KFormatString, ERemConCoreApiButtonRelease ); + break; + case EBackwardPressed: + iOperationId = ERemConCoreApiBackward; + iData.Format( KFormatString, ERemConCoreApiButtonPress ); + break; + case EBackwardClicked: + iOperationId = ERemConCoreApiBackward; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + // This should never execute + default: + iOperationId = aEnumValue; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + + } + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::ReceivedKeyEvent() +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::SetPhoneKeyOperationIdAndData( TInt aEnumValue ) + { + TRACE_FUNC_ENTRY + iInterfaceUid = TUid::Uid( KRemConExtCallHandlingApiUid ); + switch ( aEnumValue ) + { + case KPSAnsweClicked: + TRACE_INFO((_L("[HID]\tCHidRemconBearer::SetPhoneKey \ + OperationIdAndData Answer"))); + iOperationId = ERemConExtAnswerCall; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case KPSHangUpClicked: + iOperationId = ERemConExtEndCall; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case KPSRedial: + iOperationId = ERemConExtLastNumberRedial; + iData.Format( KFormatString, ERemConCoreApiButtonClick ); + break; + case KPSVoiceDial: + iOperationId = ERemConExtVoiceDial; + iData.Format( KVoiceFormatString, ERemConCoreApiButtonRelease ); + break; + default: + TRACE_INFO(_L("CHidRemconBearer::SetPhoneKeyOperationIdAndData \ + : Not supported")); } + TRACE_FUNC_EXIT + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::ReceivedKeyEvent() +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::ReceivedKeyEvent( TInt aEnumValue, TInt aKeyType ) + { + TRACE_INFO((_L("[HID]\tCHidRemconBearer::ReceivedKeyEvent: value %d, \ + type %d )"), aEnumValue, aKeyType)); + + /* To keep the background light on */ + User::ResetInactivityTime(); + + // 2. Transaction ID + iTransactionId = Observer().NewTransactionId(); + + // 3. Addr + TRemConAddress addr; + addr.BearerUid() = Uid(); + addr.Addr() = KNullDesC8(); + + // 4 & 5. Operation ID and Data + HandleKeyOperation( aEnumValue, aKeyType ); + + // Msgtype is ERemConCommand + TInt error = Observer().NewCommand( addr ); + TRACE_INFO((_L("[HID]\tCHidRemconBearer::ReceivedKeyEvent: error %d )"), + error)); + //Start the listener once again + RestartKeyObeserver( aKeyType ); + + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::RestartKeyObeserver +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::RestartKeyObeserver( TInt aKeyType ) + { + TRACE_FUNC_ENTRY + switch ( aKeyType ) + { + case EMediaKeys: + iMediaKeyObserver->Start(); + break; + case EAccessoryVolumeKeys: + iAccessoryVolKeyObserver->Start(); + break; + case EMuteKey: + iMuteKeyObserver->Start(); + break; + case EHookKeys: + iHookKeyObserver->Start(); + break; + default: + TRACE_INFO(_L("CHidRemconBearer::RestartKeyObeserver : Not supported")) + ; + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::RestartObexserver +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::HandleKeyOperation( TInt aEnumValue, TInt aKeyType ) + { + TRACE_FUNC_ENTRY + switch ( aKeyType ) + { + case EAccessoryVolumeKeys: + SetSVKOperationIdAndData( aEnumValue ); + break; + case EMuteKey: + SetMuteKeyOperationIdAndData( aEnumValue ); + break; + case EMediaKeys: + SetMediaKeyOperationIdAndData( aEnumValue ); + break; + case EHookKeys: + SetPhoneKeyOperationIdAndData( aEnumValue ); + break; + default: + TRACE_INFO(_L("CHidRemconBearer::HandleKeyOperation : Not \ + supported")) + ; + } + TRACE_FUNC_EXIT + } +// --------------------------------------------------------------------------- +// CHidRemconBearer::SecurityPolicy() +// --------------------------------------------------------------------------- +// +TSecurityPolicy CHidRemconBearer::SecurityPolicy() const + { + return TSecurityPolicy( ECapabilityLocalServices ); + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::ClientStatus() +// --------------------------------------------------------------------------- +// +void CHidRemconBearer::ClientStatus( TBool /*aControllerPresent*/, TBool /*aTargetPresent*/) + { + //Pass + TRACE_FUNC + } + +// --------------------------------------------------------------------------- +// CHidRemconBearer::GetInterface() +// --------------------------------------------------------------------------- +// +TAny* CHidRemconBearer::GetInterface( TUid aUid ) + { + TRACE_FUNC + TAny* ret = NULL; + if ( aUid == TUid::Uid( KRemConBearerInterface1 ) ) + { + ret = reinterpret_cast ( + static_cast ( this ) ); + } + return ret; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/src/hidremconbearermain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/src/hidremconbearermain.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2007-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: Bearer plugin implementation proxy + * +*/ + + +#include +#include "hidremconbearerimplementation.h" +#include "headsetuids.h" + +/** + * Implementation table + */ +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(HIDREMCON_IMP, CHidRemconBearer::NewL), + }; + +// --------------------------------------------------------------------------- +// ImplementationGroupProxy () +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/hidremconbearer/src/hidremconbearerobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/hidremconbearer/src/hidremconbearerobserver.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,156 @@ +/* +* Copyright (c) 2007-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: Remcon bearer observer implementation + * +*/ + + +//INCLUDE +#include +#include +#include + +#include "hidremconbearerinternalpskeys.h" +#include "hidremconbearerobserver.h" +#include "debug.h" +// ======== MEMBER FUNCTIONS ======== +// +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::NewL() +// Constructs a new entry with given values. +// --------------------------------------------------------------------------- +// +CHidRemconBearerObserver* CHidRemconBearerObserver::NewL( + MCallBackReceiver& aCallback, TInt aKeyType ) + { + CHidRemconBearerObserver* self = new ( ELeave ) CHidRemconBearerObserver( + aCallback ); + CleanupStack::PushL( self ); + self->ConstructL( aKeyType ); + CleanupStack::Pop(); + return self; + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::CHidRemconBearerObserver() +// C++ constructor +// --------------------------------------------------------------------------- +// +CHidRemconBearerObserver::CHidRemconBearerObserver( + MCallBackReceiver& aCallback ) : + CActive( EPriorityStandard ), iCallback( aCallback ) + { + //Pass + TRACE_FUNC + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::CHidRemconBearerObserver() +// Destructor +// --------------------------------------------------------------------------- +// +CHidRemconBearerObserver::~CHidRemconBearerObserver() + { + TRACE_FUNC + Stop(); + if ( iProperty.Handle() != KNullHandle ) + { + iProperty.Close(); + } + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::ConstructL() +// Symbian OS default constructor +// --------------------------------------------------------------------------- +// +void CHidRemconBearerObserver::ConstructL( TInt aKeyType ) + { + TRACE_FUNC + iKeyType = aKeyType; + // Add this active object to the scheduler. + CActiveScheduler::Add( this ); + switch ( iKeyType ) + { + case EMediaKeys: + User::LeaveIfError( iProperty.Attach( KPSUidHidEventNotifier, + KHidControlKeyEvent ) ); + break; + case EAccessoryVolumeKeys: + User::LeaveIfError( iProperty.Attach( KPSUidHidEventNotifier, + KHidAccessoryVolumeEvent ) ); + break; + case EMuteKey: + User::LeaveIfError( iProperty.Attach( KPSUidHidEventNotifier, + KHidMuteKeyEvent ) ); + break; + case EHookKeys: + User::LeaveIfError( iProperty.Attach( KPSUidHidEventNotifier, + KHidHookKeyEvent ) ); + break; + default: + User::Leave( KErrArgument ); + } + Start(); + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::Start() +// Starts listening KUidCurrentCall event +// --------------------------------------------------------------------------- +// +TInt CHidRemconBearerObserver::Start() + { + TRACE_FUNC + if ( IsActive() ) + { + return KErrInUse; + } + iStatus = KRequestPending; + iProperty.Subscribe( iStatus ); + SetActive(); + return KErrNone; + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::Stop() +// Stops listening KUidCurrentCall event +// --------------------------------------------------------------------------- +// +void CHidRemconBearerObserver::Stop() + { + TRACE_FUNC + Cancel(); + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::RunL() +// --------------------------------------------------------------------------- +// +void CHidRemconBearerObserver::RunL() + { + TInt scanCode; + TInt ret = 0; + ret = iProperty.Get( scanCode ); + if ( ret == KErrNone ) + { + // If this Active Object is for receiving the USB MTP status, the + // scanCode varibale contains the status whether transfer is + // happening now(active) or not(not active). + iCallback.ReceivedKeyEvent( scanCode, iKeyType ); + } + } +// --------------------------------------------------------------------------- +// CHidRemconBearerObserver::DoCancel() +// Cancels event listening +// --------------------------------------------------------------------------- +// +void CHidRemconBearerObserver::DoCancel() + { + iProperty.Cancel(); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/debug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/debug.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,176 @@ +/* +* Copyright (c) 2007-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: Logging definition + * +*/ + + +#ifndef DEBUG_H +#define DEBUG_H + +#include "debugconfig.h" + +#ifdef PRJ_ENABLE_TRACE + +#ifdef PRJ_FILE_TRACE +#include +#else +#include +#endif + +const TInt KMaxLogLineLength = 512; + +#define KPRINTERROR 0x00000001 // Tracing level: error +#define KPRINTINFO 0x00000002 // Tracing level: function trace +#define KPRINTSTATE 0x00000004 // Tracing level: state machine info +#define KPRINTWARNING 0x00000008 // Tracing level: warning +const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE + | KPRINTWARNING; + +NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow + { +public: + void Overflow( TDes16& /*aDes*/) + { + } + }; + +NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow + { +public: + void Overflow( TDes8& /*aDes*/) + { + } + }; + +inline void Trace( TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START(list,aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TBuf16 theFinalString; + theFinalString.Append( KTracePrefix16 ); + TOverflowTruncate16 overflow; + theFinalString.AppendFormatList( aFmt, list, &overflow ); + RDebug::Print( theFinalString ); +#endif + } + +inline void Trace( TRefByValue aFmt, ... ) + { + VA_LIST list; + VA_START(list, aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TOverflowTruncate8 overflow; + TBuf8 buf8; + buf8.Append( KTracePrefix8 ); + buf8.AppendFormatList( aFmt, list, &overflow ); + TBuf16 buf16( buf8.Length() ); + buf16.Copy( buf8 ); + TRefByValue tmpFmt( _L("%S")); + RDebug::Print( tmpFmt, &buf16 ); +#endif + } + +inline void TracePanic( char* aFile, TInt aLine, TInt aPanicCode, + const TDesC& aPanicCategory ) + { + TPtrC8 fullFileName( (const TUint8*) aFile ); + TPtrC8 fileName( fullFileName.Ptr() + fullFileName.LocateReverse( '\\' ) + + 1 ); + TBuf8 buf; + buf.Append( KPanicPrefix8 ); + buf.AppendFormat( _L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName ); + Trace( buf ); + User::Panic( aPanicCategory, aPanicCode ); + } + +inline void TraceLeave( char* aFile, TInt aLine, TInt aReason ) + { + TPtrC8 fullFileName( (const TUint8*) aFile ); + TPtrC8 fileName( fullFileName.Ptr() + fullFileName.LocateReverse( '\\' ) + + 1 ); + TBuf8 buf; + buf.Append( KLeavePrefix8 ); + buf.AppendFormat( _L8("%d at line %d in file %S"), aReason, aLine, &fileName ); + Trace( buf ); + User::LeaveIfError( aReason ); + } + +#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;} + +#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;} + +#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;} + +#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;} + +#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;} + +#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);} + +#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory) + +#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);} + +#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);} + +#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}} + +#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}} + +#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}} + +#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}} + +#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}} + +#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}} + +#else // PRJ_ENABLE_TRACE not defined +#define TRACE_INFO(p) + +#define TRACE_ERROR(p) + +#define TRACE_STATE(p) + +#define TRACE_WARNING(p) + +#define TRACE_INFO_SEG(p) + +#define TRACE_ASSERT(GUARD, CODE) + +#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);} + +#define LEAVE_IF_ERROR(REASON) {static_cast(User::LeaveIfError(REASON));} + +#define LEAVE(REASON) {static_cast(User::Leave(REASON));} + +#define TRACE_FUNC_ENTRY + +#define TRACE_FUNC_ENTRY_THIS + +#define TRACE_FUNC_EXIT + +#define TRACE_FUNC + +#define TRACE_FUNC_THIS + +#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;} +#endif // PRJ_ENABLE_TRACE +#endif // PRJ_LOGGING_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/debugconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/debugconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2006-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: Project configure file. +* +*/ + + +#ifndef DEBUGCONFIG_H +#define DEBUGCONFIG_H + +#include "prjconfig.h" + + +/** + * Custom logging variations. + */ +#ifdef PRJ_FILE_TRACE +_LIT(KLogFile,"headset.txt"); +_LIT(KLogDir,"headset"); +#endif + +#ifdef PRJ_ENABLE_TRACE +_LIT(KTracePrefix16, "[headset] "); +_LIT8(KTracePrefix8, "[headset] "); +_LIT8(KFuncFormat8, "><%S"); +_LIT8(KFuncThisFormat8, "><%S, [0x%08X]"); +_LIT8(KFuncEntryFormat8, ">%S"); +_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]"); +_LIT8(KFuncExitFormat8, "<%S"); + +_LIT(KPanicCategory, "headsetS"); +_LIT8(KPanicPrefix8, "PANIC code "); +_LIT8(KLeavePrefix8, "LEAVE code "); +#endif + +#endif // HEADSET_DEBUGCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/finder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/finder.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,141 @@ +/* +* Copyright (c) 2004-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: Hid headset field finder + * +*/ + +#ifndef T_FINDER_H +#define T_FINDER_H + +#include +#include "hidreportroot.h" + +/** + * Headset finder + * + * Field finder for the consumer/multimedia keys field. + * + */ +class THeadsetFinder : public MHidFieldFinder + { +public: + // From MHidFieldFinder + /** + * From MHidFieldFinder + * Called by THidFieldSearch::SearchL() during traversal of the + * report descriptor tree when a CCollection is encountered. It + * will be called once, and only once, for every CCollection in the + * descriptor. It is not called for the root collection + * (the CReportRoot). + * + * @param aCollection A pointer to the collection object. + * @return ETrue if the contents of this collection (any child CField + * or CCollection objects) should be examined. A driver would return + * EFalse if a collection was not of a compatible type, for + * example if the usage page was inappropriate. + */ + virtual TBool BeginCollection( const CCollection *aCollection ); + + /** + * From MHidFieldFinder + * Called by THidFieldSearch::SearchL() during traversal of the + * report descriptor tree when all CFields and child CCollections + * of a CCollection have been examined. It will be called once, + * and only once, for every CCollection in the descriptor. It is + * not called for the root collection (the CReportRoot). + * + * @param aCollection Collection pointer + * @return ETrue if the search (tree traversal) should + * continue. A driver returns EFalse if it has finished examining + * the whole descriptor, in general this will be if it has + * established that it is compatible with the report descriptor. + */ + virtual TBool EndCollection( const CCollection *aCollection ); + + /** + * From MHidFieldFinder + * Called once for each CField in a CCollection by + * THidFieldSearch::SearchL() during the traversal of a report + * descriptor tree. + * + * @param aField THe pointer to field + */ + virtual void Field( const CField* aField ); + +public: + + /** + * Constructor + */ + THeadsetFinder(); + + /** + * Check whether supported fields has been found. + * + * @return ETrue if it has. + */ + TBool Found() const; + + /** + * Check whether a given field contains the consumer usages. + * + * @param aField Pointer to the field to test. + * @return ETrue if it does. + */ + TBool IsConsumer( const CField* aField ) const; + + /** + * Check whether a given field contains the telephony usages. + * + * @param aField Pointer to the field to test. + * @return ETrue if it does. + */ + TBool IsTelephony( const CField* aField ) const; + + /** + * Reset the field pointer array + * + */ + void EmptyList(); + + /** + * Returns number of supported fields. + * + * @return Field count + */ + TInt FieldCount(); + + /** + * Read the field pointer from array at specified index + * + * @param aIndex Index to the field pointer array + * @return Pointer to the desired field + */ + CField* GetFieldAtIndex( TInt aIndex ); + +private: + + /** + * Pointer to the top level application collection being searched. + * Not own. + */ + const CCollection* iAppCollection; + + /** + * Array of field pointers: + * Not own. + */ + RPointerArray iFieldList; + }; +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/headset.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/headset.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,523 @@ +/* +* Copyright (c) 2004-2010 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: Hid headset driver + * +*/ + + +#ifndef C_HIDHEADSETDRIVER_H +#define C_HIDHEADSETDRIVER_H + +#include +#include +#include +#include +#include +#include +#include +#include "keypresstimer.h" + +class CField; +class CHidHeadsetDriver; +class CTelephony; + +/** + * Scan status + */ +enum TScanStatus + { + EScanNotPressed, EScanPressed, EScanLongPress + }; + +/** + * HID headset driver class + * + * HidDriver interface for handlign headset related + * functionality. + * + */ + +class CHidHeadsetDriver : public CHidDriver, + public MTimerNotifier, + public MMPXPlaybackObserver + { + +private: + /** + * Initialisation states + */ + enum THeadsetDriverState + { + EUninitialised, // Driver has not been initialised + EInitialised, // Driver is initialised + EDisabled + // The driver will not respond to interrupt data + }; + + /** + * Hook handling + */ + enum THookHandling + { + EOnHook, EOffHook, ENoHook + }; +public: + + /** + * Two-phased constructor. + * @param aHid The generic HID layer that requested the driver + */ + static CHidHeadsetDriver* NewL( MDriverAccess* aHid ); + + /** + * Two-phased constructor. + * @param aHid The generic HID layer that requested the driver + */ + static CHidHeadsetDriver* NewLC( MDriverAccess* aHid ); + + /** + * Destructor + */ + virtual ~CHidHeadsetDriver(); + +private: + + // from base class CHidDriver + /** + * From class CHidDriver + * Called by the Generic HID layer to see if the driver can is able to + * use reports from a newly-connected device. Supported hid fields van + * be later request with SupportedFieldCount function + * + * @param aReportRoot HID report descriptor + * @return KErrNone The driver will handle reports from the report + * descriptor and KErrHidUnrecognised The driver cannot + * handle reports from the device + */ + TInt CanHandleReportL( CReportRoot* aReportRoot ); + + /** + * From class CHidDriver + * Called by the Generic HID layer when a device has been removed, prior + * to the driver being removed. This allows the driver to notify any + * applications of disconnection, if required + * + * @param aReason The reason for device disconnection + */ + void Disconnected( TInt aReason ); + + /** + * From class CHidDriver + * Called by the Generic HID layer when data has been received from the + * device handled by this driver. + * + * @param aChannel The channel on which the data was received + * (as defined by the transport layer) + * @param aPayload A pointer to the data buffer + */ + TInt DataIn( CHidTransport::THidChannelType aChannel, + const TDesC8& aPayload ); + + /** + * From class CHidDriver + * Called by the transport layers to inform the generic HID of the + * success of the last Set... command. + * + * @param aCmdAck Status of the last Set... command + */ + void CommandResult( TInt aCmdAck ); + + /** + * From class CHidDriver + * Called after a driver is sucessfully created by the Generic HID, when + * a device is connected + * + * @param aConnectionId An number used to identify the device in + * subsequent calls from the driver to the + * generic HI + */ + void InitialiseL( TInt aConnectionId ); + + /** + * From class CHidDriver + * Resets the internal state of the driver (any pressed keys are released) + * and enables the driver + * + * @param aConnectionId An number used to identify the device in + * subsequent calls from the driver to the + * generic HI + */ + void StartL( TInt aConnectionId ); + + /** + * From class CHidDriver + * Cancels all pressed keys and disables the driver (so it will not + * process interrupt data) + * + */ + void Stop(); + + /** + * From class CHidDriver + * Return count of supported fields + * + * @return Number of supported fields + */ + TInt SupportedFieldCount(); + + /** + * From class CHidDriver + * Set input handling registy + * + * @param aHandlingReg a Input handling registry + */ + void SetInputHandlingReg( CHidInputDataHandlingReg* aHandlingReg ); + + // from base class MTimerNotifier + /** + * From class MTimerNotifier + * The function to be called when a timeout occurs. + * + * @param aTimerType a Type of timer + */ + void TimerExpired( TTimerType aTimerType ); + + /** + * From class MMPXPlaybackObserver + * Handle playback message. + * + * @param aMsg playback message, ownership not transferred. + * Please check aMsg is not NULL before using it. If aErr is not + * KErrNone, plugin might still call back with more info in the + * aMsg. + * @param aErr system error code. + */ + void HandlePlaybackMessage( CMPXMessage* aMsg, TInt /*aErr*/); + +private: + /** + * Constructor + * @param aHid The generic HID layer that requested the driver + */ + CHidHeadsetDriver( MDriverAccess* aHid ); + /** + * ConstructL + */ + void ConstructL(); + +private: + + /** + * Called from within DataIn to handle interrupt and control channel data + * + * @param aPayload a Payload data + * @return error if data can't be handled + */ + TInt InterruptData( const TDesC8& aPayload ); + + /** + * Handles the report + * + * @param aReport HID report descriptor + * @param aField HID field + * @return KErrNotSupported if report can't be handled + */ + TInt HandleReport( const TDesC8& aReport, const CField* aField ); + + /** + * Handles the report + * + * @param aReportTranslator Report Translator + */ + void ReleasePressedKeys( TReportTranslator& aReportTranslator ); + + /** + * Handle hook key pres + * + * @param aStatus Hook key status + */ + void HookKeyPres( TBool aStatus ); + + /** + * Release hook key + * + */ + void ReleaseHookKey(); + + /** + * Get Hook Status + * + * @return hook handling status. + */ + THookHandling HookStatus(); + + /** + * Get alarm status + * + * @return ETrue if ui is showing alarm, EFalse if not. + */ + TBool AlarmStatus(); + + /** + * MusicPlayingStatus + * + * @return ETrue if plyaer is playing, EFalse if not. + */ + TBool MusicPlayingStatus(); + + /** + * HandleNoneHookPress + * Handle hook press when there are phone call is in idle state + * + */ + void HandleNoneHookPressL(); + + /** + * ReleasePressedVolumeKeys + * Release volume keys if they are pressed + * + * @param aReportTranslator HID report translator + */ + void ReleasePressedVolumeKeys( TReportTranslator& aReportTranslator ); + + /** + * ReleasePressedScanKeys + * Release scan keys if they are pressed + * + * @param aReportTranslator HID report report translator + */ + void ReleasePressedScanKeys( TReportTranslator& aReportTranslator ); + /** + * HandleAlarmHookReleaseL + * Handle hook release when phone is alarming + * + */ + void HandleAlarmHookReleaseL(); + + /** + * HandleIdleHookReleaseL + * Handle hook release when phone is not alarming + * and call is in idle state + * + */ + void HandleIdleHookReleaseL(); + + /** + * Handle doubleclick timer expiration + * + */ + void ExpiredDoubleClickTimer(); + + /** + * Handle long press timer expiration + * + */ + void ExpiredLongClickTimer(); + + /** + * Handle scan next pressed + * + */ + void HandleScanNextPressL(); + + /** + * Handle scan prev pressed + * + */ + void HandleScanPrevPressL(); + + /** + * Handle scan next release + * + * @param aKeyCode a Key id + * @param aValue a Key value + */ + void HandleScanNextRelease( TUint& aKeyCode, TInt& aValue ); + + /** + * Handle scan previous release + * + * @param aKeyCode a Key id + * @param aValue a Key value + */ + void HandleScanPreviousRelease( TUint& aKeyCode, TInt& aValue ); + + /** + * Handle telephony usage page + * + * @param aReport a Report translator + * @return KErrNone if report can be handled. + */ + TInt HandleTelephonyUsage( TReportTranslator& aReport ); + + /** + * Handle controller usage page + * + * @param aReport a Report translator + * @return KErrNone if report can be handled. + */ + TInt HandleControlUsage( TReportTranslator& aReport ); + + /** + * Handle volume usage + * + * @param aReport a Report translator + * @return KErrNone if report can be handled. + */ + TInt HandleVolumeUsage( TReportTranslator& aReport ); + +private: + + /** + * The Generic HID layer + * Not own. + */ + MDriverAccess *iGenericHid; + + /** + * Field list array + * Own. + */ + RPointerArray iFieldList; + + /** + * Driver state + */ + THeadsetDriverState iDriverState; + + /** + * Connection id + */ + TInt iConnectionId; + + /** + * Application menu id + */ + TInt iAppMenuId; + + /** + * On hook status + */ + TBool iOnHookPressed; + + /** + * Off hook + */ + TBool iOffHookPressed; + + /** + * No active calls + */ + TBool iNoneHookPressed; + + /** + * Telephony service + * Own. + */ + CTelephony* iTelephony; + + /** + * Double click timer + * Own. + */ + CKeyPressTimer* iDoubleClicktimer; + + /** + * Long click timer + * Own. + */ + CKeyPressTimer* iLongClicktimer; + + /** + * Long click timer + */ + TBool iLongPress; + + /** + * Alarm server session + */ + RASCliSession iAlarmServerSession; + + /** + * Incoming call status + */ + TBool iIncomingCallStatus; + + /** + * Alarm statusd + */ + TBool iAlarmStatus; + + /** + * Music player utility + * Own. + */ + MMPXPlaybackUtility* iMusicPlayer; + + /** + * Playing status + */ + TBool iPlayingStatus; + + /** + * Double next Click status + */ + TBool iDoubleNextClick; + + /** + * Count of supported fields + */ + TInt iSupportedFieldCount; + + /** + * Volume up key pressed down + */ + TBool iVolumeUpPressed; + + /** + * Volume down key pressed down + */ + TBool iVolumeDownPressed; + + /** + * Forward press status + */ + TScanStatus iForwardStatus; + + /** + * Backward press status + */ + TScanStatus iBackwardStatus; + + /** + * Scan next timer + * Own. + */ + CKeyPressTimer* iScanNextTimer; + + /** + * Scan previous timer + * Own. + */ + CKeyPressTimer* iScanPreviousTimer; + + /** + * Input handling reg + * Not own. + */ + CHidInputDataHandlingReg* iInputHandlingReg; + + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/headsetuids.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/headsetuids.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2004-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: Hid headset driver + * +*/ + + +#ifndef HEADSETUIDS_H +#define HEADSETUIDS_H + +#define ECOM_UID 0x10009d8d +#define REMCON_PLUGIN_IF 0x10204546 +#define HEADSET_UID 0x10282c15 +#define HEADSET_DRIVER_IMP 0x10282c16 +#define HIDREMCON_UID 0x10282c17 +#define HIDREMCON_IMP 0x10282c18 +#define DRIVER_PLUGIN_IF 0x10201d26 + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/keypresstimer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/keypresstimer.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2004-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: Hid timeout timer + * +*/ + +#ifndef C_KEYPRESSTIMER_H +#define C_KEYPRESSTIMER_H + +#include + +enum TTimerType + { + EDoubleClickTimer, + ELongPressTimer, + EScanNextPressTimer, + EScanPrevPressTimer + }; + +/** + * HID headset driver class + * + * This class specifies the function to be called when a timeout occurs. + * Used in conjunction with CTimeOutTimer class + * + */ +class MTimerNotifier + { +public: + /** + * The function to be called when a timeout occurs. + * + * @param aTimerType a Type of timer + */ + virtual void TimerExpired( TTimerType aTimerType ) = 0; + }; + +/** + * HID headset driver class + * + * This class will notify an object after a specified timeout. + * + */ +class CKeyPressTimer : public CTimer + { +public: + /** + * Two-phased constructor. + * @param aTimeOutNotify object to notify of timeout event + * @param aTimeOutTime a Timeout time + * @paran aTimerType a Type of timer + * @return keypress timer + */ + static CKeyPressTimer* NewL( MTimerNotifier* aTimeOutNotify, + TTimeIntervalMicroSeconds32 aTimeOutTime, TTimerType aTimerType ); + + /** + * Two-phased constructor. + * @param aTimeOutNotify object to notify of timeout event + * @param aTimeOutTime a Timeout time + * @paran aTimerType a Type of timer + * @return keypress timer + */ + static CKeyPressTimer* NewLC( MTimerNotifier* aTimeOutNotify, + TTimeIntervalMicroSeconds32 aTimeOutTime, TTimerType aTimerType ); + + /** + * Destructor + */ + virtual ~CKeyPressTimer(); + +protected: + + /** + * From CTimer + * Invoked when a timeout occurs + * + */ + virtual void RunL(); + +private: + + /** + * Constructor + * @param aTimeOutNotify object to notify of timeout event + * @paran aTimerType a Type of timer + */ + CKeyPressTimer( MTimerNotifier* aTimeOutNotify, TTimerType aTimerType ); + /** + * Two-phased constructor. + * @param aTimeOutTime a Timeout time + */ + void ConstructL( TTimeIntervalMicroSeconds32 aTimeOutTime ); + +private: + // Member variables + + /** + * The observer for this objects events + * Not own. + */ + MTimerNotifier* iNotify; + + /** + * Type of timer + */ + TTimerType iTimerType; + }; +#endif // C_KEYPRESSTIMER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/inc/prjconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/inc/prjconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2006-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: Project configure file. + * +*/ + + +#ifndef PRJCONFIG_H +#define PRJCONFIG_H + +/** + * Traces are enabled via RDebug::Print() in UDEB build, by default. + */ +#ifdef _DEBUG +#define PRJ_ENABLE_TRACE +#endif + +/** + * Traces will be written to file if this is defined. + */ +//#define PRJ_FILE_TRACE + + +/** + * build the project for module test purpose if this is defined + */ +//#define PRJ_MODULETEST_BUILD + +/** + * build the project using stubs to replace the dependencies if this is defined + */ +//#define PRJ_USE_STUB + +#endif // OBEXSM_PRJCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/rom/hidheadset.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/rom/hidheadset.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2008-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: Image description file for project generichid +* +*/ + + +#ifndef HIDHEADSET_IBY__ +#define HIDHEADSET_IBY__ + +ECOM_PLUGIN(hidheadset.dll, hidheadset.rsc) +ECOM_PLUGIN(hidremconbearer.dll, hidremconbearer.rsc) + + +#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/src/finder.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/src/finder.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,244 @@ +/* +* Copyright (c) 2004-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: Generic hid finder implementation + * +*/ + + +#include +#include + +#include "finder.h" +#include "debug.h" + +// ---------------------------------------------------------------------- + +// Define this for additional debug output (this file only): +#define EXTRA_DEBUG + +#ifdef EXTRA_DEBUG +#define DBG(a) a; +#else +#define DBG(a) +#endif + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// THeadsetFinder() +// --------------------------------------------------------------------------- +// +THeadsetFinder::THeadsetFinder() : + iAppCollection( 0 ), iFieldList() + { + // Nothing else to do + } + +// -------------------------------------------------------------------------- +// From class MHidFieldFinder +// BeginCollection() +// -------------------------------------------------------------------------- +// +TBool THeadsetFinder::BeginCollection( const CCollection* aCollection ) + { + TBool examineCollection = ETrue; + + const TInt KConsumerControl = 0x01; + + // Only look at top-level application (consumer devices: consumer + // control) collections: + // + + if ( ( aCollection->IsApplication() ) && ( iAppCollection == 0 ) ) + { + // Top-level application collection. + + if ( ( aCollection->UsagePage() == EUsagePageConsumer ) + && ( aCollection->Usage() == KConsumerControl ) ) + { + TRACE_INFO(_L("[HID]\tTHeadsetFinder::BeginCollection: this is \ + consumer collection ")); + // Collection is a consumer device: + iAppCollection = aCollection; + iFieldList.Reset(); + } + else + { + TRACE_INFO(_L("[HID]\tTHeadsetFinder::BeginCollection: not \ + consumer collection")); + // Skip other types of top-level application collection: + examineCollection = EFalse; + } + } + return examineCollection; + + } + +// --------------------------------------------------------------------------- +// From class MHidFieldFinder +// EndCollection() +// --------------------------------------------------------------------------- +// +TBool THeadsetFinder::EndCollection( const CCollection* aCollection ) + { + TBool continueSearch = ETrue; + + TRACE_INFO(_L("[HID]\tTHeadsetFinder::EndCollection")); + if ( aCollection == iAppCollection ) + { + // Top-level application(Consumer Devices:Consumer Control) finished: + // + iAppCollection = 0; + + // Stop if we've found a device we can use in this + // application collection: + // + continueSearch = !Found(); + } + + return continueSearch; + } + +// --------------------------------------------------------------------------- +// From class MHidFieldFinder +// Field() +// --------------------------------------------------------------------------- +// +void THeadsetFinder::Field( const CField* aField ) + { + TRACE_INFO((_L("[HID]\tTHeadsetFinder::Field( 0x%08x)"),aField)); + TInt error = KErrNone; + if ( iAppCollection ) + { + + if ( IsTelephony( aField ) ) + { + TRACE_INFO((_L("[HID]\tTHeadsetFinder::Field, telephony"))); + error = iFieldList.Append( aField ); + if ( error != KErrNone ) + { + TRACE_INFO((_L("[HID]\tTHeadsetFinder::Field, telephony \ + failed"))); + } + } + else if ( IsConsumer( aField ) ) + { + TRACE_INFO(_L("[HID]\tTHeadsetFinder::Field, consumer")); + error = iFieldList.Append( aField ); + if ( error != KErrNone ) + { + TRACE_INFO((_L("[HID]\tTHeadsetFinder::Field, telephony \ + failed"))); + } + } + else + { + TRACE_INFO(_L("[HID]\tTHeadsetFinder::Field, other, or empty \ + field")); + } + } + } + +// --------------------------------------------------------------------------- +// IsConsumer() +// --------------------------------------------------------------------------- +// +TBool THeadsetFinder::IsConsumer( const CField* aField ) const + { + TBool found = EFalse; + + if ( aField->IsInput() && aField->IsData() && ( aField->UsagePage() + == EUsagePageConsumer ) ) + { +#ifdef _DEBUG + for ( TInt i = 0; i < aField->UsageCount(); i++ ) + { + TRACE_INFO((_L("[HID]\tTHeadsetFinder::IsConsumer: Usage %d: \ + %02x"),i,aField->Usage(i))); + } +#endif + // *** Add usage test here *** + TRACE_INFO(_L("[HID]\tTHeadsetFinder::IsConsumer: Consumer keys \ + field found\r\n")); + found = ETrue; + } + return found; + } + +// --------------------------------------------------------------------------- +// IsTelephony() +// --------------------------------------------------------------------------- +// +TBool THeadsetFinder::IsTelephony( const CField* aField ) const + { + TBool found = EFalse; + + if ( aField->IsInput() && aField->IsData() && ( aField->UsagePage() + == EUsagePageTelephony ) ) + { + const TInt KHookSwitch = 0x20; + const TInt KPhoneMute = 0x2F; +#ifdef _DEBUG + for ( TInt i = 0; i < aField->UsageCount(); i++ ) + { + TRACE_INFO((_L("[HID]\tTHeadsetFinder::IsTelephony: \ + Usage %d: %02x"),i,aField->Usage(i))); + } +#endif + if ( ( aField->UsageMin() <= KPhoneMute ) && ( aField->UsageMax() + >= KHookSwitch ) ) + { + TRACE_INFO(_L("[HID]\tTHeadsetFinder::IsTelephony: Telephony \ + field found")); + found = ETrue; + } + } + return found; + } + +// --------------------------------------------------------------------------- +// EmptyList() +// --------------------------------------------------------------------------- +// +void THeadsetFinder::EmptyList() + { + iFieldList.Reset(); + } + +// --------------------------------------------------------------------------- +// FieldCount() +// --------------------------------------------------------------------------- +// +TInt THeadsetFinder::FieldCount() + { + return iFieldList.Count(); + } + +// --------------------------------------------------------------------------- +// GetFieldAtIndex() +// --------------------------------------------------------------------------- +// +CField* THeadsetFinder::GetFieldAtIndex( TInt aIndex ) + { + return iFieldList[aIndex]; + } + +// --------------------------------------------------------------------------- +// Found() +// --------------------------------------------------------------------------- +// +TBool THeadsetFinder::Found() const + { + return ( iFieldList.Count() != 0 ); + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/src/headset.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/src/headset.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1222 @@ +/* +* Copyright (c) 2004-2010 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: Generic hid implementation + * +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef NO101APPDEPFIXES +#include +#else //NO101APPDEPFIXES +const TUid KPSUidAlarmExtCntl = { 0x102072D4 }; // reusing an AlarmUI dll UID +const TUint32 KAlarmStopKey = 0x00000001; +enum TAlarmUIStopAlarm + { + EAlarmUIStopAlarmUninitialized = 0, + EAlarmUIStopAlarm + }; +const TUint32 KAlarmSnoozeKey = 0x00000002; +enum TAlarmUISnoozeAlarm + { + EAlarmUISnoozeAlarmUninitialized = 0, + EAlarmUISnoozeAlarm + }; +#endif //NO101APPDEPFIXES + +#include +#include +#include + +#include "hidremconbearerinternalpskeys.h" +#include "hidremconbearerscancodes.h" +#include "headset.h" +#include "finder.h" + +#include "debug.h" + +const TInt KHidUndefinedKeyCode = 0; +const TInt KHidNotSetKeyValue = 0; +const TInt KDoubleClickTimeout = 900000; // 0,9 seconds +const TInt KDoubleClickTimeoutRing = 500000; // 0,5 seconds +const TInt KScanClickTimeout = 500000; // 0,5 seconds +const TInt KLongClickTimeout = 3000000; // 3 seconds + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CHidHeadsetDriver() +// --------------------------------------------------------------------------- +// +CHidHeadsetDriver::CHidHeadsetDriver( MDriverAccess* aGenericHid ) : + iGenericHid( aGenericHid ), iFieldList(), iDriverState( EUninitialised ), + iConnectionId( 0 ), iSupportedFieldCount( 0 ), iForwardStatus( + EScanNotPressed ), iBackwardStatus( EScanNotPressed ) + { + TRACE_FUNC_ENTRY_THIS + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CHidHeadsetDriver* CHidHeadsetDriver::NewLC( MDriverAccess* aGenericHid ) + { + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::NewLC(0x%08x)"), aGenericHid)); + CHidHeadsetDriver* self = new ( ELeave ) CHidHeadsetDriver( aGenericHid ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CHidHeadsetDriver* CHidHeadsetDriver::NewL( MDriverAccess* aGenericHid ) + { + CHidHeadsetDriver* self = CHidHeadsetDriver::NewLC( aGenericHid ); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ConstructL() + { + TRACE_FUNC_THIS + iTelephony = CTelephony::NewL(); + User::LeaveIfError( iAlarmServerSession.Connect() ); + iMusicPlayer = MMPXPlaybackUtility::UtilityL( KPbModeActivePlayer ); + iMusicPlayer->AddObserverL( *this ); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CHidHeadsetDriver::~CHidHeadsetDriver() + { + TRACE_FUNC_THIS + iAlarmServerSession.Close(); + delete iTelephony; + iFieldList.Reset(); + iFieldList.Close(); + delete iDoubleClicktimer; + if ( iMusicPlayer ) + { + iMusicPlayer->Close(); + } + delete iScanPreviousTimer; + delete iScanNextTimer; + delete iLongClicktimer; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// StartL() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::StartL( TInt /*aConnectionId*/) + { + TRACE_FUNC + // Ready to process headset events: + iDriverState = EInitialised; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// InitialiseL() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::InitialiseL( TInt aConnectionId ) + { + TRACE_FUNC + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::InitialiseL(%d)"), + aConnectionId)); + // Store the connection ID: + iConnectionId = aConnectionId; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// Stop() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::Stop() + { + TRACE_FUNC + iDriverState = EDisabled; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// DataIn() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::DataIn( CHidTransport::THidChannelType aChannel, + const TDesC8& aPayload ) + { + TInt retVal = KErrNone; + switch ( aChannel ) + { + case CHidTransport::EHidChannelInt: + if ( EInitialised == iDriverState ) + { + retVal = InterruptData( aPayload ); + } + break; + + case CHidTransport::EHidChannelCtrl: + retVal = KErrNotSupported; + break; + + default: + retVal = KErrNotSupported; + break; + } + return retVal; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// CommandResult() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::CommandResult( TInt /*aCmdAck*/) + { + // No implementation as we don't issue any requests to be acknowledged + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// Disconnected() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::Disconnected( TInt aReason ) + { + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::Disconnected(%d)"), aReason)); + aReason = aReason; + Stop(); + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// SetInputHandlingReg() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::SetInputHandlingReg( + CHidInputDataHandlingReg* aHandlingReg ) + { + iInputHandlingReg = aHandlingReg; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// InterruptData() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::InterruptData( const TDesC8& aPayload ) + { + // If the report has a report ID, it is in the first byte. + // If not, this value is ignored (see CField::IsInReport()). + // + TInt retVal = KErrNone; + TInt ret = KErrNotSupported; + TInt firstByte = aPayload[0]; + + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::InterruptData(), report \ + 0x%x (%d), length %d"),firstByte, firstByte, aPayload.Length())); + + if ( iFieldList.Count() == 0 ) + { + retVal = KErrNotSupported; + } + for ( TInt i = 0; i < iFieldList.Count(); i++ ) + { + if ( iFieldList[i]->IsInReport( firstByte ) ) + { + ret = HandleReport( aPayload, iFieldList[i] ); + if ( ret == KErrNone ) + { + retVal = KErrNone; + } + } + else + { + retVal = KErrNotSupported; + } + } + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleReport() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::HandleReport( const TDesC8& aReport, + const CField* aField ) + { + TRACE_FUNC_ENTRY + TReportTranslator report( aReport, aField ); + TInt retVal = KErrNotSupported; + + // release if key if it pressed and relased + ReleasePressedKeys( report ); + + if ( HandleTelephonyUsage( report ) == KErrNone ) + { + retVal = KErrNone; + } + + if ( HandleControlUsage( report ) == KErrNone ) + { + retVal = KErrNone; + } + + if ( HandleVolumeUsage( report ) == KErrNone ) + { + retVal = KErrNone; + } + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleTelephonyUsage() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::HandleTelephonyUsage( TReportTranslator& aReport ) + { + TRACE_FUNC_ENTRY + TInt retVal = KErrNotSupported; + TInt hookSwitch = 0; + TInt mute = 0; + TInt poc = 0; + + // P&S key variables + TUint key = KHidUndefinedKeyCode; + TInt value = KHidNotSetKeyValue; + + if ( aReport.GetValue( mute, ETelephonyUsagePhoneMute ) == KErrNone + && mute == 1 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send mute \ + command")); + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageTelephony, + ETelephonyUsagePhoneMute ) ) + { + key = KHidMuteKeyEvent; + value = KPSMuteClicked; + iInputHandlingReg->AddHandledEvent( EUsagePageTelephony, + ETelephonyUsagePhoneMute ); + } + } + else if ( aReport.GetValue( hookSwitch, ETelephonyUsageHookSwitch ) + == KErrNone && hookSwitch == 1 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send hook \ + switch command (disabled)")); + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageTelephony, + ETelephonyUsageHookSwitch ) ) + { + HookKeyPres( ETrue ); + iInputHandlingReg->AddHandledEvent( EUsagePageTelephony, + ETelephonyUsageHookSwitch ); + } + } + else if ( aReport.GetValue( poc, ETelephonyUsagePoC ) == KErrNone && poc + == 1 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send PoC \ + command (disabled)")); + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageTelephony, + ETelephonyUsagePoC ) ) + { + key = KHidMuteKeyEvent; + value = KPSMuteClicked; + iInputHandlingReg->AddHandledEvent( EUsagePageTelephony, + ETelephonyUsagePoC ); + } + } + if ( key != KHidUndefinedKeyCode && value != KHidNotSetKeyValue ) + { + TInt err = RProperty::Set( KPSUidHidEventNotifier, key, value ); + retVal = KErrNone; + } + + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleTelephonyUsage() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::HandleControlUsage( TReportTranslator& aReport ) + { + TRACE_FUNC_ENTRY + TInt retVal = KErrNotSupported; + TInt playPause = 0; + TInt scanNext = 0; + TInt scanPrev = 0; + TInt stop = 0; + + // P&S key variables + TUint key = KHidUndefinedKeyCode; + TInt value = KHidNotSetKeyValue; + + if ( aReport.GetValue( playPause, EConsumerUsagePlayPause ) == KErrNone + && playPause ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsagePlayPause ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send \ + play/pause command (currently only play)")); + key = KHidControlKeyEvent; + value = EPlayClicked; + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsagePlayPause ); + } + } + else if ( aReport.GetValue( scanNext, EConsumerUsageScanNext ) + == KErrNone && scanNext ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsageScanNext ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send \ + scan next command")); + TRAP_IGNORE( HandleScanNextPressL() ); + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsageScanNext ); + } + } + else if ( aReport.GetValue( scanPrev, EConsumerUsageScanPrev ) + == KErrNone && scanPrev ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsageScanPrev ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Scan \ + prev command")); + TRAP_IGNORE( HandleScanPrevPressL()); + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsageScanPrev ); + } + } + else if ( aReport.GetValue( stop, EConsumerUsageStop ) == KErrNone + && stop ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsageStop ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send \ + stop command")); + key = KHidControlKeyEvent; + value = EStopClicked; + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsageScanPrev ); + } + } + if ( key != KHidUndefinedKeyCode && value != KHidNotSetKeyValue ) + { + TInt err = RProperty::Set( KPSUidHidEventNotifier, key, value ); + retVal = KErrNone; + } + + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleVolumeUsage() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::HandleVolumeUsage( TReportTranslator& aReport ) + { + TRACE_FUNC_ENTRY + TInt retVal = KErrNotSupported; + + TInt volUp = 0; + TInt volDown = 0; + TInt speakermute = 0; + + // P&S key variables + TUint key = KHidUndefinedKeyCode; + TInt value = KHidNotSetKeyValue; + + if ( aReport.GetValue( volUp, EConsumerUsageVolumeInc ) == KErrNone + && volUp ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsageVolumeInc ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): \ + Send volume up command")); + key = KHidAccessoryVolumeEvent; + iVolumeUpPressed = ETrue; + value = KPSVolumeUpPressed; + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsageScanPrev ); + } + } + else if ( aReport.GetValue( volDown, EConsumerUsageVolumeDec ) + == KErrNone && volDown ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsageVolumeDec ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send \ + volume down command")); + key = KHidAccessoryVolumeEvent; + iVolumeDownPressed = ETrue; + value = KPSVolumeDownPressed; + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsageVolumeDec ); + } + } + else if ( ( aReport.GetValue( speakermute, EConsumerUsageMute ) + == KErrNone && speakermute == 1 ) ) + { + if ( iInputHandlingReg->AllowedToHandleEvent( EUsagePageConsumer, + EConsumerUsageMute ) ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Send \ + mute command")); + key = KHidMuteKeyEvent; + value = KPSMuteClicked; + iInputHandlingReg->AddHandledEvent( EUsagePageConsumer, + EConsumerUsageMute ); + } + } + + if ( key != KHidUndefinedKeyCode && value != KHidNotSetKeyValue ) + { + TInt err = RProperty::Set( KPSUidHidEventNotifier, key, value ); + retVal = KErrNone; + } + + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// HandleScanNextPressL() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleScanNextPressL() + { + TRACE_FUNC_ENTRY + iForwardStatus = EScanPressed; + + delete iScanNextTimer; + iScanNextTimer = NULL; + + /** + * Scan key has two different behaviour if you are short click buttun or long + * click button. In short press next track command is sent and whit long press + * is sending seek forward command. iScanNextTimer is used to detect if click + * is long click or short click. + */ + + iScanNextTimer = CKeyPressTimer::NewL( this, TTimeIntervalMicroSeconds32( + KScanClickTimeout ), EScanNextPressTimer ); + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// HandleScanNextPressL() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleScanPrevPressL() + { + TRACE_FUNC_ENTRY + iBackwardStatus = EScanPressed; + + delete iScanPreviousTimer; + iScanPreviousTimer = NULL; + + /** + * Scan key has two different behaviour if you are short click buttun or + * long click button. In short press previous track command is sent and + * whit long press is sending seek forward command. iScanPreviousTimer + * is used to detect if click is long click or short click. + */ + iScanPreviousTimer = CKeyPressTimer::NewL( this, + TTimeIntervalMicroSeconds32( KScanClickTimeout ), + EScanPrevPressTimer ); + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// ReleasePressedVolumeKeys +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ReleasePressedVolumeKeys( + TReportTranslator& aReportTranslator ) + { + TInt volUp = 0; + TInt volDown = 0; + TUint key = KHidUndefinedKeyCode; + TInt value = KHidNotSetKeyValue; + + if ( iVolumeUpPressed ) + { + if ( aReportTranslator.GetValue( volUp, EConsumerUsageVolumeInc ) + == KErrNone && volDown == 0 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::ReleasepressedKeys(): \ + Volume up released")); + key = KHidAccessoryVolumeEvent; + iVolumeUpPressed = EFalse; + value = KPSVolumeUpReleased; + } + } + else if ( iVolumeDownPressed ) + { + if ( aReportTranslator.GetValue( volDown, EConsumerUsageVolumeDec ) + == KErrNone && volDown == 0 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::ReleasepressedKeys(): \ + Volume downkey realeased")); + key = KHidAccessoryVolumeEvent; + iVolumeDownPressed = EFalse; + value = KPSVolumeDownReleased; + } + } + if ( key != KHidUndefinedKeyCode && value != KHidNotSetKeyValue ) + { + TInt err = RProperty::Set( KPSUidHidEventNotifier, key, value ); + + } + } + +// --------------------------------------------------------------------------- +// ReleasePressedScanKeys() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ReleasePressedScanKeys( + TReportTranslator& aReportTranslator ) + { + TInt scanNext = 0; + TInt scanPrev = 0; + TUint key = KHidUndefinedKeyCode; + TInt value = KHidNotSetKeyValue; + + if ( iForwardStatus != EScanNotPressed ) + { + if ( aReportTranslator.GetValue( scanNext, EConsumerUsageScanNext ) + == KErrNone && scanNext == 0 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Scan \ + next command released")); + HandleScanNextRelease( key, value ); + } + } + else if ( iBackwardStatus != EScanNotPressed ) + { + if ( aReportTranslator.GetValue( scanPrev, EConsumerUsageScanPrev ) + == KErrNone && scanPrev == 0 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Scan \ + prev command released")); + HandleScanPreviousRelease( key, value ); + } + } + if ( key != KHidUndefinedKeyCode && value != KHidNotSetKeyValue ) + { + TInt err = RProperty::Set( KPSUidHidEventNotifier, key, value ); + } + } +// --------------------------------------------------------------------------- +// ReleasePressedKeys() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ReleasePressedKeys( + TReportTranslator& aReportTranslator ) + { + TRACE_FUNC_ENTRY + + TInt hookSwitch = 0; + /* + * Check hook key release here, because hook key long press + * is handled different way. + */ + if ( iOnHookPressed || iOffHookPressed || iNoneHookPressed ) + { + if ( aReportTranslator.GetValue( hookSwitch, + ETelephonyUsageHookSwitch ) == KErrNone && hookSwitch == 0 ) + { + ReleaseHookKey(); + } + } + ReleasePressedVolumeKeys( aReportTranslator ); + + ReleasePressedScanKeys( aReportTranslator ); + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// HandleScanNextRelease() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleScanNextRelease( TUint& aKeyCode, TInt& aValue ) + { + TRACE_FUNC_ENTRY + aKeyCode = KHidControlKeyEvent; + if ( iForwardStatus == EScanPressed ) + { + aValue = EForwardClicked; + } + else //long press + { + aValue = EFastForwardReleased; + } + iForwardStatus = EScanNotPressed; + + delete iScanNextTimer; + iScanNextTimer = NULL; + + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// HandleScanPreviousRelease() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleScanPreviousRelease( TUint& aKeyCode, + TInt& aValue ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::HandleReport(): Scan prev \ + command released")); + aKeyCode = KHidControlKeyEvent; + if ( iBackwardStatus == EScanPressed ) + { + aValue = EBackwardClicked; + } + else //long press + { + aValue = ERewindReleased; + } + iBackwardStatus = EScanNotPressed; + + delete iScanPreviousTimer; + iScanPreviousTimer = NULL; + + TRACE_FUNC_EXIT + } +// --------------------------------------------------------------------------- +// HookKeyPres() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HookKeyPres( TBool aStatus ) + { + TRACE_FUNC_ENTRY + + THookHandling hookStatus = HookStatus(); + if ( !iAlarmStatus ) + { + iAlarmStatus = AlarmStatus(); + } + + iPlayingStatus = MusicPlayingStatus(); + + if ( aStatus ) + { + switch ( hookStatus ) + { + case EOnHook: + if ( !iIncomingCallStatus ) + { + // For the first click, trigger the timer + // single click is handled in ExpiredDoubleClickTimer + if ( iDoubleClicktimer ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + } + TRAP_IGNORE( iDoubleClicktimer = CKeyPressTimer::NewL( this, + TTimeIntervalMicroSeconds32( KDoubleClickTimeoutRing ), + EDoubleClickTimer ) ); + if ( iDoubleClicktimer ) + { + iIncomingCallStatus = ETrue; + } + else // If fail to create timer, handle as single click, + // for double click case, the next click will hang off + { + iIncomingCallStatus = EFalse; + iOnHookPressed = ETrue; + } + break; // switch + } + else + { + iIncomingCallStatus = EFalse; + if ( iDoubleClicktimer ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + } + // This is the double click case, handle as EOffHook + } + // No break here + case EOffHook: + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook Off Pressed")); + iOffHookPressed = ETrue; + break; + case ENoHook: + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook None Pressed")); + TRAP_IGNORE( HandleNoneHookPressL() ); + break; + default: + TRACE_INFO(_L("CHidHeadsetDriver::HookKeyPres : Not \ + supported")); + } + } + else + { + ReleaseHookKey(); + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// ReleaseHookKey() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ReleaseHookKey() + { + TRACE_FUNC_ENTRY + + if ( iOnHookPressed ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook On released")); + iOnHookPressed = EFalse; + // Incoming call + RProperty::Set( KPSUidHidEventNotifier, KHidHookKeyEvent, + KPSAnsweClicked ); + } + if ( iOffHookPressed ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook Off released")); + iOffHookPressed = EFalse; + // Disconnect connected call + RProperty::Set( KPSUidHidEventNotifier, KHidHookKeyEvent, + KPSHangUpClicked ); + } + if ( iNoneHookPressed && !iAlarmStatus ) + { + TRAP_IGNORE( HandleIdleHookReleaseL() ); + } + if ( iNoneHookPressed && iAlarmStatus ) + { + TRAP_IGNORE( HandleAlarmHookReleaseL() ); + } + if ( iLongClicktimer ) + { + iLongPress = EFalse; + } + delete iLongClicktimer; + iLongClicktimer = NULL; + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// HandleNoneHook() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleNoneHookPressL() + { + TRACE_FUNC_ENTRY + /** Start long press timer is alarm is ongoing, or phone + * is not alarming and thre are no hook key press whitout + * release + */ + if ( iAlarmStatus || ( !iNoneHookPressed && !iAlarmStatus ) ) + { + iNoneHookPressed = ETrue; + iLongPress = EFalse; + + delete iLongClicktimer; + iLongClicktimer = NULL; + + iLongClicktimer = CKeyPressTimer::NewL( this, + TTimeIntervalMicroSeconds32( KLongClickTimeout ), + ELongPressTimer ); + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// HandleAlarmHookReleaseL() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleAlarmHookReleaseL() + { + TRACE_FUNC_ENTRY + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook None released")); + /** + * Hook key is released when there is active alarm. Start double + * click timer for monitoring double click. + */ + if ( !iDoubleClicktimer && !iLongPress ) + { + iDoubleClicktimer = CKeyPressTimer::NewL( this, + TTimeIntervalMicroSeconds32( KDoubleClickTimeout ), + EDoubleClickTimer ); + } + /** + * Stot alar when hook key is pressed long time during alarm. + */ + else if ( iLongPress ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Stop alarm")); + RProperty::Set( KPSUidAlarmExtCntl, KAlarmStopKey, + EAlarmUIStopAlarm ); + iAlarmStatus = EFalse; + iLongPress = EFalse; + } + /** + * Double click timer exsist and is it not long press, so + * this is double click release. Then snooze alarm. + */ + else if ( !iLongPress ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + iAlarmStatus = EFalse; + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Snooze")); + RProperty::Set( KPSUidAlarmExtCntl, KAlarmSnoozeKey, + EAlarmUISnoozeAlarm ); + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// HandleIdleHookReleaseL +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandleIdleHookReleaseL() + { + TRACE_FUNC_ENTRY + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Hook None released")); + iNoneHookPressed = EFalse; + /** + * Hook key is released when there is music playing ongoing. Start double + * click timer for monitoring double click. + */ + if ( !iDoubleClicktimer && !iLongPress ) + { + iDoubleClicktimer = CKeyPressTimer::NewL( this, + TTimeIntervalMicroSeconds32( KDoubleClickTimeout ), + EDoubleClickTimer ); + } + /** + * Hook key is released when there is not music playing ongoing. + * Because double click timer is active this is second release in + * short beriod and redial needs to be issued. + */ + else if ( !iLongPress && !iPlayingStatus ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver Redial")); + RProperty::Set( KPSUidHidEventNotifier, KHidHookKeyEvent, + KPSRedial ); + } + /** + * Hook key is released when there is music playing ongoing. + * Because double click timer is active, is send forward command sent + * and DoubleNextClick set to true for sending next command. + */ + else if ( iPlayingStatus && !iLongPress ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver next after next")); + if ( !iLongPress ) + { + iDoubleNextClick = ETrue; //set to true and when player change + //track press next again + } + RProperty::Set( KPSUidHidEventNotifier, KHidControlKeyEvent, + EForwardClicked ); //next after next + } + /** + * Long press release when there are no actie calls, alarms, and music + * playing is stopped, activates voice dialing. + */ + else if ( iLongPress ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver VoiceDial")); + RProperty::Set( KPSUidHidEventNotifier, KHidHookKeyEvent, + KPSVoiceDial ); + iLongPress = EFalse; + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// GetHookStatus() +// --------------------------------------------------------------------------- +// +CHidHeadsetDriver::THookHandling CHidHeadsetDriver::HookStatus() + { + TRACE_FUNC_ENTRY + THookHandling retVal = EOffHook; + TInt ret = KErrNone; + CTelephony::TCallStatusV1 callStatusV1; + CTelephony::TCallStatusV1Pckg callStatusV1Pckg( callStatusV1 ); + ret = iTelephony->GetLineStatus( CTelephony::EVoiceLine, + callStatusV1Pckg ); + if ( ret != KErrNone ) + { + retVal = ENoHook; + } + CTelephony::TCallStatus voiceLineStatus = callStatusV1.iStatus; + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver GetHookStatus voiceline \ + status %d"), voiceLineStatus)); + + if ( voiceLineStatus == CTelephony::EStatusHold || voiceLineStatus + == CTelephony::EStatusRinging ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver GetHookStatus on hook")); + retVal = EOnHook; + } + else if ( voiceLineStatus == CTelephony::EStatusUnknown + || voiceLineStatus == CTelephony::EStatusIdle ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver GetHookStatus no hook")); + retVal = ENoHook; + } + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// CanHandleReportL() +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::CanHandleReportL( CReportRoot* aReportRoot ) + { + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::CanHandleReport(0x%08x)"), + aReportRoot)); + + THidFieldSearch search; + + THeadsetFinder headsetFinder; + search.SearchL( aReportRoot, &headsetFinder ); + + iSupportedFieldCount = headsetFinder.FieldCount(); + for ( TInt i = 0; i < headsetFinder.FieldCount(); i++ ) + { + User::LeaveIfError( iFieldList.Append( headsetFinder.GetFieldAtIndex( + i ) ) ); + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::CanHandleReportL, field \ + pointer: 0x%08x"), iFieldList[i])); + } + + TInt valid = KErrHidUnrecognised; + + if ( headsetFinder.Found() ) + { + valid = KErrNone; + } + // empty finder's field list before going out of scope. + headsetFinder.EmptyList(); + + TRACE_INFO((_L("[HID]\tCHidHeadsetDriver::CanHandleReport() returning \ + %d"), valid)); + return valid; + } + +// --------------------------------------------------------------------------- +// From class CHidDriver +// SupportedFieldCount +// --------------------------------------------------------------------------- +// +TInt CHidHeadsetDriver::SupportedFieldCount() + { + return iSupportedFieldCount; + } +// --------------------------------------------------------------------------- +// From class MTimerNotifier +// TimerExpired() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::TimerExpired( TTimerType aTimerType ) + { + TRACE_FUNC_ENTRY + switch ( aTimerType ) + { + case EDoubleClickTimer: + ExpiredDoubleClickTimer(); + break; + case ELongPressTimer: + ExpiredLongClickTimer(); + break; + case EScanNextPressTimer: + iForwardStatus = EScanLongPress; + RProperty::Set( KPSUidHidEventNotifier, KHidControlKeyEvent, + EFastForwardPressed ); + break; + case EScanPrevPressTimer: + iBackwardStatus = EScanLongPress; + RProperty::Set( KPSUidHidEventNotifier, KHidControlKeyEvent, + ERewindPressed ); + break; + default: + TRACE_INFO(_L("CHidHeadsetDriver::TimerExpired : Not supported")) + ; + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// ExpiredDoubleClickTimer() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ExpiredDoubleClickTimer() + { + TRACE_FUNC_ENTRY + if ( iDoubleClicktimer ) + { + delete iDoubleClicktimer; + iDoubleClicktimer = NULL; + + if ( iIncomingCallStatus ) + { + iIncomingCallStatus = EFalse; + iOnHookPressed = ETrue; + ReleaseHookKey(); + } + if ( iAlarmStatus ) + { + RProperty::Set( KPSUidAlarmExtCntl, KAlarmStopKey, + EAlarmUIStopAlarm ); + iAlarmStatus = EFalse; + } + if ( iPlayingStatus ) + { + RProperty::Set( KPSUidHidEventNotifier, KHidControlKeyEvent, + EForwardClicked ); + iPlayingStatus = EFalse; + } + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// ExpiredLongClickTimer() +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::ExpiredLongClickTimer() + { + TRACE_FUNC_ENTRY + if ( iLongClicktimer ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::TimerExpired long click")); + delete iLongClicktimer; + iLongClicktimer = NULL; + iLongPress = ETrue; + ReleaseHookKey(); + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// AlarmStatus() +// --------------------------------------------------------------------------- +// +TBool CHidHeadsetDriver::AlarmStatus() + { + TRACE_FUNC_ENTRY + TInt activealarmcount = 0; + TBool retVal = EFalse; + activealarmcount = iAlarmServerSession.AlarmCountByState( + EAlarmStateNotifying ); + if ( activealarmcount > 0 ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::AlarmStatus active alarms")); + retVal = ETrue; + } + else + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::AlarmStatus no active \ + alarms")); + retVal = EFalse; + } + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// AlarmStatus() +// --------------------------------------------------------------------------- +// +TBool CHidHeadsetDriver::MusicPlayingStatus() + { + TRACE_FUNC_ENTRY + TBool retVal = EFalse; + TMPXPlaybackState state = EPbStateNotInitialised; + TRAPD( err, state = iMusicPlayer->StateL() ); + if ( state == EPbStatePlaying && err == KErrNone ) + { + TRACE_INFO(_L("[HID]\tCHidHeadsetDriver::MusicPlayingStatus play \ + active")); + retVal = ETrue; + } + TRACE_FUNC_EXIT + return retVal; + } + +// --------------------------------------------------------------------------- +// HandlePlaybackMessage +// --------------------------------------------------------------------------- +// +void CHidHeadsetDriver::HandlePlaybackMessage( CMPXMessage* aMsg, TInt /*aErr*/) + { + TRACE_FUNC_ENTRY + + TMPXMessageId id( aMsg->ValueTObjectL ( + KMPXMessageGeneralId ) ); + // send nect track whit double hook click when track is changed + if ( id == KMPXMessagePbMediaChanged && iDoubleNextClick ) + { + TRACE_INFO(_L("[HID]\tHandlePlaybackMessage: PbMediaChangeg")); + RProperty::Set( KPSUidHidEventNotifier, KHidControlKeyEvent, + EForwardClicked ); + iDoubleNextClick = EFalse; + } + TRACE_FUNC_EXIT + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/src/hidheadsetdriverproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/src/hidheadsetdriverproxy.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2007-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: Heaset plugin implementation table + * +*/ + + +#include +#include +#include "headset.h" +#include "headsetuids.h" + +// Constantshrr +// +const TImplementationProxy KHidHeadsetDriverProxy[] = + { + IMPLEMENTATION_PROXY_ENTRY( HEADSET_DRIVER_IMP, CHidHeadsetDriver::NewL ) + }; + +// --------------------------------------------------------------------------- +// ImplementationGroupProxy +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt& aTableCount ) + { + aTableCount = sizeof( KHidHeadsetDriverProxy ) + / sizeof(TImplementationProxy); + return KHidHeadsetDriverProxy; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/headset/src/keypresstimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/headset/src/keypresstimer.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2007-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: HID Heaset plugin timeouttimer + * +*/ + + +#include "keypresstimer.h" +#include "debug.h" + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CKeyPressTimer* CKeyPressTimer::NewL( MTimerNotifier* aTimeOutNotify, + TTimeIntervalMicroSeconds32 aTimeOutTime, TTimerType aTimerType ) + { + CKeyPressTimer* self = CKeyPressTimer::NewLC( aTimeOutNotify, + aTimeOutTime, aTimerType ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CKeyPressTimer* CKeyPressTimer::NewLC( MTimerNotifier* aTimeOutNotify, + TTimeIntervalMicroSeconds32 aTimeOutTime, TTimerType aTimerType ) + { + CKeyPressTimer* self = new ( ELeave ) CKeyPressTimer( aTimeOutNotify, + aTimerType ); + CleanupStack::PushL( self ); + self->ConstructL( aTimeOutTime ); + return self; + } + +// --------------------------------------------------------------------------- +// CTimeOutTimer() +// --------------------------------------------------------------------------- +// +CKeyPressTimer::CKeyPressTimer( MTimerNotifier* aTimeOutNotify, + TTimerType aTimerType ) : + CTimer( EPriorityStandard ), iNotify( aTimeOutNotify ), iTimerType( + aTimerType ) + { + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CKeyPressTimer::~CKeyPressTimer() + { + } + +// --------------------------------------------------------------------------- +// ConstructL() +// --------------------------------------------------------------------------- +// +void CKeyPressTimer::ConstructL( TTimeIntervalMicroSeconds32 aTimeOutTime ) + { + TRACE_FUNC + CTimer::ConstructL(); + CActiveScheduler::Add( this ); + After( aTimeOutTime ); + } + +// --------------------------------------------------------------------------- +// From class CActive +// RunL() +// --------------------------------------------------------------------------- +// +void CKeyPressTimer::RunL() + { + TRACE_FUNC + // Timer request has completed, so notify the timer's owner + if ( iNotify ) + { + iNotify->TimerExpired( iTimerType ); + } + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodbearer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodbearer.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 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: Defines the LCD Bearer Plugin identifier. +* +*/ + + +#ifndef T_LOCODBEARER_H +#define T_LOCODBEARER_H + +#include + +/** bearer value in LC */ +enum TLocodBearer + { + ELocodBearerBT = 0x0001, + ELocodBearerIR = 0x0010, + ELocodBearerUSB = 0x0100, + }; + +#endif // T_LOCODBEARER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodbearerplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodbearerplugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin base class declaration. +* +*/ + + +#ifndef C_LOCODBEARERPLUGIN_H +#define C_LOCODBEARERPLUGIN_H + +#include +#include "locodbearerpluginparams.h" + +/** + * Bearer Plugin base class + * + * This is the base class from which bearer plugins inherit. + * + * See locodplugin.hrh for the resource registration definitions. + * + * @lib euser.lib + * @since S60 v3.2 + */ +class CLocodBearerPlugin : public CBase + { +public: + + static CLocodBearerPlugin* NewL(TLocodBearerPluginParams& aParams); + + virtual ~CLocodBearerPlugin(); + + /** + * Gets the implementation uid of this plugin + * + * @since S60 v3.2 + * @return The implementation uid + */ + TUid ImplementationUid() const; + +protected: + + CLocodBearerPlugin(TLocodBearerPluginParams& aParams); + + /** + * Gets the observer interface object associated with this plugin + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodBearerPluginObserver& Observer() const; + +private: // data + + /** + * UID set by ECOM when the instance is created. Used when the instance + * is destroyed. + */ + TUid iInstanceUid; + + /** + * Implementation UID of the concrete instance. + */ + TUid iImplementationUid; + + /** + * Holds the observer object which will be notified when the operations + * complete + * Not own. + */ + MLocodBearerPluginObserver& iObserver; + + }; + +#include "locodbearerplugin.inl" + +#endif // C_LOCODBEARERPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodbearerplugin.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodbearerplugin.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin construction parameters +* declaration +* +*/ + + +#include + +// ----------------------------------------------------------------------------- +// Creates the bearer plug ins and return it to caller +// ----------------------------------------------------------------------------- +// +inline CLocodBearerPlugin* CLocodBearerPlugin::NewL(TLocodBearerPluginParams& aParams) + { + CLocodBearerPlugin* self = reinterpret_cast( + REComSession::CreateImplementationL( + aParams.ImplementationUid(), + _FOFF(CLocodBearerPlugin, iInstanceUid), + (TAny*)&aParams) + ); + + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +inline CLocodBearerPlugin::~CLocodBearerPlugin() + { + REComSession::DestroyedImplementation(iInstanceUid); + } + +// ----------------------------------------------------------------------------- +// Return the implemtation uid +// ----------------------------------------------------------------------------- +// +inline TUid CLocodBearerPlugin::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline CLocodBearerPlugin::CLocodBearerPlugin(TLocodBearerPluginParams& aParams) + : iImplementationUid(aParams.ImplementationUid()), + iObserver(aParams.Observer()) + { + } + +// ----------------------------------------------------------------------------- +// Return the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodBearerPluginObserver& CLocodBearerPlugin::Observer() const + { + return iObserver; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodbearerpluginobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodbearerpluginobserver.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin observer interface definition. +* +*/ + + +#ifndef M_LOCODBEARERPLUGINOBSERVER_H +#define M_LOCODBEARERPLUGINOBSERVER_H + +#include "locodbearer.h" + +/** + * LCD Bearer Plugin Observer interface class + * + * This is the bearer plugin observer interface definition used by LCD + * Bearer Plugins to inform the daemon about the plugin's event. + * + * @euser.lib + * @since S60 v3.2 + */ +class MLocodBearerPluginObserver + { +public: + + /** + * This is a callback function used by the plugins to inform when the + * bearer's availability changes. + * + * @since S60 v3.2 + * @param aBearer the bearer which calls this nothification + * @param aStatus the status of this bearer, ETrue if it is available; + * EFalse otherwise. + */ + virtual void NotifyBearerStatus(TLocodBearer aBearer, TBool aStatus) = 0; + }; + +#endif // M_LOCODBEARERPLUGINOBSERVER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodbearerpluginparams.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodbearerpluginparams.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin construction parameters +* declaration +* +*/ + + +#ifndef T_LOCODBEARERPLUGINPARAMS_H +#define T_LOCODBEARERPLUGINPARAMS_H + +class MLocodBearerPluginObserver; + +/** + * LCD Bearer Plugin Callback construction parameters + * + * This interface class is used to pass construction parameters to the + * plugins. These parameters include the callback interface and the ECOM + * plugin implementation UID + * + * @euser.lib + * @since S60 v3.2 + */ +class TLocodBearerPluginParams + { +public: + + /** + * Constructor. + * + * @since S60 v3.2 + * @param aUid Implementation UID of the plugin being constructed + * @param aObserver Callback interface object + */ + TLocodBearerPluginParams(const TUid aUid, MLocodBearerPluginObserver& aObserver); + + /** + * Gets the implementation UID of the plugin + * + * @since S60 v3.2 + * @return Implementaion UID + */ + TUid ImplementationUid() const; + + /** + * Gets the observer interface object + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodBearerPluginObserver& Observer() const; + +private: // data + + /** + * The implementation UID + */ + const TUid iImplementationUid; + + /** + * Reference to the observer object + */ + MLocodBearerPluginObserver& iObserver; + + }; + +#include "locodbearerpluginparams.inl" + +#endif // T_LOCODBEARERPLUGINPARAMS_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodbearerpluginparams.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodbearerpluginparams.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin construction parameters +* declaration +* +*/ + + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline TLocodBearerPluginParams::TLocodBearerPluginParams(const TUid aUid, MLocodBearerPluginObserver& aObserver) + : iImplementationUid(aUid), + iObserver(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// returns the implementation UID +// ----------------------------------------------------------------------------- +// +inline TUid TLocodBearerPluginParams::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// returns the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodBearerPluginObserver& TLocodBearerPluginParams::Observer() const + { + return iObserver; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodplugin.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodplugin.hrh Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2006 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: Definitions for plugin resource registration. +* +*/ + + +#ifndef LOCODPLUGIN_HRH +#define LOCODPLUGIN_HRH + +/** + * This file contains the defintions for plugin resource registration. + * + * All plugins should use version 2 registration resource file and set the + * rom_only field to 1 to prevent it from being overridden by RAM-based plugins. + * + * All bearer plugins should use KLOCODBEARERINTERFACEUID as the interface UID. + * + * A bearer plugin should use its corresponding feature ID (from features.hrh) as the + * implementation UID, that is, + * Implementation UID of IR bearer is KFeatureIdIrda, + * Implementation UID of BT bearer is KFeatureIdBt, + * Implementation UID of USB bearer is KFeatureIdUsb. + * + * All service plugins should use KLOCODSERVICEINTERFACEUID as the interface UID. + * + * A service plugin should use its corresponding feature ID (from features.hrh) as the + * implementation UID, that is, + * Implementation UID of Dun is KFeatureIdDun, (not exist yet, CR created) + * Implementation UID of Obex is KFeatureIdSrcs, + * + */ + +// Interface UID of bearer plugins +#define KLOCODBEARERINTERFACEUID 0x20002771 + +// Interface UID of service plugins +#define KLOCODSERVICEINTERFACEUID 0x20002772 + +#endif // LOCODPLUGIN_HRH diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodserviceplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodserviceplugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin base class declaration. +* +*/ + + +#ifndef C_LOCODSERVICEPLUGIN_H +#define C_LOCODSERVICEPLUGIN_H + +#include + +#include "locodservicepluginparams.h" +#include "locodbearer.h" + +/** + * Service Plugin base class + * + * This is the base class from which service plugins inherit. + * + * When a service plugin is constructed, it should not start any service by default. + * A service is started on demand when the bearer is available. + * + * @euser.lib + * @since S60 v3.2 + */ +class CLocodServicePlugin : public CBase + { +public: + + static CLocodServicePlugin* NewL(TLocodServicePluginParams& aParams); + + virtual ~CLocodServicePlugin(); + + /** + * Tell service plugin which service should be enabled or disabled according to + * specified bearer and its status. + * + * On completion, the plugin should call + * MLocodServicePluginObserver::ManageServiceCompleted() to inform the result. + * + * @since S60 v3.2 + * @param aBearer the bearer identification + * @param aStatus the status of this bearer, ETrue if it is available; + * EFalse otherwise. + */ + virtual void ManageService(TLocodBearer aBearer, TBool aStatus) = 0; + + TUid ImplementationUid() const; + +protected: + + CLocodServicePlugin(TLocodServicePluginParams& aParams); + + /** + * Gets the observer interface object associated with this plugin + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodServicePluginObserver& Observer() const; + +private: // data + + /** + * UID set by ECOM when the instance is created. Used when the instance + * is destroyed. + */ + TUid iInstanceUid; + + /** + * Implementation UID of the concrete instance. + */ + const TUid iImplementationUid; + + /** + * Holds the observer object which will be notified when the operations + * complete + * Not own. + */ + MLocodServicePluginObserver& iObserver; + + }; + +#include + +#endif // C_LOCODSERVICEPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodserviceplugin.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodserviceplugin.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin construction parameters +* declaration +* +*/ + + +#include + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline CLocodServicePlugin* CLocodServicePlugin::NewL(TLocodServicePluginParams& aParams) + { + CLocodServicePlugin* self = reinterpret_cast( + REComSession::CreateImplementationL( + aParams.ImplementationUid(), + _FOFF(CLocodServicePlugin, iInstanceUid), + (TAny*)&aParams) + ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// Service plug ins destructor +// ----------------------------------------------------------------------------- +// +inline CLocodServicePlugin::~CLocodServicePlugin() + { + REComSession::DestroyedImplementation(iInstanceUid); + } + +// ----------------------------------------------------------------------------- +// returns the implementation UID +// ----------------------------------------------------------------------------- +// +inline TUid CLocodServicePlugin::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// CLocodServicePlugin C++ constructor +// ----------------------------------------------------------------------------- +// +inline CLocodServicePlugin::CLocodServicePlugin(TLocodServicePluginParams& aParams) + : iImplementationUid(aParams.ImplementationUid()), + iObserver(aParams.Observer()) + { + } + +// ----------------------------------------------------------------------------- +// return the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodServicePluginObserver& CLocodServicePlugin::Observer() const + { + return iObserver; + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodservicepluginobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodservicepluginobserver.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin observer interface definition. +* +*/ + + +#ifndef M_LOCODSERVICEPLUGINOBSERVER_H +#define M_LOCODSERVICEPLUGINOBSERVER_H + +#include "locodbearer.h" + +/** + * LCD Service Plugin Observer interface class + * + * This is the service plugin observer interface definition used by LCD + * Service Plugins to inform the daemon when an action is complete. + * + * @lib + * @since S60 v3.2 + */ +class MLocodServicePluginObserver + { +public: + + /** + * This is a callback function used by the plugins to inform when + * managing the service have completed. The parameters passed should be + * identical to the ones used when the plugin's ManageService() was called, + * plus this service plugin's implemnetation UID and the completion status. + * + * @since S60 v3.2 + * @param aBearer the bearer identification passed in ManageService() + * @param aStatus the status of this bearer passed in ManageService() + * @param aServiceImplUid, the implementation UID of this service plugin. + * @param err KErrNone if the operation succeeded; otherwise a Symbian + * error code. + */ + virtual void ManageServiceCompleted( + TLocodBearer aBearer, + TBool aStatus, + TUid aServiceImplUid, + TInt err) = 0; + }; + +#endif // M_LOCODSERVICEPLUGINOBSERVER_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodservicepluginparams.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodservicepluginparams.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin construction parameters +* declaration +* +*/ + + +#ifndef T_LOCODSERVICEPLUGINPARAMS_H +#define T_LOCODSERVICEPLUGINPARAMS_H + +class MLocodServicePluginObserver; + +/** + * LCD Service Plugin Callback construction parameters + * + * This interface class is used to pass construction parameters to the + * plugins. These parameters include the callback interface (usually + * implemented by the LCD) and the ECOM plugin implementation UID + * + * @lib ?library + * @since S60 v3.2 + */ +class TLocodServicePluginParams + { +public: + /** + * Constructor. + * + * @since S60 v3.2 + * @param aUid Implementation UID of the plugin being constructed + * @param aObserver Callback interface object + */ + TLocodServicePluginParams(TUid aUid, MLocodServicePluginObserver& aObserver); + + /** + * Gets the implementation UID of the plugin + * + * @since S60 v3.2 + * @return Implementaion UID + */ + TUid ImplementationUid() const; + + /** + * Gets the observer interface object + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodServicePluginObserver& Observer() const; + +private: // data + + /** + * The implementation UID + */ + const TUid iImplementationUid; + + /** + * Reference to the observer object + */ + MLocodServicePluginObserver& iObserver; + + }; + +#include "locodservicepluginparams.inl" + +#endif // T_LOCODSERVICEPLUGINPARAMS_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/commoninc/locodservicepluginparams.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/commoninc/locodservicepluginparams.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin construction parameters +* declaration +* +*/ + + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline TLocodServicePluginParams::TLocodServicePluginParams(TUid aUid, MLocodServicePluginObserver& aObserver) + : iImplementationUid(aUid), + iObserver(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// Returns the implementation UID +// ----------------------------------------------------------------------------- +// +inline TUid TLocodServicePluginParams::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// return the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodServicePluginObserver& TLocodServicePluginParams::Observer() const + { + return iObserver; + } diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +/* +* Copyright (c) 2006 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: Build information file for project Local Connectivity Daemon. +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_MMPFILES +locod.mmp + +PRJ_TESTMMPFILES + +PRJ_EXPORTS +../commoninc/locodbearer.h |../../../inc/locodbearer.h +../commoninc/locodplugin.hrh |../../../inc/locodplugin.hrh +../commoninc/locodbearerplugin.h |../../../inc/locodbearerplugin.h +../commoninc/locodbearerplugin.inl |../../../inc/locodbearerplugin.inl +../commoninc/locodbearerpluginobserver.h |../../../inc/locodbearerpluginobserver.h +../commoninc/locodbearerpluginparams.h |../../../inc/locodbearerpluginparams.h +../commoninc/locodbearerpluginparams.inl |../../../inc/locodbearerpluginparams.inl +../commoninc/locodserviceplugin.h |../../inc/locodserviceplugin.h +../commoninc/locodserviceplugin.inl |../../inc/locodserviceplugin.inl +../commoninc/locodservicepluginobserver.h |../../inc/locodservicepluginobserver.h +../commoninc/locodservicepluginparams.h |../../inc/locodservicepluginparams.h +../commoninc/locodservicepluginparams.inl |../../inc/locodservicepluginparams.inl +../rom/locod.iby CORE_MW_LAYER_IBY_EXPORT_PATH(locod.iby) + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/group/locod.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/group/locod.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2006 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: Project definition file for project Local Connectivity Daemon. +* +*/ + +#include +#include "../inc/prjconfig.h" + +TARGET locod.exe +TARGETTYPE exe + +UID 0x1000008d 0x2000276D + +VENDORID VID_DEFAULT + +CAPABILITY LocalServices ReadDeviceData NetworkControl WriteDeviceData ReadUserData WriteUserData NetworkServices + +SOURCEPATH ../src +SOURCE locodmain.cpp +SOURCE locodaemon.cpp +SOURCE locodserviceman.cpp +SOURCE locodservice.cpp + +USERINCLUDE ../inc +USERINCLUDE ../../inc ../../../inc + +MW_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib +LIBRARY ecom.lib +LIBRARY featmgr.lib +LIBRARY centralrepository.lib +LIBRARY cenrepnotifhandler.lib + +#ifdef PRJ_FILE_TRACE +LIBRARY flogger.lib +#endif + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/group/locod.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/group/locod.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component locod + +source \sf\mw\remoteconn\localconnectivityservice\locod + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/debug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/debug.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 2006 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: Logging definition +* +*/ + + +#ifndef PRJ_LOGGING_H +#define PRJ_LOGGING_H + +#include +#include "debugconfig.h" + +#ifdef PRJ_ENABLE_TRACE + +#ifdef PRJ_FILE_TRACE +#include +#else +#include +#endif + +NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow + { +public: + void Overflow(TDes16& /*aDes*/) {} + }; + +NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow + { +public: + void Overflow(TDes8& /*aDes*/) {} + }; + +inline void Trace(TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list,aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TBuf16 theFinalString; + theFinalString.Append(KTracePrefix16); + TOverflowTruncate16 overflow; + theFinalString.AppendFormatList(aFmt,list,&overflow); + RDebug::Print(theFinalString); +#endif + } + +inline void Trace(TRefByValue aFmt, ...) + { + VA_LIST list; + VA_START(list, aFmt); +#ifdef PRJ_FILE_TRACE + RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list); +#else + TOverflowTruncate8 overflow; + TBuf8 buf8; + buf8.Append(KTracePrefix8); + buf8.AppendFormatList(aFmt, list, &overflow); + TBuf16 buf16(buf8.Length()); + buf16.Copy(buf8); + TRefByValue tmpFmt(_L("%S")); + RDebug::Print(tmpFmt, &buf16); +#endif + } + +inline void TracePanic( + char* aFile, + TInt aLine, + TInt aPanicCode, + const TDesC& aPanicCategory) + { + TPtrC8 fullFileName((const TUint8*)aFile); + TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1); + TBuf8 buf; + buf.Append(KPanicPrefix8); + buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName); + Trace(buf); + User::Panic(aPanicCategory, aPanicCode); + } + +inline void TraceLeave(char* aFile, TInt aLine, TInt aReason) + { + TPtrC8 fullFileName((const TUint8*)aFile); + TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1); + TBuf8 buf; + buf.Append(KLeavePrefix8); + buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName); + Trace(buf); + User::LeaveIfError(aReason); + } + +#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;} + +#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;} + +#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;} + +#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;} + +#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;} + +#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);} + +#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory) + +#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);} + +#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);} + +#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}} + +#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}} + +#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}} + +#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}} + +#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}} + +#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}} + +#else // PRJ_ENABLE_TRACE not defined + +#define TRACE_INFO(p) + +#define TRACE_ERROR(p) + +#define TRACE_STATE(p) + +#define TRACE_WARNING(p) + +#define TRACE_INFO_SEG(p) + +#define TRACE_ASSERT(GUARD, CODE) + +#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);} + +#define LEAVE_IF_ERROR(REASON) {static_cast(User::LeaveIfError(REASON));} + +#define LEAVE(REASON) {static_cast(User::Leave(REASON));} + +#define TRACE_FUNC_ENTRY + +#define TRACE_FUNC_ENTRY_THIS + +#define TRACE_FUNC_EXIT + +#define TRACE_FUNC + +#define TRACE_FUNC_THIS + +#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;} +#endif // PRJ_ENABLE_TRACE + +#endif // PRJ_LOGGING_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/debugconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/debugconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2006 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: Project configure file. +* +*/ + + +#ifndef LOCOD_DEBUGCONFIG_H +#define LOCOD_DEBUGCONFIG_H + +#include "prjconfig.h" + +/** + * Custom logging variations. + */ +#ifdef PRJ_FILE_TRACE +_LIT(KLogFile,"locod.txt"); +_LIT(KLogDir,"locod"); +#endif + +#ifdef PRJ_ENABLE_TRACE +_LIT(KTracePrefix16, "[Locod] "); +_LIT8(KTracePrefix8, "[Locod] "); +_LIT8(KFuncFormat8, "><%S"); +_LIT8(KFuncThisFormat8, "><%S, [0x%08X]"); +_LIT8(KFuncEntryFormat8, ">%S"); +_LIT8(KFuncEntryThisFormat8, ">%S, [0x%08X]"); +_LIT8(KFuncExitFormat8, "<%S"); + +_LIT(KPanicCategory, "LC Daemon"); +_LIT8(KPanicPrefix8, "PANIC code "); +_LIT8(KLeavePrefix8, "LEAVE code "); +#endif + +const TInt KMaxLogLineLength = 512; + +#define KPRINTERROR 0x00000001 // Tracing level: error +#define KPRINTINFO 0x00000002 // Tracing level: function trace +#define KPRINTSTATE 0x00000004 // Tracing level: state machine info +#define KPRINTWARNING 0x00000008 // Tracing level: warning + +const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING; + +#endif // LOCOD_DEBUGCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/locodaemon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/locodaemon.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 2006 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: Defines the Daemon class. +* +*/ + + +#ifndef T_LOCODAEMON_H +#define T_LOCODAEMON_H + +#include +#include +class CLocodBearerPlugin; +class CLocodServiceMan; + +/** + * The root of Daemon. + * + * It monitors system state, constructs service manager and loads all bearer + * plugins when system is up. + * It unloads all bearer and service plugins when system is shuting down. + * + * @euser.lib + * @since S60 v3.2 + */ +class CLocoDaemon : public CActive + { +public: + + /** + * Factory method, leave the object in cleanupstack. + * @since S60 v3.2 + */ + static CLocoDaemon* NewLC(); + + ~CLocoDaemon(); + +private: + + // From CActive + + void RunL(); + + void DoCancel(); + + TInt RunError(TInt aReason); + +private: + + CLocoDaemon(); + + void ConstructL(); + + /** + * Loads the bearer plug ins + * @since S60 v3.2 + */ + void LoadBearesL(); + +private: // data + + // the bearer plugins + RPointerArray iBearers; + + // the service manager + CLocodServiceMan* iServiceMan; + + // for system state monitoring + RProperty iSystemPS; + TInt iSystemState; + }; + + +#endif // T_LOCODAEMON_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/locodservice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/locodservice.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,118 @@ +/* +* Copyright (c) 2006 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: A service which constains a service plugin and its status. +* +*/ + + +#ifndef C_LOCODSERVICE_H +#define C_LOCODSERVICE_H + +#include +#include +#include +#include + +class CLocodServicePlugin; +class TLocodServiceRequest; + +/** + * Specific service that is managed by locod + * Locod creates all service and add it to + * a an array + * @ euser.lib + * @since S60 3.2 + */ +class CLocodService : public CBase + { +public: + + /** + * Factory function + * @since S60 3.2 + * @param aPlugin the sevice plug ins that will be managed (for example DUN, obex) + * @return an instance of CLocodService + */ + static CLocodService* NewL(CLocodServicePlugin& aPlugin); + + ~CLocodService(); + + CLocodServicePlugin& Plugin(); + + /** + * Called to manage service when the bearer status has been changed + * @since S60 3.2 + * @param aBearer the bearer whose status has been changed + * @param aStatus status of the bearer connected, disconnected or on or off + * @return TInt + */ + TInt ManageService(TLocodBearer aBearer, + TBool aStatus); + + /** + * Called when the service has been managed by service plug ins + * @since S60 3.2 + * @param aBearer the bearer whose service has been managed + * @param aStatus status of the bearer connected, disconnected or on or off + * @param err error code that may occured during managing the service + * @return TInt + */ + void ManageServiceCompleted(TLocodBearer aBearer, + TBool aStatus, + TInt err); + + /** + * Check if there are any service pending + * @since S60 3.2 + * @return TBool if there are service pending + */ + TBool HasServiceToManage() const; + +private: + + CLocodService(CLocodServicePlugin& aPlugin); + + void ConstructL(); + +private: + // the service plugin, owned + CLocodServicePlugin* iPlugin; + + // The latest status of this service plugin + TInt iServiceStatus; + + // Queue of ManageService request + RArray iRequests; + }; + +/** + * A ManageService request + */ +class TLocodServiceRequest + { +public: + + TLocodServiceRequest(TLocodBearer aBearer, TBool aStatus); + + // The bearer whose status has changed + TLocodBearer iBearer; + + // The new bearer status + TBool iStatus; + + // The request status + TBool iRequesting; + }; + +#endif // C_LOCODSERVICE_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/locodserviceman.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/locodserviceman.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2006 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: Defines the service manager class. +* +*/ + + +#ifndef T_LOCODSERVICEMAN_H +#define T_LOCODSERVICEMAN_H + +#include +#include +#include +#include +#include +#include + +class CLocodService; + +/** + * The service plugin manager. + * + * It loads, unloads service plugins on demand and manages a service availability + * according to bearer status. + * @euser.lib + * @since S60 v3.2 + */ +class CLocodServiceMan : + public CActive, + public MLocodBearerPluginObserver, + public MLocodServicePluginObserver + { +public: + + /** + * Factory method, leave the object in cleanupstack. + * + * @lib ?library + * @since S60 v3.2 + */ + static CLocodServiceMan* NewL(); + + ~CLocodServiceMan(); + +public: + +private: + + // From CActive + + void RunL(); + + void DoCancel(); + + TInt RunError(TInt aReason); + +private: + + // From MLocodBearerPluginObserver + /** + * This is a callback function used by the plugins to inform when the + * bearer's availability changes. + * + * @since S60 v3.2 + * @param aBearer the bearer which calls this nothification + * @param aStatus the status of this bearer, ETrue if it is available; + * EFalse otherwise. + */ + void NotifyBearerStatus(TLocodBearer aBearer, + TBool aStatus); + + // From MLocodServicePluginObserver + /** + * This is a callback function used by the plugins to inform when + * managing the service have completed. The parameters passed should be + * identical to the ones used when the plugin's ManageService() was called, + * plus this service plugin's implemnetation UID and the completion status. + * + * @since S60 v3.2 + * @param aBearer the bearer identification passed in ManageService() + * @param aStatus the status of this bearer passed in ManageService() + * @param aServiceImplUid, the implementation UID of this service plugin. + * @param err KErrNone if the operation succeeded; otherwise a Symbian + * error code. + */ + void ManageServiceCompleted(TLocodBearer aBearer, + TBool aStatus, + TUid aServiceImplUid, + TInt err); + +private: + + CLocodServiceMan(); + + void ConstructL(); + + void LoadServicesL(); + +private: // data + RPointerArray iServices; + TInt iBearerStatus; + TUid iUidDun; // DUN id + }; + + +#endif // T_LOCODSERVICEMAN_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/prjconfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/prjconfig.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006 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: Project configure file. +* +*/ + + +#ifndef LOCOD_PRJCONFIG_H +#define LOCOD_PRJCONFIG_H + +/** + * Traces are enabled in _DEBUG build, by default. + */ +#ifdef _DEBUG +#define PRJ_ENABLE_TRACE +#endif + +/** + * traces to file if this is defined. + */ +//#define PRJ_FILE_TRACE + + +/** + * build the project for module test purpose if this is defined + */ +//#define PRJ_MODULETEST_BUILD + +/** + * build the project using stubs to replace the dependencies if this is defined + */ +//#define PRJ_USE_STUB + + +#endif // LOCOD_PRJCONFIG_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/inc/utils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/inc/utils.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2006 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: Defines utility functions. +* +*/ + + +#ifndef LOCODUTIL_H +#define LOCODUTIL_H + +#include + +template +class CleanupResetDestroyClose + { +public: + inline static void PushL(T& aRef) + { + CleanupStack::PushL(TCleanupItem(&ResetDestroyClose,&aRef)); + } +private: + static void ResetDestroyClose(TAny *aPtr) + { + static_cast(aPtr)->ResetAndDestroy(); + static_cast(aPtr)->Close(); + } + }; + +/** + * Pushes an object into CleanupStack and specifies the cleanup + * function as ResetAndDestroy() and Close(). +*/ +template +inline void CleanupResetDestroyClosePushL(T& aRef) + {CleanupResetDestroyClose::PushL(aRef);} + +#endif // LOCODUTIL_H diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/rom/locod.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/rom/locod.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,23 @@ +/* +* Copyright (c) 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: +* +*/ + +#ifndef LOCALCONNECTIVITYDAEMON_IBY +#define LOCALCONNECTIVITYDAEMON_IBY + +file=ABI_DIR\BUILD_DIR\locod.exe PROGRAMS_DIR\locod.exe + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/src/locodaemon.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/src/locodaemon.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,188 @@ +/* +* Copyright (c) 2006 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: Daemon class implementation. +* +*/ + + +#include + +#include +#include +#include + +#include "locodaemon.h" +#include "locodserviceman.h" +#include "utils.h" +#include "debug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CLocoDaemon* CLocoDaemon::NewLC() + { + CLocoDaemon* self = new (ELeave) CLocoDaemon(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destrctor +// --------------------------------------------------------------------------- +// +CLocoDaemon::~CLocoDaemon() + { + FeatureManager::UnInitializeLib(); + Cancel(); + iSystemPS.Close(); + delete iServiceMan; + iBearers.ResetAndDestroy(); + iBearers.Close(); + REComSession::FinalClose(); + TRACE_FUNC + } + +// --------------------------------------------------------------------------- +// Called when the status of system pubsub keys are +// changed. Normally this is called after the system boot. +// --------------------------------------------------------------------------- +// +void CLocoDaemon::RunL() + { + TRACE_INFO((_L(" RunL %d"), iStatus.Int())) + if (iStatus == KErrNone) + { + iSystemPS.Subscribe(iStatus); + SetActive(); + + TRACE_INFO((_L(" [SYSTEM] prev %d"), iSystemState)) + LEAVE_IF_ERROR(iSystemPS.Get(iSystemState)); + TRACE_INFO((_L(" [SYSTEM] now %d"), iSystemState)) + + if (iSystemState == ESwStateNormalRfOn || + iSystemState == ESwStateNormalRfOff || + iSystemState == ESwStateCharging || + iSystemState == ESwStateNormalBTSap) + { // System is up, construct service man and load bearers. + if(!iServiceMan) + { + iServiceMan = CLocodServiceMan::NewL(); + } + if (!iBearers.Count()) + { + LoadBearesL(); + } + } + /* + ESwStateShuttingDown and ESWStateShuttingDown event is received when + the device is about to shut down + */ + else if (iSystemState == ESwStateShuttingDown) + { + TRACE_INFO((_L(" [SYSTEM] Shuting down and deleting"))) + delete iServiceMan; + iServiceMan = NULL; + iBearers.ResetAndDestroy(); + return; + } + } + RProcess::Rendezvous(KErrNone); + } + +// --------------------------------------------------------------------------- +// CActive method cancel listening pubsub keys +// --------------------------------------------------------------------------- +// +void CLocoDaemon::DoCancel() + { + TRACE_FUNC + iSystemPS.Cancel(); + } + +// --------------------------------------------------------------------------- +// CActive method +// --------------------------------------------------------------------------- +// +TInt CLocoDaemon::RunError(TInt /*aReason*/) + { + TRACE_FUNC + return KErrNone; + } + +// --------------------------------------------------------------------------- +// C++ Constructor +// --------------------------------------------------------------------------- +// +CLocoDaemon::CLocoDaemon() : CActive(CActive::EPriorityStandard) + { + CActiveScheduler::Add(this); + TRACE_FUNC_THIS + } + +// --------------------------------------------------------------------------- +// 2nd phase construction +// --------------------------------------------------------------------------- +// +void CLocoDaemon::ConstructL() + { + FeatureManager::InitializeLibL(); + LEAVE_IF_ERROR(iSystemPS.Attach(KPSUidStartup, KPSGlobalSystemState)); + iStatus = KRequestPending; + SetActive(); + TRequestStatus* sta = &iStatus; + User::RequestComplete(sta, KErrNone); + TRACE_FUNC + } + +// --------------------------------------------------------------------------- +// LoadBearesL Loads the bearer plug ins +// --------------------------------------------------------------------------- +// +void CLocoDaemon::LoadBearesL() + { + TRACE_FUNC_ENTRY + TRACE_INFO((_L("Load interface 0x%08X"), KLOCODBEARERINTERFACEUID)) + const TUid KBearerPluginInterface = TUid::Uid(KLOCODBEARERINTERFACEUID); + RImplInfoPtrArray implementations; + const TEComResolverParams noResolverParams; + REComSession::ListImplementationsL(KBearerPluginInterface, + noResolverParams, + KRomOnlyResolverUid, + implementations); + CleanupResetDestroyClosePushL(implementations); + const TUint count = implementations.Count(); + TRACE_INFO((_L(" Bearer count = %d"), count)) + for ( TUint ii = 0 ; ii < count ; ++ii ) + { + CImplementationInformation* impl = implementations[ii]; + TRACE_INFO((_L("Bearer: feature %d, name '%S', ROM only %d"), + impl->ImplementationUid().iUid, &(impl->DisplayName()), impl->RomOnly())) + if (FeatureManager::FeatureSupported(impl->ImplementationUid().iUid)) + { + TRACE_INFO((_L("Feature found"))) + TLocodBearerPluginParams params(impl->ImplementationUid(), *iServiceMan); + CLocodBearerPlugin* bearer = CLocodBearerPlugin::NewL(params); + CleanupStack::PushL(bearer); + iBearers.AppendL(bearer); + CleanupStack::Pop(bearer); + } + } + CleanupStack::PopAndDestroy(&implementations); + TRACE_FUNC_EXIT + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/src/locodmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/src/locodmain.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2006 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: Global functions for Local Connectivity Daemon. +* +*/ + + +#include "locodaemon.h" +#include "debug.h" + +_LIT( KLocodName, "LocalConnectivityDaemon" ); + +static void StartDaemonL(); + +// ======== LOCAL FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// E32Main. +// Entry-point for LCD. +// --------------------------------------------------------------------------- +// +TInt E32Main() + { + TInt ret; + User::RenameThread( KLocodName ); + + __UHEAP_MARK; + + // create clean-up stack + CTrapCleanup* cleanup = CTrapCleanup::New(); + TRAP( ret, StartDaemonL() ); + delete cleanup; // destroy clean-up stack + __UHEAP_MARKEND; + + return ret; + } + +// ---------------------------------------------------------------------------- +// StartDaemonL(). +// Constructs and installs the active scheduler, constructs Daemon object. +// ---------------------------------------------------------------------------- +// +static void StartDaemonL() + { + TRACE_FUNC + + // Construct and install the active scheduler + CActiveScheduler *myScheduler = new ( ELeave ) CActiveScheduler(); + + // Push onto the cleanup stack + CleanupStack::PushL( myScheduler ); + + // Install as the active scheduler + CActiveScheduler::Install( myScheduler ); + + CLocoDaemon* daemon = NULL; + daemon = CLocoDaemon::NewLC(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy( daemon ); + CleanupStack::PopAndDestroy( myScheduler ); + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/src/locodservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/src/locodservice.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,220 @@ +/* +* Copyright (c) 2006 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: The implementation of LCD service +* +*/ + + +#include + +#include "locodservice.h" +#include "debug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Creates a service object based on the service plug in objects +// --------------------------------------------------------------------------- +// +CLocodService* CLocodService::NewL(CLocodServicePlugin& aPlugin) + { + CLocodService* self = new (ELeave) CLocodService(aPlugin); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor +// --------------------------------------------------------------------------- +// +CLocodService::~CLocodService() + { + delete iPlugin; + iRequests.Close(); + TRACE_FUNC + } + +// --------------------------------------------------------------------------- +// return the plugin instance +// --------------------------------------------------------------------------- +// +CLocodServicePlugin& CLocodService::Plugin() + { + return *iPlugin; + } + + +// --------------------------------------------------------------------------- +// A request is sent to service plug in to manage their services +// --------------------------------------------------------------------------- +// +TInt CLocodService::ManageService(TLocodBearer aBearer, TBool aStatus) + { + TRACE_INFO((_L("[Srvc %d] [SrvcState 0x%04x]"), iPlugin->ImplementationUid().iUid, iServiceStatus)) + + // if there is an outstanding request which has the same bearer, + // remove all later enqueued request, and + // enqueue this request if the bearer status is different from the ongoing one. + TInt count = iRequests.Count(); + for (TInt i = 0; i < count; i++) + { + if (iRequests[i].iBearer == aBearer && iRequests[i].iRequesting) + { + for (TInt j = count - 1; j > i; j--) + { + if (iRequests[j].iBearer == aBearer) + { + TRACE_INFO((_L("[Srvc %d] [ManSrvc] Remove buffered request(Bearer 0x%04x status %d)"), + iPlugin->ImplementationUid().iUid, aBearer, iRequests[j].iStatus)) + iRequests.Remove(j); + } + } + if ((!iRequests[i].iStatus && aStatus) || (iRequests[i].iStatus && !aStatus)) + { + TRACE_INFO((_L("[Srvc %d] [ManSrvc] Buffer request(Bearer 0x%04x status %d)"), + iPlugin->ImplementationUid().iUid, aBearer, aStatus)) + return iRequests.Append(TLocodServiceRequest(aBearer, aStatus)); + } + else + { + TRACE_INFO((_L("[Srvc %d] [ManSrvc] Request(Bearer 0x%04x status %d) discarded"), + iPlugin->ImplementationUid().iUid, aBearer, aStatus)) + return KErrNone; + } + } + } + + // else if the latest bearer status in this service plugin is different, + // Start ManageService() + if ( aStatus && !(iServiceStatus & aBearer) || + !aStatus && (iServiceStatus & aBearer)) + { + TLocodServiceRequest request(aBearer, aStatus); + request.iRequesting = ETrue; + TInt err = iRequests.Append(request); + TRACE_INFO((_L("[Srvc %d] [ManSrvc] Issue request(Bearer 0x%04x status %d)"), + iPlugin->ImplementationUid().iUid, aBearer, aStatus)) + if (!err) + { + iPlugin->ManageService(aBearer, aStatus); + } + return err; + } + + // else the latest bearer status in this service plugin is the same, + // do nothing + TRACE_INFO((_L("[Srvc %d] [ManSrvc] Request(Bearer 0x%04x status %d) discarded"), + iPlugin->ImplementationUid().iUid, aBearer, aStatus)) + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Based on the status of bearer either the request is removed or a new manage +// service is issued +// --------------------------------------------------------------------------- +// +void CLocodService::ManageServiceCompleted(TLocodBearer aBearer, + TBool aStatus, TInt err) + { + TRACE_INFO((_L("[Srvc %d] [ManSrvc complete] (Bearer 0x%04x status %d) return %d"), + iPlugin->ImplementationUid().iUid, aBearer, aStatus, err)) + // Save the latest status of this bearer + if (!err) + { + if (aStatus) + { + iServiceStatus |= aBearer; + } + else + { + iServiceStatus &= (~aBearer); + } + TRACE_INFO((_L("[Srvc %d] [SrvcState 0x%04x]"), iPlugin->ImplementationUid().iUid, iServiceStatus)) + } + + // Find the completed request and remove it from the request list. + TInt count = iRequests.Count(); + for (TInt i = 0; i < count; i++) + { + if (iRequests[i].iBearer == aBearer && iRequests[i].iRequesting) + { + TRACE_INFO((_L("[Srvc %d] [ManSrvc completed] Remove completed request(Bearer 0x%04x status %d)"), + iPlugin->ImplementationUid().iUid, aBearer, iRequests[i].iStatus)) + iRequests.Remove(i); + break; + } + } + + // Find the next request and start ManageService if the status is changed. + count = iRequests.Count(); + for (TInt i = 0; i < count; i++) + { + if (iRequests[i].iBearer == aBearer) + { + if ( (iRequests[i].iStatus && !(iServiceStatus & aBearer)) || + (!iRequests[i].iStatus && (iServiceStatus & aBearer))) + { + iRequests[i].iRequesting = ETrue; + TRACE_INFO((_L("[Srvc %d] [ManSrvc completed] Issue buffered request(Bearer 0x%04x status %d)"), + iPlugin->ImplementationUid().iUid, aBearer, iRequests[i].iStatus)) + iPlugin->ManageService(iRequests[i].iBearer, iRequests[i].iStatus); + } + else + { + TRACE_INFO((_L("[Srvc %d] [ManSrvc completed] Remove buffered request(Bearer 0x%04x status %d)"), + iPlugin->ImplementationUid().iUid, aBearer, iRequests[i].iStatus)) + iRequests.Remove(i); + } + break; + } + } + } + +// --------------------------------------------------------------------------- +// return if there are request pending +// --------------------------------------------------------------------------- +// +TBool CLocodService::HasServiceToManage() const + { + return iRequests.Count(); + } + +// --------------------------------------------------------------------------- +// C++ default constructor +// --------------------------------------------------------------------------- +// +CLocodService::CLocodService(CLocodServicePlugin& aPlugin) : iPlugin(&aPlugin) + { + TRACE_FUNC_THIS + } + +// --------------------------------------------------------------------------- +// C++ 2nd phase construction +// --------------------------------------------------------------------------- +// +void CLocodService::ConstructL() + { + } + +// --------------------------------------------------------------------------- +// C++ default constructor +// --------------------------------------------------------------------------- +// +TLocodServiceRequest::TLocodServiceRequest(TLocodBearer aBearer, TBool aStatus) +: iBearer(aBearer), iStatus(aStatus), iRequesting(EFalse) + { + } + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/src/locodserviceman.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/src/locodserviceman.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,220 @@ +/* +* Copyright (c) 2006 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: Daemon class implementation. +* +*/ + + +#include +#include +#include + +#include "locodserviceman.h" +#include "locodservice.h" +#include "debug.h" +#include "utils.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CLocodServiceMan* CLocodServiceMan::NewL() + { + CLocodServiceMan* self = new (ELeave) CLocodServiceMan(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// C++ destructor +// --------------------------------------------------------------------------- +// +CLocodServiceMan::~CLocodServiceMan() + { + Cancel(); + iServices.ResetAndDestroy(); + iServices.Close(); + + TRACE_FUNC + } + +// --------------------------------------------------------------------------- +// CActive method, the request is only completed when there is no service +// to manage, so all the service plugins are destroyed +// --------------------------------------------------------------------------- +// +void CLocodServiceMan::RunL() + { + TRACE_FUNC_ENTRY + if(iStatus ==KErrNone) + { + iServices.ResetAndDestroy(); + } + TRACE_FUNC_EXIT + } + +// --------------------------------------------------------------------------- +// CActive method +// --------------------------------------------------------------------------- +// +void CLocodServiceMan::DoCancel() + { + + } + +// --------------------------------------------------------------------------- +// CActive method +// --------------------------------------------------------------------------- +// +TInt CLocodServiceMan::RunError(TInt/* aReason */) + { + return KErrNone; + } + + +// --------------------------------------------------------------------------- +// NotifyBearerStatus +// --------------------------------------------------------------------------- +// +void CLocodServiceMan::NotifyBearerStatus(TLocodBearer aBearer, TBool aStatus) + { + TRACE_INFO((_L(" [BRRST] status of 0x%04x changes to %d"), aBearer, aStatus)) + TInt oldStatus = iBearerStatus; + if (aStatus) + { + iBearerStatus |= aBearer; + } + else + { + iBearerStatus &= (~aBearer); + } + TRACE_INFO((_L(" [BRRST] [OLD] 0x%08x [NEW] 0x%08x"), oldStatus, iBearerStatus)) + if (iBearerStatus && !iServices.Count()) + { + TRAP_IGNORE(LoadServicesL()); + } + TInt count = iServices.Count(); + for (TInt i = 0; i < count; i++) + { + if(iBearerStatus != oldStatus) + { + iServices[i]->ManageService(aBearer, aStatus); + } + } + } + +// --------------------------------------------------------------------------- +// Call back method from service plugins. This is called when the services has been +// managed by the plug ins. +// --------------------------------------------------------------------------- +// +void CLocodServiceMan::ManageServiceCompleted(TLocodBearer aBearer, + TBool aStatus, TUid aServiceImplUid, TInt err) + { + TInt count = iServices.Count(); + for (TInt i = 0; i < count; i++) + { + if (iServices[i]->Plugin().ImplementationUid() == aServiceImplUid) + { + iServices[i]->ManageServiceCompleted(aBearer, aStatus, err); + break; + } + } + + if (!iBearerStatus) + { + for (TInt i = 0; i < count; i++) + { + if (iServices[i]->HasServiceToManage()) + { + return; + } + } + + if(!IsActive()) + { + iStatus = KRequestPending; + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + } + + } + } + +// --------------------------------------------------------------------------- +// c++ constructor +// --------------------------------------------------------------------------- +// +CLocodServiceMan::CLocodServiceMan() : CActive(CActive::EPriorityStandard),iUidDun(TUid::Uid(KFeatureIdDialupNetworking)) + { + CActiveScheduler::Add(this); + TRACE_FUNC_THIS + } + +// --------------------------------------------------------------------------- +// 2nd phase construction +// --------------------------------------------------------------------------- +// +void CLocodServiceMan::ConstructL() + { + + } + +// --------------------------------------------------------------------------- +// Loaded all service plug ins who has implemented the KLOCODSERVICEINTERFACEUID +// --------------------------------------------------------------------------- +// +void CLocodServiceMan::LoadServicesL() + { + TRACE_FUNC_ENTRY + TRACE_INFO((_L("Load interface 0x%08X"), KLOCODSERVICEINTERFACEUID)) + const TUid KServicePluginInterface = TUid::Uid(KLOCODSERVICEINTERFACEUID); + RImplInfoPtrArray implementations; + const TEComResolverParams noResolverParams; + REComSession::ListImplementationsL(KServicePluginInterface, + noResolverParams, + KRomOnlyResolverUid, + implementations); + CleanupResetDestroyClosePushL(implementations); + const TUint count = implementations.Count(); + TRACE_INFO((_L(" [BRRST] Service Plug in found %d"), count)) + for ( TUint ii = 0 ; ii < count ; ++ii ) + { + CImplementationInformation* impl = implementations[ii]; + TRACE_INFO((_L("Service: feature %d, name '%S', ROM only %d"), + impl->ImplementationUid().iUid, &(impl->DisplayName()), impl->RomOnly())) + if (FeatureManager::FeatureSupported(impl->ImplementationUid().iUid)) + { + TRACE_INFO((_L("Feature found"))) + TLocodServicePluginParams params(impl->ImplementationUid(), *this); + CLocodServicePlugin* srvcplugin = CLocodServicePlugin::NewL(params); + CleanupStack::PushL(srvcplugin); + CLocodService* service = CLocodService::NewL(*srvcplugin); + CleanupStack::Pop(srvcplugin); + CleanupStack::PushL(service); + iServices.AppendL(service); + CleanupStack::Pop(service); + } + } + CleanupStack::PopAndDestroy(&implementations); + TRACE_FUNC_EXIT + } + + + diff -r 453dfc402455 -r 0aa8cc770c8a localconnectivityservice/locod/src/utils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/localconnectivityservice/locod/src/utils.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,22 @@ +/* +* Copyright (c) 2006 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: utility function implementation. +* +*/ + + +#include "utils.h" +#include "debug.h" + + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpfileandfolderdp/group/bld.inf --- a/mtpdataproviders/mtpfileandfolderdp/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpfileandfolderdp/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -24,7 +24,7 @@ PRJ_PLATFORMS PRJ_EXPORTS -mtp_filedp.iby /epoc32/rom/include/mtp_filedp.iby +mtp_filedp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_filedp.iby) ../inc/mtpfiledp_config.rh SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(mtp/mtpfiledp_config.rh) PRJ_MMPFILES diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpfileandfolderdp/group/mtp_filedp.iby --- a/mtpdataproviders/mtpfileandfolderdp/group/mtp_filedp.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpfileandfolderdp/group/mtp_filedp.iby Tue Aug 31 16:03:15 2010 +0300 @@ -16,7 +16,7 @@ #ifndef MTP_FILEDP_IBY #define MTP_FILEDP_IBY -#if !defined(SYMBIAN_EXCLUDE_MTP) +#if defined(__MTP_PROTOCOL_SUPPORT) #include @@ -26,7 +26,7 @@ // MTP plugin registration resource file data=EPOCROOT##epoc32\data\Z\resource\mtp\102827B0.rsc resource\mtp\102827B0.rsc -#endif // SYMBIAN_EXCLUDE_MTP +#endif // __MTP_PROTOCOL_SUPPORT #endif // MTP_FILEDP_IBY diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/group/bld.inf --- a/mtpdataproviders/mtpimagedp/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -31,10 +31,8 @@ PRJ_EXPORTS // Note: these files are exported for testing and techview only. Not used in a device 2001fca2.txt /epoc32/data/z/private/10202be9/2001fca2.txt -2001fca2.txt /epoc32/release/winscw/udeb/z/private/10202be9/2001fca2.txt -2001fca2.txt /epoc32/release/winscw/urel/z/private/10202be9/2001fca2.txt -../group/mtp_imagedp.iby /epoc32/rom/include/mtp_imagedp.iby +../group/mtp_imagedp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_imagedp.iby) // ConfML files ../conf/mtp_imagedp.confml MW_LAYER_EXPORTS_CONFML(mtp_imagedp.confml) diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/inc/cmtpimagedp.h --- a/mtpdataproviders/mtpimagedp/inc/cmtpimagedp.h Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/inc/cmtpimagedp.h Tue Aug 31 16:03:15 2010 +0300 @@ -58,7 +58,7 @@ public: CMTPImageDpObjectPropertyMgr& PropertyMgr()const; - CMTPImageDpThumbnailCreator& ThumbnailManager() const; + CMTPImageDpThumbnailCreator* ThumbnailManager(); CRepository& Repository() const; TMTPFormatCode FindFormat(const TDesC& aExtension); diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/src/cmtpimagedp.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedp.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedp.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -96,8 +96,6 @@ { __FLOG_OPEN(KMTPSubsystem, KComponent); __FLOG(_L8(">> CMTPImageDataProvider::ConstructL")); - - iThumbnailManager = CMTPImageDpThumbnailCreator::NewL(*this); iNewPicNotifier = CMTPImageDpNewPicturesNotifier::NewL(); //Setup central repository connection @@ -454,11 +452,14 @@ __FLOG(_L8("<< NotifyStorageEnumerationCompleteL")); } -CMTPImageDpThumbnailCreator& CMTPImageDataProvider::ThumbnailManager() const - { - __ASSERT_DEBUG(iThumbnailManager, User::Invariant()); - return *iThumbnailManager; - } +CMTPImageDpThumbnailCreator* CMTPImageDataProvider::ThumbnailManager() + { + if(NULL == iThumbnailManager) + { + TRAP_IGNORE(iThumbnailManager = CMTPImageDpThumbnailCreator::NewL(*this)); + } + return iThumbnailManager; + } CMTPImageDpObjectPropertyMgr& CMTPImageDataProvider::PropertyMgr()const { diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/src/cmtpimagedpcopyobject.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedpcopyobject.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedpcopyobject.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -45,7 +45,7 @@ const TMTPRequestElementInfo KMTPCopyObjectPolicy[] = { {TMTPTypeRequest::ERequestParameter2, EMTPElementTypeStorageId, EMTPElementAttrWrite, 0, 0, 0}, - {TMTPTypeRequest::ERequestParameter3, EMTPElementTypeObjectHandle, EMTPElementAttrDir | EMTPElementAttrWrite, 1, 0, 0} + {TMTPTypeRequest::ERequestParameter3, EMTPElementTypeObjectHandle, EMTPElementAttrDir, 1, 0, 0} }; /** diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/src/cmtpimagedpgetthumb.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedpgetthumb.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedpgetthumb.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -111,21 +111,26 @@ TEntry fileEntry; User::LeaveIfError(iFramework.Fs().Entry(iObjectMeta->DesC(CMTPObjectMetaData::ESuid), fileEntry)); - imgDp.ThumbnailManager().GetThumbMgr()->SetFlagsL(CThumbnailManager::EDefaultFlags); - if(fileEntry.FileSize() > KFileSizeMax) + + CMTPImageDpThumbnailCreator* tnc = imgDp.ThumbnailManager(); + if(tnc != NULL) { - __FLOG(_L8(">> CMTPImageDpGetThumb::ServiceL, fileEntry.FileSize() > KFileSizeMax")); - imgDp.ThumbnailManager().GetThumbMgr()->SetFlagsL(CThumbnailManager::EDoNotCreate); + tnc->GetThumbMgr()->SetFlagsL(CThumbnailManager::EDefaultFlags); + if(fileEntry.FileSize() > KFileSizeMax) + { + __FLOG(_L8(">> CMTPImageDpGetThumb::ServiceL, fileEntry.FileSize() > KFileSizeMax")); + tnc->GetThumbMgr()->SetFlagsL(CThumbnailManager::EDoNotCreate); + } + + tnc->GetThumbnailL(iObjectMeta->DesC(CMTPObjectMetaData::ESuid), thumbnailData, err); + imgDp.PropertyMgr().StoreThunmnail(iObjectMeta->Uint(CMTPObjectMetaData::EHandle), thumbnailData); } - - imgDp.ThumbnailManager().GetThumbnailL(iObjectMeta->DesC(CMTPObjectMetaData::ESuid), thumbnailData, err); - User::LeaveIfError(err); - User::LeaveIfNull(thumbnailData); - - //Transfer ownership of thumbnailData to Property Manager - imgDp.PropertyMgr().StoreThunmnail(iObjectMeta->Uint(CMTPObjectMetaData::EHandle), thumbnailData); + //Transfer ownership of thumbnailData to Property Manager } - iThumb->Write(*thumbnailData); + if(thumbnailData != NULL) + { + iThumb->Write(*thumbnailData); + } SendDataL(*iThumb); __FLOG(_L8("<< CMTPImageDpGetThumb::ServiceL")); } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/src/cmtpimagedpobjectpropertymgr.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedpobjectpropertymgr.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedpobjectpropertymgr.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -454,21 +454,23 @@ */ TEntry fileEntry; TInt err = iFs.Entry(iObjectInfo->DesC(CMTPObjectMetaData::ESuid), fileEntry); - if (err == KErrNone) + CMTPImageDpThumbnailCreator* tnc = iDataProvider.ThumbnailManager(); + if (err == KErrNone && tnc != NULL) { + if(fileEntry.FileSize() > KFileSizeMax || !alwaysCreate) { - iDataProvider.ThumbnailManager().GetThumbMgr()->SetFlagsL(CThumbnailManager::EDoNotCreate); + tnc->GetThumbMgr()->SetFlagsL(CThumbnailManager::EDoNotCreate); } else { - iDataProvider.ThumbnailManager().GetThumbMgr()->SetFlagsL(CThumbnailManager::EDefaultFlags); + tnc->GetThumbMgr()->SetFlagsL(CThumbnailManager::EDefaultFlags); } /** * trap the leave to avoid return general error when PC get object property list */ - TRAP(err, iDataProvider.ThumbnailManager().GetThumbnailL(iObjectInfo->DesC(CMTPObjectMetaData::ESuid), iThumbnailCache.iThumbnailData, err)); + TRAP(err, tnc->GetThumbnailL(iObjectInfo->DesC(CMTPObjectMetaData::ESuid), iThumbnailCache.iThumbnailData, err)); if (err == KErrNone) { iThumbnailCache.iObjectHandle = iObjectInfo->Uint(CMTPObjectMetaData::EHandle); @@ -484,6 +486,10 @@ } } } + else + { + aValue = KThumbCompressedSize; + } } break; @@ -599,22 +605,23 @@ */ TEntry fileEntry; TInt err = iFs.Entry(iObjectInfo->DesC(CMTPObjectMetaData::ESuid), fileEntry); - if (err == KErrNone) + CMTPImageDpThumbnailCreator* tnc = iDataProvider.ThumbnailManager(); + if (err == KErrNone && tnc != NULL) { if(fileEntry.FileSize() > KFileSizeMax || !alwaysCreate) { - iDataProvider.ThumbnailManager().GetThumbMgr()->SetFlagsL(CThumbnailManager::EDoNotCreate); + tnc->GetThumbMgr()->SetFlagsL(CThumbnailManager::EDoNotCreate); } else { - iDataProvider.ThumbnailManager().GetThumbMgr()->SetFlagsL(CThumbnailManager::EDefaultFlags); + tnc->GetThumbMgr()->SetFlagsL(CThumbnailManager::EDefaultFlags); } /** * trap the leave to avoid return general error when PC get object property list */ - TRAP(err, iDataProvider.ThumbnailManager().GetThumbnailL(iObjectInfo->DesC(CMTPObjectMetaData::ESuid), iThumbnailCache.iThumbnailData, err)); + TRAP(err, tnc->GetThumbnailL(iObjectInfo->DesC(CMTPObjectMetaData::ESuid), iThumbnailCache.iThumbnailData, err)); if (err == KErrNone) { iThumbnailCache.iObjectHandle = iObjectInfo->Uint(CMTPObjectMetaData::EHandle); diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/src/cmtpimagedpsendobjectinfo.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedpsendobjectinfo.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedpsendobjectinfo.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -752,6 +752,9 @@ { __FLOG(_L8("CMTPImageDpSendObjectInfo::DoHandleSendObjectCompleteL - Entry")); TBool result(ETrue); + + delete iFileReceived; + iFileReceived = NULL; #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API TInt64 objectsize = 0; @@ -759,8 +762,10 @@ TInt objectsize = 0; #endif - iFileReceived->File().Size(objectsize); - + TEntry entry; + User::LeaveIfError(iFramework.Fs().Entry(iFullPath, entry)); + objectsize = entry.FileSize(); + if (objectsize != iObjectSize) { __FLOG_VA((_L8("object sizes differ %lu != %lu"), objectsize, iObjectSize)); @@ -789,34 +794,31 @@ if (iProtectionStatus == EMTPProtectionNoProtection || iProtectionStatus == EMTPProtectionReadOnly) { - TUint attValue = 0; - User::LeaveIfError(iFileReceived->File().Att(attValue)); - attValue &= ~(KEntryAttNormal | KEntryAttReadOnly); - + entry.iAtt &= ~(KEntryAttNormal | KEntryAttReadOnly); if (iProtectionStatus == EMTPProtectionNoProtection) { - attValue |= KEntryAttNormal; + entry.iAtt |= KEntryAttNormal; } else { - attValue |= KEntryAttReadOnly; + entry.iAtt |= KEntryAttReadOnly; } - User::LeaveIfError(iFileReceived->File().SetAtt(attValue, ~attValue)); + User::LeaveIfError(iFramework.Fs().SetAtt(iFullPath, entry.iAtt, ~entry.iAtt)); } + TTime modifiedTime; //update datemodified property. if(iDateMod != NULL && iDateMod->Length()) { iObjectPropertyMgr.ConvertMTPTimeStr2TTimeL(*iDateMod, modifiedTime); - User::LeaveIfError(iFileReceived->File().SetModified(modifiedTime)); } else if(iDateCreated != NULL && iDateCreated->Length()) { iObjectPropertyMgr.ConvertMTPTimeStr2TTimeL(*iDateCreated, modifiedTime); - User::LeaveIfError(iFileReceived->File().SetModified(modifiedTime)); } - - iFramework.RouteRequestUnregisterL(iExpectedSendObjectRequest, iConnection); + User::LeaveIfError(iFramework.Fs().SetModified(iFullPath, modifiedTime)); + + iFramework.RouteRequestUnregisterL(iExpectedSendObjectRequest, iConnection); //The MTP spec states that it is not mandatory for SendObjectInfo/SendObjectPropList //to be followed by a SendObject. An object is reserved in the ObjectStore on @@ -827,10 +829,8 @@ CleanUndoList(); SendResponseL(EMTPRespCodeOK); - } + } - delete iFileReceived; - iFileReceived = NULL; iSuccessful = result; __FLOG(_L8("CMTPImageDpSendObjectInfo::DoHandleSendObjectCompleteL - Exit")); diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpimagedp/src/cmtpimagedpthumbnailcreator.cpp --- a/mtpdataproviders/mtpimagedp/src/cmtpimagedpthumbnailcreator.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtpimagedp/src/cmtpimagedpthumbnailcreator.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -68,7 +68,7 @@ delete iBitmap; delete iObjectSource; delete iThumbMgr; - if(iActiveSchedulerWait->IsStarted()) + if(iActiveSchedulerWait != NULL && iActiveSchedulerWait->IsStarted()) { *iCreationErr = KErrNotReady; iActiveSchedulerWait->AsyncStop(); diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/group/bld.inf --- a/mtpdataproviders/mtppictbridgedp/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtppictbridgedp/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -24,9 +24,8 @@ PRJ_EXPORTS -../inc/rptp.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(rptp.h) -./mtppictbridgedp.iby /epoc32/rom/include/mtppictbridgedp.iby -./rptp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(rptp.iby) - +../inc/rptp.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(rptp.h) +./mtppictbridgedp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtppictbridgedp.iby) +./rptp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(rptp.iby) #endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/inc/s60dependency.h --- a/mtpdataproviders/mtppictbridgedp/inc/s60dependency.h Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpdataproviders/mtppictbridgedp/inc/s60dependency.h Tue Aug 31 16:03:15 2010 +0300 @@ -24,7 +24,7 @@ #include -#include +#include #include #include #include diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/BWINS/pictbridgeU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/BWINS/pictbridgeU.DEF Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,27 @@ +EXPORTS + ?CancelDpsEventNotify@CDpsEngine@@QAEXXZ @ 1 NONAME ; void CDpsEngine::CancelDpsEventNotify(void) + ?CancelDpsRequest@CDpsEngine@@QAEXXZ @ 2 NONAME ; void CDpsEngine::CancelDpsRequest(void) + ?CancelPrintMode@CDpsEngine@@QAEXXZ @ 3 NONAME ; void CDpsEngine::CancelPrintMode(void) + ?ConnectStateNotify@CDpsEngine@@QAEXAAVTRequestStatus@@@Z @ 4 NONAME ; void CDpsEngine::ConnectStateNotify(class TRequestStatus &) + ?CreateReqScriptL@TDpsGetCapability@@EAEXABV?$RArray@UTDpsArg@@@@ABV?$RArray@UTDpsEle@@@@IAAVRWriteStream@@PAVCDpsTransaction@@@Z @ 5 NONAME ; void TDpsGetCapability::CreateReqScriptL(class RArray const &, class RArray const &, unsigned int, class RWriteStream &, class CDpsTransaction *) + ?CreateReqScriptL@TDpsStartJob@@EAEXABV?$RArray@UTDpsArg@@@@ABV?$RArray@UTDpsEle@@@@IAAVRWriteStream@@PAVCDpsTransaction@@@Z @ 6 NONAME ; void TDpsStartJob::CreateReqScriptL(class RArray const &, class RArray const &, unsigned int, class RWriteStream &, class CDpsTransaction *) + ?CreateReqScriptL@TMDpsOperation@@MAEXABV?$RArray@UTDpsArg@@@@ABV?$RArray@UTDpsEle@@@@IAAVRWriteStream@@PAVCDpsTransaction@@@Z @ 7 NONAME ; void TMDpsOperation::CreateReqScriptL(class RArray const &, class RArray const &, unsigned int, class RWriteStream &, class CDpsTransaction *) + ?Delete@CDpsEngine@@QAEXXZ @ 8 NONAME ; void CDpsEngine::Delete(void) + ?DoDpsRequestL@CDpsEngine@@QAEXPAVTMDpsOperation@@AAVTRequestStatus@@@Z @ 9 NONAME ; void CDpsEngine::DoDpsRequestL(class TMDpsOperation *, class TRequestStatus &) + ?DpsEventNotify@CDpsEngine@@QAEXAAVTDpsEvents@@AAVTRequestStatus@@@Z @ 10 NONAME ; void CDpsEngine::DpsEventNotify(class TDpsEvents &, class TRequestStatus &) + ?DpsFolder@CDpsEngine@@QBEABVTDesC16@@XZ @ 11 NONAME ; class TDesC16 const & CDpsEngine::DpsFolder(void) const + ?FillRepArgs@TDpsConfigPrintService@@EAEHABV?$RArray@UTDpsArg@@@@PAVCDpsTransaction@@@Z @ 12 NONAME ; int TDpsConfigPrintService::FillRepArgs(class RArray const &, class CDpsTransaction *) + ?FillRepArgs@TDpsGetCapability@@EAEHABV?$RArray@UTDpsArg@@@@PAVCDpsTransaction@@@Z @ 13 NONAME ; int TDpsGetCapability::FillRepArgs(class RArray const &, class CDpsTransaction *) + ?FillRepArgs@TDpsGetJobStatus@@EAEHABV?$RArray@UTDpsArg@@@@PAVCDpsTransaction@@@Z @ 14 NONAME ; int TDpsGetJobStatus::FillRepArgs(class RArray const &, class CDpsTransaction *) + ?FillRepArgs@TDpsGetPrinterStatus@@EAEHABV?$RArray@UTDpsArg@@@@PAVCDpsTransaction@@@Z @ 15 NONAME ; int TDpsGetPrinterStatus::FillRepArgs(class RArray const &, class CDpsTransaction *) + ?FillReqArgs@TDpsAbortJob@@EAEHAAV?$RArray@UTDpsArg@@@@AAV?$RArray@UTDpsEle@@@@AAIPAVCDpsTransaction@@@Z @ 16 NONAME ; int TDpsAbortJob::FillReqArgs(class RArray &, class RArray &, unsigned int &, class CDpsTransaction *) + ?FillReqArgs@TDpsConfigPrintService@@EAEHAAV?$RArray@UTDpsArg@@@@AAV?$RArray@UTDpsEle@@@@AAIPAVCDpsTransaction@@@Z @ 17 NONAME ; int TDpsConfigPrintService::FillReqArgs(class RArray &, class RArray &, unsigned int &, class CDpsTransaction *) + ?FillReqArgs@TDpsGetCapability@@EAEHAAV?$RArray@UTDpsArg@@@@AAV?$RArray@UTDpsEle@@@@AAIPAVCDpsTransaction@@@Z @ 18 NONAME ; int TDpsGetCapability::FillReqArgs(class RArray &, class RArray &, unsigned int &, class CDpsTransaction *) + ?FillReqArgs@TDpsStartJob@@EAEHAAV?$RArray@UTDpsArg@@@@AAV?$RArray@UTDpsEle@@@@AAIPAVCDpsTransaction@@@Z @ 19 NONAME ; int TDpsStartJob::FillReqArgs(class RArray &, class RArray &, unsigned int &, class CDpsTransaction *) + ?GetDpsConfigL@CDpsEngine@@QAEXAAVTDpsConfigPrintReq@@@Z @ 20 NONAME ; void CDpsEngine::GetDpsConfigL(class TDpsConfigPrintReq &) + ?GetEngineL@CDpsEngine@@SAPAV1@XZ @ 21 NONAME ; class CDpsEngine * CDpsEngine::GetEngineL(void) + ?GetParamNum@TDpsStartJobReq@@QAEHXZ @ 22 NONAME ; int TDpsStartJobReq::GetParamNum(void) + ?Reset@TDpsJobStatusRep@@QAEXXZ @ 23 NONAME ; void TDpsJobStatusRep::Reset(void) + ?Reset@TDpsPrintInfo@@QAEXXZ @ 24 NONAME ; void TDpsPrintInfo::Reset(void) + ?SetPrintMode@CDpsEngine@@QAEXAAVTRequestStatus@@@Z @ 25 NONAME ; void CDpsEngine::SetPrintMode(class TRequestStatus &) + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/eabi/pictbridgeU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/eabi/pictbridgeU.DEF Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,41 @@ +EXPORTS + _ZN10CDpsEngine10GetEngineLEv @ 1 NONAME + _ZN10CDpsEngine12SetPrintModeER14TRequestStatus @ 2 NONAME + _ZN10CDpsEngine13DoDpsRequestLEP14TMDpsOperationR14TRequestStatus @ 3 NONAME + _ZN10CDpsEngine13GetDpsConfigLER18TDpsConfigPrintReq @ 4 NONAME + _ZN10CDpsEngine14DpsEventNotifyER10TDpsEventsR14TRequestStatus @ 5 NONAME + _ZN10CDpsEngine15CancelPrintModeEv @ 6 NONAME + _ZN10CDpsEngine16CancelDpsRequestEv @ 7 NONAME + _ZN10CDpsEngine18ConnectStateNotifyER14TRequestStatus @ 8 NONAME + _ZN10CDpsEngine20CancelDpsEventNotifyEv @ 9 NONAME + _ZN10CDpsEngine6DeleteEv @ 10 NONAME + _ZN12TDpsAbortJob11FillReqArgsER6RArrayI7TDpsArgERS0_I7TDpsEleERjP15CDpsTransaction @ 11 NONAME + _ZN12TDpsStartJob11FillReqArgsER6RArrayI7TDpsArgERS0_I7TDpsEleERjP15CDpsTransaction @ 12 NONAME + _ZN12TDpsStartJob16CreateReqScriptLERK6RArrayI7TDpsArgERKS0_I7TDpsEleEjR12RWriteStreamP15CDpsTransaction @ 13 NONAME + _ZN13TDpsPrintInfo5ResetEv @ 14 NONAME + _ZN14TMDpsOperation16CreateReqScriptLERK6RArrayI7TDpsArgERKS0_I7TDpsEleEjR12RWriteStreamP15CDpsTransaction @ 15 NONAME + _ZN15TDpsStartJobReq11GetParamNumEv @ 16 NONAME + _ZN16TDpsGetJobStatus11FillRepArgsERK6RArrayI7TDpsArgEP15CDpsTransaction @ 17 NONAME + _ZN16TDpsJobStatusRep5ResetEv @ 18 NONAME + _ZN17TDpsGetCapability11FillRepArgsERK6RArrayI7TDpsArgEP15CDpsTransaction @ 19 NONAME + _ZN17TDpsGetCapability11FillReqArgsER6RArrayI7TDpsArgERS0_I7TDpsEleERjP15CDpsTransaction @ 20 NONAME + _ZN17TDpsGetCapability16CreateReqScriptLERK6RArrayI7TDpsArgERKS0_I7TDpsEleEjR12RWriteStreamP15CDpsTransaction @ 21 NONAME + _ZN20TDpsGetPrinterStatus11FillRepArgsERK6RArrayI7TDpsArgEP15CDpsTransaction @ 22 NONAME + _ZN22TDpsConfigPrintService11FillRepArgsERK6RArrayI7TDpsArgEP15CDpsTransaction @ 23 NONAME + _ZN22TDpsConfigPrintService11FillReqArgsER6RArrayI7TDpsArgERS0_I7TDpsEleERjP15CDpsTransaction @ 24 NONAME + _ZNK10CDpsEngine9DpsFolderEv @ 25 NONAME + _ZTI12TDpsAbortJob @ 26 NONAME ; ## + _ZTI12TDpsStartJob @ 27 NONAME ; ## + _ZTI14TMDpsOperation @ 28 NONAME ; ## + _ZTI16TDpsGetJobStatus @ 29 NONAME ; ## + _ZTI17TDpsGetCapability @ 30 NONAME ; ## + _ZTI20TDpsGetPrinterStatus @ 31 NONAME ; ## + _ZTI22TDpsConfigPrintService @ 32 NONAME ; ## + _ZTV12TDpsAbortJob @ 33 NONAME ; ## + _ZTV12TDpsStartJob @ 34 NONAME ; ## + _ZTV14TMDpsOperation @ 35 NONAME ; ## + _ZTV16TDpsGetJobStatus @ 36 NONAME ; ## + _ZTV17TDpsGetCapability @ 37 NONAME ; ## + _ZTV20TDpsGetPrinterStatus @ 38 NONAME ; ## + _ZTV22TDpsConfigPrintService @ 39 NONAME ; ## + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2006-2007 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: This is the build info file for PictBridge engine. +* +*/ + + +#include +PRJ_MMPFILES +pictbridge.mmp + +PRJ_EXPORTS +../rom/pictbridge.iby CORE_MW_LAYER_IBY_EXPORT_PATH(pictbridge.iby) diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/pictbridge.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/pictbridge.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2006, 2007 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: This is the project file for PictBridge engine +* +*/ + + +#include + +TARGET pictbridge.dll +TARGETTYPE dll +UID 0x1000008d 0x10274798 +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +USERINCLUDE ../inc +MW_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/xml + +SOURCEPATH ../src +SOURCE pictbridge.cpp +SOURCE dpsxmlstring.cpp +SOURCE dpsxmlparser.cpp +SOURCE dpsxmlgenerator.cpp +SOURCE dpsstatemachine.cpp +SOURCE dpsoperation.cpp +SOURCE dpsparam.cpp +SOURCE dpstransaction.cpp +SOURCE dpsstate.cpp +SOURCE dpsfile.cpp +SOURCE dpsusbnotifier.cpp +SOURCE dpsscriptsender.cpp +SOURCE dpsscriptreceiver.cpp +SOURCE dpsptpnotifier.cpp +SOURCE dpsconnectnotifier.cpp + +START RESOURCE dps.rss +TARGETPATH resource +HEADER +END + +LIBRARY euser.lib xmlframework.lib efsrv.lib bafl.lib platformenv.lib +LIBRARY rptp.lib usbman.lib usbwatcher.lib centralrepository.lib estor.lib + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/pictbridgeengine.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/group/pictbridgeengine.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component pictbridgeengine + +source \sf\mw\remoteconn\localconnectivityservice\pictbridgeengine + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dps.rh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dps.rh Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2006 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: The resource header file for Dps configuration. +* +*/ + + +STRUCT dps_configuration + { + BYTE numOfVersions = 1; + BYTE versionMajor = 1; + BYTE versionMinor = 0; + LTEXT vendorName = "Nokia"; + BYTE vendorSpecificVersionMajor = 1; + BYTE vendorSpecificVersionMinor = 0; + LTEXT productName = "S60"; + LTEXT serialNo = "0123456"; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsconnectnotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsconnectnotifier.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines functions of the notification of the +* PTP printer connction and disconnection. +* +*/ + + +#ifndef DPSCONNECTNOTIFIER_H +#define DPSCONNECTNOTIFIER_H + +#include +#include + +class CDpsUsbNotifier; + +/** +* Class for monitoring usb cable connection/disconnection +*/ +NONSHARABLE_CLASS(CDpsConnectNotifier) : public CActive + { + public: + /** + * Two phase constructor + * @param aParent the pointer to UsbNotifier object + * @return a new created ConnectNotifier object + */ + static CDpsConnectNotifier* NewL(CDpsUsbNotifier* aParent); + + /** + * Destructor + */ + ~CDpsConnectNotifier(); + + /** + * Called by UsbNotifier to subscribe connection notification + */ + void ConnectNotify(); + + private: // Functions derived from CActive. + /** + * @see CActive + */ + void RunL(); + + /** + * @see CActive + */ + void DoCancel(); + + /** + * @see CActive + */ + TInt RunError(TInt aError); + + private: + /** + * Second phase constructor + */ + void ConstructL(); + + /** + * Default constructor + */ + CDpsConnectNotifier(CDpsUsbNotifier* aParent); + + private: + // not owned by this class + CDpsUsbNotifier* iNotifier; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsconst.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsconst.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps constance. +* +*/ + + + +#ifndef DPSCONST_H +#define DPSCONST_H +#include +#include + +_LIT(KDpsEnginePanicCat, "Dps Engine"); +const TInt KShiftLength = 16; +const TInt KFullWordWidth = 8; + +// +// +enum TDpsXmlAction + { + EDpsXmlEmpty = 0, + EDpsXmlStart, + EDpsXmlInput, + EDpsXmlOutput, + EDpsXmlOperation, + EDpsXmlEvent, + EDpsXmlResult + }; + +enum TDpsOperation + { + EDpsOpEmpty = 0, + EDpsOpConfigPrintService, + EDpsOpGetCapability, + EDpsOpGetJobStatus, + EDpsOpGetDeviceStatus, + EDpsOpStartJob, + EDpsOpAbortJob, + EDpsOpContinueJob, + EDpsOpGetFileID, + EDpsOpGetFileInfo, + EDpsOpGetFile, + EDpsOpGetPartialFile, + EDpsOpGetFileList, + EDpsOpGetThumb, + EDpsOpMax + }; + +_LIT8(KDpsXmlResult, "result"); +_LIT8(KDpsXmlInput, "input"); +_LIT8(KDpsXmlOutput, "output"); +_LIT8(KDpsXmlPaperTypes, "paperTypes"); +_LIT8(KDpsXmlLayouts, "layouts"); +_LIT8(KDpsXmlPaperSize, "paperSize"); +_LIT8(KDpsXml, "dps"); + +_LIT8(KDpsXmlHeader, ""); +_LIT8(KDpsXmlNS, ""); +_LIT8(KDpsXmlBraceOpen, "<"); +_LIT8(KDpsXmlBraceClose, ">"); +_LIT8(KDpsXmlSlash, "/"); +_LIT8(KDpsXmlSpace, " "); +_LIT8(KDpsXmlEqual, "="); +_LIT8(KDpsXmlQuote, "\""); + +const TUint KSlash = 0x2F; +const TUint KBackSlash = 0x5C; +const TUint KSOH = 0x1; +const TUint KSpace = 0x20; + +const TUint32 KDpsMajorMask = 0xffff0000; +const TUint32 KDpsMinorMask = 0x0000ffff; + + +_LIT8(KDpsLowZero, "0000"); +_LIT(KDpsScriptFile, ".DPS" ); +_LIT(KDpsDeviceResponseFileName, "DRSPONSE.DPS"); +_LIT(KDpsDeviceRequestFileName, "DREQUEST.DPS"); +_LIT(KDpsHostResponseFileName, "HRSPONSE.DPS"); +_LIT(KDpsHostRequestFileName, "HREQUEST.DPS"); +_LIT8(KDpsXmlMimeType, "text/xml"); + +const TInt KDpsResourceVersion = 0; +_LIT(KDpsResource, "resource\\dps.rsc"); + + +#endif // DPSDEFS_H + + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsdefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsdefs.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,483 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps definations. +* +*/ + + +#ifndef DPSDEFS_H +#define DPSDEFS_H + +#include + +const TInt KMaxArgLen = 256; +const TInt KDateLen = 32; + +// special element which has sub-elements, only startJob and +// getCapability have this field +enum TDpsElement + { + EDpsEleEmpty = 0, + EDpsCapability, + EDpsJobConfig, + EDpsPrintInfo, + KDpsEleMax + }; + +enum TDpsEvent + { + EDpsEvtEmpty = 0, + EDpsEvtNotifyJobStatus, + EDpsEvtNotifyDeviceStatus, + KDpsEvtMax + }; + +enum TDpsArgument + { + EDpsArgDpsVersions = 0, + EDpsArgVendorName, + EDpsArgVendorSpecificVersion, + EDpsArgProductName, + EDpsArgSerialNo, + EDpsArgPrintServiceAvailable, + EDpsArgQualities, + EDpsArgPaperSizes, + EDpsArgPaperTypes, + EDpsArgFileTypes, + EDpsArgDatePrints, + EDpsArgFileNamePrints, + EDpsArgImageOptimizes, + EDpsArgLayouts, + EDpsArgFixedSizes, + EDpsArgChroppings, + EDpsArgPrtPID, + EDpsArgFilePath, + EDpsArgCopyID, + EDpsArgProgress, + EDpsArgImagePrinted, + EDpsArgDpsPrintServiceStatus, + EDpsArgJobEndReason, + EDpsArgErrorStatus, + EDpsArgErrorReason, + EDpsArgDisconnectEnable, + EDpsArgCapabilityChanged, + EDpsArgNewJobOk, + EDpsArgQuality, + EDpsArgPaperSize, + EDpsArgPaperType, + EDpsArgFileType, + EDpsArgDatePrint, + EDpsArgFileNamePrint, + EDpsArgImageOptimize, + EDpsArgLayout, + EDpsArgFixedSize, + EDpsArgCropping, + EDpsArgCroppingArea, + EDpsArgFileID, + EDpsArgFileName, + EDpsArgDate, + EDpsArgCopies, + EDpsArgAbortStyle, + EDpsArgImagesPrinted, + EDpsArgBasePathID, + EDpsArgFileSize, + EDpsArgThumbFormat, + EDpsArgThumbSize, + EDpsArgBytesRead, + EDpsArgOffset, + EDpsArgMaxSize, + EDpsArgParentFileID, + EDpsArgMaxNumIDs, + EDpsArgFileIDs, + EDpsArgNumIDs, + EDpsArgMax + }; + +// define the DPS action result +// ref: DPS spec page 52 +// high bits +enum TDpsResultMajorCode + { + EDpsResultOk = 0x1000, + EDpsResultNotExecuted = 0x1001, + EDpsResultNotSupported = 0x1002, + EDpsResultNotRecognized = 0x1003 + }; + +// define the DPS action result minor code +// ref: DPS spec page 52 +// low bits +enum TDpsResultMinorCode + { + EDpsResultNone = 0x0000, + EDpsResultUnrecognizedParam = 0x0001, + EDpsResultillegalParam = 0x0002, + EDpsResultMissingParam = 0x0003, + EDpsResultBufferOverflow = 0x0004 + }; + +// define the DPS service availability +// ref: DPS spec page 53 +// only high bits are useful +enum TDpsServiceAvailability + { + EDpsPrintServiceAvailableFalse = 0x3000, + EDpsPrintServiceAvailableTrue = 0x3001 + }; + +// define printing qualities +// ref: DPS spec page 54 +// only high bits are useful +enum TDpsPrintQuality + { + EDpsPrintQualityDefault = 0x5000, + EDpsPrintQualityNormal = 0x5001, + EDpsPrintQualityDraft = 0x5002, + EDpsPrintQualityFine = 0x5003 + }; + +// define paper sizes +// ref: DPS spec page 54 +// only high bits are useful +enum TDpsPaperSizes + { + EDpsPaperSizeDefault = 0x5100, + EDpsPaperSizeL = 0x5101, + EDpsPaperSize2L = 0x5102, + EDpsPaperSizePostcard = 0x5103, + EDpsPaperSizeCard = 0x5104, + EDpsPaperSize100x150 = 0x5105, + EDpsPaperSize4x6 = 0x5106, + EDpsPaperSize8x10 = 0x5107, + EDpsPaperSizeLetter = 0x5108, + EDpsPaperSize11x17 = 0x510A, + EDpsPaperSizeA0 = 0x5110, + EDpsPaperSizeA1 = 0x5111, + EDpsPaperSizeA2 = 0x5112, + EDpsPaperSizeA3 = 0x5113, + EDpsPaperSizeA4 = 0x5114, + EDpsPaperSizeA5 = 0x5115, + EDpsPaperSizeA6 = 0x5116, + EDpsPaperSizeA7 = 0x5117, + EDpsPaperSizeA8 = 0x5118, + EDpsPaperSizeA9 = 0x5119, + EDpsPaperSizeB0 = 0x5120, + EDpsPaperSizeB1 = 0x5121, + EDpsPaperSizeB2 = 0x5122, + EDpsPaperSizeB3 = 0x5123, + EDpsPaperSizeB4 = 0x5124, + EDpsPaperSizeB5 = 0x5125, + EDpsPaperSizeB6 = 0x5126, + EDpsPaperSizeB7 = 0x5127, + EDpsPaperSizeB8 = 0x5128, + EDpsPaperSizeB9 = 0x5129, + EDpsPaperSize89 = 0x5181, + EDpsPaperSize127 = 0x5182, + EDpsPaperSize100 = 0x5186, + EDpsPaperSize210 = 0x5194 + }; +// define paper types +// ref: DPS spec page 54 +// only high bits are useful +enum TDpsPaperTypeMajor + { + EDpsPaperTypeDefault = 0x5200, + EDpsPaperTypePlainPaper = 0x5201, + EDpsPaperTypePhotoPaper = 0x5202, + EDpsPaperTypeFastPhotopaper = 0x5203 + }; + +enum TDpsPaperTypeMinor + { + EDpsPaperTypeStationery = 1, + EDpsPaperTypeStationeryCoated, + EDpsPaperTypeStationeryInkjet, + EDpsPaperTypeStationeryPreprinted, + EDpsPaperTypeStationeryLetterhead, + EDpsPaperTypeStationeryPrepunched, + EDpsPaperTypeStationeryFine, + EDpsPaperTypeStationeryHeavyweight, + EDpsPaperTypeStationeryLightweight, + EDpsPaperTypeTransparency, + EDpsPaperTypeEnvelope, + EDpsPaperTypeEnvelopePlain, + EDpsPaperTypeEnvelopeWindow, + EDpsPaperTypeContinuous, + EDpsPaperTypeContinuousLong, + EDpsPaperTypeContinuousShort, + EDpsPaperTypeTabStock, + EDpsPaperTypePreCutTabs, + EDpsPaperTypeFullCutTabs, + EDpsPaperTypeMultiPartForm, + EDpsPaperTypeLabels, + EDpsPaperTypeMultiLayer, + EDpsPaperTypeScreen, + EDpsPaperTypeScreenPaged, + EDpsPaperTypePhotographic, + EDpsPaperTypePhotographicGlossy, + EDpsPaperTypePhotographicHighGloss, + EDpsPaperTypePhotographicSemiGloss, + EDpsPaperTypePhotographicSatin, + EDpsPaperTypePhotographicMatte, + EDpsPaperTypePhotographicFilm, + EDpsPaperTypeBackPrintFilm, + EDpsPaperTypeCardStock + }; + +struct TDpsPaperType + { + TDpsPaperTypeMajor iMajor; + TDpsPaperTypeMinor iMinor; + }; + +// define file types +// ref: DPS sepc page 55 +// only high bits are useful +enum TDpsFileType + { + EDpsFileTypeDefault = 0x5300, + EDpsFileTypeEXIF = 0x5301, + EDpsFileTypeJPEG = 0x5303 + }; + +// define date print +// ref: DPS sepc page 55 +// only high bits are useful +enum TDpsDatePrint + { + EDpsDatePrintDefault = 0x5400, + EDpsDatePrintOff = 0x5401, + EDpsDatePrintOn = 0x5402 + }; + +// define fle name print +// ref: DPS sepc page 56 +// only high bits are useful +enum TDpsFileNamePrint + { + EDpsFileNamePrintDefault = 0x5500, + EDpsFileNamePrintOff = 0x5501, + EDpsFileNamePrintOn = 0x5503 + }; + +// define image optimization +// ref: DPS sepc page 56 +// only high bits are useful +enum TDpsImageOptimize + { + EDpsImageOptimizeDefault = 0x5600, + EDpsImageOptimizeOff = 0x5601, + EDpsImageOptimizeOn = 0x5603 + }; + +// define layouts +// ref: DPS sepc page 56 +// only high bits are useful +enum TDpsLayout + { + EDpsLayoutDefault = 0x5700, + EDpsLayout1Up = 0x5701, + EDpsLayout2Up = 0x5702, + EDpsLayout3Up = 0x5703, + EDpsLayout4Up = 0x5704, + EDpsLayout5Up = 0x5705, + EDpsLayout6Up = 0x5706, + EDpsLayout7Up = 0x5707, + EDpsLayout8Up = 0x5708, + EDpsLayout9Up = 0x5709, + EDpsLayoutIndex = 0x57FE, + EDpsLayoutBorderless = 0x57FF + }; + +// define fixed sizes +// ref: DPS sepc page 57 +// only high bits are useful +enum TDpsFixedSizes + { + EDpsFixedSizeDefault = 0x5800, + EDpsFixedSize4x6 = 0x5803, + EDpsFixedSize5x7 = 0x5804, + EDpsFixedSizeA4 = 0x5811, + EDpsFixedSizeLetter = 0x5812 + }; + +// define croppings +// ref: DPS sepc page 57 +// only high bits are useful +enum TDpsCropping + { + EDpsCroppingDefault = 0x5900, + EDpsCroppingOff = 0x5901, + EDpsCroppingOn = 0x5902 + }; + +// define Device status +// ref: DPS sepc page 61 +// only high bits are useful +// 1. Print service status +enum TDpsPrintServiceStatus + { + EDpsPrintServiceStatusInit = 0, + EDpsPrintServiceStatusPrinting = 0x7000, + EDpsPrintServiceStatusIdle = 0x7001, + EDpsPrintServiceStatusPaused = 0x7002 + }; + +enum TDpsJobStatus + { + // 2. Job end reasons + EDpsJobStatusNotEnded = 0x7100, + EDpsJobStatusEndedOk = 0x7101, + EDpsJobStatusEndedAbortImmediately = 0x7102, + EDpsJobStatusEndedAbortCompleteCurrent = 0x7103, + EDpsJobStatusEndedOther = 0x7104 + }; + + // 3. Error status +enum TDpsErrorStatus + { + EDpsErrorStatusOk = 0x7200, + EDpsErrorStatusWarning = 0x7201, + EDpsErrorStatusFatal = 0x7202 + }; + +enum TDpsJobEndReasonMajor + { + // 4. Job end reasons + EDpsJobErrorNone = 0x7300, + EDpsJobErrorPaper = 0x7301, + EDpsJobErrorInk = 0x7302, + EDpsJobErrorHardware = 0x7303, + EDpsJobErrorFile = 0x7304 + }; + +enum TDpsJobEndReasonPaper + { + EDpsPaperDefault = 0, + EDpsPaperEmpty = 0x0100, + EDpsPaperLoad = 0x200, + EDpsPaperEject = 0x300, + EDpsPaperMedia = 0x400, + EDpsPaperJam = 0x500, + EDpsPaperNearlyEmpty = 0x600, + EDpsPaperTypeSizeNoMatch = 0x700 + }; + +enum TDpsJobEndReasonInk + { + EDpsInkDefault = 0, + EDpsInkEmpty = 0x100, + EDpsInkLow = 0x200, + EDpsInkWaste = 0x300 + }; + +enum TDpsJobEndReasonHard + { + EDpsHardDefault = 0, + EDpsHardFatal = 0x0100, + EDpsHardServiceCall = 0x0200, + EDpsHardNotAvailable = 0x0300, + EDpsHardBusy = 0x0400, + EDpsHardLever = 0x0500, + EDpsHardCoverOpen = 0x0600, + EDpsHardNoMarkingHead = 0x0700, + EDpsHardInkCoverOpen = 0x0800, + EDpsHardNoInkCartridge = 0x0900 + }; + +enum TDpsJobEndReasonFile + { + EDpsFileDefault = 0, + EDpsFilePrintInfo = 0x0100, + EDpsFileDecode = 0x0200 + }; + +struct TDpsJobEndReason + { + TDpsJobEndReasonMajor iMajor; + TDpsJobEndReasonPaper iPaperMinor; + TDpsJobEndReasonInk iInkMinor; + TDpsJobEndReasonHard iHardMinor; + TDpsJobEndReasonFile iFileMinor; + }; + +enum TDpsDisconnectEnable + { + // 5. Disconnect Enable + EDpsDisconnectEnableFalse = 0x7400, + EDpsDisconnectEnableTrue = 0x7401 + }; + +enum TDpsCapabilityChanged + { + // 6. Capability changes + EDpsCapabilityChangedFalse = 0x7500, + EDpsCapabilityChangedTrue = 0x7501 + }; + +enum TDpsNewJobOk + { + // 7. New Job Ok + EDpsNewJobOkFalse = 0x7600, + EDpsNewJobOkTrue = 0x7601 + }; + + +// define error reason minor codes +// ref: DPS sepc page 62 +enum TDpsErrorMinorCode + { + EDpsErrorPaperEmpty = 0x0100, + EDpsErrorPaperJam = 0x0500, + EDpsErrorPaperUnsupport = 0x0700, + EDpsErrorInkEmpty = 0x0100 + }; + +// define About style +// ref: DPS spec page 68 +// only high bits are useful +enum TDpsAbortStyle + { + EDpsAbortStyleImmediately = 0x9000, + EDpsAbortStyleCompleteCurrent = 0x9001 + }; + +typedef TUint TDpsAttribute; + +struct TDpsEle + { + TDpsElement iElement; + // number of arguments included in this element + TInt iNum; + }; + +typedef RArray TDpsEleArray; + +struct TDpsArg + { + TDpsArgument iElement; + TBuf8 iContent; + }; + +// used for get DPS respond +typedef RArray TDpsArgArray; + +struct TDpsResult + { + TDpsResultMajorCode iMajorCode; + TDpsResultMinorCode iMinorCode; + }; + +#endif + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsfile.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsfile.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,90 @@ +/* +* Copyright (c) 2006, 2007 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: This class reads and writes the file content. +* +*/ + + +#ifndef DPSFILE_H +#define DPSFILE_H + +#include +#include + +/** +* This class creates, reads, writes and deletes dps files. +*/ +NONSHARABLE_CLASS(CDpsFile) : public CBase + { +public: + /** + * Two-phased constructor. + * @return An instance of CDpsFile. + */ + static CDpsFile* NewL(); + + /** + * C++ destructor. + */ + ~CDpsFile(); + +public: + /** + * Creates the dps script file + * @param aFileName the script file name + * @param aScript the script file content + * @aFileSize the file size + * @return KErrNone if successful or systme wide error if failed + */ + TInt CreateScriptFile(const TDesC& aFileName, const TDesC8& aScript, + const TInt aFileSize); + + /** + * Gets the content of the script file + * @param aFileName the file name + * @param aScript the file content. It has the valid content after this + * call is returned. + * @return KErrNone if successful or systme wide error if failed + */ + void GetContentL(const TDesC& aFileName, TDes8& aScript); + + /** + * Deletes the file + * @param aFileName the name of the file to be delted. + * @return KErrNone if successful or systme wide error if failed + */ + TInt Delete(const TDesC& aFileName); + + /** + * @return RFs& the reference to the file server session, which + * is shared by the whole component (dps engine binary) + */ + inline RFs& FileSession(); + + void FileSizeL(const TDesC& aFileName, TInt& aSize); + +private: + + /** + * Second phase constructor + */ + void ConstructL(); + +private: + // file server session, owned by this class + RFs iFs; + }; + +#include "dpsfile.inl" +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsfile.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsfile.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2006, 2007 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: This class reads and writes the file content. +* +*/ + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +RFs& CDpsFile::FileSession() + { + return iFs; + } \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsoperation.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsoperation.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,312 @@ +/* +* Copyright (c) 2006, 2007 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: This classes define dps operations requests and replys. +* +*/ + + +#ifndef DPSOPERATION_H +#define DPSOPERATION_H + +#include +#include "dpsparam.h" + +class CDpsTransaction; +/** +* This is the base class for all dps operations. +*/ +class TMDpsOperation + { + friend class CDpsTransaction; + public: + inline TMDpsOperation(); + /** + * Fills in dps operation request parameters. Dps engine must + * call this function to fill the dps operation request parameters. + * @param aArgs the dps operation request arguments + * @param aElems the dps operation elements + * @param aAttrib the dps operation attributes + * @param aTrader the pointer to CDpsTransaction object for filling + * the request arguments for Dps Engine + * @return TInt KErrNone if successful or other system error if failed + */ + + protected: + inline virtual TInt FillReqArgs(TDpsArgArray& aArgs, + TDpsEleArray& aElems, + TDpsAttribute& aAttrib, + CDpsTransaction* aTrader); + + + /** + * Fills in the dps operation reply parameters. Dps engine uses this + * function after the dps operation gets responsed. After this call, + * dps engine will call RequestComplete() to inform the client the + * completion of the dps operation. + * @param aArgs dps operation reply arguments. + * @param aParam the pointer to CDpsTransacton object for filling + * the reply arguments for the client (print UI engine) + * @return TInt KErrNone if successful or other system error if failed + */ + inline virtual TInt FillRepArgs(const TDpsArgArray& aArguments, + CDpsTransaction* aTrader); + + + /** + * Creates the Dps request script + * @param aArgs the arguments of the Dps request + * @param aElements the elements of the Dps request + * @param aAttribute the attribute of the Dps request + * @param aScript the buffer of the script + * @param aTrader the pointer to the CDpsTransaction object for + * creating the Dps script + */ + IMPORT_C virtual void CreateReqScriptL(const TDpsArgArray& aArguments, + const TDpsEleArray& aElements, + TDpsAttribute aAttribute, + RWriteStream& aScript, + CDpsTransaction* aTrader); + + + public: + // the dps operation result + TDpsResult iResult; + // the dps operaton enumeration + TDpsSupportedOp iOperation; + }; + +/** +* The class for dps startJob operation +*/ +class TDpsStartJob : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsStartJob(); + + private: + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillReqArgs(TDpsArgArray& aArgs, TDpsEleArray& aElems, + TDpsAttribute& aAttrib, + CDpsTransaction* aTrader); + + /** + * @see TMDpsOperation + */ + IMPORT_C void CreateReqScriptL(const TDpsArgArray& aArgs, + const TDpsEleArray& aElements, + TDpsAttribute aAttribute, + RWriteStream& aScript, + CDpsTransaction* aTrader); + + public: + // the request operation parameter which needed to be filled by + // the client + TDpsStartJobReq iReqParam; + + }; + +/** +* The class for dps abortJob operation +*/ +class TDpsAbortJob : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsAbortJob(); + + private: + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillReqArgs(TDpsArgArray& aArgs, TDpsEleArray& aElems, + TDpsAttribute& aAttrib, + CDpsTransaction* aTrader); + + public: + // the request operation parameter which needed to be filled by + // the client + TDpsAbortJobReq iReqParam; + + }; + +/** +* The class for dps continueJob operation +*/ +class TDpsContinueJob : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsContinueJob(); + }; + +/** +* The class for dps continueJob operation +*/ +class TDpsGetJobStatus : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsGetJobStatus(); + + private: + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillRepArgs(const TDpsArgArray& aArgs, + CDpsTransaction* aTrader); + + public: + // the request operation parameter which needed to be filled by + // the client + TDpsJobStatusRep iRepParam; + + }; + +/** +* The class for dps continueJob operation +*/ +class TDpsGetPrinterStatus : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsGetPrinterStatus(); + + private: + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillRepArgs(const TDpsArgArray& aArgs, + CDpsTransaction* aTrader); + + public: + // the request operation parameter which needed to be filled by + // the client + TDpsPrinterStatusRep iRepParam; + + }; + +/** +* The class for dps continueJob operation +*/ +class TDpsGetCapability : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsGetCapability(); + + private: + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillReqArgs(TDpsArgArray& aArgs, TDpsEleArray& aElems, + TDpsAttribute& aAttrib, + CDpsTransaction* aTrader); + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillRepArgs(const TDpsArgArray& aArgs, + CDpsTransaction* aParam); + + /** + * @see TMDpsOperation + */ + IMPORT_C void CreateReqScriptL(const TDpsArgArray& aArgs, + const TDpsEleArray& aElements, + TDpsAttribute aAttribute, + RWriteStream& aScript, + CDpsTransaction* aTrader); + + public: + // the request operation parameter which needed to be filled by + // the client + TDpsCapReq iReqParam; + // the request operation parameter which needed to be filled by + // the client + TDpsCapRep iRepParam; + + }; + +/** +* The class for dps continueJob operation +*/ +class TDpsConfigPrintService : public TMDpsOperation + { + friend class CDpsTransaction; + public: + /** + * Default constructor + */ + inline TDpsConfigPrintService(); + + private: + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillReqArgs(TDpsArgArray& aArgs, TDpsEleArray& aElems, + TDpsAttribute& aAttrib, + CDpsTransaction* aTrader); + /** + * @see TMDpsOperation + */ + IMPORT_C TInt FillRepArgs(const TDpsArgArray& aArgs, + CDpsTransaction* aTrader); + + public: + // the request operation parameter which needed to be filled by + // the client + TDpsConfigPrintReq iReqParam; + + // the request operation parameter which needed to be filled by + // the client + TDpsConfigPrintRep iRepParam; + + }; + +/** +* The class defines dps events +*/ +NONSHARABLE_CLASS(TDpsEvents) + { + public: + // the event enumeration + TDpsEvent iEvent; + // jobStatus event + TDpsGetJobStatus iJobEvent; + // printerStatus event + TDpsGetPrinterStatus iPrinterEvent; + }; + +#include "dpsoperation.inl" +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsoperation.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsoperation.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,113 @@ +/* +* Copyright (c) 2006, 2007 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: inline functions of TMDpsOperation +* +*/ + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TMDpsOperation::TMDpsOperation() + { + iOperation = EDpsEmptyRequest; + iResult.iMajorCode = EDpsResultOk; + iResult.iMinorCode = EDpsResultNone; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt TMDpsOperation::FillReqArgs(TDpsArgArray&, TDpsEleArray&, + TDpsAttribute&, CDpsTransaction*) + { + return KErrNone; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt TMDpsOperation::FillRepArgs(const TDpsArgArray&, CDpsTransaction*) + { + return KErrNone; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsStartJob::TDpsStartJob() : TMDpsOperation() + { + iOperation = EDpsStartJob; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsAbortJob::TDpsAbortJob() : TMDpsOperation() + { + iOperation = EDpsAbortJob; + iReqParam.iAbortStyle = EDpsAbortStyleImmediately; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsContinueJob::TDpsContinueJob() : TMDpsOperation() + { + iOperation = EDpsContinueJob; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsGetJobStatus::TDpsGetJobStatus() : TMDpsOperation() + { + iOperation = EDpsGetJobStatus; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsGetPrinterStatus::TDpsGetPrinterStatus() : TMDpsOperation() + { + iOperation = EDpsGetPrinterStatus; + iRepParam = TDpsPrinterStatusRep(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsGetCapability::TDpsGetCapability() : TMDpsOperation() + { + iOperation = EDpsGetCapability; + iReqParam = TDpsCapReq(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsConfigPrintService::TDpsConfigPrintService() : TMDpsOperation() + { + iOperation = EDpsConfigPrintService; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsparam.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsparam.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,225 @@ +/* +* Copyright (c) 2006, 2007 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: These classes define the dps operation parameters. +* +*/ + + +#ifndef DPSPARAM_H +#define DPSPARAM_H + +#include "dpsdefs.h" + +enum TDpsSupportedOp + { + EDpsEmptyRequest = 0, + EDpsConfigPrintService, + EDpsGetCapability, + EDpsGetJobStatus, + EDpsGetPrinterStatus, + EDpsStartJob, + EDpsAbortJob, + EDpsContinueJob + }; + +struct TDpsArgsInt + { + TDpsArgument iElement; + TUint32 iContent; + }; + +/** +* The class defines the print job information which is needed by +* startJob operation +*/ +NONSHARABLE_CLASS(TDpsPrintInfo) + { +public: + /** + * + */ + inline TDpsPrintInfo(); + + /** + * Resets all parameters + */ + IMPORT_C void Reset(); + + // the file name + TBuf iFile; + + TBool isDPOF; + // this is 0 when UI passed it to dps. Dps engine must find the ID + // for this file by asking ptp server + TUint32 iFileID; + // if don't need to print file name, this is EFalse + TBool iFileName; + // if don't need to print date, this is empty + TBuf iDate; + // if only one cope, this is emtpy + TInt iCopies; + // if not DPOF, this is emtpy + TInt iPrtPID; + // if not DPOF, this is emtpy + TInt iCopyID; + }; + +/** +* Dps version defination +*/ +NONSHARABLE_CLASS(TDpsVersion) + { + public: + TInt iMajor; + TInt iMinor; + }; + +/** +* AbortJob request +*/ +NONSHARABLE_CLASS(TDpsAbortJobReq) + { + public: + TInt iAbortStyle; + }; + +/** +* ConfigurePrintService request +*/ +class TDpsConfigPrintReq + { + public: + RArray iDpsVersions; + TBuf8 iVendorName; + TDpsVersion iVendorVersion; + TBuf8 iProductName; + TBuf8 iSerialNo; + + /** + * Destructor. Declared as virtual so that it will be called by + * its derived class. + */ + inline virtual ~TDpsConfigPrintReq(); + + /** + * Resets all class variables. + */ + inline void Reset(); + }; + +/** +* ConfigurePrintService reply +*/ +NONSHARABLE_CLASS(TDpsConfigPrintRep) : public TDpsConfigPrintReq + { + public: + TInt iPrintAvailable; + }; + +/** +* GetCapability request. +*/ +NONSHARABLE_CLASS(TDpsCapReq) + { + public: + TDpsArgument iCap; + // layouts and paperTypes requests attributes + TDpsAttribute iAttribute; + }; + +/** +* GetCapability reply +*/ +NONSHARABLE_CLASS(TDpsCapRep) : public TDpsCapReq + { + public: + RArray iContent; + RArray iPaperType; + /** + * Destructor + */ + inline ~TDpsCapRep(); + + /** + * Resets all class variables + */ + inline void Reset(); + }; + +/** +* StartJob request has printInfo and jobConfig parameters. +*/ +NONSHARABLE_CLASS(TDpsStartJobReq) + { + public: + /** + * Resets all member variables + */ + inline void Reset(); + + /** + * Gets the number of all parameters, including ones under elements + * @return the number of parameters + */ + IMPORT_C TInt GetParamNum(); + + /** + * Destructor + */ + inline ~TDpsStartJobReq(); + RArray iJobConfig; + //there might be multiple printInfo in case of several pictures are + //selected to be printed + RArray iPrintInfo; + }; + +/** +* This class is for job status reply +*/ +NONSHARABLE_CLASS(TDpsJobStatusRep) + { + public: + + /** + * + */ + inline TDpsJobStatusRep(); + /** + * Resets all memeber variables + */ + IMPORT_C void Reset(); + + TInt iProgress; + TInt iImagesPrinted; + TFileName iFilePath; + TInt iPrtPID; + TInt iCopyID; + }; + +/** +* This class is for device status reply +*/ +NONSHARABLE_CLASS(TDpsPrinterStatusRep) + { + public: + TDpsPrintServiceStatus iPrintStatus; + TDpsJobStatus iJobStatus; + TDpsErrorStatus iErrorStatus; + TDpsJobEndReason iJobEndReason; + TBool iDisconnectEnable; + TBool iCapabilityChange; + TBool iNewJobOk; + }; +#include "dpsparam.inl" +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsparam.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsparam.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2006, 2007 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: inline functions of dps parameter. +* +*/ + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsPrintInfo::TDpsPrintInfo() + { + Reset(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsConfigPrintReq::Reset() + { + iDpsVersions.Reset(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsConfigPrintReq::~TDpsConfigPrintReq() + { + iDpsVersions.Close(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsCapRep::~TDpsCapRep() + { + Reset(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsStartJobReq::Reset() + { + iJobConfig.Reset(); + iPrintInfo.Reset(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsStartJobReq::~TDpsStartJobReq() + { + iJobConfig.Close(); + iPrintInfo.Close(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsCapRep::Reset() + { + iContent.Reset(); + iPaperType.Close(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsJobStatusRep::TDpsJobStatusRep() + { + Reset(); + } \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsptpnotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsptpnotifier.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,78 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines functions of setting personality to +* PTP. +* +*/ + + +#ifndef DPSPTPNOTIFIER_H +#define DPSPTPNOTIFIER_H + +#include + +class CDpsUsbNotifier; + +/** +* Class for monitoring Ptp personality setting +*/ +NONSHARABLE_CLASS(CDpsPtpNotifier) : public CActive + { + public: + /** + * Two phase constructor + * @param aParent the pointer to UsbNotifier object + * @return a new created PtpNotifier object + */ + static CDpsPtpNotifier* NewL(CDpsUsbNotifier* aParent); + + /** + * Destructor + */ + ~CDpsPtpNotifier(); + + /** + * Called by UsbNotifier to subscribe set personality notification + */ + void ChangePtpPersonality(); + + private: // Functions derived from CActive. + /** + * @see CActive + */ + void RunL(); + + /** + * @see CActive + */ + void DoCancel(); + + /** + * @see CActive + */ + TInt RunError(TInt aError); + + private: + /** + * Default constructor + */ + CDpsPtpNotifier(CDpsUsbNotifier* aParent); + + private: + // not owned by this class + CDpsUsbNotifier* iNotifier; + + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsscriptreceiver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsscriptreceiver.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps script receiving function. +* +*/ + + +#ifndef DPSSCRIPTRECEIVER_H +#define DPSSCRIPTRECEIVER_H + +#include + +class CDpsEngine; +class CDpsStateMachine; + +/** +* This class is an active object. It listens on the ptp server +* object receiving notification. +*/ +NONSHARABLE_CLASS(CDpsScriptReceiver) : public CActive + { + public: + /** + * Two phase constructor + * + * @param aOperator the pointer to the dps state machine + * @return a CDpsScriptReceiver instance + */ + static CDpsScriptReceiver* NewL(CDpsStateMachine* aOperator); + + /** + * Destructor + */ + ~CDpsScriptReceiver(); + + /** + * Issues the request of receiving. + */ + void WaitForReceive(); + + /** + * @return the file name of the object been received + */ + const TDesC& FileNameAndPath(); + + private: // Functions derived from CActive. + /** + * @see CActive + */ + void RunL(); + + /** + * @see CActive + */ + void DoCancel(); + + /** + * @see CActive + */ + TInt RunError(TInt aError); + + private: + + /** + * Default constructor + * + * @param aOperator the pointer to the dps state machine + */ + CDpsScriptReceiver(CDpsStateMachine* aOperator); + + /** + * Gets the file name from the full filename + * @param aFileName the full filename including file path + * @return KErrNone if Ok, otherwise the system wide error + */ + TInt GetFileName(TDes& aFileName); + + private: + + // not owned by this class + CDpsStateMachine* iOperator; + // file name of received script file + TFileName iFileNameAndPath; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsscriptsender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsscriptsender.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps script sending function. +* +*/ + + +#ifndef DPSSCRIPTSENDER_H +#define DPSSCRIPTSENDER_H + +#include + +class CDpsEngine; +class CDpsStateMachine; + +/** +* This class is an active object. It sends the script to ptp server and +* listens on the ptp server for notification of sending result. +*/ +NONSHARABLE_CLASS(CDpsScriptSender) : public CActive + { + public: + /** + * Two phase constructor + * + * @param aOperator the pointer to the dps state machine + * @return a CDpsScriptSender instance + */ + static CDpsScriptSender* NewL(CDpsStateMachine* aOperator); + + /** + * Destructor + */ + ~CDpsScriptSender(); + + /** + * Issues sending request + * @param aReply ETrue is the script is the reply, EFalse if the + * script is the request. + */ + TInt SendScript(TBool aReply); + + private: // Functions derived from CActive. + /** + * @see CActive + */ + void RunL(); + + /** + * @see CActive + */ + void DoCancel(); + + /** + * @see CActive + */ + TInt RunError(TInt aError); + + private: + /** + * Default constructor + * + * @param aOperator the pointer to the dps state machine + */ + CDpsScriptSender(CDpsStateMachine* aOperator); + + private: + + // not owned by this class + CDpsStateMachine* iOperator; + + // telling if the current sending session is a reply or a request + TBool iReply; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsstate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsstate.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,179 @@ +/* +* Copyright (c) 2006, 2007 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: These classes define the dps states. +* +*/ + + +#ifndef DPSSTATE_H +#define DPSSTATE_H + +#include +class CDpsStateMachine; + +/** +* This class is the base classes for all dps state classes. +* We follow state design pattern here so the state class defines all +* transactions among states as member functions. +*/ +class MDpsState + { + public: + + /** + * Script sent notification + */ + virtual void ScriptSentNotifyL(TBool aReply) = 0; + + /** + * Script received notification + */ + virtual void ScriptReceivedNotifyL(TBool aReply) = 0; + + /** + * Error handling of the transaction + */ + virtual void Error(TInt aErr) = 0; + }; + +/** +* Idle state class +*/ +NONSHARABLE_CLASS(TDpsIdleState) : public MDpsState + { + public: + /** + * Constructor + */ + TDpsIdleState(CDpsStateMachine* aStateMachine); + public: + + /** + * @see MDpsState + */ + void ScriptSentNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void ScriptReceivedNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void Error(TInt aErr); + + + private: + CDpsStateMachine* iStateMachine; + }; + +/** +* Sending Request state class. Device sending request starts form this state +*/ +NONSHARABLE_CLASS(TDpsSendingReqState) : public MDpsState + { + public: + /** + * Constructor + */ + TDpsSendingReqState(CDpsStateMachine* aStateMachine); + + public: + + /** + * @see MDpsState + */ + void ScriptSentNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void ScriptReceivedNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void Error(TInt aErr); + + private: + CDpsStateMachine* iStateMachine; + }; + +/** +* Waiting Reply state class (script has been sent) +*/ +NONSHARABLE_CLASS(TDpsWaitingRepState) : public MDpsState + { + public: + /** + * Constructor + */ + TDpsWaitingRepState(CDpsStateMachine* aStateMachine); + + public: + + /** + * @see MDpsState + */ + void ScriptSentNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void ScriptReceivedNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void Error(TInt aErr); + + private: + CDpsStateMachine* iStateMachine; + }; + +/** +* Sending Reply state class. The device starts replying the host request +* in this state. +*/ +NONSHARABLE_CLASS(TDpsSendingRepState) : public MDpsState + { + public: + /** + * Constructor + */ + TDpsSendingRepState(CDpsStateMachine* aStateMachine); + + public: + + /** + * @see MDpsState + */ + void ScriptSentNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void ScriptReceivedNotifyL(TBool aReply); + + /** + * @see MDpsState + */ + void Error(TInt aErr); + + private: + CDpsStateMachine* iStateMachine; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsstatemachine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsstatemachine.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps state machine. +* +*/ + + +#ifndef DPSSTATEMACHINE_H +#define DPSSTATEMACHINE_H + +#include "dpsconst.h" +#include "dpsdefs.h" + +class CDpsTransaction; +class CDpsEngine; +class CDpsScriptReceiver; +class MDpsState; +class TMDpsOperation; +class CDpsScriptSender; + +/** +* This class defines the dps state machine using the state design pattern +*/ +NONSHARABLE_CLASS(CDpsStateMachine) : public CBase + { + + public: + /** + * Two phase constructor + * @param aEngine a pointer to dps engine object + * @return the CDpsOperator instance + */ + static CDpsStateMachine* NewL(CDpsEngine *aEngine); + + /** + * Destructor + */ + ~CDpsStateMachine(); + + /** + * Creates the dps transaction. It further calls CreateRequest() + * to create dps device request script. + * @param aParam the dps operation object, passed from UI + */ + void StartTransactionL(TMDpsOperation* aOperation); + + /** + * Initializes the state machine + */ + void Initialize(); + + /** + * Handles errors + */ + inline void Error(TInt err); + + /** + * Notifies script sent + */ + inline void ScriptSentNotifyL(TBool aReply); + + /** + * Notifies script received + */ + inline void ScriptReceivedNotifyL(TBool aReply); + + /** + * Sets the current state + * @param aState the state to be set + */ + inline void SetState(MDpsState* aState); + + /** + * Gets the idle state + */ + inline MDpsState* IdleState() const; + + /** + * @return the sending request state object + */ + inline MDpsState* SendingReqState() const; + + /** + * @return the waiting for reply state object + */ + inline MDpsState* WaitingRepState() const; + + /** + * @return the sending reply state object + */ + inline MDpsState* SendingRepState() const; + + /** + * @return the CDpsScriptReceiver object + */ + inline CDpsScriptReceiver* ScriptReceiver() const; + + /** + * @return CDpsScriptSender pointer + */ + inline CDpsScriptSender* ScriptSender() const; + + /** + * @return the CDpsTransaction object + */ + inline CDpsTransaction* Trader() const; + + /** + * @return the current Dps operation enum + */ + inline TDpsOperation Operation() const; + + /** + * Sets the current Dps operation enum + * @param aOp the Dps operation enum to be set + */ + inline void SetOperation(TDpsOperation aOp); + + /** + * @return the Dps operation object + */ + inline TMDpsOperation* MOperation() const; + + /** + * @return the Dps event enum + */ + inline TDpsEvent Event() const; + + /** + * Sets the current Dps event + * @param aEvent the Dps event to be set + */ + inline void SetEvent(TDpsEvent aEvent); + + /** + * @return the current state. + */ + inline MDpsState* CurState() const; + + /** + * @return the dps engine object. + */ + inline CDpsEngine* DpsEngine() const; + + /** + * + */ + inline TInt CurError() const; + + private: + /** + * Default constructor + * @param aEngine a pointer to dps engine object + */ + CDpsStateMachine(CDpsEngine* aEngine); + + /** + * Two phase constructor. The functions which called in constructor + * and might leave should be called here + */ + void ConstructL(); + + + private: + // owned by this class + MDpsState* iIdleState; + // owned by this class + MDpsState* iSendingReqState; + // owned by this class + MDpsState* iWaitingRepState; + // owned by this class + MDpsState* iSendingRepState; + // pointer to the current state object + MDpsState* iCurState; + // not owned by this class + TMDpsOperation* iMOperation; + + // not owned by this class + CDpsEngine *iEngine; + // the current dps operation, can be empty + TDpsOperation iOperation; + // the current dps event, can be empty + TDpsEvent iEvent; + // the pointer to dps operation object, which takes + // care of creating and parsing dps script + // owned by this class + CDpsTransaction *iTrader; + // the pointer to dps script receiving notifier + // owned by this class + CDpsScriptReceiver* iScriptReceiver; + + // the pointer to script sender object, owned by this class + CDpsScriptSender* iScriptSender; + TInt iCurError; + }; + +#include "dpsstatemachine.inl" +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsstatemachine.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsstatemachine.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,191 @@ +/* +* Copyright (c) 2006, 2007 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: inline functions of CDpsStatemachine +* +*/ + + +#include "dpsstate.h" + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsStateMachine::ScriptSentNotifyL(TBool aReply) + { + iCurState->ScriptSentNotifyL(aReply); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsStateMachine::ScriptReceivedNotifyL(TBool aReply) + { + iCurState->ScriptReceivedNotifyL(aReply); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsStateMachine::Error(TInt err) + { + iCurError = err; + iCurState->Error(err); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsStateMachine::SetState(MDpsState* aState) + { + iCurState = aState; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +MDpsState* CDpsStateMachine::IdleState() const + { + return iIdleState; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +MDpsState* CDpsStateMachine::SendingReqState() const + { + return iSendingReqState; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +MDpsState* CDpsStateMachine::WaitingRepState() const + { + return iWaitingRepState; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +MDpsState* CDpsStateMachine::SendingRepState() const + { + return iSendingRepState; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsScriptReceiver* CDpsStateMachine::ScriptReceiver() const + { + return iScriptReceiver; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsScriptSender* CDpsStateMachine::ScriptSender() const + { + return iScriptSender; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsTransaction* CDpsStateMachine::Trader() const + { + return iTrader; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsOperation CDpsStateMachine::Operation() const + { + return iOperation; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsStateMachine::SetOperation(TDpsOperation aOp) + { + iOperation = aOp; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TMDpsOperation* CDpsStateMachine::MOperation() const + { + return iMOperation; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsEvent CDpsStateMachine::Event() const + { + return iEvent; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsStateMachine::SetEvent(TDpsEvent aEvent) + { + iEvent = aEvent; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +MDpsState* CDpsStateMachine::CurState() const + { + return iCurState; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsEngine* CDpsStateMachine::DpsEngine() const + { + return iEngine; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CDpsStateMachine::CurError() const + { + return iCurError; + } \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpstransaction.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpstransaction.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,192 @@ +/* +* Copyright (c) 2006, 2007 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: This class creates and parses dps operations. +* +*/ + + +#ifndef DPSTRANSACTION_H +#define DPSTRANSACTION_H + +#include +#include "dpsdefs.h" +#include "dpsoperation.h" + +class CDpsFile; +class CDpsEngine; +class CDpsXmlGenerator; +class CDpsXmlParser; +class CDpsScriptSender; +class TDpsVersion; +class CDpsStateMachine; +class TMDpsOperation; + +/** +* This class creates and parses dps operation (request and reply) +*/ +NONSHARABLE_CLASS(CDpsTransaction) : public CBase + { + public: + /** + * Two phase constructor + * + * @param iOperator the pointer to dps operation object + * @return the dps transaction instance + */ + static CDpsTransaction* NewL(CDpsStateMachine* iOperator); + + /** + * Destructor + */ + ~CDpsTransaction(); + + public: + /** + * Creates the dps operation request + * @param aParam the dps operation parameters + */ + void CreateRequestL(TMDpsOperation* aOperation); + + /** + * Parses dps operation script + * @param aReply if the script is the reply from the host + * aReply is ETrue, otherwise the script must be the request + * from the device and aReply is EFalse + */ + void ParseScriptL(TBool aReply); + + /** + * @return ETrue if the script is the reply from the host, + * EFalse if the script is the request from the host + */ + inline TBool IsReply(); + + /** + * @return the CDpsXmlParser object + */ + inline CDpsXmlParser* Parser(); + + /** + * @return the CDpsXmlGenerator object + */ + inline CDpsXmlGenerator* Generator(); + + /** + * @return the CDpsEngine object + */ + inline CDpsEngine* Engine(); + + + /** + * Converts the version in descriptor tpye to TDpsVersion type + * @param aParser the version in descriptor + * @param aVersoin the version in TDpsVersion and will be returned + * @return KErrNone if OK, other system error if failed + */ + TInt ConvertVersion(TLex8& aParser, TDpsVersion& aVersion); + + /** + * @return CDpsStateMachine pointer to dps state machine object + */ + inline CDpsStateMachine* Operator(); + + /** + * Parses the string of percentage to integer + * @param aPer the string of percentage to be parsed + * @return TInt the percentage in integer + */ + TInt ParsePercentage(const TDes8& aPer); + + /** + * @return the error of result in integer + */ + inline TInt ResultErr(); + + + /** + * @return CDpsFile pointer to dps file object + */ + inline CDpsFile* FileHandle(); + + /** + * + */ + void HandleHostRequestError(TInt aErr); + + private: + /** + * Default constructor + * + * @param iOperator the pointer to the dps operator + */ + CDpsTransaction(CDpsStateMachine* iOperator); + + /** + * Second phase constructor. + */ + void ConstructL(); + + /** + * Creates the dps event reply. + * @param aArguments dps event arguments + * @param aResult the result of the reply. See Dps spec for + * detail result value + */ + void CreateEventReplyL(TDpsEvent aEvent, const TDpsResult& aResult); + + /** + * Creates the dps request reply based on host dps request. + * There is only one dps request from host (others are from device) - + * GetFileID + * @param aArgs the dps argument from the dps xml script + * @param aResult the reply result to be filling to the dps xml script + */ + void CreateRequestReplyL(const TDpsArgArray& aArgs, + const TDpsResult& result); + + /** + * Removes the unprintable chars (LF, CR, TAB and spaces) between + * two XML attributes. It seems + * sybmian XML framework does filter out these character even though + * they are not belong to the attribute. Some printers (Cannon) send + * Dps request (XML script) in human readable format, e.g. including + * LF, CR and spaces among XML attributes. + * @param aScript the XML script to be filtered out + */ + void Filter(TDes8& aScript); + + /** + * Changes the file path for GetFileID request + * + */ + void SubstitutePath(TDes8& aPath); + + private: + + // the pointer to dps operator object + // not owned by this class + CDpsStateMachine* iOperator; + // the pointer to xml generator object, owned by this class + CDpsXmlGenerator *iXmlGen; + // the pointer to xml parser object, owned by this class + CDpsXmlParser *iXmlPar; + // the pointer to file generator object, owned by this class + CDpsFile *iFile; + + // the current parsed script is reply or request + TBool iReply; + }; + +#include "dpstransaction.inl" +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpstransaction.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpstransaction.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2006, 2007 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: This class creates and parses dps operations. +* +*/ + +#include "dpsstatemachine.h" +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CDpsTransaction::IsReply() + { + return iReply; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlParser* CDpsTransaction::Parser() + { + return iXmlPar; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsEngine* CDpsTransaction::Engine() + { + return iOperator->DpsEngine(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlGenerator* CDpsTransaction::Generator() + { + return iXmlGen; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsStateMachine* CDpsTransaction::Operator() + { + return iOperator; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsFile* CDpsTransaction::FileHandle() + { + return iFile; + } \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsusbnotifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsusbnotifier.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,158 @@ +/* +* Copyright (c) 2006, 2007 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: This class implements functions of set ptp personality, the +* notification of the PTP printer connection and the +* notification of the PTP printer disconnection. +* +*/ + + +#ifndef DPSUSBNOTIFIER_H +#define DPSUSBNOTIFIER_H + +#include +#include +#include "pictbridge.h" +#include +#include + +class CDpsPtpNotifier; +class CDpsConnectNotifier; +class CDpsPersonalityWatcher; + +/** +* Class for monitoring the usb personality change and cable +* connection/disconnectin +*/ +NONSHARABLE_CLASS(CDpsUsbNotifier) : public CActive + { + friend class CDpsPtpNotifier; + friend class CDpsConnectNotifier; + friend class CDpsPersonalityWatcher; + + public: + /** + * Two phase constructor + * @param aEngine the pointer to the dps engine object + * @param the CDpsUsbNotifier instance + */ + static CDpsUsbNotifier* NewL(CDpsEngine* aEngine); + + /** + * Destructor + */ + ~CDpsUsbNotifier(); + + /** + * Issues the request for printer connection notification + */ + void WaitForPrinterNotify(); + + /** + * Cancels the request for printer connection notification + */ + void CancelPrinterNotify(); + + /** + * Issues the request for printer connect/disconnect notification + */ + void ConnectNotify(); + + /** + * @return TBool Checks if the PTP printer is connected + */ + TBool IsConfigured() const; + + /** + * + */ + TBool IsSetPrintModeIssued(); + + private: + /** + * Second phase constructor + */ + void ConstructL(); + + /** + * Default constructor + * @param aEngine the pointer to the dps engine + */ + CDpsUsbNotifier(CDpsEngine *aEngine); + + /** + * Called by PtpNotifier to indicate a ptp printer/pc is connected + */ + void PtpNotify(TInt aErr); + + /** + * + */ + void PersonalityChanged(); + + /** + * Called by ConnectNotifier to indeicate the cable disconnect + */ + void DisconnectNotify(TUsbDeviceState aState); + + /** + * Updates the current device state + * @return ETrue if OK, EFalse if failed + */ + TInt ConnectState(); + + /** + * Changes back to the previous personality + */ + void Rollback(); + + private: // from CActive + /** + * @See CActive::RunL + */ + void RunL(); + + /** + * @See CActive::RunError + */ + TInt RunError(TInt aErr); + + /** + * @See CActive::DoCancel + */ + void DoCancel(); + + private: + // not owned by this class + CDpsEngine* iEngine; + // owned by this class + CDpsPtpNotifier* iPtpP; + // owned by this class + CDpsConnectNotifier* iConnectP; + // owned by this class + CDpsPersonalityWatcher* iPersonalityWatcher; + TInt iPersonality; + TUsbDeviceState iConnectState; + // indication of whether the PTP printer has connected + TBool iConfigured; + CDpsEngine::TConnectionStatus iConnection; + // owned by this class + RUsbWatcher iUsbW; + // owned by this class + RUsb iUsbM; + // if rollback to previous personality is needed when application quits + TBool iRollback; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlgenerator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlgenerator.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,163 @@ +/* +* Copyright (c) 2006, 2007 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: This class creates the dps xml script. +* +*/ + + +#ifndef DPSXMLGENERATOR_H +#define DPSXMLGENERATOR_H + +#include +#include +#include "dpsdefs.h" +#include "dpsconst.h" + +class CDpsEngine; + +/** +* This class creates dps scripts. +*/ +NONSHARABLE_CLASS(CDpsXmlGenerator) : public CBase + { + public: + /** + * Two phase constructor + * @param aEngine a pointer to dps engine + * @return a CDpsXmlGenerator instance + */ + static CDpsXmlGenerator* NewL(CDpsEngine* aEngine); + + /** + * Destructor + */ + ~CDpsXmlGenerator(); + + /** + * Creates the Dps result script + * @param aEvent a dps event, can be empty + * @param aScript dps script content. after this function is + * returned, aScript has the valid content + * @param aResult the operation result + */ + void CreateResultScriptL(TDpsEvent aEvent, + RWriteStream& aScript, + const TDpsResult& aResult) const; + + /** + * Creates the dps reply script + */ + void CreateReplyScriptL(TDpsOperation aOperation, + RWriteStream& aScript, + const TDpsResult& aResult, + const TDpsArg& aArg) const; + + private: + /** + * Default constructor + * @param aEngine a pointer to dps engine + */ + CDpsXmlGenerator(CDpsEngine* aEngine); + + public: + /** + * Fillin the start part of a script + * @param aScript the content of a script + */ + void StartDocumentL(RWriteStream& aScript) const; + + /** + * Fillin the end part of a script + * @param aScript the content of a script + */ + void EndDocumentL(RWriteStream& aScript) const; + + /** + * Fillin the start part of a input in the script + * @param aScript the content of a script + */ + void StartInputL(RWriteStream& aScript) const; + + /** + * Fillin the end part of a input in the script + * @param aScript the content of a script + */ + void EndInputL(RWriteStream& aScript) const; + + /** + * Fillin the start part of the result in the script + * @param aScript the content of a script + * @param aResult the result to be filled + */ + void StartResultL(RWriteStream& aScript, const TDpsResult& aResult) const; + + /** + * Fillin the end part of the result in the script + * @param aScript the content of a script + */ + void EndResultL(RWriteStream& aScript) const; + + /** + * Fillin the start part of the operation in the script + * @param aOperation the operation enumeration + * @param aScript the content of a script + * @param aEnd ETrue if the operation does not have an argument, + * EFalse otherwise + */ + void StartOperationL(TDpsOperation aOperation, RWriteStream& aScript, + TBool aEnd = EFalse) const; + + /** + * Fillin the end part of the operation in the script + * @param aOperation the operation enumeration + * @param aScript the content of a script + */ + void EndOperationL(TDpsOperation aOperation, RWriteStream& aScript) const; + + /** + * Fillin the event parameter in the script + * @param aScript the content of a script. + * @param aEvent the event enumeration + */ + void CreateEventL(RWriteStream& aScript, TDpsEvent aEvent) const; + + /** + * Fillin the arguments + * @param aScript the content of a script + * @param aArgument arguments to be used to fill the script + * @param aAttrib the attribute + */ + void CreateArgL(RWriteStream& aScript, const TDpsArg& aArgument, + TDpsAttribute aAttrib = 0) const; + + /** + * Fillin the start part of an element + * @param aElement the element enumeration + * @param aScript the content of a script + */ + void StartElementL(TDpsElement aElement, RWriteStream& aScript) const; + + /** + * Fillin the end part of an element + * @param aElement the element enumeration + * @param aScript the content of a script + */ + void EndElementL(TDpsElement aElement, RWriteStream& aScript) const; + + private: + // not owned by this class + CDpsEngine* iEngine; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlparser.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2006, 2007 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: This class parses the dps xml script. +* +*/ + + +#ifndef DPSXMLPARSER_H +#define DPSXMLPARSER_H + +#include +#include +#include +#include "dpsdefs.h" +#include "dpsconst.h" + +using namespace Xml; + +class CDpsEngine; + +/** +* The interface acts as a hook between the xml framework and the detailed +* implementation +*/ +class MDpsExtensionHandler + { + public: + enum + { + // dps engine dll uid + EInterfaceUid = 0x10274798 + }; + }; + +/** +* The parser for dps script +*/ +NONSHARABLE_CLASS(CDpsXmlParser) : public CBase, public MContentHandler, + public MDpsExtensionHandler + { + public: + /** + * Two phase constructor + * @param aEngine the dps engine pointer + * @return a CDpsXmlParaser instance + */ + static CDpsXmlParser* NewL(CDpsEngine* aEngine); + + /** + * Destructor + */ + ~CDpsXmlParser(); + + /** + * @return ETrue if the script is a dps notification, + * otherwise EFalse + */ + inline TBool IsEvent() const; + + /** + * Gets the dps operation result from the parser and sets it to the + * dps reply + * @param aResult the dps operatoin result + */ + inline void SetOperationResult(TDpsResult& aResult) const; + + /** + * Gets the dps operation enumeration of this script + * @return the dps operation enumeration + */ + inline TDpsOperation Operation() const; + + /** + * Sets the dps operation arguments + * @param aParams the arguments to be set + */ + inline void SetParameters(TDpsArgArray& aParams); + + /** + * Gets the dps event of this script + * @return the dps event enumeration + */ + inline TDpsEvent Event() const; + + /** + * Gets the dps attribute + * @param aAttrib the attribute got + */ + inline void GetAttribute(TDpsAttribute& aAttrib) const; + + /** + * @return ETrue if this dps operation has attribue, othewise EFalse + */ + inline TBool HasAttribute() const; + + /** + * Gets the dps arguments + * @param aParams the arguments to be returned + */ + inline void GetParameters(TDpsArgArray& aParams) const; + + /** + * Resets the member variables + */ + void Reset(); + + + private: + // From MContentHandler + /** + * @see MContentHandler + */ + void OnStartDocumentL(const RDocumentParameters& aDocParam, + TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnEndDocumentL(TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnStartElementL(const RTagInfo& aElement, + const RAttributeArray& aAttributes, + TInt aErrCode); + + /** + * @see MContentHandler + */ + void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnContentL(const TDesC8& aBytes, TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnStartPrefixMappingL(const RString& aPrefix, + const RString& aUri, + TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnSkippedEntityL(const RString& aName, TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, + TInt aErrorCode); + + /** + * @see MContentHandler + */ + void OnError(TInt aErrorCode); + + /** + * @see MContentHandler + */ + TAny* GetExtendedInterface(const TInt32 aUid); + + private: + /** + * Default constructor + * @param aEngine a pointer to the dps engine + */ + CDpsXmlParser(CDpsEngine* aEngine); + + /** + * + */ + void ParseAttributesL(const RAttributeArray& aAttributes, + const TDesC8& aTag); + + + private: + TDpsXmlAction iAction; + TDpsAttribute iAttrib; + + TDpsEvent iDpsEvent; + TDpsOperation iDpsOperation; + TDpsResult iDpsResult; + // only one + TDpsElement iElement; + TDpsArgArray iDpsArgs; + // not owned by this class + CDpsEngine* iEngine; + }; +#include "dpsxmlparser.inl" +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlparser.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlparser.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 2006, 2007 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: This class parses the dps xml script. +* +*/ + + +#ifdef _DEBUG +# define __IF_DEBUG(t) {RDebug::t;} +#else +# define __IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlParser::GetAttribute(TDpsAttribute& aAttrib) const + { + aAttrib = iAttrib; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CDpsXmlParser::HasAttribute() const + { + return iAttrib != 0; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsOperation CDpsXmlParser::Operation() const + { + return iDpsOperation; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsEvent CDpsXmlParser::Event() const + { + return iDpsEvent; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlParser::GetParameters(TDpsArgArray& aParams) const + { + aParams = iDpsArgs; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TBool CDpsXmlParser::IsEvent() const + { + return iDpsEvent != EDpsEvtEmpty; + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlParser::SetParameters(TDpsArgArray& aParams) + { + iDpsArgs = aParams; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlParser::SetOperationResult(TDpsResult& aResult) const + { + aResult.iMajorCode = iDpsResult.iMajorCode; + aResult.iMinorCode = iDpsResult.iMinorCode; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlstring.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/dpsxmlstring.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines the dps constant strings. +* +*/ + + +#ifndef DPSXMLSTRING_H +#define DPSXMLSTRING_H + +#include + +typedef RArray TDpsStrings; + +/** +* The class for the dps string +*/ +class TDpsXmlString + { + public: + /** + * + */ + static TDpsXmlString* NewL(); + + /** + * + */ + ~TDpsXmlString(); + + private: + /** + * + */ + void ConstructL(); + + /** + * + */ + TDpsXmlString(); + + public: + TDpsStrings iDpsOperationStrings; + TDpsStrings iDpsElementStrings; + TDpsStrings iDpsEventStrings; + TDpsStrings iDpsArgStrings; + }; + +#endif \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/pictbridge.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/inc/pictbridge.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,274 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines and implements the API for UI engine. +* +*/ + + +#ifndef PICTBRIDGE_H +#define PICTBRIDGE_H + +#include "dpsdefs.h" +#include + +class TDpsXmlString; +class CDpsUsbNotifier; +class TMDpsOperation; +class TDpsEvents; +class CDpsStateMachine; +class TDpsConfigPrintReq; + +NONSHARABLE_CLASS(CDpsEngine) : public CBase + { + public: + enum TConnectionStatus + { + ENotConnected = 1, + // ptp printer is connected + EPrinterConnected, + // ptp printer is disconnected + EPrinterDisconnected, + // in ptp personality, but device other than printer connected + EOtherConnected, + // in personality other than ptp and device is connected + EWrongPrintModeConnected + }; + + public: + /** + * @since 3.2 + * @lib pictbridge.lib + * + * The client should always call this function to get the Dps + * engine object. + * This function guarantees there is only one engine in the + * thread, a singleton. + * @return CDpsEngine* the only Dps Engine instance in a thread + * + */ + IMPORT_C static CDpsEngine* GetEngineL(); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Deletes the dps engine object. + */ + IMPORT_C void Delete(); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Sets the personality to PTP. This must be the first call after + * the client has got the CDpsEngine object and should only be + * called once. + * @param aStatus the asynchronous request and it has the connect + * state after returned. The client can use this value to get the + * current connect status. + */ + IMPORT_C void SetPrintMode(TRequestStatus& aStatus); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Cancels the SetPrintMode request + */ + IMPORT_C void CancelPrintMode(); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Registers connection notification. This function can inform + * the connection and the disconnect, two states. Connection: the + * personality has been set to PTP by SetPrintMode, but the cable + * is not connected at the moment. The connection will be informed + * by this function. + * Disconnect: the user has unplugged the cable or changed + * personality. + * + * @param aStatus the asynchronous request status and it has the + * connect state after returned. + */ + IMPORT_C void ConnectStateNotify(TRequestStatus& aStatus); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Registers Dps event notification. There are two events: jobStatus + * and deviceStatus. This function is called immediately after + * ConnecSatetNotify call. After this call, the client should issue + * ConfigPrintService request to configure the printer. + * @param aParam this parameter serves as out parameter. After + * processing the event from the printer, Dps engine will put + * the correct value to this parameter. As the result, the client + * can get the event by accessing this parameter after this request + * gets answered. So the client should have it as a class variable + * @param aStatus the asynchronous status. + */ + IMPORT_C void DpsEventNotify(TDpsEvents& aParam, + TRequestStatus& aStatus); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Cancels Dps event notification. The client only needs to call + * this to reset the state of the dps engine and it must be called + * after CancelDpsRequest(). + */ + IMPORT_C void CancelDpsEventNotify(); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Starts a Dps operation. + * If this function returned with error, e.g. leaving, the client + * should call CancelDpsRequest(), to cancel the pending request. + * @param aRequest the Dps operation. It includes both request and + * reply. The client should fill in the request parameter and the + * Dps engine will fill in the reply paramter when this operation + * is finished. The client should declare it as a class variable. + * @param aStatus the asynchronous status + */ + IMPORT_C void DoDpsRequestL(TMDpsOperation* aRequest, + TRequestStatus& aStatus); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Cancels the dps operation. Calling this will reset the state of + * the dps engine, either because of error happened or the client + * wants to do this on purpose. In most cases, the client never need + * to cancel the ongoing request because the request will end very + * quick, normally within several million seconds. The client normally + * waits until the request is finished, either succesfully or + * failed indicated by timeout. + */ + IMPORT_C void CancelDpsRequest(); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Reads the phone dps configuration from the resource file + * @param aConfig the dps configuration is returned by this parameter + */ + IMPORT_C void GetDpsConfigL(TDpsConfigPrintReq& aConfig); + + /** + * @since 3.2 + * @lib pictbridge.lib + * + * Gets the folder where the printer configure file should be kept. + * The print App needs a file to store the printer configure when it + * first calls configPrintService Dps request. The print app can + * quit at anytime while the ptpserver (stack) is still running. + * Since the ptpstack is keeping the session with the printer, the + * printer always does not excute the second onward + * configPrintService request. As the result, the restarted print app + * cannot get the printer configure. So there must be a file for + * keeping this information and it will be deleted by ptpserver when + * it quits, e.g. when the connection with the printer is lost. + * @return TDesC& the folder descriptor + */ + IMPORT_C const TDesC& DpsFolder() const; + + /** + * Gets the Dps event object + * @return TDpsEvents* the pointer to the Dps event. + */ + TDpsEvents* Event() const; + + /** + * Gets the ptp server reference + * @return RPtp& the reference to ptp server. + */ + RPtp& Ptp(); + + /** + * Gets the dps constant strings + * @return TDpsGlobalData* the pointer to dps constant strings. + */ + TDpsXmlString* DpsParameters() const; + + /** + * @return dps event notify AO status + * + */ + TRequestStatus*& EventRequest(); + + /** + * @return dps request AO status + */ + TRequestStatus*& OperationRequest(); + + /** + * @return connection notify AO status + */ + TRequestStatus*& PrinterConnectRequest(); + + /** + * Sets the Dps file folder. + * @param aFolder the foler location, readed from Ptp server/stack + */ + void SetDpsFolder(const TDesC& aFolder); + + + private: + + /** + * Prohibits the destructor called by the client. To delete engine object + * Delete() must be called + */ + ~CDpsEngine(); + + /** + * Second phase constructor. Operations which might leave should + * be called here + */ + void ConstructL(); + + private: + // string constant, owned by this class + TDpsXmlString* iDpsParameters; + // dps engine state machine, owned by this class + CDpsStateMachine *iDpsOperator; + // dps operation AO request, owned by this class + TRequestStatus* iDpsOperationRequest; + // dps event AO request, owned by this class + TRequestStatus* iDpsEventRequest; + // printer connection/disconnection AO request, owned by this class + TRequestStatus* iPrinterConnectRequest; + + // usb cable connection/disconnection notifier, owned by this class + CDpsUsbNotifier *iUsbNotifier; + + // out parameter for events (NotifyJobStatus and + // NotifyDeviceStauts), it is + // passed from UI engine, not owned by this class + TDpsEvents* iOutEvent; + + // Ptp Server session, owned by this class + RPtp iPtp; + // the folder where all dps releated files should be stored + TFileName iDpsFolder; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/rom/pictbridge.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/rom/pictbridge.iby Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +/* +* Copyright (c) 2006 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: iby file for pictbrige engine +* +*/ + +#ifndef __PICTBRIDGE_IBY +#define __PICTBRIDGE_IBY +#ifdef __USB_PICTBRIDGE +file=ABI_DIR\BUILD_DIR\pictbridge.dll SHARED_LIB_DIR\pictbridge.dll + +data=DATAZ_\RESOURCE_FILES_DIR\dps.RSC RESOURCE_FILES_DIR\dps.RSC +#endif __USB_PICTBRIDGE +#endif __PICTBRIDGE_IBY \ No newline at end of file diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dps.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dps.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2006 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: The dps resource file. +* +*/ + + +#include +#include "dps.rh" + + +RESOURCE BA_RSS_SIGNATURE + { + signature = 1; + } + +RESOURCE dps_configuration dps_config + { + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsconnectnotifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsconnectnotifier.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2006, 2007 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: This class implements functions of the notification of the +* PTP printer connction and disconnection. +* +*/ + + +#include +#include "dpsconnectnotifier.h" +#include "dpsusbnotifier.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TUint KUsbAllStates = 0xFFFFFFFF; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsConnectNotifier* CDpsConnectNotifier::NewL(CDpsUsbNotifier* aParent) + { + IF_DEBUG(Print(_L("CDpsConnectNotifier::NewL"))); + CDpsConnectNotifier* self = new(ELeave) CDpsConnectNotifier(aParent); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsConnectNotifier::CDpsConnectNotifier(CDpsUsbNotifier* aParent) : + CActive(EPriorityNormal), iNotifier(aParent) + { + IF_DEBUG(Print(_L(">>>CDpsConnectNotifier::Ctor"))); + CActiveScheduler::Add(this); + IF_DEBUG(Print(_L("<<>>CDpsConnectNotifier::~"))); + Cancel(); + IF_DEBUG(Print(_L("<<>>CDpsConnectNotifier::ConnectNotify"))); + if (!IsActive()) + { + iNotifier->iUsbM.DeviceStateNotification(KUsbAllStates, + iNotifier->iConnectState, + iStatus); + SetActive(); + } + IF_DEBUG(Print(_L("<<>>CDpsConnectNotifier::RunL %x"), iNotifier->iConnectState)); + if (KErrNone == iStatus.Int()) + { + + // notify connect (by set personality) + if (iNotifier->iConnectState == EUsbDeviceStateConfigured && + !iNotifier->iConfigured) + { + iNotifier->PtpNotify(KErrNone); + } + // Notify disconnect on cable disconnection and for compatible printer + // also when other device state than configured or suspended is entered. + else if ( (iNotifier->iConnectState == EUsbDeviceStateUndefined) || + ( iNotifier->IsConfigured() && + (iNotifier->iConnectState != EUsbDeviceStateConfigured) && + (iNotifier->iConnectState != EUsbDeviceStateSuspended) ) ) + { + iNotifier->DisconnectNotify(iNotifier->iConnectState); + } + else // not the state we are interested, keep on listening + { + iNotifier->iUsbM.DeviceStateNotification(KUsbAllStates, + iNotifier->iConnectState, + iStatus); + SetActive(); + } + + } + else + { + IF_DEBUG(Print(_L("\tthe iStatus is wrong!!!"))); + } + IF_DEBUG(Print(_L("<<>>CDpsConnectNotifier::DoCancel"))); + iNotifier->iUsbM.DeviceStateNotificationCancel(); + IF_DEBUG(Print(_L("<<ConstructL(); + CleanupStack::Pop(); + return self; + } + +// -------------------------------------------------------------------------- +// +// -------------------------------------------------------------------------- +// +void CDpsFile::ConstructL() + { + IF_DEBUG(Print(_L(">>>CDpsFile::ConstructL"))); + User::LeaveIfError(iFs.Connect()); + IF_DEBUG(Print(_L("<<>>CDpsFile::~"))); + iFs.Close(); + IF_DEBUG(Print(_L("<<>>CDpsFile::CreateScriptFile size %d"), aFileSize)); + RFile file; + TInt err = file.Replace(iFs, aFileName, EFileShareExclusive); + IF_DEBUG(Print(_L("---the error is %d"), err)); + if (err != KErrNone) + { + return err; + } + + TInt fileSize = aScript.Size(); + if (!fileSize) + { + err = file.Write(_L8(""), 0); + } + else if ( fileSize <= aFileSize) + { + err = file.Write(aScript, fileSize); + } + else + { + err = file.Write(aScript, aFileSize); + } + + file.Close(); + IF_DEBUG(Print(_L("<<>>CDpsFile::GetContent %S"), &aFileName)); + RFile file; + CleanupClosePushL(file); + User::LeaveIfError(file.Open(iFs, aFileName, EFileRead)); + User::LeaveIfError(file.Read(aScript)); + CleanupStack::PopAndDestroy(); + IF_DEBUG(Print(_L("<<>>CDpsFile::FileSize %S"), &aFileName)); + RFile file; + CleanupClosePushL(file); + User::LeaveIfError(file.Open(iFs, aFileName, EFileRead)); + User::LeaveIfError(file.Size(aSize)); + CleanupStack::PopAndDestroy(); + IF_DEBUG(Print(_L("<< +#include "dpsoperation.h" +#include "dpsconst.h" +#include "dpstransaction.h" +#include "pictbridge.h" +#include "dpsxmlparser.h" +#include "dpsxmlgenerator.h" +#include "dpsstatemachine.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TInt KConfigPrintService = 5; +const TInt KCopyFileWidth = 3; +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C void TMDpsOperation::CreateReqScriptL( + const TDpsArgArray& aArguments, + const TDpsEleArray& /*aElements*/, + TDpsAttribute /*aAttribute*/, + RWriteStream& aScript, + CDpsTransaction* aTrader) + { + IF_DEBUG(Print(_L(">>>TMDpsOperation::CreateReqScript"))); + CDpsXmlGenerator* g = aTrader->Generator(); + g->StartDocumentL(aScript); + g->StartInputL(aScript); + TInt count = aArguments.Count(); + if (!count) + { + g->StartOperationL((TDpsOperation)iOperation, aScript, ETrue); + } + else + { + g->StartOperationL((TDpsOperation)iOperation, aScript); + for (TInt i = 0; i < count; i++) + { + g->CreateArgL(aScript, aArguments[i]); + } + g->EndOperationL((TDpsOperation)iOperation, aScript); + } + + g->EndInputL(aScript); + g->EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>TDpsStartJob::FillReqArgs"))); + TInt imageCount = iReqParam.iPrintInfo.Count(); + if (!imageCount) + { + return KErrUnknown; + } + TUint32* objectHandles = new TUint32[imageCount]; + if (!objectHandles) + { + return KErrNoMemory; + } + for (TInt i = 0; i < imageCount; i++) + { + TInt err = aTrader->Engine()->Ptp(). + GetObjectHandleByName( + iReqParam.iPrintInfo[i].iFile, objectHandles[i], ETrue); + if (err != KErrNone) + { + IF_DEBUG(Print(_L("---error %d"), err)); + + delete[] objectHandles; + return err; + } + } + TDpsArg* argsP = new TDpsArg[iReqParam.GetParamNum()]; + if (!argsP) + { + delete[] objectHandles; + return KErrNoMemory; + } + TDpsEle* elemsP = new TDpsEle[1 + imageCount]; + if (!elemsP) + { + delete[] argsP; + delete[] objectHandles; + return KErrNoMemory; + } + // jobConfig + TInt count = iReqParam.iJobConfig.Count(); + + elemsP[0].iElement = EDpsJobConfig; + elemsP[0].iNum = count; + aElements.Append(elemsP[0]); + for (TInt i = 0; i < count; i++) + { + argsP[i].iElement = iReqParam.iJobConfig[i].iElement; + // the parameter only has high bytes (0x1234) + argsP[i].iContent.AppendNumUC(iReqParam.iJobConfig[i].iContent, EHex); + // we have to append the low bytes (0000) + argsP[i].iContent.Append(KDpsLowZero); + aArgs.Append(argsP[i]); + IF_DEBUG(Print(_L("the element is %d"), argsP[i].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[i].iContent))); + } + + // printInfo + for (TInt j = 0; j < imageCount; j++) + { + // there is at least one argument for fileID + TInt k = 1; + elemsP[j + 1].iElement = EDpsPrintInfo; + argsP[count].iElement = EDpsArgFileID; + argsP[count].iContent.AppendNumFixedWidth(objectHandles[j], EHex, + KFullWordWidth); + aArgs.Append(argsP[count]); + + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + count++; + + // not empty + if (iReqParam.iPrintInfo[j].iFileName) + { + argsP[count].iElement = EDpsArgFileName; + argsP[count].iContent.Copy(iReqParam.iPrintInfo[j].iFile); + aArgs.Append(argsP[count]); + + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + + k++; count++; + } + // not empty + if (iReqParam.iPrintInfo[j].iDate.Size()) + { + argsP[count].iElement = EDpsArgDate; + argsP[count].iContent.Copy(iReqParam.iPrintInfo[j].iDate); + aArgs.Append(argsP[count]); + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + if (iReqParam.iPrintInfo[j].iCopies != 0) + { + argsP[count].iElement = EDpsArgCopies; + argsP[count].iContent.AppendNumFixedWidthUC( + iReqParam.iPrintInfo[j].iCopies, EDecimal, KCopyFileWidth); + aArgs.Append(argsP[count]); + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + if (iReqParam.iPrintInfo[j].iPrtPID != 0) + { + argsP[count].iElement = EDpsArgPrtPID; + argsP[count].iContent.AppendNumUC(iReqParam.iPrintInfo[j].iPrtPID); + aArgs.Append(argsP[count]); + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + if (iReqParam.iPrintInfo[j].iCopyID != 0) + { + argsP[count].iElement = EDpsArgCopyID; + argsP[count].iContent.AppendNumUC(iReqParam.iPrintInfo[j].iCopyID); + aArgs.Append(argsP[count]); + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + + elemsP[j + 1].iNum = k; + aElements.Append(elemsP[j + 1]); + } + + delete[] objectHandles; + delete[] argsP; + delete[] elemsP; + IF_DEBUG(Print(_L("<<>>TDpsStartJob::CreateReqScript"))); + CDpsXmlGenerator* g = aTrader->Generator(); + g->StartDocumentL(aScript); + g->StartInputL(aScript); + g->StartOperationL((TDpsOperation)iOperation, aScript); + TInt count = aElements.Count(); + TInt limit = 0; + for (TInt i = 0; i < count; i++) + { + g->StartElementL(aElements[i].iElement, aScript); + TInt init = limit; + limit = (i == 0 ? aElements[0].iNum : limit + aElements[i].iNum); + for (TInt j = init; j < limit; j++) + { + g->CreateArgL(aScript,aArguments[j]); + } + g->EndElementL(aElements[i].iElement, aScript); + } + g->EndOperationL((TDpsOperation)iOperation, aScript); + g->EndInputL(aScript); + g->EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>TDpsAbortJob::FillReqArgs"))); + TDpsArg arg; + arg.iElement = EDpsArgAbortStyle; + arg.iContent.AppendNumUC(iReqParam.iAbortStyle, EHex); + arg.iContent.Append(KDpsLowZero); + aArgs.Append(arg); + IF_DEBUG(Print(_L("<<>>TDpsGetCapability::FillReqArgs"))); + // only one element + TDpsEle elems; + elems.iElement = EDpsCapability; + elems.iNum = 1; + aElements.Append(elems); + + // only one parameter + TDpsArg argsP; + argsP.iElement = iReqParam.iCap; + aArgs.Append(argsP); + if (EDpsArgPaperTypes == iReqParam.iCap || EDpsArgLayouts == iReqParam.iCap) + { + if (iReqParam.iAttribute != 0) + { + aAttrib = iReqParam.iAttribute; + } + } + IF_DEBUG(Print(_L("<<>>TDpsGetCapability::CreateReqScript"))); + CDpsXmlGenerator* g = aTrader->Generator(); + g->StartDocumentL(aScript); + g->StartInputL(aScript); + g->StartOperationL((TDpsOperation)iOperation, aScript); + g->StartElementL(aElements[0].iElement, aScript); + const TInt count = aArguments.Count(); + for (TInt i = 0; i < count; i++) + { + g->CreateArgL(aScript, aArguments[i], aAttribute); + } + g->EndElementL(aElements[0].iElement, aScript); + g->EndOperationL((TDpsOperation)iOperation, aScript); + g->EndInputL(aScript); + g->EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>TDpsConfigPrintService::FillReqArgs"))); + TDpsArg* argsP = new TDpsArg[KConfigPrintService]; + if (!argsP) + { + return KErrNoMemory; + } + TInt count; + for (TInt i = 0; i < KConfigPrintService; i++) + { + switch (i) + { + // there might be several versions + case EDpsArgDpsVersions: + argsP[i].iElement = EDpsArgDpsVersions; + count = iReqParam.iDpsVersions.Count(); + for (TInt j = 0; j < count; j++) + { + argsP[i].iContent.AppendNumUC + (iReqParam.iDpsVersions[j].iMajor); + argsP[i].iContent.Append(_L(".")); + argsP[i].iContent.AppendNumUC + (iReqParam.iDpsVersions[j].iMinor); + } + aArgs.Append(argsP[i]); + break; + + case EDpsArgVendorName: // vender name + + argsP[i].iElement = EDpsArgVendorName; + argsP[i].iContent.Append(iReqParam.iVendorName); + aArgs.Append(argsP[i]); + + break; + + case EDpsArgVendorSpecificVersion: // vender version (optional) + if (iReqParam.iVendorVersion.iMajor && + iReqParam.iVendorVersion.iMinor) + { + argsP[i].iElement = EDpsArgVendorSpecificVersion; + argsP[i].iContent.AppendNumUC(iReqParam.iVendorVersion.iMajor); + argsP[i].iContent.Append(_L(".")); + argsP[i].iContent.AppendNumUC(iReqParam.iVendorVersion.iMinor); + aArgs.Append(argsP[i]); + } + + break; + + case EDpsArgProductName: // produce name + argsP[i].iElement = EDpsArgProductName; + argsP[i].iContent.Append(iReqParam.iProductName); + aArgs.Append(argsP[i]); + break; + + case EDpsArgSerialNo: // serialNo (optional) + if (iReqParam.iSerialNo.Length()) + { + argsP[i].iElement = EDpsArgSerialNo; + argsP[i].iContent.Append(iReqParam.iSerialNo); + aArgs.Append(argsP[i]); + } + + break; + + default: + IF_DEBUG(Print(_L("***Wrong parameter"))); + delete[] argsP; + return KErrArgument; + } + + } + delete[] argsP; + IF_DEBUG(Print(_L("<<>>TDpsGetCapability::FillRepArgs"))); + CDpsXmlParser* XmlPar = aTrader->Parser(); + + if (aArgs.Count()) + { + if (EDpsArgPaperTypes == aArgs[0].iElement || + EDpsArgLayouts == aArgs[0].iElement) + { + if (XmlPar->HasAttribute()) + { + TDpsAttribute attrib; + XmlPar->GetAttribute(attrib); + iRepParam.iContent.Append(attrib); + } + else + { + iRepParam.iContent.Append(0); + } + } + TUint32 value; + TLex8 converter; + TLex8 parser(aArgs[0].iContent); + parser.SkipSpace(); + while (!parser.Eos()) + { + parser.Mark(); + parser.SkipCharacters(); + if (KFullWordWidth == parser.TokenLength()) + { + TPtrC8 token = parser.MarkedToken(); + converter.Assign(token); + parser.SkipSpace(); + } + else + { + IF_DEBUG(Print(_L("***Wrong argument"))); + return KErrArgument; + } + TInt error = converter.Val(value, EHex); + if (error != KErrNone) + { + IF_DEBUG(Print(_L("convert error %d"), error)); + return error; + } + if (EDpsArgPaperTypes == aArgs[0].iElement) + { + TDpsPaperType paperType; + TInt major = value >> KShiftLength; + paperType.iMajor = (TDpsPaperTypeMajor)major; + paperType.iMinor = (TDpsPaperTypeMinor)(value & KDpsMinorMask); + iRepParam.iPaperType.Append(paperType); + } + else + { + // remove the extra zeros + value = value >> KShiftLength; + iRepParam.iContent.Append(value); + IF_DEBUG(Print(_L("the value is %x"), value)); + } + + } + iRepParam.iCap = aArgs[0].iElement; + + } + + IF_DEBUG(Print(_L("<<>>TDpsConfigPrintService::FillRepArgs"))); + TInt error = KErrNone; + TLex8 converter, parser; + const TInt count = aArgs.Count(); + + for (TInt i = 0; i < count; i++) + { + switch (aArgs[i].iElement) + { + case EDpsArgPrintServiceAvailable: + converter.Assign(aArgs[i].iContent); + TInt64 result; + error = converter.Val(result, EHex); + if (error != KErrNone) + { + IF_DEBUG(Print(_L("*** convert error"))); + return error; + } + // removes the low four bytes zeros. + IF_DEBUG(Print(_L("--Printer available is %x"), result)); + result = result >> KShiftLength; + iRepParam.iPrintAvailable = result; + break; + + case EDpsArgDpsVersions: + TDpsVersion version; + + parser.Assign(aArgs[i].iContent); + while (!parser.Eos()) + { + parser.Mark(); + parser.SkipCharacters(); + if (parser.TokenLength()) + { + TPtrC8 token = parser.MarkedToken(); + converter.Assign(token); + parser.SkipSpace(); + } + else + { + IF_DEBUG(Print(_L("***wrong !!!"))); + return KErrArgument; + } + error = aTrader->ConvertVersion(converter, version); + if (error != KErrNone) + { + return error; + } + iRepParam.iDpsVersions.Append(version); + } + break; + + case EDpsArgVendorName: + iRepParam.iVendorName.Copy(aArgs[i].iContent); + IF_DEBUG(Print(_L + ("vendor name is %S"), &iRepParam.iVendorName)); + break; + + case EDpsArgVendorSpecificVersion: + parser.Assign(aArgs[i].iContent); + aTrader->ConvertVersion(parser, version); + iRepParam.iVendorVersion = version; + IF_DEBUG(Print(_L + ("vendor version is %x"), iRepParam.iVendorVersion)); + break; + + case EDpsArgProductName: + iRepParam.iProductName.Copy(aArgs[i].iContent); + IF_DEBUG(Print(_L + ("product name is %S"), &iRepParam.iProductName)); + break; + + case EDpsArgSerialNo: + iRepParam.iSerialNo.Copy(aArgs[i].iContent); + IF_DEBUG(Print(_L("SerialNo is %S"), &iRepParam.iSerialNo)); + break; + + default: + IF_DEBUG(Print(_L("--Unknown param!!"))); + return KErrArgument; + } + } + + IF_DEBUG(Print(_L("<<>>TDpsGetJobStatus::FillRepArgs"))); + TInt value, error, per; + TBuf fileName; + TLex8 converter; + TInt count = aArgs.Count(); + TBool reply = aTrader->IsReply(); + if (!reply) + { + aTrader->Engine()->Event()->iEvent = EDpsEvtNotifyJobStatus; + } + else + { + aTrader->Engine()->Event()->iEvent = EDpsEvtEmpty; + } + for (TInt i = 0; i < count; i++) + { + switch (aArgs[i].iElement) + { + case EDpsArgPrtPID: + converter.Assign(aArgs[i].iContent); + error = converter.Val(value); + if (error != KErrNone) + { + return error; + } + if (reply) + { + iRepParam.iPrtPID = value; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iPrtPID = + value; + } + break; + + case EDpsArgFilePath: + if (reply) + { + iRepParam.iFilePath.Copy(aArgs[i].iContent); + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iFilePath. + Copy(aArgs[i].iContent); + } + break; + + case EDpsArgCopyID: + converter.Assign(aArgs[i].iContent); + error = converter.Val(value); + if (error != KErrNone) + { + return error; + } + if (reply) + { + iRepParam.iCopyID = value; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iCopyID = + value; + } + break; + + case EDpsArgProgress: + per = aTrader->ParsePercentage(aArgs[i].iContent); + if (per < KErrNone) + { + return per; + } + + if (reply) + { + iRepParam.iProgress = per; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iProgress = + per; + } + break; + + case EDpsArgImagesPrinted: + converter.Assign(aArgs[i].iContent); + error = converter.Val(value); + if (error != KErrNone) + { + return error; + } + if (reply) + { + iRepParam.iImagesPrinted = value; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam. + iImagesPrinted = value; + } + break; + + default: + IF_DEBUG(Print(_L("***wrong param!!!"))); + return KErrArgument; + } + } + IF_DEBUG(Print(_L("<<>>TDpsGetPrinterStatus::FillRepArgs"))); + // if UI has not pass the event pointer, we do need to fill in it + if (!aTrader->Engine()->Event()) + { + return KErrNone; + } + TLex8 converter; + TDpsPrinterStatusRep param; + const TInt count = aArgs.Count(); + TUint32 value, temp; + TBool reply = aTrader->IsReply(); + if (!reply) + { + aTrader->Engine()->Event()->iEvent = EDpsEvtNotifyDeviceStatus; + } + else + { + aTrader->Engine()->Event()->iEvent = EDpsEvtEmpty; + } + for (TInt i = 0; i < count; i++) + { + converter.Assign(aArgs[i].iContent); + TInt error = converter.Val(value, EHex); + if (error != KErrNone) + { + return error; + } + IF_DEBUG(Print(_L("--the value is %x"), value)); + + switch (aArgs[i].iElement) + { + case EDpsArgDpsPrintServiceStatus: + value = value >> KShiftLength; + if (EDpsPrintServiceStatusPrinting == value || + EDpsPrintServiceStatusIdle == value || + EDpsPrintServiceStatusPaused == value) + { + if (reply) + { + iRepParam.iPrintStatus = + (TDpsPrintServiceStatus)(value); + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iPrintStatus = (TDpsPrintServiceStatus)(value); + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgJobEndReason: + value = value >> KShiftLength; + if (EDpsJobStatusNotEnded == value || + EDpsJobStatusEndedOk == value || + EDpsJobStatusEndedAbortImmediately == value || + EDpsJobStatusEndedAbortCompleteCurrent == value || + EDpsJobStatusEndedOther == value) + { + if (reply) + { + iRepParam.iJobStatus = (TDpsJobStatus)(value); + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iJobStatus = (TDpsJobStatus)(value); + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgErrorStatus: + value = value >> KShiftLength; + if (EDpsErrorStatusOk == value || + EDpsErrorStatusWarning == value || + EDpsErrorStatusFatal == value) + { + if (reply) + { + iRepParam.iErrorStatus = (TDpsErrorStatus)(value); + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iErrorStatus = (TDpsErrorStatus)(value); + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgErrorReason: + temp = value >> KShiftLength; + if (EDpsJobErrorNone == temp || + EDpsJobErrorPaper == temp || + EDpsJobErrorInk == temp || + EDpsJobErrorHardware == temp || + EDpsJobErrorFile == temp) + { + param.iJobEndReason.iMajor = + (TDpsJobEndReasonMajor)(temp); + IF_DEBUG(Print(_L("the end reason is %x"), temp)); + value = value & KDpsMinorMask; + switch (param.iJobEndReason.iMajor) + { + case EDpsJobErrorPaper: + param.iJobEndReason.iPaperMinor = + (TDpsJobEndReasonPaper)(value); + break; + + case EDpsJobErrorInk: + param.iJobEndReason.iInkMinor = + (TDpsJobEndReasonInk)(value); + break; + + case EDpsJobErrorHardware: + param.iJobEndReason.iHardMinor = + (TDpsJobEndReasonHard)(value); + break; + + case EDpsJobErrorFile: + param.iJobEndReason.iFileMinor = + (TDpsJobEndReasonFile)(value); + break; + + default: + IF_DEBUG(Print(_L("no minor error"))); + break; + } + if (reply) + { + iRepParam.iJobEndReason = param.iJobEndReason; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iJobEndReason = param.iJobEndReason; + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgDisconnectEnable: + value = value >> KShiftLength; + if (EDpsDisconnectEnableFalse == value) + { + param.iDisconnectEnable = EFalse; + } + else if (EDpsDisconnectEnableTrue == value) + { + param.iDisconnectEnable = ETrue; + } + else + { + return KErrArgument; + } + if (reply) + { + iRepParam.iDisconnectEnable = param.iDisconnectEnable; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iDisconnectEnable = param.iDisconnectEnable; + } + break; + + case EDpsArgCapabilityChanged: + value = value >> KShiftLength; + if (EDpsCapabilityChangedFalse == value) + { + param.iCapabilityChange = EFalse; + } + else if (EDpsCapabilityChangedTrue == value) + { + param.iCapabilityChange = ETrue; + } + else + { + return KErrArgument; + } + if (reply) + { + iRepParam.iCapabilityChange = param.iCapabilityChange; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iCapabilityChange = param.iCapabilityChange; + } + break; + + case EDpsArgNewJobOk: + value = value >> KShiftLength; + if (EDpsNewJobOkTrue == value) + { + param.iNewJobOk = ETrue; + } + else if (EDpsNewJobOkFalse == value) + { + param.iNewJobOk = EFalse; + } + else + { + return KErrArgument; + } + if (reply) + { + iRepParam.iNewJobOk = param.iNewJobOk; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iNewJobOk = param.iNewJobOk; + } + break; + + default: + IF_DEBUG(Print(_L("***wrong param"))); + return KErrArgument; + } + } + + IF_DEBUG(Print(_L("<< +#include "dpsptpnotifier.h" +#include "dpsusbnotifier.h" +#include "dpsconst.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsPtpNotifier* CDpsPtpNotifier::NewL(CDpsUsbNotifier* aParent) + { + IF_DEBUG(Print(_L("CDpsPtpNotifier::NewL"))); + CDpsPtpNotifier* self = new(ELeave) CDpsPtpNotifier(aParent); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsPtpNotifier::CDpsPtpNotifier(CDpsUsbNotifier* aParent) : + CActive(EPriorityNormal), iNotifier(aParent) + { + IF_DEBUG(Print(_L(">>>CDpsPtpNotifier::Ctor"))); + CActiveScheduler::Add(this); + IF_DEBUG(Print(_L("<<>>CDpsPtpNotifier::"))); + Cancel(); + IF_DEBUG(Print(_L("<<>>CDpsPtpNotifier::ChangePtpPersonality"))); + if (!IsActive()) + { + TInt personalityId = KUsbPersonalityIdMTP; + iNotifier->iUsbM.GetCurrentPersonalityId(personalityId); + IF_DEBUG(Print(_L("CDpsPtpNotifier::ChangePtpPersonality, current personality= %d"), personalityId)); + if(KUsbPersonalityIdPCSuiteMTP == personalityId) + { + TRequestStatus* statusPtr = &iStatus; + User::RequestComplete(statusPtr, KErrNone); + SetActive(); + } + else + { + iNotifier->iUsbW.SetPersonality(iStatus, KUsbPersonalityIdMTP, ETrue); + SetActive(); + } + } + IF_DEBUG(Print(_L("<<>>CDpsPtpNotifier::RunL %d"), iStatus.Int())); + if (KErrNone == iStatus.Int()) + { + iNotifier->iPersonality = KUsbPersonalityIdMTP; + TInt ret = iNotifier->ConnectState(); + if (ret != KErrNone) + { + IF_DEBUG(Print(_L("error happened %d"), ret)); + } + } + iNotifier->PtpNotify(iStatus.Int()); + IF_DEBUG(Print(_L("<<>>CDpsPtpNotifier::DoCancel"))); + iNotifier->iUsbW.CancelSetPersonality(); + IF_DEBUG(Print(_L("<< +#include +#include "dpsscriptreceiver.h" +#include "dpsstatemachine.h" +#include "pictbridge.h" +#include "dpsconst.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsScriptReceiver* CDpsScriptReceiver::NewL(CDpsStateMachine* aOperator) + { + IF_DEBUG(Print(_L("CDpsScriptReceiver::NewL"))); + CDpsScriptReceiver* self = new(ELeave) CDpsScriptReceiver(aOperator); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsScriptReceiver::CDpsScriptReceiver(CDpsStateMachine* aOperator) : + CActive(EPriorityNormal), iOperator(aOperator), + iFileNameAndPath(KDpsHostResponseFileName) + { + IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::Ctor"))); + CActiveScheduler::Add(this); + WaitForReceive(); + IF_DEBUG(Print(_L("<<>>~CDpsScriptReceiver"))); + Cancel(); + IF_DEBUG(Print(_L("<<<~CDpsScriptReceiver"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsScriptReceiver::WaitForReceive() + { + IF_DEBUG(Print(_L(">>>CDpsScriptReceiver::WaitForReceive"))); + if (!IsActive()) + { + iOperator->DpsEngine()->Ptp().ObjectReceivedNotify(KDpsScriptFile, + iFileNameAndPath, iStatus, EFalse); + SetActive(); + } + IF_DEBUG(Print(_L("<<>>CDpsScriptReceiver::RunL %S"), &iFileNameAndPath)); + // in the certain error case, it is possible that the printer sending + // the device status before the UI is ready to receive this event. + // in this case, pictbridge engine still does not get the ptp folder + // setting from the stack. + // if we receive script from host, the stack has started. so we check if + // we already get the ptp folder here. + if (!iOperator->DpsEngine()->DpsFolder().Length()) + { + iOperator->DpsEngine()->SetDpsFolder( + iOperator->DpsEngine()->Ptp().PtpFolder()); + } + if (KErrNone == iStatus.Int()) + { + TFileName receive; + User::LeaveIfError(GetFileName(receive)); + IF_DEBUG(Print(_L("received file is %S"), &receive)); + // reply from Host is received + if (!receive.Compare(KDpsHostResponseFileName)) + { + iOperator->ScriptReceivedNotifyL(ETrue); + } + // request from Host is received + else if (!receive.Compare(KDpsHostRequestFileName)) + { + iOperator->ScriptReceivedNotifyL(EFalse); + } + WaitForReceive(); + } + else + { + IF_DEBUG(Print(_L("the iStatus is wrong!!! %d"), iStatus.Int())); + iOperator->Error(iStatus.Int()); + } + IF_DEBUG(Print(_L("<<>>CDpsScriptReceiver::DoCancel"))); + iOperator->DpsEngine()->Ptp().CancelObjectReceivedNotify(); + IF_DEBUG(Print(_L("<<>>CDpsScriptReceiver::RunError is %d"), aError)); + // if error happened cancel the outstanding request + Cancel(); + iOperator->Error(aError); + IF_DEBUG(Print(_L("<< +#include +#include "dpsscriptsender.h" +#include "dpsstatemachine.h" +#include "pictbridge.h" +#include "dpstransaction.h" +#include "dpsfile.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsScriptSender* CDpsScriptSender::NewL(CDpsStateMachine* aOperator) + { + IF_DEBUG(Print(_L("CDpsScriptSender::NewL"))); + CDpsScriptSender* self = new(ELeave) CDpsScriptSender(aOperator); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsScriptSender::CDpsScriptSender(CDpsStateMachine* aOperator) : + CActive(EPriorityNormal), iOperator(aOperator), + iReply(EFalse) + { + IF_DEBUG(Print(_L(">>>CDpsScriptSender::Ctor"))); + CActiveScheduler::Add(this); + IF_DEBUG(Print(_L("<<>>~CDpsScriptSender"))); + Cancel(); + IF_DEBUG(Print(_L("<<<~CDpsScriptSender"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CDpsScriptSender::SendScript(TBool aReply) + { + IF_DEBUG(Print(_L(">>>CDpsScriptSender::SendScript"))); + if (!IsActive()) + { + iReply = aReply; + TFileName file(iOperator->DpsEngine()->DpsFolder()); + RFile script; + if (aReply) + { + file.Append(KDpsDeviceResponseFileName); + } + else + { + file.Append(KDpsDeviceRequestFileName); + } + TInt err = script.Open(iOperator->Trader()-> + FileHandle()->FileSession(), file, EFileRead); + if (err != KErrNone) + { + return err; + } + TInt size; + script.Size(size); + script.Close(); + if (aReply) + { + iOperator->DpsEngine()-> + Ptp().SendObject(file, iStatus, EFalse, size); + } + else + { + iOperator->DpsEngine()-> + Ptp().SendObject(file, iStatus, ETrue, size); + } + SetActive(); + IF_DEBUG(Print(_L("<<>>CDpsScriptSender::RunL"))); + + if (KErrNone == iStatus.Int()) + { + // the device request is sent + if (!iReply) + { + iOperator->ScriptSentNotifyL(EFalse); + } + // the device response is sent + else + { + iOperator->ScriptSentNotifyL(ETrue); + } + } + else + { + IF_DEBUG(Print(_L("the iStatus is wrong %d!!!"), iStatus.Int())); + iOperator->Error(iStatus.Int()); + } + IF_DEBUG(Print(_L("<<>>CDpsScriptSender::DoCancel"))); + iOperator->DpsEngine()->Ptp().CancelSendObject(); + IF_DEBUG(Print(_L("<<>>CDpsScriptSender::RunError is %d"), aError)); + Cancel(); + iOperator->Error(aError); + IF_DEBUG(Print(_L("<< +#include "dpsstate.h" +#include "dpsstatemachine.h" +#include "dpstransaction.h" +#include "dpsscriptreceiver.h" +#include + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsIdleState::TDpsIdleState(CDpsStateMachine* aStateMachine) : + iStateMachine(aStateMachine) {} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsIdleState::ScriptSentNotifyL(TBool /*aReply*/) + { + IF_DEBUG(Print(_L("TDpsIdleState::ScriptSentNotify"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsIdleState::ScriptReceivedNotifyL(TBool aReply) + { + if (!aReply) + { + IF_DEBUG(Print(_L("TDpsIdleState::ScriptReceived request got"))); + iStateMachine->Trader()->ParseScriptL(aReply); + iStateMachine->SetState(iStateMachine->SendingRepState()); + } + else + { + IF_DEBUG(Print(_L( + "TDpsIdleState::ScriptReceived should not get reply!!!"))); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsIdleState::Error(TInt aErr) + { + IF_DEBUG(Print(_L("TDpsIdleState::Error %d"), aErr)); + if ((aErr != KErrCancel) && (aErr != KErrNotReady)) + { + iStateMachine->Trader()->HandleHostRequestError(aErr); + iStateMachine->SetState(iStateMachine->SendingRepState()); + } + + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsSendingReqState::TDpsSendingReqState(CDpsStateMachine* aStateMachine) : + iStateMachine(aStateMachine) {} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsSendingReqState::ScriptSentNotifyL(TBool aReply) + { + if (!aReply) + { + IF_DEBUG(Print(_L("TDpsSendingReqState::ScriptSent request"))); + iStateMachine->SetState(iStateMachine->WaitingRepState()); + } + else + { + IF_DEBUG(Print(_L( + "TDpsSendingReqState::ScriptSent should not get reply!!"))); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsSendingReqState::ScriptReceivedNotifyL(TBool /*aReply*/) + { + IF_DEBUG(Print(_L("TDpsSendingReqState::ScriptReceived"))); + IF_DEBUG(Print(_L("**should not reply to the request/reply from host"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsSendingReqState::Error(TInt aErr) + { + User::RequestComplete(iStateMachine->DpsEngine()->OperationRequest(), + aErr); + iStateMachine->Initialize(); + return; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsWaitingRepState::TDpsWaitingRepState(CDpsStateMachine* aStateMachine) : + iStateMachine(aStateMachine) {} + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsWaitingRepState::ScriptSentNotifyL(TBool /*aReply*/) + { + IF_DEBUG(Print(_L("TDpsWaitingRepState::ScriptSent"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsWaitingRepState::ScriptReceivedNotifyL(TBool aReply) + { + if (aReply) + { + IF_DEBUG(Print(_L("WaitingRepState reply"))) + + iStateMachine->Trader()->ParseScriptL(aReply); + User::RequestComplete( + iStateMachine->DpsEngine()->OperationRequest(), KErrNone); + iStateMachine->Initialize(); + } + else + { + IF_DEBUG(Print(_L("WaitingRepState should not get request"))); + // collision happened, we do nothing because the host will + // eventually handle this by sending the correct response. but we need + // to subscribe for the event again. + iStateMachine->ScriptReceiver()->WaitForReceive(); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsWaitingRepState::Error(TInt aErr) + { + // this is not tested + User::RequestComplete(iStateMachine->DpsEngine()->OperationRequest(), + aErr); + iStateMachine->Initialize(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsSendingRepState::TDpsSendingRepState(CDpsStateMachine* aStateMachine) : + iStateMachine(aStateMachine) {} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsSendingRepState::ScriptSentNotifyL(TBool aReply) + { + if (aReply) + { + IF_DEBUG(Print(_L("TDpsSendingRepState::ScriptSent reply"))); + if (KErrNone == iStateMachine->CurError()) + { + // this is the normal situation, inform the client + User::RequestComplete(iStateMachine->DpsEngine()->EventRequest(), + KErrNone); + } + else + { + // this is the error situation, do not inform the client. and + // we need to subscribe for the new event. + iStateMachine->ScriptReceiver()->WaitForReceive(); + } + iStateMachine->Initialize(); + } + else + { + IF_DEBUG(Print(_L( + "TDpsSendingRepState::ScriptSent shoul not get request!!!"))); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsSendingRepState::ScriptReceivedNotifyL(TBool /*aReply*/) + { + IF_DEBUG(Print(_L("TDpsSendingRepState::ScriptReceived"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsSendingRepState::Error(TInt /*aErr*/) + { + return; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsstatemachine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsstatemachine.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,130 @@ +/* +* Copyright (c) 2006, 2007 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: This class implements the dps state machine. +* +*/ + + +#include +#include "dpsstatemachine.h" +#include "dpsscriptreceiver.h" +#include "dpsscriptsender.h" +#include "dpstransaction.h" +#include "dpsconst.h" +#include "pictbridge.h" +#include "dpsparam.h" +#include "dpsoperation.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsStateMachine* CDpsStateMachine::NewL(CDpsEngine* aEngine) + { + IF_DEBUG(Print(_L("CDpsStateMachine::NewL"))); + CDpsStateMachine* self = new(ELeave) CDpsStateMachine(aEngine); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsStateMachine::~CDpsStateMachine() + { + IF_DEBUG(Print(_L(">>>~CDpsStateMachine"))); + delete iTrader; + iTrader = NULL; + delete iScriptReceiver; + iScriptReceiver = NULL; + delete iScriptSender; + iScriptSender = NULL; + + delete iIdleState; iIdleState = NULL; + delete iSendingReqState; iSendingReqState = NULL; + delete iWaitingRepState; iWaitingRepState = NULL; + delete iSendingRepState; iSendingRepState = NULL; + IF_DEBUG(Print(_L("<<<~CDpsStateMachine"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsStateMachine::CDpsStateMachine(CDpsEngine* aEngine) : + iEngine(aEngine),iOperation(EDpsOpEmpty), iEvent(EDpsEvtEmpty), + iCurError(KErrNone) + { + IF_DEBUG(Print(_L(">>>CDpsStateMachine::Ctor"))); + + IF_DEBUG(Print(_L("<<>>CDpsStateMachine::ConstructL"))); + iIdleState = new(ELeave) TDpsIdleState(this); + iSendingReqState = new(ELeave) TDpsSendingReqState(this); + iWaitingRepState = new(ELeave) TDpsWaitingRepState(this); + iSendingRepState = new(ELeave) TDpsSendingRepState(this); + iCurState = iIdleState; + iTrader = CDpsTransaction::NewL(this); + iScriptReceiver = CDpsScriptReceiver::NewL(this); + iScriptSender = CDpsScriptSender::NewL(this); + IF_DEBUG(Print(_L("<<>>CDpsStateMachine::StartTransaction"))); + iMOperation = aRequest; + iOperation = (TDpsOperation)iMOperation->iOperation; + iTrader->CreateRequestL(aRequest); + iCurState = iSendingReqState; + IF_DEBUG(Print(_L("<<>>CDpsStateMachine::Initialize"))); + iOperation = EDpsOpEmpty; + iEvent = EDpsEvtEmpty; + iCurError = KErrNone; + if (CurState() != IdleState()) + { + SetState(IdleState()); + } + IF_DEBUG(Print(_L("<< +#include +#include +#include +#include "dpstransaction.h" +#include "dpsscriptsender.h" +#include "dpsdefs.h" +#include "dpsxmlparser.h" +#include "dpsxmlgenerator.h" +#include "dpsconst.h" +#include "dpsfile.h" +#include "dpsstatemachine.h" +#include "dpsscriptreceiver.h" +#include "pictbridge.h" +#include +#include "dpsparam.h" +#include "dpsoperation.h" +#include "dpsxmlstring.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TInt KPathLength = 3; +const TInt KPercentagePosition = 3; +const TInt KPercentage = 100; +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsTransaction* CDpsTransaction::NewL(CDpsStateMachine* aOperator) + { + IF_DEBUG(Print(_L("CDpsTransaction::NewL"))); + CDpsTransaction* self = new(ELeave) CDpsTransaction(aOperator); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsTransaction::CDpsTransaction(CDpsStateMachine* aOperator) : + iOperator(aOperator), iReply(EFalse) + { + IF_DEBUG(Print(_L("CDpsTransaction::Ctor"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsTransaction::ConstructL() + { + IF_DEBUG(Print(_L(">>>CDpsTransaction::ConstructL"))); + iFile = CDpsFile::NewL(); + iXmlGen = CDpsXmlGenerator::NewL(iOperator->DpsEngine()); + iXmlPar = CDpsXmlParser::NewL(iOperator->DpsEngine()); + IF_DEBUG(Print(_L("<<>>~CDpsTransaction"))); + delete iXmlPar; + iXmlPar = NULL; + + delete iXmlGen; + iXmlGen = NULL; + + delete iFile; + iFile = NULL; + + IF_DEBUG(Print(_L("<<<~CDpsTransaction"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsTransaction::CreateRequestL(TMDpsOperation* aOperation) + { + IF_DEBUG(Print(_L(">>>CDpsTransaction::CreateRequest "))); + IF_DEBUG(Print(_L(" the request is %d"), aOperation->iOperation)); + TDpsArgArray args; + TDpsEleArray elements; + TDpsAttribute attrib = 0; + CleanupClosePushL(args); + CleanupClosePushL(elements); + RFileWriteStream writer; + writer.PushL(); + TFileName defaultPath = iOperator->DpsEngine()->DpsFolder(); + defaultPath.Append(KDpsDeviceRequestFileName); + User::LeaveIfError(writer.Replace(iFile->FileSession(), defaultPath, + EFileWrite)); + IF_DEBUG(Print(_L("*** file created "))); + User::LeaveIfError(aOperation->FillReqArgs(args, elements, attrib, this)); + aOperation->CreateReqScriptL(args, elements, attrib, writer, this); + writer.CommitL(); + writer.Pop(); + writer.Release(); + User::LeaveIfError(iOperator->ScriptSender()->SendScript(EFalse)); + CleanupStack::PopAndDestroy(&elements); + CleanupStack::PopAndDestroy(&args); + IF_DEBUG(Print(_L("<<>>CDpsTransaction::Filter size %d"), size)); + + for (TInt i = 0; i < size; ) + { + // removes any unprintalbe char between two XML attributes, e.g. + // between > and < + if (aScript[i] >= KSOH && aScript[i] <= KSpace && aScript[i -1] == '>') + { + aScript.Delete(i, 1); + size--; + } + else + { + i++; + } + } + IF_DEBUG(Print(_L("<<>>CDpsTransaction::ParseScript"))); + iReply = aReply; + TInt size; + iFile->FileSizeL(iOperator->ScriptReceiver()->FileNameAndPath(), size); + HBufC8* script = HBufC8::NewLC(size); + TPtr8 ptr_script = script->Des(); + iFile->GetContentL(iOperator->ScriptReceiver()->FileNameAndPath(), + ptr_script); + Filter(ptr_script); + iXmlPar->Reset(); + CParser* parser = CParser::NewLC(KDpsXmlMimeType, *iXmlPar); + Xml::ParseL(*parser, ptr_script); + TDpsArgArray args; iXmlPar->GetParameters(args); + +#ifdef _DEBUG + //print what we get now + TBuf print; + for (TInt i = 0; i < args.Count(); i++) + { + print.Copy(args[i].iContent); + IF_DEBUG(Print(_L("element %d content %S"), + args[i].iElement, &print)); + } +#endif + + if (aReply) + { + TMDpsOperation* op = iOperator->MOperation(); + User::LeaveIfError(op->FillRepArgs(args, this)); + iXmlPar->SetOperationResult(op->iResult); + } + else + { + TDpsResult result; + result.iMajorCode = EDpsResultOk; + result.iMinorCode = EDpsResultNone; + if (iXmlPar->IsEvent()) + { + TDpsEvent event = iXmlPar->Event(); + iOperator->SetEvent(event); + if (event == EDpsEvtNotifyJobStatus) + { + User::LeaveIfError(iOperator->DpsEngine()->Event()-> + iJobEvent.FillRepArgs(args, this)); + } + else + { + User::LeaveIfError(iOperator->DpsEngine()->Event()-> + iPrinterEvent.FillRepArgs(args, this)); + } + CreateEventReplyL(event, result); + } + else + { + // the request from the host is only this one: + // GetFileID and used by DPOF printing + TDpsOperation ope = iXmlPar->Operation(); + iOperator->SetOperation(ope); + if (iOperator->Operation() != EDpsOpGetFileID) + { + User::Leave(KErrNotSupported); + } + CreateRequestReplyL(args, result); + } + } + CleanupStack::PopAndDestroy(parser); + CleanupStack::PopAndDestroy(script); + IF_DEBUG(Print(_L("<<>>CDpsTransaction::HandleHostRequestError %d"), aErr)); + TDpsResult result; + // here we need to map the aErr to Dps standard error + switch (aErr) + { + case KErrNotSupported: + result.iMajorCode = EDpsResultNotRecognized; + result.iMinorCode = EDpsResultNone; + break; + + case KErrArgument: + result.iMajorCode = EDpsResultNotSupported; + result.iMinorCode = EDpsResultillegalParam; + break; + + default: + IF_DEBUG(Print(_L("unknown err"))); + return; + } + TRAP_IGNORE(CreateEventReplyL(iXmlPar->Event(), result)); + + IF_DEBUG(Print(_L("<<>>CDpsTransaction::CreateReply"))); + IF_DEBUG(Print(_L + (" the operation reply is %d"), iOperator->Operation())); + IF_DEBUG(Print(_L("\t the event reply is %d"), iOperator->Event())); + RFileWriteStream writer; + writer.PushL(); + TFileName defaultPath = iOperator->DpsEngine()->DpsFolder(); + defaultPath.Append(KDpsDeviceResponseFileName); + User::LeaveIfError(writer.Replace(iFile->FileSession(), defaultPath, + EFileWrite)); + IF_DEBUG(Print(_L("*** file created "))); + iXmlGen->CreateResultScriptL(aEvent, writer, aResult); + writer.CommitL(); + writer.Pop(); + writer.Release(); + User::LeaveIfError(iOperator->ScriptSender()->SendScript(ETrue)); + IF_DEBUG(Print(_L("<<>>CDpsTransaction::CreateRequestReply"))); + TInt count = aArgs.Count(); + TInt basePathId; + TBuf8 filePath; + TLex8 converter; + + for (TInt i = 0; i < count; i++) + { + switch (aArgs[i].iElement) + { + case EDpsArgBasePathID: + converter.Assign(aArgs[i].iContent); + User::LeaveIfError(converter.Val(basePathId)); + break; + + case EDpsArgFilePath: + filePath.Copy(aArgs[i].iContent); + break; + + default: + __IF_DEBUG(Print(_L("***wrong args"))); + User::Leave(KErrArgument); + break; + } + TUint32 fileId; + + SubstitutePath(filePath); + TBuf file; + file.Copy(filePath); + User::LeaveIfError(iOperator->DpsEngine()-> + Ptp().GetObjectHandleByName(file, fileId)); + TDpsArg arg; + arg.iElement = EDpsArgFileID; + arg.iContent.AppendNumFixedWidth(fileId, EHex, KFullWordWidth); + RFileWriteStream writer; + writer.PushL(); + TFileName defaultPath = iOperator->DpsEngine()->DpsFolder(); + defaultPath.Append(KDpsDeviceResponseFileName); + User::LeaveIfError(writer.Replace(iFile->FileSession(), defaultPath, + EFileWrite)); + IF_DEBUG(Print(_L("*** file created "))); + iXmlGen->CreateReplyScriptL(EDpsOpGetFileID, writer, aResult, arg); + User::LeaveIfError(iOperator->ScriptSender()->SendScript(ETrue)); + writer.CommitL(); + writer.Pop(); + writer.Release(); + } + IF_DEBUG(Print(_L("<<>>CDpsTransaction::SubstitutePath %S"), &aPath)); + TInt size = aPath.Size(); + for (TInt i = 0; i < size; i++) + { + if (aPath[i] == KSlash) + { + aPath[i] = KBackSlash; + } + } + TBuf driveEWide = PathInfo::MemoryCardRootPath(); + TBuf8 driveENarrow; + driveENarrow.Copy(driveEWide); + aPath.Replace(0, KPathLength - 1, driveENarrow); + IF_DEBUG(Print(_L("<< +#include +#include +#include "dpsusbnotifier.h" +#include "dpsconst.h" +#include "dpsptpnotifier.h" +#include "dpsconnectnotifier.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TInt KUnknownPersonality = 0; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsUsbNotifier* CDpsUsbNotifier::NewL(CDpsEngine* aEngine) + { + IF_DEBUG(Print(_L("CDpsUsbNotifier::NewL"))); + CDpsUsbNotifier* self = new(ELeave) CDpsUsbNotifier(aEngine); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsUsbNotifier::CDpsUsbNotifier(CDpsEngine* aEngine) : + CActive(EPriorityNormal), iEngine(aEngine), + iPersonality(KUnknownPersonality), + iConnectState(EUsbDeviceStateUndefined), iConfigured(EFalse), + iConnection(CDpsEngine::ENotConnected), iRollback(EFalse) + { + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::Ctor"))); + CActiveScheduler::Add(this); + IF_DEBUG(Print(_L("<<>>~CDpsUsbNotifier"))); + Cancel(); + Rollback(); + delete iPtpP; iPtpP = NULL; + delete iConnectP; iConnectP = NULL; + iUsbM.Close(); + iUsbW.Close(); + IF_DEBUG(Print(_L("<<<~CDpsUsbNotifier"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsUsbNotifier::ConstructL() + { + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::ConstructL"))); + User::LeaveIfError(iUsbM.Connect()); + User::LeaveIfError(iUsbW.Connect()); + iPtpP = CDpsPtpNotifier::NewL(this); + iConnectP = CDpsConnectNotifier::NewL(this); + IF_DEBUG(Print(_L("<<ChangePtpPersonality(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsUsbNotifier::CancelPrinterNotify() + { + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::CancelPrinterNotify"))); + if (CDpsEngine::ENotConnected == iConnection) + { + iPtpP->Cancel(); + iConfigured = EFalse; + } + else if (CDpsEngine::EPrinterConnected == iConnection) + { + iConnectP->Cancel(); + } + // if the request is replied through RunL before the cancel + // iPrinterConnectRequest will be NULL and we don't need to cancel anything + if (iEngine->PrinterConnectRequest()) + { + User::RequestComplete(iEngine->PrinterConnectRequest(), KErrCancel); + } + IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::ConnectNotify"))); + iConnectP->ConnectNotify(); + IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::Rollback"))); + // only when the personality has changed, we switch back to the previous + // personality + if (iPersonality) + { + TInt personalityId = KUsbPersonalityIdMTP; + iUsbM.GetCurrentPersonalityId(personalityId); + IF_DEBUG(Print(_L("CDpsUsbNotifier::Rollback, current personality= %d"), personalityId)); + if(KUsbPersonalityIdPCSuiteMTP != personalityId) + { + if (!iConfigured || iRollback) + { + iUsbW.SetPreviousPersonality(); + } + else + { + iUsbW.SetPreviousPersonalityOnDisconnect(); + } + } + } + IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::PtpNotify %x %d"), + iConnectState, aErr)); + if (aErr == KErrNone) + { + // personality changed to MTP, but cable is not connected + if (iConnectState != EUsbDeviceStateUndefined) + { + if (!IsActive()) + { + iEngine->Ptp().IsDpsPrinter(iStatus); + SetActive(); + } + } + else + { + iConnection = CDpsEngine::ENotConnected; + User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); + } + } + else + { + iConnection = CDpsEngine::EWrongPrintModeConnected; + User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); + } + + IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::PersonalityChanged %x"), + iPersonality)); + if (iPersonality != KUsbPersonalityIdMTP) + { + iConnection = CDpsEngine::EWrongPrintModeConnected; + iConfigured = EFalse; + if (iEngine->PrinterConnectRequest()) + { + User::RequestComplete(iEngine->PrinterConnectRequest(), + iConnection); + } + } + // when UI gets this notification, it must quit. As the result, the dps + // engine will be deleted so we do not need to care the further change. + + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::PersonalityChanged "))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsUsbNotifier::RunL() + { + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::RunL"))); + + if (EPrinterAvailable == iStatus.Int()) + { + iConnection = CDpsEngine::EPrinterConnected; + iConfigured = ETrue; + iEngine->SetDpsFolder(iEngine->Ptp().PtpFolder()); + } + else if (iStatus.Int() != KErrCancel) + { + iConnection = CDpsEngine::EOtherConnected; + } + User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); + + IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::DoCancel"))); + iEngine->Ptp().CancelIsDpsPrinter(); + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::DoCancel"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TInt CDpsUsbNotifier::RunError(TInt aErr) + { + IF_DEBUG(Print(_L("CDpsUsbNotifier::RunError is %d"), aErr)); + return aErr; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsUsbNotifier::DisconnectNotify(TUsbDeviceState aState) + { + IF_DEBUG(Print(_L(">>>CDpsUsbNotifier::DisconnectNotify %d"), aState)); + if (iConfigured) + { + iConnection = CDpsEngine::EPrinterDisconnected; + } + else + { + iConnection = CDpsEngine::ENotConnected; + } + iConfigured = EFalse; + if (EUsbDeviceStateUndefined == aState) + { + iRollback = ETrue; + } + if (iEngine->PrinterConnectRequest()) + { + User::RequestComplete(iEngine->PrinterConnectRequest(), iConnection); + } + + IF_DEBUG(Print(_L("<<>>CDpsUsbNotifier::ConnectState"))); + TInt ret = iUsbM.GetDeviceState(iConnectState); + IF_DEBUG(Print(_L("<< +#include "dpsxmlgenerator.h" +#include "pictbridge.h" +#include "dpsconst.h" +#include "dpsxmlstring.h" +#include + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TInt KCodeSize = 4; + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlGenerator* CDpsXmlGenerator::NewL(CDpsEngine* aEngine) + { + IF_DEBUG(Print(_L("CDpsXmlGenerator::NewL"))); + CDpsXmlGenerator* self= new (ELeave) CDpsXmlGenerator(aEngine); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlGenerator::~CDpsXmlGenerator() + { + IF_DEBUG(Print(_L("~CDpsXmlGenerator"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlGenerator::CDpsXmlGenerator(CDpsEngine* aEngine) : + iEngine(aEngine) + { + IF_DEBUG(Print(_L("CDpsXmlGenerator::Ctor"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlGenerator::CreateResultScriptL(TDpsEvent aEvent, + RWriteStream& aScript, + const TDpsResult& aResult) const + { + IF_DEBUG(Print(_L(">>>CDpsXmlGenerator::CreateResultScript"))); + StartDocumentL(aScript); + StartResultL(aScript, aResult); + if (aEvent != EDpsEvtEmpty) + { + CreateEventL(aScript, aEvent); + } + EndResultL(aScript); + EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::StatrDocument"))); + aScript.WriteL(KDpsXmlHeader); + aScript.WriteL(KDpsXmlNS); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::EndDocument"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlSlash); + aScript.WriteL(KDpsXml); + aScript.WriteL(KDpsXmlBraceClose); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::StartInput"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlInput); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::EndInput"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlSlash); + aScript.WriteL(KDpsXmlInput); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::StartResult"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlOutput); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlResult); + aScript.WriteL(KDpsXmlBraceClose); + TBuf8 major; + major.NumUC(aResult.iMajorCode, EHex); + aScript.WriteL(major); + major.Zero(); + major.NumFixedWidthUC(aResult.iMinorCode, EHex, KCodeSize); + aScript.WriteL(major); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlSlash); + aScript.WriteL(KDpsXmlResult); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::EndResult"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlSlash); + aScript.WriteL(KDpsXmlOutput); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::StartOperation %d"), aOperation)); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(iEngine->DpsParameters()-> + iDpsOperationStrings[aOperation - 1]); + if (aEnd) + { + aScript.WriteL(KDpsXmlSlash); + } + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::EndOperation"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(KDpsXmlSlash); + // there is an empty op in the op enum so we must reduce one + aScript.WriteL(iEngine->DpsParameters()-> + iDpsOperationStrings[aOperation - 1]); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::CreatEvent"))); + aScript.WriteL(KDpsXmlBraceOpen); + aScript.WriteL(iEngine->DpsParameters()-> + iDpsEventStrings[aEvent - 1]); + aScript.WriteL(KDpsXmlSlash); + aScript.WriteL(KDpsXmlBraceClose); + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::CreatArg"))); + aScript.WriteL(KDpsXmlBraceOpen); //< + aScript.WriteL(iEngine->DpsParameters()-> + iDpsArgStrings[aArgument.iElement]); + if (aAttribute != 0) + { + aScript.WriteL(KDpsXmlSpace); // space + aScript.WriteL(KDpsXmlPaperSize); // paperSize + aScript.WriteL(KDpsXmlEqual); // = + aScript.WriteL(KDpsXmlQuote); // " + // patch the lower four bytes zero + aAttribute = aAttribute << KShiftLength; + TBuf8 string; + string.AppendNumUC(aAttribute, EHex); + aScript.WriteL(string); // 12345678 + aScript.WriteL(KDpsXmlQuote); // " + } + if (!aArgument.iContent.Compare(KNullDesC8)) + { + aScript.WriteL(KDpsXmlSlash); // / + aScript.WriteL(KDpsXmlBraceClose); // > + } + else + { + aScript.WriteL(KDpsXmlBraceClose); // > + aScript.WriteL(aArgument.iContent); // 123 345 567 + aScript.WriteL(KDpsXmlBraceOpen); // < + aScript.WriteL(KDpsXmlSlash); // / + aScript.WriteL(iEngine->DpsParameters()-> + iDpsArgStrings[aArgument.iElement]); + aScript.WriteL(KDpsXmlBraceClose); // > + } + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::StartElement"))); + aScript.WriteL(KDpsXmlBraceOpen); //< + aScript.WriteL(iEngine->DpsParameters()-> + iDpsElementStrings[aElement - 1]); + aScript.WriteL(KDpsXmlBraceClose); // > + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<<>>CDpsXmlGenerator::EndElement"))); + aScript.WriteL(KDpsXmlBraceOpen); //< + aScript.WriteL(KDpsXmlSlash); + aScript.WriteL(iEngine->DpsParameters()-> + iDpsElementStrings[aElement - 1]); + aScript.WriteL(KDpsXmlBraceClose); // > + aScript.WriteL(KDpsXmlSpace); + IF_DEBUG(Print(_L("<< +#include "dpsxmlparser.h" +#include "dpsconst.h" +#include "pictbridge.h" +#include "dpsxmlstring.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +# define PRINT_DES(t)\ + {TBuf _buf; _buf.Copy(t);RDebug::Print(_L("---%S"), &_buf);} +#else +# define IF_DEBUG(t) +# define PRINT_DES(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlParser* CDpsXmlParser::NewL(CDpsEngine* aEngine) + { + IF_DEBUG(Print(_L("CDpsXmlParser::NewL"))); + CDpsXmlParser* self = new (ELeave) CDpsXmlParser(aEngine); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlParser::~CDpsXmlParser() + { + IF_DEBUG(Print(_L(">>>~CDpsXmlParser"))); + iDpsArgs.Close(); + __IF_DEBUG(Print(_L("<<<~CDpsXmlParser"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CDpsXmlParser::CDpsXmlParser(CDpsEngine* aEngine) : iEngine(aEngine) + { + IF_DEBUG(Print(_L(">>>CDpsXmlParser::Ctor"))); + Reset(); + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnStartDocumentL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("---, error code is %d"), aErrorCode)); + User::Leave(aErrorCode); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnEndDocumentL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("---, error code is %d"), aErrorCode)); + User::Leave(aErrorCode); + } + + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnStartElementL"))); + + if (aErrCode != KErrNone) + { + IF_DEBUG(Print(_L("---, error code is %d"), aErrCode)); + User::Leave(aErrCode); + } + if (aAttributes.Count() > 1) + { + IF_DEBUG(Print(_L("---cannot have more than one attribute!"))); + User::Leave(KErrArgument); + } + + // Gets the name of the tag + const TDesC8& name = aElement.LocalName().DesC(); + + IF_DEBUG(Print(_L("---Start"))); PRINT_DES(name); + + //Checks the element + // this is the first layer + if (!name.Compare(KDpsXml)) + { + iAction = EDpsXmlStart; + } + // this is the second layer + else if (!name.Compare(KDpsXmlOutput)) + { + iAction = EDpsXmlOutput; + } + else if (!name.Compare(KDpsXmlInput)) + { + // operation and event cannot be distiguised here + iAction = EDpsXmlInput; + } + // this is the third layer + else if (iAction == EDpsXmlOutput && !name.Compare(KDpsXmlResult)) + { + // output must be result + iAction = EDpsXmlResult; + } + else if (iAction == EDpsXmlInput && + (!name.Compare(iEngine->DpsParameters()->iDpsEventStrings[0]) || + !name.Compare(iEngine->DpsParameters()->iDpsEventStrings[1]))) + { + if (!name.Compare(iEngine->DpsParameters()->iDpsEventStrings[0])) + { + iDpsEvent = EDpsEvtNotifyJobStatus; + } + else + { + iDpsEvent = EDpsEvtNotifyDeviceStatus; + } + iAction = EDpsXmlEvent; + } + else if (iAction == EDpsXmlInput || iAction == EDpsXmlResult) + { + iAction = EDpsXmlOperation; + for (TInt i= 0; i < EDpsOpMax-1; i++) //i=0 as AppendL() method adds item on first free position in array + { + if (!name.Compare(iEngine->DpsParameters()->iDpsOperationStrings[i])) + { + IF_DEBUG(Print(_L("---found the operation"))); + PRINT_DES(name); + iDpsOperation = (TDpsOperation)(i+1);// i+1 to by pass first operation EDpsOpEmpty in enum which is not added to array + break; + } + } + } + + // below is the fourth layer, e.g. the argument list/element. there + // could be many arugments, but only one element + else if (iAction == EDpsXmlOperation || iAction == EDpsXmlEvent) + { + // only element in output is capability + if (!name.Compare(iEngine->DpsParameters()->iDpsElementStrings[0])) + { + IF_DEBUG(Print(_L("---the element is"))); + PRINT_DES(name); + iElement = EDpsCapability; + } + else + { + for (TInt i = 0; i < EDpsArgMax; i++) + { + if (!name.Compare(iEngine->DpsParameters()->iDpsArgStrings[i])) + { + IF_DEBUG(Print(_L("---the argument is "))); + PRINT_DES(name); + TDpsArg arg; + arg.iElement = (TDpsArgument)i; + arg.iContent.Copy(_L("")); + iDpsArgs.Append(arg); + break; + } + } + } + + } + else + { + // something wrong + IF_DEBUG(Print(_L("--- non-PB element! %S"), &name)); + User::Leave(KErrNotSupported); + } + if (aAttributes.Count() == 1) + { + ParseAttributesL(aAttributes, name); + } + IF_DEBUG(Print(_L("<<> KShiftLength; + CleanupStack::PopAndDestroy(value); + IF_DEBUG(Print(_L("--- attribte value %x"), result)); + + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlParser::OnEndElementL(const RTagInfo& aElement, + TInt aErrorCode) + { + IF_DEBUG(Print(_L(">>>CDpsXmlParser::OnEndElementL"))); + + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("--- error code is %d"), aErrorCode)); + User::Leave(aErrorCode); + } + + // Get the name of the tag + const TDesC8& name = aElement.LocalName().DesC(); + PRINT_DES(name); + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnContentL content is"))); + PRINT_DES(aBytes); + + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("--- error code %d"), aErrorCode)); + User::Leave(aErrorCode); + } + if (aBytes[0] >= KSOH && aBytes[0] <= KSpace) + { + IF_DEBUG(Print(_L("the unprintable char %d"), aBytes[0])); + return; + } + // parses the result + if (iAction == EDpsXmlResult) + { + TUint32 value; + TLex8 converter(aBytes); + TInt error = converter.Val(value, EHex); + if (error != KErrNone) + { + IF_DEBUG(Print(_L("--- convert error %d"), error)); + User::Leave(error); + } + IF_DEBUG(Print(_L("--- result %x"), value)); + // we have got the result + iDpsResult.iMajorCode = + static_cast(value >> KShiftLength); + iDpsResult.iMinorCode = + static_cast(value & KDpsMinorMask); + } + // gets the argument + else if (iAction == EDpsXmlOperation || iAction == EDpsXmlEvent) + { + iDpsArgs[iDpsArgs.Count() - 1].iContent.Copy(aBytes); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnStartPrefixMappingL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("--- error code %d"), aErrorCode)); + User::Leave(aErrorCode); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnEndPrefixMappingL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("--- error code %d"), aErrorCode)); + User::Leave(aErrorCode); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnIgnorableWhiteSpaceL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("---error code %d"), aErrorCode)); + User::Leave(aErrorCode); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnSkippedEntityL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("--- error code %d"), aErrorCode)); + User::Leave(aErrorCode); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnProcessingInstructionL"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("--- error code %d"), aErrorCode)); + User::Leave(aErrorCode); + } + IF_DEBUG(Print(_L("<<>>CDpsXmlParser::OnError()"))); + if (aErrorCode != KErrNone) + { + IF_DEBUG(Print(_L("---error code %d"), aErrorCode)); + } + IF_DEBUG(Print(_L("<<(this) : 0; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CDpsXmlParser::Reset() + { + iDpsArgs.Reset(); + iAction = EDpsXmlEmpty; + iDpsEvent = EDpsEvtEmpty; + iDpsOperation = EDpsOpEmpty; + iElement = EDpsEleEmpty; + iAttrib = 0; + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsxmlstring.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/dpsxmlstring.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,419 @@ +/* +* Copyright (c) 2006, 2007 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: This class implements the dps constant strings. +* +*/ + + +#include "dpsxmlstring.h" +#include "dpsdefs.h" +#include "dpsconst.h" +#include + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsXmlString* TDpsXmlString::NewL() + { + TDpsXmlString* self = new (ELeave) TDpsXmlString(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsXmlString::TDpsXmlString() + { + iDpsOperationStrings = TDpsStrings(EDpsOpMax - 1); + iDpsElementStrings = TDpsStrings(KDpsEleMax - 1); + iDpsEventStrings = TDpsStrings(KDpsEvtMax - 1); + iDpsArgStrings = TDpsStrings(EDpsArgMax); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void TDpsXmlString::ConstructL() + { + // define Print Service Operations + // ref: DPS spec page 14 + for (TInt i = 1; i < EDpsOpMax; i++) + { + switch (i) + { + case EDpsOpConfigPrintService: + iDpsOperationStrings.AppendL(_L8("configurePrintService")); + break; + + case EDpsOpGetCapability: + iDpsOperationStrings.AppendL(_L8("getCapability")); + break; + + case EDpsOpGetJobStatus: + iDpsOperationStrings.AppendL(_L8("getJobStatus")); + break; + + case EDpsOpGetDeviceStatus: + iDpsOperationStrings.AppendL(_L8("getDeviceStatus")); + break; + + case EDpsOpStartJob: + iDpsOperationStrings.AppendL(_L8("startJob")); + break; + + case EDpsOpAbortJob: + iDpsOperationStrings.AppendL(_L8("abortJob")); + break; + + // define Storage Service Operation + // ref: DPS spec page 34 + case EDpsOpContinueJob: + iDpsOperationStrings.AppendL(_L8("continueJob")); + break; + + case EDpsOpGetFileID: + iDpsOperationStrings.AppendL(_L8("getFileID")); + break; + + case EDpsOpGetFileInfo: + iDpsOperationStrings.AppendL(_L8("getFileInfo")); + break; + + case EDpsOpGetFile: + iDpsOperationStrings.AppendL(_L8("getFile")); + break; + + case EDpsOpGetPartialFile: + iDpsOperationStrings.AppendL(_L8("getPartialFile")); + break; + + case EDpsOpGetFileList: + iDpsOperationStrings.AppendL(_L8("getFileList")); + break; + + case EDpsOpGetThumb: + iDpsOperationStrings.AppendL(_L8("getThumb")); + break; + + default: + IF_DEBUG(Print(_L("wrong in OperationString"))); + User::Leave(KErrArgument); + break; + } + } + + // define the special element which includes other elements + for (TInt i = 1; i < KDpsEleMax; i++) + { + switch(i) + { + case EDpsCapability: + iDpsElementStrings.AppendL(_L8("capability")); + break; + + case EDpsJobConfig: + iDpsElementStrings.AppendL(_L8("jobConfig")); + break; + + case EDpsPrintInfo: + iDpsElementStrings.AppendL(_L8("printInfo")); + break; + + default: + IF_DEBUG(Print(_L("wrong in ElementString"))); + User::Leave(KErrArgument); + break; + } + } + + // define Print Service Event Notification + // ref: DPS spec page 14 + for (TInt i = 1; i < KDpsEvtMax; i++) + { + switch(i) + { + case EDpsEvtNotifyJobStatus: + iDpsEventStrings.AppendL(_L8("notifyJobStatus")); + break; + + case EDpsEvtNotifyDeviceStatus: + iDpsEventStrings.AppendL(_L8("notifyDeviceStatus")); + break; + + default: + IF_DEBUG(Print(_L("wrong in Event String"))); + User::Leave(KErrArgument); + break; + } + } + + for (TInt i = 0; i < EDpsArgMax; i++) + { + switch (i) + { + case EDpsArgDpsVersions: + iDpsArgStrings.AppendL(_L8("dpsVersions")); + break; + + case EDpsArgVendorName: + iDpsArgStrings.AppendL(_L8("vendorName")); + break; + + case EDpsArgVendorSpecificVersion: + iDpsArgStrings.AppendL(_L8("vendorSpecificVersion")); + break; + + case EDpsArgProductName: + iDpsArgStrings.AppendL(_L8("productName")); + break; + + case EDpsArgSerialNo: + iDpsArgStrings.AppendL(_L8("serialNo")); + break; + + case EDpsArgPrintServiceAvailable: + iDpsArgStrings.AppendL(_L8("printServiceAvailable")); + break; + + case EDpsArgQualities: + iDpsArgStrings.AppendL(_L8("qualities")); + break; + + case EDpsArgPaperSizes: + iDpsArgStrings.AppendL(_L8("paperSizes")); + break; + + case EDpsArgPaperTypes: + iDpsArgStrings.AppendL(_L8("paperTypes")); + break; + + case EDpsArgFileTypes: + iDpsArgStrings.AppendL(_L8("fileTypes")); + break; + + case EDpsArgDatePrints: + iDpsArgStrings.AppendL(_L8("datePrints")); + break; + + case EDpsArgFileNamePrints: + iDpsArgStrings.AppendL(_L8("fileNamePrints")); + break; + + case EDpsArgImageOptimizes: + iDpsArgStrings.AppendL(_L8("imageOptimizes")); + break; + + case EDpsArgLayouts: + iDpsArgStrings.AppendL(_L8("layouts")); + break; + + case EDpsArgFixedSizes: + iDpsArgStrings.AppendL(_L8("fixedSizes")); + break; + + case EDpsArgChroppings: + iDpsArgStrings.AppendL(_L8("chroppings")); + break; + + case EDpsArgPrtPID: + iDpsArgStrings.AppendL(_L8("prtPID")); + break; + + case EDpsArgFilePath: + iDpsArgStrings.AppendL(_L8("filePath")); + break; + + case EDpsArgCopyID: + iDpsArgStrings.AppendL(_L8("copyID")); + break; + + case EDpsArgProgress: + iDpsArgStrings.AppendL(_L8("progress")); + break; + + case EDpsArgImagePrinted: + iDpsArgStrings.AppendL(_L8("imagePrinted")); + break; + + case EDpsArgDpsPrintServiceStatus: + iDpsArgStrings.AppendL(_L8("dpsPrintServiceStatus")); + break; + + case EDpsArgJobEndReason: + iDpsArgStrings.AppendL(_L8("jobEndReason")); + break; + + case EDpsArgErrorStatus: + iDpsArgStrings.AppendL(_L8("errorStatus")); + break; + + case EDpsArgErrorReason: + iDpsArgStrings.AppendL(_L8("errorReason")); + break; + + case EDpsArgDisconnectEnable: + iDpsArgStrings.AppendL(_L8("disconnectEnable")); + break; + + case EDpsArgCapabilityChanged: + iDpsArgStrings.AppendL(_L8("capabilityChanged")); + break; + + case EDpsArgNewJobOk: + iDpsArgStrings.AppendL(_L8("newJobOK")); + break; + + case EDpsArgQuality: + iDpsArgStrings.AppendL(_L8("quality")); + break; + + case EDpsArgPaperSize: + iDpsArgStrings.AppendL(_L8("paperSize")); + break; + + case EDpsArgPaperType: + iDpsArgStrings.AppendL(_L8("paperType")); + break; + + case EDpsArgFileType: + iDpsArgStrings.AppendL(_L8("fileType")); + break; + + case EDpsArgDatePrint: + iDpsArgStrings.AppendL(_L8("datePrint")); + break; + + case EDpsArgFileNamePrint: + iDpsArgStrings.AppendL(_L8("fileNamePrint")); + break; + + case EDpsArgImageOptimize: + iDpsArgStrings.AppendL(_L8("imageOptimize")); + break; + + case EDpsArgLayout: + iDpsArgStrings.AppendL(_L8("layout")); + break; + + case EDpsArgFixedSize: + iDpsArgStrings.AppendL(_L8("fixedSize")); + break; + + case EDpsArgCropping: + iDpsArgStrings.AppendL(_L8("cropping")); + break; + + case EDpsArgCroppingArea: + iDpsArgStrings.AppendL(_L8("croppingArea")); + break; + + case EDpsArgFileID: + iDpsArgStrings.AppendL(_L8("fileID")); + break; + + case EDpsArgFileName: + iDpsArgStrings.AppendL(_L8("fileName")); + break; + + case EDpsArgDate: + iDpsArgStrings.AppendL(_L8("date")); + break; + + case EDpsArgCopies: + iDpsArgStrings.AppendL(_L8("copies")); + break; + + case EDpsArgAbortStyle: + iDpsArgStrings.AppendL(_L8("abortStyle")); + break; + + case EDpsArgImagesPrinted: + iDpsArgStrings.AppendL(_L8("imagesPrinted")); + break; + + case EDpsArgBasePathID: + iDpsArgStrings.AppendL(_L8("basePathID")); + break; + + case EDpsArgFileSize: + iDpsArgStrings.AppendL(_L8("fileSize")); + break; + + case EDpsArgThumbFormat: + iDpsArgStrings.AppendL(_L8("thumbFormat")); + break; + + case EDpsArgThumbSize: + iDpsArgStrings.AppendL(_L8("thumbSize")); + break; + + case EDpsArgBytesRead: + iDpsArgStrings.AppendL(_L8("bytesRead")); + break; + + case EDpsArgOffset: + iDpsArgStrings.AppendL(_L8("offset")); + break; + + case EDpsArgMaxSize: + iDpsArgStrings.AppendL(_L8("maxSize")); + break; + + case EDpsArgParentFileID: + iDpsArgStrings.AppendL(_L8("parentFileID")); + break; + + case EDpsArgMaxNumIDs: + iDpsArgStrings.AppendL(_L8("maxNumIDs")); + break; + + case EDpsArgFileIDs: + iDpsArgStrings.AppendL(_L8("fileIDs")); + break; + + case EDpsArgNumIDs: + iDpsArgStrings.AppendL(_L8("numIDs")); + break; + + default: + IF_DEBUG(Print(_L("wrong in ArgString"))); + User::Leave(KErrArgument); + break; + } + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +TDpsXmlString::~TDpsXmlString() + { + iDpsArgStrings.Close(); + iDpsElementStrings.Close(); + iDpsEventStrings.Close(); + iDpsOperationStrings.Close(); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/pictbridge.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/pictbridgeengine/src/pictbridge.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,384 @@ +/* +* Copyright (c) 2006, 2007 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: This class defines and implements the API for UI engine. +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pictbridge.h" +#include "dpsdefs.h" +#include "dpsxmlstring.h" +#include "dpsconst.h" +#include "dpsstatemachine.h" +#include "dpsscriptreceiver.h" +#include "dpsusbnotifier.h" +#include "dpsparam.h" +#include "dpsscriptsender.h" +#include "dpstransaction.h" +#include "dpsfile.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TInt KResource = 32; +const TInt KDriver = 3; +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C CDpsEngine* CDpsEngine::GetEngineL() + { + IF_DEBUG(Print(_L("CDpsEngine::GetEngineL"))); + CDpsEngine* me; + me = static_cast(Dll::Tls()); + if (!me) + { + CDpsEngine* self = new(ELeave) CDpsEngine(); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + User::LeaveIfError(Dll::SetTls(self)); + return self; + } + else + { + return me; + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C void CDpsEngine::Delete() + { + IF_DEBUG(Print(_L(">>>DpsEngine::Delete"))); + CDpsEngine *me; me = static_cast(Dll::Tls()); + if (me) + { + delete me; + Dll::SetTls(NULL); + } + IF_DEBUG(Print(_L("<<>>CDpsEngine::ConstructL"))); + iDpsParameters = TDpsXmlString::NewL(); + User::LeaveIfError(iPtp.Connect()); + iDpsOperator = CDpsStateMachine::NewL(this); + iUsbNotifier = CDpsUsbNotifier::NewL(this); + IF_DEBUG(Print(_L("<<>>~CDpsEngine"))); + + delete iDpsOperator; + iDpsOperator = NULL; + + delete iUsbNotifier; + iUsbNotifier = NULL; + + if (iDpsOperationRequest) + { + User::RequestComplete(iDpsOperationRequest, KErrCancel); + } + if (iDpsEventRequest) + { + User::RequestComplete(iDpsEventRequest, KErrCancel); + } + if (iPrinterConnectRequest) + { + User::RequestComplete(iPrinterConnectRequest, KErrCancel); + } + delete iDpsParameters; + iDpsParameters = NULL; + iPtp.Close(); + IF_DEBUG(Print(_L("<<<~CDpsEngine"))); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C void CDpsEngine::SetPrintMode(TRequestStatus& aStatus) + { + IF_DEBUG(Print(_L(">>>DpsEngine::SearchPrinter"))); + + iPrinterConnectRequest = &aStatus; + *iPrinterConnectRequest = KRequestPending; + iUsbNotifier->WaitForPrinterNotify(); + IF_DEBUG(Print(_L("<<>>DpsEngine::CancelSearchPrinter"))); + iUsbNotifier->CancelPrinterNotify(); + IF_DEBUG(Print(_L("<<>>DpsEngine::ConnectStateNotifyL"))); + // SetPrintMode must be finished + if (!iUsbNotifier->IsSetPrintModeIssued()) + { + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNotReady); + return; + } + + iPrinterConnectRequest = &aStatus; + *iPrinterConnectRequest = KRequestPending; + iUsbNotifier->ConnectNotify(); + IF_DEBUG(Print(_L("<<>>DpsEngine::DoDpsRequestL"))); + // the ptp printer must be connected and registered for the dps event + if (!iUsbNotifier->IsConfigured() || !iDpsEventRequest) + { + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNotReady); + return; + } + + // there is a request from the host received and the reply has been + // sending out, but the host has not received it yet. we can not send + // the device request now + IF_DEBUG(Print(_L("curState is %x, idleState is %x"), + iDpsOperator->CurState(), iDpsOperator->IdleState())); + if (iDpsOperator->CurState() != iDpsOperator->IdleState()) + { + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrInUse); + return; + } + + iDpsOperator->StartTransactionL(aRequest); + iDpsOperationRequest = &aStatus; + *iDpsOperationRequest = KRequestPending; + IF_DEBUG(Print(_L("<<>>DpsEngine::CancelDpsOperation"))); + if (iDpsOperationRequest) + { + iDpsOperator->ScriptSender()->Cancel(); + User::RequestComplete(iDpsOperationRequest, KErrCancel); + } + iDpsOperator->Initialize(); + IF_DEBUG(Print(_L("<<>>DpsEngine::DpsEventNotify"))); + // the PTP printer must be connected and registered for the disconnect + if (!iUsbNotifier->IsConfigured() || !iPrinterConnectRequest) + { + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNotReady); + return; + } + + iOutEvent = &aParam; + iDpsEventRequest = &aStatus; + *iDpsEventRequest = KRequestPending; + iDpsOperator->ScriptReceiver()->WaitForReceive(); + IF_DEBUG(Print(_L("<<ScriptReceiver()->Cancel(); + } + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C void CDpsEngine::GetDpsConfigL(TDpsConfigPrintReq& aConfig) + { + IF_DEBUG(Print(_L(">>>DpsEngine::GetDpsConfigL"))); + + RFs fs = iDpsOperator->Trader()->FileHandle()->FileSession(); + RResourceFile resource; + + TBuf resourceFile(PathInfo::RomRootPath()); + TBuf length(KDpsResource); + resourceFile.SetLength(KDriver + length.Length()); + resourceFile.Replace(KDriver, length.Length(), KDpsResource); + IF_DEBUG(Print(_L("file is %S"), &resourceFile)); + resource.OpenL(fs, resourceFile); + CleanupClosePushL(resource); + resource.ConfirmSignatureL(KDpsResourceVersion); + HBufC8* id = resource.AllocReadLC(DPS_CONFIG); + TResourceReader reader; + reader.SetBuffer(id); + TInt count = static_cast(reader.ReadUint8()); + for (TInt i = 0; i < count; i++) + { + TDpsVersion version; + version.iMajor = static_cast(reader.ReadUint8()); + version.iMinor = static_cast(reader.ReadUint8()); + aConfig.iDpsVersions.Append(version); + } + TPtrC vendorString = reader.ReadTPtrC(); + aConfig.iVendorName.Copy(vendorString); + TDpsVersion vendorVersion; + vendorVersion.iMajor = static_cast(reader.ReadUint8()); + vendorVersion.iMinor = static_cast(reader.ReadUint8()); + aConfig.iVendorVersion = vendorVersion; + TPtrC productString = reader.ReadTPtrC(); + aConfig.iProductName.Copy(productString); + TPtrC SerialNo = reader.ReadTPtrC(); + aConfig.iSerialNo.Copy(SerialNo); + CleanupStack::PopAndDestroy(id); + CleanupStack::PopAndDestroy(&resource); + IF_DEBUG(Print(_L("<< + +TARGET mtpplaybackcontroldp.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x2002EA98 +VENDORID 0x70000001 + +CAPABILITY CommDD PowerMgmt ReadDeviceData WriteDeviceData TrustedUI ProtServ NetworkControl NetworkServices LocalServices ReadUserData WriteUserData + +MW_LAYER_SYSTEMINCLUDE_SYMBIAN + +USERINCLUDE ../inc +USERINCLUDE ../../../mtpfws/mtpfw/dataproviders/dputility/inc +USERINCLUDE ../../../mtpfws/mtpfw/common/inc +USERINCLUDE ../../../mtpfws/mtpfw/inc + +USERINCLUDE ../mtpplaybackinterface/inc +USERINCLUDE ../mtpplaybackmpximplementation/inc + +SOURCEPATH ../src +SOURCE cmtppbcgetdevicepropdesc.cpp +SOURCE cmtppbcgetdevicepropvalue.cpp +SOURCE cmtppbcsetdevicepropvalue.cpp +SOURCE cmtppbcresetdevicepropvalue.cpp +SOURCE cmtpplaybackcontroldp.cpp +SOURCE mtpplaybackcontroldpimplproxy.cpp +SOURCE mtpplaybackcontroldpprocessor.cpp +SOURCE cmtpplaybackmap.cpp +SOURCE cmtpplaybackproperty.cpp +SOURCE cmtppbcskip.cpp + +SOURCEPATH ../mtpplaybackinterface/src +SOURCE mmtpplaybackinterface.cpp +SOURCE cmtpplaybackcommand.cpp +SOURCE cmtpplaybackevent.cpp +SOURCE cmtpplaybackparam.cpp + +SOURCEPATH ../mtpplaybackmpximplementation/src +SOURCE cmtpplaybackcontrolimpl.cpp +SOURCE cmtpplaybackplaylisthelper.cpp +SOURCE cmtpplaybackresumehelper.cpp +SOURCE cmtpplaybackcommandchecker.cpp + +SOURCEPATH ../src +START RESOURCE mtpplaybackcontroldp.rss +TARGET mtpplaybackcontroldp.rsc +END + +// Data provider configuration resource file. +// The target filename corresponds to the implementation UID. +START RESOURCE mtpplaybackcontroldp_config.rss +TARGETPATH /resource/mtp +TARGET 2002EA99.rsc +END + + + + +LIBRARY euser.lib +LIBRARY efsrv.lib +LIBRARY ecom.lib + +LIBRARY mtpdatatypes.lib +LIBRARY mtpdataproviderapi.lib +LIBRARY mtpdataproviderutility.lib +LIBRARY mtpframework.lib + +LIBRARY mpxplaybackutility.lib +LIBRARY mpxcommon.lib +LIBRARY mpxcollectionhelper.lib +LIBRARY mpxcollectionutility.lib +LIBRARY platformenv.lib + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcgetdevicepropdesc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcgetdevicepropdesc.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,70 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent + */ + +#ifndef CMTPPBCGETPBDEVICEPROPDESC_H +#define CMTPPBCGETPBDEVICEPROPDESC_H + +#include "cmtprequestprocessor.h" +#include "mtpdebug.h" +#include "cmtpplaybackmap.h" + +class CMTPTypeDevicePropDesc; +class CMTPPlaybackControlDataProvider; + +/** +Implements the device data provider GetDevicePropDesc request processor. +@internalComponent +*/ +class CMTPPbcGetDevicePropDesc : public CMTPRequestProcessor, public MMTPPlaybackCallback + { + +public: + + static MMTPRequestProcessor* NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + ~CMTPPbcGetDevicePropDesc(); + +protected: + // From CMTPRequestProcessor + virtual TMTPResponseCode CheckRequestL(); + +private: // From CMTPRequestProcessor + void ServiceL(); + +private: //From MMTPPlaybackCallback + void HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr); + +private: + CMTPPbcGetDevicePropDesc(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + +private: // Owned. + + __FLOG_DECLARATION_MEMBER_MUTABLE; + CMTPPlaybackControlDataProvider& iPlaybackControlDp; + + CMTPTypeDevicePropDesc* iPropDesc; + CMTPPlaybackCommand* iPbCmd; + }; + +#endif //CMTPPBCGETPBDEVICEPROPDESC_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcgetdevicepropvalue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcgetdevicepropvalue.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,64 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPBCGETPBDEVICEPROPVALUE_H +#define CMTPPBCGETPBDEVICEPROPVALUE_H + +#include "cmtprequestprocessor.h" +#include "cmtpplaybackmap.h" + +class CMTPPlaybackControlDataProvider; + +/** +Implements the device data provider GetDevicePropValue request processor. +@internalComponent +*/ +class CMTPPbcGetDevicePropValue : public CMTPRequestProcessor, public MMTPPlaybackCallback + { + +public: + + static MMTPRequestProcessor* NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + ~CMTPPbcGetDevicePropValue(); + +private: // From CMTPRequestProcessor + TMTPResponseCode CheckRequestL(); + void ServiceL(); + +private: //From MMTPPlaybackCallback + void HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr); + +private: + CMTPPbcGetDevicePropValue(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + +private: // Owned + __FLOG_DECLARATION_MEMBER_MUTABLE; + CMTPPlaybackControlDataProvider& iPlaybackControlDp; + CMTPPlaybackCommand* iPbCmd; + TMTPTypeInt32 iInt32; + TMTPTypeUint32 iUint32; + }; + +#endif // CMTPPBCGETPBDEVICEPROPVALUE_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcresetdevicepropvalue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcresetdevicepropvalue.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,73 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPCBRESETPBDEVICEPROPVALUE_H +#define CMTPPCBRESETPBDEVICEPROPVALUE_H + +#include "cmtppbcgetdevicepropdesc.h" +#include "mtpdebug.h" +#include "cmtpplaybackmap.h" + +class CMTPTypeString; +/** +Implements the device data provider ResetDevicePropValue request processor. +@internalComponent +*/ +class CMTPPbcResetDevicePropValue : public CMTPRequestProcessor, public MMTPPlaybackCallback + { + +public: + + static MMTPRequestProcessor* NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + ~CMTPPbcResetDevicePropValue(); + +private: //From MMTPPlaybackCallback + void HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr); + +private: + + CMTPPbcResetDevicePropValue(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + +private: // From CMTPRequestProcessor + + TMTPResponseCode CheckRequestL(); + void ServiceL(); + +private: + TMTPTypeGuid* GetGUIDL( const TUint aKey); + void SaveGUID( const TUint aKey, TMTPTypeGuid& aValue ); + +private: // Owned + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER_MUTABLE; + CMTPPlaybackControlDataProvider& iPlaybackControlDp; + TMTPPbCtrlData iData; + CMTPPlaybackCommand* iPbCmd; + }; + +#endif // CMTPPCBRESETPBDEVICEPROPVALUE_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcsetdevicepropvalue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcsetdevicepropvalue.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,71 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPBCSETPBDEVICEPROPVALUE_H +#define CMTPPBCSETPBDEVICEPROPVALUE_H + +#include "cmtprequestprocessor.h" +#include "cmtpplaybackmap.h" + +class CMTPTypeString; +class CMTPPlaybackControlDataProvider; + +/** +Implements the device data provider SetDevicePropValue request processor. +@internalComponent +*/ +class CMTPPlaybackCommand; + +class CMTPPbcSetDevicePropValue : public CMTPRequestProcessor, public MMTPPlaybackCallback + { + +public: + + static MMTPRequestProcessor* NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + ~CMTPPbcSetDevicePropValue(); + +private: // From CMTPRequestProcessor + TMTPResponseCode CheckRequestL(); + void ServiceL(); + TBool DoHandleResponsePhaseL(); + +private: //From MMTPPlaybackCallback + void HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr); + +private: + CMTPPbcSetDevicePropValue(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + +private: // Owned + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER_MUTABLE; + CMTPPlaybackControlDataProvider& iPlaybackControlDp; + TMTPPbCtrlData iData; + CMTPPlaybackCommand* iPbCmd; + }; + +#endif // CMTPPBCSETPBDEVICEPROPVALUE_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcskip.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtppbcskip.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,63 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPBCSKIP_H +#define CMTPPBCSKIP_H + +#include "cmtprequestprocessor.h" +#include "mmtpplaybackinterface.h" + +class CMTPPlaybackCommand; +class CMTPPlaybackControlDataProvider; + +/** +Implements the device data provider GetDevicePropValue request processor. +@internalComponent +*/ +class CMTPPbcSkip : public CMTPRequestProcessor, public MMTPPlaybackCallback + { + +public: + + static MMTPRequestProcessor* NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + ~CMTPPbcSkip(); + +private: //From MMTPPlaybackCallback + void HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr); + +private: // From CMTPRequestProcessor + TMTPResponseCode CheckRequestL(); + void ServiceL(); + +private: + CMTPPbcSkip(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + +private: // Owned + __FLOG_DECLARATION_MEMBER_MUTABLE; + CMTPPlaybackControlDataProvider& iPlaybackControlDp; + CMTPPlaybackCommand* iPbCmd; + }; + +#endif // CMTPPBCSKIP_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtpplaybackcontroldp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtpplaybackcontroldp.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,116 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKCONTROLDP_H +#define CMTPPLAYBACKCONTROLDP_H + +#include +#include + +#include "mtpplaybackcontroldpconst.h" +#include "mtpdebug.h" +#include "mmtpplaybackinterface.h" + +class MMTPRequestProcessor; +class CMTPPlaybackMap; +class MMTPPlaybackControl; +class CMTPPlaybackProperty; +class CMTPPlaybackEvent; + +/** +Implements the MTP playback control data provider plug-in. +@internalComponent +*/ +class CMTPPlaybackControlDataProvider : public CMTPDataProviderPlugin, public MMTPPlaybackObserver + { +public: + + static TAny* NewL(TAny* aParams); + ~CMTPPlaybackControlDataProvider(); + + CMTPPlaybackMap& GetPlaybackMap() const; + CMTPPlaybackProperty& GetPlaybackProperty() const; + MMTPPlaybackControl& GetPlaybackControlL(); + void RequestToResetPbCtrl(); + +private: // From CMTPDataProviderPlugin + + void Cancel(); + void ProcessEventL(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection); + void ProcessNotificationL(TMTPNotification aNotification, const TAny* aParams); + void ProcessRequestPhaseL(TMTPTransactionPhase aPhase, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection); + void StartObjectEnumerationL(TUint32 aStorageId, TBool aPersistentFullEnumeration); + void StartStorageEnumerationL(); + void Supported(TMTPSupportCategory aCategory, RArray& aArray) const; + +private: //From MMTPPlaybackObserver + + void HandlePlaybackEventL(CMTPPlaybackEvent* aEvent, TInt aErr); + +private: + + CMTPPlaybackControlDataProvider(TAny* aParams); + void ConstructL(); + + TInt LocateRequestProcessorL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection); + void SessionClosedL(const TMTPNotificationParamsSessionChange& aSession); + void SessionOpenedL(const TMTPNotificationParamsSessionChange& aSession); + void SendEventL(TMTPDevicePropertyCode aPropCode); + +private: // Owned + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER_MUTABLE; + + /** + The event dataset. + */ + TMTPTypeEvent iEvent; + + /** + The active request processors table. Multiple request processors may be + active in a multi-session MTP environment. + */ + RPointerArray iActiveProcessors; + TInt iActiveProcessor; + TBool iActiveProcessorRemoved; + + /** + The iPlaybackMap map the device property or operation to valid playback command + */ + CMTPPlaybackMap* iPlaybackMap; + + /** + The iPlaybackProperty is a container for playback properties. + */ + CMTPPlaybackProperty* iPlaybackProperty; + + /** + The checker map the device property or operation to valid playback command + */ + MMTPPlaybackControl* iPlaybackControl; + + TBool iRequestToResetPbCtrl; + }; + +#endif // CMTPPLAYBACKCONTROLDP_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtpplaybackmap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtpplaybackmap.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,98 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKMAP_H +#define CMTPPLAYBACKMAP_H + +#include +#include +#include "mtpplaybackcontroldpconst.h" +#include "mmtpplaybackinterface.h" +#include "mtpdebug.h" + +class CMTPPlaybackCommand; +class CMTPPlaybackProperty; +class MMTPDataProviderFramework; + +class TMTPPbCtrlData + { +public: + TMTPOperationCode iOptCode; + TMTPDevicePropertyCode iDevPropCode; + TMTPTypeUint32 iPropValUint32; + TMTPTypeInt32 iPropValInt32; + }; + + +/** +Implements CMTPPlaybackMap. +@internalComponent +*/ +class CMTPPlaybackMap : public CBase + { + +public: + + static CMTPPlaybackMap* NewL(MMTPDataProviderFramework& aFramework, CMTPPlaybackProperty& aProperty); + ~CMTPPlaybackMap(); + + /** + Factory meothod, map the MTP playback control data to playback control command, + @param aData TMTPPbCtrlData, + @param aCmd output the valid playback command if the return value if KErrNone + @return KErrNone if request is valid, else an error code. + */ + TInt GetPlaybackControlCommand(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + + /** + Map the playback state to MTP playback rate, + @param aState TMTPPlaybackState + @return the playback rate. + */ + TInt32 PlaybackRateL(TMTPPlaybackState aState); + + /** + Map the playback state to MTP playback rate, + @param aSuid SUID + @return the playback object handle. + */ + TUint32 ObjectHandleL(const TDesC& aSuid); + +private: + CMTPPlaybackMap(MMTPDataProviderFramework& aFramework, CMTPPlaybackProperty& aProperty); + void ConstructL(); + + TInt HandleSetDevicePropValue(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + void HandleSetDevicePropValueL(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + TInt HandleGetDevicePropValue(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + void HandleGetDevicePropValueL(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + TInt HandleSkip(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + void HandleSkipL(const TMTPPbCtrlData& aData, CMTPPlaybackCommand** aCmd); + void GetObjecInfoFromHandleL(TUint32 aHandle, TDes& aSuid, TUint& aFormat) const; + +private: // Owned. + + __FLOG_DECLARATION_MEMBER_MUTABLE; + MMTPDataProviderFramework& iFramework; + CMTPPlaybackProperty& iProperty; + }; + +#endif //CMTPPLAYBACKMAP_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/cmtpplaybackproperty.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/cmtpplaybackproperty.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,93 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKPROPERTY_H +#define CMTPPLAYBACKPROPERTY_H + +#include "mtpplaybackcontroldpconst.h" +#include "mtpdebug.h" +#include "cmtpplaybackcommand.h" + +class CMTPPlaybackControlDataProvider; +class TMTPPbCtrlData; + +/** +Implements the CMTPPlaybackProperty. +@internalComponent +*/ +class CMTPPlaybackProperty : public CBase + { + +public: + + static CMTPPlaybackProperty* NewL(); + ~CMTPPlaybackProperty(); + + /** + Get the devide property value by property code, + @param aProp, DevicePropertyCode, + @param aValue, Return value of the property, + */ + void GetDefaultPropertyValueL(TMTPDevicePropertyCode aProp, TInt32& aValue); + + /** + Get the devide property value by property code, + @param aProp, DevicePropertyCode, + @param aValue, Return value of the property, + */ + void GetDefaultPropertyValueL(TMTPDevicePropertyCode aProp, TUint32& aValue); + + /** + Get the default devide property value, + @param aValue, Value of the property, + */ + void GetDefaultPropertyValueL(TMTPPbCtrlData& aValue); + + /** + Get the default volume data set, + @param aValue, Value of the property, + */ + void GetDefaultVolSet(TMTPPbDataVolume& aValue); + + /** + Set the default volume data set, + @param aValue, Value of the property, + */ + void SetDefaultVolSetL(const TMTPPbDataVolume& aValue); + + /** + Check if the input is equalt to the default devide property value, + @param aValue, Value of the property, + @return ETrue if equal. + */ + TBool IsDefaultPropertyValueL(const TMTPPbCtrlData& aValue) const; + +private: + CMTPPlaybackProperty(); + void ConstructL(); + +private: // Owned. + + __FLOG_DECLARATION_MEMBER_MUTABLE; + TMTPPbDataVolume* iPlaybackVolumeData; + }; + +#endif //CMTPPLAYBACKPROPERTY_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/mtpplaybackcontroldpconst.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/mtpplaybackcontroldpconst.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,56 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef MTPPLAYBACKCONTROLDPCONST_H +#define MTPPLAYBACKCONTROLDPCONST_H + +#include + +/** +define all the operations that are supported by the device data provider +*/ +static const TUint16 KMTPPlaybackControlDpSupportedOperations[] = + { + EMTPOpCodeGetDevicePropDesc, + EMTPOpCodeGetDevicePropValue, + EMTPOpCodeSetDevicePropValue, + EMTPOpCodeResetDevicePropValue, + EMTPOpCodeSkip + }; + +/** +define all the device properties supported by the device data provider +*/ +static const TUint16 KMTPPlaybackControlDpSupportedProperties[] = + { + EMTPDevicePropCodeVolume, + EMTPDevicePropCodePlaybackRate, + EMTPDevicePropCodePlaybackObject, + EMTPDevicePropCodePlaybackContainerIndex, + EMTPDevicePropCodePlaybackPosition + }; + +static const TUint16 KMTPPlaybackControlDpSupportedEvents[] = + { + EMTPEventCodeDevicePropChanged + }; + +#endif // MTPPLAYBACKCONTROLDPCONST_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/mtpplaybackcontroldpprocessor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/mtpplaybackcontroldpprocessor.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,47 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef MTPPLAYBACKCONTROLDPPROCESSOR_H +#define MTPPLAYBACKCONTROLDPPROCESSOR_H + +//forward declaration +class MMTPConnection; +class TMTPTypeRequest; +class CMTPDataProviderPlugin; +class MMTPDataProviderFramework; +class MMTPRequestProcessor; +class CMTPPlaybackControlDataProvider; +/** +Defines device data provider request processor + +@internalTechnology +*/ +class MTPPlaybackControlDpProcessor + { +public: + static MMTPRequestProcessor* CreateL( + MMTPDataProviderFramework& aFramework, + const TMTPTypeRequest& aRequest, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + }; + +#endif //MTPPLAYBACKCONTROLDPPROCESSOR_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/inc/mtpplaybackcontrolpanic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/inc/mtpplaybackcontrolpanic.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,42 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef MTPPLAYBACKCONTROLPANIC_H +#define MTPPLAYBACKCONTROLPANIC_H + +#include + +enum TMTPPlaybackControlPanic + { + EMTPPBReserved = 0, + EMTPPBCollectionErrMsg = 1, + EMTPPBCallbackInvalid = 2, + EMTPPBCollectionErrCall = 3, + EMTPPBDataTypeErr = 4, + EMTPPBArgumentErr = 5, + EMTPPBDataNullErr = 6, + }; + +inline void Panic( TMTPPlaybackControlPanic aCode ) + { + User::Panic( _L("MTPPlaybackControl"), aCode ); + }; + +#endif //MTPPLAYBACKCONTROLPANIC_H diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/cmtpplaybackcommand.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/cmtpplaybackcommand.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,114 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKCOMMAND_H +#define CMTPPLAYBACKCOMMAND_H + +#include "mtpdebug.h" +#include "mmtpplaybackinterface.h" +#include "cmtpplaybackparam.h" + +class TMTPPbDataVolume + { +public: + TMTPPbDataVolume(TUint32 aMax, TUint32 aMin, TUint32 aDefault, TUint32 aCurrent, TUint32 aStep); + TMTPPbDataVolume(const TMTPPbDataVolume& aVol); + + void SetVolume(TUint32 aMax, TUint32 aMin, TUint32 aDefault, TUint32 aCurrent, TUint32 aStep); + void operator =(const TMTPPbDataVolume& aVol); + TUint32 MaxVolume() const; + TUint32 MinVolume() const; + TUint32 DefaultVolume() const; + TUint32 CurrentVolume() const; + TUint32 Step() const; + +private: + TUint32 iMaxVolume; + TUint32 iMinVolume; + TUint32 iDefaultVolume; + TUint32 iCurrentVolume; + TUint32 iStep; + }; + +/** +* Encapsulates parameter for command EPlaybackCmdInitObject +*/ +class CMTPPbCmdParam : public CMTPPbParamBase + { +public: + static CMTPPbCmdParam* NewL(TMTPPbCategory aCategory, const TDesC& aSuid); + static CMTPPbCmdParam* NewL(TInt32 aValue); + static CMTPPbCmdParam* NewL(TUint32 aValue); + static CMTPPbCmdParam* NewL(const CMTPPbCmdParam& aParam); + static CMTPPbCmdParam* NewL(const TMTPPbDataVolume& aVolume); + ~CMTPPbCmdParam(); + +public: + const TMTPPbDataVolume& VolumeSetL() const; + +private: + /** + * The constuctor. + * @param aCategory, category of object for initialization, + */ + CMTPPbCmdParam(); + CMTPPbCmdParam(TMTPPbCategory aCategory, const TDesC& aSuid); + CMTPPbCmdParam(TInt32 aValue); + CMTPPbCmdParam(TUint32 aValue); + CMTPPbCmdParam(const TMTPPbDataVolume& aVolume); + + void ConstructL(TMTPPbCategory aCategory, const TDesC& aSuid); + void ConstructL(TInt32 aValue); + void ConstructL(TUint32 aValue); + void ConstructL(const TMTPPbDataVolume& aVolume); + void ConstructL(const CMTPPbCmdParam& aParam); + }; + + +/** +Implements the CMTPPlaybackCommand. +@internalComponent +*/ +class CMTPPlaybackCommand : public CBase + { +public: + static CMTPPlaybackCommand* NewL(TMTPPlaybackCommand aCmd, CMTPPbCmdParam* aParam); + static CMTPPlaybackCommand* NewL(const CMTPPlaybackCommand& aCmd); + + void SetParam(CMTPPbCmdParam* aParam); + const CMTPPbCmdParam& ParamL() const; + TMTPPlaybackCommand PlaybackCommand() const; + TBool HasParam() const; + + ~CMTPPlaybackCommand(); + +private: + CMTPPlaybackCommand(TMTPPlaybackCommand aCmd, CMTPPbCmdParam* aParam); + void ConstructL(const CMTPPlaybackCommand& aParam); + void ConstructL(); + +private: // Owned. + __FLOG_DECLARATION_MEMBER; + const TMTPPlaybackCommand iPbCmd; + CMTPPbCmdParam* iParam; + }; + +#endif //CMTPPLAYBACKCOMMAND_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/cmtpplaybackevent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/cmtpplaybackevent.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,77 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKEVENT_H +#define CMTPPLAYBACKEVENT_H + +#include "mtpdebug.h" +#include "mmtpplaybackinterface.h" +#include "cmtpplaybackparam.h" + +/** +* Encapsulates parameter for command EPlaybackCmdInitObject +*/ +class CMTPPbEventParam : public CMTPPbParamBase + { +public: + static CMTPPbEventParam* NewL(TMTPPbCategory aCategory, const TDesC& aSuid); + static CMTPPbEventParam* NewL(TInt32 aValue); + static CMTPPbEventParam* NewL(TUint32 aValue); + ~CMTPPbEventParam(); + +private: + /** + * The constuctor. + * @param aCategory, category of object for initialization, + */ + CMTPPbEventParam(TMTPPbCategory aCategory, const TDesC& aSuid); + CMTPPbEventParam(TInt32 aValue); + CMTPPbEventParam(TUint32 aValue); + }; + + +/** +Implements the CMTPPlaybackCommand. +@internalComponent +*/ +class CMTPPlaybackEvent : public CBase + { +public: + + static CMTPPlaybackEvent* NewL(TMTPPlaybackEvent aCmd, CMTPPbEventParam* aParam); + + void SetParam(CMTPPbEventParam* aParam); + const CMTPPbEventParam& ParamL(); + TMTPPlaybackEvent PlaybackEvent(); + + ~CMTPPlaybackEvent(); + +private: + CMTPPlaybackEvent(TMTPPlaybackEvent aCmd, CMTPPbEventParam* aParam); + void ConstructL(); + +private: // Owned. + __FLOG_DECLARATION_MEMBER; + const TMTPPlaybackEvent iPbEvent; + CMTPPbEventParam* iParam; + }; + +#endif //CMTPPLAYBACKEVENT_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/cmtpplaybackparam.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/cmtpplaybackparam.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,104 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKPARAM_H +#define CMTPPLAYBACKPARAM_H + +#include "mtpdebug.h" + +/** + Category identifier +*/ +enum TMTPPbCategory + { + /** Init value **/ + EMTPPbCatNone=0, + /** SingleMusic **/ + EMTPPbCatMusic=1, + /** PlayList**/ + EMTPPbCatPlayList = 2, + /** Ablum **/ + EMTPPbCatAlbum = 3 + }; + +enum TMTPPbDataType + { + EMTPPbTypeNone, + EMTPPbInt32, + EMTPPbUint32, + EMTPPbSuidSet, + EMTPPbVolumeSet, + EMTPPbTypeEnd + }; + +class TMTPPbDataSuid + { +public: + TMTPPbDataSuid(TMTPPbCategory aCategory, const TDesC& aSuid); + + TMTPPbCategory Category() const; + const TDesC& Suid() const; + +private: + //The category + TMTPPbCategory iPlayCategory; + //The suid of object for initialization + TFileName iSuid; + }; + +/** +* Encapsulates parameter for playback commands and events. +*/ +class CMTPPbParamBase : public CBase + { +public: + virtual const TMTPPbDataSuid& SuidSetL() const; + virtual TInt32 Int32L() const; + virtual TUint32 Uint32L() const; + virtual ~CMTPPbParamBase(); + TMTPPbDataType Type() const; + +protected: + /** + * The constuctor. + * @param aCategory, category of object for initialization, + */ + CMTPPbParamBase(); + CMTPPbParamBase(TInt32 aValue); + CMTPPbParamBase(TUint32 aValue); + CMTPPbParamBase(TMTPPbCategory aCategory, const TDesC& aSuid); + + void ConstructL(TMTPPbCategory aCategory, const TDesC& aSuid); + void ConstructL(TInt32 aValue); + void ConstructL(TUint32 aValue); + void ConstructL(const CMTPPbParamBase& aParam); + void SetType(TMTPPbDataType); + TAny* GetData() const; + void SetData(TAny* aData); + +private: + __FLOG_DECLARATION_MEMBER; + + TMTPPbDataType iParamType; + TAny* iData; + }; + +#endif //CMTPPLAYBACKPARAM_H + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/mmtpplaybackinterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/inc/mmtpplaybackinterface.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,133 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef MMTPPLAYBACKINTERFACE_H +#define MMTPPLAYBACKINTERFACE_H + +const TInt KPlaybackErrNone = 0; +const TInt KPlaybackErrDeviceBusy = (-8000); +const TInt KPlaybackErrDeviceUnavailable = (-8001); +const TInt KPlaybackErrParamInvalid = (-8002); +const TInt KPlaybackErrContextInvalid = (-8003); + +/** Playback status */ +enum TMTPPlaybackState + { + /** Playing */ + EPlayStatePlaying, + /** Pause */ + EPlayStatePaused, + /** Forward seeking */ + EPlayStateForwardSeeking, + /** Backward seeking */ + EPlayStateBackwardSeeking, + /** error state */ + EPlayStateError + }; + +/** Playback events */ +enum TMTPPlaybackEvent + { + EPlaybackEventNone, + /** playback volume update */ + EPlaybackEventVolumeUpdate, + /** playback object update */ + EPlaybackEventObjectUpdate, + /** playback object index update */ + EPlaybackEventObjectIndexUpdate, + /** player state update */ + EPlaybackEventStateUpdate, + /** Last Event */ + EPlaybackEventEnd + }; + +/** Playback command */ +enum TMTPPlaybackCommand + { + EPlaybackCmdNone, + EPlaybackCmdInitObject, + EPlaybackCmdInitIndex, + EPlaybackCmdPlay, + EPlaybackCmdPause, + EPlaybackCmdStop, + EPlaybackCmdSkip, + EPlaybackCmdSeekForward, + EPlaybackCmdSeekBackward, + EPlaybackCmdGetVolume, + EPlaybackCmdGetVolumeSet, + EPlaybackCmdSetVolume, + EPlaybackCmdGetPosition, + EPlaybackCmdSetPosition, + EPlaybackCmdGetDuration, + EPlaybackCmdGetState, + EPlaybackCmdGetObject, + EPlaybackCmdGetIndex, + EPlaybackCmdEnd + }; + +class CMTPPlaybackCommand; +class CMTPPlaybackEvent; + +class MMTPPlaybackObserver + { +public: + /** + * Called when playback object is updated or + * playback object's position is updated + * in the active player instance. + */ + virtual void HandlePlaybackEventL(CMTPPlaybackEvent* aEvent, TInt aErr = KPlaybackErrNone) = 0; + }; + +class MMTPPlaybackCallback + { +public: + /** + * Called when playback command is completed + * + * @param aErr Complete error + * @param aCmd Complete command + */ + virtual void HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr = KPlaybackErrNone) = 0; + }; + +class MMTPPlaybackControl + { +public: + /** + * Create an Instance of MMTPPlaybackControl's implementation. + */ + static MMTPPlaybackControl* NewL(MMTPPlaybackObserver& aObserver); + + /** + * Frees resource, and destroy the object itself. + */ + virtual void Close()=0; + + /** + * Issue player commands, with optional data. + * @param aCmd the command + * @param aCallback Call back function + */ + virtual void CommandL(CMTPPlaybackCommand& aCmd, MMTPPlaybackCallback* aCallback = NULL) = 0; + }; + +#endif // MMTPPLAYBACKINTERFACE_H +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/cmtpplaybackcommand.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/cmtpplaybackcommand.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,319 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackcommand.h" +#include "mtpplaybackcontrolpanic.h" + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"CMtpPbCmd");) + +/********************************************* + class TMTPPbDataVolume +**********************************************/ +TMTPPbDataVolume::TMTPPbDataVolume(TUint32 aMax, TUint32 aMin, TUint32 aDefault, TUint32 aCurrent, TUint32 aStep): + iMaxVolume(aMax),iMinVolume(aMin), iDefaultVolume(aDefault), iCurrentVolume(aCurrent), iStep(aStep) + { + __ASSERT_DEBUG((aMin < aMax), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aMin <= aDefault && aDefault <= aMax), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aMin <= aCurrent && aCurrent <= aMax), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aStep <= (aMax-aMin)), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aStep != 0), Panic(EMTPPBArgumentErr)); + } + +TMTPPbDataVolume::TMTPPbDataVolume(const TMTPPbDataVolume& aVol): + iMaxVolume(aVol.MaxVolume()), + iMinVolume(aVol.MinVolume()), + iDefaultVolume(aVol.DefaultVolume()), + iCurrentVolume(aVol.CurrentVolume()), + iStep(aVol.Step()) + { + + } + +void TMTPPbDataVolume::SetVolume(TUint32 aMax, TUint32 aMin, TUint32 aDefault, TUint32 aCurrent, TUint32 aStep) + { + __ASSERT_DEBUG((aMin < aMax), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aMin <= aDefault && aDefault <= aMax), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aMin <= aCurrent && aCurrent <= aMax), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aStep <= (aMax-aMin)), Panic(EMTPPBArgumentErr)); + __ASSERT_DEBUG((aStep != 0), Panic(EMTPPBArgumentErr)); + iMaxVolume = aMax; + iMinVolume = aMin; + iDefaultVolume = aDefault; + iCurrentVolume = aCurrent, + iStep = aStep; + } + +void TMTPPbDataVolume::operator =(const TMTPPbDataVolume& aVol) + { + iMaxVolume = aVol.MaxVolume(); + iMinVolume = aVol.MinVolume(); + iDefaultVolume = aVol.DefaultVolume(); + iCurrentVolume = aVol.CurrentVolume(); + iStep = aVol.Step(); + } + +TUint32 TMTPPbDataVolume::MaxVolume() const + { + return iMaxVolume; + } + +TUint32 TMTPPbDataVolume::MinVolume() const + { + return iMinVolume; + } + +TUint32 TMTPPbDataVolume::DefaultVolume() const + { + return iDefaultVolume; + } + +TUint32 TMTPPbDataVolume::CurrentVolume() const + { + return iCurrentVolume; + } + +TUint32 TMTPPbDataVolume::Step() const + { + return iStep; + } + +/********************************************* + class CMTPPbCmdParam +**********************************************/ + +CMTPPbCmdParam* CMTPPbCmdParam::NewL(TMTPPbCategory aCategory, const TDesC& aSuid) + { + CMTPPbCmdParam* self = new (ELeave) CMTPPbCmdParam(aCategory, aSuid); + CleanupStack::PushL(self); + self->ConstructL(aCategory, aSuid); + CleanupStack::Pop(self); + return self; + } + +CMTPPbCmdParam* CMTPPbCmdParam::NewL(TInt32 aValue) + { + CMTPPbCmdParam* self = new (ELeave) CMTPPbCmdParam(aValue); + CleanupStack::PushL(self); + self->ConstructL(aValue); + CleanupStack::Pop(self); + return self; + } + +CMTPPbCmdParam* CMTPPbCmdParam::NewL(TUint32 aValue) + { + CMTPPbCmdParam* self = new (ELeave) CMTPPbCmdParam(aValue); + CleanupStack::PushL(self); + self->ConstructL(aValue); + CleanupStack::Pop(self); + return self; + } + +CMTPPbCmdParam* CMTPPbCmdParam::NewL(const TMTPPbDataVolume& aVolume) + { + CMTPPbCmdParam* self = new (ELeave) CMTPPbCmdParam(aVolume); + CleanupStack::PushL(self); + self->ConstructL(aVolume); + CleanupStack::Pop(self); + return self; + } + +CMTPPbCmdParam* CMTPPbCmdParam::NewL(const CMTPPbCmdParam& aParam) + { + CMTPPbCmdParam* self = new (ELeave) CMTPPbCmdParam(); + CleanupStack::PushL(self); + self->ConstructL(aParam); + CleanupStack::Pop(self); + return self; + } + +CMTPPbCmdParam::~CMTPPbCmdParam() + { + + } + +CMTPPbCmdParam::CMTPPbCmdParam(): + CMTPPbParamBase() + { + + } + +CMTPPbCmdParam::CMTPPbCmdParam(TMTPPbCategory aCategory, const TDesC& aSuid): + CMTPPbParamBase(aCategory, aSuid) + { + + } + +CMTPPbCmdParam::CMTPPbCmdParam(TInt32 aValue): + CMTPPbParamBase(aValue) + { + + } + +CMTPPbCmdParam::CMTPPbCmdParam(TUint32 aValue): + CMTPPbParamBase(aValue) + { + + } + +CMTPPbCmdParam::CMTPPbCmdParam(const TMTPPbDataVolume& /*aVolume*/): + CMTPPbParamBase() + { + CMTPPbParamBase::SetType(EMTPPbVolumeSet); + } + +void CMTPPbCmdParam::ConstructL(TMTPPbCategory aCategory, const TDesC& aSuid) + { + CMTPPbParamBase::ConstructL(aCategory, aSuid); + } + +void CMTPPbCmdParam::ConstructL(TInt32 aValue) + { + CMTPPbParamBase::ConstructL(aValue); + } + +void CMTPPbCmdParam::ConstructL(TUint32 aValue) + { + CMTPPbParamBase::ConstructL(aValue); + } + +void CMTPPbCmdParam::ConstructL(const TMTPPbDataVolume& aVolume) + { + TMTPPbDataVolume* val = new (ELeave) TMTPPbDataVolume(aVolume); + CMTPPbParamBase::SetData(static_cast(val)); + } + +void CMTPPbCmdParam::ConstructL(const CMTPPbCmdParam& aParam) + { + TMTPPbDataType type(aParam.Type()); + + __ASSERT_DEBUG((type > EMTPPbTypeNone && type < EMTPPbTypeEnd), Panic(EMTPPBArgumentErr)); + __ASSERT_ALWAYS((type > EMTPPbTypeNone && type < EMTPPbTypeEnd), User::Leave(KErrArgument)); + + if(type == EMTPPbVolumeSet) + { + TMTPPbDataVolume* val = new (ELeave) TMTPPbDataVolume(aParam.VolumeSetL()); + CMTPPbParamBase::SetData(static_cast(val)); + CMTPPbParamBase::SetType(type); + } + else + { + CMTPPbParamBase::ConstructL(aParam); + } + } + +const TMTPPbDataVolume& CMTPPbCmdParam::VolumeSetL() const + { + __ASSERT_DEBUG((CMTPPbParamBase::Type() == EMTPPbVolumeSet), Panic(EMTPPBDataTypeErr)); + __ASSERT_ALWAYS((CMTPPbParamBase::Type() == EMTPPbVolumeSet), User::Leave(KErrArgument)); + return *static_cast(CMTPPbParamBase::GetData()); + } + +/********************************************* + class CMTPPlaybackCommand +**********************************************/ +CMTPPlaybackCommand* CMTPPlaybackCommand::NewL(TMTPPlaybackCommand aCmd, CMTPPbCmdParam* aParam) + { + __ASSERT_DEBUG((aCmd > EPlaybackCmdNone && aCmd < EPlaybackCmdEnd), Panic(EMTPPBArgumentErr)); + __ASSERT_ALWAYS((aCmd > EPlaybackCmdNone && aCmd < EPlaybackCmdEnd), User::Leave(KErrArgument)); + + CMTPPlaybackCommand* self = new (ELeave) CMTPPlaybackCommand(aCmd, aParam); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CMTPPlaybackCommand* CMTPPlaybackCommand::NewL(const CMTPPlaybackCommand& aCmd) + { + CMTPPlaybackCommand* self = new (ELeave) CMTPPlaybackCommand(aCmd.PlaybackCommand(), NULL); + CleanupStack::PushL(self); + self->ConstructL(aCmd); + CleanupStack::Pop(self); + return self; + } + +/** +Destructor. +*/ +CMTPPlaybackCommand::~CMTPPlaybackCommand() + { + __FLOG(_L8("~CMTPPlaybackCommand - Entry")); + delete iParam; + __FLOG(_L8("~CMTPPlaybackCommand - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPlaybackCommand::CMTPPlaybackCommand(TMTPPlaybackCommand aCmd, + CMTPPbCmdParam* aParam): + iPbCmd(aCmd),iParam(aParam) + { + } + +/** +Second-phase constructor. +*/ +void CMTPPlaybackCommand::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("CMTPPlaybackCommand: ConstructL - Entry")); + __FLOG(_L8("CMTPPlaybackCommand: ConstructL - Exit")); + } + +/** +Second-phase constructor. +*/ +void CMTPPlaybackCommand::ConstructL(const CMTPPlaybackCommand& aCmd) + { + __FLOG(_L8("CMTPPlaybackCommand: ConstructL - Entry")); + if(aCmd.HasParam()) + { + iParam = CMTPPbCmdParam::NewL(aCmd.ParamL()); + } + __FLOG(_L8("CMTPPlaybackCommand: ConstructL - Exit")); + } + +TMTPPlaybackCommand CMTPPlaybackCommand::PlaybackCommand() const + { + __ASSERT_DEBUG((iPbCmd > EPlaybackCmdNone && iPbCmd < EPlaybackCmdEnd), Panic(EMTPPBArgumentErr)); + return iPbCmd; + } + +TBool CMTPPlaybackCommand::HasParam() const + { + TBool result(iParam != NULL); + return result; + } + +const CMTPPbCmdParam& CMTPPlaybackCommand::ParamL() const + { + __ASSERT_DEBUG((iParam != NULL), Panic(EMTPPBDataNullErr)); + __ASSERT_ALWAYS((iParam != NULL), User::Leave(KErrArgument)); + return *iParam; + } + +void CMTPPlaybackCommand::SetParam(CMTPPbCmdParam* aParam) + { + delete iParam; + iParam = aParam; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/cmtpplaybackevent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/cmtpplaybackevent.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,140 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackevent.h" +#include "mtpplaybackcontrolpanic.h" + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"CMtpPbEvent");) + +CMTPPbEventParam* CMTPPbEventParam::NewL(TMTPPbCategory aCategory, const TDesC& aSuid) + { + CMTPPbEventParam* self = new (ELeave) CMTPPbEventParam(aCategory, aSuid); + CleanupStack::PushL(self); + self->ConstructL(aCategory, aSuid); + CleanupStack::Pop(self); + return self; + } + +CMTPPbEventParam* CMTPPbEventParam::NewL(TInt32 aValue) + { + CMTPPbEventParam* self = new (ELeave) CMTPPbEventParam(aValue); + CleanupStack::PushL(self); + self->ConstructL(aValue); + CleanupStack::Pop(self); + return self; + } + +CMTPPbEventParam* CMTPPbEventParam::NewL(TUint32 aValue) + { + CMTPPbEventParam* self = new (ELeave) CMTPPbEventParam(aValue); + CleanupStack::PushL(self); + self->ConstructL(aValue); + CleanupStack::Pop(self); + return self; + } + +CMTPPbEventParam::~CMTPPbEventParam() + { + + } + +CMTPPbEventParam::CMTPPbEventParam(TMTPPbCategory aCategory, const TDesC& aSuid): + CMTPPbParamBase(aCategory, aSuid) + { + + } + +CMTPPbEventParam::CMTPPbEventParam(TInt32 aValue): + CMTPPbParamBase(aValue) + { + + } + +CMTPPbEventParam::CMTPPbEventParam(TUint32 aValue): + CMTPPbParamBase(aValue) + { + + } + +/** +Two-phase constructor. +*/ +CMTPPlaybackEvent* CMTPPlaybackEvent::NewL(TMTPPlaybackEvent aEvent, CMTPPbEventParam* aParam) + { + __ASSERT_DEBUG((aEvent > EPlaybackEventNone && aEvent < EPlaybackEventEnd), Panic(EMTPPBArgumentErr)); + __ASSERT_ALWAYS((aEvent > EPlaybackEventNone && aEvent < EPlaybackEventEnd), User::Leave(KErrArgument)); + + CMTPPlaybackEvent* self = new (ELeave) CMTPPlaybackEvent(aEvent, aParam); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +Destructor. +*/ +CMTPPlaybackEvent::~CMTPPlaybackEvent() + { + __FLOG(_L8("~CMTPPlaybackEvent - Entry")); + delete iParam; + __FLOG(_L8("~CMTPPlaybackEvent - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPlaybackEvent::CMTPPlaybackEvent(TMTPPlaybackEvent aEvent, + CMTPPbEventParam* aParam): + iPbEvent(aEvent),iParam(aParam) + { + } + +/** +Second-phase constructor. +*/ +void CMTPPlaybackEvent::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("CMTPPlaybackEvent: ConstructL - Entry")); + __FLOG(_L8("CMTPPlaybackEvent: ConstructL - Exit")); + } + +void CMTPPlaybackEvent::SetParam(CMTPPbEventParam* aParam) + { + delete iParam; + iParam = aParam; + } + +TMTPPlaybackEvent CMTPPlaybackEvent::PlaybackEvent() + { + __ASSERT_DEBUG((iPbEvent > EPlaybackEventNone && iPbEvent < EPlaybackEventEnd), Panic(EMTPPBArgumentErr)); + return iPbEvent; + } + +const CMTPPbEventParam& CMTPPlaybackEvent::ParamL() + { + __ASSERT_DEBUG((iParam != NULL), Panic(EMTPPBDataNullErr)); + __ASSERT_ALWAYS((iParam != NULL), User::Leave(KErrArgument)); + + return *iParam; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/cmtpplaybackparam.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/cmtpplaybackparam.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,177 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackparam.h" +#include "mtpplaybackcontrolpanic.h" + + +/********************************************* + class TMTPPbDataSuid +**********************************************/ +TMTPPbCategory TMTPPbDataSuid::Category() const + { + return iPlayCategory; + } + +const TDesC& TMTPPbDataSuid::Suid() const + { + return iSuid; + } + +TMTPPbDataSuid::TMTPPbDataSuid(TMTPPbCategory aCategory, const TDesC& aSuid): + iPlayCategory(aCategory), + iSuid(aSuid) + { + + } + +/********************************************* + class CMTPPbParamBase +**********************************************/ + +CMTPPbParamBase::~CMTPPbParamBase() + { + delete iData; + } + +CMTPPbParamBase::CMTPPbParamBase(): + iParamType(EMTPPbTypeNone) + { + + } + +CMTPPbParamBase::CMTPPbParamBase(TMTPPbCategory /*aCategory*/, const TDesC& /*aSuid*/): + iParamType(EMTPPbSuidSet) + { + + } + +CMTPPbParamBase::CMTPPbParamBase(TInt32 /*aValue*/): + iParamType(EMTPPbInt32) + { + + } + +CMTPPbParamBase::CMTPPbParamBase(TUint32 /*aValue*/): + iParamType(EMTPPbUint32) + { + + } + +void CMTPPbParamBase::ConstructL(TMTPPbCategory aCategory, const TDesC& aSuid) + { + TMTPPbDataSuid* val = new (ELeave) TMTPPbDataSuid(aCategory, aSuid); + iData = static_cast(val); + } + +void CMTPPbParamBase::ConstructL(TInt32 aValue) + { + TInt32* val = new (ELeave) TInt32(); + *val = aValue; + iData = static_cast(val); + } + +void CMTPPbParamBase::ConstructL(TUint32 aValue) + { + TUint32* val = new (ELeave) TUint32(); + *val = aValue; + iData = static_cast(val); + } + +void CMTPPbParamBase::ConstructL(const CMTPPbParamBase& aParam) + { + TMTPPbDataType type(aParam.Type()); + __ASSERT_DEBUG((type > EMTPPbTypeNone && type < EMTPPbTypeEnd), Panic(EMTPPBArgumentErr)); + __ASSERT_ALWAYS((type > EMTPPbTypeNone && type < EMTPPbTypeEnd), User::Leave(KErrArgument)); + + switch(type) + { + case EMTPPbSuidSet: + { + ConstructL(aParam.SuidSetL().Category(), aParam.SuidSetL().Suid()); + } + break; + case EMTPPbInt32: + { + ConstructL(aParam.Int32L()); + } + break; + case EMTPPbUint32: + { + ConstructL(aParam.Uint32L()); + } + break; + default: + User::Leave(KErrArgument); + break; + } + + iParamType = type; + } + +TMTPPbDataType CMTPPbParamBase::Type() const + { + __ASSERT_DEBUG((iParamType > EMTPPbTypeNone && iParamType < EMTPPbTypeEnd), + Panic(EMTPPBDataTypeErr)); + return iParamType; + } + +void CMTPPbParamBase::SetType(TMTPPbDataType aType) + { + __ASSERT_DEBUG((iParamType == EMTPPbTypeNone), Panic(EMTPPBDataTypeErr)); + __ASSERT_DEBUG((aType > EMTPPbTypeNone && aType < EMTPPbTypeEnd), Panic(EMTPPBDataTypeErr)); + iParamType = aType; + } + +TAny* CMTPPbParamBase::GetData() const + { + __ASSERT_DEBUG((iData != NULL), Panic(EMTPPBDataNullErr)); + return iData; + } + +void CMTPPbParamBase::SetData(TAny* aData) + { + __ASSERT_DEBUG((aData != NULL), Panic(EMTPPBDataNullErr)); + iData = aData; + } + +const TMTPPbDataSuid& CMTPPbParamBase::SuidSetL() const + { + __ASSERT_DEBUG((iParamType == EMTPPbSuidSet), Panic(EMTPPBDataTypeErr)); + __ASSERT_ALWAYS((iParamType == EMTPPbSuidSet), User::Leave(KErrArgument)); + + return *static_cast(iData); + } + +TInt32 CMTPPbParamBase::Int32L() const + { + __ASSERT_DEBUG((iParamType == EMTPPbInt32), Panic(EMTPPBDataTypeErr)); + __ASSERT_ALWAYS((iParamType == EMTPPbInt32), User::Leave(KErrArgument)); + + return *static_cast(iData); + } + +TUint32 CMTPPbParamBase::Uint32L() const + { + __ASSERT_DEBUG((iParamType == EMTPPbUint32), Panic(EMTPPBDataTypeErr)); + __ASSERT_ALWAYS((iParamType == EMTPPbUint32), User::Leave(KErrArgument)); + + return *static_cast(iData); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/mmtpplaybackinterface.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackinterface/src/mmtpplaybackinterface.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,30 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include"cmtpplaybackcontrolimpl.h" + +// --------------------------------------------------------------------------- +// Create the playback control object +// --------------------------------------------------------------------------- + +MMTPPlaybackControl* MMTPPlaybackControl::NewL( MMTPPlaybackObserver& aObserver ) + { + return CMTPPlaybackControlImpl::NewL( aObserver ); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackcommandchecker.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackcommandchecker.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,81 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKCOMMANDCHECKER_H_ +#define CMTPPLAYBACKCOMMANDCHECKER_H_ + +#include "cmtpplaybackcommand.h" +#include "mtpdebug.h" + +class CMTPPlaybackControlImpl; + +NONSHARABLE_CLASS( CMTPPlaybackCommandChecker ) : public CBase + { +public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMTPPlaybackCommandChecker* NewL( CMTPPlaybackControlImpl& aControlImpl ); + /** + * Destructor. + */ + virtual ~CMTPPlaybackCommandChecker(); + +public: + + /** + * Check playback command context + */ + void CheckPlaybackCommandContextL( TMTPPlaybackCommand aMTPPBCommand ); + + /** + *Check and update playback param + */ + void CheckAndUpdatePlaybackParamL( CMTPPlaybackCommand& aMTPPPBSourceCmd, CMTPPbCmdParam** aMTPPPBTargetParam ); + +private: + + /** + * C++ default constructor. + */ + CMTPPlaybackCommandChecker( CMTPPlaybackControlImpl& aControlImpl ); + +private: + + /** + * Return instance of CMTPPlaybackControlImpl. + */ + CMTPPlaybackControlImpl& MTPPlaybackControlImpl(); + +private: + + /** + The handle of the owner + */ + CMTPPlaybackControlImpl& iMTPPlaybackControl; + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER; + }; + +#endif /* CMTPPLAYBACKCOMMANDCHECKER_H_ */ diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackcontrolimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackcontrolimpl.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,315 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKCONTROLIMPL_H +#define CMTPPLAYBACKCONTROLIMPL_H + +#include + +#include "mmtpplaybackinterface.h" +#include "mtpplaybackcontrolconst.h" +#include "mtpdebug.h" + +class MMPXPlaybackUtility; +class CMPXCollectionPath; +class CMPXCollectionPlaylist; + +class CMTPPlaybackCommandChecker; +class CMTPPlaybackPlaylistHelper; +class CMTPPlaybackResumeHelper; +class CMTPPlaybackCommand; +class CMTPPbCmdParam; + + +NONSHARABLE_CLASS( CMTPPlaybackControlImpl ) : public CActive, + public MMPXPlaybackObserver, + public MMPXPlaybackCallback, + public MMTPPlaybackControl + { +private: + + friend class CMTPPlaybackCommandChecker; + friend class CMTPPlaybackPlaylistHelper; + friend class CMTPPlaybackResumeHelper; + +public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMTPPlaybackControlImpl* NewL( MMTPPlaybackObserver& aObserver ); + /** + * Frees resource, and destroy the object itself. + */ + void Close(); + /** + * Destructor. + */ + virtual ~CMTPPlaybackControlImpl(); + +public: + /** + * From MMTPPlaybackControl + * @param aCmd, refer to CMTPPlaybackCommand + * @param aCallback, refer to MMTPPlaybackCallback + */ + void CommandL( CMTPPlaybackCommand& aCmd, + MMTPPlaybackCallback* aCallback = NULL); + +private: + + /** + * From MMPXPlaybackObserver + * See mpxplaybackobserver.h for detailed description. + */ + void HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError ); + + /** + * From MMPXPlaybackCallback + * See mpxplaybackobserver.h for detailed description. + */ + void HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError ); + + /** + * From MMPXPlaybackCallback + * See mpxplaybackobserver.h for detailed description. + */ + void HandleSubPlayerNamesL( TUid aPlayer, const MDesCArray* aSubPlayers, TBool aComplete, TInt aError ); + + /** + * From MMPXPlaybackCallback + * See mpxplaybackobserver.h for detailed description. + */ + void HandleMediaL( const CMPXMedia& aMedia, TInt aError ); + +private:// From CActive + + /** + * DoCancel. + */ + void DoCancel(); + + /** + * RunL. + */ + void RunL(); + +private: + + /** + * C++ default constructor. + */ + CMTPPlaybackControlImpl( MMTPPlaybackObserver& aObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + +private: + + /** + * Get Playlist from collection complete.. + */ + void GetPlaylistFromCollectionCompleteL( const CMPXCollectionPlaylist& aPlaylist ); + + /** + * Deactive other player so that we can play + */ + void DeActiveOtherPlayerL(); + + /** + * Check playback command and cache + */ + void CheckPlaybackCmdAndCacheL( CMTPPlaybackCommand& aCmd ); + + /** + * UpdateCommandArrary + */ + void UpdateCommandArray(); + + /** + * Require current media + */ + void RequestMediaL(); + + /** + * Handle commandL + */ + void DoCommandL(); + + /** + * Handle playback message + * + * @param aMessage playback message + */ + void DoHandlePlaybackMessageL( const CMPXMessage& aMessage ); + + /** + * Handle playback property + * + * @param aProperty the property + * @param aValue the value of the property + */ + void DoHandlePropertyL( TInt aProperty, TInt aValue ); + + /** + * Handle playback state changed. + * + * @param aState New Playback state + */ + void DoHandleStateChangedL( TMPXPlaybackState aState ); + + /** + * Handle request media. + */ + void DoHandleMediaL( const CMPXMedia& aMedia ); + + /** + * Handle Media changed. + * + */ + void DoHandleMediaChangedL(); + + /** + * Handle Initialize Complete. + * + */ + void DoHandleInitializeCompleteL(); + + /** + * Handle error. + * + */ + void DoHandleError( TInt aErr ); + + /** + * Compare two path + * @param aPathBase the base path + * @param aPathNew the new path + * @param aLevel compare level + */ + TBool IfEqual( const CMPXCollectionPath& aPathBase, const CMPXCollectionPath& aPathNew, TUint aLevel ); + + /** + * Map states from TMPXPlaybackState to TMPlayerState + * + * @param aState State in TMPXPlaybackState format + * @return State in TMPlayerState format + */ + TMTPPlaybackState MapState( TMPXPlaybackState aState ); + + /** + * Map error from TInt to the error defined in interface + */ + TInt MapError( TInt error ); + + /** + *Complete a sync request + */ + void CompleteSelf( TInt aCompletionCode ); + + /* + * Initiate MPX Playback Command + */ + void InitiateMPXPlaybackCommandL( TMPXPlaybackCommand aCommand, TBool aIsMTPPlaybackUtility ); + + /* + * SendMPXPlaybackCommandL + */ + void SendMPXPlaybackCommandL( TMPXPlaybackCommand aCommand, TBool aIsMTPPlaybackUtility ); + + + /* + * SendPlaybackCommandCompleteL + */ + void SendPlaybackCommandCompleteL(); + + /* + * SendPlaybackEventL + */ + void SendPlaybackEventL( TMTPPlaybackEvent aEvt ); + + /** + * Reset playback command + */ + void ResetPlaybackCommand(); + +private: + + /** + * return current state. + */ + TMPXPlaybackState CurrentState() const; + + /** + * return previous state. + */ + TMPXPlaybackState PreviousState() const; + + /** + * return song count. + */ + TInt32 SongCount() const; + + /** + * return song index. + */ + TInt32 SongIndex() const; + + /** + * Cache mtp playback command. + */ + void SetMTPPBCmd( TMTPPlaybackCommand aMTPPBCmd ); + + /** + * return mtp playback command. + */ + TMTPPlaybackCommand MTPPBCmdHandling() const; + +private: + + MMTPPlaybackObserver* iObserver;// Not owned + MMTPPlaybackCallback* iCallback;// Not owned + + MMPXPlaybackUtility* iPlaybackUtility;// Owned + MMPXPlaybackUtility* iNowActivePlaybackUtility;// Owned + + CMTPPlaybackCommandChecker* iPlaybackCommandChecker;//Owned + CMTPPlaybackPlaylistHelper* iPlaybackPlaylistHelper;//Owned + CMTPPlaybackResumeHelper* iPlaybackResumeHelper; + + CMPXCollectionPlaylist* iPlayList; //Owned + RResumeCmdArray iPrepareCmdArray;//Owned + RResumeCmdArray iResumeCmdArray;//Owned + CMTPPbCmdParam* iCmdParam; + + TMTPPlaybackCommand iMTPPBCmd; + TMPXPlaybackState iPreState; + TMPXPlaybackState iState; + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER; + }; + +#endif // CMTPPLAYBACKCONTROLIMPL_H +// End of File diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackplaylisthelper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackplaylisthelper.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,228 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKPLAYLISTHELPER_H_ +#define CMTPPLAYBACKPLAYLISTHELPER_H_ + +#include +#include + +#include "mtpdebug.h" +#include "cmtpplaybackparam.h" + +class MMPXCollectionUiHelper; +class MMPXCollectionHelper; +class MMPXCollectionUtility; + +class TMTPPbDataSuid; +class CMTPPlaybackControlImpl; + +NONSHARABLE_CLASS( CMTPPlaybackPlaylistHelper ) : public CBase, + public MMPXCollectionObserver + { +public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMTPPlaybackPlaylistHelper* NewL( CMTPPlaybackControlImpl& aControlImpl ); + + /** + * Destructor. + */ + virtual ~CMTPPlaybackPlaylistHelper(); + +public: + + /** + * Get playlist from collection server + * @param aPlayObject, refer to TMTPPbDataSuid + */ + void GetPlayListFromCollectionL( const TMTPPbDataSuid& aPlayObject ); + + /** + * Get playlist from collection server + * @param aIndex, song index + */ + void GetPlayListFromCollectionL( TInt aIndex ); + + /** + * Get suid from collection server + * @param aPlaylist, current collection playlist + */ + TMTPPbDataSuid GetMTPPBSuidFromCollectionL( + const CMPXCollectionPlaylist& aPlaylist ); + + /** + * Get category + */ + TMTPPbCategory MTPPbCategory() const; + + /** + * Get suid + */ + TFileName MTPPbSuid() const; + +private: + + //from base class MMPXCollectionObserver + /** + * Handle collection message + * + * @param aMsg collection message, ownership not transferred. + * Please check aMsg is not NULL before using it. + * If aErr is not KErrNone, plugin might still call back with more + * info in the aMsg. + * @param aErr system error code. + */ + void HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr ); + + /** + * Handles the collection entries being opened. Typically called + * when client has Open()'d a folder. + * + * @param aEntries collection entries opened + * @param aIndex focused entry + * @param aComplete ETrue no more entries. EFalse more entries + * expected + * @param aError error code + */ + void HandleOpenL( const CMPXMedia& aEntries, TInt aIndex, TBool aComplete, + TInt aError ); + + /** + * Handles the item being opened. Typically called + * when client has Open()'d an item. Client typically responds by + * 'playing' the item via the playlist. + * + * @param aPlaylist collection playlist + * @param aError error code + */ + void HandleOpenL( const CMPXCollectionPlaylist& aPlaylist, TInt aError ); + + /** + * From MMPXCollectionMediaObserver + * It handles MediaL event. + * + * @param aMedia object containing collection's informations + * @param aError error code + */ + void HandleCollectionMediaL( const CMPXMedia& aMedia, TInt aError ); + +private: + + /** + * C++ default constructor. + */ + CMTPPlaybackPlaylistHelper( CMTPPlaybackControlImpl& aControlImpl ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + +private: + + /** + * Handle collection message + */ + void DoHandleCollectionMessageL( const CMPXMessage& aMsg ); + + /** + * Handle OpenL + */ + void DoHandleOpenL( const CMPXMedia& aEntries ); + + /** + * Open the root path of playlist + */ + void OpenMusicPlayListPathL(); + + /** + * Open the root path of album + */ + void OpenMusicAblumPathL(); + + /** + * Reset play source + */ + void ResetPlaySource(); + + /** + *Update path index according to iPlayObject + */ + void UpdatePlaylistPathIndexL( const CMPXMedia& aEntries ); + + /** + *Got the collectionHelperL + */ + MMPXCollectionHelper* CollectionHelperL(); + + /** + * Map uri to ItemId + */ + const TMPXItemId UriToItemIdL(); + + /** + * Map uri to ItemId + */ + const TFileName ItemIdToUriL( const TMPXItemId& aId ); + + /** + * Find Album Songs + */ + CMPXMedia* FindAlbumSongsL( const TMPXItemId& aAlbumId ); + + /* + * UpdatePathAndOpenL + */ + void UpdateAlbumPathAndOpenL(); + + /* + * UpdatePathAndOpenL + */ + void UpdatePathAndOpenL(); + + /** + * Return instance of CMTPPlaybackControlImpl. + * + */ + CMTPPlaybackControlImpl& MTPPlaybackControlImpl(); + +private: + + MMPXCollectionUiHelper* iCollectionUiHelper;//Owned + MMPXCollectionHelper* iCollectionHelper;//Owned + MMPXCollectionUtility* iCollectionUtil;//Owned + HBufC* iPlayObject; //Owned + + CMTPPlaybackControlImpl& iMTPPlaybackControl;// Not owned + + TMTPPbCategory iPlayCategory; + TInt iSongIndex; + TInt iPathIndex; + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER; + }; + +#endif /* CMTPPLAYBACKPLAYLISTHELPER_H_ */ diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackresumehelper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/cmtpplaybackresumehelper.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,125 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#ifndef CMTPPLAYBACKRESUMEHELPER_H_ +#define CMTPPLAYBACKRESUMEHELPER_H_ + +#include "mtpplaybackcontrolconst.h" +#include "mmtpplaybackinterface.h" +#include "mtpdebug.h" + +class CMTPPlaybackControlImpl; + +NONSHARABLE_CLASS( CMTPPlaybackResumeHelper ) : public CBase + { +public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMTPPlaybackResumeHelper* NewL( CMTPPlaybackControlImpl& aControlImpl ); + + /** + * Destructor. + */ + virtual ~CMTPPlaybackResumeHelper(); + +public: + + /** + Map the CMTPPlaybackCommand to MPXCommand, + */ + void UpdatePrepareCmdArray( TMTPPlaybackCommand aMTPPPBCmd, RResumeCmdArray& aMTPPBMPXCmd ); + + /** + Map the CMTPPlaybackCommand to MPXCommand, + */ + void UpdateResumeCmdArray( TMTPPlaybackCommand aMTPPPBCmd, RResumeCmdArray& aMTPPBMPXCmd ); + +private: + + /** + * C++ default constructor. + */ + CMTPPlaybackResumeHelper( CMTPPlaybackControlImpl& aControlImpl ); + +private: + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdInitObject( RResumeCmdArray& aMTPPBMPXCmdArray ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdInitIndex( RResumeCmdArray& aMTPPBMPXCmdArray ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdPlay( RResumeCmdArray& aMTPPBMPXCmdArray ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdPause( RResumeCmdArray& aMTPPBMPXCmdArray ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdSeekForward( RResumeCmdArray& aMTPPBMPXCmd ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdSeekBackward( RResumeCmdArray& aMTPPBMPXCmd ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdSkip( RResumeCmdArray& aMTPPBMPXCmd ); + + /** + * Map PlaybackCmd to PlaybackMPXCmd. + */ + void HandlePlaybackCmdSetPosition( RResumeCmdArray& aMTPPBMPXCmd ); + + /** + * Return instance of CMTPPlaybackControlImpl. + */ + CMTPPlaybackControlImpl& MTPPlaybackControlImpl(); + +private: + + /** + The handle of the owner + */ + CMTPPlaybackControlImpl& iMTPPlaybackControl; + + TBool iIfParepareArray; + + /** + FLOGGER debug trace member variable. + */ + __FLOG_DECLARATION_MEMBER; + }; + +#endif /* CMTPPLAYBACKRESUMEHELPER_H_ */ diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/mtpplaybackcontrolconst.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/inc/mtpplaybackcontrolconst.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,65 @@ +// Copyright (c) 2010 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: +// + + +/** + @file + @internalComponent +*/ + +#ifndef MTPPLAYBACKCONTROLCONST_H_ +#define MTPPLAYBACKCONTROLCONST_H_ + +#include + +/** +Used by test db existed +*/ +const TInt KMTPPlaybackInvalidSongID = 0x1FFFFFFF; +const TInt KStorageRootMaxLength = 10; + +/** +The volume step of mtp playback +*/ +const TUint32 KMTPPlaybackVolumeStep = 1; + +/** +The playlist or album level of collection path +*/ +const TInt KMTPPlaybackPlaylistAblumLevel = 2; + +/** +The album id of collection path +*/ +const TInt KMPXCollectionArtistAlbum = 3; + +/** +iMPXCommand is the mpx command +iMPXExpectState is the expected state +*/ +struct TMPXComandElement + { + TMPXPlaybackCommand iMPXCommand; + TMPXPlaybackState iMPXExpectState; + }; + +typedef RArray RResumeCmdArray; + +/** +The uid of playback control dp +*/ +const TUid KMTPPlaybackControlDpUid = { 0x2002EA9A }; + +#endif /* MTPPLAYBACKCONTROLCONST_H_ */ diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackcommandchecker.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackcommandchecker.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,209 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackcommandchecker.h" +#include "cmtpplaybackcontrolimpl.h" + +// Constants +__FLOG_STMT(_LIT8(KComponent,"PlaybackCommandChecker");) + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMTPPlaybackCommandChecker::NewL +// --------------------------------------------------------------------------- +// +CMTPPlaybackCommandChecker* CMTPPlaybackCommandChecker::NewL( + CMTPPlaybackControlImpl& aControlImpl ) + { + CMTPPlaybackCommandChecker* self = new ( ELeave ) + CMTPPlaybackCommandChecker( aControlImpl ); + return self; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackCommandChecker::~CMTPPlaybackCommandChecker +// --------------------------------------------------------------------------- +// +CMTPPlaybackCommandChecker::~CMTPPlaybackCommandChecker() + { + __FLOG(_L8("+CMTPPlaybackCommandChecker::~CMTPPlaybackCommandChecker")); + __FLOG(_L8("-CMTPPlaybackCommandChecker::~CMTPPlaybackCommandChecker")); + __FLOG_CLOSE; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackCommandChecker::CheckPlaybackCommandContextL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackCommandChecker::CheckPlaybackCommandContextL( TMTPPlaybackCommand aMTPPBCommand ) + { + __FLOG(_L8("+CMTPPlaybackCommandChecker::CheckPlaybackCommandContextL")); + + MTPPlaybackControlImpl().SetMTPPBCmd( aMTPPBCommand ); + + switch ( aMTPPBCommand ) + { + case EPlaybackCmdInitObject: + case EPlaybackCmdGetVolumeSet: + case EPlaybackCmdGetVolume: + case EPlaybackCmdGetState: + case EPlaybackCmdSetVolume: + { + __FLOG(_L8("no context check for init object command")); + } + break; + case EPlaybackCmdInitIndex: + case EPlaybackCmdSkip: + case EPlaybackCmdGetIndex: + { + if ( MTPPlaybackControlImpl().SongCount() < 0 ) + { + User::Leave( KPlaybackErrContextInvalid ); + } + } + break; + case EPlaybackCmdPlay: + case EPlaybackCmdPause: + case EPlaybackCmdStop: + case EPlaybackCmdSeekForward: + case EPlaybackCmdSeekBackward: + case EPlaybackCmdGetObject: + case EPlaybackCmdSetPosition: + case EPlaybackCmdGetPosition: + { + switch ( MTPPlaybackControlImpl().CurrentState()) + { + case EPbStateNotInitialised: + { + User::Leave( KPlaybackErrContextInvalid ); + } + default: + break; + } + } + break; + default: + { + __FLOG(_L8("Not support command!")); + User::Leave( KPlaybackErrParamInvalid ); + } + break; + } + + __FLOG(_L8("-CMTPPlaybackCommandChecker::CheckPlaybackCommandContextL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackCommandChecker::CheckAndUpdatePlaybackParamL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackCommandChecker::CheckAndUpdatePlaybackParamL( CMTPPlaybackCommand& aMTPPPBSourceCmd, + CMTPPbCmdParam** aMTPPPBTargetParam ) + { + __FLOG(_L8("+CMTPPlaybackCommandChecker::CheckAndUpdatePlaybackParamL")); + + delete *aMTPPPBTargetParam; + *aMTPPPBTargetParam = NULL; + + switch ( aMTPPPBSourceCmd.PlaybackCommand()) + { + case EPlaybackCmdInitObject: + { + const TMTPPbCategory category = aMTPPPBSourceCmd.ParamL().SuidSetL().Category(); + TFileName suid = aMTPPPBSourceCmd.ParamL().SuidSetL().Suid(); + *aMTPPPBTargetParam = CMTPPbCmdParam::NewL( category, suid ); + } + break; + case EPlaybackCmdInitIndex: + { + TUint32 songIndex = aMTPPPBSourceCmd.ParamL().Uint32L(); + if ( songIndex > ( MTPPlaybackControlImpl().SongCount()-1 )) + { + User::Leave( KPlaybackErrParamInvalid ); + } + *aMTPPPBTargetParam = CMTPPbCmdParam::NewL( songIndex ); + } + break; + case EPlaybackCmdSkip: + { + TInt32 songIndex = MTPPlaybackControlImpl().SongIndex() + aMTPPPBSourceCmd.ParamL().Int32L(); + TUint32 songCount = MTPPlaybackControlImpl().SongCount(); + + if ( songIndex < 0 ) + { + songIndex = ( - songIndex ) % songCount; + songIndex = ( songCount - songIndex ) % songCount; + } + else + { + songIndex = songIndex % songCount; + } + + *aMTPPPBTargetParam = CMTPPbCmdParam::NewL( songIndex); + } + break; + case EPlaybackCmdSetVolume: + { + TUint32 volume = aMTPPPBSourceCmd.ParamL().Uint32L(); + if( volume > KPbPlaybackVolumeLevelMax ) + { + User::Leave( KPlaybackErrParamInvalid ); + } + *aMTPPPBTargetParam = CMTPPbCmdParam::NewL( volume ); + } + break; + case EPlaybackCmdSetPosition: + { + TUint32 position= aMTPPPBSourceCmd.ParamL().Uint32L(); + *aMTPPPBTargetParam = CMTPPbCmdParam::NewL( position ); + } + break; + default: + { + __FLOG(_L8("No param, just cache command")); + } + break; + } + + __FLOG(_L8("-CMTPPlaybackCommandChecker::CheckAndUpdatePlaybackParamL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackCommandChecker::CMTPPlaybackCommandChecker +// --------------------------------------------------------------------------- +// +CMTPPlaybackCommandChecker::CMTPPlaybackCommandChecker( + CMTPPlaybackControlImpl& aControlImpl ) + : iMTPPlaybackControl( aControlImpl ) + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackCommandChecker::MTPPlaybackControlImpl +// --------------------------------------------------------------------------- +// +CMTPPlaybackControlImpl& CMTPPlaybackCommandChecker::MTPPlaybackControlImpl() + { + return iMTPPlaybackControl; + } + + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackcontrolimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackcontrolimpl.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1097 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include +#include +#include + +#include +#include + +#include "cmtpplaybackcontrolimpl.h" +#include "cmtpplaybackplaylisthelper.h" +#include "cmtpplaybackcommandchecker.h" +#include "cmtpplaybackresumehelper.h" +#include "mtpplaybackcontrolpanic.h" +#include "cmtpplaybackcommand.h" +#include "cmtpplaybackevent.h" + +// Constants +__FLOG_STMT(_LIT8(KComponent,"PlaybackControlImpl");) + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::NewL +// --------------------------------------------------------------------------- +// +CMTPPlaybackControlImpl* CMTPPlaybackControlImpl::NewL( + MMTPPlaybackObserver& aObserver ) + { + CMTPPlaybackControlImpl* self = new ( ELeave ) + CMTPPlaybackControlImpl( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::Close() +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::Close() + { + delete this; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::~CMTPPlaybackControlImpl +// --------------------------------------------------------------------------- +// +CMTPPlaybackControlImpl::~CMTPPlaybackControlImpl() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::~CMTPPlaybackControlImpl")); + + if ( iPlaybackUtility ) + { + TRAP_IGNORE( SendMPXPlaybackCommandL( EPbCmdClose, ETrue ) ); + TRAP_IGNORE( iPlaybackUtility->RemoveObserverL( *this ) ); + iPlaybackUtility->Close(); + } + + if ( iNowActivePlaybackUtility ) + { + TRAP_IGNORE( SendMPXPlaybackCommandL( EPbCmdClose, EFalse ) ); + iNowActivePlaybackUtility->Close(); + } + + delete iPlaybackCommandChecker; + delete iPlaybackPlaylistHelper; + delete iPlaybackResumeHelper; + delete iPlayList; + iPrepareCmdArray.Reset(); + iPrepareCmdArray.Close(); + iResumeCmdArray.Reset(); + iResumeCmdArray.Close(); + delete iCmdParam; + + __FLOG(_L8("-CMTPPlaybackControlImpl::~CMTPPlaybackControlImpl")); + __FLOG_CLOSE; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::CommandL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::CommandL( CMTPPlaybackCommand& aCmd, MMTPPlaybackCallback* aCallback ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::CommandL")); + __FLOG_1(_L8("The command code is 0x%X"), aCmd.PlaybackCommand() ); + + iCallback = aCallback; + + TRAPD( err, CheckPlaybackCmdAndCacheL( aCmd )); + + if ( KErrNone == err ) + { + UpdateCommandArray(); + DoCommandL(); + } + else + { + CompleteSelf( err ); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::CommandL")); + } + +// --------------------------------------------------------------------------- +// From MMPXPlaybackObserver +// Handle playback message. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::HandlePlaybackMessage( CMPXMessage* aMessage, + TInt aError ) + { + __FLOG_1(_L8("+CMTPPlaybackControlImpl::HandlePlaybackMessage( %d ) "), aError ); + + if (( KErrNone == aError ) && aMessage ) + { + TRAP( aError, DoHandlePlaybackMessageL( *aMessage ) ); + } + + if ( KErrNone != aError ) + { + DoHandleError( MapError( aError )); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::HandlePlaybackMessage")); + } + +// --------------------------------------------------------------------------- +// From MMPXPlaybackCallback +// Handle playback property. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::HandlePropertyL( TMPXPlaybackProperty aProperty, + TInt aValue, TInt aError ) + { + __FLOG_VA((_L8("+CMTPPlaybackControlImpl::HandlePropertyL( aProperty = 0x%X, aValue = 0x%X, aError = %d ) "), aProperty, aValue, aError )); + + if ( KErrNone == aError ) + { + TRAP( aError, DoHandlePropertyL( aProperty, aValue )); + } + + if ( KErrNone != aError ) + { + DoHandleError( MapError( aError ) ); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::HandlePropertyL")); + } + +// --------------------------------------------------------------------------- +// From MMPXPlaybackCallback +// Method is called continously until aComplete=ETrue, signifying that +// it is done and there will be no more callbacks +// Only new items are passed each time +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::HandleSubPlayerNamesL( + TUid /* aPlayer */, + const MDesCArray* /* aSubPlayers */, + TBool /* aComplete */, + TInt /* aError */ ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::HandleSubPlayerNamesL")); + __FLOG(_L8("-CMTPPlaybackControlImpl::HandleSubPlayerNamesL")); + } + +// --------------------------------------------------------------------------- +// From MMPXPlaybackCallback +// Handle media +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::HandleMediaL( const CMPXMedia& aMedia, + TInt aError ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::HandleMediaL")); + + if (( KErrNone == aError ) && ( aMedia.IsSupported( KMPXMediaGeneralUri ))) + { + TRAP( aError, DoHandleMediaL( aMedia )); + } + + if ( KErrNone != aError ) + { + DoHandleError( MapError( aError )); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::HandleMediaL")); + } + +// --------------------------------------------------------------------------- +// From CActive +// CMTPPlaybackControlImpl::DoCancel() +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoCancel() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DoCancel")); + __FLOG(_L8("-CMTPPlaybackControlImpl::DoCancel")); + } + +// --------------------------------------------------------------------------- +// From CActive +// CMTPPlaybackControlImpl::RunL() +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::RunL() + { + __FLOG(_L8("+CMTPBTConnection::RunL")); + + if ( KPlaybackErrNone == iStatus.Int() ) + { + TRAPD( error, SendPlaybackCommandCompleteL()); + if ( error != KErrNone ) + { + DoHandleError( MapError( error ) ); + } + } + else + { + DoHandleError( iStatus.Int()); + } + + __FLOG(_L8("-CMTPBTConnection::RunL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::CMTPPlaybackControlImpl +// --------------------------------------------------------------------------- +// +CMTPPlaybackControlImpl::CMTPPlaybackControlImpl( + MMTPPlaybackObserver& aObserver ) + : CActive( EPriorityStandard ), + iObserver( &aObserver ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::ConstructL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("+CMTPPlaybackControlImpl::ConstructL")); + + iPlaybackUtility = MMPXPlaybackUtility::NewL( KMTPPlaybackControlDpUid, this ); + iNowActivePlaybackUtility = MMPXPlaybackUtility::NewL( KPbModeActivePlayer ); + + iPlaybackCommandChecker = CMTPPlaybackCommandChecker::NewL( *this ); + iPlaybackPlaylistHelper = CMTPPlaybackPlaylistHelper::NewL( *this ); + iPlaybackResumeHelper = CMTPPlaybackResumeHelper::NewL( *this ); + + __FLOG(_L8("-CMTPPlaybackControlImpl::ConstructL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::GetPlaylistFromCollectionCompleteL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::GetPlaylistFromCollectionCompleteL( const CMPXCollectionPlaylist& aPlaylist ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::GetPlaylistFromCollectionCompleteL ")); + + CMPXCollectionPlaylist* tmp = + CMPXCollectionPlaylist::NewL( aPlaylist ); + CleanupStack::PushL( tmp ); + tmp->SetEmbeddedPlaylist( ETrue ); + tmp->SetRepeatEnabled( EFalse ); + tmp->SetShuffleEnabledL( EFalse ); + iPlaybackUtility->InitL( *tmp, ETrue ); + CleanupStack::PopAndDestroy( tmp ); + + __FLOG(_L8("-CMTPPlaybackControlImpl::HandlePlaybackGetPlaylistCompleteL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackControlImpl::DeActiveOtherPlayerL +// ---------------------------------------------------- +// +void CMTPPlaybackControlImpl::DeActiveOtherPlayerL() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DeActiveOtherPlayerL()")); + + if ( iNowActivePlaybackUtility->StateL() != iPlaybackUtility->StateL()) + { + SendMPXPlaybackCommandL( EPbCmdPause, EFalse ); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DeActiveOtherPlayerL()")); + } + +// ---------------------------------------------------- +// CMTPPlaybackControlImpl::CheckPlaybackCmdAndCacheL +// ---------------------------------------------------- +// +void CMTPPlaybackControlImpl::CheckPlaybackCmdAndCacheL( CMTPPlaybackCommand& aCmd ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::CheckPlaybackCmdAndCacheL")); + + iPlaybackCommandChecker->CheckPlaybackCommandContextL( aCmd.PlaybackCommand()); + iPlaybackCommandChecker->CheckAndUpdatePlaybackParamL( aCmd, &iCmdParam ); + + __FLOG(_L8("-CMTPPlaybackControlImpl::CheckPlaybackCmdAndCacheL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackControlImpl::UpdateCommandArrayL +// ---------------------------------------------------- +// +void CMTPPlaybackControlImpl::UpdateCommandArray() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::UpdateCommandArrayL")); + + iPlaybackResumeHelper->UpdatePrepareCmdArray( iMTPPBCmd, iPrepareCmdArray ); + iPlaybackResumeHelper->UpdateResumeCmdArray( iMTPPBCmd, iResumeCmdArray ); + + __FLOG(_L8("-CMTPPlaybackControlImpl::UpdateCommandArrayL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackControlImpl::RequestMediaL +// ---------------------------------------------------- +// +void CMTPPlaybackControlImpl::RequestMediaL() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::RequestMediaL")); + + if ( iPlayList ) + { + delete iCmdParam; + iCmdParam = NULL; + iCmdParam = CMTPPbCmdParam::NewL( iPlaybackPlaylistHelper->MTPPbCategory(), + iPlaybackPlaylistHelper->MTPPbSuid()); + CompleteSelf( KPlaybackErrNone ); + } + else if ( iPlaybackUtility->Source() ) + { + //Album or Playlist + iPlayList = iPlaybackUtility->Source()->PlaylistL(); + + if ( iPlayList ) + { + TMTPPbDataSuid suid( EMTPPbCatNone, KNullDesC ); + suid = iPlaybackPlaylistHelper->GetMTPPBSuidFromCollectionL( *iPlayList ); + delete iCmdParam; + iCmdParam = NULL; + iCmdParam = CMTPPbCmdParam::NewL( suid.Category(), suid.Suid()); + CompleteSelf( KPlaybackErrNone ); + } + else + { + //Single Song + RArray attrs; + CleanupClosePushL(attrs); + attrs.Append( KMPXMediaGeneralUri ); + iPlaybackUtility->Source()->MediaL( attrs.Array(), *this ); + CleanupStack::PopAndDestroy( &attrs ); + } + } + else + { + //Not initialized + CompleteSelf( KPlaybackErrContextInvalid ); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::RequestMediaL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackControlImpl::DoCommandL +// ---------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoCommandL() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DoCommandL")); + + if ( iPrepareCmdArray.Count() != 0 ) + { + InitiateMPXPlaybackCommandL( iPrepareCmdArray[0].iMPXCommand, ETrue ); + return; + } + + switch ( iMTPPBCmd ) + { + case EPlaybackCmdInitObject: + { + const TMTPPbCategory category = iCmdParam->SuidSetL().Category(); + if ( EMTPPbCatMusic == category ) + { + iPlaybackUtility->InitL( iCmdParam->SuidSetL().Suid() ); + } + else + { + iPlaybackPlaylistHelper->GetPlayListFromCollectionL( iCmdParam->SuidSetL() ); + } + } + break; + case EPlaybackCmdInitIndex: + { + iPlaybackPlaylistHelper->GetPlayListFromCollectionL( iCmdParam->Uint32L() ); + } + break; + case EPlaybackCmdStop: + { + delete iPlayList; + iPlayList = NULL; + SendMPXPlaybackCommandL( EPbCmdClose, ETrue ); + CompleteSelf( KPlaybackErrNone ); + } + break; + case EPlaybackCmdSkip: + { + iPlaybackPlaylistHelper->GetPlayListFromCollectionL( iCmdParam->Int32L() ); + } + break; + case EPlaybackCmdSetVolume: + { + iPlaybackUtility->SetL( EPbPropertyVolume, iCmdParam->Uint32L() ); + } + break; + case EPlaybackCmdSetPosition: + { + iPlaybackUtility->PropertyL(*this, EPbPropertyDuration); + } + break; + case EPlaybackCmdGetPosition: + { + iPlaybackUtility->PropertyL(*this, EPbPropertyPosition); + } + break; + case EPlaybackCmdGetVolumeSet: + case EPlaybackCmdGetVolume: + { + iPlaybackUtility->PropertyL(*this, EPbPropertyVolume); + } + break; + case EPlaybackCmdGetState: + { + delete iCmdParam; + iCmdParam = NULL; + TMTPPlaybackState state = MapState( CurrentState()); + iCmdParam = CMTPPbCmdParam::NewL( static_cast( state )); + CompleteSelf( KPlaybackErrNone ); + } + break; + case EPlaybackCmdGetObject: + { + RequestMediaL(); + } + break; + case EPlaybackCmdGetIndex: + { + delete iCmdParam; + iCmdParam = NULL; + iCmdParam = CMTPPbCmdParam::NewL( static_cast( SongIndex())); + CompleteSelf( KPlaybackErrNone ); + } + break; + default: + { + if ( iResumeCmdArray.Count() != 0 ) + { + InitiateMPXPlaybackCommandL( iResumeCmdArray[0].iMPXCommand, ETrue ); + } + else + { + CompleteSelf( KPlaybackErrNone ); + } + } + break; + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoCommandL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackControlImpl::DoHandlePlaybackMessageL +// ---------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandlePlaybackMessageL( const CMPXMessage& aMessage ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DoHandlePlaybackMessageL")); + + TMPXMessageId id( + aMessage.ValueTObjectL( KMPXMessageGeneralId ) ); + + if ( KMPXMessageGeneral == id ) + { + TInt event( aMessage.ValueTObjectL( KMPXMessageGeneralEvent ) ); + + switch ( event ) + { + case TMPXPlaybackMessage::EPropertyChanged: + { + DoHandlePropertyL( + aMessage.ValueTObjectL( KMPXMessageGeneralType ), + aMessage.ValueTObjectL( KMPXMessageGeneralData )); + } + break; + case TMPXPlaybackMessage::EStateChanged: + { + TMPXPlaybackState state( + aMessage.ValueTObjectL( + KMPXMessageGeneralType )); + DoHandleStateChangedL( state ); + } + break; + case TMPXPlaybackMessage::EInitializeComplete: + { + DoHandleInitializeCompleteL(); + } + break; + case TMPXPlaybackMessage::EMediaChanged: + { + DoHandleMediaChangedL(); + } + break; + default: + __FLOG_VA((_L8("DoHandlePlaybackMessageL( TMPXPlaybackMessage event = 0x%X ) "), event )); + break; + } + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoHandlePlaybackMessageL")); + } + + +// --------------------------------------------------------------------------- +// Handle playback property. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandlePropertyL( TInt aProperty, TInt aValue ) + { + __FLOG_VA((_L8("+CMTPPlaybackControlImpl::DoHandlePropertyL( aProperty = 0x%X, aValue = 0x%X ) "), aProperty, aValue )); + + switch ( aProperty ) + { + case EPbPropertyPosition: + { + if ( EPlaybackCmdGetPosition == MTPPBCmdHandling()) + { + delete iCmdParam; + iCmdParam = NULL; + iCmdParam = CMTPPbCmdParam::NewL(static_cast(aValue)); + SendPlaybackCommandCompleteL(); + } + else if ( EPlaybackCmdSetPosition == MTPPBCmdHandling() ) + { + if ( aValue == iCmdParam->Uint32L() ) + { + SendPlaybackCommandCompleteL(); + } + } + } + break; + case EPbPropertyMute: + { + SendPlaybackEventL( EPlaybackEventVolumeUpdate ); + } + break; + case EPbPropertyVolume: + { + switch ( MTPPBCmdHandling() ) + { + case EPlaybackCmdSetVolume: + { + SendPlaybackCommandCompleteL(); + } + break; + case EPlaybackCmdGetVolumeSet: + { + delete iCmdParam; + iCmdParam = NULL; + TMTPPbDataVolume volumeSet( KPbPlaybackVolumeLevelMax, + KPbPlaybackVolumeLevelMin, + KMPXPlaybackDefaultVolume, + aValue, + KMTPPlaybackVolumeStep ); + iCmdParam = CMTPPbCmdParam::NewL( volumeSet ); + SendPlaybackCommandCompleteL(); + } + break; + case EPlaybackCmdGetVolume: + { + delete iCmdParam; + iCmdParam = NULL; + iCmdParam = CMTPPbCmdParam::NewL(static_cast( aValue )); + SendPlaybackCommandCompleteL(); + } + break; + default: + { + SendPlaybackEventL( EPlaybackEventVolumeUpdate ); + } + break; + } + } + break; + case EPbPropertyDuration: + { + if ( EPlaybackCmdSetPosition == MTPPBCmdHandling()) + { + if ( iCmdParam->Uint32L() < aValue ) + { + iPlaybackUtility->SetL( EPbPropertyPosition, iCmdParam->Uint32L() ); + } + else + { + DoHandleError( KPlaybackErrParamInvalid ); + } + } + } + break; + default: + break; + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoHandlePropertyL")); + } + +// --------------------------------------------------------------------------- +// Handle playback state changed. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandleStateChangedL( TMPXPlaybackState aState ) + { + __FLOG_VA((_L8("+CMTPPlaybackControlImpl::DoHandleStateChangedL( aState = 0x%X ) "), aState )); + + if (( iPrepareCmdArray.Count() != 0 ) && ( iPrepareCmdArray[0].iMPXExpectState == aState )) + { + iPrepareCmdArray.Remove( 0 ); + DoCommandL(); + } + else if (( iResumeCmdArray.Count() != 0 ) && ( iResumeCmdArray[0].iMPXExpectState == aState )) + { + iResumeCmdArray.Remove( 0 ); + SendPlaybackCommandCompleteL(); + } + else if (( iState != aState ) && ( MapState( aState )!= MapState( iState ) )) + { + SendPlaybackEventL( EPlaybackEventStateUpdate ); + } + + if ( iState != aState ) + { + iPreState = iState; + iState = aState; + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoHandleStateChangedL")); + } + +// --------------------------------------------------------------------------- +// DoHandleMediaL. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandleMediaL( const CMPXMedia& aMedia ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DoHandleMediaL")); + + TFileName filePath(aMedia.ValueText(KMPXMediaGeneralUri) ); + delete iCmdParam; + iCmdParam = NULL; + iCmdParam = CMTPPbCmdParam::NewL( EMTPPbCatMusic, filePath ); + SendPlaybackCommandCompleteL(); + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoHandleMediaL")); + } + +// --------------------------------------------------------------------------- +// Handle media changed. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandleMediaChangedL() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DoHandleMediaChangedL")); + + if (( EPbStateNotInitialised == iState ) || ( EPbStateInitialising == iState )) + { + if (( MTPPBCmdHandling() != EPlaybackCmdInitObject ) + && ( MTPPBCmdHandling() != EPlaybackCmdInitIndex ) + && ( MTPPBCmdHandling() != EPlaybackCmdSkip )) + { + //should send an event + MMPXSource* source = iPlaybackUtility->Source(); + CMPXCollectionPlaylist* playlist = source->PlaylistL(); + if (( playlist != NULL ) && ( iPlayList != NULL )) + { + CleanupStack::PushL( playlist ); + //New media is a playlist or album + TInt level = playlist->Path().Levels(); + if ( IfEqual(iPlayList->Path(), playlist->Path(), level-1 ) && !IfEqual(iPlayList->Path(), playlist->Path(), level )) + { + SendPlaybackEventL( EPlaybackEventObjectIndexUpdate ); + + CleanupStack::Pop( playlist ); + delete iPlayList; + iPlayList = playlist; + } + else + { + SendPlaybackEventL( EPlaybackEventObjectUpdate ); + SendPlaybackEventL( EPlaybackEventObjectIndexUpdate ); + + CleanupStack::PopAndDestroy( playlist ); + delete iPlayList; + iPlayList = NULL; + } + } + else + { + //New media is a single song + SendPlaybackEventL( EPlaybackEventObjectUpdate ); + + delete iPlayList; + iPlayList = NULL; + } + } + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoHandleMediaChangedL")); + } + +// --------------------------------------------------------------------------- +// Handle Initialize complete. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandleInitializeCompleteL() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::DoHandleInitializeCompleteL")); + + if ( EPlaybackCmdInitObject == MTPPBCmdHandling() + || EPlaybackCmdInitIndex == MTPPBCmdHandling() + || EPlaybackCmdSkip == MTPPBCmdHandling()) + { + delete iPlayList; + iPlayList = NULL; + + MMPXSource* source = iPlaybackUtility->Source(); + if ( source ) + { + iPlayList = source->PlaylistL(); + SendPlaybackCommandCompleteL(); + } + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::DoHandleInitializeCompleteL")); + } + +// --------------------------------------------------------------------------- +// Handle error. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::DoHandleError( TInt aErr ) + { + if ( aErr != KPlaybackErrNone ) + { + if ( iCallback ) + { + TRAP_IGNORE( iCallback->HandlePlaybackCommandCompleteL( NULL, aErr )); + ResetPlaybackCommand(); + } + else + { + TRAP_IGNORE( iObserver->HandlePlaybackEventL( NULL, aErr )); + } + } + } + +// --------------------------------------------------------------------------- +// Compare two path according to level. +// --------------------------------------------------------------------------- +// +TBool CMTPPlaybackControlImpl::IfEqual( const CMPXCollectionPath& aPathBase, const CMPXCollectionPath& aPathNew, TUint aLevel ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::IfEqual")); + + if (( aPathBase.Levels() < aLevel ) || ( aPathNew.Levels() < aLevel )) + { + return EFalse; + } + for ( TInt i = 0; i < aLevel; i++ ) + { + if ( aPathBase.Index( i ) != aPathNew.Index( i ) ) + { + return EFalse; + } + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::IfEqual")); + return ETrue; + } + +// --------------------------------------------------------------------------- +// Map states from TMPXPlaybackState to TMTPPlaybackState +// --------------------------------------------------------------------------- +// +TMTPPlaybackState CMTPPlaybackControlImpl::MapState( TMPXPlaybackState aState ) + { + __FLOG_VA((_L8("+CMTPPlaybackControlImpl::MapState( aState = 0x%X ) "), aState )); + + TMTPPlaybackState state = EPlayStateError; + + switch ( aState ) + { + case EPbStatePlaying: + { + state = EPlayStatePlaying; + } + break; + case EPbStatePaused: + case EPbStateInitialising: + case EPbStateInitialised: + case EPbStateNotInitialised: + case EPbStateStopped: + { + state = EPlayStatePaused; + } + break; + case EPbStateSeekingForward: + { + state = EPlayStateForwardSeeking; + } + break; + case EPbStateSeekingBackward: + { + state = EPlayStateBackwardSeeking; + } + break; + default: + break; + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::MapState")); + return state; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::MapError. +// --------------------------------------------------------------------------- +// +TInt CMTPPlaybackControlImpl::MapError( TInt aError ) + { + TInt err( KPlaybackErrNone ); + + if ( KErrHardwareNotAvailable == aError ) + { + err = KPlaybackErrDeviceUnavailable; + } + else if ( KErrArgument == aError ) + { + err = KPlaybackErrParamInvalid; + } + else + { + err = KPlaybackErrDeviceBusy; + } + return err; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::CompleteSelf. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::CompleteSelf( TInt aCompletionCode ) + { + __FLOG_1(_L8("+CMTPPlaybackControlImpl::CompleteSelf( %d )"), aCompletionCode ); + + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, aCompletionCode ); + + __FLOG(_L8("-CMTPPlaybackControlImpl::CompleteSelf")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::InitiateMPXPlaybackCommandL. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::InitiateMPXPlaybackCommandL( TMPXPlaybackCommand aCommand, TBool aIsMTPPlaybackUtility ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::InitiateMPXPlaybackCommandL")); + + switch ( aCommand ) + { + case EPbCmdPlay: + { + DeActiveOtherPlayerL(); + SendMPXPlaybackCommandL( EPbCmdPlay, aIsMTPPlaybackUtility ); + } + break; + case EPbCmdPlayPause: + { + DeActiveOtherPlayerL(); + SendMPXPlaybackCommandL( EPbCmdPlayPause, aIsMTPPlaybackUtility ); + } + break; + default: + { + SendMPXPlaybackCommandL( aCommand, aIsMTPPlaybackUtility ); + } + break; + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::InitiateMPXPlaybackCommandL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::SendMPXPlaybackCommandL. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::SendMPXPlaybackCommandL( TMPXPlaybackCommand aCommand, TBool aIsMTPPlaybackUtility ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::SendPlaybackCommandL")); + + CMPXCommand* cmd( CMPXCommand::NewL() ); + CleanupStack::PushL( cmd ); + cmd->SetTObjectValueL( KMPXCommandGeneralId, KMPXCommandIdPlaybackGeneral ); + cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, ETrue ); + cmd->SetTObjectValueL( KMPXCommandPlaybackGeneralType, aCommand ); + cmd->SetTObjectValueL( KMPXCommandPlaybackGeneralData, 0 ); + + if ( aIsMTPPlaybackUtility ) + { + iPlaybackUtility->CommandL( *cmd, this ); + } + else + { + iNowActivePlaybackUtility->CommandL( *cmd ); + } + + CleanupStack::PopAndDestroy( cmd ); + + __FLOG(_L8("-CMTPPlaybackControlImpl::SendPlaybackCommandL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::SendPlaybackCommandCompleteL. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::SendPlaybackCommandCompleteL() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::SendPlaybackCommandCompleteL")); + + __ASSERT_DEBUG( iCallback, Panic( EMTPPBCallbackInvalid )); + __ASSERT_DEBUG(( iMTPPBCmd > EPlaybackCmdNone ) && ( iMTPPBCmd < EPlaybackCmdEnd ), Panic( EMTPPBCallbackInvalid )); + + if ( iResumeCmdArray.Count() != 0 ) + { + InitiateMPXPlaybackCommandL( iResumeCmdArray[0].iMPXCommand, ETrue ); + } + else + { + CMTPPlaybackCommand* cmd = CMTPPlaybackCommand::NewL( iMTPPBCmd, iCmdParam ); + iCmdParam = NULL;//Ownership is handled to CMTPPlaybackCommand + CleanupStack::PushL(cmd); + iCallback->HandlePlaybackCommandCompleteL( cmd ); + CleanupStack::PopAndDestroy(cmd); + + ResetPlaybackCommand(); + } + + __FLOG(_L8("-CMTPPlaybackControlImpl::SendPlaybackCommandCompleteL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::SendPlaybackEventL. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::SendPlaybackEventL( TMTPPlaybackEvent aEvt ) + { + __FLOG(_L8("+CMTPPlaybackControlImpl::SendPlaybackEventL")); + + CMTPPlaybackEvent* event = CMTPPlaybackEvent::NewL( aEvt, NULL ); + CleanupStack::PushL(event); + iObserver->HandlePlaybackEventL( event ); + CleanupStack::PopAndDestroy(event); + + __FLOG(_L8("-CMTPPlaybackControlImpl::SendPlaybackEventL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackControlImpl::ResetPlaybackCommand. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::ResetPlaybackCommand() + { + __FLOG(_L8("+CMTPPlaybackControlImpl::ResetPlaybackCommand")); + + iCallback = NULL; + iMTPPBCmd = EPlaybackCmdNone; + iPrepareCmdArray.Reset(); + iResumeCmdArray.Reset(); + delete iCmdParam; + iCmdParam = NULL; + + __FLOG(_L8("-CMTPPlaybackControlImpl::ResetPlaybackCommand")); + } + +// --------------------------------------------------------------------------- +// Return current state +// --------------------------------------------------------------------------- +// +TMPXPlaybackState CMTPPlaybackControlImpl::CurrentState() const + { + return iState; + } + +// --------------------------------------------------------------------------- +// Return previous state +// --------------------------------------------------------------------------- +// +TMPXPlaybackState CMTPPlaybackControlImpl::PreviousState() const + { + return iPreState; + } + +// --------------------------------------------------------------------------- +// Return song count +// --------------------------------------------------------------------------- +// +TInt32 CMTPPlaybackControlImpl::SongCount() const + { + TInt32 songCount = -1; + if ( iPlayList ) + { + songCount = iPlayList->Count(); + } + return songCount; + } + +// --------------------------------------------------------------------------- +// Return song index +// --------------------------------------------------------------------------- +// +TInt32 CMTPPlaybackControlImpl::SongIndex() const + { + TInt32 songIndex = -1; + if ( iPlayList ) + { + TInt level = iPlayList->Path().Levels(); + songIndex = iPlayList->Path().Index( level-1 ); + } + return songIndex; + } + +// --------------------------------------------------------------------------- +// Set mtp playback command +// --------------------------------------------------------------------------- +// +void CMTPPlaybackControlImpl::SetMTPPBCmd( TMTPPlaybackCommand aMTPPBCmd ) + { + iMTPPBCmd = aMTPPBCmd; + } + +// --------------------------------------------------------------------------- +// Return mtp playback command which is handling +// --------------------------------------------------------------------------- +// +TMTPPlaybackCommand CMTPPlaybackControlImpl::MTPPBCmdHandling() const + { + if ( iPrepareCmdArray.Count() == 0 ) + { + return iMTPPBCmd; + } + else + { + return EPlaybackCmdNone; + } + + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackplaylisthelper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackplaylisthelper.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,756 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "cmtpplaybackcontrolimpl.h" +#include "cmtpplaybackplaylisthelper.h" +#include "mtpplaybackcontrolpanic.h" + +// Constants +__FLOG_STMT(_LIT8(KComponent,"PlaybackPlaylistHelper");) + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::NewL +// --------------------------------------------------------------------------- +// +CMTPPlaybackPlaylistHelper* CMTPPlaybackPlaylistHelper::NewL( CMTPPlaybackControlImpl& aControlImpl ) + { + CMTPPlaybackPlaylistHelper* self = new ( ELeave ) + CMTPPlaybackPlaylistHelper( aControlImpl ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper +// --------------------------------------------------------------------------- +// +CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper")); + + if( iCollectionUiHelper ) + { + iCollectionUiHelper->Close(); + } + + if ( iCollectionHelper ) + { + iCollectionHelper->Close(); + } + + if( iCollectionUtil ) + { + iCollectionUtil->Close(); + } + + delete iPlayObject; + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::~CMTPPlaybackPlaylistHelper")); + __FLOG_CLOSE; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL +//// Get Playlist via aMedia +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL( const TMTPPbDataSuid& aPlayObject ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); + + //Reset + ResetPlaySource(); + + iPlayCategory = aPlayObject.Category(); + iPlayObject = aPlayObject.Suid().AllocL(); + + switch ( iPlayCategory ) + { + case EMTPPbCatPlayList: + { + OpenMusicPlayListPathL(); + } + break; + case EMTPPbCatAlbum: + { + OpenMusicAblumPathL(); + } + break; + default: + { + Panic( EMTPPBCollectionErrCall ); + } + break; + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL +// Get Playlist via index +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL( TInt aIndex ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); + + iSongIndex = aIndex; + + UpdatePathAndOpenL(); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::GetMTPPBSuidFromCollectionL +// --------------------------------------------------------------------------- +// +TMTPPbDataSuid CMTPPlaybackPlaylistHelper::GetMTPPBSuidFromCollectionL( + const CMPXCollectionPlaylist& aPlaylist ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); + + CMPXCollectionPath* path = iCollectionUiHelper->MusicPlaylistPathL(); + if ( path->Id() == aPlaylist.Path().Id( KMTPPlaybackPlaylistAblumLevel -1 )) + { + iPlayCategory = EMTPPbCatPlayList; + } + else + { + iPlayCategory = EMTPPbCatAlbum; + } + TFileName uri = ItemIdToUriL( aPlaylist.Path().Id( KMTPPlaybackPlaylistAblumLevel )); + TMTPPbDataSuid dataSuid( iPlayCategory, uri ); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::GetPlayListFromCollectionL")); + return dataSuid; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::MTPPbCategory +// --------------------------------------------------------------------------- +// +TMTPPbCategory CMTPPlaybackPlaylistHelper::MTPPbCategory() const + { + return iPlayCategory; + } +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::MTPPbSuid +// --------------------------------------------------------------------------- +// +TFileName CMTPPlaybackPlaylistHelper::MTPPbSuid() const + { + return TFileName( *iPlayObject ); + } + +// --------------------------------------------------------------------------- +// From MMPXCollectionObserver +// Handle completion of a asynchronous command +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::HandleCollectionMessage( CMPXMessage* aMsg, TInt aErr ) + { + __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleCollectionMessage( %d ) "), aErr ); + + if (( KErrNone == aErr ) && aMsg ) + { + TRAP( aErr, DoHandleCollectionMessageL( *aMsg )); + } + + if ( KErrNone != aErr ) + { + TInt error = MTPPlaybackControlImpl().MapError( aErr ); + MTPPlaybackControlImpl().DoHandleError( error ); + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleCollectionMessage")); + } +// --------------------------------------------------------------------------- +// From MMPXCollectionObserver +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::HandleOpenL( const CMPXMedia& aEntries, + TInt /*aIndex*/, TBool /*aComplete*/, TInt aError ) + { + __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleOpenL( %d )"), aError ); + + if ( KErrNone == aError ) + { + TRAP( aError, DoHandleOpenL( aEntries )); + } + + if ( KErrNone != aError ) + { + TInt error = MTPPlaybackControlImpl().MapError( aError ); + MTPPlaybackControlImpl().DoHandleError( error ); + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleOpenL")); + } + +// --------------------------------------------------------------------------- +// From MMPXCollectionObserver +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::HandleOpenL( const CMPXCollectionPlaylist& aPlaylist, + TInt aError ) + { + __FLOG_1(_L8("+CMTPPlaybackPlaylistHelper::HandleOpenL( aPlaylist, aError = %d )"), aError ); + + if ( KErrNone == aError ) + { + TRAP( aError, MTPPlaybackControlImpl().GetPlaylistFromCollectionCompleteL( aPlaylist )); + } + + if ( KErrNone != aError ) + { + TInt error = MTPPlaybackControlImpl().MapError( aError ); + MTPPlaybackControlImpl().DoHandleError( error ); + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleOpenL( aPlaylist, aError )")); + } + +// --------------------------------------------------------------------------- +// From MMPXCollectionMediaObserver +// --------------------------------------------------------------------------- +void CMTPPlaybackPlaylistHelper::HandleCollectionMediaL( const CMPXMedia& /*aMedia*/, TInt /*aError*/ ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::HandleCollectionMediaL")); + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::HandleCollectionMediaL")); + } + +// +// CMTPPlaybackPlaylistHelper::CMTPPlaybackPlaylistHelper +// --------------------------------------------------------------------------- +// +CMTPPlaybackPlaylistHelper::CMTPPlaybackPlaylistHelper( CMTPPlaybackControlImpl& aControlImpl ) + : iCollectionUiHelper( NULL ), + iCollectionHelper( NULL ), + iCollectionUtil( NULL ), + iPlayObject( NULL ), + iMTPPlaybackControl( aControlImpl ) + { + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::ConstructL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ConstructL")); + + iCollectionUiHelper = CMPXCollectionHelperFactory::NewCollectionUiHelperL(); + iCollectionUtil = MMPXCollectionUtility::NewL( this, KMcModeDefault ); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ConstructL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::DoHandleCollectionMessageL( const CMPXMessage& aMsg ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage")); + + TMPXMessageId id( aMsg.ValueTObjectL( KMPXMessageGeneralId ) ); + + if ( KMPXMessageGeneral == id ) + { + TInt event( aMsg.ValueTObjectL( KMPXMessageGeneralEvent ) ); + TInt type( aMsg.ValueTObjectL( KMPXMessageGeneralType ) ); + TInt data( aMsg.ValueTObjectL( KMPXMessageGeneralData ) ); + + __FLOG_VA((_L8("Event code is 0x%X, type code is 0x%X"), event, type )); + __FLOG_1(_L8("Data code is 0x%X"), data ); + + if ( event == TMPXCollectionMessage::EPathChanged && + type == EMcPathChangedByOpen && + data == EMcContainerOpened ) + { + iCollectionUtil->Collection().OpenL(); + } + else if ( event == TMPXCollectionMessage::EPathChanged && + type == EMcPathChangedByOpen && + data == EMcItemOpened ) + { + iCollectionUtil->Collection().OpenL(); + } + else if ( event == TMPXCollectionMessage::ECollectionChanged ) + { + __FLOG(_L8("Ignore this event")); + } + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::DoHandleCollectionMessage")); + } + +// ---------------------------------------------------- +// CMTPPlaybackPlaylistHelper::DoHandleOpenL +// ---------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia& aEntries ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia )")); + + if ( EMTPPbCatAlbum == iPlayCategory ) + { + UpdateAlbumPathAndOpenL(); + } + else + { + //playlist + if ( -1 == iPathIndex ) + { + //first, the top path + UpdatePlaylistPathIndexL( aEntries ); + + if ( -1 == iPathIndex ) + { + MTPPlaybackControlImpl().DoHandleError( KPlaybackErrParamInvalid ); + } + else + { + iCollectionUtil->Collection().OpenL( iPathIndex ); + } + } + else + { + //open the first song when initObject + iCollectionUtil->Collection().OpenL( iSongIndex ); + } + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::DoHandleOpenL( const CMPXMedia )")); + } + +// ---------------------------------------------------- +// CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL +// ---------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL")); + + CMPXCollectionPath* path = iCollectionUiHelper->MusicPlaylistPathL(); + CleanupStack::PushL( path ); + iCollectionUtil->Collection().OpenL( *path ); + CleanupStack::PopAndDestroy( path ); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::OpenMusicPlayListPathL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL +// ---------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL")); + + CMPXCollectionPath* path = iCollectionUiHelper->MusicMenuPathL(); + CleanupStack::PushL( path ); + path->AppendL(KMPXCollectionArtistAlbum); + iCollectionUtil->Collection().OpenL( *path ); + CleanupStack::PopAndDestroy( path ); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::OpenMusicAblumPathL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackPlaylistHelper::ResetPlaySource +// ---------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::ResetPlaySource() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ResetPlaySourceL")); + + iPathIndex = -1; + iSongIndex = 0; + delete iPlayObject; + iPlayObject = NULL; + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ResetPlaySourceL")); + } + +// ---------------------------------------------------- +// CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL +// ---------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL( const CMPXMedia& aEntries ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL")); + __ASSERT_DEBUG( iPlayCategory == EMTPPbCatPlayList, Panic( EMTPPBCollectionErrCall )); + + const CMPXMediaArray* refArray = aEntries.Value ( KMPXMediaArrayContents ); + TInt count = refArray->Count(); + const TMPXItemId playlistId = UriToItemIdL(); + + for ( TInt i=0; iAtL(i); + /** + * Try to find out the next path according to the + * playlist's ItemId + */ + if ( container->IsSupported( KMPXMediaGeneralId )) + { + const TMPXItemId tempId = container->ValueTObjectL(KMPXMediaGeneralId); + if ( tempId == playlistId ) + { + iPathIndex = i; + break; + } + } + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdatePlaylistPathIndexL")); + } + +// --------------------------------------------------------------------------- +// return instance of CollectionHelper. +// --------------------------------------------------------------------------- +// +MMPXCollectionHelper* CMTPPlaybackPlaylistHelper::CollectionHelperL() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::CollectionHelperL")); + + if ( iCollectionHelper == NULL ) + { + iCollectionHelper = CMPXCollectionHelperFactory::NewCollectionCachedHelperL(); + + // Do a search for a song ID that does not exist + RArray contentIDs; + CleanupClosePushL( contentIDs ); // + contentIDs + contentIDs.AppendL( KMPXMediaIdGeneral ); + + CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() ); + CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs + CleanupStack::PushL( searchMedia ); // + searchMedia + + searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralId, + KMTPPlaybackInvalidSongID ); + + /* + * store root + */ + TChar driveChar = 'c'; + TInt driveNumber; + User::LeaveIfError( RFs::CharToDrive( driveChar, driveNumber ) ); + + // get root path + TBuf storeRoot; + User::LeaveIfError( PathInfo::GetRootPath( storeRoot, driveNumber ) ); + + searchMedia->SetTextValueL( KMPXMediaGeneralDrive, storeRoot ); + + RArray songAttributes; + CleanupClosePushL( songAttributes ); // + songAttributes + songAttributes.AppendL( KMPXMediaGeneralId ); + + CMPXMedia* foundMedia = NULL; + TRAPD( err, foundMedia = iCollectionHelper->FindAllL( + *searchMedia, + songAttributes.Array() ) ); + + CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes + CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia + + CleanupStack::PushL( foundMedia ); // + foundMedia + + if ( err != KErrNone ) + { + iCollectionHelper->Close(); + iCollectionHelper = NULL; + User::Leave( KErrGeneral ); + } + CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::CollectionHelperL")); + return iCollectionHelper; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::UriToItemIdL +// --------------------------------------------------------------------------- +// +const TMPXItemId CMTPPlaybackPlaylistHelper::UriToItemIdL() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UriToItemIdL")); + + + TMPXItemId itemId( KMPXInvalidItemId ); + TInt error = KErrNone; + CMPXMedia* result = NULL; + + RArray atts; + CleanupClosePushL( atts ); + atts.AppendL( KMPXMediaGeneralId ); + + if ( EMTPPbCatPlayList == iPlayCategory ) + { + TRAP( error, result = CollectionHelperL()->GetL( *iPlayObject, atts.Array(), EMPXPlaylist )); + } + else + { + TRAP( error, result = CollectionHelperL()->GetL( *iPlayObject, atts.Array(), EMPXAbstractAlbum )); + } + + if ( error != KErrNone ) + { + CleanupStack::PopAndDestroy( &atts ); + } + else + { + CleanupStack::PushL( result ); + itemId = result->ValueTObjectL(KMPXMediaGeneralId); + CleanupStack::PopAndDestroy( result ); + CleanupStack::PopAndDestroy( &atts ); + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UriToItemIdL")); + return itemId; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::ItemIdToUriL. +// --------------------------------------------------------------------------- +// +const TFileName CMTPPlaybackPlaylistHelper::ItemIdToUriL( const TMPXItemId& aId ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::ItemIdToUriL")); + + TFileName itemUri( KNullDesC ); + + RArray contentIDs; + CleanupClosePushL( contentIDs ); // + contentIDs + contentIDs.AppendL( KMPXMediaIdGeneral ); + + CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() ); + CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs + CleanupStack::PushL( searchMedia ); // + searchMedia + + searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + if ( iPlayCategory == EMTPPbCatPlayList ) + { + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); + } + else + { + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXAbstractAlbum ); + } + searchMedia->SetTObjectValueL( KMPXMediaGeneralId, aId ); + + RArray resultAttributes; + CleanupClosePushL( resultAttributes ); // + resultAttributes + resultAttributes.AppendL( KMPXMediaGeneralUri ); + + CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( + *searchMedia, + resultAttributes.Array() ); + + CleanupStack::PopAndDestroy( &resultAttributes ); // - resultAttributes + CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia + + CleanupStack::PushL( foundMedia ); // + foundMedia + if ( !foundMedia->IsSupported( KMPXMediaArrayCount )) + { + User::Leave( KErrNotSupported ); + } + else if ( *foundMedia->Value( KMPXMediaArrayCount ) != 1 ) + { + User::Leave( KErrNotSupported ); + } + + const CMPXMediaArray* tracksArray = foundMedia->Value ( KMPXMediaArrayContents ); + CMPXMedia* item = tracksArray->AtL(0); + + if ( item->IsSupported( KMPXMediaGeneralUri )) + { + itemUri = item->ValueText(KMPXMediaGeneralUri); + } + + CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::ItemIdToUriL")); + return itemUri; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::FindAlbumSongsL +// --------------------------------------------------------------------------- +// +CMPXMedia* CMTPPlaybackPlaylistHelper::FindAlbumSongsL( const TMPXItemId& aAlbumId ) + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::FindAlbumSongsL")); + + // Fetch the songs for the selected album + CMPXMedia* findCriteria = CMPXMedia::NewL(); + CleanupStack::PushL( findCriteria ); + findCriteria->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup ); + findCriteria->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); + findCriteria->SetTObjectValueL( KMPXMediaGeneralId, aAlbumId ); + RArray attrs; + CleanupClosePushL( attrs ); + attrs.Append( TMPXAttribute( KMPXMediaIdGeneral, + EMPXMediaGeneralTitle | + EMPXMediaGeneralId ) ); + attrs.Append( KMPXMediaMusicAlbumTrack ); + + CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *findCriteria, + attrs.Array() ); + CleanupStack::PopAndDestroy( &attrs ); + CleanupStack::PopAndDestroy( findCriteria ); + + if ( !foundMedia->IsSupported( KMPXMediaArrayCount ) ) + { + User::Leave( KErrNotSupported ); + } + TInt foundItemCount = *foundMedia->Value( KMPXMediaArrayCount ); + if ( foundItemCount == 0 ) + { + User::Leave( KErrNotFound ); + } + if ( !foundMedia->IsSupported( KMPXMediaArrayContents ) ) + { + User::Leave( KErrNotSupported ); + } + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::FindAlbumSongsL")); + return foundMedia; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL. +// aParam: const CMPXMedia& aAlbums +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL")); + + RArray ids; + CleanupClosePushL(ids); + + CMPXCollectionPath* cpath = iCollectionUtil->Collection().PathL(); + CleanupStack::PushL( cpath ); + + if (cpath->Levels() == 3) + { + // go back one level before amending path with new levels + cpath->Back(); + } + + const TMPXItemId id = UriToItemIdL(); + if ( KMPXInvalidItemId == id ) + { + MTPPlaybackControlImpl().DoHandleError( KPlaybackErrParamInvalid ); + CleanupStack::PopAndDestroy( cpath ); + CleanupStack::PopAndDestroy(&ids); + return; + } + + ids.AppendL(id); + cpath->AppendL( ids.Array() ); // top level items + cpath->Set( 0 ); + ids.Reset(); + + CMPXMedia* songs = FindAlbumSongsL( id ); + CleanupStack::PushL( songs ); + const CMPXMediaArray* tracksArray = songs->Value ( KMPXMediaArrayContents ); + User::LeaveIfNull(const_cast(tracksArray)); + TUint count = tracksArray->Count(); + for (TInt i=0; iAtL(i); + const TMPXItemId id = song->ValueTObjectL(KMPXMediaGeneralId); + ids.AppendL(id); + } + + cpath->AppendL(ids.Array()); // top level items + cpath->Set( iSongIndex ); + + iCollectionUtil->Collection().OpenL(*cpath); + CleanupStack::PopAndDestroy( songs ); + CleanupStack::PopAndDestroy( cpath ); + CleanupStack::PopAndDestroy(&ids); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdateAlbumPathAndOpenL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL. +// --------------------------------------------------------------------------- +// +void CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL() + { + __FLOG(_L8("+CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL()")); + + RArray ids; + CleanupClosePushL(ids); + + CMPXCollectionPath* cpath = iCollectionUtil->Collection().PathL(); + CleanupStack::PushL( cpath ); + + cpath->Set( iSongIndex ); + + iCollectionUtil->Collection().OpenL(*cpath); + CleanupStack::PopAndDestroy( cpath ); + CleanupStack::PopAndDestroy(&ids); + + __FLOG(_L8("-CMTPPlaybackPlaylistHelper::UpdatePathAndOpenL( aSong Index )")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackPlaylistHelper::MTPPlaybackControlImpl. +// --------------------------------------------------------------------------- +// +CMTPPlaybackControlImpl& CMTPPlaybackPlaylistHelper::MTPPlaybackControlImpl() + { + return iMTPPlaybackControl; + } + + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackresumehelper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/mtpplaybackmpximplementation/src/cmtpplaybackresumehelper.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,402 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackresumehelper.h" +#include "cmtpplaybackcommand.h" +#include "cmtpplaybackcontrolimpl.h" + +// Constants +__FLOG_STMT(_LIT8(KComponent,"PlaybackResumeHelper");) + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::NewL +// --------------------------------------------------------------------------- +// +CMTPPlaybackResumeHelper* CMTPPlaybackResumeHelper::NewL( + CMTPPlaybackControlImpl& aControlImpl ) + { + CMTPPlaybackResumeHelper* self = new ( ELeave ) + CMTPPlaybackResumeHelper( aControlImpl ); + return self; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::~CMTPPlaybackResumeHelper +// --------------------------------------------------------------------------- +// +CMTPPlaybackResumeHelper::~CMTPPlaybackResumeHelper() + { + __FLOG(_L8("+CMTPPlaybackResumeHelper::~CMTPPlaybackResumeHelper")); + __FLOG(_L8("-CMTPPlaybackResumeHelper::~CMTPPlaybackResumeHelper")); + __FLOG_CLOSE; + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::UpdatePrepareCmdArrayL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::UpdatePrepareCmdArray( TMTPPlaybackCommand aMTPPPBCmd, + RResumeCmdArray& aMTPPBMPXCmd ) + { + __FLOG(_L8("+CMTPPlaybackResumeHelper::UpdatePrepareCmdArrayL")); + + aMTPPBMPXCmd.Reset(); + iIfParepareArray = ETrue; + + switch ( aMTPPPBCmd ) + { + case EPlaybackCmdSetPosition: + { + HandlePlaybackCmdSetPosition( aMTPPBMPXCmd ); + } + break; + default: + break; + } + + __FLOG(_L8("-CMTPPlaybackResumeHelper::UpdatePrepareCmdArrayL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::UpdateResumeCmdArrayL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::UpdateResumeCmdArray( TMTPPlaybackCommand aMTPPPBCmd, + RResumeCmdArray& aMTPPBMPXCmd) + { + __FLOG(_L8("+CMTPPlaybackResumeHelper::MapMTPPBCommandToMPXCommandL")); + + aMTPPBMPXCmd.Reset(); + iIfParepareArray = EFalse; + + switch ( aMTPPPBCmd ) + { + case EPlaybackCmdInitObject: + { + HandlePlaybackCmdInitObject( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdInitIndex: + { + HandlePlaybackCmdInitIndex( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdPlay: + { + HandlePlaybackCmdPlay( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdPause: + { + HandlePlaybackCmdPause( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdSkip: + { + HandlePlaybackCmdSkip( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdSeekForward: + { + HandlePlaybackCmdSeekForward( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdSeekBackward: + { + HandlePlaybackCmdSeekBackward( aMTPPBMPXCmd ); + } + break; + case EPlaybackCmdSetPosition: + { + HandlePlaybackCmdSetPosition( aMTPPBMPXCmd ); + } + break; + default: + break; + } + + __FLOG(_L8("-CMTPPlaybackResumeHelper::MapPlaybackControlCommandL")); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::CMTPPlaybackResumeHelper +// --------------------------------------------------------------------------- +// +CMTPPlaybackResumeHelper::CMTPPlaybackResumeHelper( + CMTPPlaybackControlImpl& aControlImpl ) + : iMTPPlaybackControl( aControlImpl ) + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdInitObjectL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdInitObject( RResumeCmdArray& aMTPPBMPXCmdArray ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + { + TMPXComandElement command = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmdArray.Append( command ); + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdInitObjectL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdInitIndex( RResumeCmdArray& aMTPPBMPXCmdArray ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + { + TMPXComandElement command = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmdArray.Append( command ); + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdPlayL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdPlay(RResumeCmdArray& aMTPPBMPXCmdArray ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePaused: + case EPbStateStopped: + case EPbStateInitialised: + { + TMPXComandElement command = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmdArray.Append( command ); + } + break; + case EPbStateSeekingBackward: + case EPbStateSeekingForward: + { + if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePlaying ) + { + TMPXComandElement tmp = { EPbCmdStopSeeking, EPbStatePlaying }; + aMTPPBMPXCmdArray.Append( tmp ); + } + else if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePaused ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePaused }; + aMTPPBMPXCmdArray.Append( command ); + TMPXComandElement command1 = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmdArray.Append( command1 ); + } + } + break; + default: + break; + } + } + + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdPauseL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdPause( RResumeCmdArray& aMTPPBMPXCmdArray ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + { + TMPXComandElement command = { EPbCmdPlayPause, EPbStatePaused }; + aMTPPBMPXCmdArray.Append( command ); + } + break; + case EPbStateSeekingBackward: + case EPbStateSeekingForward: + { + if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePaused ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePaused }; + aMTPPBMPXCmdArray.Append( command ); + } + else if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePlaying ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePlaying }; + aMTPPBMPXCmdArray.Append( command ); + TMPXComandElement command1 = { EPbCmdPlayPause, EPbStatePaused }; + aMTPPBMPXCmdArray.Append( command1 ); + } + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdSeekForwardL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdSeekForward( RResumeCmdArray& aMTPPBMPXCmd ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + case EPbStatePaused: + { + TMPXComandElement command = { EPbCmdStartSeekForward, EPbStateSeekingForward }; + aMTPPBMPXCmd.Append( command ); + } + break; + case EPbStateInitialised: + { + TMPXComandElement command = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmd.Append( command ); + TMPXComandElement command1 = { EPbCmdStartSeekForward, EPbStateSeekingForward }; + aMTPPBMPXCmd.Append( command1 ); + } + break; + case EPbStateSeekingBackward: + { + if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePaused ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePaused }; + aMTPPBMPXCmd.Append( command ); + TMPXComandElement command1 = { EPbCmdStartSeekForward, EPbStateSeekingForward }; + aMTPPBMPXCmd.Append( command1 ); + } + else if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePlaying ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePlaying }; + aMTPPBMPXCmd.Append( command ); + TMPXComandElement command1 = { EPbCmdStartSeekForward, EPbStateSeekingForward }; + aMTPPBMPXCmd.Append( command1 ); + } + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdSeekBackwardL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdSeekBackward( RResumeCmdArray& aMTPPBMPXCmd ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + case EPbStatePaused: + { + TMPXComandElement command = { EPbCmdStartSeekBackward, EPbStateSeekingBackward }; + aMTPPBMPXCmd.Append( command ); + } + break; + case EPbStateSeekingForward: + { + if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePaused ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePaused }; + aMTPPBMPXCmd.Append( command ); + TMPXComandElement command1 = { EPbCmdStartSeekBackward, EPbStateSeekingBackward }; + aMTPPBMPXCmd.Append( command1 ); + } + else if ( MTPPlaybackControlImpl().PreviousState() == EPbStatePlaying ) + { + TMPXComandElement command = { EPbCmdStopSeeking, EPbStatePlaying }; + aMTPPBMPXCmd.Append( command ); + TMPXComandElement command1 = { EPbCmdStartSeekBackward, EPbStateSeekingBackward }; + aMTPPBMPXCmd.Append( command1 ); + } + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdSkipL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdSkip( RResumeCmdArray& aMTPPBMPXCmd ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + { + TMPXComandElement command = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmd.Append( command ); + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::HandlePlaybackCmdSetPositionL +// --------------------------------------------------------------------------- +// +void CMTPPlaybackResumeHelper::HandlePlaybackCmdSetPosition( RResumeCmdArray& aMTPPBMPXCmd ) + { + switch ( MTPPlaybackControlImpl().CurrentState() ) + { + case EPbStatePlaying: + { + if ( iIfParepareArray ) + { + TMPXComandElement command = { EPbCmdPause, EPbStatePaused }; + aMTPPBMPXCmd.Append( command ); + } + else + { + TMPXComandElement command = { EPbCmdPlay, EPbStatePlaying }; + aMTPPBMPXCmd.Append( command ); + } + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// CMTPPlaybackResumeHelper::CMTPPlaybackControlImpl +// --------------------------------------------------------------------------- +// +CMTPPlaybackControlImpl& CMTPPlaybackResumeHelper::MTPPlaybackControlImpl() + { + return iMTPPlaybackControl; + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcgetdevicepropdesc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcgetdevicepropdesc.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,312 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include + +#include "cmtppbcgetdevicepropdesc.h" +#include "mtpplaybackcontroldpconst.h" +#include "cmtpplaybackcontroldp.h" +#include "cmtpplaybackproperty.h" +#include "cmtpplaybackmap.h" +#include "cmtpplaybackcommand.h" +#include "mtpplaybackcontrolpanic.h" + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"GetPlaybackDevicePropDesc");) + +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@param aFramework The data provider framework +@param aConnection The connection from which the request comes +@return a pointer to the created request processor object +*/ +MMTPRequestProcessor* CMTPPbcGetDevicePropDesc::NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) + { + CMTPPbcGetDevicePropDesc* self = new (ELeave) CMTPPbcGetDevicePropDesc(aFramework, aConnection, aDataProvider); + return self; + } + +/** +Destructor. +*/ +CMTPPbcGetDevicePropDesc::~CMTPPbcGetDevicePropDesc() + { + __FLOG(_L8("~CMTPPbcGetDevicePropDesc - Entry")); + delete iPropDesc; + delete iPbCmd; + __FLOG(_L8("~CMTPPbcGetDevicePropDesc - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPbcGetDevicePropDesc::CMTPPbcGetDevicePropDesc(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) : + CMTPRequestProcessor(aFramework, aConnection, 0, NULL), + iPlaybackControlDp(aDataProvider) + { + //Open the log system + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +/** +GetDevicePropDesc request validator. +@return EMTPRespCodeOK if request is verified, otherwise one of the error response codes +*/ +TMTPResponseCode CMTPPbcGetDevicePropDesc::CheckRequestL() + { + __FLOG(_L8("CheckRequestL - Entry")); + TMTPResponseCode respCode = CMTPRequestProcessor::CheckRequestL(); + if(respCode == EMTPRespCodeOK) + { + respCode = EMTPRespCodeDevicePropNotSupported; + TUint32 propCode = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + const TInt count = sizeof(KMTPPlaybackControlDpSupportedProperties) / sizeof(KMTPPlaybackControlDpSupportedProperties[0]); + for (TUint i(0); (i < count); i++) + { + if (propCode == KMTPPlaybackControlDpSupportedProperties[i]) + { + respCode = EMTPRespCodeOK; + break; + } + } + } + + __FLOG(_L8("CheckRequestL - Exit")); + return respCode; + } + +/** +GetDevicePropDesc request handler. +*/ +void CMTPPbcGetDevicePropDesc::ServiceL() + { + __FLOG(_L8("ServiceL - Entry")); + //Destroy the previous playback command. + delete iPbCmd; + iPbCmd = NULL; + + //Get the device property code + TMTPDevicePropertyCode propCode(static_cast(Request(). + Uint32(TMTPTypeRequest::ERequestParameter1))); + + TMTPPbCtrlData data; + data.iOptCode = EMTPOpCodeGetDevicePropDesc; + data.iDevPropCode = propCode; + + //Get a new playback command. + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + TInt result = map.GetPlaybackControlCommand(data, &iPbCmd); + + if(KErrNone == result) + { + MMTPPlaybackControl& control(iPlaybackControlDp.GetPlaybackControlL()); + TRAPD(err, control.CommandL(*iPbCmd, this)); + __ASSERT_ALWAYS((err == KErrNone), SendResponseL(EMTPRespCodeParameterNotSupported)); + } + else if(KErrNotSupported == result) + { + SendResponseL(EMTPRespCodeDevicePropNotSupported); + } + else + { + SendResponseL(EMTPRespCodeParameterNotSupported); + } + + __FLOG(_L8("ServiceL - Exit")); + } + +void CMTPPbcGetDevicePropDesc::HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr) + { + __FLOG(_L8("HandlePlaybackCommandCompleteL - Entry")); + __FLOG_1(_L8("aErr %d"), aErr); + + TBool useDefault = EFalse; + switch(aErr) + { + case KPlaybackErrNone: + { + __ASSERT_DEBUG((aCmd != NULL), Panic(EMTPPBDataNullErr)); + __ASSERT_DEBUG((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), Panic(EMTPPBArgumentErr)); + __ASSERT_ALWAYS((aCmd != NULL), User::Leave(KErrArgument)); + __ASSERT_ALWAYS((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), User::Leave(KErrArgument)); + __FLOG_1(_L8("aCmd %d"), aCmd->PlaybackCommand()); + } + break; + case KPlaybackErrContextInvalid: + { + useDefault = ETrue; + } + break; + case KPlaybackErrDeviceUnavailable: + { + iPlaybackControlDp.RequestToResetPbCtrl(); + SendResponseL(EMTPRespCodeDeviceBusy); + } + return; + + default: + { + SendResponseL(EMTPRespCodeDeviceBusy); + } + return; + } + + delete iPropDesc; + iPropDesc = NULL; + + CMTPPlaybackProperty& property(iPlaybackControlDp.GetPlaybackProperty()); + TMTPDevicePropertyCode propCode = static_cast + (Request().Uint32(TMTPTypeRequest::ERequestParameter1)); + + switch (propCode) + { + case EMTPDevicePropCodeVolume: + { + TMTPPbDataVolume volSet(1,0,1,1,1); + if(useDefault) + { + property.GetDefaultVolSet(volSet); + } + else + { + volSet = aCmd->ParamL().VolumeSetL(); + property.SetDefaultVolSetL(volSet); + } + + CMTPTypeDevicePropDescRangeForm* form = CMTPTypeDevicePropDescRangeForm::NewLC(EMTPTypeUINT32); + form->SetUint32L(CMTPTypeDevicePropDescRangeForm::EMaximumValue, volSet.MaxVolume()); + form->SetUint32L(CMTPTypeDevicePropDescRangeForm::EMinimumValue, volSet.MinVolume()); + form->SetUint32L(CMTPTypeDevicePropDescRangeForm::EStepSize, volSet.Step()); + iPropDesc = CMTPTypeDevicePropDesc::NewL(propCode, + CMTPTypeDevicePropDesc::EReadWrite, + CMTPTypeDevicePropDesc::ERangeForm, + form); + + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::EFactoryDefaultValue, volSet.DefaultVolume()); + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::ECurrentValue, volSet.CurrentVolume()); + CleanupStack::PopAndDestroy(form); + SendDataL(*iPropDesc); + } + break; + + case EMTPDevicePropCodePlaybackRate: + { + CMTPTypeDevicePropDescEnumerationForm* form = CMTPTypeDevicePropDescEnumerationForm:: + NewLC(EMTPTypeINT32); + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + + TInt32 val = map.PlaybackRateL(EPlayStateBackwardSeeking); + TMTPTypeInt32 value(val); + form->AppendSupportedValueL(value); + + val = map.PlaybackRateL(EPlayStatePaused); + value.Set(val); + form->AppendSupportedValueL(value); + + val = map.PlaybackRateL(EPlayStatePlaying); + value.Set(val); + form->AppendSupportedValueL(value); + + val = map.PlaybackRateL(EPlayStateForwardSeeking); + value.Set(val); + form->AppendSupportedValueL(value); + + iPropDesc = CMTPTypeDevicePropDesc::NewL(propCode, + CMTPTypeDevicePropDesc::EReadWrite, + CMTPTypeDevicePropDesc::EEnumerationForm, + form); + + property.GetDefaultPropertyValueL(propCode, val); + iPropDesc->SetInt32L(CMTPTypeDevicePropDesc::EFactoryDefaultValue, val); + + if(!useDefault) + { + TMTPPlaybackState state = static_cast(aCmd->ParamL().Uint32L()); + val = map.PlaybackRateL(state); + } + iPropDesc->SetInt32L(CMTPTypeDevicePropDesc::ECurrentValue, val); + CleanupStack::PopAndDestroy(form); + + SendDataL(*iPropDesc); + } + break; + + case EMTPDevicePropCodePlaybackObject: + { + iPropDesc = CMTPTypeDevicePropDesc::NewL(propCode); + TUint32 val = 0; + property.GetDefaultPropertyValueL(propCode, val); + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::EFactoryDefaultValue, val); + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + if(!useDefault) + { + val = map.ObjectHandleL(aCmd->ParamL().SuidSetL().Suid()); + } + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::ECurrentValue, val); + SendDataL(*iPropDesc); + } + break; + + case EMTPDevicePropCodePlaybackContainerIndex: + { + iPropDesc = CMTPTypeDevicePropDesc::NewL(propCode); + TUint32 val = 0; + property.GetDefaultPropertyValueL(propCode, val); + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::EFactoryDefaultValue, val); + if(!useDefault) + { + val = aCmd->ParamL().Uint32L(); + } + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::ECurrentValue, val); + SendDataL(*iPropDesc); + } + break; + + case EMTPDevicePropCodePlaybackPosition: + { + iPropDesc = CMTPTypeDevicePropDesc::NewL(propCode); + TUint32 val = 0; + CMTPPlaybackProperty& property(iPlaybackControlDp.GetPlaybackProperty()); + property.GetDefaultPropertyValueL(propCode, val); + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::EFactoryDefaultValue, val); + if(!useDefault) + { + val = aCmd->ParamL().Uint32L(); + } + iPropDesc->SetUint32L(CMTPTypeDevicePropDesc::ECurrentValue, val); + SendDataL(*iPropDesc); + } + break; + + default: + { + User::Leave(KErrArgument); + } + break; + } + + __FLOG(_L8("HandlePlaybackCommandCompleteL - Exit")); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcgetdevicepropvalue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcgetdevicepropvalue.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,242 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include + +#include "cmtppbcgetdevicepropvalue.h" +#include "mtpplaybackcontroldpconst.h" +#include "cmtpplaybackcontroldp.h" +#include "cmtpplaybackproperty.h" +#include "cmtpplaybackcommand.h" +#include "mtpplaybackcontrolpanic.h" + + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"GetPlaybackDevicePropValue");) + +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@param aFramework The data provider framework +@param aConnection The connection from which the request comes +@return a pointer to the created request processor object. +*/ +MMTPRequestProcessor* CMTPPbcGetDevicePropValue::NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) + { + CMTPPbcGetDevicePropValue* self = new (ELeave) CMTPPbcGetDevicePropValue(aFramework, aConnection, aDataProvider); + return self; + } + +/** +Destructor. +*/ +CMTPPbcGetDevicePropValue::~CMTPPbcGetDevicePropValue() + { + __FLOG(_L8("~CMTPPbcGetDevicePropValue - Entry")); + delete iPbCmd; + __FLOG(_L8("~CMTPPbcGetDevicePropValue - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPbcGetDevicePropValue::CMTPPbcGetDevicePropValue(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider): + CMTPRequestProcessor(aFramework, aConnection, 0, NULL), + iPlaybackControlDp(aDataProvider) + { + //Open the log system + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +/** +CMTPPbcGetDevicePropValue request validator. +@return EMTPRespCodeOK if request is verified, otherwise one of the error response codes +*/ +TMTPResponseCode CMTPPbcGetDevicePropValue::CheckRequestL() + { + __FLOG(_L8("CheckRequestL - Entry")); + TMTPResponseCode respCode = CMTPRequestProcessor::CheckRequestL(); + if(respCode == EMTPRespCodeOK) + { + respCode = EMTPRespCodeDevicePropNotSupported; + TUint32 propCode = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + const TInt count = sizeof(KMTPPlaybackControlDpSupportedProperties) / + sizeof(KMTPPlaybackControlDpSupportedProperties[0]); + for (TUint i(0); (i < count); i++) + { + if (propCode == KMTPPlaybackControlDpSupportedProperties[i]) + { + respCode = EMTPRespCodeOK; + break; + } + } + } + __FLOG(_L8("CheckRequestL - Exit")); + return respCode; + } + +/** +CMTPPbcGetDevicePropValue request handler. +*/ +void CMTPPbcGetDevicePropValue::ServiceL() + { + __FLOG(_L8("ServiceL - Entry")); + //Destroy the previous playback command. + delete iPbCmd; + iPbCmd = NULL; + + //Get the device property code + TMTPDevicePropertyCode propCode(static_cast(Request(). + Uint32(TMTPTypeRequest::ERequestParameter1))); + + TMTPPbCtrlData data; + data.iOptCode = EMTPOpCodeGetDevicePropValue; + data.iDevPropCode = propCode; + + //Get a new playback command. + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + TInt result = map.GetPlaybackControlCommand(data, &iPbCmd); + + if(KErrNone == result) + { + MMTPPlaybackControl& control(iPlaybackControlDp.GetPlaybackControlL()); + TRAPD(err, control.CommandL(*iPbCmd, this)); + __ASSERT_ALWAYS((err == KErrNone), SendResponseL(EMTPRespCodeParameterNotSupported)); + } + else if(KErrNotSupported == result) + { + SendResponseL(EMTPRespCodeDevicePropNotSupported); + } + else + { + SendResponseL(EMTPRespCodeParameterNotSupported); + } + __FLOG(_L8("ServiceL - Exit")); + } + +void CMTPPbcGetDevicePropValue::HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr) + { + __FLOG(_L8("HandlePlaybackCommandCompleteL - Entry")); + __FLOG_1(_L8("aErr %d"), aErr); + + //Handle the error + TBool useDefault = EFalse; + switch(aErr) + { + case KPlaybackErrNone: + { + __ASSERT_DEBUG((aCmd != NULL), Panic(EMTPPBDataNullErr)); + __ASSERT_DEBUG((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), Panic(EMTPPBArgumentErr)); + __ASSERT_ALWAYS((aCmd != NULL), User::Leave(KErrArgument)); + __ASSERT_ALWAYS((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), User::Leave(KErrArgument)); + __FLOG_1(_L8("aCmd %d"), aCmd->PlaybackCommand()); + } + break; + case KPlaybackErrContextInvalid: + { + useDefault = ETrue; + } + break; + case KPlaybackErrDeviceUnavailable: + { + iPlaybackControlDp.RequestToResetPbCtrl(); + SendResponseL(EMTPRespCodeDeviceBusy); + } + return; + default: + { + SendResponseL(EMTPRespCodeDeviceBusy); + } + return; + } + + CMTPPlaybackProperty& property(iPlaybackControlDp.GetPlaybackProperty()); + TMTPDevicePropertyCode propCode(static_cast + (Request().Uint32(TMTPTypeRequest::ERequestParameter1))); + + switch(propCode) + { + case EMTPDevicePropCodePlaybackRate: + { + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + TInt32 val; + if(useDefault) + { + property.GetDefaultPropertyValueL(propCode, val); + } + else + { + TMTPPlaybackState state = static_cast(aCmd->ParamL().Uint32L()); + val = map.PlaybackRateL(state); + } + iInt32.Set(val); + SendDataL(iInt32); + } + break; + + case EMTPDevicePropCodePlaybackObject: + { + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + TUint32 val; + if(useDefault) + { + property.GetDefaultPropertyValueL(propCode, val); + } + else + { + val = map.ObjectHandleL(aCmd->ParamL().SuidSetL().Suid()); + } + iUint32.Set(val); + SendDataL(iUint32); + } + break; + + case EMTPDevicePropCodeVolume: + case EMTPDevicePropCodePlaybackContainerIndex: + case EMTPDevicePropCodePlaybackPosition: + { + TUint32 val; + if(useDefault) + { + property.GetDefaultPropertyValueL(propCode, val); + } + else + { + val = aCmd->ParamL().Uint32L(); + } + iUint32.Set(val); + SendDataL(iUint32); + } + break; + + default: + SendResponseL(EMTPRespCodeDevicePropNotSupported); + break; + } + __FLOG(_L8("HandlePlaybackCommandCompleteL - Exit")); + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcresetdevicepropvalue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcresetdevicepropvalue.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,177 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtppbcresetdevicepropvalue.h" +#include "mtpplaybackcontroldpconst.h" +#include "cmtpplaybackcontroldp.h" +#include "cmtpplaybackproperty.h" +#include "cmtpplaybackcommand.h" +#include "mtpplaybackcontrolpanic.h" + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"ResetPlaybackDevicePropValue");) + +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@param aFramework The data provider framework +@param aConnection The connection from which the request comes +@return a pointer to the created request processor object. +*/ +MMTPRequestProcessor* CMTPPbcResetDevicePropValue::NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) + { + CMTPPbcResetDevicePropValue* self = new (ELeave) CMTPPbcResetDevicePropValue(aFramework, aConnection, aDataProvider); + return self; + } + +/** +Destructor +*/ +CMTPPbcResetDevicePropValue::~CMTPPbcResetDevicePropValue() + { + __FLOG(_L8("~CMTPPbcResetDevicePropValue - Entry")); + delete iPbCmd; + __FLOG(_L8("~CMTPPbcResetDevicePropValue - Exit")); + __FLOG_CLOSE; + } + +/** +Standard c++ constructor +*/ +CMTPPbcResetDevicePropValue::CMTPPbcResetDevicePropValue(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider): + CMTPRequestProcessor(aFramework, aConnection, 0, NULL), + iPlaybackControlDp(aDataProvider) + { + //Open the log system + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +/** +SetDevicePropValue request validator. +@return EMTPRespCodeOK if request is verified, otherwise one of the error response codes +*/ +TMTPResponseCode CMTPPbcResetDevicePropValue::CheckRequestL() + { + __FLOG(_L8("CheckRequestL - Entry")); + TMTPResponseCode respCode = CMTPRequestProcessor::CheckRequestL(); + if(respCode == EMTPRespCodeOK) + { + respCode = EMTPRespCodeDevicePropNotSupported; + TUint32 propCode = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + const TInt count = sizeof(KMTPPlaybackControlDpSupportedProperties) / sizeof(KMTPPlaybackControlDpSupportedProperties[0]); + for (TUint i(0); (i < count); i++) + { + if (propCode == KMTPPlaybackControlDpSupportedProperties[i]) + { + respCode = EMTPRespCodeOK; + break; + } + } + } + + __FLOG(_L8("CheckRequestL - Exit")); + return respCode; + } +/** +ResetDevicePropValue request handler. +*/ +void CMTPPbcResetDevicePropValue::ServiceL() + { + __FLOG(_L8("ServiceL - Entry")); + + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + //Destroy the previous playback command. + delete iPbCmd; + iPbCmd = NULL; + + //Get a new playback command. + iData.iOptCode = EMTPOpCodeResetDevicePropValue; + TMTPDevicePropertyCode propCode(static_cast(Request(). + Uint32(TMTPTypeRequest::ERequestParameter1))); + iData.iDevPropCode = propCode; + CMTPPlaybackProperty& property(iPlaybackControlDp.GetPlaybackProperty()); + property.GetDefaultPropertyValueL(iData); + + TInt result = map.GetPlaybackControlCommand(iData, &iPbCmd); + + if(KErrNone == result) + { + MMTPPlaybackControl& control(iPlaybackControlDp.GetPlaybackControlL()); + TRAPD(err, control.CommandL(*iPbCmd, this)); + __ASSERT_ALWAYS((err == KErrNone), SendResponseL(EMTPRespCodeParameterNotSupported)); + } + else if(KErrNotSupported == result) + { + SendResponseL(EMTPRespCodeDevicePropNotSupported); + } + else + { + SendResponseL(EMTPRespCodeParameterNotSupported); + } + + __FLOG(_L8("ServiceL - Exit")); + } + +void CMTPPbcResetDevicePropValue::HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr) + { + __FLOG(_L8("HandlePlaybackCommandCompleteL - Entry")); + __FLOG_1(_L8("aErr %d"), aErr); + + //Handle error response. + TMTPResponseCode response; + switch(aErr) + { + case KPlaybackErrNone: + { + response = EMTPRespCodeOK; + } + break; + case KPlaybackErrDeviceUnavailable: + { + response = EMTPRespCodeDeviceBusy; + iPlaybackControlDp.RequestToResetPbCtrl(); + } + break; + case KPlaybackErrContextInvalid: + { + response = EMTPRespCodeAccessDenied; + } + break; + default: + { + response = EMTPRespCodeDeviceBusy; + } + break; + } + + SendResponseL(response); + + if(aCmd != NULL) + { + __ASSERT_DEBUG((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), Panic(EMTPPBArgumentErr)); + __FLOG_1(_L8("aCmd %d"), aCmd->PlaybackCommand()); + } + + __FLOG(_L8("HandlePlaybackCommandCompleteL - Exit")); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcsetdevicepropvalue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcsetdevicepropvalue.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,220 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include + +#include "cmtppbcsetdevicepropvalue.h" +#include "mtpplaybackcontroldpconst.h" +#include "cmtpplaybackcontroldp.h" +#include "cmtpplaybackproperty.h" +#include "cmtpplaybackcommand.h" +#include "mtpplaybackcontrolpanic.h" + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"SetPlaybackDevicePropValue");) + +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@param aFramework The data provider framework +@param aConnection The connection from which the request comes +@return a pointer to the created request processor object. +*/ +MMTPRequestProcessor* CMTPPbcSetDevicePropValue::NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) + { + CMTPPbcSetDevicePropValue* self = new (ELeave) CMTPPbcSetDevicePropValue(aFramework, aConnection, aDataProvider); + return self; + } + +/** +Destructor +*/ +CMTPPbcSetDevicePropValue::~CMTPPbcSetDevicePropValue() + { + __FLOG(_L8("~CMTPPbcSetDevicePropValue - Entry")); + delete iPbCmd; + __FLOG(_L8("~CMTPPbcSetDevicePropValue - Exit")); + __FLOG_CLOSE; + } + +/** +Standard c++ constructor +*/ +CMTPPbcSetDevicePropValue::CMTPPbcSetDevicePropValue(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider): + CMTPRequestProcessor(aFramework, aConnection, 0, NULL), + iPlaybackControlDp(aDataProvider) + { + //Open the log system + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +/** +CMTPPbcSetDevicePropValue request validator. +@return EMTPRespCodeOK if request is verified, otherwise one of the error response codes +*/ +TMTPResponseCode CMTPPbcSetDevicePropValue::CheckRequestL() + { + __FLOG(_L8("CheckRequestL - Entry")); + TMTPResponseCode respCode = CMTPRequestProcessor::CheckRequestL(); + if(respCode == EMTPRespCodeOK) + { + respCode = EMTPRespCodeDevicePropNotSupported; + TUint32 propCode = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + const TInt count = sizeof(KMTPPlaybackControlDpSupportedProperties) / sizeof(KMTPPlaybackControlDpSupportedProperties[0]); + for (TUint i(0); (i < count); i++) + { + if (propCode == KMTPPlaybackControlDpSupportedProperties[i]) + { + respCode = EMTPRespCodeOK; + break; + } + } + } + + __FLOG(_L8("CheckRequestL - Exit")); + return respCode; + } + +/** +Process the transaction response phase. +*/ +TBool CMTPPbcSetDevicePropValue::DoHandleResponsePhaseL() + { + __FLOG(_L8("DoHandleResponsePhaseL - Entry")); + + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + //Destroy the previous playback command. + delete iPbCmd; + iPbCmd = NULL; + + //Get a new playback command. + TInt result = map.GetPlaybackControlCommand(iData, &iPbCmd); + + if(KErrNone == result) + { + MMTPPlaybackControl& control(iPlaybackControlDp.GetPlaybackControlL()); + TRAPD(err, control.CommandL(*iPbCmd, this)); + __ASSERT_ALWAYS((err == KErrNone), SendResponseL(EMTPRespCodeInvalidDevicePropValue)); + } + else if(KErrNotSupported == result) + { + SendResponseL(EMTPRespCodeDevicePropNotSupported); + } + else + { + SendResponseL(EMTPRespCodeInvalidDevicePropValue); + } + + __FLOG(_L8("DoHandleResponsePhaseL - Exit")); + return EFalse; + } + +void CMTPPbcSetDevicePropValue::ServiceL() + { + __FLOG(_L8("ServiceL - Entry")); + TMTPDevicePropertyCode propCode(static_cast(Request(). + Uint32(TMTPTypeRequest::ERequestParameter1))); + iData.iOptCode = EMTPOpCodeSetDevicePropValue; + iData.iDevPropCode = propCode; + switch(propCode) + { + case EMTPDevicePropCodePlaybackRate: + { + ReceiveDataL(iData.iPropValInt32); + } + break; + case EMTPDevicePropCodeVolume: + case EMTPDevicePropCodePlaybackObject: + case EMTPDevicePropCodePlaybackContainerIndex: + case EMTPDevicePropCodePlaybackPosition: + { + ReceiveDataL(iData.iPropValUint32); + } + break; + + default: + { + SendResponseL(EMTPRespCodeDevicePropNotSupported); + } + break; + } + __FLOG(_L8("ServiceL - Exit")); + } + +void CMTPPbcSetDevicePropValue::HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr) + { + __FLOG(_L8("HandlePlaybackCommandCompleteL - Entry")); + __FLOG_1(_L8("aErr %d"), aErr); + + //Handle error response. + TMTPResponseCode response; + switch(aErr) + { + case KPlaybackErrNone: + { + response = EMTPRespCodeOK; + } + break; + case KPlaybackErrDeviceUnavailable: + { + response = EMTPRespCodeDeviceBusy; + iPlaybackControlDp.RequestToResetPbCtrl(); + } + break; + case KPlaybackErrContextInvalid: + { + CMTPPlaybackProperty& prop(iPlaybackControlDp.GetPlaybackProperty()); + if(prop.IsDefaultPropertyValueL(iData)) + { + response = EMTPRespCodeOK; + } + else + { + response = EMTPRespCodeAccessDenied; + } + } + break; + case KPlaybackErrParamInvalid: + { + response = EMTPRespCodeInvalidDevicePropValue; + } + break; + default: + { + response = EMTPRespCodeDeviceBusy; + } + break; + } + + SendResponseL(response); + + if(aCmd != NULL) + { + __ASSERT_DEBUG((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), Panic(EMTPPBArgumentErr)); + __FLOG_1(_L8("aCmd %d"), aCmd->PlaybackCommand()); + } + + __FLOG(_L8("HandlePlaybackCommandCompleteL - Exit")); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcskip.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtppbcskip.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,164 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include + +#include "cmtppbcskip.h" +#include "mtpplaybackcontroldpconst.h" +#include "cmtpplaybackmap.h" +#include "cmtpplaybackcontroldp.h" +#include "cmtpplaybackproperty.h" +#include "cmtpplaybackcommand.h" +#include "mtpplaybackcontrolpanic.h" + + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"Skip");) + +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@param aFramework The data provider framework +@param aConnection The connection from which the request comes +@return a pointer to the created request processor object. +*/ +MMTPRequestProcessor* CMTPPbcSkip::NewL(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) + { + CMTPPbcSkip* self = new (ELeave) CMTPPbcSkip(aFramework, aConnection, aDataProvider); + return self; + } + +/** +Destructor. +*/ +CMTPPbcSkip::~CMTPPbcSkip() + { + __FLOG(_L8("CMTPPbcSkip - Entry")); + delete iPbCmd; + __FLOG(_L8("CMTPPbcSkip - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPbcSkip::CMTPPbcSkip(MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider): + CMTPRequestProcessor(aFramework, aConnection, 0, NULL), + iPlaybackControlDp(aDataProvider) + { + //Open the log system + __FLOG_OPEN(KMTPSubsystem, KComponent); + } + +/** +CheckRequestL +*/ +TMTPResponseCode CMTPPbcSkip::CheckRequestL() + { + __FLOG(_L8("CheckRequestL - Entry")); + TMTPResponseCode respCode = CMTPRequestProcessor::CheckRequestL(); + if(respCode == EMTPRespCodeOK) + { + respCode = EMTPRespCodeInvalidParameter; + TUint32 step = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + if(step != 0) + { + respCode = EMTPRespCodeOK; + } + } + __FLOG(_L8("CheckRequestL - Exit")); + return respCode; + } + +/** +CMTPPbcSkip request handler. +*/ +void CMTPPbcSkip::ServiceL() + { + __FLOG(_L8("ServiceL - Entry")); + CMTPPlaybackMap& map(iPlaybackControlDp.GetPlaybackMap()); + MMTPPlaybackControl& control(iPlaybackControlDp.GetPlaybackControlL()); + + TMTPPbCtrlData data; + data.iOptCode = EMTPOpCodeSkip; + data.iPropValInt32 = static_cast(Request().Uint32(TMTPTypeRequest::ERequestParameter1)); + + TInt result = map.GetPlaybackControlCommand(data, &iPbCmd); + + if(KErrNone == result) + { + TRAPD(err, control.CommandL(*iPbCmd, this)); + __ASSERT_ALWAYS((err == KErrNone), SendResponseL(EMTPRespCodeInvalidParameter)); + } + else + { + SendResponseL(EMTPRespCodeInvalidParameter); + } + __FLOG(_L8("ServiceL - Exit")); + } + +void CMTPPbcSkip::HandlePlaybackCommandCompleteL(CMTPPlaybackCommand* aCmd, TInt aErr) + { + __FLOG(_L8("HandlePlaybackCommandCompleteL - Entry")); + __FLOG_1(_L8("aErr %d"), aErr); + + //Handle error response. + TMTPResponseCode response; + switch(aErr) + { + case KPlaybackErrNone: + { + response = EMTPRespCodeOK; + } + break; + case KPlaybackErrDeviceBusy: + { + response = EMTPRespCodeDeviceBusy; + } + break; + case KPlaybackErrDeviceUnavailable: + { + response = EMTPRespCodeDeviceBusy; + iPlaybackControlDp.RequestToResetPbCtrl(); + } + break; + default: + { + response = EMTPRespCodeInvalidParameter; + } + break; + } + + SendResponseL(response); + + if(aCmd != NULL) + { + __ASSERT_DEBUG((aCmd->PlaybackCommand() == iPbCmd->PlaybackCommand()), Panic(EMTPPBArgumentErr)); + __FLOG_1(_L8("aCmd %d"), aCmd->PlaybackCommand()); + } + + __FLOG(_L8("HandlePlaybackCommandCompleteL - Exit")); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackcontroldp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackcontroldp.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,392 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include + +#include "cmtpplaybackcontroldp.h" +#include "cmtprequestprocessor.h" +#include "mtpplaybackcontroldpprocessor.h" +#include "cmtpplaybackmap.h" +#include "cmtpplaybackproperty.h" +#include "mmtpplaybackinterface.h" +#include "cmtpplaybackevent.h" +#include "mtpplaybackcontrolpanic.h" + + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"PlaybackControlDataProvider");) +static const TInt KMTPPlaybackControlDpSessionGranularity(3); + +/** +MTP playback control data provider plug-in factory method. +@return A pointer to an MTP playback control data provider plug-in. Ownership IS +transfered. +@leave One of the system wide error codes, if a processing failure occurs. +*/ +TAny* CMTPPlaybackControlDataProvider::NewL(TAny* aParams) + { + CMTPPlaybackControlDataProvider* self = new (ELeave) CMTPPlaybackControlDataProvider(aParams); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +Destructor +*/ +CMTPPlaybackControlDataProvider::~CMTPPlaybackControlDataProvider() + { + __FLOG(_L8("~CMTPPlaybackControlDataProvider - Entry")); + TInt count = iActiveProcessors.Count(); + while(count--) + { + iActiveProcessors[count]->Release(); + } + iActiveProcessors.Close(); + delete iPlaybackMap; + delete iPlaybackProperty; + if(iPlaybackControl) + { + iPlaybackControl->Close(); + } + __FLOG(_L8("~CMTPPlaybackControlDataProvider - Exit")); + __FLOG_CLOSE; + } + +void CMTPPlaybackControlDataProvider::Cancel() + { + + } + +void CMTPPlaybackControlDataProvider::ProcessEventL(const TMTPTypeEvent& /*aEvent*/, MMTPConnection& /*aConnection*/) + { + __FLOG(_L8("ProcessEventL - Entry")); + __FLOG(_L8("ProcessEventL - Exit")); + } + +void CMTPPlaybackControlDataProvider::ProcessNotificationL(TMTPNotification aNotification, const TAny* aParams) + { + __FLOG(_L8("ProcessNotificationL - Entry")); + switch (aNotification) + { + case EMTPSessionClosed: + SessionClosedL(*reinterpret_cast(aParams)); + break; + + case EMTPSessionOpened: + SessionOpenedL(*reinterpret_cast(aParams)); + break; + default: + // Ignore all other notifications. + break; + } + __FLOG(_L8("ProcessNotificationL - Exit")); + } + +void CMTPPlaybackControlDataProvider::ProcessRequestPhaseL(TMTPTransactionPhase aPhase, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) + { + __FLOG(_L8("ProcessRequestPhaseL - Entry")); + TInt index = LocateRequestProcessorL(aRequest, aConnection); + __ASSERT_DEBUG(index != KErrNotFound, Panic(EMTPPBArgumentErr)); + MMTPRequestProcessor* processor = iActiveProcessors[index]; + iActiveProcessor = index; + iActiveProcessorRemoved = EFalse; + TBool result = processor->HandleRequestL(aRequest, aPhase); + if (iActiveProcessorRemoved) + { + processor->Release(); // destroy the processor + } + else if (result) + { + processor->Release(); + iActiveProcessors.Remove(index); + } + iActiveProcessor = -1; + __FLOG(_L8("ProcessRequestPhaseL - Exit")); + } + +void CMTPPlaybackControlDataProvider::Supported(TMTPSupportCategory aCategory, RArray& aArray) const + { + __FLOG(_L8("Supported - Entry")); + + switch (aCategory) + { + case EDeviceProperties: + { + TInt count = sizeof(KMTPPlaybackControlDpSupportedProperties) / sizeof(KMTPPlaybackControlDpSupportedProperties[0]); + for(TInt i = 0; i < count; i++) + { + aArray.Append(KMTPPlaybackControlDpSupportedProperties[i]); + } + } + break; + + case EOperations: + { + TInt count = sizeof(KMTPPlaybackControlDpSupportedOperations) / sizeof(KMTPPlaybackControlDpSupportedOperations[0]); + for(TInt i = 0; i < count; i++) + { + aArray.Append(KMTPPlaybackControlDpSupportedOperations[i]); + } + } + break; + + case EEvents: + { + TInt count = sizeof(KMTPPlaybackControlDpSupportedEvents) / sizeof(KMTPPlaybackControlDpSupportedEvents[0]); + for(TInt i = 0; i < count; i++) + { + aArray.Append(KMTPPlaybackControlDpSupportedEvents[i]); + } + } + break; + + default: + // Unrecognised category, leave aArray unmodified. + break; + } + __FLOG(_L8("Supported - Exit")); + } + +/** +Constructor. +*/ +CMTPPlaybackControlDataProvider::CMTPPlaybackControlDataProvider(TAny* aParams) : + CMTPDataProviderPlugin(aParams), + iActiveProcessors(KMTPPlaybackControlDpSessionGranularity), + iActiveProcessor(-1), + iRequestToResetPbCtrl(EFalse) + { + + } + +/** +Second phase constructor. +*/ +void CMTPPlaybackControlDataProvider::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("ConstructL - Entry")); + iPlaybackProperty = CMTPPlaybackProperty::NewL(); + iPlaybackMap = CMTPPlaybackMap::NewL(Framework(),*iPlaybackProperty); + __FLOG(_L8("ConstructL - Exit")); + } + +void CMTPPlaybackControlDataProvider::SendEventL(TMTPDevicePropertyCode aPropCode) + { + __FLOG(_L8("SendEventL - Entry")); + iEvent.Reset(); + iEvent.SetUint16(TMTPTypeEvent::EEventCode, EMTPEventCodeDevicePropChanged ); + iEvent.SetUint32(TMTPTypeEvent::EEventSessionID, KMTPSessionAll); + iEvent.SetUint32(TMTPTypeEvent::EEventTransactionID, KMTPTransactionIdNone); + iEvent.SetUint32(TMTPTypeEvent::EEventParameter1, aPropCode); + Framework().SendEventL(iEvent); + __FLOG(_L8("SendEventL - Exit")); + } + +/** +Find or create a request processor that can process the request +@param aRequest The request to be processed +@param aConnection The connection from which the request comes +@return the index of the found/created request processor +*/ +TInt CMTPPlaybackControlDataProvider::LocateRequestProcessorL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) + { + __FLOG(_L8("LocateRequestProcessorL - Entry")); + TInt index = KErrNotFound; + TInt count = iActiveProcessors.Count(); + for(TInt i = 0; i < count; i++) + { + if(iActiveProcessors[i]->Match(aRequest, aConnection)) + { + index = i; + break; + } + } + if(index == KErrNotFound) + { + MMTPRequestProcessor* processor = MTPPlaybackControlDpProcessor::CreateL(Framework(), aRequest, aConnection, *this); + __ASSERT_DEBUG(processor, Panic(EMTPPBArgumentErr)); + CleanupReleasePushL(*processor); + iActiveProcessors.AppendL(processor); + CleanupStack::Pop(); + index = count; + } + + __FLOG(_L8("LocateRequestProcessorL - Exit")); + return index; + } + +/** +Cleans up outstanding request processors when a session is closed. +@param aSession notification parameter block +*/ +void CMTPPlaybackControlDataProvider::SessionClosedL(const TMTPNotificationParamsSessionChange& aSession) + { + __FLOG(_L8("SessionClosedL - Entry")); + TInt count = iActiveProcessors.Count(); + while (count--) + { + MMTPRequestProcessor* processor = iActiveProcessors[count]; + TUint32 sessionId(processor->SessionId()); + if ((sessionId == aSession.iMTPId) && (processor->Connection().ConnectionId() == aSession.iConnection.ConnectionId())) + { + iActiveProcessors.Remove(count); + if (count == iActiveProcessor) + { + iActiveProcessorRemoved = ETrue; + } + else + { + processor->Release(); + } + } + } + + if(iPlaybackControl) + { + iPlaybackControl->Close(); + iPlaybackControl = NULL; + } + + __FLOG(_L8("SessionClosedL - Exit")); + } + +/** +Prepares for a newly-opened session. +@param aSession notification parameter block +*/ +#ifdef __FLOG_ACTIVE +void CMTPPlaybackControlDataProvider::SessionOpenedL(const TMTPNotificationParamsSessionChange& aSession) +#else +void CMTPPlaybackControlDataProvider::SessionOpenedL(const TMTPNotificationParamsSessionChange& /*aSession*/) +#endif + { + __FLOG(_L8("SessionOpenedL - Entry")); + __FLOG_VA((_L8("SessionID = %d"), aSession.iMTPId)); + __FLOG(_L8("SessionOpenedL - Exit")); + } + +void CMTPPlaybackControlDataProvider::StartObjectEnumerationL(TUint32 aStorageId, TBool /*aPersistentFullEnumeration*/) + { + __FLOG(_L8("StartObjectEnumerationL - Entry")); + //This DP doesn't manage data. + Framework().ObjectEnumerationCompleteL(aStorageId); + __FLOG(_L8("StartObjectEnumerationL - Exit")); + } + +void CMTPPlaybackControlDataProvider::StartStorageEnumerationL() + { + __FLOG(_L8("StartStorageEnumerationL - Entry")); + //This DP doesn't manage data. + Framework().StorageEnumerationCompleteL(); + __FLOG(_L8("StartStorageEnumerationL - Exit")); + } + +void CMTPPlaybackControlDataProvider::HandlePlaybackEventL(CMTPPlaybackEvent* aEvent, TInt aErr) + { + __FLOG(_L8("HandlePlaybackEventL - Entry")); + + if(aErr != KPlaybackErrNone) + { + if(aErr == KPlaybackErrDeviceUnavailable ) + { + iRequestToResetPbCtrl = ETrue; + //Report error to initiator, . + SendEventL(EMTPDevicePropCodePlaybackObject); + SendEventL(EMTPDevicePropCodePlaybackRate); + SendEventL(EMTPDevicePropCodePlaybackContainerIndex); + SendEventL(EMTPDevicePropCodePlaybackPosition); + } + return; + } + + __ASSERT_DEBUG((aEvent != NULL), Panic(EMTPPBDataNullErr)); + __ASSERT_ALWAYS((aEvent != NULL), User::Leave(KErrArgument)); + __FLOG_1(_L8("aEvent %d"), aEvent->PlaybackEvent()); + + switch(aEvent->PlaybackEvent()) + { + case EPlaybackEventVolumeUpdate: + { + SendEventL(EMTPDevicePropCodeVolume); + } + break; + case EPlaybackEventStateUpdate: + { + SendEventL(EMTPDevicePropCodePlaybackRate); + } + break; + case EPlaybackEventObjectUpdate: + { + SendEventL(EMTPDevicePropCodePlaybackObject); + } + break; + case EPlaybackEventObjectIndexUpdate: + { + SendEventL(EMTPDevicePropCodePlaybackContainerIndex); + } + break; + + default: + User::Leave(KErrArgument); + break; + } + + __FLOG(_L8("HandlePlaybackEventL - Exit")); + } + +CMTPPlaybackMap& CMTPPlaybackControlDataProvider::GetPlaybackMap() const + { + __ASSERT_DEBUG((iPlaybackMap != NULL), Panic(EMTPPBDataNullErr)); + return *iPlaybackMap; + } + +CMTPPlaybackProperty& CMTPPlaybackControlDataProvider::GetPlaybackProperty() const + { + __ASSERT_DEBUG((iPlaybackProperty != NULL), Panic(EMTPPBDataNullErr)); + return *iPlaybackProperty; + } + +MMTPPlaybackControl& CMTPPlaybackControlDataProvider::GetPlaybackControlL() + { + __FLOG(_L8("GetPlaybackControlL - Entry")); + if(iPlaybackControl == NULL) + { + iPlaybackControl = MMTPPlaybackControl::NewL(*this); + } + else if(iRequestToResetPbCtrl) + { + iRequestToResetPbCtrl = EFalse; + iPlaybackControl->Close(); + iPlaybackControl = NULL; + iPlaybackControl = MMTPPlaybackControl::NewL(*this); + } + __FLOG(_L8("GetPlaybackControlL - Exit")); + return *iPlaybackControl; + } + +void CMTPPlaybackControlDataProvider::RequestToResetPbCtrl() + { + iRequestToResetPbCtrl = ETrue; + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackmap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackmap.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,378 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include +#include +#include + +#include "cmtpplaybackmap.h" +#include "cmtpplaybackcommand.h" +#include "cmtpplaybackcontroldp.h" +#include "mtpplaybackcontrolpanic.h" + + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"MTPPlaybackMap");) + +const TInt KPlaybackRatePlay = 1000; +const TInt KPlaybackRatePause = 0; +const TInt KPlaybackRateFF = 2000; +const TInt KPlaybackRateREW = -2000; +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@return a pointer to the created playback checker object +*/ +CMTPPlaybackMap* CMTPPlaybackMap::NewL(MMTPDataProviderFramework& aFramework, + CMTPPlaybackProperty& aProperty) + { + CMTPPlaybackMap* self = new (ELeave) CMTPPlaybackMap(aFramework, aProperty); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +Destructor. +*/ +CMTPPlaybackMap::~CMTPPlaybackMap() + { + __FLOG(_L8("~CMTPPlaybackMap - Entry")); + __FLOG(_L8("~CMTPPlaybackMap - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPlaybackMap::CMTPPlaybackMap(MMTPDataProviderFramework& aFramework, + CMTPPlaybackProperty& aProperty): + iFramework(aFramework),iProperty(aProperty) + { + } + +/** +Second-phase constructor. +*/ +void CMTPPlaybackMap::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("CMTPPlaybackMap: ConstructL - Entry")); + __FLOG(_L8("CMTPPlaybackMap: ConstructL - Exit")); + } + +TInt CMTPPlaybackMap::GetPlaybackControlCommand(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + __FLOG(_L8("GetPlaybackControlCommand - Entry")); + TInt result = KErrNotSupported; + switch(aData.iOptCode) + { + case EMTPOpCodeSetDevicePropValue: + case EMTPOpCodeResetDevicePropValue: + { + result = HandleSetDevicePropValue(aData, aCmd); + } + break; + case EMTPOpCodeGetDevicePropValue: + case EMTPOpCodeGetDevicePropDesc: + { + result = HandleGetDevicePropValue(aData, aCmd); + } + break; + case EMTPOpCodeSkip: + { + result = HandleSkip(aData, aCmd); + } + break; + default: + break; + } + __FLOG(_L8("GetPlaybackControlCommand - Exit")); + return result; + } + +TInt CMTPPlaybackMap::HandleSetDevicePropValue(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + TRAPD(err, HandleSetDevicePropValueL(aData, aCmd)); + return err; + } + +void CMTPPlaybackMap::HandleSetDevicePropValueL(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + __FLOG(_L8("HandleSetDevicePropValueL - Entry")); + __ASSERT_DEBUG((aData.iOptCode == EMTPOpCodeSetDevicePropValue) || + (aData.iOptCode == EMTPOpCodeResetDevicePropValue), + Panic(EMTPPBArgumentErr)); + + switch(aData.iDevPropCode) + { + case EMTPDevicePropCodeVolume: + { + TUint32 val = aData.iPropValUint32.Value(); + CMTPPbCmdParam* param = CMTPPbCmdParam::NewL(val); + CleanupStack::PushL(param); + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdSetVolume, param); + CleanupStack::Pop(param); + } + break; + + case EMTPDevicePropCodePlaybackRate: + { + TInt32 val = aData.iPropValInt32.Value(); + TMTPPlaybackCommand cmd = EPlaybackCmdNone; + switch(val) + { + case KPlaybackRateFF: + cmd = EPlaybackCmdSeekForward; + break; + case KPlaybackRatePlay: + cmd = EPlaybackCmdPlay; + break; + case KPlaybackRatePause: + cmd = EPlaybackCmdPause; + break; + case KPlaybackRateREW: + cmd = EPlaybackCmdSeekBackward; + break; + default: + User::Leave(KErrArgument); + break; + } + if(cmd != EPlaybackCmdNone) + { + *aCmd = CMTPPlaybackCommand::NewL(cmd, NULL); + } + else + { + *aCmd = NULL; + } + } + break; + + case EMTPDevicePropCodePlaybackObject: + { + TUint32 handle = aData.iPropValUint32.Value(); + if(handle == 0) + { + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdStop, NULL); + } + else + { + TFileName suid; + TUint format; + GetObjecInfoFromHandleL(handle, suid, format); + TMTPPbCategory cat = EMTPPbCatNone; + switch(format) + { + case 0xBA05://Abstract Audio & Video Playlist + case 0xBA11://M3U Playlist + cat = EMTPPbCatPlayList; + break; + case 0xBA03://Abstract Audio Album + cat = EMTPPbCatAlbum; + break; + case 0x3009://MP3 + case 0xB903://AAC (Advance Audio Coding) + case 0xB901://WMA (Windows Media Audio) + case 0x3008://WAV (Waveform audio format) + cat = EMTPPbCatMusic; + break; + default: + User::Leave(KErrArgument); + break; + } + if(cat != EMTPPbCatNone) + { + CMTPPbCmdParam* param = CMTPPbCmdParam::NewL(cat, suid); + CleanupStack::PushL(param); + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdInitObject, param); + CleanupStack::Pop(param); + } + else + { + *aCmd = NULL; + } + } + } + break; + + case EMTPDevicePropCodePlaybackContainerIndex: + { + TUint32 index = aData.iPropValUint32.Value(); + CMTPPbCmdParam* param = CMTPPbCmdParam::NewL(index); + CleanupStack::PushL(param); + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdInitIndex, param); + CleanupStack::Pop(param); + } + break; + + case EMTPDevicePropCodePlaybackPosition: + { + TUint32 position = aData.iPropValUint32.Value(); + CMTPPbCmdParam* param = CMTPPbCmdParam::NewL(position); + CleanupStack::PushL(param); + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdSetPosition, param); + CleanupStack::Pop(param); + } + break; + + default: + User::Leave(KErrArgument); + break; + } + __FLOG(_L8("HandleSetDevicePropValueL - Exit")); + } + +TInt CMTPPlaybackMap::HandleGetDevicePropValue(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + TRAPD(err, HandleGetDevicePropValueL(aData, aCmd)); + return err; + } +void CMTPPlaybackMap::HandleGetDevicePropValueL(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + __FLOG(_L8("HandleGetDevicePropValueL - Entry")); + __ASSERT_DEBUG((aData.iOptCode == EMTPOpCodeGetDevicePropValue) || + (aData.iOptCode == EMTPOpCodeGetDevicePropDesc), + Panic(EMTPPBArgumentErr)); + + switch(aData.iDevPropCode) + { + case EMTPDevicePropCodeVolume: + { + TMTPPlaybackCommand cmd = EPlaybackCmdGetVolumeSet; + if(aData.iOptCode == EMTPOpCodeGetDevicePropValue) + { + cmd = EPlaybackCmdGetVolume; + } + *aCmd = CMTPPlaybackCommand::NewL(cmd, NULL); + } + break; + + case EMTPDevicePropCodePlaybackRate: + { + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdGetState, NULL); + } + break; + + case EMTPDevicePropCodePlaybackObject: + { + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdGetObject, NULL); + } + break; + + case EMTPDevicePropCodePlaybackContainerIndex: + { + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdGetIndex, NULL); + } + break; + + case EMTPDevicePropCodePlaybackPosition: + { + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdGetPosition, NULL); + } + break; + + default: + User::Leave(KErrArgument); + break; + } + __FLOG(_L8("HandleGetDevicePropValueL - Exit")); + } + +TInt CMTPPlaybackMap::HandleSkip(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + TRAPD(err, HandleSkipL(aData, aCmd)); + return err; + } + +void CMTPPlaybackMap::HandleSkipL(const TMTPPbCtrlData& aData, + CMTPPlaybackCommand** aCmd) + { + __FLOG(_L8("HandleSkipL - Entry")); + TInt32 step = aData.iPropValInt32.Value(); + CMTPPbCmdParam* param = CMTPPbCmdParam::NewL(step); + CleanupStack::PushL(param); + *aCmd = CMTPPlaybackCommand::NewL(EPlaybackCmdSkip, param); + CleanupStack::Pop(param); + __FLOG(_L8("HandleSkipL - Exit")); + } + +TInt32 CMTPPlaybackMap::PlaybackRateL(TMTPPlaybackState aState) + { + __FLOG(_L8("PlaybackRate - Entry")); + TInt32 rate = KPlaybackRatePause; + switch(aState) + { + case EPlayStateForwardSeeking: + rate = KPlaybackRateFF; + break; + + case EPlayStatePlaying: + rate = KPlaybackRatePlay; + break; + + case EPlayStatePaused: + rate = KPlaybackRatePause; + break; + + case EPlayStateBackwardSeeking: + rate = KPlaybackRateREW; + break; + + default: + User::Leave(KErrArgument); + break; + } + __FLOG(_L8("PlaybackRate - Exit")); + return rate; + } + +TUint32 CMTPPlaybackMap::ObjectHandleL(const TDesC& aSuid) + { + __FLOG(_L8("ObjectHandleL - Entry")); + CMTPObjectMetaData* meta(CMTPObjectMetaData::NewLC()); + TBool result = iFramework.ObjectMgr().ObjectL(aSuid, *meta); + __ASSERT_ALWAYS(result, User::Leave(KErrBadHandle)); + __ASSERT_DEBUG(meta, Panic(EMTPPBDataNullErr)); + TUint32 handle = meta->Uint(CMTPObjectMetaData::EHandle); + CleanupStack::PopAndDestroy(meta); + __FLOG(_L8("ObjectHandleL - Exit")); + return handle; + } + +void CMTPPlaybackMap::GetObjecInfoFromHandleL(TUint32 aHandle, TDes& aSuid, TUint& aFormat) const + { + __FLOG(_L8("GetObjecInfoFromHandleL - Entry")); + CMTPObjectMetaData* meta(CMTPObjectMetaData::NewLC()); + TBool result = iFramework.ObjectMgr().ObjectL(aHandle, *meta); + __ASSERT_ALWAYS(result, User::Leave(KErrBadHandle)); + __ASSERT_DEBUG(meta, Panic(EMTPPBDataNullErr)); + aSuid = meta->DesC(CMTPObjectMetaData::ESuid); + aFormat = meta->Uint(CMTPObjectMetaData::EFormatCode); + CleanupStack::PopAndDestroy(meta); + __FLOG(_L8("GetObjecInfoFromHandleL - Exit")); + } diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackproperty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackproperty.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,265 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackmap.h" +#include "cmtpplaybackproperty.h" +#include "mtpplaybackcontrolpanic.h" + +// Class constants. +__FLOG_STMT(_LIT8(KComponent,"MTPPlaybackProperty");) + +const TInt32 KMTPDefaultPlaybackRate = 0; + +const TUint32 KMTPMaxPlaybackVolume = 100; +const TUint32 KMTPMinPlaybackVolume = 0; +const TUint32 KMTPDefaultPlaybackVolume = 40; +const TUint32 KMTPCurrentPlaybackVolume = 40; +const TUint32 KMTPVolumeStep = 1; + +const TUint32 KMTPDefaultPlaybackObject = 0; +const TUint32 KMTPDefaultPlaybackIndex = 0; +const TUint32 KMTPDefaultPlaybackPosition = 0; + +/** +Two-phase constructor. +@param aPlugin The data provider plugin +@return a pointer to the created playback checker object +*/ +CMTPPlaybackProperty* CMTPPlaybackProperty::NewL() + { + CMTPPlaybackProperty* self = new (ELeave) CMTPPlaybackProperty(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +Destructor. +*/ +CMTPPlaybackProperty::~CMTPPlaybackProperty() + { + __FLOG(_L8("~CMTPPlaybackProperty - Entry")); + delete iPlaybackVolumeData; + __FLOG(_L8("~CMTPPlaybackProperty - Exit")); + __FLOG_CLOSE; + } + +/** +Constructor. +*/ +CMTPPlaybackProperty::CMTPPlaybackProperty() + { + } + +/** +Second-phase constructor. +*/ +void CMTPPlaybackProperty::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("ConstructL - Entry")); + __FLOG(_L8("ConstructL - Exit")); + } + +void CMTPPlaybackProperty::GetDefaultPropertyValueL(TMTPDevicePropertyCode aProp, TInt32& aValue) + { + __FLOG(_L8("GetDefaultPropertyValueL - Entry")); + + __ASSERT_ALWAYS((aProp == EMTPDevicePropCodePlaybackRate), User::Leave(KErrArgument)); + aValue = KMTPDefaultPlaybackRate; + + __FLOG(_L8("GetDefaultPropertyValueL - Exit")); + } + +void CMTPPlaybackProperty::GetDefaultPropertyValueL(TMTPDevicePropertyCode aProp, TUint32& aValue) + { + __FLOG(_L8("GetDefaultPropertyValueL - Entry")); + switch(aProp) + { + case EMTPDevicePropCodeVolume: + { + if(iPlaybackVolumeData != NULL) + { + aValue = iPlaybackVolumeData->DefaultVolume(); + } + else + { + aValue = KMTPDefaultPlaybackVolume; + } + } + break; + + case EMTPDevicePropCodePlaybackObject: + { + aValue = KMTPDefaultPlaybackObject; + } + break; + + case EMTPDevicePropCodePlaybackContainerIndex: + { + aValue = KMTPDefaultPlaybackIndex; + } + break; + + case EMTPDevicePropCodePlaybackPosition: + { + aValue = KMTPDefaultPlaybackPosition; + } + break; + + default: + User::Leave(KErrArgument); + } + __FLOG(_L8("GetDefaultPropertyValueL - Exit")); + } + +void CMTPPlaybackProperty::GetDefaultVolSet(TMTPPbDataVolume& aValue) + { + if(iPlaybackVolumeData == NULL) + { + aValue.SetVolume(KMTPMaxPlaybackVolume, + KMTPMinPlaybackVolume, + KMTPDefaultPlaybackVolume, + KMTPCurrentPlaybackVolume, + KMTPVolumeStep); + } + else + { + aValue = (*iPlaybackVolumeData); + } + } + +void CMTPPlaybackProperty::SetDefaultVolSetL(const TMTPPbDataVolume& aValue) + { + if(iPlaybackVolumeData == NULL) + { + iPlaybackVolumeData = new (ELeave) TMTPPbDataVolume(aValue); + } + else + { + (*iPlaybackVolumeData) = aValue; + } + } + +void CMTPPlaybackProperty::GetDefaultPropertyValueL(TMTPPbCtrlData& aValue) + { + __FLOG(_L8("GetDefaultPropertyValueL - Entry")); + __ASSERT_DEBUG((aValue.iOptCode == EMTPOpCodeResetDevicePropValue), Panic(EMTPPBArgumentErr)); + + switch(aValue.iDevPropCode) + { + case EMTPDevicePropCodePlaybackRate: + { + TInt32 val; + GetDefaultPropertyValueL(aValue.iDevPropCode, val); + aValue.iPropValInt32.Set(val); + } + break; + + case EMTPDevicePropCodeVolume: + case EMTPDevicePropCodePlaybackObject: + case EMTPDevicePropCodePlaybackContainerIndex: + case EMTPDevicePropCodePlaybackPosition: + { + TUint32 val; + GetDefaultPropertyValueL(aValue.iDevPropCode, val); + aValue.iPropValUint32.Set(val); + } + break; + + default: + User::Leave(KErrArgument); + } + __FLOG(_L8("GetDefaultPropertyValueL - Exit")); + } + +TBool CMTPPlaybackProperty::IsDefaultPropertyValueL(const TMTPPbCtrlData& aValue) const + { + __FLOG(_L8("EqualToDefaultPropertyValueL - Entry")); + + TInt result(EFalse); + + switch(aValue.iDevPropCode) + { + case EMTPDevicePropCodePlaybackRate: + { + if(aValue.iPropValInt32.Value() == KMTPDefaultPlaybackRate) + { + result = ETrue; + } + } + break; + + case EMTPDevicePropCodeVolume: + { + if(iPlaybackVolumeData == NULL) + { + if(aValue.iPropValUint32.Value() == KMTPDefaultPlaybackVolume) + { + result = ETrue; + } + } + else + { + if(aValue.iPropValUint32.Value() == iPlaybackVolumeData->DefaultVolume()) + { + result = ETrue; + } + } + } + break; + + case EMTPDevicePropCodePlaybackObject: + { + if(aValue.iPropValUint32.Value() == KMTPDefaultPlaybackObject) + { + result = ETrue; + } + } + break; + + case EMTPDevicePropCodePlaybackContainerIndex: + { + if(aValue.iPropValUint32.Value() == KMTPDefaultPlaybackIndex) + { + result = ETrue; + } + } + break; + + case EMTPDevicePropCodePlaybackPosition: + { + if(aValue.iPropValUint32.Value() == KMTPDefaultPlaybackPosition) + { + result = ETrue; + } + } + break; + + default: + User::Leave(KErrArgument); + } + + __FLOG(_L8("EqualToDefaultPropertyValueL - Exit")); + + return result; + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldp.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldp.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,45 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = 0x2002EA98; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x102827AD; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x2002EA99; + version_no = 1; + display_name = "MTP Playback Control Data Provider plug-in."; + default_data = ""; + opaque_data = ""; + } + }; + } + }; + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldp_config.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldp_config.rss Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,33 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include + +RESOURCE MTP_DATA_PROVIDER dpConfig + { + type = KMTPDataProviderTypeECOM; + major_version = 1; + object_enumeration_persistent = 0; + supported_modes = KMTPModeMTP; + server_name = ""; + server_image_name = ""; + opaque_resource = 0; + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldpimplproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldpimplproxy.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,40 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "cmtpplaybackcontroldp.h" +#include + +// Define the interface UIDs +static const TImplementationProxy ImplementationTable[] = + { + { + {0x2002EA99}, (TProxyNewLPtr)(CMTPPlaybackControlDataProvider::NewL) + } + }; + +/** +ECOM plugin entry point +*/ +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + diff -r 453dfc402455 -r 0aa8cc770c8a mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldpprocessor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtpplaybackcontroldp/src/mtpplaybackcontroldpprocessor.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,95 @@ +// Copyright (c) 2010 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: +// + +/** + @file + @internalComponent +*/ + +#include "mtpplaybackcontroldpprocessor.h" +#include "cmtprequestprocessor.h" +#include "cmtppbcgetdevicepropdesc.h" +#include "cmtppbcgetdevicepropvalue.h" +#include "cmtppbcsetdevicepropvalue.h" +#include "cmtppbcresetdevicepropvalue.h" +#include "cmtppbcskip.h" +#include "cmtprequestunknown.h" + +typedef MMTPRequestProcessor*(*TMTPPlaybackRequestProcessorCreateFunc)( + MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider); + +/** +Defines an entry which maps from operation code to the request processor + +@internalComponent +*/ +typedef struct + { + TUint16 iOperationCode; + TMTPPlaybackRequestProcessorCreateFunc iCreateFunc; + } TMTPPlaybackRequestProcessorEntry; + +/** +Playback control data provider mapping table from request ID to factory method of the request processor +*/ +static const TMTPPlaybackRequestProcessorEntry KMTPRequestProcessorTable[] = + { + {EMTPOpCodeGetDevicePropDesc, CMTPPbcGetDevicePropDesc::NewL}, + {EMTPOpCodeGetDevicePropValue, CMTPPbcGetDevicePropValue::NewL}, + {EMTPOpCodeSetDevicePropValue, CMTPPbcSetDevicePropValue::NewL}, + {EMTPOpCodeResetDevicePropValue, CMTPPbcResetDevicePropValue::NewL}, + {EMTPOpCodeSkip, CMTPPbcSkip::NewL}, + }; + +/** +Create a request processor that matches the request +@param aPlugin The reference to the data provider plugin +@param aFramework The reference to the data provider framework +@param aRequest The request to be processed +@param aConnection The connection from which the request comes from +@return a pointer to the request processor +*/ +MMTPRequestProcessor* MTPPlaybackControlDpProcessor::CreateL( + MMTPDataProviderFramework& aFramework, + const TMTPTypeRequest& aRequest, + MMTPConnection& aConnection, + CMTPPlaybackControlDataProvider& aDataProvider) + { + TMTPPlaybackRequestProcessorCreateFunc createFunc = NULL; + TUint16 operationCode = aRequest.Uint16(TMTPTypeRequest::ERequestOperationCode); + TInt count = sizeof(KMTPRequestProcessorTable) / sizeof(TMTPRequestProcessorEntry); + for(TInt i = 0; i < count; i++) + { + if(KMTPRequestProcessorTable[i].iOperationCode == operationCode) + { + createFunc = KMTPRequestProcessorTable[i].iCreateFunc; + break; + } + } + + if(!createFunc) + { + return CMTPRequestUnknown::NewL(aFramework, aConnection); + } + else + { + return (*createFunc)(aFramework, aConnection, aDataProvider); + } + } + + + diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/common/inc/mtpdatacapture.h --- a/mtpfws/mtpfw/common/inc/mtpdatacapture.h Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/common/inc/mtpdatacapture.h Tue Aug 31 16:03:15 2010 +0300 @@ -23,13 +23,7 @@ // MTP data caputre defines -#if defined(__WINS__) _LIT(KRequestCaptureRootDir, "c:\\test\\data\\"); -#elif defined(__SERIES60_) -_LIT(KRequestCaptureRootDir, "f:\\test\\data\\"); -#else -_LIT(KRequestCaptureRootDir, "e:\\test\\data\\"); -#endif _LIT(KRequestCaptureDirPrefix, "testcase"); _LIT(KIToRDataPhaseOutputFile, "i_to_r_dataphase.dat"); diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/conf/mtpframework.confml Binary file mtpfws/mtpfw/conf/mtpframework.confml has changed diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/daemon/client/src/rmtpclient.cpp --- a/mtpfws/mtpfw/daemon/client/src/rmtpclient.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/daemon/client/src/rmtpclient.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -117,15 +117,6 @@ // Wait for the server start up to complete. User::WaitForRequest(status); ret = (server.ExitType() == EExitPanic) ? KErrGeneral : status.Int(); -#ifdef __WINSCW__ - if ( server.ExitType() == EExitPanic ) - { - TExitCategoryName exitCategory = server.ExitCategory(); - TInt exitReason = server.ExitReason(); - RDebug::Print( _L("The exit category is \"%S\""), &exitCategory ); - RDebug::Print( _L("The exit Reason is %d"), exitReason ); - } -#endif //__WINSCW__ server.Close(); } diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/daemon/server/group/mtpserver.mmp --- a/mtpfws/mtpfw/daemon/server/group/mtpserver.mmp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/daemon/server/group/mtpserver.mmp Tue Aug 31 16:03:15 2010 +0300 @@ -22,14 +22,9 @@ CAPABILITY CommDD PowerMgmt ReadDeviceData WriteDeviceData TrustedUI ProtServ NetworkControl NetworkServices LocalServices ReadUserData WriteUserData -#ifdef WINSCW -//EPOCHEAPSIZE 0x1400000 0x1400000 // 20MB EPOCHEAPSIZE 0x80000 0x800000 // 8MB -#else -EPOCHEAPSIZE 0x80000 0x800000 // 8MB -#endif -EPOCSTACKSIZE 0x5000 +EPOCSTACKSIZE 0x14000 MW_LAYER_SYSTEMINCLUDE_SYMBIAN diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/dataproviders/devdp/group/bld.inf --- a/mtpfws/mtpfw/dataproviders/devdp/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/dataproviders/devdp/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -30,10 +30,9 @@ #endif mtpdevice.ico /epoc32/data/z/private/102827a2/mtpdevice.ico -mtpdevice.ico /epoc32/winscw/c/private/102827a2/mtpdevice.ico ../inc/mtpdevicedp_config.rh SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(mtp/mtpdevicedp_config.rh) -mtp_devicedp.iby /epoc32/rom/include/mtp_devicedp.iby +mtp_devicedp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_devicedp.iby) PRJ_MMPFILES mtpdevicedp.mmp diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/dataproviders/devdp/group/mtp_devicedp.iby --- a/mtpfws/mtpfw/dataproviders/devdp/group/mtp_devicedp.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/dataproviders/devdp/group/mtp_devicedp.iby Tue Aug 31 16:03:15 2010 +0300 @@ -17,7 +17,7 @@ #ifndef MTP_DEVICEDP_IBY #define MTP_DEVICEDP_IBY -#if !defined(SYMBIAN_EXCLUDE_MTP) +#if defined(__MTP_PROTOCOL_SUPPORT) // MTP Device Data Provider @@ -30,6 +30,6 @@ -#endif //SYMBIAN_EXCLUDE_MTP +#endif //__MTP_PROTOCOL_SUPPORT #endif //MTP_DEVICEDP_IBY diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/dataproviders/devdp/inc/cmtpgetdeviceinfo.h --- a/mtpfws/mtpfw/dataproviders/devdp/inc/cmtpgetdeviceinfo.h Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/dataproviders/devdp/inc/cmtpgetdeviceinfo.h Tue Aug 31 16:03:15 2010 +0300 @@ -57,7 +57,7 @@ void SetSupportedOperationsL(CMTPDataProviderController& aDpController); void SetSupportedEventsL(CMTPDataProviderController& aDpController); - void SetSupportedDevicePropertiesL(); + void SetSupportedDevicePropertiesL(CMTPDataProviderController& aDpController); void SetSupportedCaptureFormatsL(CMTPDataProviderController& aDpController); void SetSupportedPlaybackFormatsL(CMTPDataProviderController& aDpController); diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/dataproviders/devdp/src/cmtpdevicedatastore.cpp --- a/mtpfws/mtpfw/dataproviders/devdp/src/cmtpdevicedatastore.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/dataproviders/devdp/src/cmtpdevicedatastore.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -35,11 +35,7 @@ // Class constants. __FLOG_STMT(_LIT8(KComponent,"DeviceDataStore");) -#ifdef __WINS__ -_LIT( KFileName, "c:\\private\\102827a2\\mtpdevice.ico"); -#else _LIT( KFileName, "z:\\private\\102827a2\\mtpdevice.ico"); -#endif // Device property datastore constants. diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetdeviceinfo.cpp --- a/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetdeviceinfo.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetdeviceinfo.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -165,7 +165,7 @@ CMTPDataProviderController& dps(iSingletons.DpController()); SetSupportedOperationsL(dps); SetSupportedEventsL(dps); - SetSupportedDevicePropertiesL(); + SetSupportedDevicePropertiesL(dps); SetSupportedCaptureFormatsL(dps); SetSupportedPlaybackFormatsL(dps); @@ -243,11 +243,42 @@ /** Populates the supported device properties field in the device info data set */ -void CMTPGetDeviceInfo::SetSupportedDevicePropertiesL() +void CMTPGetDeviceInfo::SetSupportedDevicePropertiesL(CMTPDataProviderController& aDpController) { - __FLOG(_L8("SetSupportedDevicePropertiesL - Entry")); - iDeviceInfo->SetL(CMTPTypeDeviceInfo::EDevicePropertiesSupported, - iDpSingletons.DeviceDataStore().GetSupportedDeviceProperties()); + __FLOG(_L8("SetSupportedDevicePropertiesL - Entry")); + TInt count = aDpController.Count(); + RArray supportedOperations(KMTPArrayGranularity); + CleanupClosePushL(supportedOperations); + const TInt32 KMTPImplementationUidDeviceDp(0x102827AF); + const TInt32 KMTPImplementationUidFileDp(0x102827B0); + const TInt32 KMTPImplementationUidProxyDp(0x102827B1); + const TInt32 KMTPFrameworkDpCount(3); + TBool bOnlyInternalDpLoad = count > KMTPFrameworkDpCount ? EFalse : ETrue; + while(count--) + { + TInt32 uid = aDpController.DataProviderByIndexL(count).ImplementationUid().iUid; + // The filter is added for licencee's request which will filtrate the symbian's internal + // dp's supported enhance mode operations to make licencee's dp work. + // Every new internal dp need add it's implementation id here to filtrate and increase + // the KMTPFrameworkDpCount number. + if ((uid == KMTPImplementationUidDeviceDp || + uid == KMTPImplementationUidFileDp || + uid == KMTPImplementationUidProxyDp) && !bOnlyInternalDpLoad) + { + AddToArrayWithFilterL(supportedOperations, aDpController.DataProviderByIndexL(count).SupportedCodes(EDeviceProperties)); + } + else + { + AddToArrayL(supportedOperations, aDpController.DataProviderByIndexL(count).SupportedCodes(EDeviceProperties)); + } + } + + CMTPTypeArray* mtpOperationsArray = CMTPTypeArray::NewL(EMTPTypeAUINT16, supportedOperations); + CleanupStack::PopAndDestroy(&supportedOperations); + CleanupStack::PushL(mtpOperationsArray); //unnecessary if Set operation below does not leave, + iDeviceInfo->SetL(CMTPTypeDeviceInfo::EDevicePropertiesSupported, *mtpOperationsArray); + CleanupStack::PopAndDestroy(mtpOperationsArray); + __FLOG(_L8("SetSupportedDevicePropertiesL - Exit")); } @@ -385,6 +416,13 @@ TInt count(aSrcArray.Count()); for (TInt i(0); (i < count); i++) { + // Apply filter + if(aSrcArray[i] == EMTPOpCodeResetDevicePropValue) + { + __FLOG_VA((_L8("Filter ignored operation: %d"), aSrcArray[i])); + continue; + } + TInt err(aDestArray.InsertInOrder(aSrcArray[i])); if ((err != KErrNone) && (err != KErrAlreadyExists)) { diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/group/bld.inf --- a/mtpfws/mtpfw/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -31,14 +31,10 @@ PRJ_EXPORTS // repositories exported for TechView and testing 10282FCC_ARMV5.cre /epoc32/data/z/private/10202be9/10282fcc.cre -10282FCC_WINSCW.cre /epoc32/release/winscw/udeb/z/private/10202be9/10282fcc.cre -10282FCC_WINSCW.cre /epoc32/release/winscw/urel/z/private/10202be9/10282fcc.cre backup_registration.xml /epoc32/data/z/private/102827a2/backup_registration.xml -backup_registration.xml /epoc32/release/winscw/udeb/z/private/102827a2/backup_registration.xml -backup_registration.xml /epoc32/release/winscw/urel/z/private/102827a2/backup_registration.xml // ConfML Files ../conf/mtpframework.confml MW_LAYER_EXPORTS_CONFML(mtpframework.confml) ../conf/mtpframework_10282fcc.crml MW_LAYER_EXPORTS_CRML(mtpframework_10282fcc.crml) -mtp_framework.iby /epoc32/rom/include/mtp_framework.iby +mtp_framework.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_framework.iby) diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/group/mtp_framework.iby --- a/mtpfws/mtpfw/group/mtp_framework.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/group/mtp_framework.iby Tue Aug 31 16:03:15 2010 +0300 @@ -18,7 +18,7 @@ #include -#if !defined(SYMBIAN_EXCLUDE_MTP) +#if defined(__MTP_PROTOCOL_SUPPORT) // MTP Data Types Library @@ -64,6 +64,6 @@ //MTP device icon property file data=EPOCROOT##epoc32\data\Z\private\102827a2\mtpdevice.ico private\102827a2\mtpdevice.ico -#endif // SYMBIAN_EXCLUDE_MTP +#endif // __MTP_PROTOCOL_SUPPORT #endif // MTP_FRAMEWORK_IBY diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/inc/cmtpconnection.h --- a/mtpfws/mtpfw/inc/cmtpconnection.h Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/inc/cmtpconnection.h Tue Aug 31 16:03:15 2010 +0300 @@ -147,6 +147,7 @@ void EnqueueEvent(CMTPEventLink* aLink); void DequeueEvent(CMTPEventLink* aLink); + void DequeueAllEvents(); /** * This method define and attach the property for publishing connection state diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/inc/mtpcommonconst.h --- a/mtpfws/mtpfw/inc/mtpcommonconst.h Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/inc/mtpcommonconst.h Tue Aug 31 16:03:15 2010 +0300 @@ -22,7 +22,7 @@ #define MTPCOMMONCONST_H #ifdef __SERIES60_ -#include +#include #else //Following is copied from 'UiklafInternalCRKeys.h', which is //exported from S60 sdk, in Symbian CBR, this file does not exist. diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/src/cmtpconnection.cpp --- a/mtpfws/mtpfw/src/cmtpconnection.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/src/cmtpconnection.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -82,17 +82,9 @@ __FLOG(_L8("~CMTPConnection - Entry")); CloseAllSessions(); - // Remove any events not associated - // with a session - TSglQueIter iter(iEventQ); - iter.SetToFirst(); - CMTPEventLink* link = NULL; - - while ((link = iter++) != NULL) - { - delete link; - } - + //remove all events + DequeueAllEvents(); + iSessions.ResetAndDestroy(); if (iTransportConnection != NULL) @@ -667,9 +659,16 @@ DequeueEvent(iEventQ.First()); if (iPendingEventCount > 0) { - // Forward the event to the transport connection layer. - __FLOG(_L8("Sending queued event")); - iTransportConnection->SendEventL(iEventQ.First()->iEvent); + if (NULL != iTransportConnection) + { + // Forward the event to the transport connection layer. + __FLOG(_L8("Sending queued event")); + iTransportConnection->SendEventL(iEventQ.First()->iEvent); + } + else + { + DequeueAllEvents(); + } } __FLOG(_L8("SendEventCompleteL - Exit")); @@ -1046,6 +1045,19 @@ __FLOG(_L8("RemoveEventsForSession - Exit")); } +void CMTPConnection::DequeueAllEvents() + { + TSglQueIter iter(iEventQ); + iter.SetToFirst(); + CMTPEventLink* link = NULL; + + while ((link = iter++) != NULL) + { + delete link; + } + iPendingEventCount = 0; + } + void CMTPConnection::DequeueEvent(CMTPEventLink* aLink) { iEventQ.Remove(*aLink); diff -r 453dfc402455 -r 0aa8cc770c8a mtpfws/mtpfw/src/cmtpframeworkconfig.cpp --- a/mtpfws/mtpfw/src/cmtpframeworkconfig.cpp Thu Aug 19 10:44:03 2010 +0300 +++ b/mtpfws/mtpfw/src/cmtpframeworkconfig.cpp Tue Aug 31 16:03:15 2010 +0300 @@ -174,9 +174,9 @@ const TInt KStartupInitValue = 1; iAbnormalDownValue = 0; TInt err(iRepository->Get(EAbnormalDown, iAbnormalDownValue)); - if ( KErrNone != err ) + if ((KErrNone != err ) && (KErrNotFound != err)) { - iAbnormalDownValue = 0; + User::Leave(err); } //Save the AbnormalDown state to ETrue diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpcontroller/group/bld.inf --- a/mtptransports/mtpcontroller/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpcontroller/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -22,10 +22,9 @@ PRJ_PLATFORMS ARMV5 -WINSCW PRJ_EXPORTS -mtp_controller.iby /epoc32/rom/include/mtp_controller.iby +mtp_controller.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_controller.iby) PRJ_MMPFILES mtpcontroller.mmp diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpcontroller/group/mtp_controller.iby --- a/mtptransports/mtpcontroller/group/mtp_controller.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpcontroller/group/mtp_controller.iby Tue Aug 31 16:03:15 2010 +0300 @@ -16,13 +16,13 @@ #ifndef MTP_CONTROLLER_IBY #define MTP_CONTROLLER_IBY -#if !defined (SYMBIAN_EXCLUDE_MTP) +#if defined (__MTP_PROTOCOL_SUPPORT) #include //MTP Controller LOCOD service plugin ECOM_PLUGIN(mtpcontroller.dll, mtpcontroller.rsc) -#endif// SYMBIAN_EXCLUDE_MTP +#endif// __MTP_PROTOCOL_SUPPORT #endif// MTP_CONTROLLER_IBY diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpptpiptransport/group/mtp_ptpip.iby --- a/mtptransports/mtpptpiptransport/group/mtp_ptpip.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpptpiptransport/group/mtp_ptpip.iby Tue Aug 31 16:03:15 2010 +0300 @@ -16,7 +16,7 @@ #ifndef MTP_PTPIP_IBY #define MTP_PTPIP_IBY -#if !defined (SYMBIAN_EXCLUDE_MTP) && !defined(SYMBIAN_EXCLUDE_PTPTIP) +#if defined (__MTP_PROTOCOL_SUPPORT) && !defined(SYMBIAN_EXCLUDE_PTPTIP) #include @@ -30,7 +30,7 @@ ECOM_PLUGIN(ptpipplugin.dll, ptpipplugin.rsc) -#endif // SYMBIAN_EXCLUDE_MTP +#endif // __MTP_PROTOCOL_SUPPORT #endif // MTP_PTPIP_IBY diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpptpiptransport/ptpipdatatypes/group/bld.inf --- a/mtptransports/mtpptpiptransport/ptpipdatatypes/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpptpiptransport/ptpipdatatypes/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -21,7 +21,6 @@ PRJ_PLATFORMS ARMV5 -winscw PRJ_EXPORTS diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpptpiptransport/ptpipplugin/group/bld.inf --- a/mtptransports/mtpptpiptransport/ptpipplugin/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpptpiptransport/ptpipplugin/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -21,7 +21,6 @@ PRJ_PLATFORMS ARMV5 -winscw PRJ_EXPORTS diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpusbtransport/group/bld.inf --- a/mtptransports/mtpusbtransport/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpusbtransport/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -28,5 +28,5 @@ #include "../usbsic_cc/group/bld.inf" PRJ_EXPORTS -mtp_usbsic.iby /epoc32/rom/include/mtp_usbsic.iby +mtp_usbsic.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_usbsic.iby) diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpusbtransport/group/mtp_usbsic.iby --- a/mtptransports/mtpusbtransport/group/mtp_usbsic.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpusbtransport/group/mtp_usbsic.iby Tue Aug 31 16:03:15 2010 +0300 @@ -16,7 +16,7 @@ #ifndef MTP_USBSIC_IBY #define MTP_USBSIC_IBY -#if !defined (SYMBIAN_EXCLUDE_MTP) && !defined(SYMBIAN_EXCLUDE_USB) +#if defined (__MTP_PROTOCOL_SUPPORT) && defined(__USB) #include @@ -29,7 +29,7 @@ //MTP USB SIC transport plugin ECOM_PLUGIN(mtpusbsicimp.dll, mtpusbsicimp.rsc) -#endif // SYMBIAN_EXCLUDE_MTP +#endif // __MTP_PROTOCOL_SUPPORT && __USB #endif // MTP_USBSIC_IBY diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpusbtransport/usbsic_cc/group/bld.inf --- a/mtptransports/mtpusbtransport/usbsic_cc/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpusbtransport/usbsic_cc/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -25,6 +25,5 @@ PRJ_EXPORTS PRJ_MMPFILES -#ifndef WINSCW mtpusbsiccc.mmp -#endif + diff -r 453dfc402455 -r 0aa8cc770c8a mtptransports/mtpusbtransport/usbsic_imp/group/bld.inf --- a/mtptransports/mtpusbtransport/usbsic_imp/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/mtptransports/mtpusbtransport/usbsic_imp/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -25,6 +25,5 @@ PRJ_EXPORTS PRJ_MMPFILES -#ifndef WINSCW mtpusbsicimp.mmp -#endif + diff -r 453dfc402455 -r 0aa8cc770c8a obex/obexprotocol/group/obexprotocol.iby --- a/obex/obexprotocol/group/obexprotocol.iby Thu Aug 19 10:44:03 2010 +0300 +++ b/obex/obexprotocol/group/obexprotocol.iby Tue Aug 31 16:03:15 2010 +0300 @@ -63,7 +63,7 @@ REM *** Now for things which should only be included if the device REM *** supports USB, to save ROM space... -#ifdef SYMBIAN_EXCLUDE_USB +#ifndef __USB REM OBEX USB transport is not included in this ROM as it depends on USB #else OBEX_PLUGIN(obexusbtransportcontroller.dll,1020de87.rsc) @@ -72,7 +72,7 @@ REM *** Now for things which should only be included if the device REM *** supports bluetooth, to save ROM space... -#ifdef SYMBIAN_EXCLUDE_BLUETOOTH +#ifndef __BT REM OBEX Bluetooth transport is not included in this ROM as it depends on BLUETOOTH #else OBEX_PLUGIN(obexbtrfcommtransportcontroller.dll,1020e043.rsc) diff -r 453dfc402455 -r 0aa8cc770c8a package_definition.xml --- a/package_definition.xml Thu Aug 19 10:44:03 2010 +0300 +++ b/package_definition.xml Tue Aug 31 16:03:15 2010 +0300 @@ -1,56 +1,98 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 453dfc402455 -r 0aa8cc770c8a package_map.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/package_map.xml Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,1 @@ + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dialup_connection_status_api/dialup_connection_status_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dialup_connection_status_api/dialup_connection_status_api.metaxml Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,17 @@ + + + Dial-up Connection Status API + provides dial-up connection status info. + c++ + localconnectivityservice + + + + + + + + no + no + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dialup_connection_status_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dialup_connection_status_api/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: Dial-up Connection Status API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/dundomainpskeys.h MW_LAYER_PLATFORM_EXPORT_PATH(dundomainpskeys.h) diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dialup_connection_status_api/group/dialup_connection_status_api.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dialup_connection_status_api/group/dialup_connection_status_api.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component dialup_connection_status_api + +source \sf\mw\remoteconn\localconnectivityservice\dialup_connection_status_api + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dialup_connection_status_api/inc/dundomainpskeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dialup_connection_status_api/inc/dundomainpskeys.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2002-2006 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: +* DUN Server P&S key definitions +* +*/ + + +#ifndef DUN_DOMAIN_PS_KEYS_H +#define DUN_DOMAIN_PS_KEYS_H + +/** +* PubSub Uid of dialup connection status +*/ +const TUid KPSUidDialupConnStatus = {0x0100387d}; // UID of DUN server + +/** +* Dialup connection status +* +* Possible integer values: +* 0 (EDunUndefined) Value is not set +* 1 (EDunInactive) Dun is inactive (no listening or active plugins) +* 2 (EDunActive) Dun is active (at least one active plugin) +*/ + +const TUint KDialupConnStatus = 0x00000001; + +// Enumeration for DUN connection status +enum TDialupConnStatus + { + EDialupUndefined, + EDialupInactive, + EDialupActive + }; + +#endif // DUN_DOMAIN_PS_KEYS_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dun_secondary_display_notification_api/dun_secondary_display_notification_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dun_secondary_display_notification_api/dun_secondary_display_notification_api.metaxml Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,17 @@ + + + DUN Secondary Display Notification API + defines message IDs for showing message on secondary display + c++ + localconnectivityservice + + + + + + + + no + no + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dun_secondary_display_notification_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dun_secondary_display_notification_api/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2007 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: File that exports the files belonging to +* DUN Secondary Display Notification API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/secondarydisplay/dunsecondarydisplayapi.h MW_LAYER_PLATFORM_EXPORT_PATH(SecondaryDisplay/dunsecondarydisplayapi.h) diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dun_secondary_display_notification_api/group/dun_secondary_display_notification_api.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dun_secondary_display_notification_api/group/dun_secondary_display_notification_api.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component dun_secondary_display_notification_api + +source \sf\mw\remoteconn\localconnectivityservice\dun_secondary_display_notification_api + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/dun_secondary_display_notification_api/inc/secondarydisplay/dunsecondarydisplayapi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/dun_secondary_display_notification_api/inc/secondarydisplay/dunsecondarydisplayapi.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2007 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: Contains dialog index for cover UI. +* +*/ + + +#ifndef DUNSECONDARYDISPLAYAPI_H +#define DUNSECONDARYDISPLAYAPI_H + +#include + +// Category (dunutils.dll) +const TUid KDunNoteCategory = { 0x101F6E2A }; + +enum TSecondaryDisplayDunDialogs + { + ECmdNone, + ECmdMaxNumber + }; + +#endif // DUNSECONDARYDISPLAYAPI_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: Generic HID API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/hidcollection.h MW_LAYER_PLATFORM_EXPORT_PATH(hidcollection.h) +../inc/hidfield.h MW_LAYER_PLATFORM_EXPORT_PATH(hidfield.h) +../inc/hidgeneric.h MW_LAYER_PLATFORM_EXPORT_PATH(hidgeneric.h) +../inc/hidinterfaces.h MW_LAYER_PLATFORM_EXPORT_PATH(hidinterfaces.h) +../inc/hidreportroot.h MW_LAYER_PLATFORM_EXPORT_PATH(hidreportroot.h) +../inc/hidtranslate.h MW_LAYER_PLATFORM_EXPORT_PATH(hidtranslate.h) +../inc/hidvalues.h MW_LAYER_PLATFORM_EXPORT_PATH(hidvalues.h) diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/group/generic_hid_api.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/group/generic_hid_api.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component generic_hid_api + +source \sf\mw\remoteconn\localconnectivityservice\generic_hid_api + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidcollection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidcollection.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,272 @@ +/* +* Copyright (c) 2005-2007 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: Declares main application class. +* +*/ + + +#ifndef C_COLLECTION_H +#define C_COLLECTION_H + +#include + +class CField; + + +/** + * Collection of HID report descriptor + * A CCollection represents an individual collection within a HID + * report descriptor. Each collection may have a number of associated + * report fields (CField objects) and a number of child collection + * objects. The collections within a HID report descriptor form a tree + * structure, with a CReportRoot collection at the root. The tree is + * generated by CParser. + * + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CCollection : public CBase + { + +public: + + /** + * An enumerations giving the possible types of collection, as + * given in "USB Device Class Definition for Human Interface + * Devices (HID)", Firmware Specification, Version 1.11, USB + * Implementers' Forum, June 2001. + * + * Note that a TUint32 is used for CCollection::iType, as it is + * possible to have a vendor defined collection type that isn't + * included in this list. + */ + enum TType + { + EPhysical = 0x00, //!< Physical (group of axes) + EApplication = 0x01, //!< Application (mouse,keyboard) + ELogical = 0x02, //!< Logical (interrelated data) + EReport = 0x03, //!< Report + ENamedArray = 0x04, //!< NamedArray + EUsageSwitch = 0x05, //!< UsageSwitch + EUsageModifier = 0x06 //!< UsageModifier + }; + + static CCollection* NewL(); + static CCollection* NewLC(); + + /** + * Destructor. + */ + virtual ~CCollection(); + + /** + * Get collection type + * + * @since S60 v5.0 + * @return The type for this collection item + */ + IMPORT_C TUint32 Type() const; + + /** + * Get usagepage + * + * @since S60 v5.0 + * @return The usage page for this collection + */ + IMPORT_C TInt UsagePage() const; + + /** + * Get usagepage + * + * @since S60 v5.0 + * @return The usage page for this collection + */ + IMPORT_C TInt Usage() const; + + /** + * Get number of collections + * + * @since S60 v5.0 + * @return The number of collections that have been created so far + */ + IMPORT_C TInt CollectionCount() const; + + /** + * Gets numbers of field stored in collection + * + * @since S60 v5.0 + * @return The number of fields stored in for the current collection + */ + IMPORT_C TInt FieldCount() const; + + /** + * Returns a pointer to a specific collection from the list of collections + * + * @since S60 v5.0 + * @param aIndex The index of the required collection + * @return The number of fields stored in for the current collection. + * NULL if there are no collection object at the secified index + */ + IMPORT_C const CCollection* CollectionByIndex(TInt aIndex) const; + + /** + * Returns a pointer to the field object at the given index within the field + * list + * + * @since S60 v5.0 + * @param aIndex The offset within the current field list + * @return A pointer to the specified field object + * NULL if there is no field object at the specified index + */ + IMPORT_C const CField* FieldByIndex(TInt aIndex) const; + + /** + * Check if collection type is physical + * + * @since S60 v5.0 + * @return true if physical + */ + IMPORT_C TBool IsPhysical() const; + + /** + * Check if collection type is application + * + * @since S60 v5.0 + * @return true if application + */ + IMPORT_C TBool IsApplication() const; + + /** + * Check if collection type is logical + * + * @since S60 v5.0 + * @return true if logical + */ + IMPORT_C TBool IsLogical() const; + + /** + * Check if collection type is report + * + * @since S60 v5.0 + * @return true if report + */ + IMPORT_C TBool IsReport() const; + + /** + * Check if collection type is name array + * + * @since S60 v5.0 + * @return true if named array + */ + IMPORT_C TBool IsNamedArray() const; + + /** + * Check if collection type is usage switch + * + * @since S60 v5.0 + * @return true if is usage switch + */ + IMPORT_C TBool IsUsageSwitch() const; + + /** + * Check if collection type is usage modifier + * + * @since S60 v5.0 + * @return true if usage modifier + */ + IMPORT_C TBool IsUsageModifier() const; + +public: + + /** + * Set Collection type + * + * @since S60 v5.0 + * @return None + */ + void SetType(TUint32 aType); + + /** + * Set usage page + * + * @since S60 v5.0 + * @return None + */ + void SetUsagePage(TInt aUsagePage); + + /** + * Set usage + * + * @since S60 v5.0 + * @return None + */ + void SetUsage(TInt aUsage); + + /** + * Called when a new collection object has been encountered in + * the report descriptor. This creates a new CCollection object + * and adds it to the current list + * + * @since S60 v5.0 + * @return None + */ + CCollection* AddCollectionL(); + + /** + * Called when a new field object has been encountered in the + * report descriptor. This creates a new field object and adds it + * the the current list + * + * @since S60 v5.0 + * @return A pointer to the new field object + */ + CField* AddFieldL(); + +protected: + + CCollection(); + void ConstructL(); + +private: + + /** + * Collection type + */ + TUint32 iType; + + /** + * Usage page + */ + TInt iUsagePage; + + /** + * Usage + */ + TInt iUsage; + + /** + * List of collections for the report descriptor + */ + RPointerArray iCollections; + + /** + * List of fields in the current collection + */ + RPointerArray iFields; + + }; + +#endif // C_COLLECTION_H + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidfield.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidfield.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,732 @@ +/* +* Copyright (c) 2004-2007 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: HID field descriptor definition +* +*/ + +#ifndef C_FIELD_H +#define C_FIELD_H + + +#include + + +const TInt KFieldAttributeConstant = 1<<0; //!< Data (0) or Constant (1) +const TInt KFieldAttributeVariable = 1<<1; //!< Array (0) or Variable (1) +const TInt KFieldAttributeRelative = 1<<2; //!< Absolute (0) or Relative (1) +const TInt KFieldAttributeWrap = 1<<3; //!< No wrap (0) or Wrap (1) +const TInt KFieldAttributeNonLinear = 1<<4; //!< Linear (0) or Non-linear (1) +const TInt KFieldAttributeNoPreferred = 1<<5; //!< Preferred state (0) or not (1) +const TInt KFieldAttributeNullState = 1<<6; //!< No null position (0) or null state (1) +const TInt KFieldAttributeVolatile = 1<<7; //!< Non-volatile (0) or volatile (1) +const TInt KFieldAttributeBufferedBytes = 1<<8; //!< Bit field (0) or buffered bytes (1) + +const TInt KSizeOfByte = 8; +/** + * HID report field presentation + * Represents an individual field in a HID report, ie. the attributes + * of an input, output or feature Main item defined in the HID report + * descriptor. + * + * The CField contains information such as the usage IDs sent in the + * the report, the type of the report (input, output or feature) and + * the logical range. + * + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CField : public CBase + { +public: + enum TType + { + EInput, //!< Input report + EOutput, //!< Output report + EFeature //!< Feature report + }; + + + +public: + static CField* NewL(); + static CField* NewLC(); + + /** + * Destructor. + */ + virtual ~CField(); + +public: + // Accessors: + + /** + * Set Report root + * + * @since S60 v5.0 + * @return None + */ + IMPORT_C TInt UsagePage() const; + + /** + * Return report id + * + * @since S60 v5.0 + * @return report id + */ + IMPORT_C TInt ReportId() const; + + /** + * Return offset + * + * @since S60 v5.0 + * @return offset + */ + IMPORT_C TInt Offset() const; + + /** + * Return size + * + * @since S60 v5.0 + * @return None + */ + IMPORT_C TInt Size() const; + + /** + * Return count + * + * @since S60 v5.0 + * @return count + */ + IMPORT_C TInt Count() const; + + /** + * Return logical minimium + * + * @since S60 v5.0 + * @return Logical minimium + */ + IMPORT_C TInt LogicalMin() const; + + /** + * Return logical maximum + * + * @since S60 v5.0 + * @return logical maximum + */ + IMPORT_C TInt LogicalMax() const; + + /** + * Return usage min + * + * @since S60 v5.0 + * @return None + */ + IMPORT_C TInt UsageMin() const; + + /** + * Return usage max + * + * @since S60 v5.0 + * @return usage max + */ + IMPORT_C TInt UsageMax() const; + + /** + * Return Physical minimum + * + * @since S60 v5.0 + * @return physical minimum + */ + IMPORT_C TInt PhysicalMin() const; + + /** + * Return Physical max + * + * @since S60 v5.0 + * @return return physical max + */ + IMPORT_C TInt PhysicalMax() const; + + /** + * Return unit + * + * @since S60 v5.0 + * @return Unit + */ + IMPORT_C TInt Unit() const; + + /** + * Return unit exponent + * + * @since S60 v5.0 + * @return unit exponent + */ + IMPORT_C TInt UnitExponent() const; + + /** + * Return Designator index + * + * @since S60 v5.0 + * @return Designator Index + */ + IMPORT_C TInt DesignatorIndex() const; + + /** + * Return designator minimium + * + * @since S60 v5.0 + * @return return designator index minimium + */ + IMPORT_C TInt DesignatorMin() const; + + /** + * Return designator maximium + * + * @since S60 v5.0 + * @return designator maximium + */ + IMPORT_C TInt DesignatorMax() const; + + /** + * Return string minimum + * + * @since S60 v5.0 + * @return None + */ + IMPORT_C TInt StringMin() const; + + /** + * Return string maximum + * + * @since S60 v5.0 + * @return string maximum + */ + IMPORT_C TInt StringMax() const; + + /** + * Return string index + * + * @since S60 v5.0 + * @return string index + */ + IMPORT_C TInt StringIndex() const; + + /** + * Return attributes + * + * @since S60 v5.0 + * @return attributes + */ + IMPORT_C TUint32 Attributes() const; + + /** + * Return type + * + * @since S60 v5.0 + * @return type + */ + IMPORT_C TType Type() const; + + /** + * Return variable status + * + * @since S60 v5.0 + * @return variable status + */ + IMPORT_C TBool IsVariable() const; + + /** + * Return array status + * + * @since S60 v5.0 + * @return arrau status + */ + IMPORT_C TBool IsArray() const; + + /** + * Return data status + * + * @since S60 v5.0 + * @return data status + */ + IMPORT_C TBool IsData() const; + + /** + * Return constant status + * + * @since S60 v5.0 + * @return constant status + */ + IMPORT_C TBool IsConstant() const; + + /** + * Return input status + * + * @since S60 v5.0 + * @return input status + */ + IMPORT_C TBool IsInput() const; + + /** + * Return output status + * + * @since S60 v5.0 + * @return None + */ + IMPORT_C TBool IsOutput() const; + + /** + * Return feature status + * + * @since S60 v5.0 + * @return feature status + */ + IMPORT_C TBool IsFeature() const; + + /** + * Check if reportid is in report + * + * @since S60 v5.0 + * @param aReportId report id + * @return true if reportid is in report + */ + IMPORT_C TBool IsInReport(TInt aReportId) const; + + /** + * Check if usage exsist + * + * @since S60 v5.0 + * @param aUsage Usage id + * @return None + */ + IMPORT_C TBool HasUsage(TInt aUsage) const; + + /** + * Return usage array + * + * @since S60 v5.0 + * @return usage array + */ + IMPORT_C TArray UsageArray() const; + + /** + * Return usage + * + * @since S60 v5.0 + * @param aIndex usage array index + * @return usage + */ + IMPORT_C TInt Usage(TInt aIndex) const; + + /** + * Return usage count + * + * @since S60 v5.0 + * @return usage count + */ + IMPORT_C TInt UsageCount() const; + + /** + * Return last usage + * + * @since S60 v5.0 + * @return last usage + */ + IMPORT_C TInt LastUsage() const; + + /** + * Set type + * + * @since S60 v5.0 + * @param aType type of field + * @return None + */ + IMPORT_C void SetType(const TType& aType); + + /** + * Add usage + * + * @since S60 v5.0 + * @param aUsage usage to be added + * @return None + */ + IMPORT_C void AddUsageL(TInt aUsage); + + /** + * Clear usage list + * + * @since S60 v5.0 + * @return None + */ + IMPORT_C void ClearUsageList(); + + /** + * Set usage page + * + * @since S60 v5.0 + * @param aUsagePage usagepage to be set + * @return None + */ + IMPORT_C void SetUsagePage(TInt aUsagePage); + + /** + * Set offset + * + * @since S60 v5.0 + * @param aOffset offset to be set + * @return None + */ + IMPORT_C void SetOffset(TInt aOffset); + + /** + * Set size + * + * @since S60 v5.0 + * @param aSize size to be set + * @return None + */ + IMPORT_C void SetSize(TInt aSize); + + /** + * Set count + * + * @since S60 v5.0 + * @param aCount Count to be set + * @return None + */ + IMPORT_C void SetCount(TInt aCount); + + /** + * Set logical minimium + * + * @since S60 v5.0 + * @param aMin Logical minimium to be set + * @return None + */ + IMPORT_C void SetLogicalMin(TInt aMin); + + /** + * Set logical maximum + * + * @since S60 v5.0 + * @param aMax logical maximum to be used + * @return None + */ + IMPORT_C void SetLogicalMax(TInt aMax); + + /** + * Set usage min + * + * @since S60 v5.0 + * @param aMin usage minimium to be set. + * @return None + */ + IMPORT_C void SetUsageMin(TInt aMin); + + /** + * Set usage maximum + * + * @since S60 v5.0 + * @param aMax usage max to be set + * @return None + */ + IMPORT_C void SetUsageMax(TInt aMax); + + /** + * Set Report ID + * + * @since S60 v5.0 + * @param aReportId report id to be set + * @return None + */ + IMPORT_C void SetReportId(TInt aReportId); + + /** + * Set attributes + * + * @since S60 v5.0 + * @param aAttributes attributes to be set + * @return None + */ + IMPORT_C void SetAttributes(TUint32 aAttributes); + + /** + * Set physical minimium + * + * @since S60 v5.0 + * @param aValue physical minimium value + * @return None + */ + IMPORT_C void SetPhysicalMin(TInt aValue); + + /** + * Set Physical maximum + * + * @since S60 v5.0 + * @param aValue physical maximum value + * @return None + */ + IMPORT_C void SetPhysicalMax(TInt aValue); + + /** + * Set unit value + * + * @since S60 v5.0 + * @param aValue unit value + * @return None + */ + IMPORT_C void SetUnit(TInt aValue); + + /** + * Set unit exponent + * + * @since S60 v5.0 + * @param aValue unit exponent valut to be set + * @return None + */ + IMPORT_C void SetUnitExponent(TInt aValue); + + /** + * Set Designator index + * + * @since S60 v5.0 + * @param aValue Designator index value + * @return None + */ + IMPORT_C void SetDesignatorIndex(TInt aValue); + + /** + * Set designator minimium + * + * @since S60 v5.0 + * @param aValue designator minimum value + * @return None + */ + IMPORT_C void SetDesignatorMin(TInt aValue); + + /** + * Set designator maximium value + * + * @since S60 v5.0 + * @param aValue designator maximium value + * @return None + */ + IMPORT_C void SetDesignatorMax(TInt aValue); + + /** + * Set string minimium value + * + * @since S60 v5.0 + * @param aValue string minimium value + * @return None + */ + IMPORT_C void SetStringMin(TInt aValue); + + /** + * Set string maximum value + * + * @since S60 v5.0 + * @param aValue string maximum value to be set + * @return None + */ + IMPORT_C void SetStringMax(TInt aValue); + + /** + * Set string index + * + * @since S60 v5.0 + * @param aValue string index + * @return None + */ + IMPORT_C void SetStringIndex(TInt aValue); + + /** + * Set Logical range + * + * @since S60 v5.0 + * @param aMin logical range minimium value + * @param aMax logical range maximum value + * @return None + */ + IMPORT_C void SetLogicalRange(TInt aMin, TInt aMax); + + /** + * Set Usage range + * + * @since S60 v5.0 + * @param aMin usage range minimium value + * @param aMax usage range maximum value + * @return None + */ + IMPORT_C void SetUsageRange(TInt aMin, TInt aMax); + + /** + * Set Physical range + * + * @since S60 v5.0 + * @param aMin physical range minimium value + * @param aMax physical range maximum value + * @return None + */ + IMPORT_C void SetPhysicalRange(TInt aMin, TInt aMax); + + /** + * Set string range + * + * @since S60 v5.0 + * @param aMin string range minimium value + * @param aMax string range maximum value + * @return None + */ + IMPORT_C void SetStringRange(TInt aMin, TInt aMax); + + /** + * Set designator range + * + * @since S60 v5.0 + * @param aMin designator range minimium value + * @param aMax designator range maximum value + * @return None + */ + IMPORT_C void SetDesignatorRange(TInt aMin, TInt aMax); + +private: + CField(); + + + +private: + + /** + * Input, output or feature report + */ + TType iType; + + // For a detailed description of the use of the following members, + // see "USB Device Class Definition for Human Interface Devices + // (HID)", Firmware Specification, Version 1.11, USB Implementers' + // Forum, June 2001. + + /** + * The usage page this field is associated with (G) + */ + TInt iUsagePage; + + /** + * ID for the HID report containing this field (G) + */ + TInt iReportId; + + /** + * Field offset (in bits) from start of report + */ + TInt iPos; + + /** + * Bit size of each item in the current field (G) + */ + TInt iSize; + + /** + * Number of items in the report field (G) + */ + TInt iCount; + + /** + * Minimum extent value in logical units (G) + */ + TInt iLogicalMin; + + /** + * Maximum extent value in logical units (G) + */ + TInt iLogicalMax; + + /** + * Starting usage associated with array / bitmap (L) + */ + TInt iUsageMin; + + /** + * Ending usage associated with array / bitmap (L)L) + */ + TInt iUsageMax; + + /** + * Unit value (G) + */ + TInt iUnit; + + /** + * Value of the unit exponent in base 10 (G) + */ + TInt iUnitExponent; + + /** + * Body part used for a control (L) + */ + TInt iDesignatorIndex; + + /** + * String associated with a control (L) + */ + TInt iStringIndex; + + /** + * Minimum physical extent for a variable item (G) + */ + TInt iPhysicalMin; + + /** + * Maximum physical extent for a variable item (G) + */ + TInt iPhysicalMax; + + /** + * First string index for a group of strings (L) + */ + TInt iStringMin; + + /** + * Last string index for a group of strings (L) + */ + TInt iStringMax; + + /** + * Starting designator index (L) + */ + TInt iDesignatorMin; + + /** + * Ending designator index (L) + */ + TInt iDesignatorMax; + + /** + * Flags associated with a main item (e.g. "array") + */ + TUint32 iAttributes; + + /** + * The usage indexes associated with this field (G) + */ + RArray iUsageList; + + // (G) = Global item + // (L) = Local item + }; + +#endif + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidgeneric.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidgeneric.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,339 @@ +/* +* Copyright (c) 2004-2007 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: Declares main application class. +* +*/ + + +#ifndef C_GENERICHID_H +#define C_GENERICHID_H + +#include + +class CDriverListItem; +class TElement; +class CParser; +class CReportRoot; +class CConnectionInfo; + +/** + * + * Generic HID main class + * Generic HID layer, allowing the HID Transport layers and device drivers to + * pass data to the Generic HID + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CGenericHid : public CHidTransport, public MDriverAccess + { +public: + virtual ~CGenericHid(); + + /** + * Constructs a generic HID layer with a reference to the owner so commands can + * be sent to connected devices + * + * @since S60 v5.0 + * @param aTransportLayer The owning transport layer + * @return a Pointer to an instantiated Generic HID layer + */ + IMPORT_C static CGenericHid* NewL(MTransportLayer* aTransportLayer); + + /** + * Constructs a generic HID layer with a reference to the owner so commands can + * be sent to connected devices + * + * @since S60 v5.0 + * @param aTransportLayer The owning transport layer + * @return a Pointer to an instantiated Generic HID layer + */ + IMPORT_C static CGenericHid* NewLC(MTransportLayer* aTransportLayer); + + /** + * Fromm class MDriverAccess + * Retrieves the country code for the HID device + * + * @since S60 v5.0 + * @param aConnectionID The device identifier + * @return a country code + */ + TUint CountryCodeL(TInt aConnectionID); + + /** + * Fromm class MDriverAccess + * Retrieves the country code for the HID device + * + * @since S60 v5.0 + * @param aConnectionId The device identifier + * @return a vendor ir + */ + TUint VendorIdL(TInt aConnectionId); + + /** + * Fromm class MDriverAccess + * Retrieves the product identifier for the HID device + * + * @since S60 v5.0 + * @param aConnectionId The device identifier + * @return a prodcut id + */ + TUint ProductIdL(TInt aConnectionId); + + + /** + * Fromm class MDriverAccess + * Sets the protocol to be used for reports. + * Leaves KErrInUse The request was not successful because the + * transport layer is busy with a previous request, + * KErrNotReady The request failed because the device + * is currently unavailable and KErrNotFound The request + * was unsuccessful + * + * @since S60 v5.0 + * @param aConnectionId The device identifier + * @param aInterface The device interface being used by the driver + * @param aProtocol The requested report protocol (boot or report) + * @parem aDriver Calling driver + * @return None. + */ + void SetProtocolL(TInt aConnectionId, TUint16 aInterface, + MDriverAccess::TProtocols aProtocol, CHidDriver* aDriver); + + + /** + * Fromm class MDriverAccess + * Requests the current protocol from the HID device. This is an asynchronous + * request. The protocol value will come through at a later time + * + * @since S60 v5.0 + * @param aConnectionId The device identifier + * @param aInterface The hid interface + * @return None. + */ + void GetProtocolL(TInt aConnectionId, TUint16 aInterface); + + /** + * Fromm class MDriverAccess + * A request for a report from the device. This is an asynchronous request. + * The report will come through at a later time + * + * @since S60 v5.0 + * @param aConnectionId The device identifier + * @param aReportId report id to be get + * @param aInterface The device interface being used by the driver + * @param aLength report lenght + * @return None. + */ + void GetReportL(TInt aConnectionId, TUint8 aReportId, + TUint16 aInterface, TUint16 aLength); + + /** + * Fromm class MDriverAccess + * A request to send a report payload to the HID device + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aReportId The report id + * @param aReportType Type of report (input/output/feature) + * @param aPayload The report containing the device setup packet + * @param aInterface The device interface being used by the driver + * @parem aDriver Calling driver + * @return None. + */ + void SetReportL(TInt aConnectionId, + TUint8 aReportId, MDriverAccess::TReportType aReportType, + const TDesC8& aPayload, TUint16 aInterface, CHidDriver* aDriver); + + /** + * Fromm class MDriverAccess + * A request to send a report payload to the HID device in Interrupt Channel + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aReportId report id which payload to be send + * @param aPayload The report containing the device setup packet + * @param aInterface The device interface being used by the driver + * @return None. + */ + void DataOutL(TInt aConnectionId, TUint8 aReportId, + const TDesC8& aPayload, TUint16 aInterface); + + /** + * Fromm class MDriverAccess + * Request for the current idle setting for the device + * This is an asynchronous request. The idle value will come through at a + * later time. Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device identifier + * @param aReportId The report ID for which we want the idle rate + * @param aInterface The device interface being used by the driver + * @return None. + */ + void GetIdleL(TInt aConnectionId, TUint8 aReportId, TUint16 aInterface); + + /** + * Fromm class MDriverAccess + * Request to the HID device to set the specified idle rate + * A request to send a report payload to the HID device + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aDuration The number of 0.04ms intervals to wait between reports + * @param aReportId The report for which the idle rate is being set + * @param aInterface The device interface being used by the driver + * @parem aDriver Calling driver + * @return None. + */ + void SetIdleL(TInt aConnectionId, TUint8 aDuration, + TUint8 aReportId, TUint16 aInterface, CHidDriver* aDriver); + + /** + * From class CHidTransport + * Called by the transport layers to inform the generic HID of the success of + * the last Set... command. + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aCmdAck Status of the last Set... command + * @return None. + */ + void CommandResult(TInt aConnectionId, TInt aCmdAck); + + /** + * From class MDriverAccess + * Gives the device driver access to the results of the report + * descriptor parsing + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @return A pointer to the parsed descriptor object. + */ + CReportRoot* ReportDescriptor(TInt aConnectionId); + + /** + * From class CHidTransport + * Called by a transport layer when a device has connected and the report + * descriptors have been obtained + * + * @since S60 v5.0 + * @param aConnectionId The tansport-layer enumeration for the connection + * @param aDescriptor The report descriptor for the connected HID device + * @return KErrNone if a driver was found, otherwise an error code + */ + TInt ConnectedL(TInt aConnectionId, const TDesC8& aDescriptor); + + /** + * From class CHidTransport + * Called by a transport layer when a device has been disconnected + * + * @since S60 v5.0 + * @param aConnectionId The tansport-layer enumeration for the connection + * @return KErrNone if a driver was found, otherwise an error code + */ + TInt Disconnected(TInt aConnectionId); + + /** + * From class CHidTransport + * Called by the transport layer when a device has sent a report on the + * interrupt or control channel + * + * @since S60 v5.0 + * @param aConnectionId The tansport-layer enumeration for the connection + * @param aChannel Channel ID (Interrupt or Control) + * @param aPayload The complete report payload + * @return KErrNone if the data was handled by the driver, otherwise an error code + */ + virtual TInt DataIn(TInt aConnectionId, + CHidTransport::THidChannelType aChannel, const TDesC8& aPayload); + + /** + * From class CHidTransport + * Called by the transport layer to suspend or resume a driver + * + * @since S60 v5.0 + * @param aConnectionId The tansport-layer enumeration for the connection + * @param aActive EActive to start the driver(s), ESuspend to suspend + * @return KErrNone if the driver was successfully activated, otherwise an error code + */ + TInt DriverActive(TInt aConnectionId, + CHidTransport::TDriverState aActive); + +protected: + CGenericHid(MTransportLayer* aTransportLayer); + void ConstructL(); + +private: + + /** + * Remove drivers + * + * @since S60 v5.0 + * @return None + */ + void RemoveDrivers(); + + /** + * Attempts to find a driver that is handling reports from the HID device + * + * @since S60 v5.0 + * @return Connection information + */ + CConnectionInfo* SeekConnectionInfo(TInt aConnectionId); + +private: + + /** + * Instantiated driver list + */ + TSglQue iDriverList; + + /** + * Parser + * Own. + */ + CParser* iParser; + + /** + * Parser + * Not own. + */ + MTransportLayer* iTransportLayer; + + /** + * Connection information + */ + RPointerArray iConnectionInfo; + + /** + * Input data handling registry + * Own. + */ + CHidInputDataHandlingReg* iInputHandlingReg; + + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidinterfaces.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidinterfaces.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,704 @@ +/* +* Copyright (c) 2004-2007 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: Declares main application class. +* +*/ + + + +#ifndef C_HIDDRIVER_H +#define C_HIDDRIVER_H + +#include + + +class CReportRoot; +class MDriverAccess; +class MTransportLayer; +class CHidDriver; +// ---------------------------------------------------------------------- + +// Return codes from the Generic HID to Transport layers +// +const TInt KErrHidBase = -8000; + +const TInt KErrHidNoDriver = KErrHidBase; /*!< No driver could be found to handle the request */ +const TInt KErrHidSuspended = KErrHidBase - 1; /*!< Command not handled - driver is suspended */ +const TInt KErrHidUnrecognised = KErrHidBase - 2; /*!< Driver could not understand the data */ +const TInt KErrHidUnexpected = KErrHidBase - 3; /*!< Unsolicited data from the device */ +const TInt KErrHidBadChannel = KErrHidBase - 4; /*!< Channel was not Int or Ctrl type */ +const TInt KErrHidPartialSupported = KErrHidBase - 5; /*!< Partil supported hid device */ + +// Errors returned by the report translator / generator: +// +const TInt KErrUsageNotFound = KErrHidBase - 10; //!< Usage page/ID wasn't found in the field +const TInt KErrValueOutOfRange = KErrHidBase - 11; //!< Value specified is outside the logical range +const TInt KErrNoSpaceInArray = KErrHidBase - 12; //!< Array field already contains the maximum number of values +const TInt KErrBadControlIndex = KErrHidBase - 13; //!< Control index exceeds the number of controls in the field + +// ACK codes returned by Set/Get requests to the devices +// +const TInt KErrCommandAckBase = -8100; + +const TInt KErrAckInvalidReportID = KErrCommandAckBase; /*!< Invalid report ID */ +const TInt KErrAckInvalidParameter = KErrCommandAckBase - 1; /*!< Invalid or out of range param */ +const TInt KErrAckUnknown = KErrCommandAckBase - 2; /*!< Command failed, but the device can't determine why */ +const TInt KErrAckFatal = KErrCommandAckBase - 3; /*!< The device is in an unrecoverable state and must be restarted */ + +// Constant for plugin interface: +const TUid KHidDriverPluginInterfaceUid = { 0x10201d26 }; + + +class THidEvent + { + public: + /** + * Usage page + */ + TInt iUsagePage; + + /** + * Keycode + */ + TInt iKeyCode; + }; + +class CHidInputDataHandlingReg: public CBase + { + +public: + /** + * Two-phased constructor. + */ + static CHidInputDataHandlingReg* NewL(); + + /** + * Destructor + */ + virtual ~CHidInputDataHandlingReg(); + +public: + + /** + * Check if key event is not allready processed + * + * @since S60 v5.0 + * @param aUsagePage a usage page to be checked + * @param aUsage a usage code to be checked + * @return true if event is not allready handled + */ + IMPORT_C TBool AllowedToHandleEvent(TInt aUsagePage, TInt aUsage); + + + /** + * Add handled event + * + * @since S60 v5.0 + * @param aUsagePage usage page to be handled + * @param aUsage Usage to be handled + * @return None. + */ + IMPORT_C void AddHandledEvent( TInt aUsagePage, TInt aUsage); + + /** + * Reset Array + */ + void Reset(); + +private: + + CHidInputDataHandlingReg(); + void ConstructL(); + +private: + + /** + * Event array + * Own. + */ + CArrayFixFlat* iEventArray; + + }; + +/** + * + * Transport layer interface class + * Interface allowing the generic HID layer to pass data to a Transport layer + * All commands are asynchronous. The results are returned via the + * + * @since S60 v5.0 + */ +class MTransportLayer + { +public: + + /** + * Request for the country code of the given device. + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @return country code. + */ + virtual TUint CountryCodeL(TInt aConnID) = 0; + + /** + * Request for the vendor identifier for the given device. + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @return vendor id. + */ + virtual TUint VendorIdL(TInt aConnID) = 0; + + /** + * Request for the product identifier for the given device. + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @return product id. + */ + virtual TUint ProductIdL(TInt aConnID) = 0; + + /** + * Request for the current device report protocol. The protocol will be + * received as a control report via the CHidTransport::DataIn function + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aInterface The interface we want to get the protocol from + * @return None. + */ + virtual void GetProtocolL(TInt aConnID, TUint16 aInterface) = 0; + + /** + * Request to put the device in the specified protocol + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aValue The requested protocol for the device (boot or report) + * @param aInterface The interface we want to set the protocol for + * @return None. + */ + virtual void SetProtocolL(TInt aConnID, TUint16 aValue, + TUint16 aInterface) = 0; + + /** + * Request for a device report. The data will be received as a control report + * via the CHidTransport::DataIn function + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aReportType The type of report (input/output/feature) requested + * @param aReportID The specific report required + * @param aInterface The interface we want the report from + * @param aLength The expected length of the report buffer + * @return None. + */ + virtual void GetReportL(TInt aConnID, TUint8 aReportType,TUint8 aReportID, + TUint16 aInterface, TUint16 aLength) = 0; + + /** + * Request to send a report to a device. The response will be reported via the + * CHidTransport::CommandResult function + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aReportType The type of report (input/output/feature) requested + * @param aReportID The specific report required to set + * @param aInterface The interface we want to send the report to + * @param aReport The report payload to be sent to the device + * @return None. + */ + virtual void SetReportL(TInt aConnID, TUint8 aReportType,TUint8 aReportID, + TUint16 aInterface, const TDesC8& aReport) = 0; + + /** + * Request to send data to a device. There are no responses to this report from device. + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aReportID The specific report required + * @param aInterface The interface we want to send the report to + * @param aReport The report payload to be sent to the device + * @return None. + */ + virtual void DataOutL(TInt aConnID, TUint8 aReportID, + TUint16 aInterface, const TDesC8& aReport) = 0; + + /** + * Request for the current idle rate of a report from the device. The response + * will be recevied via the CHidTransport::DataIn function + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aReportID The specific report to be queried + * @param aInterface The interface we want to query for idle rate + * @return None. + */ + virtual void GetIdleL(TInt aConnID, TUint8 aReportID, + TUint16 aInterface) = 0; + + /** + * Request to set the current idle rate for a report on the device. + * The response will be received via the CHidTransport::CommandResult function + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @param aReportID The specific report to be queried + * @param aDuration The time period between idle reports (4ms per bit. An + * interval of 0 disables idle reports so that Interrupt reports are only ever + * received when the reported data has changed + * @param aReportID The specific report to be queried + * @param aInterface The interface we want to query for idle rate + * @return None. + */ + virtual void SetIdleL(TInt aConnID, TUint8 aDuration, TUint8 aReportID, + TUint16 aInterface) = 0; + }; + +/** + * + * Driver access interface + * Interface allowing drivers to request data from and send data to devices via + * the Generic HID layer. + * + * @since S60 v5.0 + */ +class MDriverAccess + { +public: + + /** + * The type of report requested from the device + * Note: The enumeration values map directly to the HID equivalent values + * (Passed as TUint16 values to the transport layer) + */ + enum TReportType + { + EInput=1, /*!< Input report */ + EOutput, /*!< Output report */ + EFeature /*!< Feature report */ + }; + + /** Return codes from the Generic HID to the device drivers + * Note: The enumeration values map directly to the HID equivalent values + *(Passed as TUint8 values to the transport layer) + */ + + enum TProtocols + { + EBoot=0, /*!< Boot Protocol */ + EReport=1 /*!< Report Protocol */ + }; + +public: + + /** + * Retrieves the country code for the HID device + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @return contry code + */ + virtual TUint CountryCodeL(TInt aConnID) = 0; + + /** + * Retrieves the for the HID device + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @return vendor id + */ + virtual TUint VendorIdL(TInt aConnID) = 0; + + /** + * Retrieves the product identifier for the HID device + * + * @since S60 v5.0 + * @param aConnID The device identifier + * @return produrct id + */ + virtual TUint ProductIdL(TInt aConnID) = 0; + + /** + * Requests the current protocol for the device (boot or report) + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavaila + * + * @since S60 v5.0 + * @param aConnectionID The connection id + * @param aInterface The current interface being used by the driver + * @return None. + */ + virtual void GetProtocolL(TInt aConnectionID, + TUint16 aInterface) = 0; + + /** + * Requests a report from the device + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The connection id + * @param aReportId The report required from the device + * @param aInterface The current interface being used by the driver + * @param aLength ** NOT USED ** + * @return None + */ + virtual void GetReportL(TInt aConnectionId, TUint8 aReportId, + TUint16 aInterface, TUint16 aLength) = 0; + + /** + * Requests the current Idle setting for the device + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aReportId The report required from the device + * @param aInterface The current interface being used by the driver + * @return None. + */ + virtual void GetIdleL(TInt aConnectionId, TUint8 aReportId, + TUint16 aInterface ) = 0; + + /** + * Sets the protocol to be used for reports + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aInterface The current interface being used by the driver + * @param aProtocol The required protocol (boot or report) + * @parem aDriver Calling driver + * @return None. + */ + virtual void SetProtocolL(TInt aConnectionId, + TUint16 aInterface, TProtocols aProtocol, CHidDriver* aDriver) = 0; + + /** + * Sets the idle interval for interrupt data. + * Leaves whit KErrInUse The request was not successful because the transport + * layer is busy with previous request and KErrNotReady The request failed + * because the device is currently unavailable + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aDuration The idle interval, in steps of 0.04ms intervals (where + * 1 = 0.04ms, 2=0.08ms). 0 will disable idle so reports + * are only sent when the state of the device changes + * @param aInterface The current interface being used by the driver + * @param aReportId The report whose idle rate is being set + * @param aInterface The current interface being used by the driver + * @parem aDriver Calling driver + * @return None. + */ + virtual void SetIdleL(TInt aConnectionId, TUint8 aDuration, + TUint8 aReportId, TUint16 aInterface, CHidDriver* aDriver) = 0; + + + /** + * Sends a report to the device + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aReportId The report to receive the setup report + * @param aReportType The type of report being sent to the device (input, output + * or Feature) + * @param aPayload The report being sent to the device + * @parem aDriver Calling driver + * @param aInterface The current interface being used by the driver + * @return KErrNone The request was successful and the result of the command is + * expected at a later time (as a CmdAck message), KErrInUse The request + * was not successful because the transport layer is busy with a previous + * request, KErrNotReady The request failed because the device is currently + * unavailable and KErrNoMemory The request failed because not enough memory + * available + */ + virtual void SetReportL(TInt aConnectionId, TUint8 aReportId, + TReportType aReportType, const TDesC8& aPayload, + TUint16 aInterface, CHidDriver* aDriver) = 0; + + /** + * Sends a report to the device (from host) using Interrupt Channel as DATA + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @param aReportId The report to receive the setup report + * @param aPayload The report being sent to the device + * @param aInterface The current interface being used by the driver + * @return KErrNone The request was successful and the result of the + * command is expected at a later time (as a CmdAck message), + * KErrInUse The request was not successful because the transport layer is + * busy with a previous request, KErrNotReady The request failed because the + * device is currently unavailable and KErrNoMemory The request failed because + * not enough memory available + */ + virtual void DataOutL(TInt aConnectionId, TUint8 aReportId, + /*TReportType aReportType,*/ const TDesC8& aPayload, + TUint16 aInterface) = 0; + + /** + * A request for the parsed descriptor container object so the driver can + * retrieve the report format(s) + * + * @since S60 v5.0 + * @param aConnectionId The device ID + * @return A pointer to the parsed report descriptor container and + * NULL if no parsed report descriptor container exists + */ + virtual CReportRoot* ReportDescriptor(TInt aConnectionId) = 0; + }; + + +/** + * + * Hid transport interface + * Interface allowing the transport layer to pass data to the Generic HID + * + * @since S60 v5.0 + */ +class CHidTransport : public CBase + { +public: + /** + * Defines the channel type for the DataIn function + */ + enum THidChannelType + { + EHidChannelInt, /*!< Interrupt channel */ + EHidChannelCtrl /*!< Control channel */ + }; + + /** + *Driver state (active or suspended) + */ + enum TDriverState + { + EActive, /*!< Driver will handle interrupt data */ + ESuspend /*!< the driver will not handle interrupt data */ + }; + +public: + + /** + * Called when a device has connected + * + * @since S60 v5.0 + * @param aConnectionId The transport-layer enumeration for the connection + * @param aDescriptor The report descriptor for the device + * @return KErrNone The connection will be handled by one or more drivers, + * KErrHidNoDriver No driver was found to handle the connected device + */ + virtual TInt ConnectedL(TInt aConnectionId, const TDesC8& aDescriptor) = 0; + + /** + * Called when a device has been disconnected + * + * @since S60 v5.0 + * @param aConnectionId The transport-layer enumeration for the connection + * @param aDescriptor The report descriptor for the device + * @return KErrNone The device was recognised and its drivers were unloaded and + * KErrHidNoDriver No driver was found to handle the connected device + */ + virtual TInt Disconnected(TInt aConnectionId) = 0; + + /** + * Called when a device has been disconnected + * + * @since S60 v5.0 + * @param aConnectionId Transport layer connection enumeration + * @param aChannel Channel ID (Interrupt or Control) + * @param aPayload The complete report payload + * @return KErrNone The payload was handled by one or more drivers, + * KErrHidNoDriver No driver is handling reports from the device + * and KErrHidSuspended The report was not handled because all the drivers + * handling the device are suspended + */ + virtual TInt DataIn(TInt aConnectionId, + THidChannelType aChannel, const TDesC8& aPayload) = 0; + + /** + * Suspends or Resumes the driver(s) handling the connection + * + * @since S60 v5.0 + * @param aConnectionId Transport layer connection enumeration + * @param aActive The requested state of the driver (active or suspended) + * @return KErrNone The driver was successfully put into the requested state, + * and KErrHidAlreadyInState All the drivers were already in the + * requested state + */ + virtual TInt DriverActive(TInt aConnectionId, + CHidTransport::TDriverState aActive) = 0; + + /** + * Called by the transport layers to inform the generic HID of the + * success of the last Set... command. + * + * @since S60 v5.0 + * @param aConnectionId Transport layer connection enumeration + * @param aCmdAck Status of the last Set... command + * @return None. + */ + virtual void CommandResult(TInt aConnectionId, TInt aCmdAck) = 0; + }; + +/** + * + * Driver plugin interface + * Interface allowing drivers to request data from and send data to devices via + * the Generic HID layer. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CHidDriver : public CBase + { +public: + + + /** + * Two-phased constructor. + * @param aImplementationUid Implementation UID of the plugin to be + * created. + * @param aHid Driver acces interface + */ + IMPORT_C static CHidDriver* NewL( + const TUid aImplementationUid, + MDriverAccess* aHid ); + + /** + * Destructor + */ + IMPORT_C virtual ~CHidDriver(); + + /** + * Called by the Generic HID to see if the factory can use reports described by + * the parsed report descriptor + * NOTE: The current implementation supports just one driver and that driver + * that will either handle all the reports from the device or none at all. + * Report ID is not currently being taken into account. + * + * @since S60 v5.0 + * @param aReportDescriptor Parsed HID report descriptor + * @return KErrNone The driver will handle reports from the report descriptor and + * KErrHidUnrecognised The driver cannot handle reports from the device + */ + virtual TInt CanHandleReportL(CReportRoot* aReportDescriptor) = 0; + + /** + * Called by the Generic HID layer when a device has sent a report on the + * interrupt or control channel + * + * @since S60 v5.0 + * @param aChannel Channel ID (Interrupt or Control) + * @param aPayload The complete report payload + * @return Error if data can't be handled. + */ + virtual TInt DataIn(CHidTransport::THidChannelType aChannel, + const TDesC8& aPayload) = 0; + + /** + * Called by the Generic HID layer when the handled device has been disconnected + * interrupt or control channel + * + * @since S60 v5.0 + * @param aReason Disconnection code + * @return None. + */ + virtual void Disconnected(TInt aReason) = 0; + + /** + * Called after a driver is sucessfully created by the Generic HID, + * when a device is connected. + * + * @since S60 v5.0 + * @param aConnectionId An number used to identify the device in + * subsequent calls from the driver to the generic HID, for example + * when sending data to the device. + * @return None. + */ + virtual void InitialiseL(TInt aConnectionId) = 0; + + /** + * Enables the driver so that it will configure the device and + * start handling interrupt reports from the device + * + * @since S60 v5.0 + * @param aConnectionId A number used to identify the device in + * subsequent calls from the driver to the Generic HID, for example + * when sending data to the device. + * @return None. + */ + virtual void StartL(TInt aConnectionId) = 0; + + /** + * Disables the driver so that it will stop handling device + * interrupt reports + * + * @since S60 v5.0 + * @return None. + */ + virtual void Stop() = 0; + + /** + * Called by the transport layers to inform the generic HID of + * the success of the last Set... command. + * + * @since S60 v5.0 + * @param aCmdAck Status of the last Set... command + * @return None. + */ + virtual void CommandResult(TInt aCmdAck) = 0; + + /** + * Return count of supported fields + * + * @since S60 v5.0 + * @return Number of supported fields. + */ + virtual TInt SupportedFieldCount()= 0; + + + /** + * Set input handling registy + * + * @since S60 v5.0 + * @param aHandlingReg a Input handling registry + * @return Number of supported fields. + */ + virtual void SetInputHandlingReg(CHidInputDataHandlingReg* aHandlingReg) = 0; + + protected: + /** + * C++ constructor. + */ + IMPORT_C CHidDriver(); + + private: // Data + + /** + * ECOM plugin instance UID. + */ + TUid iDtor_ID_Key; + }; + +#endif + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidreportroot.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidreportroot.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,274 @@ +/* +* Copyright (c) 2004-2007 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: Declares hid report class +* +*/ + + +#ifndef C_HIDREPORTROOT_H +#define C_HIDREPORTROOT_H + +#include + +#include "hidfield.h" +#include "hidcollection.h" + +#include "hidvalues.h" + +class CReportRoot; + + + +/** + * Hid field finder class + * The MHidFieldFinder class defines the call-back interface used by + * THidFieldSearch. A device driver uses THidFieldSearch::SearchL() + * along with a custom MHidFieldFinder object to determine whether it + * is compatible with a given report descriptor. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class MHidFieldFinder + { +public: + + /** + * Called by THidFieldSearch::SearchL() during traversal of the + * report descriptor tree when a CCollection is encountered. It + * will be called once, and only once, for every CCollection in the + * descriptor. It is not called for the root collection + * (the CReportRoot). + * + * @since S60 v5.0 + * @param aCollection A pointer to the collection object. + * @return ETrue if the contents of this collection (any child CField + * or CCollection objects) should be examined. A driver would return + * EFalse if a collection was not of a compatible type, for + * example if the usage page was inappropriate. + */ + virtual TBool BeginCollection(const CCollection *aCollection) = 0; + + /** + * Called by THidFieldSearch::SearchL() during traversal of the + * report descriptor tree when all CFields and child CCollections + * of a CCollection have been examined. It will be called once, + * and only once, for every CCollection in the descriptor. It is + * not called for the root collection (the CReportRoot). + * + * @since S60 v5.0 + * @param aCollection A pointer to the collection object. + * @return ETrue if the search (tree traversal) should + * continue. A driver returns EFalse if it has finished examining + * the whole descriptor, in general this will be if it has + * established that it is compatible with the report descriptor. + */ + virtual TBool EndCollection(const CCollection *aCollection) = 0; + + /** + * Called once for each CField in a CCollection by + * THidFieldSearch::SearchL() during the traversal of a report + * descriptor tree. + * + * @since S60 v5.0 + * @param aField The pointer to field + * @return None. + */ + virtual void Field(const CField* aField) = 0; + }; + + +/** + * Report Size + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TReportSize + { +public: + + /** + * Constructor. + * + * @since S60 v5.0 + * @param aReportId The report id + * @param aType Field type + * @return Pointer to report size object + */ + TReportSize(TInt aReportId, CField::TType aType); + + + /** + * TReportSize comparision + * + * @since S60 v5.0 + * @param aFirst first report size to be compared. + * @param aSecond second report size to be compared + * @return None + */ + static TBool Match(const TReportSize& aFirst, + const TReportSize& aSecond); + + /** + * Report id + */ + TInt iReportId; + + /** + * Fiel type + */ + CField::TType iType; + + /** + * Report size + */ + TInt iSize; + }; + + +/** + * Hid field search + * THidFieldSearch provides a mechanism for traversing a parsed report + * descriptor tree (a CReportRoot object). It is intended for a device + * driver to use when it is looking to see if it is compatible with a + * newly connected device, i.e. provides the appropriate types of + * report. The driver must provide an object of a class that implements + * the MHidFieldFinder interface. + * + * @since S60 v5.0 + */ +class THidFieldSearch + { +public: + + /** + * Traverse a parsed report descriptor (a tree of CCollections + * and CFields) calling the MHidFieldFinder member functions as + * appropriate. + * + * @since S60 v5.0 + * @param aReportRoot THe pointer to field + * @param aFinder An object that will establish if the report + * descriptor is suitable. + * @return None. + */ + IMPORT_C void SearchL(const CReportRoot* aReportRoot, + MHidFieldFinder* aFinder); + +private: + + /** + * Traverse a parsed report descriptor (a tree of CCollections + * and CFields) calling the MHidFieldFinder member functions as + * appropriate. + * + * @since S60 v5.0 + * @param aReportRoot THe pointer to field + * @return ETrue when search is done. + */ + TBool DoSearchL(const CCollection* aCollection); + +private: + MHidFieldFinder* iFinder; + }; + +/** + * Root report + * The top level of the tree of fields and collections in a HID + * report descriptor. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class CReportRoot : public CCollection + { +public: + static CReportRoot* NewLC(); + static CReportRoot* NewL(); + + /** + * Destructor + */ + virtual ~CReportRoot(); + + /** + * Increase the size of a given report by a given number of bits + * + * @since S60 v5.0 + * @param aReportId The report id, which size shoud be increased + * @param aType a Type of field + * @param aIncrement size of increase + * @return None + */ + void IncrementReportSizeL(TInt aReportId, + CField::TType aType, TInt aIncrement); + + /** + * Get the size of a given report in bits + * + * @since S60 v5.0 + * @param aReportId The report id, which size shoud be increased + * @param aType a Type of field + * @return Size of report in bits + */ + TInt ReportSize(TInt aReportId, CField::TType aType) const; + + /** + * Get the size of a given report in bytes + * + * @since S60 v5.0 + * @param aReportId The report id, which size shoud be increased + * @param aType a Type of field + * @return Size of report in bytys + */ + IMPORT_C TInt ReportSizeBytes(TInt aReportId, CField::TType aType) const; + + /** + * Get the number of reports + * + * @since S60 v5.0 + * @return number of reports + */ + TInt NumberOfReports() const; + + /** + * Get the size of a given report by array index, rather than type & ID + * + * @since S60 v5.0 + * @param aIndex report index + * @return report size + */ + TInt ReportSize(TInt aIndex) const; + +private: + CReportRoot(); + + /** + * Find report index + * + * @since S60 v5.0 + * @param aReportId The report id to be found + * @param aType a Type of field + * @return report size + */ + TInt FindReportSizeIndex(TInt aReportId, CField::TType aType) const; + + /** + * Array to store the size of each report + */ + RArray iSizes; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidtranslate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidtranslate.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,191 @@ +/* +* Copyright (c) 2005-2007 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: Report translator +* +*/ + +#ifndef T_TRANSLATE_H +#define T_TRANSLATE_H + +#include + +class CField; + +/** + * HID report base object + * + * Base class for report translator and report generator. + * Contains only static functions. + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TReportUtils + { +public: + /** + * Find the index within the usages for a field of a given usage ID. + * + * @since S60 v5.0 + * @param aField Pointer to the field. + * @param aUsageId Usage ID to find. + * @param aUsageIndex Reference to variable to receive the index. + * @return True if the usage ID is found. + */ + static TBool GetIndexOfUsage(const CField* aField, + TInt aUsageId, TInt& aUsageIndex); + /** + * Find the usage ID at a given index within the usages for a field. + * + * @since S60 v5.0 + * @param aField Pointer to the field. + * @param aUsageIndex The index. + * @return The usage ID at the given index. + */ + static TInt UsageAtIndex(const CField* aField, TInt aUsageIndex); + + /** + * Write a value to a field at a given index. + * + * @since S60 v5.0 + * @param aData Buffer containing the HID report. + * @param aField The field in which to write. + * @param aIndex Position in the field to write. + * @param aValue Value to write to the field. + * @return Error code indicating success or reason for failure. + */ + static TInt WriteData(HBufC8& aData, const CField* aField, + TInt aIndex, TInt aValue); + + /** + * Read a value from a field at a given index. + * + * @since S60 v5.0 + * @param aData Buffer containing the HID report. + * @param aField The field from which to read. + * @param aIndex Position in the field to read. + * @param aValue Reference to variable to receive the value read + * from the field. + * @return Error code indicating success or reason for failure. + */ + static TInt ReadData(const TDesC8& aData, const CField* aField, + TInt aIndex, TInt& aValue); + }; + +/** + * HID report translator + * + * Allows a device driver to extract data items from a device report, based on + * the results of the report descriptor parser stage (at device connection) + * + * @lib generichid.lib + * @since S60 v5.0 + */ +class TReportTranslator + { +public: + + /** + * Constructor. + * + * @since S60 v5.0 + * @param aData Data to be extracted + * @param aField HID field + * @return return TReportTranslator + */ + IMPORT_C TReportTranslator(const TDesC8& aData, const CField* aField); + + /** + * For variable fields, reads the logical value of the control with the + * given usage ID. For arrays, searches for the usage ID and gives the + * value as ETrue if found and EFalse if not. + * + * @since S60 v5.0 + * @param aValue Reference to variable to receive the value read + * from the field. + * @param aUsageId Usage ID of the control to read. + * @param aControlOffset Which control to read when more than one + * have the same usage ID. + * @return Error code indicating success or reason for failure. + */ + IMPORT_C TInt GetValue(TInt& aValue, TInt aUsageId, + TInt aControlOffset = 0) const; + + /** + * Alternate version of the above method for convenience. Returns the + * value read directly and leaves if an error occurs. + * + * @since S60 v5.0 + * @param aUsageId Usage ID of the control to read. + * @param aControlOffset Which control to read when more than one + * have the same usage ID. + * @return The logical value of a variable, or true/false for an array. + */ + IMPORT_C TInt ValueL(TInt aUsageId, TInt aControlOffset = 0) const; + + /** + * Gets the usage ID at a given index in an array field. For variable + * fields, if the logical value of the control at the given index is non- + * zero, returns the usage ID of the control, otherwise returns zero. + * + * @since S60 v5.0 + * @param aUsageId Reference to variable to receive the usage ID. + * @param aIndex Index in the array to read. + * @return Error code indicating success or reason for failure. + */ + IMPORT_C TInt GetUsageId(TInt& aUsageId, TInt aIndex) const; + + /** + * Alternate version of the above method for convenience. Returns the + * usage ID directly and leaves if an error occurs. + * + * @since S60 v5.0 + * @param aIndex Index in the array to read. + * @return The usage ID. + */ + IMPORT_C TInt UsageIdL(TInt aIndex) const; + + /** + * Gets the logical value at a given index in a field. Leaves if an + * error occurs. + * + * @since S60 v5.0 + * @param aIndex Index in the field to read. + * @return The logical value. + */ + IMPORT_C TInt RawValueL(TInt aIndex) const; + + /** + * Gets the number of controls in the field. + * + * @since S60 v5.0 + * @return The number of controls. + */ + IMPORT_C TInt Count() const; + +private: + + /** + * Data to be extracted + */ + const TDesC8& iData; + + /** + * HID field + * Not own. + */ + const CField* iField; + }; + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/generic_hid_api/inc/hidvalues.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/generic_hid_api/inc/hidvalues.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2004-2007 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: HID related enums +* +*/ + + +#ifndef HIDVALUES_H +#define HIDVALUES_H + +#include + +/** + * Constants as defined in "USB HID Usage Tables", Version 1.11, USB + * Implementers' Forum, June 2001. Used throughout for parsing report + * descriptors and interpreting reports. + */ + +/** + * HID usage page ID values, as given in the document "USB HID Usage + * Tables", Version 1.11, USB Implementers' Forum, June 2001 + */ +enum THidUsagePages + { + EUsagePageUndefined = 0x00, + EUsagePageGenericDesktop = 0x01, + EUsagePageSimulationControls = 0x02, + EUsagePageVRControls = 0x03, + EUsagePageSportControls = 0x04, + EUsagePageGameControls = 0x05, + EUsagePageGenericDeviceControls = 0x06, + EUsagePageKeyboard = 0x07, + EUsagePageLEDs = 0x08, + EUsagePageButton = 0x09, + EUsagePageOrdinal = 0x0A, + EUsagePageTelephony = 0x0B, + EUsagePageConsumer = 0x0C, + EUsagePageDigitizer = 0x0D, + EUsagePagePIDPage = 0x0F, + EUsagePageUnicode = 0x10, + EUsagePageAlphanumericDisplay = 0x14, + EUsagePageMedicalInstruments = 0x40, + EUsagePageMonitorMin = 0x80, + EUsagePageMonitorMax = 0x83, + EUsagePagePowerMin = 0x84, + EUsagePagePowerMax = 0x87, + EUsagePageBarCodeScanner = 0x8C, + EUsagePageScale = 0x8D, + EUsagePageMagStripe = 0x8E, + EUsagePagePOS = 0x8F, + EUsagePageCameraControl = 0x90, + EUsagePageArcade = 0x91, + EUsagePageVendorSpecific = 0xFF01 + }; + +/** + * HID usage ID values for the Generic Desktop usage page, as given in + * the document "USB HID Usage Tables", Version 1.11, USB Implementers' + * Forum, June 2001 + */ +enum THidGenericDesktopUsages + { + EGenericDesktopUsagePointer = 0x01, + EGenericDesktopUsageMouse = 0x02, + EGenericDesktopUsageJoystick = 0x04, + EGenericDesktopUsagePad = 0x05, + EGenericDesktopUsageKeyboard = 0x06, + EGenericDesktopUsageKeypad = 0x07, + EGenericDesktopUsageMultiAxisCtrl = 0x08, + EGenericDesktopUsageX = 0x30, + EGenericDesktopUsageY = 0x31, + EGenericDesktopUsageZ = 0x32, + EGenericDesktopUsageRx = 0x33, + EGenericDesktopUsageRy = 0x34, + EGenericDesktopUsageRz = 0x35, + EGenericDesktopUsageSlider = 0x36, + EGenericDesktopUsageDial = 0x37, + EGenericDesktopUsageWheel = 0x38, + EGenericDesktopUsageHatSwitch = 0x39, + EGenericDesktopUsageCountedBuffer = 0x3A, + EGenericDesktopUsageByteCount = 0x3B, + EGenericDesktopUsageMotionWakeup = 0x3C, + EGenericDesktopUsageStart = 0x3D, + EGenericDesktopUsageSelect = 0x3E + }; + +enum THidTelephonyUsages + { + ETelephonyUsageHookSwitch = 0x20, + ETelephonyUsagePhoneMute = 0x2F, + ETelephonyUsagePoC = 0x33 + }; + +enum THidConsumerUsages + { + EConsumerUsagePlay = 0xB0, + EConsumerUsageFastForward = 0xB3, + EConsumerUsageRewind = 0xB4, + EConsumerUsageScanNext = 0xB5, + EConsumerUsageScanPrev = 0xB6, + EConsumerUsageStop = 0xB7, + EConsumerUsageRandomPlay = 0xB9, + EConsumerUsagePlayPause = 0xCD, + EConsumerUsageVolumeInc = 0xE9, + EConsumerUsageVolumeDec = 0xEA, + EConsumerUsageMute = 0xE2 + }; + +enum THidVendorSpecificUsages + { + EVendorSpecificUsagePoC = 0x01, + EVendorSpecificUsageHeadplugDetection = 0x02 + }; +// ---------------------------------------------------------------------- + +#endif diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/group/bld.inf --- a/remoteconn_plat/group/bld.inf Thu Aug 19 10:44:03 2010 +0300 +++ b/remoteconn_plat/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007 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" @@ -17,3 +17,10 @@ */ + +#include "../dialup_connection_status_api/group/bld.inf" +#include "../dun_secondary_display_notification_api/group/bld.inf" +#include "../generic_hid_api/group/bld.inf" +#include "../locod_bearer_plugin_api/group/bld.inf" +#include "../locod_service_plugin_api/group/bld.inf" + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: Locod bearer API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/locodplugin.hrh MW_LAYER_PLATFORM_EXPORT_PATH(locodplugin.hrh) +../inc/locodbearer.h MW_LAYER_PLATFORM_EXPORT_PATH(locodbearer.h) +../inc/locodbearerplugin.h MW_LAYER_PLATFORM_EXPORT_PATH(locodbearerplugin.h) +../inc/locodbearerplugin.inl MW_LAYER_PLATFORM_EXPORT_PATH(locodbearerplugin.inl) +../inc/locodbearerpluginobserver.h MW_LAYER_PLATFORM_EXPORT_PATH(locodbearerpluginobserver.h) +../inc/locodbearerpluginparams.h MW_LAYER_PLATFORM_EXPORT_PATH(locodbearerpluginparams.h) +../inc/locodbearerpluginparams.inl MW_LAYER_PLATFORM_EXPORT_PATH(locodbearerpluginparams.inl) diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/group/locod_bearer_plugin_api.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/group/locod_bearer_plugin_api.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component locod_bearer_plugin_api + +source \sf\mw\remoteconn\localconnectivityservice\locod_bearer_plugin_api + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodbearer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodbearer.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2006 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: Defines the LCD Bearer Plugin identifier. +* +*/ + + +#ifndef T_LOCODBEARER_H +#define T_LOCODBEARER_H + +#include + +/** bearer value in LC */ +enum TLocodBearer + { + ELocodBearerBT = 0x0001, + ELocodBearerIR = 0x0010, + ELocodBearerUSB = 0x0100, + }; + +#endif // T_LOCODBEARER_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerplugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin base class declaration. +* +*/ + + +#ifndef C_LOCODBEARERPLUGIN_H +#define C_LOCODBEARERPLUGIN_H + +#include +#include "locodbearerpluginparams.h" + +/** + * Bearer Plugin base class + * + * This is the base class from which bearer plugins inherit. + * + * See locodplugin.hrh for the resource registration definitions. + * + * @lib euser.lib + * @since S60 v3.2 + */ +class CLocodBearerPlugin : public CBase + { +public: + + static CLocodBearerPlugin* NewL(TLocodBearerPluginParams& aParams); + + virtual ~CLocodBearerPlugin(); + + /** + * Gets the implementation uid of this plugin + * + * @since S60 v3.2 + * @return The implementation uid + */ + TUid ImplementationUid() const; + +protected: + + CLocodBearerPlugin(TLocodBearerPluginParams& aParams); + + /** + * Gets the observer interface object associated with this plugin + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodBearerPluginObserver& Observer() const; + +private: // data + + /** + * UID set by ECOM when the instance is created. Used when the instance + * is destroyed. + */ + TUid iInstanceUid; + + /** + * Implementation UID of the concrete instance. + */ + TUid iImplementationUid; + + /** + * Holds the observer object which will be notified when the operations + * complete + * Not own. + */ + MLocodBearerPluginObserver& iObserver; + + }; + +#include "locodbearerplugin.inl" + +#endif // C_LOCODBEARERPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerplugin.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerplugin.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin construction parameters +* declaration +* +*/ + + +#include + +// ----------------------------------------------------------------------------- +// Creates the bearer plug ins and return it to caller +// ----------------------------------------------------------------------------- +// +inline CLocodBearerPlugin* CLocodBearerPlugin::NewL(TLocodBearerPluginParams& aParams) + { + CLocodBearerPlugin* self = reinterpret_cast( + REComSession::CreateImplementationL( + aParams.ImplementationUid(), + _FOFF(CLocodBearerPlugin, iInstanceUid), + (TAny*)&aParams) + ); + + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +inline CLocodBearerPlugin::~CLocodBearerPlugin() + { + REComSession::DestroyedImplementation(iInstanceUid); + } + +// ----------------------------------------------------------------------------- +// Return the implemtation uid +// ----------------------------------------------------------------------------- +// +inline TUid CLocodBearerPlugin::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline CLocodBearerPlugin::CLocodBearerPlugin(TLocodBearerPluginParams& aParams) + : iImplementationUid(aParams.ImplementationUid()), + iObserver(aParams.Observer()) + { + } + +// ----------------------------------------------------------------------------- +// Return the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodBearerPluginObserver& CLocodBearerPlugin::Observer() const + { + return iObserver; + } diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerpluginobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerpluginobserver.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin observer interface definition. +* +*/ + + +#ifndef M_LOCODBEARERPLUGINOBSERVER_H +#define M_LOCODBEARERPLUGINOBSERVER_H + +#include "locodbearer.h" + +/** + * LCD Bearer Plugin Observer interface class + * + * This is the bearer plugin observer interface definition used by LCD + * Bearer Plugins to inform the daemon about the plugin's event. + * + * @euser.lib + * @since S60 v3.2 + */ +class MLocodBearerPluginObserver + { +public: + + /** + * This is a callback function used by the plugins to inform when the + * bearer's availability changes. + * + * @since S60 v3.2 + * @param aBearer the bearer which calls this nothification + * @param aStatus the status of this bearer, ETrue if it is available; + * EFalse otherwise. + */ + virtual void NotifyBearerStatus(TLocodBearer aBearer, TBool aStatus) = 0; + }; + +#endif // M_LOCODBEARERPLUGINOBSERVER_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerpluginparams.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerpluginparams.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin construction parameters +* declaration +* +*/ + + +#ifndef T_LOCODBEARERPLUGINPARAMS_H +#define T_LOCODBEARERPLUGINPARAMS_H + +class MLocodBearerPluginObserver; + +/** + * LCD Bearer Plugin Callback construction parameters + * + * This interface class is used to pass construction parameters to the + * plugins. These parameters include the callback interface and the ECOM + * plugin implementation UID + * + * @euser.lib + * @since S60 v3.2 + */ +class TLocodBearerPluginParams + { +public: + + /** + * Constructor. + * + * @since S60 v3.2 + * @param aUid Implementation UID of the plugin being constructed + * @param aObserver Callback interface object + */ + TLocodBearerPluginParams(const TUid aUid, MLocodBearerPluginObserver& aObserver); + + /** + * Gets the implementation UID of the plugin + * + * @since S60 v3.2 + * @return Implementaion UID + */ + TUid ImplementationUid() const; + + /** + * Gets the observer interface object + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodBearerPluginObserver& Observer() const; + +private: // data + + /** + * The implementation UID + */ + const TUid iImplementationUid; + + /** + * Reference to the observer object + */ + MLocodBearerPluginObserver& iObserver; + + }; + +#include "locodbearerpluginparams.inl" + +#endif // T_LOCODBEARERPLUGINPARAMS_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerpluginparams.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodbearerpluginparams.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006 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: This is the LCD Bearer Plugin construction parameters +* declaration +* +*/ + + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline TLocodBearerPluginParams::TLocodBearerPluginParams(const TUid aUid, MLocodBearerPluginObserver& aObserver) + : iImplementationUid(aUid), + iObserver(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// returns the implementation UID +// ----------------------------------------------------------------------------- +// +inline TUid TLocodBearerPluginParams::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// returns the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodBearerPluginObserver& TLocodBearerPluginParams::Observer() const + { + return iObserver; + } diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_bearer_plugin_api/inc/locodplugin.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_bearer_plugin_api/inc/locodplugin.hrh Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2006 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: Definitions for plugin resource registration. +* +*/ + + +#ifndef LOCODPLUGIN_HRH +#define LOCODPLUGIN_HRH + +/** + * This file contains the defintions for plugin resource registration. + * + * All plugins should use version 2 registration resource file and set the + * rom_only field to 1 to prevent it from being overridden by RAM-based plugins. + * + * All bearer plugins should use KLOCODBEARERINTERFACEUID as the interface UID. + * + * A bearer plugin should use its corresponding feature ID (from features.hrh) as the + * implementation UID, that is, + * Implementation UID of IR bearer is KFeatureIdIrda, + * Implementation UID of BT bearer is KFeatureIdBt, + * Implementation UID of USB bearer is KFeatureIdUsb. + * + * All service plugins should use KLOCODSERVICEINTERFACEUID as the interface UID. + * + * A service plugin should use its corresponding feature ID (from features.hrh) as the + * implementation UID, that is, + * Implementation UID of Dun is KFeatureIdDun, (not exist yet, CR created) + * Implementation UID of Obex is KFeatureIdSrcs, + * + */ + +// Interface UID of bearer plugins +#define KLOCODBEARERINTERFACEUID 0x20002771 + +// Interface UID of service plugins +#define KLOCODSERVICEINTERFACEUID 0x20002772 + +#endif // LOCODPLUGIN_HRH diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/group/bld.inf Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,31 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: Locod bearer API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/locodserviceplugin.h MW_LAYER_PLATFORM_EXPORT_PATH(locodserviceplugin.h) +../inc/locodserviceplugin.inl MW_LAYER_PLATFORM_EXPORT_PATH(locodserviceplugin.inl) +../inc/locodservicepluginobserver.h MW_LAYER_PLATFORM_EXPORT_PATH(locodservicepluginobserver.h) +../inc/locodservicepluginparams.h MW_LAYER_PLATFORM_EXPORT_PATH(locodservicepluginparams.h) +../inc/locodservicepluginparams.inl MW_LAYER_PLATFORM_EXPORT_PATH(locodservicepluginparams.inl) diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/group/locod_service_plugin_api.mrp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/group/locod_service_plugin_api.mrp Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,25 @@ +# +# Copyright (c) 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: +# + +component locod_service_plugin_api + +source \sf\mw\remoteconn\localconnectivityservice\locod_service_plugin_api + +notes_source \component_defs\release.src + +ipr E + + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/inc/locodserviceplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/inc/locodserviceplugin.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin base class declaration. +* +*/ + + +#ifndef C_LOCODSERVICEPLUGIN_H +#define C_LOCODSERVICEPLUGIN_H + +#include + +#include "locodservicepluginparams.h" +#include "locodbearer.h" + +/** + * Service Plugin base class + * + * This is the base class from which service plugins inherit. + * + * When a service plugin is constructed, it should not start any service by default. + * A service is started on demand when the bearer is available. + * + * @euser.lib + * @since S60 v3.2 + */ +class CLocodServicePlugin : public CBase + { +public: + + static CLocodServicePlugin* NewL(TLocodServicePluginParams& aParams); + + virtual ~CLocodServicePlugin(); + + /** + * Tell service plugin which service should be enabled or disabled according to + * specified bearer and its status. + * + * On completion, the plugin should call + * MLocodServicePluginObserver::ManageServiceCompleted() to inform the result. + * + * @since S60 v3.2 + * @param aBearer the bearer identification + * @param aStatus the status of this bearer, ETrue if it is available; + * EFalse otherwise. + */ + virtual void ManageService(TLocodBearer aBearer, TBool aStatus) = 0; + + TUid ImplementationUid() const; + +protected: + + CLocodServicePlugin(TLocodServicePluginParams& aParams); + + /** + * Gets the observer interface object associated with this plugin + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodServicePluginObserver& Observer() const; + +private: // data + + /** + * UID set by ECOM when the instance is created. Used when the instance + * is destroyed. + */ + TUid iInstanceUid; + + /** + * Implementation UID of the concrete instance. + */ + const TUid iImplementationUid; + + /** + * Holds the observer object which will be notified when the operations + * complete + * Not own. + */ + MLocodServicePluginObserver& iObserver; + + }; + +#include + +#endif // C_LOCODSERVICEPLUGIN_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/inc/locodserviceplugin.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/inc/locodserviceplugin.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin construction parameters +* declaration +* +*/ + + +#include + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline CLocodServicePlugin* CLocodServicePlugin::NewL(TLocodServicePluginParams& aParams) + { + CLocodServicePlugin* self = reinterpret_cast( + REComSession::CreateImplementationL( + aParams.ImplementationUid(), + _FOFF(CLocodServicePlugin, iInstanceUid), + (TAny*)&aParams) + ); + + return self; + } + + +// ----------------------------------------------------------------------------- +// Service plug ins destructor +// ----------------------------------------------------------------------------- +// +inline CLocodServicePlugin::~CLocodServicePlugin() + { + REComSession::DestroyedImplementation(iInstanceUid); + } + +// ----------------------------------------------------------------------------- +// returns the implementation UID +// ----------------------------------------------------------------------------- +// +inline TUid CLocodServicePlugin::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// CLocodServicePlugin C++ constructor +// ----------------------------------------------------------------------------- +// +inline CLocodServicePlugin::CLocodServicePlugin(TLocodServicePluginParams& aParams) + : iImplementationUid(aParams.ImplementationUid()), + iObserver(aParams.Observer()) + { + } + +// ----------------------------------------------------------------------------- +// return the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodServicePluginObserver& CLocodServicePlugin::Observer() const + { + return iObserver; + } + diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/inc/locodservicepluginobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/inc/locodservicepluginobserver.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin observer interface definition. +* +*/ + + +#ifndef M_LOCODSERVICEPLUGINOBSERVER_H +#define M_LOCODSERVICEPLUGINOBSERVER_H + +#include "locodbearer.h" + +/** + * LCD Service Plugin Observer interface class + * + * This is the service plugin observer interface definition used by LCD + * Service Plugins to inform the daemon when an action is complete. + * + * @lib + * @since S60 v3.2 + */ +class MLocodServicePluginObserver + { +public: + + /** + * This is a callback function used by the plugins to inform when + * managing the service have completed. The parameters passed should be + * identical to the ones used when the plugin's ManageService() was called, + * plus this service plugin's implemnetation UID and the completion status. + * + * @since S60 v3.2 + * @param aBearer the bearer identification passed in ManageService() + * @param aStatus the status of this bearer passed in ManageService() + * @param aServiceImplUid, the implementation UID of this service plugin. + * @param err KErrNone if the operation succeeded; otherwise a Symbian + * error code. + */ + virtual void ManageServiceCompleted( + TLocodBearer aBearer, + TBool aStatus, + TUid aServiceImplUid, + TInt err) = 0; + }; + +#endif // M_LOCODSERVICEPLUGINOBSERVER_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/inc/locodservicepluginparams.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/inc/locodservicepluginparams.h Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin construction parameters +* declaration +* +*/ + + +#ifndef T_LOCODSERVICEPLUGINPARAMS_H +#define T_LOCODSERVICEPLUGINPARAMS_H + +class MLocodServicePluginObserver; + +/** + * LCD Service Plugin Callback construction parameters + * + * This interface class is used to pass construction parameters to the + * plugins. These parameters include the callback interface (usually + * implemented by the LCD) and the ECOM plugin implementation UID + * + * @lib ?library + * @since S60 v3.2 + */ +class TLocodServicePluginParams + { +public: + /** + * Constructor. + * + * @since S60 v3.2 + * @param aUid Implementation UID of the plugin being constructed + * @param aObserver Callback interface object + */ + TLocodServicePluginParams(TUid aUid, MLocodServicePluginObserver& aObserver); + + /** + * Gets the implementation UID of the plugin + * + * @since S60 v3.2 + * @return Implementaion UID + */ + TUid ImplementationUid() const; + + /** + * Gets the observer interface object + * + * @since S60 v3.2 + * @return The observer object + */ + MLocodServicePluginObserver& Observer() const; + +private: // data + + /** + * The implementation UID + */ + const TUid iImplementationUid; + + /** + * Reference to the observer object + */ + MLocodServicePluginObserver& iObserver; + + }; + +#include "locodservicepluginparams.inl" + +#endif // T_LOCODSERVICEPLUGINPARAMS_H diff -r 453dfc402455 -r 0aa8cc770c8a remoteconn_plat/locod_service_plugin_api/inc/locodservicepluginparams.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remoteconn_plat/locod_service_plugin_api/inc/locodservicepluginparams.inl Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2006 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: This is the LCD Service Plugin construction parameters +* declaration +* +*/ + + +// ----------------------------------------------------------------------------- +// Constructor method, just saves the arguments into member variables +// ----------------------------------------------------------------------------- +// +inline TLocodServicePluginParams::TLocodServicePluginParams(TUid aUid, MLocodServicePluginObserver& aObserver) + : iImplementationUid(aUid), + iObserver(aObserver) + { + } + +// ----------------------------------------------------------------------------- +// Returns the implementation UID +// ----------------------------------------------------------------------------- +// +inline TUid TLocodServicePluginParams::ImplementationUid() const + { + return iImplementationUid; + } + +// ----------------------------------------------------------------------------- +// return the observer class +// ----------------------------------------------------------------------------- +// +inline MLocodServicePluginObserver& TLocodServicePluginParams::Observer() const + { + return iObserver; + } diff -r 453dfc402455 -r 0aa8cc770c8a sysdef_1_4_0.dtd --- a/sysdef_1_4_0.dtd Thu Aug 19 10:44:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 453dfc402455 -r 0aa8cc770c8a sysdef_1_5_1.dtd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysdef_1_5_1.dtd Tue Aug 31 16:03:15 2010 +0300 @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +