// $Id$
//
// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Thorsten Horstmann <tho@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// Custom includes
#include "TransportPacket.hh"
-#include <boost/test/auto_unit_test.hpp>
+#include "../../Utils/auto_unit_test.hh"
#include <boost/test/test_tools.hpp>
+#include <senf/Utils/hexdump.hh>
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
using namespace senf;
-BOOST_AUTO_UNIT_TEST(transportPacket_packet)
+BOOST_AUTO_UNIT_TEST(transportPacket_parse)
{
- // TransportStream-Packet containing a MPE encoded section with an IPv6 ping packet,
+ // TransportStream-Packet containing a ULE encoded IPv6 ping packet,
// captured with dvbsnoop
unsigned char data[] = {
- 0x47, 0x41, 0x0f, 0x1e, 0x00, 0x80, 0x4c, 0x86,
- 0xdd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11,
- 0x40, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x48, 0x7c, 0x7e, 0xff, 0xfe, 0x23, 0x68,
- 0xaf, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x04 ,0x02, 0x8c, 0x02, 0x8c, 0x00, 0x20, 0x58,
- 0xe1, 0x11, 0x05, 0x12, 0x67, 0x06, 0x2f, 0x01,
- 0x00, 0x20, 0x01, 0x06, 0x38, 0x04, 0x09, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
- 0x00, 0x1d, 0xc4, 0xe8, 0xc1, 0xff, 0xff, 0xff,
+ // Transport Packet Header
+ 0x47, 0x41, 0x0f, 0x1e,
+ // Payload Pointer
+ 0x00,
+ // SNDU Header
+ 0x80, 0x4c, 0x86, 0xdd,
+ // IPv6 Packet
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x40,
+ 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x48, 0x7c, 0x7e, 0xff, 0xfe, 0x23, 0x68, 0xaf,
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,
+ 0x02, 0x8c, 0x02, 0x8c, 0x00, 0x20, 0x58, 0xe1,
+ 0x11, 0x05, 0x12, 0x67, 0x06, 0x2f, 0x01, 0x00,
+ 0x20, 0x01, 0x06, 0x38, 0x04, 0x09, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ // SNDU footer (crc-32)
+ 0x1d, 0xc4, 0xe8, 0xc1,
+ // Transport Packet stuffing
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
- senf::TransportPacket p (senf::TransportPacket::create(data));
+ TransportPacket p (TransportPacket::create(data));
- BOOST_CHECK_EQUAL( p->sync_byte(), TRANSPORT_PACKET_SYNC_BYTE );
- BOOST_CHECK( ! p->transport_error_indicator() );
- BOOST_CHECK( p->pusi() );
- BOOST_CHECK( ! p->transport_priority() );
- BOOST_CHECK_EQUAL( p->pid(), 0x010fu );
- BOOST_CHECK_EQUAL( p->transport_scrmbl_ctrl(), 0x0u );
- BOOST_CHECK_EQUAL( p->adaptation_field_ctrl(), 0x1u );
- BOOST_CHECK_EQUAL( p->continuity_counter(), 0x0eu );
+ BOOST_CHECK_EQUAL( p->sync_byte(), TransportPacketType::SYNC_BYTE+0 );
+ BOOST_CHECK( ! p->transport_error_indicator() );
+ BOOST_CHECK( p->pusi() );
+ BOOST_CHECK( ! p->transport_priority() );
+ BOOST_CHECK_EQUAL( p->pid(), 0x010fu );
+ BOOST_CHECK_EQUAL( p->transport_scrmbl_ctrl(), 0x0u );
+ BOOST_CHECK_EQUAL( p->adaptation_field_ctrl(), 0x1u );
+ BOOST_CHECK_EQUAL( p->continuity_counter(), 0x0eu );
+ BOOST_CHECK_EQUAL( p->pointer_field(), 0x0u );
+}
+
+
+BOOST_AUTO_UNIT_TEST(transportPacket_create_with_pusi)
+{
+ TransportPacket ts_packet (TransportPacket::create());
+ ts_packet->setPUSI(true);
+ ts_packet->pid() = 0x010fu;
+ ts_packet->continuity_counter() = 0x0eu;
+
+ unsigned char payload_data[] = { // see test above
+ // SNDU Header
+ 0x80, 0x4c, 0x86, 0xdd,
+ // IPv6 Packet
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x40,
+ 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x48, 0x7c, 0x7e, 0xff, 0xfe, 0x23, 0x68, 0xaf,
+ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,
+ 0x02, 0x8c, 0x02, 0x8c, 0x00, 0x20, 0x58, 0xe1,
+ 0x11, 0x05, 0x12, 0x67, 0x06, 0x2f, 0x01, 0x00,
+ 0x20, 0x01, 0x06, 0x38, 0x04, 0x09, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ // SNDU footer (crc-32)
+ 0x1d, 0xc4, 0xe8, 0xc1
+ };
+ senf::DataPacket payload (senf::DataPacket::createAfter( ts_packet, payload_data));
+
+ //TransportPacketType::addStuffingPacketAfter( ts_packet);
+
+ //senf::hexdump(ts_packet.data().begin(), ts_packet.data().end(), std::cout);
}
///////////////////////////////cc.e////////////////////////////////////////