| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |  This file is a part of JRTPLIB | 
					
						
							|  |  |  |  Copyright (c) 1999-2017 Jori Liesenborgs | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Contact: jori.liesenborgs@gmail.com | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  This library was developed at the Expertise Centre for Digital Media | 
					
						
							|  |  |  |  (http://www.edm.uhasselt.be), a research center of the Hasselt University
 | 
					
						
							|  |  |  |  (http://www.uhasselt.be). The library is based upon work done for
 | 
					
						
							|  |  |  |  my thesis at the School for Knowledge Technology (Belgium/The Netherlands). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  Permission is hereby granted, free of charge, to any person obtaining a | 
					
						
							|  |  |  |  copy of this software and associated documentation files (the "Software"), | 
					
						
							|  |  |  |  to deal in the Software without restriction, including without limitation | 
					
						
							|  |  |  |  the rights to use, copy, modify, merge, publish, distribute, sublicense, | 
					
						
							|  |  |  |  and/or sell copies of the Software, and to permit persons to whom the | 
					
						
							|  |  |  |  Software is furnished to do so, subject to the following conditions: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  The above copyright notice and this permission notice shall be included | 
					
						
							|  |  |  |  in all copies or substantial portions of the Software. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | 
					
						
							|  |  |  |  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
					
						
							|  |  |  |  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | 
					
						
							|  |  |  |  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
					
						
							|  |  |  |  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | 
					
						
							|  |  |  |  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | 
					
						
							|  |  |  |  IN THE SOFTWARE. | 
					
						
							| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * \file rtcppacketbuilder.h | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef RTCPPACKETBUILDER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define RTCPPACKETBUILDER_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "rtpconfig.h"
 | 
					
						
							|  |  |  | #include "rtptypes.h"
 | 
					
						
							|  |  |  | #include "rtperrors.h"
 | 
					
						
							|  |  |  | #include "rtcpsdesinfo.h"
 | 
					
						
							|  |  |  | #include "rtptimeutilities.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-20 13:49:21 +01:00
										 |  |  | #include "export.h"
 | 
					
						
							| 
									
										
										
										
											2018-03-03 20:23:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | namespace qrtplib | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RTPSources; | 
					
						
							|  |  |  | class RTPPacketBuilder; | 
					
						
							|  |  |  | class RTCPScheduler; | 
					
						
							|  |  |  | class RTCPCompoundPacket; | 
					
						
							|  |  |  | class RTCPCompoundPacketBuilder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** This class can be used to build RTCP compound packets, on a higher level than the RTCPCompoundPacketBuilder.
 | 
					
						
							|  |  |  |  *  The class RTCPPacketBuilder can be used to build RTCP compound packets. This class is more high-level | 
					
						
							|  |  |  |  *  than the RTCPCompoundPacketBuilder class: it uses the information of an RTPPacketBuilder instance and of | 
					
						
							|  |  |  |  *  an RTPSources instance to automatically generate the next compound packet which should be sent. It also | 
					
						
							|  |  |  |  *  provides functions to determine when SDES items other than the CNAME item should be sent. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-03-03 20:23:38 +01:00
										 |  |  | class QRTPLIB_API RTCPPacketBuilder | 
					
						
							| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     /** Creates an RTCPPacketBuilder instance.
 | 
					
						
							|  |  |  |      *  Creates an instance which will use the source table \c sources and the RTP packet builder | 
					
						
							|  |  |  |      *  \c rtppackbuilder to determine the information for the next RTCP compound packet. Optionally, | 
					
						
							|  |  |  |      *  the memory manager \c mgr can be installed. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     RTCPPacketBuilder(RTPSources &sources, RTPPacketBuilder &rtppackbuilder); | 
					
						
							|  |  |  |     ~RTCPPacketBuilder(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Initializes the builder.
 | 
					
						
							|  |  |  |      *  Initializes the builder to use the maximum allowed packet size \c maxpacksize, timestamp unit | 
					
						
							|  |  |  |      *  \c timestampunit and the SDES CNAME item specified by \c cname with length \c cnamelen. | 
					
						
							|  |  |  |      *  The timestamp unit is defined as a time interval divided by the timestamp interval corresponding to | 
					
						
							|  |  |  |      *  that interval: for 8000 Hz audio this would be 1/8000. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int Init(std::size_t maxpacksize, double timestampunit, const void *cname, std::size_t cnamelen); | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Cleans up the builder. */ | 
					
						
							|  |  |  |     void Destroy(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the timestamp unit to be used to \c tsunit.
 | 
					
						
							|  |  |  |      *  Sets the timestamp unit to be used to \c tsunit. The timestamp unit is defined as a time interval | 
					
						
							|  |  |  |      *  divided by the timestamp interval corresponding to that interval: for 8000 Hz audio this would | 
					
						
							|  |  |  |      *  be 1/8000. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     int SetTimestampUnit(double tsunit) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         if (tsunit < 0) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_ILLEGALTIMESTAMPUNIT; | 
					
						
							|  |  |  |         timestampunit = tsunit; | 
					
						
							|  |  |  |         return 0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the maximum size allowed size of an RTCP compound packet to \c maxpacksize. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetMaximumPacketSize(std::size_t maxpacksize) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         if (maxpacksize < RTP_MINPACKETSIZE) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_ILLEGALMAXPACKSIZE; | 
					
						
							|  |  |  |         maxpacketsize = maxpacksize; | 
					
						
							|  |  |  |         return 0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** This function allows you to inform RTCP packet builder about the delay between sampling the first
 | 
					
						
							|  |  |  |      *  sample of a packet and sending the packet. | 
					
						
							|  |  |  |      *  This function allows you to inform RTCP packet builder about the delay between sampling the first | 
					
						
							|  |  |  |      *  sample of a packet and sending the packet. This delay is taken into account when calculating the | 
					
						
							|  |  |  |      *  relation between RTP timestamp and wallclock time, used for inter-media synchronization. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     int SetPreTransmissionDelay(const RTPTime &delay) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         transmissiondelay = delay; | 
					
						
							|  |  |  |         return 0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Builds the next RTCP compound packet which should be sent and stores it in \c pack. */ | 
					
						
							|  |  |  |     int BuildNextPacket(RTCPCompoundPacket **pack); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Builds a BYE packet with reason for leaving specified by \c reason and length \c reasonlength.
 | 
					
						
							|  |  |  |      *  Builds a BYE packet with reason for leaving specified by \c reason and length \c reasonlength. If | 
					
						
							|  |  |  |      *  \c useSRifpossible is set to \c true, the RTCP compound packet will start with a sender report if | 
					
						
							|  |  |  |      *  allowed. Otherwise, a receiver report is used. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int BuildBYEPacket(RTCPCompoundPacket **pack, const void *reason, std::size_t reasonlength, bool useSRifpossible = true); | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the RTCP interval for the SDES name item.
 | 
					
						
							|  |  |  |      *  After all possible sources in the source table have been processed, the class will check if other | 
					
						
							|  |  |  |      *  SDES items need to be sent. If \c count is zero or negative, nothing will happen. If \c count | 
					
						
							|  |  |  |      *  is positive, an SDES name item will be added after the sources in the source table have been | 
					
						
							|  |  |  |      *  processed \c count times. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void SetNameInterval(int count) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         interval_name = count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the RTCP interval for the SDES e-mail item.
 | 
					
						
							|  |  |  |      *  After all possible sources in the source table have been processed, the class will check if other | 
					
						
							|  |  |  |      *  SDES items need to be sent. If \c count is zero or negative, nothing will happen. If \c count | 
					
						
							|  |  |  |      *  is positive, an SDES e-mail item will be added after the sources in the source table have been | 
					
						
							|  |  |  |      *  processed \c count times. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void SetEMailInterval(int count) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         interval_email = count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the RTCP interval for the SDES location item.
 | 
					
						
							|  |  |  |      *  After all possible sources in the source table have been processed, the class will check if other | 
					
						
							|  |  |  |      *  SDES items need to be sent. If \c count is zero or negative, nothing will happen. If \c count | 
					
						
							|  |  |  |      *  is positive, an SDES location item will be added after the sources in the source table have been | 
					
						
							|  |  |  |      *  processed \c count times. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void SetLocationInterval(int count) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         interval_location = count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the RTCP interval for the SDES phone item.
 | 
					
						
							|  |  |  |      *  After all possible sources in the source table have been processed, the class will check if other | 
					
						
							|  |  |  |      *  SDES items need to be sent. If \c count is zero or negative, nothing will happen. If \c count | 
					
						
							|  |  |  |      *  is positive, an SDES phone item will be added after the sources in the source table have been | 
					
						
							|  |  |  |      *  processed \c count times. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void SetPhoneInterval(int count) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         interval_phone = count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the RTCP interval for the SDES tool item.
 | 
					
						
							|  |  |  |      *  After all possible sources in the source table have been processed, the class will check if other | 
					
						
							|  |  |  |      *  SDES items need to be sent. If \c count is zero or negative, nothing will happen. If \c count | 
					
						
							|  |  |  |      *  is positive, an SDES tool item will be added after the sources in the source table have been | 
					
						
							|  |  |  |      *  processed \c count times. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void SetToolInterval(int count) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         interval_tool = count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the RTCP interval for the SDES note item.
 | 
					
						
							|  |  |  |      *  After all possible sources in the source table have been processed, the class will check if other | 
					
						
							|  |  |  |      *  SDES items need to be sent. If \c count is zero or negative, nothing will happen. If \c count | 
					
						
							|  |  |  |      *  is positive, an SDES note item will be added after the sources in the source table have been | 
					
						
							|  |  |  |      *  processed \c count times. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     void SetNoteInterval(int count) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         interval_note = count; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the SDES name item for the local participant to the value \c s with length \c len. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetLocalName(const void *s, std::size_t len) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         return ownsdesinfo.SetName((const uint8_t *) s, len); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the SDES e-mail item for the local participant to the value \c s with length \c len. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetLocalEMail(const void *s, std::size_t len) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         return ownsdesinfo.SetEMail((const uint8_t *) s, len); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the SDES location item for the local participant to the value \c s with length \c len. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetLocalLocation(const void *s, std::size_t len) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         return ownsdesinfo.SetLocation((const uint8_t *) s, len); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the SDES phone item for the local participant to the value \c s with length \c len. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetLocalPhone(const void *s, std::size_t len) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         return ownsdesinfo.SetPhone((const uint8_t *) s, len); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the SDES tool item for the local participant to the value \c s with length \c len. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetLocalTool(const void *s, std::size_t len) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         return ownsdesinfo.SetTool((const uint8_t *) s, len); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Sets the SDES note item for the local participant to the value \c s with length \c len. */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     int SetLocalNote(const void *s, std::size_t len) | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return ERR_RTP_RTCPPACKETBUILDER_NOTINIT; | 
					
						
							|  |  |  |         return ownsdesinfo.SetNote((const uint8_t *) s, len); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** Returns the own CNAME item with length \c len */ | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     uint8_t *GetLocalCNAME(std::size_t *len) const | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     { | 
					
						
							|  |  |  |         if (!init) | 
					
						
							|  |  |  |             return 0; | 
					
						
							|  |  |  |         return ownsdesinfo.GetCNAME(len); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     void ClearAllSourceFlags(); | 
					
						
							|  |  |  |     int FillInReportBlocks(RTCPCompoundPacketBuilder *pack, const RTPTime &curtime, int maxcount, bool *full, int *added, int *skipped, bool *atendoflist); | 
					
						
							|  |  |  |     int FillInSDES(RTCPCompoundPacketBuilder *pack, bool *full, bool *processedall, int *added); | 
					
						
							|  |  |  |     void ClearAllSDESFlags(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     RTPSources &sources; | 
					
						
							|  |  |  |     RTPPacketBuilder &rtppacketbuilder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool init; | 
					
						
							| 
									
										
										
										
											2018-02-28 13:31:44 +01:00
										 |  |  |     std::size_t maxpacketsize; | 
					
						
							| 
									
										
										
										
											2018-02-27 23:05:46 +01:00
										 |  |  |     double timestampunit; | 
					
						
							|  |  |  |     bool firstpacket; | 
					
						
							|  |  |  |     RTPTime prevbuildtime, transmissiondelay; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class RTCPSDESInfoInternal: public RTCPSDESInfo | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     public: | 
					
						
							|  |  |  |         RTCPSDESInfoInternal() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             ClearFlags(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void ClearFlags() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             pname = false; | 
					
						
							|  |  |  |             pemail = false; | 
					
						
							|  |  |  |             plocation = false; | 
					
						
							|  |  |  |             pphone = false; | 
					
						
							|  |  |  |             ptool = false; | 
					
						
							|  |  |  |             pnote = false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ProcessedName() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return pname; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ProcessedEMail() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return pemail; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ProcessedLocation() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return plocation; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ProcessedPhone() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return pphone; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ProcessedTool() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return ptool; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         bool ProcessedNote() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return pnote; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void SetProcessedName(bool v) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             pname = v; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void SetProcessedEMail(bool v) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             pemail = v; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void SetProcessedLocation(bool v) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             plocation = v; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void SetProcessedPhone(bool v) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             pphone = v; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void SetProcessedTool(bool v) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             ptool = v; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         void SetProcessedNote(bool v) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             pnote = v; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     private: | 
					
						
							|  |  |  |         bool pname, pemail, plocation, pphone, ptool, pnote; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     RTCPSDESInfoInternal ownsdesinfo; | 
					
						
							|  |  |  |     int interval_name, interval_email, interval_location; | 
					
						
							|  |  |  |     int interval_phone, interval_tool, interval_note; | 
					
						
							|  |  |  |     bool doname, doemail, doloc, dophone, dotool, donote; | 
					
						
							|  |  |  |     bool processingsdes; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     int sdesbuildcount; | 
					
						
							| 
									
										
										
										
											2018-02-27 01:35:16 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // end namespace
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // RTCPPACKETBUILDER_H
 | 
					
						
							|  |  |  | 
 |