Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 56ebf73a8cc21535297a85df4640d63b > files > 174

libccrtp0.7-0.7.2-1mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>rtpext.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.10 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindex" href="examples.html">Examples</a> &nbsp; </center>
<hr><h1>rtpext.h</h1><a href="rtpext_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">// Copyright (C) 1999-2001 Open Source Telecom Corporation.</font>
00002 <font class="comment">//  </font>
00003 <font class="comment">// This program is free software; you can redistribute it and/or modify</font>
00004 <font class="comment">// it under the terms of the GNU General Public License as published by</font>
00005 <font class="comment">// the Free Software Foundation; either version 2 of the License, or</font>
00006 <font class="comment">// (at your option) any later version.</font>
00007 <font class="comment">// </font>
00008 <font class="comment">// This program is distributed in the hope that it will be useful,</font>
00009 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font>
00010 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</font>
00011 <font class="comment">// GNU General Public License for more details.</font>
00012 <font class="comment">// </font>
00013 <font class="comment">// You should have received a copy of the GNU General Public License</font>
00014 <font class="comment">// along with this program; if not, write to the Free Software </font>
00015 <font class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</font>
00016 <font class="comment">// </font>
00017 <font class="comment">// As a special exception to the GNU General Public License, permission is </font>
00018 <font class="comment">// granted for additional uses of the text contained in its release </font>
00019 <font class="comment">// of ccRTP.</font>
00020 <font class="comment">// </font>
00021 <font class="comment">// The exception is that, if you link the ccRTP library with other</font>
00022 <font class="comment">// files to produce an executable, this does not by itself cause the</font>
00023 <font class="comment">// resulting executable to be covered by the GNU General Public License.</font>
00024 <font class="comment">// Your use of that executable is in no way restricted on account of</font>
00025 <font class="comment">// linking the ccRTP library code into it.</font>
00026 <font class="comment">// </font>
00027 <font class="comment">// This exception does not however invalidate any other reasons why</font>
00028 <font class="comment">// the executable file might be covered by the GNU General Public License.</font>
00029 <font class="comment">// </font>
00030 <font class="comment">// This exception applies only to the code released under the </font>
00031 <font class="comment">// name ccRTP.  If you copy code from other releases into a copy of</font>
00032 <font class="comment">// ccRTP, as the General Public License permits, the exception does</font>
00033 <font class="comment">// not apply to the code that you add in this way.  To avoid misleading</font>
00034 <font class="comment">// anyone as to the status of such modified files, you must delete</font>
00035 <font class="comment">// this exception notice from them.</font>
00036 <font class="comment">// </font>
00037 <font class="comment">// If you write modifications of your own for ccRTP, it is your choice</font>
00038 <font class="comment">// whether to permit this exception to apply to your modifications.</font>
00039 <font class="comment">// If you do not wish that, delete this exception notice.  </font>
00040 
00049 <font class="preprocessor">#ifndef  CCXX_RTPEXT_H</font>
00050 <font class="preprocessor"></font><font class="preprocessor">#   define   CCXX_RTPEXT_H</font>
00051 <font class="preprocessor"></font>
00052 <font class="preprocessor">#ifdef  CCXX_NAMESPACES</font>
00053 <font class="preprocessor"></font><font class="keyword">namespace </font>ost {
00054 <font class="preprocessor">#endif</font>
00055 <font class="preprocessor"></font>
00065 <font class="keyword">class </font>CCXX_CLASS_EXPORT <a class="code" href="class_r_t_p_packet.html">RTPPacket</a>
00066 {
00067 <font class="keyword">protected</font>:
00068 <font class="preprocessor">#pragma pack(1)</font>
00069 <font class="preprocessor"></font>
00081         <font class="keyword">struct </font>RTPFixedHeader
00082         {
00083 <font class="preprocessor">#if     __BYTE_ORDER == __BIG_ENDIAN</font>
00084 <font class="preprocessor"></font>
<a name="l00085"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m0">00085</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
<a name="l00086"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m1">00086</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
<a name="l00087"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m2">00087</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> extension:1;     
<a name="l00088"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m3">00088</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> cc:4;            
<a name="l00089"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m4">00089</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> marker:1;        
<a name="l00090"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m5">00090</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> payload:7;       
00091 <font class="preprocessor">#else</font>
00092 <font class="preprocessor"></font>
00093                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> cc:4;            
00094                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> extension:1;     
00095                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
00096                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
00097                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> payload:7;       
00098                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> marker:1;        
00099 <font class="preprocessor">#endif</font>
<a name="l00100"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m6">00100</a> <font class="preprocessor"></font>                uint16 sequence;       
<a name="l00101"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m7">00101</a>                 uint32 timestamp;       
<a name="l00102"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_fixed_header.html#m8">00102</a>                 uint32 sources[1];      
00103         };
00104         
00112         <font class="keyword">typedef</font> <font class="keyword">struct</font>
00113 <font class="keyword">        </font>{
<a name="l00114"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_header_ext.html#m0">00114</a>                 uint16 undefined; 
<a name="l00115"></a><a class="code" href="struct_r_t_p_packet_1_1_r_t_p_header_ext.html#m1">00115</a>                 uint16 length;    
00116         }       RTPHeaderExt;
00117 <font class="preprocessor">#pragma pack()</font>
00118 <font class="preprocessor"></font>
00119         <font class="comment">// size of the header, including contributing sources and extensions</font>
<a name="l00120"></a><a class="code" href="class_r_t_p_packet.html#n0">00120</a>         uint32 hdrsize;
00121         <font class="comment">// note: payload (not full packet) size.</font>
<a name="l00122"></a><a class="code" href="class_r_t_p_packet.html#n1">00122</a>         uint32 payload_size;
00123         <font class="comment">// total length, including header, extension, payload and padding</font>
<a name="l00124"></a><a class="code" href="class_r_t_p_packet.html#n2">00124</a>         uint32 total;
00125         <font class="comment">// packet in memory</font>
<a name="l00126"></a><a class="code" href="class_r_t_p_packet.html#n3">00126</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* buffer;
00127         <font class="comment">// whether the object was contructed with duplicated = true</font>
<a name="l00128"></a><a class="code" href="class_r_t_p_packet.html#n4">00128</a>         <font class="keywordtype">bool</font> duplicated;
00129 
00130 <font class="keyword">public</font>:
00142         RTPPacket(<font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> block, size_t len, 
00143                   <font class="keywordtype">bool</font> duplicate = <font class="keyword">false</font>);
00144 
00153         RTPPacket(size_t hdrlen, size_t plen);
00154 
00158         <font class="comment">//      virtual</font>
<a name="l00159"></a><a class="code" href="class_r_t_p_packet.html#a2">00159</a>         ~RTPPacket()<font class="keyword"></font>
00160 <font class="keyword">        </font>{ endPacket(); };
00161         
00167         <font class="keyword">inline</font> <font class="keyword">const</font> RTPFixedHeader*
<a name="l00168"></a><a class="code" href="class_r_t_p_packet.html#a3">00168</a>         getHeader(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00169 <font class="keyword">        </font>{ <font class="keywordflow">return</font> reinterpret_cast&lt;const RTPFixedHeader*&gt;(buffer); };
00170         
00177         <font class="keyword">inline</font> uint32
<a name="l00178"></a><a class="code" href="class_r_t_p_packet.html#a4">00178</a>         getHeaderSize(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00179 <font class="keyword">        </font>{ <font class="keywordflow">return</font> hdrsize; };
00180 
00188         <font class="keyword">inline</font> <font class="keyword">const</font> RTPHeaderExt*
<a name="l00189"></a><a class="code" href="class_r_t_p_packet.html#a5">00189</a>         getHeaderExt()<font class="keyword"> const</font>
00190 <font class="keyword">        </font>{ uint32 fixsize = <font class="keyword">sizeof</font>(RTPFixedHeader) + 
00191                   (getHeader()-&gt;cc &lt;&lt; 2); 
00192           <font class="keywordflow">return</font> (reinterpret_cast&lt;RTPHeaderExt*&gt;(buffer + fixsize));
00193         } 
00194 
00199         <font class="keyword">inline</font> <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font>
<a name="l00200"></a><a class="code" href="class_r_t_p_packet.html#a6">00200</a>         getPayload(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00201 <font class="keyword">        </font>{ <font class="keywordflow">return</font> buffer + getHeaderSize(); };
00202 
00206         <font class="keyword">inline</font> uint32
<a name="l00207"></a><a class="code" href="class_r_t_p_packet.html#a7">00207</a>         getPayloadSize()<font class="keyword"> const</font>
00208 <font class="keyword">        </font>{ <font class="keywordflow">return</font> payload_size; };
00209 
00213         <font class="keyword">inline</font> rtp_payload_t 
<a name="l00214"></a><a class="code" href="class_r_t_p_packet.html#a8">00214</a>         getPayloadType()<font class="keyword"> const</font>
00215 <font class="keyword">        </font>{ <font class="keywordflow">return</font> static_cast&lt;rtp_payload_t&gt;(getHeader()-&gt;payload); };
00216 
00220         <font class="keyword">inline</font> uint16
<a name="l00221"></a><a class="code" href="class_r_t_p_packet.html#a9">00221</a>         getSeqNum()<font class="keyword"> const</font>
00222 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ntohs(getHeader()-&gt;sequence); };
00223         
00228         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00229"></a><a class="code" href="class_r_t_p_packet.html#a10">00229</a>         isPadded()<font class="keyword"> const</font>
00230 <font class="keyword">        </font>{ <font class="keywordflow">return</font> getHeader()-&gt;padding; };
00231 
00237         <font class="keyword">inline</font> uint8
<a name="l00238"></a><a class="code" href="class_r_t_p_packet.html#a11">00238</a>         getPaddingSize()<font class="keyword"> const</font>
00239 <font class="keyword">        </font>{ <font class="keywordflow">return</font> buffer[total - 1]; };
00240 
00246         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00247"></a><a class="code" href="class_r_t_p_packet.html#a12">00247</a>         isMarked()<font class="keyword"> const</font>
00248 <font class="keyword">        </font>{ <font class="keywordflow">return</font> getHeader()-&gt;marker; };
00249 
00254         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00255"></a><a class="code" href="class_r_t_p_packet.html#a13">00255</a>         isExtended()<font class="keyword"> const</font>
00256 <font class="keyword">        </font>{ <font class="keywordflow">return</font> getHeader()-&gt;extension; };
00257 
00262         <font class="keyword">inline</font> uint16
<a name="l00263"></a><a class="code" href="class_r_t_p_packet.html#a14">00263</a>         getCSRCsCount()<font class="keyword"> const</font>
00264 <font class="keyword">        </font>{ <font class="keywordflow">return</font> getHeader()-&gt;cc; };
00265 
00270         <font class="keyword">inline</font> <font class="keyword">const</font> uint32*
<a name="l00271"></a><a class="code" href="class_r_t_p_packet.html#a15">00271</a>         getCSRCs()<font class="keyword"> const</font>
00272 <font class="keyword">        </font>{ <font class="keywordflow">return</font> static_cast&lt;const uint32*&gt;(&amp;(getHeader()-&gt;sources[1])); };
00273 
00280         <font class="keyword">inline</font> <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font>
<a name="l00281"></a><a class="code" href="class_r_t_p_packet.html#a16">00281</a>         getRawPacket()<font class="keyword"> const</font>
00282 <font class="keyword">        </font>{ <font class="keywordflow">return</font> buffer; };
00283 
00290         <font class="keyword">inline</font> uint32
<a name="l00291"></a><a class="code" href="class_r_t_p_packet.html#a17">00291</a>         getRawPacketSize()<font class="keyword"> const</font>
00292 <font class="keyword">        </font>{ <font class="keywordflow">return</font> total; };
00293 
00294 <font class="keyword">protected</font>:
00300         <font class="keyword">inline</font> uint32
<a name="l00301"></a><a class="code" href="class_r_t_p_packet.html#b0">00301</a>         getRawTimestamp(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00302 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ntohl(getHeader()-&gt;timestamp); };
00303 
00304         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
<a name="l00305"></a><a class="code" href="class_r_t_p_packet.html#b1">00305</a>         setbuffer(<font class="keyword">const</font> <font class="keywordtype">void</font>* src, size_t len, size_t pos)<font class="keyword"></font>
00306 <font class="keyword">        </font>{ memcpy(buffer + pos,src,len); }
00307 
00311         <font class="keywordtype">void</font> 
00312         endPacket();
00313 };
00314 
00326 <font class="keyword">class </font>CCXX_CLASS_EXPORT <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a>: <font class="keyword">public</font> <a class="code" href="class_r_t_p_packet.html">RTPPacket</a>
00327 {
00328 <font class="keyword">public</font>:
00346         <a class="code" href="rtp_8h.html#a4">OutgoingRTPPkt::OutgoingRTPPkt</a>(
00347                <font class="keyword">const</font> uint32* <font class="keyword">const</font> csrcs, uint16 numcsrc, 
00348                <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> hdrext, uint32 hdrextlen,
00349                <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> data, uint32 datalen);
00350 
00362          <a class="code" href="rtp_8h.html#a4">OutgoingRTPPkt::OutgoingRTPPkt</a>(
00363                 <font class="keyword">const</font> uint32* <font class="keyword">const</font> csrcs, uint16 numcsrc, 
00364                 <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> data, uint32 datalen);
00365 
00366         <font class="comment">/*</font>
00367 <font class="comment">         * Construct a new packet to be sent containing no</font>
00368 <font class="comment">         * contributing source identifiers nor header extension. A new</font>
00369 <font class="comment">         * copy in memory is done prepending the fixed header.</font>
00370 <font class="comment">         *</font>
00371 <font class="comment">         * @param csrcs array of countributing source 32-bit identifiers</font>
00372 <font class="comment">         * @param numcsrc number of CSRC identifiers in the array</font>
00373 <font class="comment">         * @param data payload</font>
00374 <font class="comment">         * @param datalen payload length, in octets</font>
00375 <font class="comment">         * */</font>
00376         <a class="code" href="rtp_8h.html#a4">OutgoingRTPPkt::OutgoingRTPPkt</a>(
00377                <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> data, uint32 datalen);
00378 
00382         ~OutgoingRTPPkt();
00383         
00387         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00388"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a4">00388</a>         setPayloadType(rtp_payload_t pt)<font class="keyword"></font>
00389 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(getHeader())-&gt;payload = pt; };
00390 
00394         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00395"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a5">00395</a>         setSeqNum(uint16 seq)<font class="keyword"></font>
00396 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(getHeader())-&gt;sequence = htons(seq); };
00397 
00401         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00402"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a6">00402</a>         setTimestamp(uint32 ts)<font class="keyword"></font>
00403 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(getHeader())-&gt;timestamp = 
00404                   htonl(ts); };
00405 
00412         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
<a name="l00413"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a7">00413</a>         setSSRC(uint32 ssrc)<font class="keyword"> const</font>
00414 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(getHeader())-&gt;sources[0] = ssrc; };
00415 
00419         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00420"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a8">00420</a>         setMarker(<font class="keywordtype">bool</font> mark)<font class="keyword"></font>
00421 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(getHeader())-&gt;marker = mark; };
00422 
00427         <font class="keyword">inline</font> uint32
<a name="l00428"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a9">00428</a>         getTimestamp()<font class="keyword"> const</font>
00429 <font class="keyword">        </font>{ <font class="keywordflow">return</font> getRawTimestamp(); };
00430 
00434         <font class="keyword">inline</font> <font class="keywordtype">bool</font> 
<a name="l00435"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a10">00435</a>         operator==(<font class="keyword">const</font> <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00436 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ( this-&gt;getSeqNum() == p.<a class="code" href="class_r_t_p_packet.html#a9">getSeqNum</a>() ); }
00437 
00441         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00442"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#a11">00442</a>         operator!=(<font class="keyword">const</font> <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00443 <font class="keyword">        </font>{ <font class="keywordflow">return</font> !( *<font class="keyword">this</font>==p ); };
00444 
00445 <font class="keyword">private</font>:
00450         <a class="code" href="rtp_8h.html#a4">OutgoingRTPPkt</a>(<font class="keyword">const</font> <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> &amp;o);
00451         
00456         <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a>&amp;
00457         operator=(<font class="keyword">const</font> <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> &amp;o);
00458 
00459         <font class="comment">// prev/next in the sending list</font>
00460         <a class="code" href="class_outgoing_r_t_p_pkt.html">OutgoingRTPPkt</a> *next, *prev;       
00461 
<a name="l00462"></a><a class="code" href="class_outgoing_r_t_p_pkt.html#l0">00462</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_r_t_p_queue.html">RTPQueue</a>;
00463 };      
00464 
00478 <font class="keyword">class </font>CCXX_CLASS_EXPORT <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> : <font class="keyword">public</font> <a class="code" href="class_r_t_p_packet.html">RTPPacket</a>
00479 {
00480 <font class="keyword">public</font>:
00500         <a class="code" href="rtp_8h.html#a3">IncomingRTPPkt</a>(<a class="code" href="class_r_t_p_queue.html">RTPQueue</a> &amp;queue, <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* block, 
00501                        size_t len, <font class="keyword">struct</font> timeval recvtime);
00502 
00506         ~IncomingRTPPkt();
00507 
00513         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00514"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a2">00514</a>         isHeaderValid()<font class="keyword"></font>
00515 <font class="keyword">        </font>{ <font class="keywordflow">return</font> valid; }
00516 
00520         <font class="keyword">inline</font> <font class="keywordtype">bool</font> 
<a name="l00521"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a3">00521</a>         operator==(<font class="keyword">const</font> <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00522 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ( (this-&gt;getSeqNum() == p.<a class="code" href="class_r_t_p_packet.html#a9">getSeqNum</a>()) &amp;&amp; 
00523                    (this-&gt;getSSRC() == p.<a class="code" href="class_incoming_r_t_p_pkt.html#a5">getSSRC</a>()) ); }
00524         
00528         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00529"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a4">00529</a>         operator!=(<font class="keyword">const</font> <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00530 <font class="keyword">        </font>{ <font class="keywordflow">return</font> !( *<font class="keyword">this</font> == p ); };
00531 
00538         <font class="keyword">inline</font> uint32 
<a name="l00539"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a5">00539</a>         getSSRC()<font class="keyword"> const</font>
00540 <font class="keyword">        </font>{ <font class="keywordflow">return</font> static_cast&lt;uint32&gt;(getHeader()-&gt;sources[0]); };
00541         
00548         <font class="keyword">inline</font> <a class="code" href="class_r_t_p_source.html">RTPSource</a>&amp; 
<a name="l00549"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a6">00549</a>         getSource()<font class="keyword"> const</font>
00550 <font class="keyword">        </font>{ <font class="keywordflow">return</font> source; };
00551 
00560         <font class="keyword">inline</font> uint32
<a name="l00561"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a7">00561</a>         getTimestamp()<font class="keyword"> const</font>
00562 <font class="keyword">        </font>{ <font class="keywordflow">return</font> cached_timestamp; };
00563 
00571         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
<a name="l00572"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a8">00572</a>         setRecvTimestamp(<font class="keyword">const</font> timeval &amp;t)<font class="keyword"></font>
00573 <font class="keyword">        </font>{ reception_timestamp = t; }
00574 
00582         <font class="keyword">inline</font> timeval
<a name="l00583"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a9">00583</a>         getRecvTimestamp()<font class="keyword"> const</font>
00584 <font class="keyword">        </font>{ <font class="keywordflow">return</font> reception_timestamp; }
00585 
00598         <font class="keyword">inline</font> uint16
<a name="l00599"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a10">00599</a>         getExtUndefined()<font class="keyword"> const</font>
00600 <font class="keyword">        </font>{ <font class="keywordflow">return</font> (isExtended()? getHeaderExt()-&gt;undefined : 0); };
00601 
00613         <font class="keyword">inline</font> uint32
<a name="l00614"></a><a class="code" href="class_incoming_r_t_p_pkt.html#a11">00614</a>         getExtSize()<font class="keyword"> const</font>
00615 <font class="keyword">        </font>{ <font class="keywordflow">return</font> (isExtended()? getHeaderExt()-&gt;length : 0); };
00616 
00617 <font class="keyword">private</font>:
00622         <a class="code" href="rtp_8h.html#a3">IncomingRTPPkt</a>(<font class="keyword">const</font> <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> &amp;ip);
00623 
00628         <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a>&amp;
00629         operator=(<font class="keyword">const</font> <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> &amp;ip);
00630 
00631         <font class="comment">// prev/next in the general list</font>
00632         <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *next, *prev;       
00633         <font class="comment">// prev/next in the source specific list</font>
00634         <a class="code" href="class_incoming_r_t_p_pkt.html">IncomingRTPPkt</a> *srcnext, *srcprev; 
00635         <font class="comment">// source of the packet</font>
00636         <a class="code" href="class_r_t_p_source.html">RTPSource</a> &amp;source;
00637         <font class="comment">// time this packet was received at</font>
00638         <font class="keyword">struct </font>timeval reception_timestamp;
00639         <font class="comment">// header validity, checked at construction time</font>
00640         <font class="keywordtype">bool</font> valid;
00641         <font class="comment">// timestamp of the packet in host order and after</font>
00642         <font class="comment">// substracting the initial timestamp for its source (it is an</font>
00643         <font class="comment">// increment from the initial timestamp).</font>
00644         uint32 cached_timestamp;
00645 
00646         <font class="comment">// masks for RTP header validation: type not matching SR nor RR </font>
00647         <font class="keyword">static</font> <font class="keyword">const</font> uint16 RTP_INVALID_MASK = (0x7e);
00648         <font class="keyword">static</font> <font class="keyword">const</font> uint16 RTP_INVALID_VALUE = (0x48);
00649 
<a name="l00650"></a><a class="code" href="class_incoming_r_t_p_pkt.html#l0">00650</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_r_t_p_queue.html">RTPQueue</a>;
<a name="l00651"></a><a class="code" href="class_incoming_r_t_p_pkt.html#l1">00651</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_r_t_p_source.html">RTPSource</a>;
00652 };      
00653 
00654 <font class="preprocessor">#pragma pack(1)</font>
00655 <font class="preprocessor"></font>
<a name="l00659"></a><a class="code" href="struct_r_t_c_p_fixed_header.html">00659</a> <font class="keyword">typedef</font> <font class="keyword">struct </font>
00660 <font class="keyword"></font>{
00661 <font class="preprocessor">#if     __BYTE_ORDER == __BIG_ENDIAN</font>
00662 <font class="preprocessor"></font>
<a name="l00663"></a><a class="code" href="struct_r_t_c_p_fixed_header.html#m0">00663</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
<a name="l00664"></a><a class="code" href="struct_r_t_c_p_fixed_header.html#m1">00664</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
<a name="l00665"></a><a class="code" href="struct_r_t_c_p_fixed_header.html#m2">00665</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> block_count:5;   
00666 <font class="preprocessor">#else</font>
00667 <font class="preprocessor"></font>
00668         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> block_count:5;   
00669         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
00670         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
00671 <font class="preprocessor">#endif</font>
<a name="l00672"></a><a class="code" href="struct_r_t_c_p_fixed_header.html#m3">00672</a> <font class="preprocessor"></font>        uint8 type;              
<a name="l00673"></a><a class="code" href="struct_r_t_c_p_fixed_header.html#m4">00673</a>         uint16 length;           
00674 }       <a class="code" href="struct_r_t_c_p_fixed_header.html">RTCPFixedHeader</a>;
00675 <font class="preprocessor">#pragma pack()</font>
00676 <font class="preprocessor"></font>
00677 <font class="preprocessor">#ifdef  CCXX_NAMESPACES</font>
00678 <font class="preprocessor"></font>};
00679 <font class="preprocessor">#endif</font>
00680 <font class="preprocessor"></font>
00681 <font class="preprocessor">#endif //CCXX_RTPEXT_H</font>
00682 <font class="preprocessor"></font>
</pre></div><hr><address><small>Generated at Sat Jan 5 09:08:54 2002 for ccRTP by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.10 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>