4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <stefan.bund@fokus.fraunhofer.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 //#include "RTPPacket.test.hh"
26 //#include "RTPPacket.test.ih"
29 #include "RTPPacket.hh"
31 #include "Packets/DefaultBundle/EthernetPacket.hh"
32 #include "Packets/DefaultBundle/IpV4Packet.hh"
33 #include "Packets/DefaultBundle/UDPPacket.hh"
35 #include <boost/test/auto_unit_test.hpp>
36 #include <boost/test/test_tools.hpp>
39 ///////////////////////////////cc.p////////////////////////////////////////
43 BOOST_AUTO_UNIT_TEST(rtpPacket_parser)
45 unsigned char data[] = { 0x13, 0x02, 0x03, 0x04,
46 0x05, 0x06, 0x07, 0x08,
47 0x09, 0x0A, 0x0B, 0x0C,
49 0x11, 0x12, 0x13, 0x14, // CSRC 1
50 0x15, 0x16, 0x17, 0x18, // CSRC 2
51 0x19, 0x1A, 0x1B, 0x1C // CSRC 3
55 typedef unsigned char * iterator;
56 Parse_RTP<iterator> p(data);
58 BOOST_CHECK_EQUAL( p.version(), 0x00u );
59 BOOST_CHECK_EQUAL( p.padding(), 0 );
60 BOOST_CHECK_EQUAL( p.extension(), 1 );
61 BOOST_CHECK_EQUAL( p.csrcCount(), 0x03u );
62 BOOST_CHECK_EQUAL( p.marker(), 0 );
63 BOOST_CHECK_EQUAL( p.payloadType(), 0x02u );
64 // the static_cast is to silence gcc-3.3
65 BOOST_CHECK_EQUAL( static_cast<unsigned>(p.seqNumber()), 0x0304u );
66 BOOST_CHECK_EQUAL( p.timestamp(), 0x05060708u );
67 BOOST_CHECK_EQUAL( p.ssrc(), 0x090A0B0Cu );
69 BOOST_CHECK_EQUAL( p.csrcList()[0], 0x11121314u );
70 BOOST_CHECK_EQUAL( p.csrcList()[1], 0x15161718u );
71 BOOST_CHECK_EQUAL( p.csrcList()[2], 0x191A1B1Cu );
77 BOOST_AUTO_UNIT_TEST(rtpPacket_packet)
79 unsigned char data[] = { 0x33, 0x02, 0x03, 0x04,
80 0x05, 0x06, 0x07, 0x08,
81 0x09, 0x0A, 0x0B, 0x0C,
83 0x11, 0x12, 0x13, 0x14, // CSRC 1
84 0x15, 0x16, 0x17, 0x18, // CSRC 2
85 0x19, 0x1A, 0x1B, 0x1C, // CSRC 3
87 0x20, 0x21, 0x00, 0x04, // ex
88 0x24, 0x25, 0x26, 0x27, // ex
90 0x20, 0x21, 0x08, 0x23, // paylaod
91 0x20, 0x00, 0x00, 0x03 // payload
95 RTPPacket::ptr p (Packet::create<RTPPacket>(data, data+sizeof(data)));
97 BOOST_CHECK_EQUAL( p->version(), 0x00u );
98 BOOST_CHECK_EQUAL( p->padding(), 1 );
99 BOOST_CHECK_EQUAL( p->extension(), 1 );
100 BOOST_CHECK_EQUAL( p->csrcCount(), 0x03u );
101 BOOST_CHECK_EQUAL( p->marker(), 0 );
102 BOOST_CHECK_EQUAL( p->payloadType(), 0x02u );
103 // the static_cast is to silence gcc-3.3
104 BOOST_CHECK_EQUAL( static_cast<unsigned>(p->seqNumber()), 0x0304u );
105 BOOST_CHECK_EQUAL( p->timestamp(), 0x05060708u );
106 BOOST_CHECK_EQUAL( p->ssrc(), 0x090A0B0Cu );
108 BOOST_CHECK_EQUAL( p->paddingOctet(), 3 );
110 BOOST_CHECK_EQUAL( p->csrcList()[0], 0x11121314u );
111 BOOST_CHECK_EQUAL( p->csrcList()[1], 0x15161718u );
112 BOOST_CHECK_EQUAL( p->csrcList()[2], 0x191A1B1Cu );
114 BOOST_REQUIRE( p->next() );
115 BOOST_CHECK( p->next()->is<RTPUnknownExtensionPacket>() );
117 RTPUnknownExtensionPacket::ptr v (p->next()->as<RTPUnknownExtensionPacket>());
118 BOOST_CHECK_EQUAL( static_cast<unsigned>(v->proDef()), 0x2021u );
119 BOOST_CHECK_EQUAL( static_cast<unsigned>(v->length()), 0x04u );
120 BOOST_CHECK_EQUAL( static_cast<unsigned>(v->ext()[0]), 0x24u );
121 BOOST_CHECK_EQUAL( static_cast<unsigned>(v->ext()[2]), 0x26u );
123 BOOST_REQUIRE( v->next() );
124 DataPacket::ptr d (v->next()->as<DataPacket>());
126 BOOST_CHECK_EQUAL( d->size(), 5u );
132 BOOST_AUTO_UNIT_TEST(eth_rtpPacket_packet)
134 unsigned char data[] = {
137 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // destination MAC
138 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, // source MAC
139 0x08, 0x00, // EtherType: IPv4 0x08
142 0x01, 0x02, 0x03, 0x04,
143 0x05, 0x06, 0x07, 0x08,
144 0x09, 0x11, 0x0B, 0x0C, // EtherType: UDP 0x11
145 0x11, 0x12, 0x13, 0x14,
146 0x15, 0x16, 0x17, 0x18,
149 0x01, 0x02, 0x03, 0x04,
150 0x05, 0x06, 0x07, 0x08,
153 0x33, 0x02, 0x03, 0x04,
154 0x05, 0x06, 0x07, 0x08,
155 0x09, 0x0A, 0x0B, 0x0C,
157 0x11, 0x12, 0x13, 0x14, // CSRC 1
158 0x15, 0x16, 0x17, 0x18, // CSRC 2
159 0x19, 0x1A, 0x1B, 0x1C, // CSRC 3
161 0x20, 0x21, 0x00, 0x04, // ex
162 0x24, 0x25, 0x26, 0x27, // ex
164 0x20, 0x21, 0x08, 0x23, // paylaod
165 0x20, 0x00, 0x00, 0x03 // payload
170 EthernetPacket::ptr p (Packet::create<EthernetPacket>(data, data+sizeof(data)));
172 BOOST_CHECK_EQUAL( p->destination()[3], 0x04 );
173 BOOST_CHECK_EQUAL( p->source()[0], 0x07 );
174 BOOST_CHECK_EQUAL( p->type(), 0x0800 );
177 BOOST_REQUIRE( p->next() );
178 BOOST_CHECK( p->next()->is<IpV4Packet>() );
180 IpV4Packet::ptr ip (p->next()->as<IpV4Packet>());
182 BOOST_CHECK_EQUAL( static_cast<unsigned>(ip->protocol()), 0x11u );
185 BOOST_REQUIRE( ip->next() );
186 BOOST_CHECK( ip->next()->is<UDPPacket>() );
188 UDPPacket::ptr udp (ip->next()->as<UDPPacket>());
190 BOOST_CHECK_EQUAL( udp->source(), 0x0102 );
191 BOOST_CHECK_EQUAL( udp->destination(), 0x0304 );
192 BOOST_CHECK_EQUAL( udp->length(), 0x0506 );
193 BOOST_CHECK_EQUAL( udp->crc(), 0x0708 );
197 BOOST_REQUIRE( udp->next() );
198 BOOST_CHECK( udp->next()->is<DataPacket>() );
200 RTPPacket::ptr rtp (udp->next()->reinterpret<RTPPacket>());
202 BOOST_CHECK_EQUAL( rtp->version(), 0x00u );
203 BOOST_CHECK_EQUAL( rtp->padding(), 1 );
204 BOOST_CHECK_EQUAL( rtp->extension(), 1 );
205 BOOST_CHECK_EQUAL( rtp->csrcCount(), 0x03u );
206 BOOST_CHECK_EQUAL( rtp->marker(), 0 );
207 BOOST_CHECK_EQUAL( rtp->payloadType(), 0x02u );
208 // the static_cast is to silence gcc-3.3
209 BOOST_CHECK_EQUAL( static_cast<unsigned>(rtp->seqNumber()), 0x0304u );
210 BOOST_CHECK_EQUAL( rtp->timestamp(), 0x05060708u );
211 BOOST_CHECK_EQUAL( rtp->ssrc(), 0x090A0B0Cu );
213 BOOST_CHECK_EQUAL( rtp->paddingOctet(), 3 );
215 BOOST_CHECK_EQUAL( rtp->csrcList()[0], 0x11121314u );
216 BOOST_CHECK_EQUAL( rtp->csrcList()[1], 0x15161718u );
217 BOOST_CHECK_EQUAL( rtp->csrcList()[2], 0x191A1B1Cu );
219 BOOST_REQUIRE( rtp->next() );
220 BOOST_CHECK( rtp->next()->is<RTPUnknownExtensionPacket>() );
222 RTPUnknownExtensionPacket::ptr ex (rtp->next()->as<RTPUnknownExtensionPacket>());
223 BOOST_CHECK_EQUAL( static_cast<unsigned>(ex->proDef()), 0x2021u );
224 BOOST_CHECK_EQUAL( static_cast<unsigned>(ex->length()), 0x04u );
225 BOOST_CHECK_EQUAL( static_cast<unsigned>(ex->ext()[0]), 0x24u );
226 BOOST_CHECK_EQUAL( static_cast<unsigned>(ex->ext()[2]), 0x26u );
228 BOOST_REQUIRE( ex->next() );
229 DataPacket::ptr pay (ex->next()->as<DataPacket>());
231 BOOST_CHECK_EQUAL( pay->size(), 5u );
239 ///////////////////////////////cc.e////////////////////////////////////////
246 // c-file-style: "senf"
247 // indent-tabs-mode: nil
248 // ispell-local-dictionary: "american"