rtp/srtpstack/inc/srtppacket.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rtp/srtpstack/inc/srtppacket.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,186 @@
+/*
+* 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:    General SRTP packet class (RTP/SRTP/RTCP/SRTCP)
+*
+*/
+
+
+
+
+#ifndef __SRTP_PACKET_H__
+#define __SRTP_PACKET_H__
+
+// INCLUDES
+#include <in_sock.h>
+// FORWARD DECLARATIONS
+class CSRTPCryptoHandler;
+
+/**
+* Contains general packet routines
+*/
+class CSRTPPacket : public CBase
+    {
+    public:
+        /**
+        * Get payload entry. Here the "payload" denotes the
+        * encrypted portion (incl. RTCP/SRTCP).
+        * @return pointer reference to the encrypted portion. 
+        */        
+        TPtrC8 Payload();    
+        
+        /**
+        * Get header length.
+        * @return length of the header.
+        */        
+        TUint HeaderLength();
+
+        /**
+        * Get payload length (== length of the encrypted portion).
+        * @return length of the payload.
+        */        
+        TUint PayloadLength();
+                    
+        /**
+        * Get header and encrypted portion, excluding possible 
+        * MKI and authentication tag.
+        * @return header and encrypted portion.
+        */                            
+        TPtrC8 HeaderAndPayload();      
+                
+        /**
+        * Get the authentication portion for recv stream data
+        * For RTP this gets header and payload as authentication portion
+        * For RTCP it gets payload + SRTCP index
+        * @param rtcp if it is rtcp packet
+        * @leave KErrNone if success, system-wide error code otherwise        
+        * @return payload concatenated with ROC.
+        */                            
+        HBufC8* Get_Concatenated_MDataL(TBool rtcp); 
+        
+        /**
+        * Create a new packet by allocating given size
+        * and by copying header and given payload.
+        * This can be any packet: RTP/SRTP/RTCP/SRTCP
+        * @param aPacketSize  new packet size.
+        * @param aPayloadPtr   pointer to the payload to be copied.
+        * @leave KErrNone if success, system-wide error code otherwise        
+        * @return new packet with header and payload.
+        */                            
+        HBufC8* CopyHeaderAndPayloadL(TUint aPacketSize,
+                                       TUint8* aPayloadPtr);
+               
+        ~CSRTPPacket();                
+
+
+        /**
+        * virtual function for creating decrypted packet,
+        * implemented in CSRTPPacketSRTP/CSRTPPacketSRTCP,
+        */                            
+        virtual HBufC8* CreateDecryptedPacketL(TUint8* aDecryptedPayloadPtr);
+        
+        /**
+        * virtual function for creating encrypted packet,
+        * implemented in CSRTPPacketRTP/CSRTPPacketRTCP,
+        */                            
+        virtual HBufC8* CreateEncryptedPacketL(TUint8* aEncryptedPayloadPtr);        
+        
+        /**
+        * virtual function for getting the authentication tag,
+        * implemented in CSRTPPacketSRTP/CSRTPPacketSRTCP
+        */                                    
+        virtual TPtrC8 AuthenticationTag();
+        
+        /**
+        * virtual function for getting the sequence number,
+        * implemented in CSRTPPacketRTP
+        */                                    
+        virtual TUint16 SequenceNumber(); 
+        
+        /**
+        * virtual function for setting the packet index value,
+        * implemented in CSRTPPacketRTP
+        */                                    
+        virtual void SetPacketIndex(TUint64 aPacketIndex);
+        
+        /**
+        * virtual function for getting the MKI value,
+        * implemented in CSRTPPacketSRTP/CSRTPPacketSRTCP
+        */                                            
+        virtual TPtrC8 MasterKeyIdentifier();
+        
+        /**
+        * virtual function for counting the sender-side packet index
+        * implemented in CSRTPPacketRTP
+        */                                            
+        virtual void CountSenderPacketIndex(); 
+         
+        /**
+        * virtual function for getting the packet index value,
+        * implemented in CSRTPPacketRTP
+        */                                    
+        virtual TUint64 PacketIndex();        
+                
+
+		/**
+        * Get Sender Roll-Over Counter from RTP/SRTP packets defined by RCC mode
+        * @return 32 bit unsigned integer 
+        */                              
+        virtual TUint32 GetSenderROC(); 
+    protected: //methods
+
+        
+        /*
+        * Update header length member
+        * @leave KErrNone if success, system-wide error code otherwise        
+        * @return void
+        */
+        void UpdatePayloadLengthL();
+        
+        /*
+        * Update payload member in this class
+        * @leave KErrNone if success, system-wide error code otherwise        
+        * @return void
+        */
+        void UpdatePayload();        
+
+        /*
+        * Read sequence number. 
+        * @return 16 bit sequence number.
+        */
+        TUint16 GetSequenceNumber();
+
+        void ConstructL();
+
+        CSRTPPacket (const TDesC8& aPacket,
+                      CSRTPCryptoHandler& aHandler);
+                                            
+            
+    protected: //data
+        TPtrC8                        iPacket;  // packet
+    	const TUint8                  *iDataP;  // pointer to packet
+        CSRTPCryptoHandler&           iHandler; // crypto handler
+        TPtrC8                        iPayload; // payload (encrypted portion)
+        TUint                         iHeaderLength; // header length
+        TUint                         iPayloadLength; // payload length
+	
+	private:
+    #ifdef EUNIT_TESTING
+        friend class UT_CSRTPCryptoHandlerSRTP;
+        
+    #endif 
+    
+        
+    };
+
+#endif // __SRTP_PACKET_H__