JRTPLIB  3.10.0
Public Member Functions | Protected Member Functions | List of all members
jrtplib::RTPSecureSession Class Reference

RTPSession derived class that serves as a base class for an SRTP implementation. More...

#include <rtpsecuresession.h>

Inheritance diagram for jrtplib::RTPSecureSession:
Inheritance graph
[legend]
Collaboration diagram for jrtplib::RTPSecureSession:
Collaboration graph
[legend]

Public Member Functions

 RTPSecureSession (RTPRandom *rnd=0, RTPMemoryManager *mgr=0)
 Constructs an RTPSecureSession instance, see RTPSession::RTPSession for more information about the parameters. More...
 
- Public Member Functions inherited from jrtplib::RTPSession
 RTPSession (RTPRandom *rnd=0, RTPMemoryManager *mgr=0)
 Constructs an RTPSession instance, optionally using a specific instance of a random number generator, and optionally installing a memory manager. More...
 
int Create (const RTPSessionParams &sessparams, const RTPTransmissionParams *transparams=0, RTPTransmitter::TransmissionProtocol proto=RTPTransmitter::IPv4UDPProto)
 Creates an RTP session. More...
 
int Create (const RTPSessionParams &sessparams, RTPTransmitter *transmitter)
 Creates an RTP session using transmitter as transmission component. More...
 
void Destroy ()
 Leaves the session without sending a BYE packet. More...
 
void BYEDestroy (const RTPTime &maxwaittime, const void *reason, size_t reasonlength)
 Sends a BYE packet and leaves the session. More...
 
bool IsActive ()
 Returns whether the session has been created or not. More...
 
uint32_t GetLocalSSRC ()
 Returns our own SSRC. More...
 
int AddDestination (const RTPAddress &addr)
 Adds addr to the list of destinations. More...
 
int DeleteDestination (const RTPAddress &addr)
 Deletes addr from the list of destinations. More...
 
void ClearDestinations ()
 Clears the list of destinations. More...
 
bool SupportsMulticasting ()
 Returns true if multicasting is supported. More...
 
int JoinMulticastGroup (const RTPAddress &addr)
 Joins the multicast group specified by addr. More...
 
int LeaveMulticastGroup (const RTPAddress &addr)
 Leaves the multicast group specified by addr. More...
 
void LeaveAllMulticastGroups ()
 Leaves all multicast groups. More...
 
int SendPacket (const void *data, size_t len)
 Sends the RTP packet with payload data which has length len. More...
 
int SendPacket (const void *data, size_t len, uint8_t pt, bool mark, uint32_t timestampinc)
 Sends the RTP packet with payload data which has length len. More...
 
int SendPacketEx (const void *data, size_t len, uint16_t hdrextID, const void *hdrextdata, size_t numhdrextwords)
 Sends the RTP packet with payload data which has length len. More...
 
int SendPacketEx (const void *data, size_t len, uint8_t pt, bool mark, uint32_t timestampinc, uint16_t hdrextID, const void *hdrextdata, size_t numhdrextwords)
 Sends the RTP packet with payload data which has length len. More...
 
int SendRTCPAPPPacket (uint8_t subtype, const uint8_t name[4], const void *appdata, size_t appdatalen)
 If sending of RTCP APP packets was enabled at compile time, this function creates a compound packet containing an RTCP APP packet and sends it immediately. More...
 
int SendUnknownPacket (bool sr, uint8_t payload_type, uint8_t subtype, const void *data, size_t len)
 Tries to send an Unknown packet immediately. More...
 
int SendRawData (const void *data, size_t len, bool usertpchannel)
 With this function raw data can be sent directly over the RTP or RTCP channel (if they are different); the data is not passed through the RTPSession::OnChangeRTPOrRTCPData function. More...
 
int SetDefaultPayloadType (uint8_t pt)
 Sets the default payload type for RTP packets to pt. More...
 
int SetDefaultMark (bool m)
 Sets the default marker for RTP packets to m. More...
 
