codhandler/roapapp/src/RoapAppDocument.cpp
changeset 0 dd21522fd290
child 68 92a765b5b3e7
--- /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 <RoapEng.h>
+#include <roaptrigger.h>
+#include <AiwGenericParam.h>
+#include "RoapAppDocument.h"
+#include "RoapAppData.h"
+#include "RoapAppUi.h"
+#include "RequestCompleteCallback.h"
+#include "RoapAppLogger.h"
+#include "DrmRights.h" 
+// ================= CONSTANTS =======================
+_LIT8( KRoResponseHeader, "<roap:roResponse" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CRoapAppDocument::NewL()
+// ---------------------------------------------------------
+//
+CRoapAppDocument* CRoapAppDocument::NewL( CEikApplication& aApp )
+    {
+    CRoapAppDocument* doc = new (ELeave) CRoapAppDocument( aApp );
+    CleanupStack::PushL( doc );
+    doc->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<RFile>( 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")  ));
+    }