shrunk cpp code
This commit is contained in:
parent
36e0b008c2
commit
f72a54d4f9
43
cpp/main.cpp
43
cpp/main.cpp
@ -16,19 +16,14 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
struct Packet {
|
struct Packet {
|
||||||
size_t len;
|
size_t len; uint8_t* data;
|
||||||
uint8_t* data;
|
|
||||||
|
|
||||||
Packet(const uint8_t *input, size_t num_bytes) {
|
Packet(const uint8_t *input, size_t num_bytes) {
|
||||||
len = num_bytes;
|
len = num_bytes; data = new uint8_t[len];
|
||||||
|
|
||||||
data = new uint8_t[len];
|
|
||||||
std::memcpy(data, input, len);
|
std::memcpy(data, input, len);
|
||||||
};
|
};
|
||||||
|
|
||||||
~Packet() {
|
~Packet() { delete[] data; }
|
||||||
delete[] data;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] std::string print() const {
|
[[nodiscard]] std::string print() const {
|
||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
@ -42,18 +37,13 @@ struct Packet {
|
|||||||
|
|
||||||
template <class T> class ThreadSafeQueue {
|
template <class T> class ThreadSafeQueue {
|
||||||
std::queue<T> _queue = std::queue<T>();
|
std::queue<T> _queue = std::queue<T>();
|
||||||
|
std::mutex _mutex; std::condition_variable _cond;
|
||||||
std::mutex _mutex;
|
|
||||||
std::condition_variable _cond;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ThreadSafeQueue() = default;
|
ThreadSafeQueue() = default;
|
||||||
|
|
||||||
void push(T item) {
|
void push(T item) {
|
||||||
_mutex.lock();
|
_mutex.lock(); _queue.push(item); _mutex.unlock();
|
||||||
_queue.push(item);
|
|
||||||
_mutex.unlock();
|
|
||||||
|
|
||||||
_cond.notify_one();
|
_cond.notify_one();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,11 +69,8 @@ int tun_alloc(const char *dev, short flags) {
|
|||||||
perror("Opening /dev/net/tun");
|
perror("Opening /dev/net/tun");
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
memset(&ifr, 0, sizeof(ifr));
|
||||||
|
|
||||||
ifr.ifr_flags = flags;
|
ifr.ifr_flags = flags;
|
||||||
|
|
||||||
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
|
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
|
||||||
|
|
||||||
if( (err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0 ) {
|
if( (err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0 ) {
|
||||||
@ -95,12 +82,6 @@ int tun_alloc(const char *dev, short flags) {
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
volatile sig_atomic_t stop = 0;
|
|
||||||
|
|
||||||
void interrupt_handler(int signum) {
|
|
||||||
stop = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::mutex print_lock;
|
std::mutex print_lock;
|
||||||
|
|
||||||
void consumer(const int index, ThreadSafeQueue<Packet*> *queue) {
|
void consumer(const int index, ThreadSafeQueue<Packet*> *queue) {
|
||||||
@ -118,10 +99,7 @@ void consumer(const int index, ThreadSafeQueue<Packet*> *queue) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
signal(SIGINT, interrupt_handler);
|
|
||||||
|
|
||||||
int tun = tun_alloc("nc%d", IFF_TUN);
|
int tun = tun_alloc("nc%d", IFF_TUN);
|
||||||
|
|
||||||
auto queue = new ThreadSafeQueue<Packet*>();
|
auto queue = new ThreadSafeQueue<Packet*>();
|
||||||
|
|
||||||
std::thread threads[10];
|
std::thread threads[10];
|
||||||
@ -134,19 +112,12 @@ int main() {
|
|||||||
|
|
||||||
std::thread reader([tun, queue]() {
|
std::thread reader([tun, queue]() {
|
||||||
uint8_t buffer[1500];
|
uint8_t buffer[1500];
|
||||||
while (!stop) {
|
while (true) {
|
||||||
int num_bytes = read(tun, &buffer, 1500);
|
int num_bytes = read(tun, &buffer, 1500);
|
||||||
if (num_bytes != 0) {
|
if (num_bytes != 0) {
|
||||||
auto *packet = new Packet(buffer, num_bytes);
|
auto *packet = new Packet(buffer, num_bytes);
|
||||||
queue->push(packet);
|
queue->push(packet);
|
||||||
} else {
|
}
|
||||||
stop = 1;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
while (!stop) pause();
|
|
||||||
|
|
||||||
std::cout << "terminating..." << std::endl;
|
|
||||||
std::terminate();
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user