mmserv/voipaudioservices/VoIPIntfc/src/VoIPRingTonePlayerImpl.cpp
changeset 0 71ca22bcf22a
child 53 eabc8c503852
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/voipaudioservices/VoIPIntfc/src/VoIPRingTonePlayerImpl.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2007-2008 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: VOIP Audio Service
+*
+*/
+
+
+#include <e32base.h>
+#include "VoIPAudioSession.h"
+#include "VoIPRingTonePlayerImpl.h"
+
+// CONSTANTS
+//_LIT8(KMimetypeMP3, "audio/mpeg");
+
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::NewL
+// ---------------------------------------------------------------------------
+//
+CRingTonePlayerImpl* CRingTonePlayerImpl::NewL()
+    {
+    CRingTonePlayerImpl* self = new (ELeave) CRingTonePlayerImpl();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::~CRingTonePlayerImpl
+// ---------------------------------------------------------------------------
+//
+CRingTonePlayerImpl::~CRingTonePlayerImpl()
+    {
+    Close();
+
+    if (iMsgQComHandler)
+        {
+        iMsgQComHandler->Cancel();
+        delete iMsgQComHandler;
+        }
+
+    if (iMsgComQueue.Handle() > 0)
+        {
+        iMsgComQueue.Close();
+        }
+
+    if (iVoIPAudioSession.Handle() > 0)
+        {
+        iVoIPAudioSession.Close();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::CRingTonePlayerImpl
+// ---------------------------------------------------------------------------
+//
+CRingTonePlayerImpl::CRingTonePlayerImpl()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::ConstructL()
+    {
+    // Pass ownership to the parent class
+    CRingTonePlayer::ConstructL(this);
+
+    TInt err = iVoIPAudioSession.Connect();
+    User::LeaveIfError(err);
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::OpenL
+//
+// Gets ring tone from the Profiles
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::OpenL(MRingToneObserver& aObserver)
+    {
+    iObserver = &aObserver;
+    StartMsgQueueL();
+
+    TInt err = iVoIPAudioSession.OpenRingTonePlayer();
+    User::LeaveIfError(err);
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::OpenL
+//
+// Plays ring tone from file
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::OpenL(MRingToneObserver& aObserver, TPtr aFileName)
+    {
+    iObserver = &aObserver;
+    StartMsgQueueL();
+    TInt err = iVoIPAudioSession.OpenRingTonePlayer(aFileName);
+    User::LeaveIfError(err);
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::OpenL
+//
+// Plays ring tone from file handle
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::OpenL(MRingToneObserver& aObserver,
+                                RFile& aFileHandle)
+    {
+    iObserver = &aObserver;
+    StartMsgQueueL();
+    TInt err = iVoIPAudioSession.OpenRingTonePlayer(aFileHandle);
+    User::LeaveIfError(err);
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::OpenL
+//
+// Plays ring tone from a descriptor string based on its MIME type
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::OpenL(MRingToneObserver& aObserver,
+                                TPtr8 aDesTone,
+                                TPtr8 /*aMimeType*/)
+    {
+    iObserver = &aObserver;
+    StartMsgQueueL();
+
+    TInt size = aDesTone.Size();
+
+    if (size <= 0)
+        {
+        User::Leave(KErrArgument);
+        }
+    else
+        {
+//        size += aMimeType.Size();
+
+        HBufC8* tone = HBufC8::NewLC(size);
+        TPtr8 ptr = tone->Des();
+/*
+        if (aMimeType.Compare(KMimetypeMP3) == 0)
+            {
+            // MP3 requires mime header
+            ptr.Copy(aMimeType);
+            ptr.Append(aDesTone);
+            }
+        else
+            {*/
+            ptr.Copy(aDesTone);
+//            }
+
+        TInt err = iVoIPAudioSession.OpenRingTonePlayer(*tone);
+        CleanupStack::PopAndDestroy(tone);
+        User::LeaveIfError(err); //return error via trap mechanism
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::Play
+// ---------------------------------------------------------------------------
+//
+TInt CRingTonePlayerImpl::Play()
+    {
+    TInt err = iVoIPAudioSession.PlayRingTone();
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::Pause
+// ---------------------------------------------------------------------------
+//
+TInt CRingTonePlayerImpl::Pause()
+    {
+    TInt err = iVoIPAudioSession.PauseRingTone();
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::Resume
+// ---------------------------------------------------------------------------
+//
+TInt CRingTonePlayerImpl::Resume()
+    {
+    TInt err = iVoIPAudioSession.ResumeRingTone();
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::Stop
+// ---------------------------------------------------------------------------
+//
+TInt CRingTonePlayerImpl::Stop()
+    {
+    TInt err = iVoIPAudioSession.StopRingTone();
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::Close
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::Close()
+    {
+    iVoIPAudioSession.CloseRingTonePlayer();
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::StrartMsgQueueL
+//
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::StartMsgQueueL()
+    {
+    if (iMsgComQueue.Handle() <= 0)
+        {
+        TInt err = iMsgComQueue.CreateGlobal(KRingToneComQueue,
+                                             KVoIPMsgComQSlots);
+        User::LeaveIfError(err);
+        }
+
+    ReceiveMsgQComHandlerEventsL();
+    }
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::ReceiveMsgQComHandlerEventsL
+// Starts message queue handler (A/O) to monitor server side events
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::ReceiveMsgQComHandlerEventsL()
+    {
+    if (iMsgQComHandler)
+        {
+        iMsgQComHandler->Cancel();
+        }
+    else
+        {
+        iMsgQComHandler = CQueueHandler::NewL(this, &iMsgComQueue);
+        }
+
+    iMsgQComHandler->Start();
+    }
+
+
+// ======== CALLBACK FUNCTIONS ========
+
+
+// ---------------------------------------------------------------------------
+// CRingTonePlayerImpl::Event
+//
+// From MQueueHandlerObserver
+// ---------------------------------------------------------------------------
+//
+void CRingTonePlayerImpl::Event(TInt aEventType, TInt aError)
+    {
+    iObserver->Event(*this, aEventType, aError);
+    }
+
+
+// End of file