diff -r 000000000000 -r dd21522fd290 codhandler/roapapp/src/RoapAppDocument.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codhandler/roapapp/src/RoapAppDocument.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies 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 of class CRoapAppDocument. +* +* +*/ + + +// INCLUDE FILES + +#include +#include +#include +#include "RoapAppDocument.h" +#include "RoapAppData.h" +#include "RoapAppUi.h" +#include "RequestCompleteCallback.h" +#include "RoapAppLogger.h" +#include "DrmRights.h" +// ================= CONSTANTS ======================= +_LIT8( KRoResponseHeader, "ConstructL(); + CleanupStack::Pop( doc ); + return doc; + } + +// --------------------------------------------------------- +// CRoapAppDocument::~CRoapAppDocument() +// --------------------------------------------------------- +// +CRoapAppDocument::~CRoapAppDocument() + { + delete iData; + delete iEngine; + iParsedRights.ResetAndDestroy(); + } + +// --------------------------------------------------------- +// CRoapAppDocument::Engine() +// --------------------------------------------------------- +// +Roap::CRoapEng& CRoapAppDocument::Engine() const + { + return *iEngine; + } + +// --------------------------------------------------------- +// CRoapAppDocument::Data() +// --------------------------------------------------------- +// +const CRoapAppData& CRoapAppDocument::Data() const + { + return *iData; + } + +// --------------------------------------------------------- +// CRoapAppDocument::CreateAppUiL() +// --------------------------------------------------------- +// +CEikAppUi* CRoapAppDocument::CreateAppUiL() + { + return new (ELeave) CRoapAppUi; + } + +// --------------------------------------------------------- +// CRoapAppDocument::OpenFileL() +// --------------------------------------------------------- +// +CFileStore* CRoapAppDocument::OpenFileL +( TBool aDoOpen, const TDesC& aFilename, RFs& aFs ) + { + CLOG(( 2, _L("-> CRoapAppDocument::OpenFileL (TBool+TDesC+RFs)") )); + CLOG(( 2, _L(" CRoapAppDocument: aDoOpen(%d) aFname<%S>"), \ + aDoOpen, &aFilename )); + CFileStore* store( NULL ); + if ( aDoOpen ) + { + RFile file; + TInt err = file.Open( aFs, aFilename, + EFileShareReadersOnly | EFileStream | EFileRead ); + if ( err == KErrInUse ) + { + err = file.Open( aFs, aFilename, + EFileShareAny | EFileStream | EFileRead ); + } + CLOG(( 2, _L(" CRoapAppDocument: RFile.Open() -> err=%d)"), err )); + User::LeaveIfError( err ); + CleanupClosePushL( file ); + store = OpenFileL( aFs, file ); + CleanupStack::PopAndDestroy(); // close file + } + CLOG(( 2, _L("<- CRoapAppDocument::OpenFileL") )); + return store; + } + +// --------------------------------------------------------- +// CRoapAppDocument::OpenFileL() +// --------------------------------------------------------- +// +CFileStore* CRoapAppDocument::OpenFileL( RFs& /*aFs*/, RFile& aFile ) + { + CLOG(( 2, _L("-> CRoapAppDocument::OpenFileL (RFs+RFile)") )); + CFileStore* store( NULL ); + OpenFileL( store, aFile ); + CLOG(( 2, _L("<- CRoapAppDocument::OpenFileL (RFs+RFile)") )); + return store; + } + +// --------------------------------------------------------- +// CRoapAppDocument::OpenFileL() +// --------------------------------------------------------- +// +void CRoapAppDocument::OpenFileL( CFileStore*& aFileStore, RFile& aFile ) + { + CLOG(( 2, _L("-> CRoapAppDocument::OpenFileL (CFileStore+RFile)") )); + if( iFileOpened ) + { + CLOG(( 2, _L("<- CRoapAppDocument::OpenFileL: iFileOpened == ETrue") )); + return; + } + if( iEngine->IsActive() ) + { + // Busy with something else. + // Maybe we should Cancel the ongoing operation? I don't think so. + CLOG(( 2, _L(" leave with KErrNotReady") )); + User::Leave( KErrNotReady ); + } + TInt fSize; + User::LeaveIfError( aFile.Size( fSize ) ); + HBufC8* buf = HBufC8::NewLC( fSize ); + TPtr8 bufP( buf->Des() ); + User::LeaveIfError( aFile.Read( bufP ) ); + iFileOpened = ETrue; + // 1-Pass RO addition + if( buf->Find( KRoResponseHeader ) != KErrNotFound ) + { + TInt ret = 0; + TRAP (ret, iEngine->HandleRoReponseL( bufP, iParsedRights ) ); + if ( ret == KErrNone && iParsedRights.Count() ) + { + // Ro's parsed succesfully, buf can be re-used, + CleanupStack::PopAndDestroy( buf ); + aFileStore = NULL; + buf = NULL; + for( TUint i = 0; i < iParsedRights.Count(); i++ ) + { + iParsedRights[i]->GetContentURI( buf ); + CleanupStack::PushL( buf ); + iData->iContentIdList.AppendL( buf ); + CleanupStack::Pop(); // buf + } + if( iAppUi ) + { + // Show notes + iData->iType = Roap::ERoAcquisitionTrigger; + STATIC_CAST( CRoapAppUi*, iAppUi )->HandleOnePassRoL(KErrNone); + } + } + else + { + CleanupStack::PopAndDestroy( buf ); + if( iAppUi ) + { + // Show notes + iData->iType = Roap::ERoAcquisitionTrigger; + STATIC_CAST( CRoapAppUi*, iAppUi )->HandleOnePassRoL(ret); + } + } + // close the file + aFile.Close(); + iFileOpened = EFalse; + return; + } + // end of 1-Pass RO addition + const CAiwGenericParamList* params = GetInputParameters(); + iEngine->SetTriggerL + ( + bufP, + params, + iData->iType, + iData->iContextStatus, + iData->iDomainOperation, + iData->iContentIdList + ); + if ( iEngine->Trigger().iRiAlias ) + { + iData->iRiAlias = iEngine->Trigger().iRiAlias->AllocL(); + } + CleanupStack::PopAndDestroy( buf ); + iFileOpened = EFalse; + aFile.Close(); +#ifdef __TEST_ROAP_APP_LOG + CLOG(( 4, _L(" Trigger type(%d) contextStatus(%d) domainOp(%d)"), \ + iData->iType, iData->iContextStatus, iData->iDomainOperation )); + TPtrC8 ptr; + for ( TInt i = 0; i < iData->iContentIdList.Count(); i++ ) + { + ptr.Set( iData->iContentIdList[i]->Des() ); + CLOG(( 4, _L8(" cid#%d:<%S>"), i, &ptr )); + } + if ( iData->iRiAlias ) + { + ptr.Set( iData->iRiAlias->Des() ); + CLOG(( 4, _L8(" riAlias <%S>"), &ptr )); + } + else + { + CLOG(( 4, _L8(" riAlias NULL") )); + } +#endif /* def __TEST_ROAP_APP_LOG */ + if ( iAppUi ) + { + STATIC_CAST( CRoapAppUi*, iAppUi )->HandleTriggerParsedL(); + } + CLOG(( 2, _L("<- CRoapAppDocument::OpenFileL (CFileStore+RFile)") )); + aFileStore = NULL; + } + +// --------------------------------------------------------- +// CRoapAppDocument::CRoapAppDocument() +// --------------------------------------------------------- +// +CRoapAppDocument::CRoapAppDocument( CEikApplication& aApp ) +: CAiwGenericParamConsumer( aApp ) + { + } + +// --------------------------------------------------------- +// CRoapAppDocument::ConstructL() +// --------------------------------------------------------- +// +void CRoapAppDocument::ConstructL() + { + CLOG(( 2, _L("-> CRoapAppDocument::ConstructL") )); + iEngine = Roap::CRoapEng::NewL(); + iData = CRoapAppData::NewL(); + CLOG(( 2, _L("<- CRoapAppDocument::ConstructL") )); + }