From 39e9f0542d6fab65d5500e90b639635605d38ced Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Sun, 30 Apr 2017 13:29:33 -0700 Subject: [PATCH] Move PDU utils into their own file --- include/tins/packet_writer.h | 2 +- include/tins/tcp_stream.h | 2 +- include/tins/utils.h | 59 +----------------- include/tins/utils/pdu_utils.h | 83 ++++++++++++++++++++++++++ src/CMakeLists.txt | 2 +- src/{utils.cpp => utils/pdu_utils.cpp} | 49 +-------------- 6 files changed, 90 insertions(+), 107 deletions(-) create mode 100644 include/tins/utils/pdu_utils.h rename src/{utils.cpp => utils/pdu_utils.cpp} (74%) diff --git a/include/tins/packet_writer.h b/include/tins/packet_writer.h index 79b7b8e..07fa53e 100644 --- a/include/tins/packet_writer.h +++ b/include/tins/packet_writer.h @@ -30,10 +30,10 @@ #ifndef TINS_PACKET_WRITER_H #define TINS_PACKET_WRITER_H -#include "utils.h" #include #include "macros.h" #include "cxxstd.h" +#include "utils/pdu_utils.h" #ifdef TINS_HAVE_PCAP #include diff --git a/include/tins/tcp_stream.h b/include/tins/tcp_stream.h index 0952176..eb0a838 100644 --- a/include/tins/tcp_stream.h +++ b/include/tins/tcp_stream.h @@ -38,9 +38,9 @@ #include #include "macros.h" #include "tcp.h" -#include "utils.h" #include "ip.h" #include "ip_address.h" +#include "utils/pdu_utils.h" #ifdef TINS_HAVE_PCAP diff --git a/include/tins/utils.h b/include/tins/utils.h index 249ec8c..ea13730 100644 --- a/include/tins/utils.h +++ b/include/tins/utils.h @@ -30,30 +30,14 @@ #ifndef TINS_UTILS_H #define TINS_UTILS_H -#include "macros.h" -#include -#include -#include "ip_address.h" -#include "ipv6_address.h" -#include "pdu.h" -#include "detail/type_traits.h" #include "utils/checksum_utils.h" #include "utils/frequency_utils.h" #include "utils/routing_utils.h" #include "utils/resolve_utils.h" - -// Fix for Windows interface define on combaseapi.h -#undef interface - +#include "utils/pdu_utils.h" + namespace Tins { -class NetworkInterface; -class PacketSender; -class PDU; -class IPv6Address; -template -class HWAddress; - /** * \brief Network utils namespace. * @@ -63,45 +47,6 @@ class HWAddress; */ namespace Utils { -/** - * \brief Converts a PDUType to a string. - * \param pduType The PDUType to be converted. - * \return A string representation, for example "DOT11_QOS_DATA". - */ -TINS_API std::string to_string(PDU::PDUType pduType); - -template -struct is_pdu { - template - static char test(typename U::PDUType*); - - template - static long test(...); - - static const bool value = sizeof(test(0)) == 1; -}; - -/** - * Returns the argument. - */ -inline PDU& dereference_until_pdu(PDU& pdu) { - return pdu; -} - -/** - * \brief Dereferences the parameter until a PDU is found. - * - * This function dereferences the parameter until a PDU object - * is found. When it's found, it is returned. - * - * \param value The parameter to be dereferenced. - */ -template -inline typename Internals::enable_if::value, PDU&>::type -dereference_until_pdu(T& value) { - return dereference_until_pdu(*value); -} - } // Utils } // Tins diff --git a/include/tins/utils/pdu_utils.h b/include/tins/utils/pdu_utils.h new file mode 100644 index 0000000..2e91217 --- /dev/null +++ b/include/tins/utils/pdu_utils.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2017, Matias Fontanini + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef TINS_PDU_UTILS_H +#define TINS_PDU_UTILS_H + +#include "../macros.h" +#include "../pdu.h" +#include "../detail/type_traits.h" + +namespace Tins { +namespace Utils { + +/** + * \brief Converts a PDUType to a string. + * \param pduType The PDUType to be converted. + * \return A string representation, for example "DOT11_QOS_DATA". + */ +TINS_API std::string to_string(PDU::PDUType pduType); + +template +struct is_pdu { + template + static char test(typename U::PDUType*); + + template + static long test(...); + + static const bool value = sizeof(test(0)) == 1; +}; + +/** + * Returns the argument. + */ +inline PDU& dereference_until_pdu(PDU& pdu) { + return pdu; +} + +/** + * \brief Dereferences the parameter until a PDU is found. + * + * This function dereferences the parameter until a PDU object + * is found. When it's found, it is returned. + * + * \param value The parameter to be dereferenced. + */ +template +inline typename Internals::enable_if::value, PDU&>::type +dereference_until_pdu(T& value) { + return dereference_until_pdu(*value); +} + +} // Utils +} // Tins + + +#endif // TINS_PDU_UTILS_H diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6279a2f..b4f1730 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -63,7 +63,6 @@ set(SOURCES tcp_ip/stream_identifier.cpp timestamp.cpp udp.cpp - utils.cpp dot11/dot11_base.cpp dot11/dot11_data.cpp dot11/dot11_mgmt.cpp @@ -76,6 +75,7 @@ set(SOURCES utils/frequency_utils.cpp utils/routing_utils.cpp utils/resolve_utils.cpp + utils/pdu_utils.cpp ) SET(PCAP_DEPENDENT_SOURCES diff --git a/src/utils.cpp b/src/utils/pdu_utils.cpp similarity index 74% rename from src/utils.cpp rename to src/utils/pdu_utils.cpp index d5f9300..a268539 100644 --- a/src/utils.cpp +++ b/src/utils/pdu_utils.cpp @@ -27,58 +27,13 @@ * */ -#include -#include -#include "macros.h" -#ifndef _WIN32 - #if defined(BSD) || defined(__FreeBSD_kernel__) - #include - #include - #include - #include - #include - #include - #include - #else - #include - #endif - #include - #include - #include - #ifdef __ANDROID_API__ - #include - #include - #endif -#else - #include - #include - #include - #undef interface -#endif -#include "utils.h" -#include "arp.h" -#include "ethernetII.h" -#include "network_interface.h" -#include "packet_sender.h" -#include "cxxstd.h" -#include "hw_address.h" -#include "memory_helpers.h" -#include "detail/smart_ptr.h" -#include "detail/smart_ptr.h" +#include "utils/pdu_utils.h" using std::string; -using std::istream; -using std::set; -using std::vector; -using std::back_inserter; -using std::runtime_error; - -using Tins::Memory::InputMemoryStream; -using Tins::Memory::OutputMemoryStream; namespace Tins { namespace Utils { - + string to_string(PDU::PDUType pduType) { #define ENUM_TEXT(p) case(PDU::p): return #p; switch (pduType){