sl@0: /* sl@0: * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: #include "T_ActiveCallbackIO.h" sl@0: sl@0: /*@{*/ sl@0: _LIT(KStrNull, " "); sl@0: sl@0: _LIT(KLogErrorFileNotFound, "File '%S' Not Found. Error %d"); sl@0: _LIT(KLogErrorFileNotOpened, "File '%S' Not Opened. Error %d"); sl@0: _LIT(KLogErrorFormatError, "Format Error"); sl@0: /*@}*/ sl@0: sl@0: CT_ActiveCallbackIO* CT_ActiveCallbackIO::NewL(CDataWrapperBase& aCallback, TInt aPriority) sl@0: { sl@0: CT_ActiveCallbackIO* self=new(ELeave) CT_ActiveCallbackIO(aCallback, aPriority); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CT_ActiveCallbackIO::~CT_ActiveCallbackIO() sl@0: { sl@0: delete iBuffer; sl@0: iBuffer=NULL; sl@0: } sl@0: sl@0: CT_ActiveCallbackIO::CT_ActiveCallbackIO(CDataWrapperBase& aCallback, TInt aPriority) sl@0: : CActiveCallbackBase(aCallback, aPriority) sl@0: , iBuffer(NULL) sl@0: { sl@0: } sl@0: sl@0: sl@0: TInt CT_ActiveCallbackIO::BufferLength() sl@0: { sl@0: return iBuffer->Length(); sl@0: } sl@0: sl@0: const TDesC8& CT_ActiveCallbackIO::Buffer() sl@0: { sl@0: return *iBuffer; sl@0: } sl@0: sl@0: void CT_ActiveCallbackIO::PrepareFromStringL(TInt aRepeat, const TDesC& aString) sl@0: { sl@0: delete iBuffer; sl@0: iBuffer=NULL; sl@0: sl@0: TInt bufferLength=aString.Length()*aRepeat; sl@0: iBuffer=HBufC8::NewL(bufferLength); sl@0: iBuffer->Des().Copy(aString); sl@0: ConvertAndRepeatBuffer(aRepeat); sl@0: } sl@0: sl@0: void CT_ActiveCallbackIO::PrepareFromFileL(TInt aRepeat, const TDesC& aFilename) sl@0: { sl@0: delete iBuffer; sl@0: iBuffer=NULL; sl@0: sl@0: TFindFile findFile(iDataWrapperBase.FileServer()); sl@0: TInt err=findFile.FindByDir(aFilename, KStrNull); sl@0: if ( err!=KErrNone ) sl@0: { sl@0: iDataWrapperBase.ERR_PRINTF3(KLogErrorFileNotFound, &aFilename, err); sl@0: iDataWrapperBase.SetBlockResult(EFail); sl@0: } sl@0: else sl@0: { sl@0: const TDesC& fileName=findFile.File(); sl@0: RFile file; sl@0: err=file.Open(iDataWrapperBase.FileServer(), fileName, EFileRead|EFileShareAny); sl@0: if ( err!=KErrNone ) sl@0: { sl@0: iDataWrapperBase.ERR_PRINTF3(KLogErrorFileNotOpened, &aFilename, err); sl@0: iDataWrapperBase.SetBlockResult(EFail); sl@0: } sl@0: else sl@0: { sl@0: CleanupClosePushL(file); sl@0: iDataWrapperBase.INFO_PRINTF1(_L("File Opened.")); sl@0: sl@0: // get size sl@0: TInt bufferLength; sl@0: User::LeaveIfError(file.Size(bufferLength)); sl@0: bufferLength*=aRepeat; sl@0: iDataWrapperBase.INFO_PRINTF2(_L("File Size=%d."), bufferLength); sl@0: sl@0: // read file sl@0: iBuffer=HBufC8::NewL(bufferLength); sl@0: iDataWrapperBase.INFO_PRINTF1(_L("Buffer created.")); sl@0: sl@0: TPtr8 fileData = iBuffer->Des(); sl@0: User::LeaveIfError(file.Read(fileData)); sl@0: CleanupStack::PopAndDestroy(&file); sl@0: sl@0: ConvertAndRepeatBuffer(aRepeat); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CT_ActiveCallbackIO::ConvertAndRepeatBuffer(TInt aRepeat) sl@0: { sl@0: ConvertEscapeChars(iBuffer->Des()); sl@0: sl@0: TPtr8 ptr=iBuffer->Des(); sl@0: sl@0: for ( TInt index=1; indexDes().Append(ptr); sl@0: } sl@0: } sl@0: sl@0: void CT_ActiveCallbackIO::ConvertEscapeChars(TPtr8 aBuffer) sl@0: { sl@0: TInt ret=KErrNone; sl@0: TInt length=aBuffer.Length(); sl@0: TInt position=0; sl@0: TBool escapeFound=EFalse; sl@0: sl@0: for ( TInt index=0; index