mmserv/tms/tmscallserver/src/tmscallipadpt.cpp
changeset 31 8dfd592727cb
parent 22 128eb6a32b84
child 28 ebf79c79991a
--- a/mmserv/tms/tmscallserver/src/tmscallipadpt.cpp	Thu May 27 13:20:50 2010 +0300
+++ b/mmserv/tms/tmscallserver/src/tmscallipadpt.cpp	Wed Jun 23 18:47:10 2010 +0300
@@ -19,7 +19,6 @@
 #include "tmsutility.h"
 #include "tmsclientserver.h"
 #include "tmsshared.h"
-#include "tmsipcallstream.h"
 #include "tmscallipadpt.h"
 
 using namespace TMS;
@@ -46,8 +45,8 @@
 void TMSCallIPAdpt::ConstructL()
     {
     TRACE_PRN_FN_ENT;
+    iIPDownlink = NULL;
     iIPUplink = NULL;
-    iIPDownlink = NULL;
     iDTMFDnlinkPlayer = NULL;
     iDTMFUplinkPlayer = NULL;
     iDTMFNotifier = NULL;
@@ -114,8 +113,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::CreateStream(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint& outStrmId)
+gint TMSCallIPAdpt::CreateStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, gint& outStrmId)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_SUCCESS);
@@ -126,10 +125,10 @@
             status = TMS_RESULT_ALREADY_EXIST;
             if (!iUplinkInitialized)
                 {
-                iUplinkInitialized = TRUE;
                 iUplinkStreamId = iNextStreamId;
                 outStrmId = iUplinkStreamId;
                 iNextStreamId++;
+                //iUplinkInitialized = TRUE; //not initialized yet!
                 status = TMS_RESULT_SUCCESS;
                 }
             break;
@@ -139,10 +138,10 @@
             status = TMS_RESULT_ALREADY_EXIST;
             if (!iDnlinkInitialized)
                 {
-                iDnlinkInitialized = TRUE;
                 iDnlinkStreamId = iNextStreamId;
                 outStrmId = iDnlinkStreamId;
                 iNextStreamId++;
+                //iDnlinkInitialized = TRUE; //not initialized yet!
                 status = TMS_RESULT_SUCCESS;
                 }
             break;
@@ -162,12 +161,13 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::InitStream(TMSCallType /*callType*/, TMSStreamType strmType,
-        gint strmId, TMSFormatType frmtType, const RMessage2& message)
+gint TMSCallIPAdpt::InitStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId,
+        const TMSFormatType frmtType, const gint retrytime,
+        const RMessage2& message)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_SUCCESS);
-
     guint32 fourCC = TOFOURCC(frmtType);
     if (fourCC == NULL)
         {
@@ -182,12 +182,11 @@
             if (strmId == iUplinkStreamId)
                 {
                 SetFormat(iUplinkStreamId, fourCC);
-                status = OpenUplinkL(message);
+                status = OpenUplink(message, retrytime);
                 if (status == TMS_RESULT_SUCCESS)
                     {
                     status = InitDTMF(TMS_STREAM_UPLINK);
                     }
-                NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status);
                 }
             break;
             }
@@ -197,12 +196,11 @@
             if (strmId == iDnlinkStreamId)
                 {
                 SetFormat(iDnlinkStreamId, fourCC);
-                status = OpenDownlinkL(message);
+                status = OpenDownlink(message, retrytime);
                 if (status == TMS_RESULT_SUCCESS)
                     {
                     status = InitDTMF(TMS_STREAM_DOWNLINK);
                     }
-                NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status);
                 }
             break;
             }
