mmserv/tms/tmsserver/src/tmsserver.cpp
changeset 12 5a06f39ad45b
parent 0 71ca22bcf22a
child 14 80975da52420
--- a/mmserv/tms/tmsserver/src/tmsserver.cpp	Tue Feb 02 01:08:46 2010 +0200
+++ b/mmserv/tms/tmsserver/src/tmsserver.cpp	Fri Apr 16 15:29:42 2010 +0300
@@ -18,22 +18,26 @@
 #include <e32svr.h>
 #include <e32uid.h>
 #include <e32capability.h>
+#include <AudioPreference.h>
 #include "tmsutility.h"
 #include "tmsclientserver.h"
-#include "tmsserver.h"
+#include "tmstelephonycenrep.h"
 #include "tmsservershutdown.h"
 #include "tmsserversession.h"
 #include "tmscallserverstartparam.h"
 #include "tmscallserver.h"
 #include "tmscallclisrv.h"
-#include "globaleffectssettings.h"
-#include "tareventhandler.h"
-#include "cspaudiohandler.h"
+#include "tmsglobaleffectssettings.h"
+#include "tmstareventhandler.h"
+#include "tmscenrepaudiohandler.h"
+#include "tmsdtmfeventhandler.h"
+#include "tmsrtparam.h"
+#include "tmsserver.h"
 
 using namespace TMS;
 
 // CONSTANTS
-const TInt KShutDownDelayTime = 5000000; // 5 sec delay time
+const TInt KTMSShutDownDelayTime = 1000000; // 1 sec delay time
 const TInt KOutputsArraySize = 10;
 
 // -----------------------------------------------------------------------------
@@ -80,6 +84,9 @@
     delete iEffectSettings;
     CancelRoutingNotifier();
     CancelCenRepHandler();
+    CancelDTMFNotifier();
+    DeinitRingTonePlayer();
+    delete iTMSRtPlayer;
 
     TRACE_PRN_FN_EXT;
     }
@@ -100,8 +107,7 @@
         }
 
     const TVersion version(KTMSServMajorVersionNumber,
-                           KTMSServMinorVersionNumber,
-                           KTMSServBuildVersionNumber);
+            KTMSServMinorVersionNumber, KTMSServBuildVersionNumber);
 
     if (!User::QueryVersionSupported(version, aVersion))
         {
@@ -126,10 +132,12 @@
     iShutdownTimer = TMSServerShutDown::NewL();
     StartL(KTMSServerName);
     RThread().SetPriority(EPriorityRealTime);
-    iEffectSettings = GlobalEffectsSettings::NewL();
+    iEffectSettings = TMSGlobalEffectsSettings::NewL();
     iTarHandler = NULL;
     iAudioCenRepHandler = NULL;
+    iDTMFHandler = NULL;
     iCurrentRouting = TMS_AUDIO_OUTPUT_NONE;
+    InitRingTonePlayerL();
 
     TRACE_PRN_FN_EXT;
     }
@@ -161,7 +169,7 @@
     if (iSession == 0)
         {
         iShutdownTimer->SetDelay(TTimeIntervalMicroSeconds32(
-                KShutDownDelayTime));
+                KTMSShutDownDelayTime));
         }
 
     TRACE_PRN_N1(_L("TMS->DNL: DropSession->Active Sessions: [%d]"), iSession);
@@ -172,7 +180,7 @@
 //
 // -----------------------------------------------------------------------------
 //
-TInt TMSServer::SessionCount()
+TInt TMSServer::SessionCount() const
     {
     return iSession;
     }
@@ -182,7 +190,7 @@
 //
 // -----------------------------------------------------------------------------
 //
-void TMSServer::SetDnLinkSession(TBool aSession)
+void TMSServer::SetDnLinkSession(const TBool aSession)
     {
     iDnlinkSession = aSession;
     }
@@ -192,7 +200,7 @@
 //
 // -----------------------------------------------------------------------------
 //
-void TMSServer::SetUpLinkSession(TBool aSession)
+void TMSServer::SetUpLinkSession(const TBool aSession)
     {
     iUplinkSession = aSession;
     }
