diff -r 000000000000 -r 71ca22bcf22a mmserv/voipaudioservices/VoIPServer/inc/VoIPServerSession.h --- /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 +#include +#include +#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 iMsgComQueue; + RMsgQueue iMsgComQueueDtmf; + + // Message queue for communication between server threads + RMsgQueue iITCMsgComQueue; + + TVoIPMsgBuf iMsgBuffer; + TMMFPrioritySettings iPriority; + + // Msg queued until called back from the DL/UL thread + RMessage2 iMessage; + TBool iMsgQueued; + + TInt iMaxVolume; + TInt iMaxGain; + RArray iBitrateArray; + RArray iCodecsUp; + RArray 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