mmserv/tms/tmscallserver/src/tmscallipadpt.cpp
changeset 20 b67dd1fc57c5
parent 14 80975da52420
child 21 2ed61feeead6
equal deleted inserted replaced
19:4a629bc82c5e 20:b67dd1fc57c5
   103     TRACE_PRN_FN_ENT;
   103     TRACE_PRN_FN_ENT;
   104     gint status(TMS_RESULT_SUCCESS);
   104     gint status(TMS_RESULT_SUCCESS);
   105     iNextStreamId = 1;
   105     iNextStreamId = 1;
   106     iUplinkInitialized = FALSE;
   106     iUplinkInitialized = FALSE;
   107     iDnlinkInitialized = FALSE;
   107     iDnlinkInitialized = FALSE;
   108 
       
   109     TRACE_PRN_FN_EXT;
   108     TRACE_PRN_FN_EXT;
   110     return status;
   109     return status;
   111     }
   110     }
   112 
   111 
   113 // -----------------------------------------------------------------------------
   112 // -----------------------------------------------------------------------------
   161 // -----------------------------------------------------------------------------
   160 // -----------------------------------------------------------------------------
   162 // TMSCallIPAdpt::InitStream
   161 // TMSCallIPAdpt::InitStream
   163 //
   162 //
   164 // -----------------------------------------------------------------------------
   163 // -----------------------------------------------------------------------------
   165 //
   164 //
   166 gint TMSCallIPAdpt::InitStreamL(TMSCallType /*callType*/,
   165 gint TMSCallIPAdpt::InitStream(TMSCallType /*callType*/, TMSStreamType strmType,
   167         TMSStreamType strmType, gint strmId, TMSFormatType frmtType,
   166         gint strmId, TMSFormatType frmtType, const RMessage2& message)
   168         const RMessage2& aMessage)
       
   169     {
   167     {
   170     TRACE_PRN_FN_ENT;
   168     TRACE_PRN_FN_ENT;
   171     gint status(TMS_RESULT_SUCCESS);
   169     gint status(TMS_RESULT_SUCCESS);
   172 
   170 
   173     TUint32 fourCC = TOFOURCC(frmtType);
   171     guint32 fourCC = TOFOURCC(frmtType);
   174     if (fourCC == NULL)
   172     if (fourCC == NULL)
   175         {
   173         {
   176         return TMS_RESULT_INVALID_ARGUMENT;
   174         return TMS_RESULT_INVALID_ARGUMENT;
   177         }
   175         }
   178 
   176 
   182             {
   180             {
   183             status = TMS_RESULT_DOES_NOT_EXIST;
   181             status = TMS_RESULT_DOES_NOT_EXIST;
   184             if (strmId == iUplinkStreamId)
   182             if (strmId == iUplinkStreamId)
   185                 {
   183                 {
   186                 SetFormat(iUplinkStreamId, fourCC);
   184                 SetFormat(iUplinkStreamId, fourCC);
   187                 status = OpenUplinkL(aMessage);
   185                 status = OpenUplinkL(message);
   188 
   186                 if (status == TMS_RESULT_SUCCESS)
   189                 iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
       
   190                         KAudioPrefUnknownVoipAudioUplink,
       
   191                         KAudioPriorityUnknownVoipAudioUplink);
       
   192 
       
   193                 if (!iDTMFNotifier)
       
   194                     {
   187                     {
   195                     iDTMFNotifier = TMSDtmfNotifier::NewL();
   188                     status = InitDTMF(TMS_STREAM_UPLINK);
   196                     }
   189                     }
   197 
       
   198                 NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status);
   190                 NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status);
   199                 }
   191                 }
   200             break;
   192             break;
   201             }
   193             }
   202         case TMS_STREAM_DOWNLINK:
   194         case TMS_STREAM_DOWNLINK:
   203             {
   195             {
   204             status = TMS_RESULT_DOES_NOT_EXIST;
   196             status = TMS_RESULT_DOES_NOT_EXIST;
   205             if (strmId == iDnlinkStreamId)
   197             if (strmId == iDnlinkStreamId)
   206                 {
   198                 {
   207                 SetFormat(iDnlinkStreamId, fourCC);
   199                 SetFormat(iDnlinkStreamId, fourCC);
   208                 status = OpenDownlinkL(aMessage);
   200                 status = OpenDownlinkL(message);
   209 
   201                 if (status == TMS_RESULT_SUCCESS)
   210                 iDTMFDnlinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
       
   211                         KAudioPrefUnknownVoipAudioDownlink,
       
   212                         KAudioPriorityUnknownVoipAudioDownlink);
       
   213 
       
   214                 if (!iDTMFNotifier)
       
   215                     {
   202                     {
   216                     iDTMFNotifier = TMSDtmfNotifier::NewL();
   203                     status = InitDTMF(TMS_STREAM_DOWNLINK);
   217                     }
   204                     }
   218 
       
   219                 NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status);
   205                 NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status);
   220                 }
   206                 }
   221             break;
   207             break;
   222             }
   208             }
   223         default:
   209         default:
  1011 // -----------------------------------------------------------------------------
   997 // -----------------------------------------------------------------------------
  1012 // TMSCallIPAdpt::OpenDownlinkL
   998 // TMSCallIPAdpt::OpenDownlinkL
  1013 // Method for player initialization.
   999 // Method for player initialization.
  1014 // -----------------------------------------------------------------------------
  1000 // -----------------------------------------------------------------------------
  1015 //
  1001 //
  1016 gint TMSCallIPAdpt::OpenDownlinkL(const RMessage2& aMessage)
  1002 gint TMSCallIPAdpt::OpenDownlinkL(const RMessage2& message)
  1017     {
  1003     {
  1018     TRACE_PRN_FN_ENT;
  1004     TRACE_PRN_FN_ENT;
  1019     gint status(TMS_RESULT_SUCCESS);
  1005     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
  1020 
  1006 
  1021     // Clients must have MultimediaDD capability to use this priority/pref.
  1007     // Clients must have MultimediaDD capability to use this priority/pref.
  1022     // TODO: Also, TMS will monitor for emergency call and if detected it
  1008     // TODO: Also, TMS will monitor for emergency call and if detected it
  1023     //       will deny access to audio resources.
  1009     //       will deny access to audio resources.
       
  1010 
       
  1011     /* Clarify with adaptation team which prio/pref values should be used.
       
  1012      * 1) KAudioPrefUnknownVoipAudioDownlink      -3rd party VoIP?
       
  1013      *    KAudioPriorityUnknownVoipAudioDownlink  -3rd party VoIP?
       
  1014      * 2) KAudioPrefVoipAudioDownlink             -NOK native VoIP?
       
  1015      *    KAudioPriorityVoipAudioDownlink         -NOK native VoIP?
       
  1016      */
  1024     iPriority.iPref = KAudioPrefVoipAudioDownlink;
  1017     iPriority.iPref = KAudioPrefVoipAudioDownlink;
  1025     iPriority.iPriority = KAudioPriorityVoipAudioDownlink;
  1018     iPriority.iPriority = KAudioPriorityVoipAudioDownlink;
  1026 
  1019 
  1027     if (!iIPDownlink)
  1020     if (!iIPDownlink)
  1028         {
  1021         {
  1033         {
  1026         {
  1034         // Open message queue for handling server notifications to the client
  1027         // Open message queue for handling server notifications to the client
  1035         if (iMsgQueueDn.Handle() <= 0)
  1028         if (iMsgQueueDn.Handle() <= 0)
  1036             {
  1029             {
  1037             // Second argument in TMSCallProxy::InitStream
  1030             // Second argument in TMSCallProxy::InitStream
  1038             status = iMsgQueueDn.Open(aMessage, 1);
  1031             status = iMsgQueueDn.Open(message, 1);
  1039             }
  1032             }
  1040 
  1033 
  1041         if (status == TMS_RESULT_SUCCESS)
  1034         if (status == TMS_RESULT_SUCCESS)
  1042             {
  1035             {
  1043             // For transfer data buffer processing
  1036             // For transfer data buffer processing
  1044             iIPDownlink->SetMsgQueue(iMsgQueueDn);
  1037             iIPDownlink->SetMsgQueue(iMsgQueueDn);
  1045             }
  1038             }
  1046         }
  1039         }
  1047 
       
  1048     TRACE_PRN_IF_ERR(status);
  1040     TRACE_PRN_IF_ERR(status);
  1049     TRACE_PRN_FN_EXT;
  1041     TRACE_PRN_FN_EXT;
  1050     return status;
  1042     return status;
  1051     }
  1043     }
  1052 
  1044 
  1053 // -----------------------------------------------------------------------------
  1045 // -----------------------------------------------------------------------------
  1054 // TMSCallIPAdpt::OpenUplinkL
  1046 // TMSCallIPAdpt::OpenUplinkL
  1055 // Method for recorder initialization.
  1047 // Method for recorder initialization.
  1056 // -----------------------------------------------------------------------------
  1048 // -----------------------------------------------------------------------------
  1057 //
  1049 //
  1058 gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& aMessage)
  1050 gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& message)
  1059     {
  1051     {
  1060     TRACE_PRN_FN_ENT;
  1052     TRACE_PRN_FN_ENT;
  1061     gint status(TMS_RESULT_SUCCESS);
  1053     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
  1062 
  1054 
  1063     // Ensure clients have MultimediaDD capability to use this priority/pref
  1055     // Clients must have MultimediaDD capability to use this priority/pref
       
  1056 
       
  1057     /* Clarify with adaptation team which prio/pref values should be used.
       
  1058      * 1) KAudioPrefUnknownVoipAudioUplink      -3rd party VoIP?
       
  1059      *    KAudioPriorityUnknownVoipAudioUplink  -3rd party VoIP?
       
  1060      * 2) KAudioPrefVoipAudioUplink             -NOK native VoIP?
       
  1061      *    KAudioPriorityVoipAudioUplink         -NOK native VoIP?
       
  1062      */
  1064     iPriority.iPref = KAudioPrefVoipAudioUplink;
  1063     iPriority.iPref = KAudioPrefVoipAudioUplink;
  1065     iPriority.iPriority = KAudioPriorityVoipAudioUplink;
  1064     iPriority.iPriority = KAudioPriorityVoipAudioUplink;
  1066 
  1065 
  1067     if (!iIPUplink)
  1066     if (!iIPUplink)
  1068         {
  1067         {
  1073         {
  1072         {
  1074         // Open message queue for handling server notifications to the client
  1073         // Open message queue for handling server notifications to the client
  1075         if (iMsgQueueUp.Handle() <= 0)
  1074         if (iMsgQueueUp.Handle() <= 0)
  1076             {
  1075             {
  1077             // Second argument in TMSCallProxy::InitStream
  1076             // Second argument in TMSCallProxy::InitStream
  1078             status = iMsgQueueUp.Open(aMessage, 1);
  1077             status = iMsgQueueUp.Open(message, 1);
  1079             }
  1078             }
  1080 
  1079 
  1081         if (status == TMS_RESULT_SUCCESS)
  1080         if (status == TMS_RESULT_SUCCESS)
  1082             {
  1081             {
  1083             // For transfer data buffer processing
  1082             // For transfer data buffer processing
  1084             iIPUplink->SetMsgQueue(iMsgQueueUp);
  1083             iIPUplink->SetMsgQueue(iMsgQueueUp);
  1085             }
  1084             }
  1086         }
  1085         }
  1087 
       
  1088     TRACE_PRN_IF_ERR(status);
  1086     TRACE_PRN_IF_ERR(status);
  1089     TRACE_PRN_FN_EXT;
  1087     TRACE_PRN_FN_EXT;
  1090     return status;
  1088     return status;
  1091     }
  1089     }
  1092 
  1090 
  1093 // -----------------------------------------------------------------------------
  1091 // -----------------------------------------------------------------------------
  1094 // TMSCallIPAdpt::SetFormat
  1092 // TMSCallIPAdpt::SetFormat
  1095 //
  1093 //
  1096 // -----------------------------------------------------------------------------
  1094 // -----------------------------------------------------------------------------
  1097 //
  1095 //
  1098 void TMSCallIPAdpt::SetFormat(const gint strmId, const TUint32 aFormat)
  1096 void TMSCallIPAdpt::SetFormat(const gint strmId, const guint32 aFormat)
  1099     {
  1097     {
  1100     if (strmId == iUplinkStreamId)
  1098     if (strmId == iUplinkStreamId)
  1101         {
  1099         {
  1102         iUpFourCC = aFormat;
  1100         iUpFourCC = aFormat;
  1103         }
  1101         }
  1110 // -----------------------------------------------------------------------------
  1108 // -----------------------------------------------------------------------------
  1111 // TMSCallIPAdpt::BufferFilled
  1109 // TMSCallIPAdpt::BufferFilled
  1112 //
  1110 //
  1113 // -----------------------------------------------------------------------------
  1111 // -----------------------------------------------------------------------------
  1114 //
  1112 //
  1115 void TMSCallIPAdpt::BufferFilledL(TUint dataSize)
  1113 void TMSCallIPAdpt::BufferFilledL(guint dataSize)
  1116     {
  1114     {
  1117     if (iIPDownlink)
  1115     if (iIPDownlink)
  1118         {
  1116         {
  1119         iIPDownlink->BufferFilled(dataSize);
  1117         iIPDownlink->BufferFilled(dataSize);
  1120         }
  1118         }
  1137 // TMSCallIPAdpt::GetDataXferChunkHndl
  1135 // TMSCallIPAdpt::GetDataXferChunkHndl
  1138 //
  1136 //
  1139 // -----------------------------------------------------------------------------
  1137 // -----------------------------------------------------------------------------
  1140 //
  1138 //
  1141 gint TMSCallIPAdpt::GetDataXferChunkHndl(const TMSStreamType strmType,
  1139 gint TMSCallIPAdpt::GetDataXferChunkHndl(const TMSStreamType strmType,
  1142         const TUint32 key, RChunk& chunk)
  1140         const guint32 key, RChunk& chunk)
  1143     {
  1141     {
  1144     TRACE_PRN_FN_ENT;
  1142     TRACE_PRN_FN_ENT;
  1145 
  1143 
  1146     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
  1144     gint status(TMS_RESULT_UNINITIALIZED_OBJECT);
  1147     switch (strmType)
  1145     switch (strmType)
  1403     {
  1401     {
  1404     return TMS_RESULT_FEATURE_NOT_SUPPORTED;
  1402     return TMS_RESULT_FEATURE_NOT_SUPPORTED;
  1405     }
  1403     }
  1406 
  1404 
  1407 // -----------------------------------------------------------------------------
  1405 // -----------------------------------------------------------------------------
       
  1406 // TMSCallIPAdpt::InitDTMF
       
  1407 //
       
  1408 // -----------------------------------------------------------------------------
       
  1409 //
       
  1410 gint TMSCallIPAdpt::InitDTMF(TMSStreamType strmtype)
       
  1411     {
       
  1412     TRACE_PRN_FN_ENT;
       
  1413     gint status(TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED);
       
  1414 
       
  1415     if (strmtype == TMS_STREAM_DOWNLINK)
       
  1416         {
       
  1417         delete iDTMFDnlinkPlayer;
       
  1418         iDTMFDnlinkPlayer = NULL;
       
  1419 
       
  1420         /* Clarify with adaptation team which prio/pref values should be used.
       
  1421          * 1) KAudioDTMFString                       -local play, no mixing
       
  1422          *    KAudioPriorityDTMFString               -local play, no mixing
       
  1423          * 2) KAudioPrefUnknownVoipAudioDownlink     -3rd party VoIP?
       
  1424          *    KAudioPriorityUnknownVoipAudioDownlink -3rd party VoIP?
       
  1425          * 3) KAudioPrefVoipAudioDownlink            -NOK native VoIP?
       
  1426          *    KAudioPriorityVoipAudioDownlink        -NOK native VoIP?
       
  1427          */
       
  1428         TRAP(status, iDTMFDnlinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
       
  1429                 KAudioPrefVoipAudioDownlink, KAudioPriorityVoipAudioDownlink));
       
  1430          }
       
  1431     else if (strmtype == TMS_STREAM_UPLINK)
       
  1432         {
       
  1433         delete iDTMFUplinkPlayer;
       
  1434         iDTMFUplinkPlayer = NULL;
       
  1435 
       
  1436         /* Clarify with adaptation team which prio/pref values should be used.
       
  1437          * Currently the audio policy blocks DTMF mixing with the UPL stream.
       
  1438          * 1) KAudioPrefUnknownVoipAudioUplink      -3rd party VoIP?
       
  1439          *    KAudioPriorityUnknownVoipAudioUplink  -3rd party VoIP?
       
  1440          *    KAudioPriorityUnknownVoipAudioUplinkNonSignal -???
       
  1441          * 2) KAudioPrefVoipAudioUplink             -NOK native VoIP?
       
  1442          *    KAudioPrefUnknownVoipAudioUplinkNonSignal -???
       
  1443          *    KAudioPrefVoipAudioUplinkNonSignal        -???
       
  1444          *    KAudioPriorityVoipAudioUplink         -NOK native VoIP?
       
  1445          */
       
  1446         TRAP(status, iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this,
       
  1447                 KAudioPrefVoipAudioUplink, KAudioPriorityVoipAudioUplink));
       
  1448         }
       
  1449 
       
  1450     if (!iDTMFNotifier && status == TMS_RESULT_SUCCESS)
       
  1451          {
       
  1452          TRAP(status, iDTMFNotifier = TMSDtmfNotifier::NewL());
       
  1453          }
       
  1454 
       
  1455     TRACE_PRN_FN_EXT;
       
  1456     return status;
       
  1457     }
       
  1458 
       
  1459 // -----------------------------------------------------------------------------
  1408 // TMSCallIPAdpt::StartDTMF
  1460 // TMSCallIPAdpt::StartDTMF
  1409 //
  1461 //
  1410 // -----------------------------------------------------------------------------
  1462 // -----------------------------------------------------------------------------
  1411 //
  1463 //
  1412 gint TMSCallIPAdpt::StartDTMF(TMSStreamType strmtype, TDes& dtmfstring)
  1464 gint TMSCallIPAdpt::StartDTMF(TMSStreamType strmtype, TDes& dtmfstring)
  1413     {
  1465     {
  1414     TRACE_PRN_FN_ENT;
  1466     TRACE_PRN_FN_ENT;
       
  1467     gint status(TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED);
  1415     TmsMsgBufPckg dtmfpckg;
  1468     TmsMsgBufPckg dtmfpckg;
       
  1469     dtmfpckg().iStatus = status;
       
  1470     dtmfpckg().iRequest = ECmdDTMFTonePlayFinished;
       
  1471 
  1416     if (strmtype == TMS_STREAM_DOWNLINK)
  1472     if (strmtype == TMS_STREAM_DOWNLINK)
  1417         {
  1473         {
  1418         if (iDTMFDnlinkPlayer /*&& iDTMFDnlinkStatus*/)
  1474         status = TMS_RESULT_UNINITIALIZED_OBJECT;
       
  1475         if (iDTMFDnlinkPlayer)
  1419             {
  1476             {
  1420             iDTMFDnlinkPlayer->PlayDtmfTone(dtmfstring);
  1477             iDTMFDnlinkPlayer->PlayDtmfTone(dtmfstring);
  1421             dtmfpckg().iStatus = TMS_RESULT_SUCCESS;
  1478             status = TMS_RESULT_SUCCESS;
  1422             //TMS_EVENT_DTMF_TONE_STARTED
  1479             }
  1423             dtmfpckg().iRequest = ECmdDTMFOpenDnlinkComplete;
  1480         dtmfpckg().iStatus = status;
  1424             }
  1481         dtmfpckg().iRequest = ECmdDTMFToneDnlPlayStarted;
  1425         }
  1482         }
  1426     else if (strmtype == TMS_STREAM_UPLINK)
  1483     else if (strmtype == TMS_STREAM_UPLINK)
  1427         {
  1484         {
  1428         if (iDTMFUplinkPlayer /*&& iDTMFUplinkStatus*/)
  1485         status = TMS_RESULT_UNINITIALIZED_OBJECT;
       
  1486         if (iDTMFUplinkPlayer)
  1429             {
  1487             {
  1430             iDTMFUplinkPlayer->PlayDtmfTone(dtmfstring);
  1488             iDTMFUplinkPlayer->PlayDtmfTone(dtmfstring);
  1431             dtmfpckg().iStatus = TMS_RESULT_SUCCESS;
  1489             status = TMS_RESULT_SUCCESS;
  1432             //TMS_EVENT_DTMF_TONE_STARTED
  1490             }
  1433             dtmfpckg().iRequest = ECmdDTMFOpenUplinkComplete;
  1491         dtmfpckg().iStatus = status;
  1434             }
  1492         dtmfpckg().iRequest = ECmdDTMFToneUplPlayStarted;
  1435         }
  1493         }
  1436 
  1494 
  1437     if (iDTMFNotifier)
  1495     if (iDTMFNotifier)
  1438         {
  1496         {
  1439         iDTMFNotifier->SetDtmf(dtmfpckg, TRUE);
  1497         iDTMFNotifier->SetDtmf(dtmfpckg);
  1440         }
  1498         }
       
  1499 
       
  1500     TRACE_PRN_IF_ERR(status);
       
  1501     TRACE_PRN_FN_EXT;
       
  1502     return status;
       
  1503     }
       
  1504 
       
  1505 // -----------------------------------------------------------------------------
       
  1506 // TMSCallIPAdpt::StopDTMF
       
  1507 //
       
  1508 // -----------------------------------------------------------------------------
       
  1509 //
       
  1510 gint TMSCallIPAdpt::StopDTMF(TMSStreamType streamtype)
       
  1511     {
       
  1512     TRACE_PRN_FN_ENT;
       
  1513 
       
  1514     if (streamtype == TMS_STREAM_DOWNLINK)
       
  1515         {
       
  1516         iDTMFDnlinkPlayer->Cancel();
       
  1517         }
       
  1518     else if (streamtype == TMS_STREAM_UPLINK)
       
  1519         {
       
  1520         iDTMFUplinkPlayer->Cancel();
       
  1521         }
       
  1522 
  1441     TRACE_PRN_FN_EXT;
  1523     TRACE_PRN_FN_EXT;
  1442     return TMS_RESULT_SUCCESS;
  1524     return TMS_RESULT_SUCCESS;
  1443     }
  1525     }
  1444 // -----------------------------------------------------------------------------
       
  1445 // TMSCallIPAdpt::StopDTMF
       
  1446 //
       
  1447 // -----------------------------------------------------------------------------
       
  1448 //
       
  1449 gint TMSCallIPAdpt::StopDTMF(TMSStreamType streamtype)
       
  1450     {
       
  1451     TRACE_PRN_FN_ENT;
       
  1452 
       
  1453     if (streamtype == TMS_STREAM_DOWNLINK)
       
  1454         {
       
  1455         iDTMFDnlinkPlayer->Cancel();
       
  1456         }
       
  1457     else
       
  1458         {
       
  1459         iDTMFUplinkPlayer->Cancel();
       
  1460         }
       
  1461 
       
  1462     TRACE_PRN_FN_EXT;
       
  1463     return TMS_RESULT_SUCCESS;
       
  1464     }
       
  1465 
  1526 
  1466 // -----------------------------------------------------------------------------
  1527 // -----------------------------------------------------------------------------
  1467 // TMSCallIPAdpt::ContinueDTMF
  1528 // TMSCallIPAdpt::ContinueDTMF
  1468 //
  1529 //
  1469 // -----------------------------------------------------------------------------
  1530 // -----------------------------------------------------------------------------
  1470 //
  1531 //
  1471 gint TMSCallIPAdpt::ContinueDTMF(TBool /*continuesending*/)
  1532 gint TMSCallIPAdpt::ContinueDTMF(gboolean /*continuesending*/)
  1472     {
  1533     {
  1473     TRACE_PRN_FN_ENT;
       
  1474     TRACE_PRN_FN_EXT;
       
  1475     return TMS_RESULT_FEATURE_NOT_SUPPORTED;
  1534     return TMS_RESULT_FEATURE_NOT_SUPPORTED;
  1476     }
  1535     }
  1477 
  1536 
  1478 //From DTMFTonePlayerObserver
  1537 //From DTMFTonePlayerObserver
  1479 // -----------------------------------------------------------------------------
  1538 // -----------------------------------------------------------------------------
  1480 // TMSCallIPAdpt::DTMFInitCompleted
  1539 // TMSCallIPAdpt::DTMFInitCompleted
  1481 //
  1540 //
  1482 // -----------------------------------------------------------------------------
  1541 // -----------------------------------------------------------------------------
  1483 //
  1542 //
  1484 void TMSCallIPAdpt::DTMFInitCompleted(TInt /*error*/)
  1543 void TMSCallIPAdpt::DTMFInitCompleted(gint /*error*/)
  1485     {
  1544     {
  1486     //DTMF init status
  1545     TRACE_PRN_FN_ENT;
  1487     TRACE_PRN_FN_ENT;
  1546     //TRACE_PRN_IF_ERR(error);
  1488     TRACE_PRN_FN_EXT;
  1547     TRACE_PRN_FN_EXT;
  1489     }
  1548     }
  1490 
  1549 
  1491 // -----------------------------------------------------------------------------
  1550 // -----------------------------------------------------------------------------
  1492 // TMSCallIPAdpt::DTMFToneFinished
  1551 // TMSCallIPAdpt::DTMFToneFinished
  1493 //
  1552 //
  1494 // -----------------------------------------------------------------------------
  1553 // -----------------------------------------------------------------------------
  1495 //
  1554 //
  1496 void TMSCallIPAdpt::DTMFToneFinished(TInt error)
  1555 void TMSCallIPAdpt::DTMFToneFinished(gint error)
  1497     {
  1556     {
  1498     TRACE_PRN_FN_ENT;
  1557     TRACE_PRN_FN_ENT;
       
  1558     TRACE_PRN_IF_ERR(error);
  1499     TmsMsgBufPckg dtmfpckg;
  1559     TmsMsgBufPckg dtmfpckg;
  1500 
  1560 
  1501      if(error == KErrUnderflow || error == KErrInUse)
  1561     // Ignore KErrUnderflow - end of DTMF playback.
       
  1562     if(error == KErrUnderflow /*|| error == KErrInUse*/)
  1502          {
  1563          {
  1503          error = TMS_RESULT_SUCCESS;
  1564          error = TMS_RESULT_SUCCESS;
  1504          }
  1565          }
  1505 
       
  1506     dtmfpckg().iStatus = error;
  1566     dtmfpckg().iStatus = error;
  1507     //TMS_EVENT_DTMF_TONE_STOPPED
       
  1508     dtmfpckg().iRequest = ECmdDTMFTonePlayFinished;
  1567     dtmfpckg().iRequest = ECmdDTMFTonePlayFinished;
  1509     if (iDTMFNotifier)
  1568     if (iDTMFNotifier)
  1510         {
  1569         {
  1511         iDTMFNotifier->SetDtmf(dtmfpckg, TRUE);
  1570         iDTMFNotifier->SetDtmf(dtmfpckg);
  1512         }
  1571         }
  1513     TRACE_PRN_FN_EXT;
  1572     TRACE_PRN_FN_EXT;
  1514     }
  1573     }
  1515 
  1574 
  1516 // -----------------------------------------------------------------------------
  1575 // -----------------------------------------------------------------------------
  1517 // TMSCallIPAdpt::NotifyClient
  1576 // TMSCallIPAdpt::NotifyClient
  1518 // -----------------------------------------------------------------------------
  1577 // -----------------------------------------------------------------------------
  1519 //
  1578 //
  1520 void TMSCallIPAdpt::NotifyClient(const gint strmId, const TInt aCommand,
  1579 void TMSCallIPAdpt::NotifyClient(const gint strmId, const gint aCommand,
  1521         const TInt aStatus, const TInt64 /*aInt64*/)
  1580         const gint aStatus, const gint64 /*aInt64*/)
  1522     {
  1581     {
  1523     iMsgBuffer.iRequest = aCommand;
  1582     iMsgBuffer.iRequest = aCommand;
  1524     iMsgBuffer.iStatus = aStatus;
  1583     iMsgBuffer.iStatus = aStatus;
  1525 
  1584 
  1526     if (strmId == iUplinkStreamId)
  1585     if (strmId == iUplinkStreamId)