browserutilities/schemehandler/SchemeDispatcher/src/RtspHandler.cpp
changeset 0 dd21522fd290
child 8 7c90e6132015
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/schemehandler/SchemeDispatcher/src/RtspHandler.cpp	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,227 @@
+/*
+* 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 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 Scheme handler interface implementation for rtsp:// scheme
+*      
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "RtspHandler.h"
+#include "SchemeDispLogger.h"
+#include <ECom.h>		// For REComSession
+#include <eikenv.h>
+#include <DocumentHandler.h>
+#include <apgcli.h>
+#include <apparc.h>
+#include <eikdoc.h>
+#include <eikproc.h>
+#include <f32file.h>
+#include <AknLaunchAppService.h>
+
+// ================= CONSTANTS =======================
+
+LOCAL_C const TUid KUidMediaPlayer = { 0x10005A3E };
+_LIT( KRtspFileName, "c:\\system\\temp\\RtspTemp.ram" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CRtspHandler::NewL()
+// ---------------------------------------------------------
+//
+CRtspHandler* CRtspHandler::NewL( const TDesC& aUrl )
+	{
+	CLOG_ENTERFN( "CRtspHandler::NewL()" );
+
+	CRtspHandler* self=new(ELeave) CRtspHandler();
+	CleanupStack::PushL(self);
+	self->ConstructL( aUrl );
+	CleanupStack::Pop(self);
+
+	CLOG_LEAVEFN( "CRtspHandler::NewL()" );
+
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CRtspHandler::~CRtspHandler()
+// ---------------------------------------------------------
+//
+CRtspHandler::~CRtspHandler()
+	{
+	CLOG_ENTERFN( "CRtspHandler::~CRtspHandler()" );
+
+	if(iDoc != NULL)
+		{
+		CEikProcess*  hostProcess = CEikonEnv::Static()->Process();
+		hostProcess->DestroyDocument(iDoc);
+		iDoc = NULL;
+		}
+		
+	if( iLaunchAppService )
+		{
+		delete iLaunchAppService;
+		}		
+
+    if( iDocHandler )
+        {
+	    delete iDocHandler;
+        }
+
+	CLOG_LEAVEFN( "CRtspHandler::~CRtspHandler()" );
+	}
+
+// ---------------------------------------------------------
+// CRtspHandler::CRtspHandler()
+// ---------------------------------------------------------
+//
+CRtspHandler::CRtspHandler() : CBaseHandler()
+	{
+	// Deliberately do nothing here : See ConstructL() for initialisation completion.
+	}
+
+// ---------------------------------------------------------
+// CRtspHandler::ConstructL()
+// ---------------------------------------------------------
+//
+void CRtspHandler::ConstructL( const TDesC& aUrl )
+	{
+	BaseConstructL( aUrl );
+
+	iSync = EFalse;
+	}
+
+// ---------------------------------------------------------
+// CRtspHandler::HandleUrlEmbeddedL()
+// ---------------------------------------------------------
+//
+void CRtspHandler::HandleUrlEmbeddedL()
+    {
+    CLOG_ENTERFN( "CRtspHandler::HandleUrlEmbeddedL()" );
+
+    /* Launch the appropriate application in embedded mode */
+
+    CLOG_WRITE(" :launching RTSP url via temp RAM file");
+    //
+    RFs             rfs;
+    RFile           ramFile;
+
+    // 8-bit buffer is required.
+    HBufC8* urlBuf = HBufC8::NewLC( iParsedUrl->Size() );
+    CLOG_WRITE(" :HBufC8::NewL() ok");
+    urlBuf->Des().Copy( *iParsedUrl );
+    // Open the file.
+    User::LeaveIfError(rfs.Connect());
+    CleanupClosePushL(rfs);
+
+    // Replace file if exists or Create file if not exist yet
+    User::LeaveIfError( ramFile.Replace( rfs, KRtspFileName, EFileWrite | EFileShareAny ) );
+    CleanupClosePushL(ramFile);
+
+    // Write to file      
+    User::LeaveIfError( ramFile.Write( *urlBuf ) );
+    ramFile.Flush();
+    ramFile.Close();
+
+    CleanupStack::PopAndDestroy(/*ramFile*/);
+    CleanupStack::PopAndDestroy(/*rfs*/);
+    CleanupStack::PopAndDestroy( /*urlBuf*/ );
+
+    RFile ramDocTempFile;
+    if( !iDocHandler )
+        {
+        iDocHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
+        CLOG_WRITE(" :CDocumentHandler::NewL() ok");
+        }
+    iDocHandler->SetExitObserver( this );
+
+    iDocHandler->OpenTempFileL( KRtspFileName, ramDocTempFile );
+    CLOG_WRITE(" :iDocHandler->OpenTempFileL() ok");
+    CleanupClosePushL( ramDocTempFile );
+    //
+    TDataType dataType( _L8("audio/x-pn-realaudio") );
+    CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();
+    TAiwVariant filename( _L8("c:\\system\\temp\\RtspTemp.ram") );
+    TAiwGenericParam param( EGenericParamFile, filename );
+    paramList->AppendL( param );    
+
+    // Allow save among Options
+    TBool allowSave( ETrue );
+    TAiwVariant allowSaveVariant( allowSave );
+    TAiwGenericParam genericParamAllowSave
+                     ( EGenericParamAllowSave, allowSaveVariant );
+    paramList->AppendL( genericParamAllowSave );
+
+    // If iParamList is not empty, let's get it and attach to the paramlist 
+    if (iParamList)
+        {
+        paramList->AppendL(*iParamList);  
+        }
+
+    // launch RAM file via DocHandler
+    iDocHandler->OpenFileEmbeddedL( ramDocTempFile, dataType, *paramList );
+    CLOG_WRITE(" OpenFileEmbeddedL OK");
+    //
+    CleanupStack::PopAndDestroy( paramList );
+    CleanupStack::PopAndDestroy( &ramDocTempFile );
+
+    CLOG_LEAVEFN( "CRtspHandler::HandleUrlEmbeddedL()" );
+    }
+
+// ---------------------------------------------------------
+// CRtspHandler::HandleUrlStandaloneL()
+// ---------------------------------------------------------
+//
+void CRtspHandler::HandleUrlStandaloneL()
+	{
+	CLOG_ENTERFN( "CRtspHandler::HandleUrlStandaloneL()" );
+
+	RApaLsSession appArcSession;
+	User::LeaveIfError( appArcSession.Connect() );
+	TThreadId id;
+
+	appArcSession.StartDocument( iParsedUrl->Des(), KUidMediaPlayer , id );
+
+	appArcSession.Close();
+
+	CLOG_LEAVEFN( "CRtspHandler::HandleUrlStandaloneL()" );
+	}
+		
+// ---------------------------------------------------------
+// CRtspHandler::HandleServerAppExit()
+// ---------------------------------------------------------
+//
+void CRtspHandler::HandleServerAppExit(TInt aReason)
+	{
+	CLOG_ENTERFN( "CRtspHandler::HandleServerAppExit" );
+
+	if( iSync )
+		{
+	    if( iWait.IsStarted() )
+            {
+            iWait.AsyncStop();   // stop the wait loop.                                  
+            }                    // Now DoMakeCallL will return
+		}
+
+	if( NULL != iSchemeDoc )
+		{
+	    iSchemeDoc->HandleServerAppExit( aReason );
+		}
+
+	CLOG_LEAVEFN( "CRtspHandler::HandleServerAppExit" );	
+	}
+