--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/voipaudioservices/VoIPServer/inc/VoIPServerSession.h Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,687 @@
+/*
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Definition of VoIP server session class.
+ *
+ */
+
+#ifndef __VOIPSERVERSESSION_H
+#define __VOIPSERVERSESSION_H
+
+// INCLUDES
+#include <e32msgqueue.h>
+#include <mdaaudiosampleplayer.h>
+#include <sounddevice.h>
+#include "VoIPServerAO.h"
+#include "VoIPSharedData.h"
+#include "VoIPAudioClientServer.h"
+#include "VoIPServer.h"
+#include "VoIPAudioSession.h"
+
+// FORWARD DECLARATIONS
+class CVoIPAudioServerThread;
+class MProEngEngine;
+class MProEngProfile;
+
+// -----------------------------------------------------------------------------
+// Class Name: CVoIPAudioServerSession
+//
+// VoIP server session class.
+// -----------------------------------------------------------------------------
+class CVoIPAudioServerSession : public CSession2,
+ public MThreadComObserver,
+ public MDevSoundObserver,
+ public MMdaAudioPlayerCallback
+ {
+ // Each session is designated as one of these types
+ enum TSessionType
+ {
+ ENone,
+ EQueryDec,
+ EQueryEnc,
+ EDnlink,
+ EUplink,
+ ERingTone
+ };
+
+public:
+ // Constractor
+ static CVoIPAudioServerSession* NewL(CVoIPAudioServer &aServer);
+
+ // Destructor
+ ~CVoIPAudioServerSession();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void SetPriorityL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void GetCodecsCountL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void GetSupportedCodecsL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void OpenDownlinkL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void OpenUplinkL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetFormatL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void StartDownlink();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void StartUplink();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void StopDownlink();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void StopUplink();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void CloseDownlink();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void CloseUplink();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetMaxVolumeL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetVolume(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetVolume(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetMaxGainL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetGain(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetGain(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetAudioDeviceL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetAudioDevice(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void BufferFilledL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void BufferEmptiedL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RThread&
+ * @param TUserCommand
+ * @return void
+ */
+ void SendCmd(RThread& aThread, TUserCommand aCmd);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetIlbcCodecModeL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetIlbcCodecMode(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetG711CodecModeL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetG711CodecMode(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetSupportedBitratesCount(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetSupportedBitratesL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetBitrate(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetBitrate(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void FrameModeRqrdForEC(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetFrameMode(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetFrameMode(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void ConcealErrorForNextBuffer();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetVad(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetVad(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetCng(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetCng(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void SetPlc(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void GetPlc(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void BadLsfNextBuffer();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void ConfigureJitterBufferL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void ResetJitterBuffer(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void JBDelayDown();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void JBDelayUp();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void OpenDTMFTonePlayerL();
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param RMessage2&
+ * @return void
+ */
+ void PlayDTMFToneL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void StopDTMFTonePlay();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void CloseDTMFTonePlayer();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void OpenRingTonePlayerFromFileL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void OpenRingTonePlayerFromRFileL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void OpenRingTonePlayerFromProfileL();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param const RMessage2&
+ * @return void
+ */
+ void OpenRingTonePlayerFromDesL(const RMessage2& aMessage);
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void PlayRingTone();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void PauseRingTone();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void ResumeRingTone();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void StopRingTone();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param none
+ * @return void
+ */
+ void CloseRingTonePlayer();
+
+ /**
+ * ?description
+ *
+ * @since S60 v5.0
+ * @param TInt
+ * @return void
+ */
+ void InitRingTonePlayerL();
+
+ // CALLBACKS
+
+ // From MMdaAudioPlayerCallback
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param TInt
+ * @param const TTimeIntervalMicroSeconds&
+ * @return void
+ */
+ virtual void MapcInitComplete(TInt aError,
+ const TTimeIntervalMicroSeconds& aDuration);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param TInt
+ * @return void
+ */
+ virtual void MapcPlayComplete(TInt aError);
+
+ // From MThreadComObserver
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param TExcType
+ * @return void
+ */
+ virtual void DoHandleCmd(TExcType aExc, TInt aError);
+
+ /**
+ * ?description
+ * @since S60 v5.0
+ * @param TInt
+ * @return void
+ */
+ virtual void DoHandleError(TInt aError);
+
+ // From MDevSoundObserver
+ virtual void InitializeComplete(TInt aError);
+ virtual void BufferToBeEmptied(CMMFBuffer* aBuffer);
+ virtual void RecordError(TInt aError);
+ virtual void BufferToBeFilled(CMMFBuffer* aBuffer);
+ virtual void PlayError(TInt aError);
+ virtual void ToneFinished(TInt /*aError*/);
+ virtual void ConvertError(TInt /*aError*/) {}
+ virtual void DeviceMessage(TUid /*aMessageType*/, const TDesC8& /*aMsg*/) {}
+ virtual void SendEventToClient(const TMMFEvent& /*aEvent*/) {}
+
+private:
+
+ // Symbian constructors
+ void ConstructL();
+ CVoIPAudioServerSession(CVoIPAudioServer& aServer);
+
+ // Client-server message handlers
+ void ServiceL(const RMessage2& aMessage);
+ void DispatchMessageL(const RMessage2& aMessage);
+
+ void SendCmdToThread(const TInt aCommand, const TInt aStatus = KErrNone);
+ void NotifyClient(const TInt aCommand, const TInt aStatus = KErrNone,
+ const TInt64 aInt64 = TInt64(0));
+ void NotifyDtmfClient(const TInt aCommand, const TInt aStatus = KErrNone);
+
+ // Handlers of request complete events from the work threads
+ void DownlinkInitComplete(TInt aError);
+ void UplinkInitComplete(TInt aError);
+ void GetVolumeComplete(TInt aError);
+ void GetGainComplete(TInt aError);
+ void GetAudioDeviceComplete(TInt aError);
+ void GetSupportedBitratesComplete(TInt aError);
+ void GetBitrateComplete(TInt aError);
+ void GetG711CodecModeComplete(TInt aError);
+ void GetIlbcCodecModeComplete(TInt aError);
+ void GetFrameModeComplete(TInt aError);
+ void GetFrameModeReqForECComplete(TInt aError);
+ void GetVadComplete(TInt aError);
+ void GetCngComplete(TInt aError);
+ void GetPlcComplete(TInt aError);
+
+ //void DetermineG711FrameRateL();
+ void ReleaseQueuedMessage(TInt aError, TUint aFrmSize = 0);
+
+private:
+ //data members
+
+ CVoIPAudioServer& iVoIPServer;
+ RThread iThread;
+ TSharedData iShared;
+
+ // Message queue for communication back to the client side
+ RMsgQueue<TVoIPMsgBuf> iMsgComQueue;
+ RMsgQueue<TVoIPMsgBuf> iMsgComQueueDtmf;
+
+ // Message queue for communication between server threads
+ RMsgQueue<TVoIPMsgBuf> iITCMsgComQueue;
+
+ TVoIPMsgBuf iMsgBuffer;
+ TMMFPrioritySettings iPriority;
+
+ // Msg queued until called back from the DL/UL thread
+ RMessage2 iMessage;
+ TBool iMsgQueued;
+
+ TInt iMaxVolume;
+ TInt iMaxGain;
+ RArray<TUint> iBitrateArray;
+ RArray<TFourCC> iCodecsUp;
+ RArray<TFourCC> iCodecsDn;
+ TInt iCodecsCountUp;
+ TInt iCodecsCountDn;
+ CVoIPServerAO* iAO; // ITC back with this thread
+ TSessionType iSessionType;
+
+ CMMFDevSound* iDevSound; // To get supported codecs
+ CMMFDevSound* iDTMFTonePlayer;
+ TBool iDTMFTonePlayerInitRequest;
+ TBool iDevSoundInitRequest;
+ TTimeIntervalMicroSeconds32 iToneLenOn;
+ TTimeIntervalMicroSeconds32 iToneLenOff;
+ TTimeIntervalMicroSeconds32 iToneLenPause;
+
+ CMdaAudioPlayerUtility* iRingTonePlayer;
+ HBufC8* iToneBuf;
+ };
+
+#endif //__VOIPSERVERSESSION_H
+
+// End of file