mmserv/tms/tmscallproxy/src/tmscallproxy.cpp
changeset 0 71ca22bcf22a
child 10 3d8c721bf319
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/tms/tmscallproxy/src/tmscallproxy.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,669 @@
+/*
+ * Copyright (c) 2009 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: Telephony Multimedia Service
+ *
+ */
+
+#include <s32mem.h>
+#include <tmsbuffer.h>
+#include "tmsutility.h"
+#include "tmsproxy.h"
+#include "tmscallclisrv.h"
+#include "tmscallproxy.h"
+
+using namespace TMS;
+
+// CONSTANTS
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::TMSCallProxy
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMSCallProxy::TMSCallProxy() :
+    iTMSProxy(NULL)
+    {
+    // No impl
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::~TMSCallProxy
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TMSCallProxy::~TMSCallProxy()
+    {
+    TRACE_PRN_FN_ENT;
+    this->Close();
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::Connect
+// Create a client-side session. Start the server if not started already.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::Connect()
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TRAP(status, iTMSProxy = new (ELeave) TMSProxy());
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        status = iTMSProxy->Connect();
+        if (status == TMS_RESULT_SUCCESS)
+            {
+            status = SetReturnedHandle(iTMSProxy->GetTMSCallSessionHandle());
+            }
+        else
+            {
+            delete iTMSProxy;
+            iTMSProxy = NULL;
+            }
+        }
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::CreateCall
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::CreateCall(gint calltype)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    status = RSessionBase::SendReceive(TMS_CREATE_CALL, TIpcArgs(calltype));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::CreateStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::CreateStream(TMSCallType callType,
+        TMSStreamType strmType, gint& strmId)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamCreateDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    TPckgBuf<gint> outPckg;
+    status = RSessionBase::SendReceive(TMS_CREATE_STREAM, TIpcArgs(&inPckg,
+            &outPckg));
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        strmId = outPckg();
+        }
+
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::InitStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::InitStream(const TMSCallType callType,
+        const TMSStreamType strmType, gint strmId,
+        const TMSFormatType frmtType, RHandleBase* msgQueue)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamInitDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    inPckg().FormatType = frmtType;
+    status = RSessionBase::SendReceive(TMS_INIT_STREAM, TIpcArgs(&inPckg,
+            *msgQueue));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::StartStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::StartStream(const TMSCallType callType,
+        const TMSStreamType strmType, gint strmId)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamOpDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    status = RSessionBase::SendReceive(TMS_START_STREAM, TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::PauseStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::PauseStream(const TMSCallType callType,
+        const TMSStreamType strmType, gint strmId)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamOpDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    status = RSessionBase::SendReceive(TMS_PAUSE_STREAM, TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::StopStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::StopStream(const TMSCallType callType,
+        const TMSStreamType strmType, gint strmId)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamOpDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    status = RSessionBase::SendReceive(TMS_STOP_STREAM, TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::DeinitStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::DeinitStream(const TMSCallType callType,
+        const TMSStreamType strmType, gint strmId)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamOpDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    status = RSessionBase::SendReceive(TMS_DEINIT_STREAM, TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::DeleteStream
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::DeleteStream(const TMSCallType callType,
+        const TMSStreamType strmType, gint& strmId)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvStreamOpDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    status = RSessionBase::SendReceive(TMS_DELETE_STREAM, TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::DeleteCall
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMSCallProxy::DeleteCall()
+    {
+    TRACE_PRN_FN_ENT;
+    RSessionBase::SendReceive(TMS_DELETE_CALL);
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::Close
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void TMSCallProxy::Close()
+    {
+    TRACE_PRN_FN_ENT;
+    if (Handle() > 0)
+        {
+        RSessionBase::Close();
+        }
+
+    if (iTMSProxy)
+        {
+        iTMSProxy->Close();
+        delete iTMSProxy;
+        iTMSProxy = NULL;
+        }
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::BufferEmptied
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::BufferEmptied(TMSCallType callType,
+        TMSStreamType strmType, gint strmId, TMSBuffer& /*buffer*/)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    // For now we can use TMSCliSrvStreamOpDataStructBufPckg, there is
+    // nothing that needs to be sent from the client side for buffer
+    // emptied call
+    TMSCliSrvDataXferDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    status = RSessionBase::SendReceive(TMS_DATA_XFER_BUFFER_EMPTIED,
+            TIpcArgs(&inPckg));
+    
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::BufferFilled
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::BufferFilled(TMSCallType callType,
+        TMSStreamType strmType, gint strmId, TMSBuffer& buffer)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    // For now we can use TMSCliSrvStreamOpDataStructBufPckg, there is
+    // nothing that needs to be sent from the client side for buffer
+    // emptied call
+    TMSCliSrvDataXferDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    buffer.GetDataSize(inPckg().DataSize);
+    status = RSessionBase::SendReceive(TMS_DATA_XFER_BUFFER_FILLED,
+            TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetMaxVolume
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetMaxVolume(guint& aVol)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<guint> pckg;
+    TIpcArgs args(&pckg);
+    status = SendReceive(TMS_EFFECT_VOLUME_GETMAX, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aVol = pckg();
+        }
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::SetVolume
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetVolume(const guint aVol)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    status = SendReceive(TMS_EFFECT_VOLUME_SET, TIpcArgs(aVol));
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetVolume
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetVolume(guint& aVol)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<guint> pckg;
+    TIpcArgs args(&pckg);
+    status = SendReceive(TMS_EFFECT_VOLUME_GET, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aVol = pckg();
+        }
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetMaxGain
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetMaxGain(guint& aGain)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<guint> pckg;
+    TIpcArgs args(&pckg);
+    status = SendReceive(TMS_EFFECT_GAIN_GETMAX, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aGain = pckg();
+        }
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::SetGain
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetGain(const guint aGain)
+    {
+    return SendReceive(TMS_EFFECT_GAIN_SET, TIpcArgs(aGain));
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetGain
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetGain(guint& aGain)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<guint> pckg;
+    TIpcArgs args(&pckg);
+    status = SendReceive(TMS_EFFECT_GAIN_GET, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aGain = pckg();
+        }
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetSupportedBitRates
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetSupportedBitRates(BitRateVector& aVector)
+    {
+    TRAPD(status, GetSupportedBitRatesL(aVector));
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetSupportedBitRatesL
+//
+// -----------------------------------------------------------------------------
+//
+void TMSCallProxy::GetSupportedBitRatesL(BitRateVector& aVector)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    guint brCount = 0;
+    TPckgBuf<guint> pckg;
+    TIpcArgs args(&pckg);
+    status = SendReceive(TMS_FORMAT_GETSUPPORTEDBITRATESCOUNT, args);
+
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        brCount = pckg();
+        }
+    else
+        {
+        User::Leave(status);
+        }
+
+    TRACE_PRN_N1(_L("TMSCallProxy->BRCount [%d]"), brCount);
+
+    if (brCount > 0 && status == TMS_RESULT_SUCCESS)
+        {
+        HBufC8* buf = HBufC8::NewLC(brCount * sizeof(TUint));
+        TPtr8 ptr = buf->Des();
+        TIpcArgs args1;
+        args1.Set(0, &ptr);
+        status = SendReceive(TMS_FORMAT_GETSUPPORTEDBITRATES, args1);
+        if (status == TMS_RESULT_SUCCESS)
+            {
+            RDesReadStream stream(ptr);
+            CleanupClosePushL(stream); // stream on cleanup
+            //aArray.Reset();
+
+            for (guint i = 0; i < brCount; i++)
+                {
+                //aArray.Append(stream.ReadUint32L());
+                aVector.push_back(stream.ReadUint32L());
+                }
+
+            CleanupStack::PopAndDestroy(&stream);
+            }
+        else
+            {
+            CleanupStack::PopAndDestroy(buf);
+            User::Leave(status);
+            }
+
+        CleanupStack::PopAndDestroy(buf);
+        }
+
+    TRACE_PRN_FN_EXT;
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::SetBitRate
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetBitRate(const guint aBitrate)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    status = SendReceive(TMS_FORMAT_SETBITRATE, TIpcArgs(aBitrate));
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetBitRate
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetBitRate(guint& aBitrate)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<guint> pckg;
+    TIpcArgs args(&pckg);
+    status = SendReceive(TMS_FORMAT_GETBITRATE, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aBitrate = pckg();
+        }
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetFormatCodecMode
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetFormatCodecMode(const TMSFormatType aFmtType,
+        const TMSStreamType aStrmType, gint& aMode)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<gint> pckg;
+    TIpcArgs args(aFmtType, aStrmType, &pckg);
+    status = SendReceive(TMS_FORMAT_GETCODECMODE, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aMode = pckg();
+        }
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetFormatCodecMode(const TMSFormatType aFmtType,
+        const TMSStreamType aStrmType, gint aMode)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    status = SendReceive(TMS_FORMAT_SETCODECMODE, TIpcArgs(aFmtType,
+            aStrmType, aMode));
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetCNG
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetCNG(const TMSFormatType aFmtType,
+        gboolean& aCng)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<gboolean> pckg;
+    TIpcArgs args(aFmtType, &pckg);
+    status = SendReceive(TMS_FORMAT_GETCNG, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aCng = pckg();
+        }
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::SetCNG
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetCNG(const TMSFormatType aFmtType,
+        const gboolean aCng)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    status = SendReceive(TMS_FORMAT_SETCNG, TIpcArgs(aFmtType, aCng));
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetPlc
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetPlc(const TMSFormatType aFmtType,
+        gboolean& aPlc)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<gboolean> pckg;
+    TIpcArgs args(aFmtType, &pckg);
+    status = SendReceive(TMS_FORMAT_GETPLC, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        aPlc = pckg();
+        }
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::SetPlc
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetPlc(const TMSFormatType aFmtType,
+        const gboolean aPlc)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    status = SendReceive(TMS_FORMAT_SETPLC, TIpcArgs(aFmtType, aPlc));
+    return TMSRESULT(status);
+}
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetVADMode
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetVADMode(const TMSFormatType fmttype,
+        gboolean& vad)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    TPckgBuf<gboolean> pckg;
+    TIpcArgs args(fmttype, &pckg);
+    status = SendReceive(TMS_FORMAT_GETVAD, args);
+    if (status == TMS_RESULT_SUCCESS)
+        {
+        vad = pckg();
+        }
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::SetVADMode
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::SetVADMode(const TMSFormatType fmttype,
+        const gboolean vad)
+    {
+    gint status(TMS_RESULT_SUCCESS);
+    status = SendReceive(TMS_FORMAT_SETVAD, TIpcArgs(fmttype, vad));
+    return TMSRESULT(status);
+    }
+
+// -----------------------------------------------------------------------------
+// TMSCallProxy::GetDataXferChunkHandle
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C gint TMSCallProxy::GetDataXferChunkHandle(TMSCallType callType,
+        TMSStreamType strmType, gint strmId, guint32 key)
+    {
+    TRACE_PRN_FN_ENT;
+    gint status(TMS_RESULT_SUCCESS);
+    TMSCliSrvDataXferChunkHndlDataStructBufPckg inPckg;
+    inPckg().CallType = callType;
+    inPckg().StreamType = strmType;
+    inPckg().StreamId = strmId;
+    inPckg().Key = key;
+    // We don't want to convert Symbain error to TMS error in this case.
+    status = RSessionBase::SendReceive(TMS_DATA_XFER_BUFFER_GET_HNDL,
+            TIpcArgs(&inPckg));
+    TRACE_PRN_FN_EXT;
+    return TMSRESULT(status);
+    }
+
+// End of file