diff -r 17af172ffa5f -r 630d2f34d719 fax/faxclientandserver/Test/TE_FAX/TE_FaxBase.cpp --- a/fax/faxclientandserver/Test/TE_FAX/TE_FaxBase.cpp Thu Aug 19 11:03:36 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,490 +0,0 @@ -// Copyright (c) 1997-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: -// Telephony Fax Test base test code. -// -// - -/** - @file - @internalComponent -*/ - -#include "faxdefn.h" -#include "fax_reversebytes.h" -#include "FAXSET.H" -#include "CFAX32.H" - -#include "TE_FaxBase.h" - - #include - - using namespace CommsDat; - - -// -// Constants... -// -const TInt KFaxTestLogPeriod = 5*1000000; -_LIT(KTEFaxINIFileName, "Z:\\TestData\\Configs\\TE_Fax.INI"); -_LIT8(KTEFaxINIDestNumber, "DestPhoneNumber"); - - -/** - * Default constructor. - */ -CFaxTestStep::CFaxTestStep() - { - // NOP - } // CFaxTestStep::CFaxTestStep - - -/** - * Default destructor. - */ -CFaxTestStep::~CFaxTestStep() - { - // NOP - } // CFaxTestStep::~CFaxTestStep - - -/** - * Pre-amble function called before all tests. - * - * @return Test verdict for this test. - */ -TVerdict CFaxTestStep::doTestStepPreambleL() - { - // - // Mark for memory leaks!!! - // - __UHEAP_MARK; - - // - // Create an Active Scheduler... - // - iScheduler = new(ELeave) CActiveScheduler(); - CActiveScheduler::Install(iScheduler); - - return TestStepResult(); - } // CFaxTestStep::doTestStepPreambleL - - -/** - * Post-amble function called before all tests. - * - * @return Test verdict for this test. - */ -TVerdict CFaxTestStep::doTestStepPostambleL() - { - delete iScheduler; - iScheduler = NULL; - - // - // Check the heap for memory leaks... - // - __UHEAP_MARKEND; - - return TestStepResult(); - } // CFaxTestStep::doTestStepPostambleL - - -/** - * Initialise the Fax settings based on default values and CommDB settings. - * - * @param aFaxSettings Fax Settings stucture to initialise. - */ -void CFaxTestStep::ReadDestPhoneNumberFromIniFileL(TDes8& aPhoneNumber) - { - // - // Open the INI file... - // - RFs fs; - RFile file; - TInt result; - - result = fs.Connect(); - TESTCHECKL(result, KErrNone); - CleanupClosePushL(fs); - - result = file.Open(fs, KTEFaxINIFileName, EFileShareAny | EFileRead); - if (result != KErrNone) - { - INFO_PRINTF2(_L("Cannot load TE_Fax.ini file! (Error %d)"), result); - TESTCHECKL(result, KErrNone); - } - CleanupClosePushL(file); - - // - // Get the file size and and then load the file into memory... - // - TInt fileSize; - - result = file.Size(fileSize); - TESTCHECKL(result, KErrNone); - TESTL(fileSize > 0); - - HBufC8* fileContents = HBufC8::NewLC(fileSize); - TPtr8 fileContentsPtr(fileContents->Des()); - - result = file.Read(0, fileContentsPtr); - TESTCHECKL(result, KErrNone); - - // - // Parse the contents of the file... - // - TLex8 lexInput(fileContentsPtr); - - while (!lexInput.Eos()) - { - TPtrC8 token(lexInput.NextToken()); - lexInput.SkipSpace(); - - if (token.Find(KTEFaxINIDestNumber) == KErrNone) - { - lexInput.SkipSpaceAndMark(); - - TPtrC8 phoneNumberPtr(lexInput.NextToken()); - TBuf<32> phoneNumber; - - phoneNumber.Copy(phoneNumberPtr); - INFO_PRINTF2(_L("Phone number read from INI file as \"%S\"."), &phoneNumber); - - aPhoneNumber.Copy(phoneNumber); - } - } - - // - // Done, clean up... - // - CleanupStack::PopAndDestroy(fileContents); - CleanupStack::PopAndDestroy(&file); - CleanupStack::PopAndDestroy(&fs); - } // CFaxTestStep::ReadDestPhoneNumberFromIniFileL - - -/** - * Initialise the Fax settings based on default values and CommDB settings. - * - * @param aFaxSettings Fax Settings stucture to initialise. - */ -void CFaxTestStep::ReadFaxCommDBSettingsL(TFaxSettings& aFaxSettings) - { - INFO_PRINTF1(_L("Reading Fax settings from the CommDB.")); - - // - // Initialise the default values... - // - aFaxSettings.iFaxId.Zero(); - aFaxSettings.iMaxSpeed = 14400; - aFaxSettings.iMinSpeed = 2400; - aFaxSettings.iPreferredResolution = EFaxFine; - aFaxSettings.iPreferredCompression = EModifiedHuffman; - aFaxSettings.iPreferredECM = EFalse; - aFaxSettings.iFaxOnDemandDelay = 20; - aFaxSettings.iVerbose = 1; - - // - // Now we now read the Comm DB modem settings - we must have - // these to run... - // -#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY - CMDBSession* db = CMDBSession::NewL(KCDVersion1_2); -#else - CMDBSession* db = CMDBSession::NewL(KCDVersion1_1); -#endif - CleanupStack::PushL(db); - - // - // Read the currently selected connection preference and find preferred IAP... - // - TInt prefRank = 1; - - CCDConnectionPrefsRecord *connectionPrefs = - static_cast(CCDRecordBase::RecordFactoryL(KCDTIdConnectionPrefsRecord)); - CleanupStack::PushL(connectionPrefs); - connectionPrefs->iRanking = prefRank; - connectionPrefs->iDirection = ECommDbConnectionDirectionOutgoing; - connectionPrefs->FindL(*db); - - // The following code is a temporary solution until an issue has been resolved in CommsDat - // start - CCDIAPRecord* tempPIapRecord = - static_cast(CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord)); - tempPIapRecord->SetRecordId(connectionPrefs->iDefaultIAP); - connectionPrefs->iDefaultIAP.iLinkedRecord = tempPIapRecord; - - CCDIAPRecord* pIapRecord = (CCDIAPRecord*)connectionPrefs->iDefaultIAP.iLinkedRecord; - pIapRecord->SetRecordId(connectionPrefs->iDefaultIAP); - pIapRecord->LoadL(*db); - - CCDBearerRecordBase* tempBearerRecord = - static_cast(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord)); - tempBearerRecord->SetRecordId(pIapRecord->iBearer); - pIapRecord->iBearer.iLinkedRecord = tempBearerRecord; - - CCDBearerRecordBase* pBearerRecord = (CCDBearerRecordBase*) pIapRecord->iBearer.iLinkedRecord; - pBearerRecord->SetRecordId(pIapRecord->iBearer); - pBearerRecord->LoadL(*db); - // end - - TUint32 iapId = pBearerRecord->iRecordTag; - - // - // Get bearer number from IAP table, it is assumed bearer type will be a modem... - // - CMDBField* bearerField = new(ELeave) CMDBField(KCDTIdIAPBearer); - CleanupStack::PushL(bearerField); - bearerField->SetRecordId(iapId); - bearerField->LoadL(*db); - TUint32 modemId = *bearerField; - CleanupStack::PopAndDestroy(bearerField); - - // - // Get modem parameters... - // - CCDModemBearerRecord *modemRecord = - static_cast(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord)); - CleanupStack::PushL(modemRecord); - modemRecord->SetRecordId(modemId); - modemRecord->LoadL(*db); - iPortDriverName = modemRecord->iCsyName; - iCommPortName = modemRecord->iPortName; - iFaxInitString = modemRecord->iFaxInitString; - iModemInitString = modemRecord->iModemInitString; - - TUint32 faxClass; - faxClass = modemRecord->iFaxClassPref; - aFaxSettings.iFaxClass = (TFaxClass) faxClass; - - CleanupStack::PopAndDestroy(3); // db, connectionPrefs, modemId - - } // CFaxTestStep::ReadFaxCommDBSettingsL - - -/** - * Begin Fax Transfer. We only launch it once the elements of - * session->iFaxSessionParameters are all set up. We call it with a - * TRequestStatus and while waiting for the fax to end, we also display - * the status of the fax every second. - * - * @param aFaxSession Fax Session already in use. - */ -TInt CFaxTestStep::BeginFaxTransfer(CFaxTransfer* aFaxSession) - { - TRequestStatus threadStatus; - TRequestStatus timerStatus; - RTimer timer; - TFaxPhase lastPhase = ENotYetStarted; - TInt result; - - result = aFaxSession->Start(threadStatus); - if (result == KErrNone) - { - timer.CreateLocal (); - timer.After(timerStatus, KFaxTestLogPeriod); - - for (;;) - { - User::WaitForRequest(timerStatus, threadStatus); - if (timerStatus != KRequestPending) - { - if (aFaxSession->Progress()) - { - INFO_PRINTF1(_L("Cancelling - no progress!")); - aFaxSession->Cancel(); - } - else - { - lastPhase = aFaxSession->iProgress.iPhase; - if (lastPhase != ENotYetStarted) - { - INFO_PRINTF6(_L("Phase %c Speed %d Resolution %d Compression %dD ECM %d"), - aFaxSession->iProgress.iPhase, - aFaxSession->iProgress.iSpeed, - aFaxSession->iProgress.iResolution, - aFaxSession->iProgress.iCompression+1, - aFaxSession->iProgress.iECM); - INFO_PRINTF4(_L("Line %d Page %d Connected to \"%S\""), - aFaxSession->iProgress.iLines, - aFaxSession->iProgress.iPage, - &aFaxSession->iProgress.iAnswerback); - } - timer.After(timerStatus, KFaxTestLogPeriod); - } - } - else if (threadStatus != KRequestPending) - { - aFaxSession->Stop(); - - timer.Cancel(); - User::WaitForRequest(timerStatus); - timer.Close (); - - result = threadStatus.Int(); - break; - } - } - } - - if (result == KFaxErrNoHangup) - { - // - // KFaxErrNoHangup is a phase E error and can be safely ignored. - // - result = KErrNone; - } - - return (result); - } // CFaxTestStep::BeginFaxTransfer() - - -void CFaxTestStep::GenerateHeaderFileL(TFaxSettings& aFaxSettings, const TUint8* aFont, - TInt aWidth, TInt aHeight) -{ - TFaxHeaderInfo faxHeader; - - // - // Declare the font size... - // - faxHeader.iHeaderFontWidthInBytes = aWidth; - faxHeader.iHeaderFontHeightInLines = aHeight; - - // - // Work out the number of characters we can get in the scan line, so that we can - // create a modifiable buffer to hold the header line and fill it with spaces - // - TInt charactersPerLine = KFaxBytesPerScanLine / faxHeader.iHeaderFontWidthInBytes; - HBufC8* textBuff = HBufC8::New(charactersPerLine); - CleanupStack::PushL(textBuff); - - if (!textBuff) - { - User::Leave (KErrNoMemory); - } - - TPtr8 textLine = textBuff->Des(); - textLine.Fill(' ', charactersPerLine); - - // - // Work out the margin we leave on each side of the page in characters - // this is specified as 74 pixels in T.4. - // - TInt margin = (74 / (8 * faxHeader.iHeaderFontWidthInBytes)); - - // - // THE FOLLOWING LAYOUT IS PURELY FOR TEST PURPOSES AND SHOULDN'T - // BE TAKEN TO BE A DEFINITIVE HEADER LAYOUT - // - // - // assume we have the date and time on the lefthand side as dd/mm/yyyy hh:mm - // 0000000001111111 - // 1234567890123456 - // fill in the separators - // - textLine.Replace(margin + 3, 1, _L8 ("/")); - textLine.Replace(margin + 6, 1, _L8 ("/")); - textLine.Replace(margin + 14, 1, _L8 (":")); - - // - // Set up the offsets to the data... - // - faxHeader.iOffsetToDay = margin + 1; - faxHeader.iOffsetToMonth = margin + 4; - faxHeader.iOffsetToYear = margin + 7; - faxHeader.iOffsetToHour = margin + 12; - faxHeader.iOffsetToMinute = margin + 15; - - // - // Assume we have the page info on the righthand side as pp/tt - // 54321 - // fill in the separator - // - textLine.Replace(charactersPerLine - margin - 3, 1, _L8 ("/")); - - // - // Set up the offsets to the data - // - faxHeader.iOffsetToTotalPages = charactersPerLine - margin - 2; - faxHeader.iOffsetToCurrentPage = charactersPerLine - margin - 5; - - // - // Fill the header line with appropriate information - // - textLine.Replace(faxHeader.iOffsetToMinute + 4, aFaxSettings.iFaxId.Length (), - aFaxSettings.iFaxId); - - // - // HEADER LAYOUT NOW FINISHED - // - // Now we can write the fax header info to the header info file - // - CFaxHeaderLines* testheader = CFaxHeaderLines::NewL(); - CleanupStack::PushL(testheader); - - testheader->WriteFaxHeaderInfoL(faxHeader); - - // - // Now we generate the scan line and write the header line bitmap - // via a loop for each rowInFont in the font. - // - TInt rowInFont; - - for (rowInFont = 0; rowInFont < faxHeader.iHeaderFontHeightInLines; rowInFont++) - { - TRawScanLine image; - - image.SetMax (); - image.FillZ (); - - TInt offsetInImage = 0; - - for (TInt characterPosition = 0; characterPosition < charactersPerLine; characterPosition++) - { - for (TInt fontByte = 0; fontByte < faxHeader.iHeaderFontWidthInBytes; fontByte++) - { - image[offsetInImage++] = (TUint8) ~ KReverseByte[*(aFont + ((textLine[characterPosition] - 32) * faxHeader.iHeaderFontHeightInLines * faxHeader.iHeaderFontWidthInBytes) + (rowInFont * faxHeader.iHeaderFontWidthInBytes) + fontByte)]; - } - } - testheader->WriteRawHeaderLineL(rowInFont, image); - } - - // - // Now we replace the first ten characters in the header text line with digits - // and write out the font line... - // - textLine.Replace(0, 10, _L8 ("0123456789")); - - for (rowInFont = 0; rowInFont < faxHeader.iHeaderFontHeightInLines; rowInFont++) - { - TRawScanLine image; - - image.SetMax (); - image.FillZ (); - - TInt offsetInImage = 0; - - for (TInt characterPosition = 0; characterPosition < charactersPerLine; characterPosition++) - { - for (TInt fontByte = 0; fontByte < faxHeader.iHeaderFontWidthInBytes; fontByte++) - { - image[offsetInImage++] = (TUint8) ~ KReverseByte[*(aFont + ((textLine[characterPosition] - 32) * faxHeader.iHeaderFontHeightInLines * faxHeader.iHeaderFontWidthInBytes) + (rowInFont * faxHeader.iHeaderFontWidthInBytes) + fontByte)]; - } - } - testheader->WriteRawFontLineL(rowInFont, image); - } - - CleanupStack::PopAndDestroy(testheader); - CleanupStack::PopAndDestroy(textBuff); - } // CFaxTestStep::GenerateHeaderFileL -