diff -r 000000000000 -r 307788aac0a8 ipappprotocols_plat/srtp_api/inc/srtpstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipappprotocols_plat/srtp_api/inc/srtpstream.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,198 @@ +/* +* Copyright (c) 2004 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: Represents an SRTP stream. +* +*/ + + + + +#ifndef __SRTP_STREAM_H__ +#define __SRTP_STREAM_H__ + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CSRTPSession; +class CSRTPCryptoContext; +class MSRTPReKeyingObserver; +class CSRTPCryptoHandlerSRTP; +class CSRTPCryptoHandlerSRTCP; + +/** +* Represents an SRTP stream. +*/ +class CSRTPStream : public CBase + { + public: + + /** + * iStreamOffset, List offset. + */ + static const TInt iStreamOffset; + + /** + * iStreamLink, Link to list. + */ + TSglQueLink iStreamLink; + + public: + + /** + * Set roll-over counter value. + * RFC 3711 3.3.1 ROC() can not be reset to 0 after Re-Key + * @param aROC The new ROC value. + * @return void + */ + IMPORT_C void SetROC( TUint32 aROC ); + + /** + * Get roll-over counter value. + * @return current ROC value. + */ + IMPORT_C TUint32 ROC( ) const; + + /** + * Get SSRC + * @return SSRC. + */ + IMPORT_C TUint SSRC( ) const; + + /** + * Set SSRC value if the stream's SSRC is 0 as late binding + * @param aSSRC The new SSRC value. + * @return void + */ + void SetSSRC( const TUint aSSRC ); + + /** + * Get cryptographic context associated for this stream + * or the one associated for the session + * @return CSRTPCryptoContext + */ + CSRTPCryptoContext& GetCryptoContext(); + + /** + * Call for Rekey + * @return void + */ + void ReKeyNeeded(); + + + /** + * Call for KeyExpired + * @return void + */ + void KeyExpired(); + + /** + * Destructor + */ + ~CSRTPStream(); + + /** + * Tell stream type is InStream or OutStream + * @return TBool + */ + IMPORT_C TBool StreamType(); + + /** + * Check if crypto context has been set + * @return ETrue if crypto context is existed, otherwise EFalse + */ + TBool IsContextSet(); + + /** + * Delete the existed crypto context and re-initial the states + * @param None + * @leave KErrNone if success, system-wide error code otherwise + * @return void + */ + virtual void UpdateCryptoAndStatesL()=0; + + protected: //methods + CSRTPStream (CSRTPSession& aSession, + const TUint aSSRC, + TBool aStreamType ); + + CSRTPStream (CSRTPSession& aSession, + TUint aSSRC, + CSRTPCryptoContext* aCon, + MSRTPReKeyingObserver& aObs, + TBool aStreamType ); + + CSRTPStream (CSRTPSession& aSession, + TBool aStreamType); + + CSRTPStream (CSRTPSession& aSession, + CSRTPCryptoContext* aCon, + MSRTPReKeyingObserver& aObs, + TBool aStreamType ); + + CSRTPStream (CSRTPSession& aSession, + TUint aSSRC, + MSRTPReKeyingObserver& aObs, + TBool aStreamType ); + CSRTPStream (CSRTPSession& aSession, + MSRTPReKeyingObserver& aObs, + TBool aStreamType ); + + /** + * Create RTP crypto handler + * @return void + */ + void CreateCryptoHandlerSRTPL(); + + /** + * Create RTCP crypto handler + * @return void + */ + void CreateCryptoHandlerSRTCPL(); + + + /** + * Delete the existed crypto handler and create a new one + * @return void + */ + void UpdateCryptoHandlerL(); + + + protected: //data + CSRTPSession& iSession; // access to session + CSRTPCryptoContext* iContext; // crypto context + MSRTPReKeyingObserver* iObserver; // observer (application) + TBool iStrmSpecificCrypto; // do we have stream or session- + // spesific context + CSRTPCryptoHandlerSRTP* iHandlerRTP; // crypto handling class for RTP + CSRTPCryptoHandlerSRTCP* iHandlerRTCP; // crypto handling class for RTCP + TUint32 iROC; // unsigned 32 bit ROC + TUint iSSRC; // SSRC + TBool iIsStreamInType; + TBool iRekey; + + private: + #ifdef EUNIT_TESTING + friend class UT_CSRTPCryptoHandlerSRTP; + friend class UT_CSRTPCryptoHandlerSRTCP; + friend class UT_CSRTPCryptoHandler; + friend class UT_CSRTPStreamIn; + friend class UT_CSRTPStreamOut; + friend class UT_CSRTPStream; + friend class UT_CSRTPCryptoContext; + #endif + }; + +#endif // __SRTP_STREAM_H__