diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/inc/musengreceivesession.h --- a/mmsharing/mmshengine/inc/musengreceivesession.h Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/inc/musengreceivesession.h Tue Aug 31 15:12:07 2010 +0300 @@ -19,18 +19,20 @@ #ifndef MUSHENGREVEIVESESSION_H #define MUSHENGREVEIVESESSION_H - - +// INCLUDES #include "musengmcesession.h" #include "musenguriparser.h" #include "musunittesting.h" - #include +// FORWARD DECLARATIONS class MMusEngReceiveSessionObserver; class CMceInSession; +class CMusEngRemoteVideoPlayer; -class CMusEngReceiveSession : public CMusEngMceSession + +class CMusEngReceiveSession : + public CMusEngMceSession { MUS_UNITTEST( UT_CMusEngMceSession ) MUS_UNITTEST( UT_CMusEngReceiveSession ) @@ -39,36 +41,30 @@ /** * Creates new MultimediaSharing Receive session. - * - * @param aRect UI drawing area. It is allowed handle from engine - * @param aEngObserver Engine specific callbacks - * @param aSessionObserver Session specific callbacks * @return CMusEngReceiveSession* New instanse of specified class */ - IMPORT_C static CMusEngReceiveSession* NewL( - const TRect& aRect, - MMusEngSessionObserver& aSessionObserver, - MMusEngReceiveSessionObserver& aReceiveSessionObserver ); + static CMusEngReceiveSession* NewL(); + /** * Destructor * * @since S60 v3.2 */ ~CMusEngReceiveSession(); - + + public: // From MLcSession + + TLcSessionState LcSessionState() const; + + void EstablishLcSessionL(); - public: // API - - /** - * Accept or deny processed invitation - * - * @param aAccept ETrue if session is to be accepted and EFalse if - * to be rejected. - */ - IMPORT_C void AcceptInvitationL(const TBool& aAccept); - - - private: // Overrides function in CMusEngMceSession + void TerminateLcSessionL(); + + MLcVideoPlayer* RemoteVideoPlayer(); + + const TDesC& RemoteDisplayName(); + + protected: // Overrides function in CMusEngMceSession /** * The state of the session has changed. @@ -86,7 +82,8 @@ * session. This function overrides function in base class. * Function calls also overridden version. */ - virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec ); + virtual void AdjustVideoCodecL( CMceVideoCodec& aVideoCodec, + TMceSourceType aSourceType ); /** * Sets Multimediasharing specific audio codec settings like keepalive @@ -104,10 +101,9 @@ * @param aVideoStream */ virtual void DoCodecSelectionL( CMceVideoStream& aVideoStream ); - - - private: // from MMceInSessionObserver - // overrides the function in CMusEngMceSession + + protected: // from MMceInSessionObserver + // overrides the function in CMusEngMceSession /** * Incoming session invitation. The CMCEInSession is given to the @@ -138,7 +134,7 @@ TMceTransactionDataContainer* aContainer ); - private: // from MMceStreamObserver, + protected: // from MMceStreamObserver, // overrides the function in CMusEngMceSession /** @@ -148,25 +144,28 @@ * @param aStream, the stream that uses the source. */ void StreamStateChanged( CMceMediaStream& aStream ); + + protected: // from MMceRtpObserver + + void InactivityTimeout( CMceMediaStream& aStream, + CMceRtpSource& aSource ); - private: // CONSTRUCTORS + + protected: // CONSTRUCTORS - CMusEngReceiveSession( - MMusEngSessionObserver& aSessionObserver, - MMusEngReceiveSessionObserver& aReceiveSessionObserver, - const TRect& aRect ); + CMusEngReceiveSession(); void ConstructL(); - private: // HELPERS + protected: // HELPERS CMceInSession* InSession(); void PrepareToRequire100RelL( - TMceTransactionDataContainer* aContainer); + TMceTransactionDataContainer* aContainer ); - void CompleteSessionStructureL(); + virtual void CompleteSessionStructureL(); /** * Parse P-Asserted-Identity header. @@ -174,18 +173,50 @@ * if tel uri not found it suppose that telephone number * is in sip url. */ - void ParseAssertedIdentity( - TMceTransactionDataContainer* aContainer ); + void ParseAssertedIdentity( TMceTransactionDataContainer* aContainer ); + /* + * Checks for buffering event happened & receiving already not started + * If yes, start the RTP inactivity timer and indicate to observer + * about videoplayer state change. + * else will not do anything. Bascially ignores the event. + */ + void ReceivingStarted(); - private: // DATA - - MMusEngReceiveSessionObserver& iReceiveSessionObserver; + /** + * Checks for receiving already started and display sink is enabled + * If yes ETrue else otherwise. + */ + TBool IsDisplayActive(); + + protected: // DATA // Set to ETrue if CMceInSession::RingL has already been called TBool iRingLCalled; // identity of originator parsed form P-Asserted-Identity field TBuf8 iIdentity; + + HBufC8* iOriginator; + + HBufC* iRemoteDisplayName; + + /// The remote video player implementing MLcVideoPlayer + CMusEngRemoteVideoPlayer* iRemoteVideoPlayer; + + TUint32 iReceivingInactivityTimeout; + + TUint8 iKeepaliveTimer; + + private: + /* Flag for whether receiving started. It will go EFalse + * when RTP inactivity timeout happen. + */ + TBool iReceiving; + /* Flag to indicate buffering event happened. This flag is for + * optimization purpose since buffering event is the only place + * we can be sure about some packets were received. + */ + TBool iBuffered; }; #endif