int SetDefaultTimestampIncrement (uint32_t timestampinc)
 Sets the default value to increment the timestamp with to timestampinc. More...
 
int IncrementTimestamp (uint32_t inc)
 This function increments the timestamp with the amount given by inc. More...
 
int IncrementTimestampDefault ()
 This function increments the timestamp with the amount given set by the SetDefaultTimestampIncrement member function. More...
 
int SetPreTransmissionDelay (const RTPTime &delay)
 This function allows you to inform the library about the delay between sampling the first sample of a packet and sending the packet. More...
 
RTPTransmissionInfoGetTransmissionInfo ()
 This function returns an instance of a subclass of RTPTransmissionInfo which will give some additional information about the transmitter (a list of local IP addresses for example). More...
 
void DeleteTransmissionInfo (RTPTransmissionInfo *inf)
 Frees the memory used by the transmission information inf. More...
 
int Poll ()
 If you're not using the poll thread, this function must be called regularly to process incoming data and to send RTCP data when necessary.
 
int WaitForIncomingData (const RTPTime &delay, bool *dataavailable=0)
 Waits at most a time delay until incoming data has been detected. More...
 
int AbortWait ()
 If the previous function has been called, this one aborts the waiting (only works when you're not using the poll thread).
 
RTPTime GetRTCPDelay ()
 Returns the time interval after which an RTCP compound packet may have to be sent (only works when you're not using the poll thread.
 
int BeginDataAccess ()
 The following member functions (till EndDataAccess}) need to be accessed between a call to BeginDataAccess and EndDataAccess. More...
 
bool GotoFirstSource ()
 Starts the iteration over the participants by going to the first member in the table. More...
 
bool GotoNextSource ()
 Sets the current source to be the next source in the table. More...
 
bool GotoPreviousSource ()
 Sets the current source to be the previous source in the table. More...
 
bool GotoFirstSourceWithData ()
 Sets the current source to be the first source in the table which has RTPPacket instances that we haven't extracted yet. More...
 
bool GotoNextSourceWithData ()
 Sets the current source to be the next source in the table which has RTPPacket instances that we haven't extracted yet. More...
 
bool GotoPreviousSourceWithData ()
 Sets the current source to be the previous source in the table which has RTPPacket instances that we haven't extracted yet. More...
 
RTPSourceDataGetCurrentSourceInfo ()
 Returns the RTPSourceData instance for the currently selected participant. More...
 
RTPSourceDataGetSourceInfo (uint32_t ssrc)
 Returns the RTPSourceData instance for the participant identified by ssrc, or NULL if no such entry exists.
 
RTPPacketGetNextPacket ()
 Extracts the next packet from the received packets queue of the current participant, or NULL if no more packets are available. More...
 
uint16_t GetNextSequenceNumber () const
 Returns the Sequence Number that will be used in the next SendPacket function call. More...
 
void DeletePacket (RTPPacket *p)
 Frees the memory used by p. More...
 
int EndDataAccess ()
 See BeginDataAccess. More...
 
int SetReceiveMode (RTPTransmitter::ReceiveMode m)
 Sets the receive mode to m. More...
 
int AddToIgnoreList (const RTPAddress &addr)
 Adds addr to the list of addresses to ignore. More...
 
int DeleteFromIgnoreList (const RTPAddress &addr)
 Deletes addr from the list of addresses to ignore. More...
 
void ClearIgnoreList ()
 Clears the list of addresses to ignore. More...
 
int AddToAcceptList (const RTPAddress &addr)
 Adds addr to the list of addresses to accept. More...
 
int DeleteFromAcceptList (const RTPAddress &addr)
 Deletes addr from the list of addresses to accept. More...
 
void ClearAcceptList ()
 Clears the list of addresses to accept. More...
 
int SetMaximumPacketSize (size_t s)
 Sets the maximum allowed packet size to s. More...
 
int SetSessionBandwidth (double bw)
 Sets the session bandwidth to bw, which is specified in bytes per second. More...
 
int SetTimestampUnit (double u)
 Sets the timestamp unit for our own data. More...
 
void SetNameInterval (int count)
 Sets the RTCP interval for the SDES name item. More...
 
void SetEMailInterval (int count)
 Sets the RTCP interval for the SDES e-mail item. More...
 
void SetLocationInterval (int count)
 Sets the RTCP interval for the SDES location item. More...
 
void SetPhoneInterval (int count)
 Sets the RTCP interval for the SDES phone item. More...
 
void SetToolInterval (int count)
 Sets the RTCP interval for the SDES tool item. More...
 
void SetNoteInterval (int count)
 Sets the RTCP interval for the SDES note item. More...
 
int SetLocalName (const void *s, size_t len)
 Sets the SDES name item for the local participant to the value s with length len. More...
 
int SetLocalEMail (const void *s, size_t len)
 Sets the SDES e-mail item for the local participant to the value s with length len. More...
 
int SetLocalLocation (const void *s, size_t len)
 Sets the SDES location item for the local participant to the value s with length len. More...
 
int SetLocalPhone (const void *s, size_t len)
 Sets the SDES phone item for the local participant to the value s with length len. More...
 
int SetLocalTool (const void *s, size_t len)
 Sets the SDES tool item for the local participant to the value s with length len. More...
 
int SetLocalNote (const void *s, size_t len)
 Sets the SDES note item for the local participant to the value s with length len. More...
 

Protected Member Functions

int InitializeSRTPContext ()
 Initializes the SRTP context, in case of an error it may be useful to inspect RTPSecureSession::GetLastLibSRTPError. More...
 
srtp_ctx_t * LockSRTPContext ()
 This function locks a mutex and returns the libsrtp context that was created in RTPSecureSession::InitializeSRTPContext, so that you can further use it to specify encryption parameters for various sources; note that you must release the context again after use with the RTPSecureSession::UnlockSRTPContext function. More...
 
int UnlockSRTPContext ()
 Releases the lock on the SRTP context that was obtained in RTPSecureSession::LockSRTPContext. More...
 
int GetLastLibSRTPError ()
 Returns (and clears) the last error that was encountered when using a libsrtp based function. More...
 
virtual void OnErrorChangeIncomingData (int errcode, int libsrtperrorcode)
 In case the reimplementation of OnChangeIncomingData (which may take place in a background thread) encounters an error, this member function will be called; implement it in a derived class to receive notification of this. More...
 
- Protected Member Functions inherited from jrtplib::RTPSession
virtual RTPTransmitterNewUserDefinedTransmitter ()
 Allocate a user defined transmitter. More...
 
virtual void OnRTPPacket (RTPPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress)
 Is called when an incoming RTP packet is about to be processed. More...
 
virtual void OnRTCPCompoundPacket (RTCPCompoundPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress)
 Is called when an incoming RTCP packet is about to be processed. More...
 
virtual void OnSSRCCollision (RTPSourceData *srcdat, const RTPAddress *senderaddress, bool isrtp)
 Is called when an SSRC collision was detected. More...
 
virtual void OnCNAMECollision (RTPSourceData *srcdat, const RTPAddress *senderaddress, const uint8_t *cname, size_t cnamelength)
 Is called when another CNAME was received than the one already present for source srcdat. More...
 
virtual void OnNewSource (RTPSourceData *srcdat)
 Is called when a new entry srcdat is added to the source table. More...
 
virtual void OnRemoveSource (RTPSourceData *srcdat)
 Is called when the entry srcdat is about to be deleted from the source table. More...
 
virtual void OnTimeout (RTPSourceData *srcdat)
 Is called when participant srcdat is timed out. More...
 
virtual void OnBYETimeout (RTPSourceData *srcdat)
 Is called when participant srcdat is timed after having sent a BYE packet. More...
 
virtual void OnAPPPacket (RTCPAPPPacket *apppacket, const RTPTime &receivetime, const RTPAddress *senderaddress)
 Is called when an RTCP APP packet apppacket has been received at time receivetime from address senderaddress.
 
virtual void OnUnknownPacketType (RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
 Is called when an unknown RTCP packet type was detected. More...
 
virtual void OnUnknownPacketFormat (RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
 Is called when an unknown packet format for a known packet type was detected. More...
 
virtual void OnNoteTimeout (RTPSourceData *srcdat)
 Is called when the SDES NOTE item for source srcdat has been timed out. More...
 
virtual void OnRTCPSenderReport (RTPSourceData *srcdat)
 Is called when an RTCP sender report has been processed for this source. More...
 
virtual void OnRTCPReceiverReport (RTPSourceData *srcdat)
 Is called when an RTCP receiver report has been processed for this source. More...
 
virtual void OnRTCPSDESItem (RTPSourceData *srcdat, RTCPSDESPacket::ItemType t, const void *itemdata, size_t itemlength)
 Is called when a specific SDES item was received for this source. More...
 
virtual void OnRTCPSDESPrivateItem (RTPSourceData *srcdat, const void *prefixdata, size_t prefixlen, const void *valuedata, size_t valuelen)
 Is called when a specific SDES item of 'private' type was received for this source. More...
 
virtual void OnBYEPacket (RTPSourceData *srcdat)
 Is called when a BYE packet has been processed for source srcdat. More...
 
virtual void OnSendRTCPCompoundPacket (RTCPCompoundPacket *pack)
 Is called when an RTCP compound packet has just been sent (useful to inspect outgoing RTCP data). More...
 
virtual void OnPollThreadError (int errcode)
 Is called when error errcode was detected in the poll thread. More...
 
virtual void OnPollThreadStep ()
 Is called each time the poll thread loops. More...
 
virtual void OnPollThreadStart (bool &stop)
 Is called when the poll thread is started. More...
 
virtual void OnPollThreadStop ()
 Is called when the poll thread is going to stop. More...
 
void SetChangeOutgoingData (bool change)
 If this is set to true, outgoing data will be passed through RTPSession::OnChangeRTPOrRTCPData and RTPSession::OnSentRTPOrRTCPData, allowing you to modify the data (e.g. More...
 
void SetChangeIncomingData (bool change)
 If this is set to true, incoming data will be passed through RTPSession::OnChangeIncomingData, allowing you to modify the data (e.g. More...
 
virtual void OnValidatedRTPPacket (RTPSourceData *srcdat, RTPPacket *rtppack, bool isonprobation, bool *ispackethandled)
 Allows you to use an RTP packet from the specified source directly. More...
 

Detailed Description

This is an RTPSession derived class that serves as a base class for an SRTP implementation. The class sets the RTPSession::SetChangeIncomingData and RTPSession::SetChangeOutgoingData flags, and implements RTPSession::OnChangeIncomingData, RTPSession::OnChangeRTPOrRTCPData and RTPSession::OnSentRTPOrRTCPData so that encryption and decryption is applied to packets. The encryption and decryption will be done using libsrtp, which must be available at compile time.

Your derived class should call RTPSecureSession::InitializeSRTPContext to initialize a context struct of libsrtp. When this succeeds, the context can be obtained and used with the RTPSecureSession::LockSRTPContext function, which also locks a mutex if thread support was available. After you're done using the context yourself (to set encryption parameters for SSRCs), you must release it again using RTPSecureSession::UnlockSRTPContext.

See example7.cpp for an example of how to use this class.

Constructor & Destructor Documentation

jrtplib::RTPSecureSession::RTPSecureSession ( RTPRandom rnd = 0,
RTPMemoryManager mgr = 0 
)

Member Function Documentation

int jrtplib::RTPSecureSession::GetLastLibSRTPError ( )
protected
int jrtplib::RTPSecureSession::InitializeSRTPContext ( )
protected
srtp_ctx_t* jrtplib::RTPSecureSession::LockSRTPContext ( )
protected
virtual void jrtplib::RTPSecureSession::OnErrorChangeIncomingData ( int  errcode,
int  libsrtperrorcode 
)
inlineprotectedvirtual
int jrtplib::RTPSecureSession::UnlockSRTPContext ( )
protected

The documentation for this class was generated from the following file: