--- /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 <e32def.h>
+#include <e32base.h>
+
+// 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__