Hard refactor

This commit is contained in:
Andrea Bontempi 2014-01-25 15:39:16 +01:00
parent 196b865b08
commit 95157fd521
11 changed files with 305 additions and 166 deletions

View file

@ -1,74 +1,27 @@
cmake_minimum_required(VERSION 2.6)
project(ProjectRiddle)
# Project settings
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
set(SYSCONF_INSTALL_DIR
"/etc"
CACHE PATH "Path where to install configuration")
add_subdirectory(commons) # Commons libraries
add_subdirectory(config) # Configuration files
# Projects includes
include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR}/commons/)
set(RIDDLE_SRCS riddle/main.cpp)
set(CIGARETTE_SRCS cigarette/tools.cpp cigarette/tools.h cigarette/main.cpp)
set(RANGING_SRCS ranging/tools.h ranging/tools.cpp ranging/main.cpp)
set(PURSUER_SRCS pursuer/tools.h pursuer/tools.cpp pursuer/main.cpp)
set(BREEDER_SRCS breeder/tools.h breeder/tools.cpp breeder/main.cpp)
add_executable(ranging ${RANGING_SRCS})
add_executable(cigarette ${CIGARETTE_SRCS})
add_executable(riddle ${RIDDLE_SRCS})
add_executable(pursuer ${PURSUER_SRCS})
add_executable(breeder ${BREEDER_SRCS})
set(BOOST_LIBS program_options system regex thread)
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
find_library(LIBPCAP pcap)
find_package (Threads)
SET(CURSES_NEED_NCURSES TRUE)
find_package(Curses)
# Build riddle
target_link_libraries(riddle ${Boost_LIBRARIES})
target_link_libraries(riddle ${LIBPCAP})
target_link_libraries(riddle dump)
# Build cigarette
target_link_libraries(cigarette ${Boost_LIBRARIES})
target_link_libraries(cigarette ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(cigarette network)
target_link_libraries(cigarette dump)
# Build ranging
target_link_libraries(ranging ${Boost_LIBRARIES})
target_link_libraries(ranging ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(ranging ${CURSES_LIBRARY})
target_link_libraries(ranging network)
# Build pursuer
target_link_libraries(pursuer ${Boost_LIBRARIES})
target_link_libraries(pursuer ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(pursuer network)
target_link_libraries(pursuer dump)
# Build breeder
target_link_libraries(breeder ${Boost_LIBRARIES})
target_link_libraries(breeder ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(breeder network)
target_link_libraries(breeder dump)
# Install binaries
install(TARGETS riddle DESTINATION sbin)
install(TARGETS breeder cigarette pursuer ranging DESTINATION bin)
# Project modules (Comment for disable, pay attention to dependencies)
add_subdirectory(commons) # Commons libraries
add_subdirectory(config) # Configuration files
add_subdirectory(riddle) # Riddles files
add_subdirectory(breeder) # Breeder files
add_subdirectory(pursuer) # Pursuer files
add_subdirectory(cigarette) # Cigarette files
add_subdirectory(ranging) # Ranging files
# Generate packages
INCLUDE(InstallRequiredSystemLibraries)
@ -83,4 +36,4 @@ set(CPACK_PACKAGE_VERSION_PATCH "0")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}")
set(CPACK_PACKAGE_CONTACT "Andrea Bontempi <andreabont@yahoo.it>")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Andrea Bontempi")
INCLUDE(CPack)
INCLUDE(CPack)

25
breeder/CMakeLists.txt Normal file
View file

@ -0,0 +1,25 @@
cmake_minimum_required(VERSION 2.6)
project (breeder)
set(BREEDER_SRCS
${PROJECT_SOURCE_DIR}/tools.h
${PROJECT_SOURCE_DIR}/tools.cpp
${PROJECT_SOURCE_DIR}/main.cpp
)
add_executable(breeder ${BREEDER_SRCS})
# Include libraries
set(BOOST_LIBS program_options system regex thread)
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
find_package(Threads)
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
# Build breeder
target_link_libraries(breeder ${Boost_LIBRARIES})
target_link_libraries(breeder ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(breeder network)
target_link_libraries(breeder dump)
# Install breeder
install(TARGETS breeder DESTINATION bin)

25
cigarette/CMakeLists.txt Normal file
View file

@ -0,0 +1,25 @@
cmake_minimum_required(VERSION 2.6)
project (cigarette)
set(CIGARETTE_SRCS
${PROJECT_SOURCE_DIR}/tools.h
${PROJECT_SOURCE_DIR}/tools.cpp
${PROJECT_SOURCE_DIR}/main.cpp
)
add_executable(cigarette ${CIGARETTE_SRCS})
# Include libraries
set(BOOST_LIBS program_options system regex thread)
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
find_package(Threads)
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
# Build cigarette
target_link_libraries(cigarette ${Boost_LIBRARIES})
target_link_libraries(cigarette ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(cigarette network)
target_link_libraries(cigarette dump)
# Install cigarette
install(TARGETS cigarette DESTINATION bin)

26
pursuer/CMakeLists.txt Normal file
View file

@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 2.6)
project (pursuer)
set(PURSUER_SRCS
${PROJECT_SOURCE_DIR}/tools.h
${PROJECT_SOURCE_DIR}/tools.cpp
${PROJECT_SOURCE_DIR}/main.cpp
)
add_executable(pursuer ${PURSUER_SRCS})
# Include libraries
set(BOOST_LIBS program_options system regex thread)
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
find_package(Threads)
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
# Build pursuer
target_link_libraries(pursuer ${Boost_LIBRARIES})
target_link_libraries(pursuer ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(pursuer network)
target_link_libraries(pursuer dump)
# Install pursuer
install(TARGETS pursuer DESTINATION bin)

31
ranging/CMakeLists.txt Normal file
View file

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 2.6)
project (ranging)
set(RANGING_SRCS
${PROJECT_SOURCE_DIR}/thread.h
${PROJECT_SOURCE_DIR}/thread.cpp
${PROJECT_SOURCE_DIR}/thread_printer.cpp
${PROJECT_SOURCE_DIR}/thread_scribe.cpp
${PROJECT_SOURCE_DIR}/tools.h
${PROJECT_SOURCE_DIR}/tools.cpp
${PROJECT_SOURCE_DIR}/main.cpp
)
add_executable(ranging ${RANGING_SRCS})
# Include libraries
set(CURSES_NEED_NCURSES TRUE)
find_package(Curses)
set(BOOST_LIBS program_options system regex thread)
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
find_package(Threads)
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
# Build ranging
target_link_libraries(ranging ${Boost_LIBRARIES})
target_link_libraries(ranging ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(ranging ${CURSES_LIBRARY})
target_link_libraries(ranging network)
# Install ranging
install(TARGETS ranging DESTINATION bin)

View file

@ -46,6 +46,7 @@
#include "commons/macaddress.h"
#include "commons/packet.h"
#include "tools.h"
#include "thread.h"
#define TIMETOLIVE 120
@ -63,15 +64,6 @@ void exit_signal ( int id ) {
}
#endif
boost::mutex mymutex;
int maxttl = TIMETOLIVE;
/** The thread "printer" manages the display. */
void printer(list<device> *found, win_size winxy);
/** The thread "scribe" listens to incoming packets. */
void scribe(list<device> *found);
int main(int argc, char **argv) {
#ifdef __linux__
@ -104,6 +96,8 @@ int main(int argc, char **argv) {
cout << desc << "\n";
return EXIT_SUCCESS;
}
int maxttl = TIMETOLIVE;
if (vm.count("ttl")) {
maxttl = vm["ttl"].as<int>();
@ -132,7 +126,7 @@ int main(int argc, char **argv) {
list<device> found;
boost::thread scribe_t(scribe, &found);
boost::thread printer_t(printer, &found, winxy);
boost::thread printer_t(printer, &found, winxy, maxttl);
scribe_t.join();
printer_t.join();
@ -140,100 +134,3 @@ int main(int argc, char **argv) {
endwin();
return EXIT_SUCCESS;
}
void printer(list<device> *found, win_size winxy) {
static boost::posix_time::seconds delay(1);
while (1) {
boost::mutex::scoped_lock mylock(mymutex);
clear();
setHead(winxy);
int countLine = 1;
list<device>::iterator r = found->begin();
while (r != found->end()) {
if (time(NULL) > r->getEpoch() + maxttl) {
list<device>::iterator ex = r;
r++;
found->erase(ex);
} else {
printLine(winxy, countLine, maxttl, r);
r++;
}
countLine++;
}
mylock.unlock();
boost::this_thread::sleep(delay);
}
}
void scribe(list<device> *found) {
string r_packet;
getline(cin, r_packet);
if (cin.eof()) return;
while (1) {
try {
shared_ptr<packet> pkg = packet::factory ( r_packet );
if (pkg->isArp()) {
boost::mutex::scoped_lock mylock(mymutex);
shared_ptr<ARPpacket> pkg_arp = dynamic_pointer_cast< ARPpacket > ( pkg );
bool isFound = false;
list<device>::iterator p = found->begin();
while (p != found->end()) {
if (p->getMacAddress() == pkg_arp->getSenderMac() && p->getIpAddress() == pkg_arp->getSenderIp()) {
p->setEpoch(pkg_arp->getEpoch());
isFound = true;
break;
}
p++;
}
if (!isFound) {
device newDevice(pkg_arp->getSenderMac(), pkg_arp->getSenderIp());
found->push_back(newDevice);
}
mylock.unlock();
}
getline(cin, r_packet);
if (cin.eof()) return;
} catch (packet::Overflow) {
cerr << "Overflow! :-P" << endl;
endwin();
return;
}
}
}

10
ranging/thread.cpp Normal file
View file

@ -0,0 +1,10 @@
/*
* File: thread.h
* Author: andreabont
*
* Created on 25 gennaio 2014, 10.44
*/
#include "thread.h"
boost::mutex mymutex;

24
ranging/thread.h Normal file
View file

@ -0,0 +1,24 @@
/*
* File: thread.h
* Author: andreabont
*
* Created on 25 gennaio 2014, 10.44
*/
#ifndef THREAD_H
#define THREAD_H
#include <list>
#include <boost/thread/thread.hpp>
#include "tools.h"
extern boost::mutex mymutex;
/** The thread "printer" manages the display. */
void printer(std::list<device> *found, win_size winxy, int maxttl);
/** The thread "scribe" listens to incoming packets. */
void scribe(std::list<device> *found);
#endif /* THREAD_H */

View file

@ -0,0 +1,54 @@
/*
* File: thread_printer.cpp
* Author: andreabont
*
* Created on 25 gennaio 2014, 10.47
*/
#include <list>
#include <curses.h>
#include "thread.h"
using namespace std;
void printer(list<device> *found, win_size winxy, int maxttl) {
static boost::posix_time::seconds delay(1);
while (1) {
boost::mutex::scoped_lock printer_lock(mymutex);
clear();
setHead(winxy);
int countLine = 1;
list<device>::iterator r = found->begin();
while (r != found->end()) {
if (time(NULL) > r->getEpoch() + maxttl) {
list<device>::iterator ex = r;
r++;
found->erase(ex);
} else {
printLine(winxy, countLine, maxttl, r);
r++;
}
countLine++;
}
printer_lock.unlock();
boost::this_thread::sleep(delay);
}
}

72
ranging/thread_scribe.cpp Normal file
View file

@ -0,0 +1,72 @@
/*
* File: thread_scribe.cpp
* Author: andreabont
*
* Created on 25 gennaio 2014, 10.45
*/
#include <iostream>
#include <memory>
#include <curses.h>
#include "thread.h"
#include "commons/packet.h"
#include "commons/macaddress.h"
using namespace std;
using namespace network;
void scribe(list<device> *found) {
string r_packet;
getline(cin, r_packet);
if (cin.eof()) return;
while (1) {
try {
shared_ptr<packet> pkg = packet::factory ( r_packet );
if (pkg->isArp()) {
boost::mutex::scoped_lock scribe_lock(mymutex);
shared_ptr<ARPpacket> pkg_arp = dynamic_pointer_cast< ARPpacket > ( pkg );
bool isFound = false;
list<device>::iterator p = found->begin();
while (p != found->end()) {
if (p->getMacAddress() == pkg_arp->getSenderMac() && p->getIpAddress() == pkg_arp->getSenderIp()) {
p->setEpoch(pkg_arp->getEpoch());
isFound = true;
break;
}
p++;
}
if (!isFound) {
device newDevice(pkg_arp->getSenderMac(), pkg_arp->getSenderIp());
found->push_back(newDevice);
}
scribe_lock.unlock();
}
getline(cin, r_packet);
if (cin.eof()) return;
} catch (packet::Overflow) {
cerr << "Overflow! :-P" << endl;
endwin();
return;
}
}
}

22
riddle/CMakeLists.txt Normal file
View file

@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 2.6)
project (riddle)
set(RIDDLE_SRCS
${PROJECT_SOURCE_DIR}/main.cpp
)
add_executable(riddle ${RIDDLE_SRCS})
# Include libraries
find_library(LIBPCAP pcap)
set(BOOST_LIBS program_options system regex thread)
find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
include_directories("${PROJECT_SOURCE_DIR}/../commons/")
# Build riddle
target_link_libraries(riddle ${Boost_LIBRARIES})
target_link_libraries(riddle ${LIBPCAP})
target_link_libraries(riddle dump)
# Install riddle
install(TARGETS riddle DESTINATION sbin)