diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccsubcontroller/inc/mccrtpkeepalive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccsubcontroller/inc/mccrtpkeepalive.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,259 @@ +/* +* Copyright (c) 2002-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: RTP Keepalive mechanism +* +*/ + + + + +#ifndef MCCRTPKEEPALIVE_H +#define MCCRTPKEEPALIVE_H + +// INCLUDES +#include +#include "rtpdef.h" +#include "rtpapi.h" +#include "rtpheader.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class MAsyncEventHandler; +class MMccResources; +class MMccRtpInterface; +class CMccRtpMediaClock; + +// CLASS DECLARATION + +/** +* +*/ +NONSHARABLE_CLASS( CMccRtpKeepalive ) : public CActive + { + public: // enums + + enum TMccRtpKeepaliveState + { + EIdle, + ESending, + EWaitingTimer, + ESendingPending + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMccRtpKeepalive* NewL( MAsyncEventHandler& aEventHandler, + CRtpAPI& aRtpAPI, + TRtpId aRtpSessionId, + TUint8 aKeepalivePayloadType, + TUint8 aKeepaliveInterval, + const TDesC8& aKeepaliveData, + TBool aRemoteAddressSet ); + + /** + * Destructor + */ + virtual ~CMccRtpKeepalive(); + + public: // New functions + + /** + * Start sending keepalive packets. + * + * @since Series 60 3.2 + * @param aUser rtp interface instance + * @param aRtpMediaClock rtp media clock instance + * @return void + */ + void StartKeepaliveL( MMccRtpInterface& aUser, + CMccRtpMediaClock& aRtpMediaClock ); + + /** + * Stop sending keepalive packets. + * + * @since Series 60 3.2 + * @param aUser rtp interface instance + * @param aRefCount array index to rtp interface intance array + * @return One of the standard system-wide error codes. + */ + TInt StopKeepalive( MMccRtpInterface& aUser, TInt& aRefCount ); + + /** + * Reset keepalive timer. + * + * @since Series 60 3.2 + * @param None + * @return void + */ + void ResetKeepaliveTimer(); + + /** + * Getter function for rtp stream id. + * + * @since Series 60 3.2 + * @param None + * @return rtp stream Id. + */ + TRtpId StreamId() const; + + TUint8 PayloadType() const; + + TInt RemoteAddressSet(); + + /** + * Function for checking if there is a sink in the array. + * + * @since Series 60 3.2 + * @return ETrue if sink exits + */ + TBool IsForSink(); + + /** + * Update session keepalive parameters + * + * @since Series 60 3.2 + * @param aKeepalivePT payload type for keepalive + * @param aKeepaliveInterval interval to execute packet sending + * @param aKeepaliveData data to add in keepalive packets + * @return void + */ + void UpdateParamsL( TUint8 aKeepalivePT, + TUint8 aKeepaliveInterval, + const TDesC8& aKeepaliveData ); + + protected: // New functions + + protected: // Functions from CActive + + void RunL(); + + void DoCancel(); + + TInt RunError( TInt aError ); + + private: // New functions + + TBool ResolveActivity(); + + TInt ToggleKeepaliveSending( TBool aIsActive ); + + TInt StartSending(); + + TInt Send(); + + TUint16 Random() const; + + void SendErrorToClient( TInt aError ); + + private: // Constructors + + /** + * C++ default constructor. + */ + CMccRtpKeepalive( MAsyncEventHandler& aEventHandler, + CRtpAPI& aRtpAPI, + TRtpId aRtpSessionId, + TBool aRemoteAddressSet ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( TUint8 aKeepalivePayloadType, + TUint8 aKeepaliveInterval, + const TDesC8& aKeepaliveData ); + + public: // Data + + protected: // Data + + private: // Data + + // Callback for errors + MAsyncEventHandler& iEventHandler; + + // RTP stack API reference + CRtpAPI& iRtpAPI; + + TRtpId iRtpSessionId; + + // Stream id for the RTP Keepalive transmit stream + TRtpId iRtpStreamId; + + RTimer iTimer; + + TMccRtpKeepaliveState iCurrentState; + + TRtpSSRC iSSRC; + + TRtpSequence iSequenceNum; + + TRtpSendHeader iRtpHeaderInfo; + + TInt iKeepaliveInterval; + + HBufC8* iKeepaliveData; + + TTime iInitialTime; + TTime iCurrentTime; + + RPointerArray iUsers; + + TBool iRemoteAddressSet; + + /** + * Boolean indicating if rtp sink exists. + */ + TBool iRtpSinkExists; + + /** + * Rtp sink index in iUsers array. + */ + TUint iRtpSinkIndex; + + /** + * Rtp media clock instance + * Not own. + */ + CMccRtpMediaClock* iRtpMediaClock; + + /** + * Boolean indicating if pre audio keep alive packet is sent + */ + TBool iPreAudioPacketSent; + + + public: // Friend classes + + protected: // Friend classes + + private: // Friend classes + + #ifdef TEST_EUNIT + friend class UT_CMccRtpKeepalive; + #endif + }; + +#endif // MCCRTPKEEPALIVE_H + +// End of File