diff --git a/include/packet_writer.h b/include/packet_writer.h index 58ab1d1..28258f5 100644 --- a/include/packet_writer.h +++ b/include/packet_writer.h @@ -34,6 +34,7 @@ #include #include #include "utils.h" +#include "cxxstd.h" namespace Tins { class PDU; @@ -65,6 +66,28 @@ public: */ PacketWriter(const std::string &file_name, LinkType lt); + #if TINS_IS_CXX11 + /** + * \brief Move constructor. + * + * Note that calling PacketWriter::write on an previously moved + * object will lead to undefined behaviour. + * + * \param rhs The PacketWriter to be moved. + */ + PacketWriter(PacketWriter &&rhs) noexcept; + + /** + * \brief Move assignment operator. + * + * Note that calling PacketWriter::write on an previously moved + * object will lead to undefined behaviour. + * + * \param rhs The PacketWriter to be moved. + */ + PacketWriter& operator=(PacketWriter &&rhs) noexcept; + #endif + /** * Destructor. */ diff --git a/include/tins.h b/include/tins.h index d34a202..50b266c 100644 --- a/include/tins.h +++ b/include/tins.h @@ -62,5 +62,6 @@ #include "packet.h" #include "timestamp.h" #include "sll.h" +#include "dhcpv6.h" #endif // TINS_TINS_H diff --git a/src/packet_writer.cpp b/src/packet_writer.cpp index 60ba3b7..daa5595 100644 --- a/src/packet_writer.cpp +++ b/src/packet_writer.cpp @@ -47,9 +47,25 @@ PacketWriter::PacketWriter(const std::string &file_name, LinkType lt) { } } +#if TINS_IS_CXX11 +PacketWriter::PacketWriter(PacketWriter &&rhs) noexcept { + *this = std::move(rhs); +} + +PacketWriter& PacketWriter::operator=(PacketWriter &&rhs) noexcept { + handle = 0; + dumper = 0; + std::swap(handle, rhs.handle); + std::swap(dumper, rhs.dumper); + return *this; +} +#endif + PacketWriter::~PacketWriter() { - pcap_dump_close(dumper); - pcap_close(handle); + if(dumper && handle) { + pcap_dump_close(dumper); + pcap_close(handle); + } } void PacketWriter::write(PDU &pdu) {