@@ -229,7 +237,7 @@
     TInt i = 0;
     while (i < iTMSCallServList.Count())
         {
-        CStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
+        TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
         if (!callThread->IsActive())
             {
             iTMSCallServList.Remove(i);
@@ -245,6 +253,7 @@
     TMSCallProxyLocal tmsCallSessionHandle;
     User::LeaveIfError(StartTMSCallServer(tmsCallSessionHandle));
     aHandle = tmsCallSessionHandle;
+
     TRACE_PRN_FN_EXT;
     }
 
@@ -256,19 +265,19 @@
 TInt TMSServer::StartTMSCallServer(TMSCallProxyLocal& aHandle)
     {
     TRACE_PRN_FN_ENT;
-    TInt status = KErrNone;
 
-    CStartAndMonitorTMSCallThread* callServerThread = NULL;
-    TRAP(status, callServerThread =
-    CStartAndMonitorTMSCallThread::NewL(const_cast<TMSServer*>(this)));
-    if (status != KErrNone)
+    TInt status = TMS_RESULT_SUCCESS;
+    TMSStartAndMonitorTMSCallThread* callServerThread = NULL;
+    TRAP(status, callServerThread =TMSStartAndMonitorTMSCallThread::NewL(
+            const_cast<TMSServer*>(this)));
+    if (status != TMS_RESULT_SUCCESS)
         {
         delete callServerThread;
         }
     else
         {
         status = iTMSCallServList.Append(callServerThread);
-        if (callServerThread && status == KErrNone)
+        if (callServerThread && status == TMS_RESULT_SUCCESS)
             {
             status = callServerThread->StartTMSCallServer(aHandle);
             TInt count = 0;
@@ -313,10 +322,16 @@
 //
 void TMSServer::StartRoutingNotifierL()
     {
+    TRACE_PRN_FN_ENT;
+
     if (!iTarHandler)
         {
-        iTarHandler = CTarEventHandler::NewL((const_cast<TMSServer*> (this)));
+        iTarHandlerCount = 0;
+        iTarHandler = TMSTarEventHandler::NewL((const_cast<TMSServer*> (this)));
         }
+    iTarHandlerCount++;
+
+    TRACE_PRN_FN_EXT;
     }
 
 // -----------------------------------------------------------------------------
@@ -326,8 +341,11 @@
 //
 void TMSServer::CancelRoutingNotifier()
     {
-    delete iTarHandler;
-    iTarHandler = NULL;
+    if (--iTarHandlerCount <= 0)
+        {
+        delete iTarHandler;
+        iTarHandler = NULL;
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -337,13 +355,19 @@
 //
 void TMSServer::StartCenRepHandlerL()
     {
+    TRACE_PRN_FN_ENT;
+
 #ifdef _USE_TELEPHONY_CENREP_
     if (!iAudioCenRepHandler)
         {
-        iAudioCenRepHandler = CSPAudioHandler::NewL(
+        iAudioCenRepHandlerCount = 0;
+        iAudioCenRepHandler = TMSCenRepAudioHandler::NewL(
                 (const_cast<TMSServer*> (this)));
         }
+    iAudioCenRepHandlerCount++;
 #endif
+
+    TRACE_PRN_FN_EXT;
     }
 
 // -----------------------------------------------------------------------------
@@ -353,8 +377,45 @@
 //
 void TMSServer::CancelCenRepHandler()
     {
-    delete iAudioCenRepHandler;
-    iAudioCenRepHandler = NULL;
+    if (--iAudioCenRepHandlerCount <= 0)
+        {
+        delete iAudioCenRepHandler;
+        iAudioCenRepHandler = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::StartDTMFNotifierL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::StartDTMFNotifierL()
+    {
+    TRACE_PRN_FN_ENT;
+
+    if (!iDTMFHandler)
+        {
+        iDTMFHandlerCount = 0;
+        iDTMFHandler = TMSDtmfEventHandler::NewL(
+                (const_cast<TMSServer*> (this)));
+        }
+    iDTMFHandlerCount++;
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::CancelDTMFNotifier
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::CancelDTMFNotifier()
+    {
+    if (--iDTMFHandlerCount <= 0)
+        {
+        delete iDTMFHandler;
+        iDTMFHandler = NULL;
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -365,11 +426,9 @@
 TInt TMSServer::SetOutput(CSession2* /*sid*/, TInt output)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
 
-    status = SendMessageToCallServ(TMS_ROUTING_OUTPUT_SET, output);
-
-    if (status == KErrNone)
+    TInt status = SendMessageToCallServ(TMS_ROUTING_OUTPUT_SET, output);
+    if (status == TMS_RESULT_SUCCESS)
         {
         iCurrentRouting = output;
         }
@@ -389,16 +448,16 @@
 
     TUint output;
     TInt i = 0;
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     while (i < iTMSCallServList.Count())
         {
-        CStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
+        TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
 
         if (callThread)
             {
             status = callThread->iTMSCallProxyLocal.ReceiveFromCallServer(
                     TMS_ROUTING_OUTPUT_GET, output);
-            if (status != KErrNone)
+            if (status != TMS_RESULT_SUCCESS)
                 {
                 break;
                 }
@@ -407,9 +466,10 @@
         }
     TPckgBuf<TInt> p(output);
     aMessage.Write(0, p);
-    aMessage.Complete(KErrNone);
+    aMessage.Complete(TMS_RESULT_SUCCESS);
+
     TRACE_PRN_FN_EXT;
-    return KErrNone;
+    return status;
     }
 
 // -----------------------------------------------------------------------------
@@ -420,18 +480,19 @@
 TInt TMSServer::GetPreviousOutput(const RMessage2& aMessage)
     {
     TRACE_PRN_FN_ENT;
+
     TUint output;
     TInt i = 0;
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     while (i < iTMSCallServList.Count())
         {
-        CStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
+        TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
 
         if (callThread)
             {
             status = callThread->iTMSCallProxyLocal.ReceiveFromCallServer(
                     TMS_ROUTING_PREVIOUSOUTPUT_GET, output);
-            if (status != KErrNone)
+            if (status != TMS_RESULT_SUCCESS)
                 {
                 break;
                 }
@@ -440,7 +501,8 @@
         }
     TPckgBuf<TInt> p(output);
     aMessage.Write(0, p);
-    aMessage.Complete(KErrNone);
+    aMessage.Complete(TMS_RESULT_SUCCESS);
+
     TRACE_PRN_FN_EXT;
     return status;
     }
@@ -465,7 +527,7 @@
     {
     TRACE_PRN_FN_ENT;
 
-    TInt status = KErrNone;
+    TInt status = TMS_RESULT_SUCCESS;
     OutputVector outputs;
     HBufC8* buf = HBufC8::NewLC(KOutputsArraySize * sizeof(TUint32));
     TPtr8 ptr = buf->Des();
@@ -478,13 +540,13 @@
 
     while (i < iTMSCallServList.Count())
         {
-        CStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
+        TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
 
         if (callThread)
             {
             status = callThread->iTMSCallProxyLocal.ReceiveFromCallServer(
                     TMS_ROUTING_AVAILABLE_OUTPUT_GET, args);
-            if (status != KErrNone)
+            if (status != TMS_RESULT_SUCCESS)
                 {
                 break;
                 }
@@ -509,15 +571,17 @@
 TInt TMSServer::GetMaxLevel(const RMessage2& aMessage)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
+
+    TInt status(TMS_RESULT_SUCCESS);
     TPckgBuf<TUint> pckg;
 
     pckg() = iEffectSettings->MaxVolume();
-    if (status == KErrNone)
+    if (status == TMS_RESULT_SUCCESS)
         {
         status = aMessage.Write(0, pckg);
         aMessage.Complete(status);
         }
+
     TRACE_PRN_FN_EXT;
     return status;
     }
@@ -530,7 +594,8 @@
 TInt TMSServer::GetLevel(const RMessage2& aMessage)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
+
+    TInt status(TMS_RESULT_SUCCESS);
     TPckgBuf<TUint> pckg;
     TInt volume;
 
@@ -546,7 +611,7 @@
         }
 
     pckg() = volume;
-    if (status == KErrNone)
+    if (status == TMS_RESULT_SUCCESS)
         {
         aMessage.Write(0, pckg);
         aMessage.Complete(status);
@@ -564,11 +629,9 @@
 TInt TMSServer::SetLevel(CSession2* /*sid*/, TBool tmsclient, TInt level)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
 
-    status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_VOL_SET, level);
-
-    if (status == KErrNone)
+    TInt status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_VOL_SET, level);
+    if (status == TMS_RESULT_SUCCESS)
         {
         switch (iCurrentRouting)
             {
@@ -625,11 +688,11 @@
 TInt TMSServer::GetMaxGain(const RMessage2& aMessage)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
+
+    TInt status(TMS_RESULT_SUCCESS);
     TPckgBuf<TUint> pckg;
-
     pckg() = iEffectSettings->MaxGain();
-    if (status == KErrNone)
+    if (status == TMS_RESULT_SUCCESS)
         {
         status = aMessage.Write(0, pckg);
         aMessage.Complete(status);
@@ -647,11 +710,11 @@
 TInt TMSServer::GetGain(const RMessage2& aMessage)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
+
+    TInt status(TMS_RESULT_SUCCESS);
     TPckgBuf<TUint> pckg;
-
     pckg() = iEffectSettings->Gain();
-    if (status == KErrNone)
+    if (status == TMS_RESULT_SUCCESS)
         {
         status = aMessage.Write(0, pckg);
         aMessage.Complete(status);
@@ -669,11 +732,9 @@
 TInt TMSServer::SetGain(CSession2* /*sid*/, TInt level)
     {
     TRACE_PRN_FN_ENT;
-    TInt status(KErrNone);
 
-    status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_GAIN_SET, level);
-
-    if (status == KErrNone)
+    TInt status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_GAIN_SET, level);
+    if (status == TMS_RESULT_SUCCESS)
         {
         iEffectSettings->SetGain(level);
         iSessionIter.SetToFirst();
@@ -701,6 +762,8 @@
 TInt TMSServer::GetSupportedCodecs(const TMSStreamType strmType,
         RArray<TFourCC>*& aCodecs)
     {
+    TRACE_PRN_FN_ENT;
+
     if (strmType == TMS_STREAM_UPLINK)
         {
         aCodecs = &iUplCodecs;
@@ -709,7 +772,9 @@
         {
         aCodecs = &iDnlCodecs;
         }
-    return KErrNone;
+
+    TRACE_PRN_FN_EXT;
+    return TMS_RESULT_SUCCESS;
     }
 
 // -----------------------------------------------------------------------------
@@ -719,11 +784,13 @@
 //
 TInt TMSServer::SendMessageToCallServ(TInt func, TInt value)
     {
-    TInt status(KErrNone);
+    TRACE_PRN_FN_ENT;
+
+    TInt status(TMS_RESULT_SUCCESS);
     TInt i = 0;
     while (i < iTMSCallServList.Count())
         {
-        CStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
+        TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
 
         if (callThread)
             {
@@ -736,7 +803,7 @@
                 {
                 status = callThread->iTMSCallProxyLocal.SendToCallServer(
                         func, value);
-                if (status != KErrNone)
+                if (status != TMS_RESULT_SUCCESS)
                     {
                     break;
                     }
@@ -744,6 +811,8 @@
             }
         i++;
         }
+
+    TRACE_PRN_FN_EXT;
     return status;
     }
 
@@ -754,11 +823,13 @@
 //
 TInt TMSServer::SendMessageToCallServ(TInt func, TIpcArgs args)
     {
-    TInt status(KErrNone);
+    TRACE_PRN_FN_ENT;
+
+    TInt status(TMS_RESULT_SUCCESS);
     TInt i = 0;
     while (i < iTMSCallServList.Count())
         {
-        CStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
+        TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i];
 
         if (callThread)
             {
@@ -771,7 +842,7 @@
                 {
                 status = callThread->iTMSCallProxyLocal.SendToCallServer(
                         func, args);
-                if (status != KErrNone)
+                if (status != TMS_RESULT_SUCCESS)
                     {
                     break;
                     }
@@ -779,6 +850,8 @@
             }
         i++;
         }
+
+    TRACE_PRN_FN_EXT;
     return status;
     }
 
@@ -789,6 +862,8 @@
 //
 TInt TMSServer::NotifyTarClients(TRoutingMsgBufPckg routingpckg)
     {
+    TRACE_PRN_FN_ENT;
+
     iCurrentRouting = routingpckg().iOutput;
     iSessionIter.SetToFirst();
     TMSServerSession* serverSession =
@@ -799,7 +874,397 @@
         serverSession->HandleRoutingChange(routingpckg);
         serverSession = static_cast<TMSServerSession*> (iSessionIter++);
         }
-    return KErrNone;
+
+    TRACE_PRN_FN_EXT;
+    return TMS_RESULT_SUCCESS;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::StartDTMF
+//
+// -----------------------------------------------------------------------------
+//
+TInt TMSServer::StartDTMF(const RMessage2& aMessage)
+    {
+    TRACE_PRN_FN_ENT;
+
+    TInt status(TMS_RESULT_SUCCESS);
+    TInt len(0);
+    TMSStreamType strmtype;
+
+    strmtype = (TMSStreamType) aMessage.Int0();
+    len = aMessage.GetDesLength(1);
+    HBufC* tone(NULL);
+    if (len > 0)
+        {
+        delete tone;
+        tone = NULL;
+        TRAP(status,tone = HBufC::NewL(len));
+        if (status == TMS_RESULT_SUCCESS)
+            {
+            TPtr ptr = tone->Des();
+            status = aMessage.Read(1, ptr);
+            TRACE_PRN_N(ptr);
+
+            TIpcArgs args;
+            args.Set(0, strmtype);
+            args.Set(1, &ptr);
+            status = SendMessageToCallServ(TMS_DTMF_START, args);
+            delete tone;
+            tone = NULL;
+            }
+        }
+    aMessage.Complete(status);
+
+    TRACE_PRN_FN_EXT;
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::StopDTMF
+//
+// -----------------------------------------------------------------------------
+//
+TInt TMSServer::StopDTMF(const RMessage2& aMessage)
+    {
+    TRACE_PRN_FN_ENT;
+
+    TInt status(TMS_RESULT_SUCCESS);
+    TMSStreamType streamtype;
+    streamtype = (TMSStreamType) aMessage.Int0();
+    status = SendMessageToCallServ(TMS_DTMF_STOP, streamtype);
+    aMessage.Complete(status);
+
+    TRACE_PRN_FN_EXT;
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::ContinueSendingDTMF
+//
+// -----------------------------------------------------------------------------
+//
+TInt TMSServer::ContinueSendingDTMF(const RMessage2& aMessage)
+    {
+    TRACE_PRN_FN_ENT;
+
+    TInt status(TMS_RESULT_SUCCESS);
+    TBool continuesending;
+    continuesending = (TBool) aMessage.Int0();
+    status = SendMessageToCallServ(TMS_DTMF_CONTINUE, continuesending);
+    aMessage.Complete(status);
+
+    TRACE_PRN_FN_EXT;
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::NotifyDtmfClients
+//
+// -----------------------------------------------------------------------------
+//
+TInt TMSServer::NotifyDtmfClients(TmsMsgBufPckg dtmfpckg)
+    {
+    TRACE_PRN_FN_ENT;
+
+    iSessionIter.SetToFirst();
+    TMSServerSession* serverSession =
+            static_cast<TMSServerSession*> (iSessionIter++);
+
+    while (serverSession != NULL)
+        {
+        serverSession->NotifyClient(dtmfpckg().iRequest, dtmfpckg().iStatus);
+        serverSession = static_cast<TMSServerSession*> (iSessionIter++);
+        }
+
+    TRACE_PRN_FN_EXT;
+    return TMS_RESULT_SUCCESS;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::InitRingTonePlayerL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::InitRingTonePlayerL()
+    {
+    TRACE_PRN_FN_ENT;
+
+    DeinitRingTonePlayer();
+
+    if (!iTMSRtPlayer)
+        {
+        iTMSRtPlayer = TMSRingTonePlayer::NewL(*this);
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::DeinitRingTonePlayer
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::DeinitRingTonePlayer()
+    {
+    TRACE_PRN_FN_ENT;
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->DeinitRingTonePlayer();
+        }
+
+    delete iRtFile;
+    iRtFile = NULL;
+    delete iRtSequence;
+    iRtSequence = NULL;
+    delete iTtsText;
+    iTtsText = NULL;
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::OpenRingTonePlayerFromFileL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::OpenRingTonePlayerFromFileL(const RMessage2& aMessage)
+    {
+    TRACE_PRN_FN_ENT;
+
+    gint status(TMS_RESULT_INVALID_ARGUMENT);
+    gint len = aMessage.GetDesLength(0);
+    if (len > 0)
+        {
+        InitRingTonePlayerL();
+
+        if (iTMSRtPlayer)
+            {
+            iRtFile = HBufC::NewL(len);
+            TPtr ptr = iRtFile->Des();
+            aMessage.ReadL(0, ptr);
+            iTMSRtPlayer->CreateRingTonePlayerL(EPlayerAudio, *iRtFile);
+            len = aMessage.GetDesLength(1);
+            if (len > 0)
+                {
+                delete iTtsText;
+                iTtsText = NULL;
+                iTtsText = HBufC::NewL(len);
+                TPtr ptr1 = iTtsText->Des();
+                aMessage.ReadL(1, ptr1);
+                iTMSRtPlayer->CreateTTSPlayerL(ptr1);
+                }
+            status = TMS_RESULT_SUCCESS;
+            }
+        }
+    aMessage.Complete(status);
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::OpenRingTonePlayerFromProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::OpenRingTonePlayerFromProfileL(const RMessage2& aMessage)
+    {
+    TRACE_PRN_FN_ENT;
+
+    gint status(TMS_RESULT_INVALID_ARGUMENT);
+    InitRingTonePlayerL();
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->CreateRingTonePlayerL(EPlayerDefault);
+        gint len = aMessage.GetDesLength(1);
+        if (len > 0)
+            {
+            delete iTtsText;
+            iTtsText = NULL;
+            iTtsText = HBufC::NewL(len);
+            TPtr ptr = iTtsText->Des();
+            aMessage.ReadL(1, ptr);
+            iTMSRtPlayer->CreateTTSPlayerL(ptr);
+            }
+        status = TMS_RESULT_SUCCESS;
+        }
+    aMessage.Complete(status);
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::OpenRingToneSequencePlayerL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::OpenRingToneSequencePlayerL(const RMessage2& aMessage)
+    {
+    TRACE_PRN_FN_ENT;
+
+    gint status(TMS_RESULT_INVALID_ARGUMENT);
+    gint len = aMessage.GetDesLength(0);
+    if (len > 0)
+        {
+        InitRingTonePlayerL();
+        iRtSequence = HBufC8::NewL(len);
+        TPtr8 ptr = iRtSequence->Des();
+        aMessage.ReadL(0, ptr);
+
+        if (iTMSRtPlayer)
+            {
+            iTMSRtPlayer->CreateCustomSequencePlayerL(ptr);
+            status = TMS_RESULT_SUCCESS;
+            }
+        }
+    aMessage.Complete(status);
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::OpenRingToneBeepOnceL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::OpenRingToneBeepOnceL()
+    {
+    TRACE_PRN_FN_ENT;
+
+    InitRingTonePlayerL();
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->CreateSequencePlayerL(EPlayerBeepOnce);
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::DeinitRingTone
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::OpenRingToneSilentL()
+    {
+    TRACE_PRN_FN_ENT;
+
+    InitRingTonePlayerL();
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->CreateSequencePlayerL(EPlayerSilent);
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::OpenRingToneUnsecureVoipL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::OpenRingToneUnsecureVoipL()
+    {
+    TRACE_PRN_FN_ENT;
+
+    InitRingTonePlayerL();
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->CreateSequencePlayerL(EPlayerUnsecureVoIP);
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::PlayRingToneL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::PlayRingToneL()
+    {
+    TRACE_PRN_FN_ENT;
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->PlayRingToneL();
+        }
+    else
+        {
+        User::Leave(TMS_RESULT_UNINITIALIZED_OBJECT);
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::PauseVideoRingTone
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::PauseVideoRingTone()
+    {
+    StopRingTone();
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::StopRingTone
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::StopRingTone()
+    {
+    TRACE_PRN_FN_ENT;
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->StopPlaying();
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::MuteRingTone
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::MuteRingTone()
+    {
+    TRACE_PRN_FN_ENT;
+
+    if (iTMSRtPlayer)
+        {
+        iTMSRtPlayer->MuteRingTone();
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSServer::RtPlayerEvent
+//
+// -----------------------------------------------------------------------------
+//
+void TMSServer::RtPlayerEvent(gint aEventType, gint aError)
+    {
+    TRACE_PRN_FN_ENT;
+
+    iSessionIter.SetToFirst();
+    TMSServerSession* ss = static_cast<TMSServerSession*> (iSessionIter++);
+
+    while (ss != NULL)
+        {
+        ss->NotifyClient(aEventType, aError);
+        ss = static_cast<TMSServerSession*> (iSessionIter++);
+        }
+
+    TRACE_PRN_FN_EXT;
     }
 
 // -----------------------------------------------------------------------------
@@ -820,7 +1285,7 @@
     TMSServer* server = TMSServer::NewL();
 
     // Initialisation complete, now signal the client
-    RProcess::Rendezvous(KErrNone);
+    RProcess::Rendezvous(TMS_RESULT_SUCCESS);
 
     // Start the scheduler and wait for client requests
     CActiveScheduler::Start();
@@ -834,11 +1299,11 @@
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::CStartAndMonitorTMSCallThread
+// TMSStartAndMonitorTMSCallThread::TMSStartAndMonitorTMSCallThread
 // Perhaps we need to move this to a .cpp?
 // -----------------------------------------------------------------------------
 //
-CStartAndMonitorTMSCallThread::CStartAndMonitorTMSCallThread(
+TMSStartAndMonitorTMSCallThread::TMSStartAndMonitorTMSCallThread(
         TMSServer* aServer) :
     CActive(EPriorityStandard),
     iTMSServer(aServer)
@@ -849,11 +1314,11 @@
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::~CStartAndMonitorTMSCallThread
+// TMSStartAndMonitorTMSCallThread::~TMSStartAndMonitorTMSCallThread
 //
 // -----------------------------------------------------------------------------
 //
-CStartAndMonitorTMSCallThread::~CStartAndMonitorTMSCallThread()
+TMSStartAndMonitorTMSCallThread::~TMSStartAndMonitorTMSCallThread()
     {
     TRACE_PRN_FN_ENT;
     Cancel();
@@ -861,44 +1326,47 @@
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::NewL
+// TMSStartAndMonitorTMSCallThread::NewL
 //
 // -----------------------------------------------------------------------------
 //
-CStartAndMonitorTMSCallThread* CStartAndMonitorTMSCallThread::NewL(
+TMSStartAndMonitorTMSCallThread* TMSStartAndMonitorTMSCallThread::NewL(
         TMSServer* aServer)
     {
     TRACE_PRN_FN_ENT;
-    CStartAndMonitorTMSCallThread* self =
-            new (ELeave) CStartAndMonitorTMSCallThread(aServer);
+
+    TMSStartAndMonitorTMSCallThread* self =
+            new (ELeave) TMSStartAndMonitorTMSCallThread(aServer);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self);
+
     TRACE_PRN_FN_EXT;
     return self;
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::ConstructL
+// TMSStartAndMonitorTMSCallThread::ConstructL
 //
 // -----------------------------------------------------------------------------
 //
-void CStartAndMonitorTMSCallThread::ConstructL()
+void TMSStartAndMonitorTMSCallThread::ConstructL()
     {
     TRACE_PRN_FN_ENT;
     TRACE_PRN_FN_EXT;
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::StartTMSCallServer
+// TMSStartAndMonitorTMSCallThread::StartTMSCallServer
 //
 // -----------------------------------------------------------------------------
 //
-TInt CStartAndMonitorTMSCallThread::StartTMSCallServer(TMSCallProxyLocal& aHndl)
+TInt TMSStartAndMonitorTMSCallThread::StartTMSCallServer(
+        TMSCallProxyLocal& aHndl)
     {
     TRACE_PRN_FN_ENT;
 
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     TMSCallServerStartParam start(iTMSServer, iCallSrvrHndl);
     const TUidType serverUid(KNullUid, KNullUid, KUidTMSCallServerUid3);
     TThreadFunction serverFunc = TMSCallServer::StartThread;
@@ -911,7 +1379,7 @@
                                   &start,
                                   EOwnerProcess);
 
-    if (status != KErrNone)
+    if (status != TMS_RESULT_SUCCESS)
         {
         return status;
         }
@@ -935,7 +1403,7 @@
         }
 
     User::WaitForRequest(reqStatus); // wait for start or death
-    if (reqStatus.Int() != KErrNone)
+    if (reqStatus.Int() != TMS_RESULT_SUCCESS)
         {
         iServerThread.Close();
         iCallSrvrHndl.Close();
@@ -943,43 +1411,48 @@
         }
     status = aHndl.Open(iCallSrvrHndl);
 
-    if (status != KErrNone)
+    if (status != TMS_RESULT_SUCCESS)
         {
         iServerThread.Close();
         iCallSrvrHndl.Close();
         return status;
         }
     aHndl.ShareProtected();
+    iStatus = KRequestPending;
     iServerThread.Logon(iStatus);
     SetActive();
 
     TRACE_PRN_FN_EXT;
-    return KErrNone;
+    return TMS_RESULT_SUCCESS;
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::RunL
+// TMSStartAndMonitorTMSCallThread::RunL
 // From CActive
 // -----------------------------------------------------------------------------
 //
-void CStartAndMonitorTMSCallThread::RunL()
+void TMSStartAndMonitorTMSCallThread::RunL()
     {
     TRACE_PRN_FN_ENT;
     iServerThread.Close();
-    //NOTE: This is causing a panic when closing down tms server.
+    //NOTE: This is causing a panic when closing down TMS server.
     //iCallSrvrHndl.Close();
     TRACE_PRN_FN_EXT;
     }
 
 // -----------------------------------------------------------------------------
-// CStartAndMonitorTMSCallThread::DoCancel
+// TMSStartAndMonitorTMSCallThread::DoCancel
 // From CActive
 // -----------------------------------------------------------------------------
 //
-void CStartAndMonitorTMSCallThread::DoCancel()
+void TMSStartAndMonitorTMSCallThread::DoCancel()
     {
     TRACE_PRN_FN_ENT;
-    iServerThread.LogonCancel(iStatus);
+    if (iServerThread.Handle())
+        {
+        iServerThread.LogonCancel(iStatus);
+        User::WaitForRequest(iStatus);
+        }
     TRACE_PRN_FN_EXT;
     }
 
@@ -990,6 +1463,7 @@
 TInt TMSCallProxyLocal::Open(RServer2& aTMSCallServerHandle)
     {
     TRACE_PRN_FN_ENT;
+
     TInt status(KErrNotSupported);
     status = CreateSession(aTMSCallServerHandle,
                            TVersion(KTMSCallServerMajorVersionNumber,
@@ -1008,7 +1482,7 @@
 //
 TInt TMSCallProxyLocal::SendToCallServer(TInt aFunc, TUint value)
     {
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     status = SendReceive(aFunc, TIpcArgs(value));
     return status;
     }
@@ -1020,7 +1494,7 @@
 //
 TInt TMSCallProxyLocal::SendToCallServer(TInt aFunc, TIpcArgs args)
     {
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     status = SendReceive(aFunc, args);
     return status;
     }
@@ -1032,11 +1506,11 @@
 //
 TInt TMSCallProxyLocal::ReceiveFromCallServer(TInt aFunc, TUint& value)
     {
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     TPckgBuf<TUint> pckg;
     TIpcArgs args(&pckg);
     status = SendReceive(aFunc, args);
-    if (status == KErrNone)
+    if (status == TMS_RESULT_SUCCESS)
         {
         value = pckg();
         }
@@ -1050,7 +1524,7 @@
 //
 TInt TMSCallProxyLocal::ReceiveFromCallServer(TInt aFunc, TIpcArgs args)
     {
-    TInt status(KErrNone);
+    TInt status(TMS_RESULT_SUCCESS);
     status = SendReceive(aFunc, args);
     return status;
     }