phoneapp/phoneuiview/src/phoneringingtonesrv.cpp
branchRCL_3
changeset 62 5266b1f337bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/phoneringingtonesrv.cpp	Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,404 @@
+/*
+* Copyright (c) 2002-2005,2007 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:  Ringing tone server.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32svr.h>
+
+#include "phoneringingtonesrv.h"
+#include "phoneringingtonesrvsession.h"
+#include "phoneringingtonesrvplayerao.h"
+#include "phoneuiviewtrace.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::CPhoneRingingToneServer
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServer::CPhoneRingingToneServer()
+    : CServer2( EPriorityHigh )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::~CPhoneRingingToneServer
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServer::~CPhoneRingingToneServer()
+    {
+    delete iPlayer; 
+    iPlayer = 0;
+    iFs.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::NewLC
+// -----------------------------------------------------------------------------
+//
+CPhoneRingingToneServer* CPhoneRingingToneServer::NewLC()
+    {
+    CPhoneRingingToneServer* self = new (ELeave) CPhoneRingingToneServer;
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::ConstructL()
+    {
+    User::LeaveIfError( iFs.Connect() );
+
+    // Allocate player
+    iPlayer = CPhoneRingingToneSrvPlayerAO::NewL( iFs );
+
+    // Try to start the server
+    StartL( KRingingToneServerName );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::NewSessionL
+// -----------------------------------------------------------------------------
+//
+CSession2* CPhoneRingingToneServer::NewSessionL( const TVersion& /*aVersion*/,  const RMessage2& /*aMessage*/ ) const
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServerSession::NewSessionL" );
+
+    return CPhoneRingingToneServerSession::NewL( *const_cast<CPhoneRingingToneServer*>(this) );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::StartSession
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingToneServer::StartSession()
+    {
+    TInt err( KErrNone );
+
+    if( !iSessionInUse )
+        {
+        iSessionInUse = ETrue;
+        }
+    else
+        {
+        err = KErrAccessDenied;
+        }
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::StartSession err %d", err );
+
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::CloseSession
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::CloseSession()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::CloseSession()" );
+
+    CActiveScheduler::Stop();
+    iSessionInUse = EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::ThreadEntryFunc
+// -----------------------------------------------------------------------------
+//
+TInt CPhoneRingingToneServer::ThreadEntryFunc( TAny* /*aPtr*/ )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::ThreadEntryFunc <" );
+    // Allocate cleanup stack, active scheduler and server
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+    CActiveScheduler* scheduler = new CActiveScheduler;
+
+    // Check that all allocations were ok
+    if ( !cleanup || !scheduler )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::ThreadEntryFunc: OOM" );
+        // Out of memory
+        delete scheduler;
+        delete cleanup;
+
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::ThreadEntryFunc >" );
+        return KErrNoMemory;
+        }
+
+    // Install active scheduler
+    CActiveScheduler::Install( scheduler );
+
+    // Run the server
+    TRAPD( err, CPhoneRingingToneServer::RunServerL() );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::ThreadEntryFunc: RunServerL err %d", err );
+
+    // Uninstall active scheduler
+    CActiveScheduler::Install( NULL );
+
+    // Cleanup
+    delete scheduler;
+    delete cleanup;
+
+    return err;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::RunServerL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::RunServerL()
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::RunServerL <" );
+
+    // Allocate server
+    CPhoneRingingToneServer* server = CPhoneRingingToneServer::NewLC();
+
+    // Notify that we're running
+    RThread::Rendezvous( KErrNone );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::RunServerL: server is running!" );
+
+    // Start active scheduler
+    CActiveScheduler::Start();
+
+    CleanupStack::PopAndDestroy(); // server
+
+    // Won't stop until all sessions to the server are closed (last one calls CActiveScheduler::Stop)
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::RunServerL >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetExtendedSecurityNeeded
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetExtendedSecurityNeeded( TBool aNeeded )
+    {
+    iPlayer->SetExtendedSecurityNeeded( aNeeded );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetToneFileSizeLimit
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetToneFileSizeLimit( TInt aLimit )
+    {
+    iPlayer->SetToneFileSizeLimit( aLimit );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetRingingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetRingingToneL( const RMessage2& aMessage )
+    {
+    // Read filename from the message
+    TFileName filename;
+    TInt len = aMessage.GetDesLength( 0 );
+
+    aMessage.ReadL( 0, filename );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::SetRingingToneL: %S", &filename );
+
+    // Give the ringing tone to the player
+    iPlayer->SetRingingToneL( filename );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::SetDefaultRingingToneL
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::SetDefaultRingingToneL( const RMessage2& aMessage )
+    {
+    // Read filename from the message
+    TFileName filename;
+    TInt len = aMessage.GetDesLength( 0 );
+
+    aMessage.ReadL( 0, filename );
+
+    PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::SetDefaultRingingToneL: %S", &filename );
+
+    // Give the default tone to the player
+    iPlayer->SetDefaultRingingToneL( filename );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayAudioRingTone
+// -----------------------------------------------------------------------------
+//
+TBool CPhoneRingingToneServer::PlayAudioRingTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayAudioRingTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int0();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int1();
+
+    PHONEUIVIEW_PRINTF2(
+            "CPhoneRingingToneServer::PlayAudioRingTone: volume=%d, ringingType=%d", 
+            volume, ringingType);
+
+    TBool ret = iPlayer->PlayAudioRingTone( volume, ringingType, aMessage );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayAudioRingTone >" );
+
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayTtsTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayTtsTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int1();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int2();
+
+    TInt ttsLen = aMessage.GetDesLength( 0 );
+    
+    if( ttsLen <= 0 )
+        {        
+        PHONEUIVIEW_PRINTF("CPhoneRingingToneServer::PlayTtsTone: TTS length error: %d!", ttsLen);       
+        PHONEUIVIEW_PRINT("CPhoneRingingToneServer::PlayTtsTone >");         
+        return;          
+        }
+    
+    HBufC* textToSay = HBufC::New( ttsLen );
+    if ( !textToSay )
+        {
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone: OOM!" );
+        PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone >" );
+        return;
+        }
+
+    TPtr ptr( textToSay->Des() );
+
+    TInt err = aMessage.Read( 0, ptr );
+    if ( err != KErrNone )
+        {
+        PHONEUIVIEW_PRINTF( "CPhoneRingingToneServer::PlayTtsTone: read err %d", err );
+        delete textToSay;
+        return;
+        }
+
+    PHONEUIVIEW_PRINTF3(
+            "CPhoneRingingToneServer::PlayTtsTone: text=%S, volume=%d, ringingType=%d", 
+            &(*textToSay), volume, ringingType );
+
+    iPlayer->PlayTtsTone( *textToSay, volume, ringingType );
+
+    // Cleanup
+    delete textToSay;
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayTtsTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayDefaultTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayDefaultTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayDefaultTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int0();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int1();
+
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneServer::PlayDefaultTone: volume=%d, ringingType=%d", 
+        volume, ringingType );
+
+    iPlayer->PlayDefaultTone( volume, ringingType );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayDefaultTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayBackupTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayBackupTone( const RMessage2& aMessage )
+    {
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayBackupTone <" );
+
+    // Read the parameters
+    TInt volume = aMessage.Int0();
+    TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int1();
+
+    PHONEUIVIEW_PRINTF2(
+        "CPhoneRingingToneServer::PlayBackupTone: volume=%d, ringingType=%d", 
+        volume, ringingType );
+
+    iPlayer->PlayBackupTone( volume, ringingType );
+
+    PHONEUIVIEW_PRINT( "CPhoneRingingToneServer::PlayBackupTone >" );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlaySilentTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlaySilentTone()
+    {
+    iPlayer->PlaySilentTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::BeepOnce
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::BeepOnce( const RMessage2& aMessage )
+    {
+    iPlayer->BeepOnce( aMessage.Int0() );
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::PlayUnsecureVoIPTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::PlayUnsecureVoIPTone()
+    {
+    iPlayer->PlayUnsecureVoIPTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::MuteRingingTone
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::MuteRingingTone()
+    {
+    iPlayer->MuteRingingTone();
+    }
+
+// -----------------------------------------------------------------------------
+// CPhoneRingingToneServer::StopPlaying
+// -----------------------------------------------------------------------------
+//
+void CPhoneRingingToneServer::StopPlaying()
+    {
+    iPlayer->StopPlaying();
+    }
+