Sophie

Sophie

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

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta name="robots" content="noindex">
<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.5 on Fri Oct 5 10:28:26 2001 -->
<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_h.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>
<a name="l00061"></a><a class="code" href="class_RTPPacket.html">00061</a> <font class="keyword">class </font><a class="code" href="class_RTPPacket.html">RTPPacket</a>
00062 {
00063 <font class="keyword">protected</font>:
00064 <font class="preprocessor">#pragma pack(1)</font>
00065 <font class="preprocessor"></font>
<a name="l00077"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html">00077</a>         <font class="keyword">struct </font>RTPFixedHeader
00078         {
00079 <font class="preprocessor">#if     __BYTE_ORDER == __BIG_ENDIAN</font>
00080 <font class="preprocessor"></font>
00081                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
00082                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
00083                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> extension:1;     
00084                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> cc:4;            
00085                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> marker:1;        
00086                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> payload:7;       
00087 <font class="preprocessor">#else</font>
00088 <font class="preprocessor"></font>
<a name="l00089"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m3">00089</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> cc:4;            
<a name="l00090"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m2">00090</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> extension:1;     
<a name="l00091"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m1">00091</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
<a name="l00092"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m0">00092</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
<a name="l00093"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m5">00093</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> payload:7;       
<a name="l00094"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m4">00094</a>                 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> marker:1;        
00095 <font class="preprocessor">#endif</font>
<a name="l00096"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m6">00096</a> <font class="preprocessor"></font>                uint16 sequence;       
<a name="l00097"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m7">00097</a>                 uint32 timestamp;       
<a name="l00098"></a><a class="code" href="struct_RTPPacket__RTPFixedHeader.html#m8">00098</a>                 uint32 sources[1];      
00099         };
00100         
<a name="l00108"></a><a class="code" href="struct_RTPPacket__RTPHeaderExt.html">00108</a>         <font class="keyword">typedef</font> <font class="keyword">struct</font>
00109 <font class="keyword">        </font>{
<a name="l00110"></a><a class="code" href="struct_RTPPacket__RTPHeaderExt.html#m0">00110</a>                 uint16 undefined; 
<a name="l00111"></a><a class="code" href="struct_RTPPacket__RTPHeaderExt.html#m1">00111</a>                 uint16 length;    
00112         }       RTPHeaderExt;
00113 <font class="preprocessor">#pragma pack()</font>
00114 <font class="preprocessor"></font>
00115         <font class="comment">// size of the header, including contributing sources and extensions</font>
<a name="l00116"></a><a class="code" href="class_RTPPacket.html#n0">00116</a>         uint32 hdrsize;
00117         <font class="comment">// note: payload (not full packet) size.</font>
<a name="l00118"></a><a class="code" href="class_RTPPacket.html#n1">00118</a>         uint32 payload_size;
00119         <font class="comment">// total length, including header, extension, payload and padding</font>
<a name="l00120"></a><a class="code" href="class_RTPPacket.html#n2">00120</a>         uint32 total;
00121         <font class="comment">// packet in memory</font>
<a name="l00122"></a><a class="code" href="class_RTPPacket.html#n3">00122</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* buffer;
00123         <font class="comment">// whether the object was contructed with duplicated = true</font>
<a name="l00124"></a><a class="code" href="class_RTPPacket.html#n4">00124</a>         <font class="keywordtype">bool</font> duplicated;
00125 
00126 <font class="keyword">public</font>:
00138         <a class="code" href="class_RTPPacket.html#a0">RTPPacket</a>(<font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> block, size_t len, 
00139                   <font class="keywordtype">bool</font> duplicate = <font class="keyword">false</font>);
00140 
00149         <a class="code" href="class_RTPPacket.html#a0">RTPPacket</a>(size_t hdrlen, size_t plen);
00150 
00154         <font class="comment">//      virtual</font>
<a name="l00155"></a><a class="code" href="class_RTPPacket.html#a2">00155</a>         <a class="code" href="class_RTPPacket.html#a2">~RTPPacket</a>()<font class="keyword"></font>
00156 <font class="keyword">        </font>{ <a class="code" href="class_RTPPacket.html#b1">endPacket</a>(); };
00157         
00163         <font class="keyword">inline</font> <font class="keyword">const</font> RTPFixedHeader*
<a name="l00164"></a><a class="code" href="class_RTPPacket.html#a3">00164</a>         <a class="code" href="class_RTPPacket.html#a3">getHeader</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00165 <font class="keyword">        </font>{ <font class="keywordflow">return</font> reinterpret_cast&lt;const RTPFixedHeader*&gt;(buffer); };
00166         
00173         <font class="keyword">inline</font> uint32
<a name="l00174"></a><a class="code" href="class_RTPPacket.html#a4">00174</a>         <a class="code" href="class_RTPPacket.html#a4">getHeaderSize</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00175 <font class="keyword">        </font>{ <font class="keywordflow">return</font> hdrsize; };
00176 
00184         <font class="keyword">inline</font> <font class="keyword">const</font> RTPHeaderExt*
<a name="l00185"></a><a class="code" href="class_RTPPacket.html#a5">00185</a>         <a class="code" href="class_RTPPacket.html#a5">getHeaderExt</a>()<font class="keyword"> const</font>
00186 <font class="keyword">        </font>{ uint32 fixsize = <font class="keyword">sizeof</font>(RTPFixedHeader) + 
00187                   (<a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;cc &lt;&lt; 2); 
00188           <font class="keywordflow">return</font> (reinterpret_cast&lt;RTPHeaderExt*&gt;(buffer + fixsize));
00189         } 
00190 
00195         <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="l00196"></a><a class="code" href="class_RTPPacket.html#a6">00196</a>         <a class="code" href="class_RTPPacket.html#a6">getPayload</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00197 <font class="keyword">        </font>{ <font class="keywordflow">return</font> buffer + <a class="code" href="class_RTPPacket.html#a4">getHeaderSize</a>(); };
00198 
00202         <font class="keyword">inline</font> uint32
<a name="l00203"></a><a class="code" href="class_RTPPacket.html#a7">00203</a>         <a class="code" href="class_RTPPacket.html#a7">getPayloadSize</a>()<font class="keyword"> const</font>
00204 <font class="keyword">        </font>{ <font class="keywordflow">return</font> payload_size; };
00205 
00209         <font class="keyword">inline</font> rtp_payload_t 
<a name="l00210"></a><a class="code" href="class_RTPPacket.html#a8">00210</a>         <a class="code" href="class_RTPPacket.html#a8">getPayloadType</a>()<font class="keyword"> const</font>
00211 <font class="keyword">        </font>{ <font class="keywordflow">return</font> static_cast&lt;rtp_payload_t&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;payload); };
00212 
00216         <font class="keyword">inline</font> uint16
<a name="l00217"></a><a class="code" href="class_RTPPacket.html#a9">00217</a>         <a class="code" href="class_RTPPacket.html#a9">getSeqNum</a>()<font class="keyword"> const</font>
00218 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ntohs(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;sequence); };
00219 
00225         <font class="keyword">inline</font> uint32
<a name="l00226"></a><a class="code" href="class_RTPPacket.html#a10">00226</a>         <a class="code" href="class_RTPPacket.html#a10">getRawTimestamp</a>(<font class="keywordtype">void</font>)<font class="keyword"> const</font>
00227 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ntohl(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;timestamp); };
00228         
00233         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00234"></a><a class="code" href="class_RTPPacket.html#a11">00234</a>         <a class="code" href="class_RTPPacket.html#a11">isPadded</a>()<font class="keyword"> const</font>
00235 <font class="keyword">        </font>{ <font class="keywordflow">return</font> <a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;padding; };
00236 
00242         <font class="keyword">inline</font> uint8
<a name="l00243"></a><a class="code" href="class_RTPPacket.html#a12">00243</a>         <a class="code" href="class_RTPPacket.html#a12">getPaddingSize</a>()<font class="keyword"> const</font>
00244 <font class="keyword">        </font>{ <font class="keywordflow">return</font> buffer[total - 1]; };
00245 
00251         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00252"></a><a class="code" href="class_RTPPacket.html#a13">00252</a>         <a class="code" href="class_RTPPacket.html#a13">isMarked</a>()<font class="keyword"> const</font>
00253 <font class="keyword">        </font>{ <font class="keywordflow">return</font> <a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;marker; };
00254 
00259         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00260"></a><a class="code" href="class_RTPPacket.html#a14">00260</a>         <a class="code" href="class_RTPPacket.html#a14">isExtended</a>()<font class="keyword"> const</font>
00261 <font class="keyword">        </font>{ <font class="keywordflow">return</font> <a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;extension; };
00262 
00267         <font class="keyword">inline</font> uint16
<a name="l00268"></a><a class="code" href="class_RTPPacket.html#a15">00268</a>         <a class="code" href="class_RTPPacket.html#a15">getCSRCsCount</a>()<font class="keyword"> const</font>
00269 <font class="keyword">        </font>{ <font class="keywordflow">return</font> <a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;cc; };
00270 
00275         <font class="keyword">inline</font> <font class="keyword">const</font> uint32*
<a name="l00276"></a><a class="code" href="class_RTPPacket.html#a16">00276</a>         <a class="code" href="class_RTPPacket.html#a16">getCSRCs</a>()<font class="keyword"> const</font>
00277 <font class="keyword">        </font>{ <font class="keywordflow">return</font> static_cast&lt;const uint32*&gt;(&amp;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;sources[1])); };
00278 
00285         <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="l00286"></a><a class="code" href="class_RTPPacket.html#a17">00286</a>         <a class="code" href="class_RTPPacket.html#a17">getRawPacket</a>()<font class="keyword"> const</font>
00287 <font class="keyword">        </font>{ <font class="keywordflow">return</font> buffer; };
00288 
00295         <font class="keyword">inline</font> uint32
<a name="l00296"></a><a class="code" href="class_RTPPacket.html#a18">00296</a>         <a class="code" href="class_RTPPacket.html#a18">getRawPacketSize</a>()<font class="keyword"> const</font>
00297 <font class="keyword">        </font>{ <font class="keywordflow">return</font> total; };
00298 
00299 <font class="keyword">protected</font>:
00300         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
<a name="l00301"></a><a class="code" href="class_RTPPacket.html#b0">00301</a>         <a class="code" href="class_RTPPacket.html#b0">setbuffer</a>(<font class="keyword">const</font> <font class="keywordtype">void</font>* src, size_t len, size_t pos)<font class="keyword"></font>
00302 <font class="keyword">        </font>{ memcpy(buffer + pos,src,len); }
00303 
00307         <font class="keywordtype">void</font> 
00308         <a class="code" href="class_RTPPacket.html#b1">endPacket</a>();
00309 };
00310 
<a name="l00322"></a><a class="code" href="class_OutgoingRTPPkt.html">00322</a> <font class="keyword">class </font><a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a>: <font class="keyword">public</font> <a class="code" href="class_RTPPacket.html">RTPPacket</a>
00323 {
00324 <font class="keyword">public</font>:
00342         <a class="code" href="class_OutgoingRTPPkt.html#a0">OutgoingRTPPkt::OutgoingRTPPkt</a>(
00343                <font class="keyword">const</font> uint32* <font class="keyword">const</font> csrcs, uint16 numcsrc, 
00344                <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> hdrext, uint32 hdrextlen,
00345                <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> data, uint32 datalen);
00346 
00358          <a class="code" href="class_OutgoingRTPPkt.html#a0">OutgoingRTPPkt::OutgoingRTPPkt</a>(
00359                 <font class="keyword">const</font> uint32* <font class="keyword">const</font> csrcs, uint16 numcsrc, 
00360                 <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> data, uint32 datalen);
00361 
00362         <font class="comment">/*</font>
00363 <font class="comment">         * Construct a new packet to be sent containing no</font>
00364 <font class="comment">         * contributing source identifiers nor header extension. A new</font>
00365 <font class="comment">         * copy in memory is done prepending the fixed header.</font>
00366 <font class="comment">         *</font>
00367 <font class="comment">         * @param csrcs array of countributing source 32-bit identifiers</font>
00368 <font class="comment">         * @param numcsrc number of CSRC identifiers in the array</font>
00369 <font class="comment">         * @param data payload</font>
00370 <font class="comment">         * @param datalen payload length, in octets</font>
00371 <font class="comment">         * */</font>
00372         <a class="code" href="class_OutgoingRTPPkt.html#a0">OutgoingRTPPkt::OutgoingRTPPkt</a>(
00373                <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* <font class="keyword">const</font> data, uint32 datalen);
00374 
00378         <a class="code" href="class_OutgoingRTPPkt.html#a3">~OutgoingRTPPkt</a>();
00379         
00383         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00384"></a><a class="code" href="class_OutgoingRTPPkt.html#a4">00384</a>         <a class="code" href="class_OutgoingRTPPkt.html#a4">setPayloadType</a>(rtp_payload_t pt)<font class="keyword"></font>
00385 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>())-&gt;payload = pt; };
00386 
00390         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00391"></a><a class="code" href="class_OutgoingRTPPkt.html#a5">00391</a>         <a class="code" href="class_OutgoingRTPPkt.html#a5">setSeqNum</a>(uint16 seq)<font class="keyword"></font>
00392 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>())-&gt;sequence = htons(seq); };
00393 
00397         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00398"></a><a class="code" href="class_OutgoingRTPPkt.html#a6">00398</a>         <a class="code" href="class_OutgoingRTPPkt.html#a6">setTimestamp</a>(uint32 ts)<font class="keyword"></font>
00399 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>())-&gt;timestamp = 
00400                   htonl(ts); };
00401 
00408         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
<a name="l00409"></a><a class="code" href="class_OutgoingRTPPkt.html#a7">00409</a>         <a class="code" href="class_OutgoingRTPPkt.html#a7">setSSRC</a>(uint32 ssrc)<font class="keyword"> const</font>
00410 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>())-&gt;sources[0] = ssrc; };
00411 
00415         <font class="keyword">inline</font> <font class="keywordtype">void</font>
<a name="l00416"></a><a class="code" href="class_OutgoingRTPPkt.html#a8">00416</a>         <a class="code" href="class_OutgoingRTPPkt.html#a8">setMarker</a>(<font class="keywordtype">bool</font> mark)<font class="keyword"></font>
00417 <font class="keyword">        </font>{ const_cast&lt;RTPFixedHeader*&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>())-&gt;marker = mark; };
00418 
00423         <font class="keyword">inline</font> uint32
<a name="l00424"></a><a class="code" href="class_OutgoingRTPPkt.html#a9">00424</a>         <a class="code" href="class_OutgoingRTPPkt.html#a9">getTimestamp</a>()<font class="keyword"> const</font>
00425 <font class="keyword">        </font>{ <font class="keywordflow">return</font> <a class="code" href="class_RTPPacket.html#a10">getRawTimestamp</a>(); };
00426 
00430         <font class="keyword">inline</font> <font class="keywordtype">bool</font> 
<a name="l00431"></a><a class="code" href="class_OutgoingRTPPkt.html#a10">00431</a>         <a class="code" href="class_OutgoingRTPPkt.html#a10">operator==</a>(<font class="keyword">const</font> <a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00432 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ( this-&gt;<a class="code" href="class_RTPPacket.html#a9">getSeqNum</a>() == p.<a class="code" href="class_RTPPacket.html#a9">getSeqNum</a>() ); }
00433 
00437         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00438"></a><a class="code" href="class_OutgoingRTPPkt.html#a11">00438</a>         <a class="code" href="class_OutgoingRTPPkt.html#a11">operator!=</a>(<font class="keyword">const</font> <a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00439 <font class="keyword">        </font>{ <font class="keywordflow">return</font> !( *<font class="keyword">this</font>==p ); };
00440 
00441 <font class="keyword">private</font>:
00446         <a class="code" href="class_OutgoingRTPPkt.html#a0">OutgoingRTPPkt</a>(<font class="keyword">const</font> <a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a> &amp;o);
00447         
00452         <a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a>&amp;
00453         <a class="code" href="class_OutgoingRTPPkt.html#c1">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a> &amp;o);
00454 
00455         <font class="comment">// prev/next in the sending list</font>
<a name="l00456"></a><a class="code" href="class_OutgoingRTPPkt.html#o1">00456</a>         <a class="code" href="class_OutgoingRTPPkt.html">OutgoingRTPPkt</a> *next, *prev;       
00457 
<a name="l00458"></a><a class="code" href="class_OutgoingRTPPkt.html#o2">00458</a>         <font class="keyword">friend</font> <a class="code" href="class_RTPQueue.html">RTPQueue</a>;
00459 };      
00460 
<a name="l00474"></a><a class="code" href="class_IncomingRTPPkt.html">00474</a> <font class="keyword">class </font><a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> : <font class="keyword">public</font> <a class="code" href="class_RTPPacket.html">RTPPacket</a>
00475 {
00476 <font class="keyword">public</font>:
00496         <a class="code" href="class_IncomingRTPPkt.html#a0">IncomingRTPPkt</a>(<a class="code" href="class_RTPQueue.html">RTPQueue</a> &amp;queue, <font class="keyword">const</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>* block, 
00497                        size_t len, <font class="keyword">struct</font> timeval recvtime);
00498 
00502         <a class="code" href="class_IncomingRTPPkt.html#a1">~IncomingRTPPkt</a>();
00503 
00509         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00510"></a><a class="code" href="class_IncomingRTPPkt.html#a2">00510</a>         <a class="code" href="class_IncomingRTPPkt.html#a2">isHeaderValid</a>()<font class="keyword"></font>
00511 <font class="keyword">        </font>{ <font class="keywordflow">return</font> valid; }
00512 
00516         <font class="keyword">inline</font> <font class="keywordtype">bool</font> 
<a name="l00517"></a><a class="code" href="class_IncomingRTPPkt.html#a3">00517</a>         <a class="code" href="class_IncomingRTPPkt.html#a3">operator==</a>(<font class="keyword">const</font> <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00518 <font class="keyword">        </font>{ <font class="keywordflow">return</font> ( (this-&gt;<a class="code" href="class_RTPPacket.html#a9">getSeqNum</a>() == p.<a class="code" href="class_RTPPacket.html#a9">getSeqNum</a>()) &amp;&amp; 
00519                    (this-&gt;<a class="code" href="class_IncomingRTPPkt.html#a5">getSSRC</a>() == p.<a class="code" href="class_IncomingRTPPkt.html#a5">getSSRC</a>()) ); }
00520         
00524         <font class="keyword">inline</font> <font class="keywordtype">bool</font>
<a name="l00525"></a><a class="code" href="class_IncomingRTPPkt.html#a4">00525</a>         <a class="code" href="class_IncomingRTPPkt.html#a4">operator!=</a>(<font class="keyword">const</font> <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> &amp;p)<font class="keyword"> const</font>
00526 <font class="keyword">        </font>{ <font class="keywordflow">return</font> !( *<font class="keyword">this</font> == p ); };
00527 
00534         <font class="keyword">inline</font> uint32 
<a name="l00535"></a><a class="code" href="class_IncomingRTPPkt.html#a5">00535</a>         <a class="code" href="class_IncomingRTPPkt.html#a5">getSSRC</a>()<font class="keyword"> const</font>
00536 <font class="keyword">        </font>{ <font class="keywordflow">return</font> static_cast&lt;uint32&gt;(<a class="code" href="class_RTPPacket.html#a3">getHeader</a>()-&gt;sources[0]); };
00537         
00544         <font class="keyword">inline</font> <a class="code" href="class_RTPSource.html">RTPSource</a>&amp; 
<a name="l00545"></a><a class="code" href="class_IncomingRTPPkt.html#a6">00545</a>         <a class="code" href="class_IncomingRTPPkt.html#a6">getSource</a>()<font class="keyword"> const</font>
00546 <font class="keyword">        </font>{ <font class="keywordflow">return</font> source; };
00547 
00556         <font class="keyword">inline</font> uint32
<a name="l00557"></a><a class="code" href="class_IncomingRTPPkt.html#a7">00557</a>         <a class="code" href="class_IncomingRTPPkt.html#a7">getTimestamp</a>()<font class="keyword"> const</font>
00558 <font class="keyword">        </font>{ <font class="keywordflow">return</font> cached_timestamp; };
00559 
00567         <font class="keyword">inline</font> <font class="keywordtype">void</font> 
<a name="l00568"></a><a class="code" href="class_IncomingRTPPkt.html#a8">00568</a>         <a class="code" href="class_IncomingRTPPkt.html#a8">setRecvTimestamp</a>(<font class="keyword">const</font> timeval &amp;t)<font class="keyword"></font>
00569 <font class="keyword">        </font>{ reception_timestamp = t; }
00570 
00578         <font class="keyword">inline</font> timeval
<a name="l00579"></a><a class="code" href="class_IncomingRTPPkt.html#a9">00579</a>         <a class="code" href="class_IncomingRTPPkt.html#a9">getRecvTimestamp</a>()<font class="keyword"> const</font>
00580 <font class="keyword">        </font>{ <font class="keywordflow">return</font> reception_timestamp; }
00581 
00594         <font class="keyword">inline</font> uint16
<a name="l00595"></a><a class="code" href="class_IncomingRTPPkt.html#a10">00595</a>         <a class="code" href="class_IncomingRTPPkt.html#a10">getExtUndefined</a>()<font class="keyword"> const</font>
00596 <font class="keyword">        </font>{ <font class="keywordflow">return</font> (<a class="code" href="class_RTPPacket.html#a14">isExtended</a>()? <a class="code" href="class_RTPPacket.html#a5">getHeaderExt</a>()-&gt;undefined : 0); };
00597 
00609         <font class="keyword">inline</font> uint32
<a name="l00610"></a><a class="code" href="class_IncomingRTPPkt.html#a11">00610</a>         <a class="code" href="class_IncomingRTPPkt.html#a11">getExtSize</a>()<font class="keyword"> const</font>
00611 <font class="keyword">        </font>{ <font class="keywordflow">return</font> (<a class="code" href="class_RTPPacket.html#a14">isExtended</a>()? <a class="code" href="class_RTPPacket.html#a5">getHeaderExt</a>()-&gt;length : 0); };
00612 
00613 <font class="keyword">private</font>:
00618         <a class="code" href="class_IncomingRTPPkt.html#a0">IncomingRTPPkt</a>(<font class="keyword">const</font> <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> &amp;ip);
00619 
00624         <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a>&amp;
00625         <a class="code" href="class_IncomingRTPPkt.html#c1">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> &amp;ip);
00626 
00627         <font class="comment">// prev/next in the general list</font>
<a name="l00628"></a><a class="code" href="class_IncomingRTPPkt.html#o1">00628</a>         <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> *next, *prev;       
00629         <font class="comment">// prev/next in the source specific list</font>
<a name="l00630"></a><a class="code" href="class_IncomingRTPPkt.html#o3">00630</a>         <a class="code" href="class_IncomingRTPPkt.html">IncomingRTPPkt</a> *srcnext, *srcprev; 
00631         <font class="comment">// source of the packet</font>
<a name="l00632"></a><a class="code" href="class_IncomingRTPPkt.html#o4">00632</a>         <a class="code" href="class_RTPSource.html">RTPSource</a> &amp;source;
00633         <font class="comment">// time this packet was received at</font>
<a name="l00634"></a><a class="code" href="class_IncomingRTPPkt.html#o5">00634</a>         <font class="keyword">struct </font>timeval reception_timestamp;
00635         <font class="comment">// header validity, checked at construction time</font>
<a name="l00636"></a><a class="code" href="class_IncomingRTPPkt.html#o6">00636</a>         <font class="keywordtype">bool</font> valid;
00637         <font class="comment">// timestamp of the packet in host order and after</font>
00638         <font class="comment">// substracting the initial timestamp for its source (it is an</font>
00639         <font class="comment">// increment from the initial timestamp).</font>
<a name="l00640"></a><a class="code" href="class_IncomingRTPPkt.html#o7">00640</a>         uint32 cached_timestamp;
00641 
00642         <font class="comment">// masks for RTP header validation: type not matching SR nor RR </font>
<a name="l00643"></a><a class="code" href="class_IncomingRTPPkt.html#r0">00643</a>         <font class="keyword">static</font> <font class="keyword">const</font> uint16 RTP_INVALID_MASK = (0x7e);
<a name="l00644"></a><a class="code" href="class_IncomingRTPPkt.html#r1">00644</a>         <font class="keyword">static</font> <font class="keyword">const</font> uint16 RTP_INVALID_VALUE = (0x48);
00645 
<a name="l00646"></a><a class="code" href="class_IncomingRTPPkt.html#o8">00646</a>         <font class="keyword">friend</font> <a class="code" href="class_RTPQueue.html">RTPQueue</a>;
<a name="l00647"></a><a class="code" href="class_IncomingRTPPkt.html#o9">00647</a>         <font class="keyword">friend</font> <a class="code" href="class_RTPSource.html">RTPSource</a>;
00648 };      
00649 
00650 <font class="preprocessor">#pragma pack(1)</font>
00651 <font class="preprocessor"></font>
<a name="l00655"></a><a class="code" href="struct_RTCPFixedHeader.html">00655</a> <font class="keyword">typedef</font> <font class="keyword">struct </font>
00656 <font class="keyword"></font>{
00657 <font class="preprocessor">#if     __BYTE_ORDER == __BIG_ENDIAN</font>
00658 <font class="preprocessor"></font>
00659         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
00660         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
00661         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> block_count:5;   
00662 <font class="preprocessor">#else</font>
00663 <font class="preprocessor"></font>
<a name="l00664"></a><a class="code" href="struct_RTCPFixedHeader.html#m2">00664</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> block_count:5;   
<a name="l00665"></a><a class="code" href="struct_RTCPFixedHeader.html#m1">00665</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> padding:1;       
<a name="l00666"></a><a class="code" href="struct_RTCPFixedHeader.html#m0">00666</a>         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> version:2;       
00667 <font class="preprocessor">#endif</font>
<a name="l00668"></a><a class="code" href="struct_RTCPFixedHeader.html#m3">00668</a> <font class="preprocessor"></font>        uint8 type;              
<a name="l00669"></a><a class="code" href="struct_RTCPFixedHeader.html#m4">00669</a>         uint16 length;           
00670 }       <a class="code" href="struct_RTCPFixedHeader.html">RTCPFixedHeader</a>;
00671 <font class="preprocessor">#pragma pack()</font>
00672 <font class="preprocessor"></font>
00673 <font class="preprocessor">#endif //CCXX_RTPEXT_H</font>
00674 <font class="preprocessor"></font>
</div></pre><hr><address><small>Generated at Fri Oct 5 10:28:26 2001 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.5 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>