@@ -223,8 +221,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::StartStream(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint strmId)
+gint TMSCallIPAdpt::StartStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId, const gint retrytime)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
@@ -232,9 +230,9 @@
         {
         case TMS_STREAM_UPLINK:
             {
-            if (strmId == iUplinkStreamId && iIPUplink)
+            if (iIPUplink && strmId == iUplinkStreamId)
                 {
-                iIPUplink->Start();
+                iIPUplink->Start(retrytime);
                 status = TMS_RESULT_SUCCESS;
                 NotifyClient(iUplinkStreamId, ECmdUplinkStarted, status);
                 }
@@ -242,9 +240,9 @@
             }
         case TMS_STREAM_DOWNLINK:
             {
-            if (strmId == iDnlinkStreamId && iIPDownlink)
+            if (iIPDownlink && strmId == iDnlinkStreamId)
                 {
-                iIPDownlink->Start();
+                iIPDownlink->Start(retrytime);
                 status = TMS_RESULT_SUCCESS;
                 NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, status);
                 }
@@ -265,8 +263,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::PauseStream(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint strmId)
+gint TMSCallIPAdpt::PauseStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
@@ -307,8 +305,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::StopStream(TMSCallType /*callType*/, TMSStreamType strmType,
-        gint strmId)
+gint TMSCallIPAdpt::StopStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
@@ -317,7 +315,7 @@
         {
         case TMS_STREAM_UPLINK:
             {
-            if (strmId == iUplinkStreamId && iIPUplink)
+            if (iIPUplink && strmId == iUplinkStreamId)
                 {
                 iIPUplink->Stop();
                 status = TMS_RESULT_SUCCESS;
@@ -327,7 +325,7 @@
             }
         case TMS_STREAM_DOWNLINK:
             {
-            if (strmId == iDnlinkStreamId && iIPDownlink)
+            if (iIPDownlink && strmId == iDnlinkStreamId)
                 {
                 iIPDownlink->Stop();
                 status = TMS_RESULT_SUCCESS;
@@ -350,8 +348,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::DeinitStream(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint strmId)
+gint TMSCallIPAdpt::DeinitStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
@@ -360,20 +358,19 @@
         {
         case TMS_STREAM_UPLINK:
             {
-            if (strmId == iUplinkStreamId && iIPUplink)
+            if (iIPUplink && strmId == iUplinkStreamId)
                 {
                 iIPUplink->Stop();
                 //iUplinkStreamId = -1;
                 iUplinkInitialized = FALSE;
                 status = TMS_RESULT_SUCCESS;
-                NotifyClient(iUplinkStreamId, ECmdDownlinkDeInitComplete,
-                        status);
+                NotifyClient(iUplinkStreamId, ECmdUplinkDeInitComplete, status);
                 }
             break;
             }
         case TMS_STREAM_DOWNLINK:
             {
-            if (strmId == iDnlinkStreamId && iIPDownlink)
+            if (iIPDownlink && strmId == iDnlinkStreamId)
                 {
                 iIPDownlink->Stop();
                 //iDnlinkStreamId = -1;
@@ -400,8 +397,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::DeleteStream(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint strmId)
+gint TMSCallIPAdpt::DeleteStream(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_SUCCESS);
@@ -409,7 +406,6 @@
         {
         case TMS_STREAM_UPLINK:
             {
-            // This is additional error checking
             if (strmId == iUplinkStreamId)
                 {
                 iUplinkStreamId = -1;
@@ -419,7 +415,6 @@
             }
         case TMS_STREAM_DOWNLINK:
             {
-            // This is additional error checking
             if (strmId == iDnlinkStreamId)
                 {
                 iDnlinkStreamId = -1;
@@ -442,8 +437,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::DataXferBufferEmptied(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint strmId)
+gint TMSCallIPAdpt::DataXferBufferEmptied(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_SUCCESS);
@@ -473,8 +468,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::DataXferBufferFilled(TMSCallType /*callType*/,
-        TMSStreamType strmType, gint strmId, guint datasize)
+gint TMSCallIPAdpt::DataXferBufferFilled(const TMSCallType /*callType*/,
+        const TMSStreamType strmType, const gint strmId, const guint datasize)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_SUCCESS);
@@ -543,14 +538,12 @@
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
-
     if (iDnlinkInitialized && iIPDownlink)
         {
         status = iIPDownlink->GetMaxVolume(volume);
         iMaxVolume = volume;
         TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: GetMaxVolume [%d]"), iMaxVolume);
         }
-
     TRACE_PRN_FN_EXT;
     return status;
     }
@@ -657,7 +650,7 @@
         {
         status = iIPDownlink->GetMaxVolume(volume);
         iMaxVolume = volume;
-        TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt: GetMaxVolume [%d]"), iMaxVolume);
+        TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetGlobalMaxVolume [%d]"), volume);
         }
     TRACE_PRN_FN_EXT;
     return status;
@@ -672,6 +665,7 @@
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
+    //iGlobalVol = volume;
     if (iDnlinkInitialized && iIPDownlink)
         {
         status = iIPDownlink->SetVolume(volume);
@@ -710,7 +704,7 @@
         {
         status = iIPUplink->GetMaxGain(gain);
         iMaxGain = gain;
-        TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetMaxGain [%d]"), iMaxGain);
+        TRACE_PRN_N1(_L("TMS->TMSCallIPAdpt::GetGlobalMaxGain [%d]"), gain);
         }
     TRACE_PRN_FN_EXT;
     return status;
@@ -725,6 +719,7 @@
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_INVALID_STATE);
+    //iGlobalGain = gain;
     if (iUplinkInitialized && iIPUplink)
         {
         status = iIPUplink->SetGain(gain);
@@ -995,11 +990,11 @@
     }
 
 // -----------------------------------------------------------------------------
-// TMSCallIPAdpt::OpenDownlinkL
+// TMSCallIPAdpt::OpenDownlink
 // Method for player initialization.
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::OpenDownlinkL(const RMessage2& message)
+gint TMSCallIPAdpt::OpenDownlink(const RMessage2& message, const gint retrytime)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
@@ -1019,10 +1014,11 @@
 
     if (!iIPDownlink)
         {
-        iIPDownlink = TMSIPDownlink::NewL(iDnFourCC, iPriority);
+        TRAP(status, iIPDownlink = TMSIPDownlink::NewL(*this, iDnFourCC,
+                iPriority, retrytime));
         }
 
-    if (iIPDownlink)
+    if (iIPDownlink && status == TMS_RESULT_SUCCESS)
         {
         // Open message queue for handling server notifications to the client
         if (iMsgQueueDn.Handle() <= 0)
@@ -1043,11 +1039,11 @@
     }
 
 // -----------------------------------------------------------------------------
-// TMSCallIPAdpt::OpenUplinkL
+// TMSCallIPAdpt::OpenUplink
 // Method for recorder initialization.
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& message)
+gint TMSCallIPAdpt::OpenUplink(const RMessage2& message, const gint retrytime)
     {
     TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
@@ -1065,10 +1061,11 @@
 
     if (!iIPUplink)
         {
-        iIPUplink = TMSIPUplink::NewL(iUpFourCC, iPriority);
+        TRAP(status, iIPUplink = TMSIPUplink::NewL(*this, iUpFourCC, iPriority,
+                retrytime));
         }
 
-    if (iIPUplink)
+    if (iIPUplink && status == TMS_RESULT_SUCCESS)
         {
         // Open message queue for handling server notifications to the client
         if (iMsgQueueUp.Handle() <= 0)
@@ -1360,11 +1357,13 @@
 //
 gint TMSCallIPAdpt::SetOutput(TMSAudioOutput output)
     {
+    TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
     if (iDnlinkInitialized && iIPDownlink)
         {
         TRAP(status, iIPDownlink->SetAudioDeviceL(output));
         }
+    TRACE_PRN_FN_EXT;
     return status;
     }
 // -----------------------------------------------------------------------------
@@ -1374,13 +1373,16 @@
 //
 gint TMSCallIPAdpt::GetOutput(TMSAudioOutput& output)
     {
+    TRACE_PRN_FN_ENT;
     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
     if (iDnlinkInitialized && iIPDownlink)
         {
         TRAP(status, iIPDownlink->GetAudioDeviceL(output));
         }
+    TRACE_PRN_FN_EXT;
     return status;
     }
+
 // -----------------------------------------------------------------------------
 // TMSCallIPAdpt::GetPreviousOutput
 //
@@ -1397,7 +1399,7 @@
 // -----------------------------------------------------------------------------
 //
 gint TMSCallIPAdpt::GetAvailableOutputsL(gint& /*count*/,
-        CBufFlat*& /*outputsbuffer*/)
+        CBufFlat*& /*outputsbuf*/)
     {
     return TMS_RESULT_FEATURE_NOT_SUPPORTED;
     }
@@ -1416,35 +1418,15 @@
         {
         delete iDTMFDnlinkPlayer;
         iDTMFDnlinkPlayer = NULL;
-
-        /* Clarify with adaptation team which prio/pref values should be used.
-         * 1) KAudioDTMFString                       -local play, no mixing
-         *    KAudioPriorityDTMFString               -local play, no mixing
-         * 2) KAudioPrefUnknownVoipAudioDownlink     -3rd party VoIP?
-         *    KAudioPriorityUnknownVoipAudioDownlink -3rd party VoIP?
-         * 3) KAudioPrefVoipAudioDownlink            -NOK native VoIP?
-         *    KAudioPriorityVoipAudioDownlink        -NOK native VoIP?
-         */
         TRAP(status, iDTMFDnlinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
-                KAudioPrefVoipAudioDownlink, KAudioPriorityVoipAudioDownlink));
+                KAudioDTMFString, KAudioPriorityDTMFString));
          }
     else if (strmtype == TMS_STREAM_UPLINK)
         {
         delete iDTMFUplinkPlayer;
         iDTMFUplinkPlayer = NULL;
-
-        /* Clarify with adaptation team which prio/pref values should be used.
-         * Currently the audio policy blocks DTMF mixing with the UPL stream.
-         * 1) KAudioPrefUnknownVoipAudioUplink      -3rd party VoIP?
-         *    KAudioPriorityUnknownVoipAudioUplink  -3rd party VoIP?
-         *    KAudioPriorityUnknownVoipAudioUplinkNonSignal -???
-         * 2) KAudioPrefVoipAudioUplink             -NOK native VoIP?
-         *    KAudioPrefUnknownVoipAudioUplinkNonSignal -???
-         *    KAudioPrefVoipAudioUplinkNonSignal        -???
-         *    KAudioPriorityVoipAudioUplink         -NOK native VoIP?
-         */
         TRAP(status, iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
-                KAudioPrefVoipAudioUplink, KAudioPriorityVoipAudioUplink));
+                KAudioDTMFString, KAudioPriorityDTMFString));
         }
 
     if (!iDTMFNotifier && status == TMS_RESULT_SUCCESS)
@@ -1510,18 +1492,20 @@
 gint TMSCallIPAdpt::StopDTMF(TMSStreamType streamtype)
     {
     TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
 
-    if (streamtype == TMS_STREAM_DOWNLINK)
+    if (streamtype == TMS_STREAM_DOWNLINK && iDTMFDnlinkPlayer)
         {
         iDTMFDnlinkPlayer->Cancel();
         }
-    else if (streamtype == TMS_STREAM_UPLINK)
+    else if (streamtype == TMS_STREAM_UPLINK && iDTMFUplinkPlayer)
         {
+        //status = iDTMFUplinkPlayer->StopDtmfTone();
         iDTMFUplinkPlayer->Cancel();
         }
 
     TRACE_PRN_FN_EXT;
-    return TMS_RESULT_SUCCESS;
+    return status;
     }
 
 // -----------------------------------------------------------------------------
@@ -1529,7 +1513,7 @@
 //
 // -----------------------------------------------------------------------------
 //
-gint TMSCallIPAdpt::ContinueDTMF(gboolean /*continuesending*/)
+gint TMSCallIPAdpt::ContinueDTMF(const gboolean /*sending*/)
     {
     return TMS_RESULT_FEATURE_NOT_SUPPORTED;
     }
@@ -1540,10 +1524,10 @@
 //
 // -----------------------------------------------------------------------------
 //
-void TMSCallIPAdpt::DTMFInitCompleted(gint /*error*/)
+void TMSCallIPAdpt::DTMFInitCompleted(gint /*status*/)
     {
     TRACE_PRN_FN_ENT;
-    //TRACE_PRN_IF_ERR(error);
+    // TODO: process error
     TRACE_PRN_FN_EXT;
     }
 
@@ -1552,18 +1536,18 @@
 //
 // -----------------------------------------------------------------------------
 //
-void TMSCallIPAdpt::DTMFToneFinished(gint error)
+void TMSCallIPAdpt::DTMFToneFinished(gint status)
     {
     TRACE_PRN_FN_ENT;
-    TRACE_PRN_IF_ERR(error);
+    TRACE_PRN_IF_ERR(status);
     TmsMsgBufPckg dtmfpckg;
 
-    // Ignore KErrUnderflow - end of DTMF playback.
-    if(error == KErrUnderflow /*|| error == KErrInUse*/)
-         {
-         error = TMS_RESULT_SUCCESS;
-         }
-    dtmfpckg().iStatus = error;
+    // KErrUnderflow indicates end of DTMF playback.
+    if (status == KErrUnderflow /*|| status == KErrInUse*/)
+        {
+        status = TMS_RESULT_SUCCESS;
+        }
+    dtmfpckg().iStatus = TMSUtility::TMSResult(status);
     dtmfpckg().iRequest = ECmdDTMFTonePlayFinished;
     if (iDTMFNotifier)
         {
@@ -1573,14 +1557,70 @@
     }
 
 // -----------------------------------------------------------------------------
+// TMSCallIPAdpt::DownlinkInitCompleted
+// From TMSIPDevSoundObserver
+// -----------------------------------------------------------------------------
+//
+void TMSCallIPAdpt::DownlinkInitCompleted(gint status)
+    {
+    TRACE_PRN_FN_ENT;
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        iDnlinkInitialized = TRUE;
+        }
+    NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status);
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallIPAdpt::UplinkInitCompleted
+// From TMSIPDevSoundObserver
+// -----------------------------------------------------------------------------
+//
+void TMSCallIPAdpt::UplinkInitCompleted(gint status)
+    {
+    TRACE_PRN_FN_ENT;
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        iUplinkInitialized = TRUE;
+        }
+    NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status);
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallIPAdpt::UplinkStarted
+// From TMSIPDevSoundObserver
+// -----------------------------------------------------------------------------
+//
+void TMSCallIPAdpt::UplinkStarted(gint status)
+    {
+    TRACE_PRN_FN_ENT;
+    NotifyClient(iUplinkStreamId, ECmdUplinkStarted, status);
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallIPAdpt::DownlinkStarted
+// From TMSIPDevSoundObserver
+// -----------------------------------------------------------------------------
+//
+void TMSCallIPAdpt::DownlinkStarted(gint status)
+    {
+    TRACE_PRN_FN_ENT;
+    NotifyClient(iDnlinkStreamId, ECmdDownlinkStarted, status);
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
 // TMSCallIPAdpt::NotifyClient
 // -----------------------------------------------------------------------------
 //
-void TMSCallIPAdpt::NotifyClient(const gint strmId, const gint aCommand,
-        const gint aStatus, const gint64 /*aInt64*/)
+void TMSCallIPAdpt::NotifyClient(const gint strmId, const gint command,
+        const gint status, const gint64 /*int64*/)
     {
-    iMsgBuffer.iRequest = aCommand;
-    iMsgBuffer.iStatus = aStatus;
+    iMsgBuffer.iRequest = command;
+    iMsgBuffer.iStatus = status;
 
     if (strmId == iUplinkStreamId)
         {