diff --git a/CMakeLists.txt b/CMakeLists.txt index 1cb9978..52e5ad9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,27 @@ -cmake_minimum_required(VERSION 2.8.1) -project(libtins) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.1) +PROJECT(libtins) + +# Compile in release mode by default +IF(NOT CMAKE_BUILD_TYPE) + MESSAGE(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") + SET(CMAKE_BUILD_TYPE RelWithDebInfo) +ELSE(NOT CMAKE_BUILD_TYPE) + MESSAGE(STATUS "Using specified '${CMAKE_BUILD_TYPE}' build type.") +ENDIF(NOT CMAKE_BUILD_TYPE) + +# Default compilation settings +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") + +# Build output checks +OPTION(LIBTINS_BUILD_SHARED "Build libtins as a shared library." ON) +IF(LIBTINS_BUILD_SHARED) + MESSAGE(STATUS "Build will generate a shared library.") + MESSAGE(STATUS "Use LIBTINS_BUILD_SHARED=0 to perform a static build") + SET(LIBTINS_TYPE SHARED) +ELSE(LIBTINS_BUILD_SHARED) + MESSAGE(STATUS "Build will generate a static library.") + SET(LIBTINS_TYPE STATIC) +ENDIF(LIBTINS_BUILD_SHARED) # The version number. SET(LIBTINS_VERSION_MAJOR 3) @@ -9,21 +31,21 @@ SET(LIBTINS_CPP_VERSION "${LIBTINS_VERSION_MAJOR}.${LIBTINS_VERSION_MINOR}") # Required Packages SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") +# Look for libpcap FIND_PACKAGE(PCAP REQUIRED) -# Default compilation settings -SET(CMAKE_CXX_FLAGS "-Wall ${CXX11_COMPILER_FLAGS}") - # Compilation options OPTION(LIBTINS_ENABLE_CXX11 "Compile libtins with c++11 features" OFF) IF(LIBTINS_ENABLE_CXX11) SET(HAVE_CXX11 ON) INCLUDE(CheckCXX11Features) - IF(CXX11_COMPILER_FLAGS AND HAS_CXX11_NULLPTR AND HAS_CXX11_AUTO) + IF(CXX11_COMPILER_FLAGS AND HAS_CXX11_NULLPTR AND HAS_CXX11_RVALUE_REFERENCES) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}") - ELSE(CXX11_COMPILER_FLAGS AND HAS_CXX11_NULLPTR AND HAS_CXX11_AUTO) - MESSAGE(FATAL_ERROR "C++11 features requested but the compiler does not support them!") - ENDIF(CXX11_COMPILER_FLAGS AND HAS_CXX11_NULLPTR AND HAS_CXX11_AUTO) + ELSE(CXX11_COMPILER_FLAGS AND HAS_CXX11_NULLPTR AND HAS_CXX11_RVALUE_REFERENCES) + MESSAGE(FATAL_ERROR "C++11 features requested but the compiler does not support them.") + ENDIF(CXX11_COMPILER_FLAGS AND HAS_CXX11_NULLPTR AND HAS_CXX11_RVALUE_REFERENCES) +ELSE(LIBTINS_ENABLE_CXX11) + MESSAGE(STATUS "Disabling C++11 features. Use LIBTINS_ENABLE_CXX11=1 to enable them.") ENDIF(LIBTINS_ENABLE_CXX11) OPTION(LIBTINS_ENABLE_DOT11 "Compile libtins with IEEE 802.11 support" ON) @@ -47,14 +69,16 @@ CONFIGURE_FILE( ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(src) +ENABLE_TESTING() # Add all targets to the build-tree export set EXPORT(TARGETS tins FILE "${PROJECT_BINARY_DIR}/libtinsTargets.cmake") + # Export the package for use from the build-tree # (this registers the build-tree with a global CMake-registry) EXPORT(PACKAGE libtins) -# Create the jsoncppConfig.cmake and libtinsConfigVersion.cmake files +# Create the libtinsConfig.cmake and libtinsConfigVersion.cmake files # for the build tree SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include") CONFIGURE_FILE(libtinsConfig.cmake.in diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 58baacb..3737ced 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,2 +1,7 @@ FILE(GLOB INCLUDE_FILES "*.h") -INSTALL(FILES ${INCLUDE_FILES} DESTINATION include/tins) \ No newline at end of file +INSTALL( + FILES ${INCLUDE_FILES} + DESTINATION include/tins + COMPONENT Headers +) +ADD_SUBDIRECTORY(dot11) diff --git a/include/dot11/CMakeLists.txt b/include/dot11/CMakeLists.txt new file mode 100644 index 0000000..c736681 --- /dev/null +++ b/include/dot11/CMakeLists.txt @@ -0,0 +1,6 @@ +FILE(GLOB INCLUDE_FILES "*.h") +INSTALL( + FILES ${INCLUDE_FILES} + DESTINATION include/tins/dot11 + COMPONENT Headers +) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c6176a3..3edeb21 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,132 +1,57 @@ -OPTION(LIBTINS_BUILD_SHARED "Build libtins as a shared library." ON) -IF(LIBTINS_BUILD_SHARED) - SET(LIBTINS_TYPE SHARED) -ELSE(LIBTINS_BUILD_SHARED) - SET(LIBTINS_TYPE STATIC) -ENDIF(LIBTINS_BUILD_SHARED) - - SET(LIBTINS_INCLUDE_DIR ../include) INCLUDE_DIRECTORIES(${LIBTINS_INCLUDE_DIR}) -SET(PUBLIC_HEADERS - ${LIBTINS_INCLUDE_DIR}/internals.h - ${LIBTINS_INCLUDE_DIR}/dhcpv6.h - ${LIBTINS_INCLUDE_DIR}/dot11.h - ${LIBTINS_INCLUDE_DIR}/dot1q.h - ${LIBTINS_INCLUDE_DIR}/dot3.h - ${LIBTINS_INCLUDE_DIR}/small_uint.h - ${LIBTINS_INCLUDE_DIR}/ip.h - ${LIBTINS_INCLUDE_DIR}/ipsec.h - ${LIBTINS_INCLUDE_DIR}/eapol.h - ${LIBTINS_INCLUDE_DIR}/tcp_stream.h - ${LIBTINS_INCLUDE_DIR}/pppoe.h - ${LIBTINS_INCLUDE_DIR}/handshake_capturer.h - ${LIBTINS_INCLUDE_DIR}/ipv6.h - ${LIBTINS_INCLUDE_DIR}/icmpv6.h - ${LIBTINS_INCLUDE_DIR}/ieee802_3.h - ${LIBTINS_INCLUDE_DIR}/endianness.h - ${LIBTINS_INCLUDE_DIR}/rsn_information.h - ${LIBTINS_INCLUDE_DIR}/loopback.h - ${LIBTINS_INCLUDE_DIR}/ethernetII.h - ${LIBTINS_INCLUDE_DIR}/crypto.h - ${LIBTINS_INCLUDE_DIR}/packet.h - ${LIBTINS_INCLUDE_DIR}/llc.h - ${LIBTINS_INCLUDE_DIR}/ip_reassembler.h - ${LIBTINS_INCLUDE_DIR}/icmp.h - ${LIBTINS_INCLUDE_DIR}/hw_address.h - ${LIBTINS_INCLUDE_DIR}/packet_writer.h - ${LIBTINS_INCLUDE_DIR}/macros.h - ${LIBTINS_INCLUDE_DIR}/arp.h - ${LIBTINS_INCLUDE_DIR}/ip_address.h - ${LIBTINS_INCLUDE_DIR}/pdu.h - ${LIBTINS_INCLUDE_DIR}/packet_sender.h - ${LIBTINS_INCLUDE_DIR}/bootp.h - ${LIBTINS_INCLUDE_DIR}/network_interface.h - ${LIBTINS_INCLUDE_DIR}/sll.h - ${LIBTINS_INCLUDE_DIR}/ppi.h - ${LIBTINS_INCLUDE_DIR}/radiotap.h - ${LIBTINS_INCLUDE_DIR}/dns.h - ${LIBTINS_INCLUDE_DIR}/rawpdu.h - ${LIBTINS_INCLUDE_DIR}/sniffer.h - ${LIBTINS_INCLUDE_DIR}/snap.h - ${LIBTINS_INCLUDE_DIR}/pdu_cacher.h - ${LIBTINS_INCLUDE_DIR}/dhcp.h - ${LIBTINS_INCLUDE_DIR}/timestamp.h - ${LIBTINS_INCLUDE_DIR}/tcp.h - ${LIBTINS_INCLUDE_DIR}/pdu_option.h - ${LIBTINS_INCLUDE_DIR}/tins.h - ${LIBTINS_INCLUDE_DIR}/udp.h - ${LIBTINS_INCLUDE_DIR}/ipv6_address.h - ${LIBTINS_INCLUDE_DIR}/constants.h - ${LIBTINS_INCLUDE_DIR}/utils.h - ${LIBTINS_INCLUDE_DIR}/cxxstd.h - ${LIBTINS_INCLUDE_DIR}/stp.h - ${LIBTINS_INCLUDE_DIR}/exceptions.h - ${LIBTINS_INCLUDE_DIR}/address_range.h - ${LIBTINS_INCLUDE_DIR}/pdu_allocator.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_base.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_beacon.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_data.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_mgmt.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_assoc.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_auth.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_probe.h - ${LIBTINS_INCLUDE_DIR}/dot11/dot11_control.h - ${LIBTINS_INCLUDE_DIR}/config.h -) - ADD_LIBRARY( - tins ${LIBTINS_TYPE} - arp.cpp - bootp.cpp - handshake_capturer.cpp - stp.cpp - pppoe.cpp - crypto.cpp - dhcp.cpp - dhcpv6.cpp - dns.cpp - dot3.cpp - dot1q.cpp - eapol.cpp - ethernetII.cpp - icmp.cpp - icmpv6.cpp - internals.cpp - ip_reassembler.cpp - ip.cpp - ip_address.cpp - ipv6.cpp - ipv6_address.cpp - ipsec.cpp - llc.cpp - loopback.cpp - network_interface.cpp - packet_sender.cpp - packet_writer.cpp - ppi.cpp - pdu.cpp - radiotap.cpp - address_range.cpp - rawpdu.cpp - rsn_information.cpp - sll.cpp - snap.cpp - sniffer.cpp - tcp.cpp - tcp_stream.cpp - udp.cpp - utils.cpp - dot11/dot11_base.cpp - dot11/dot11_data.cpp - dot11/dot11_mgmt.cpp - dot11/dot11_beacon.cpp - dot11/dot11_assoc.cpp - dot11/dot11_auth.cpp - dot11/dot11_probe.cpp - dot11/dot11_control.cpp + tins ${LIBTINS_TYPE} + arp.cpp + bootp.cpp + handshake_capturer.cpp + stp.cpp + pppoe.cpp + crypto.cpp + dhcp.cpp + dhcpv6.cpp + dns.cpp + dot3.cpp + dot1q.cpp + eapol.cpp + ethernetII.cpp + icmp.cpp + icmpv6.cpp + internals.cpp + ip_reassembler.cpp + ip.cpp + ip_address.cpp + ipv6.cpp + ipv6_address.cpp + ipsec.cpp + llc.cpp + loopback.cpp + network_interface.cpp + packet_sender.cpp + packet_writer.cpp + ppi.cpp + pdu.cpp + radiotap.cpp + address_range.cpp + rawpdu.cpp + rsn_information.cpp + sll.cpp + snap.cpp + sniffer.cpp + tcp.cpp + tcp_stream.cpp + udp.cpp + utils.cpp + dot11/dot11_base.cpp + dot11/dot11_data.cpp + dot11/dot11_mgmt.cpp + dot11/dot11_beacon.cpp + dot11/dot11_assoc.cpp + dot11/dot11_auth.cpp + dot11/dot11_probe.cpp + dot11/dot11_control.cpp ) TARGET_LINK_LIBRARIES(tins pcap) @@ -141,5 +66,5 @@ INSTALL( EXPORT libtinsTargets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib - PUBLIC_HEADER DESTINATION include/tins COMPONENT dev + COMPONENT dev ) diff --git a/src/dhcpv6.cpp b/src/dhcpv6.cpp index 6c6abf7..e5f8d47 100644 --- a/src/dhcpv6.cpp +++ b/src/dhcpv6.cpp @@ -368,8 +368,6 @@ void DHCPv6::rapid_commit() { } void DHCPv6::user_class(const user_class_type &value) { - typedef user_class_type::data_type::const_iterator iterator; - std::vector buffer; Internals::class_option_data2option(value.data.begin(), value.data.end(), buffer); add_option(