1
0
Fork 0
mirror of https://github.com/pavel-odintsov/fastnetmon synced 2024-05-03 22:26:30 +02:00
fastnetmon-rewritten/src/fixed_size_packet_storage.hpp

45 lines
1.4 KiB
C++

#pragma once
#include "fastnetmon_pcap_format.hpp"
// We are using this class for storing packet meta information with their payload into fixed size memory region
class fixed_size_packet_storage_t {
public:
fixed_size_packet_storage_t() = default;
fixed_size_packet_storage_t(void* payload_pointer, unsigned int captured_length, unsigned int real_packet_length) {
// TODO: performance killer! Check it!
bool we_do_timestamps = true;
struct timeval current_time;
current_time.tv_sec = 0;
current_time.tv_usec = 0;
if (we_do_timestamps) {
gettimeofday(&current_time, NULL);
}
packet_metadata.ts_sec = current_time.tv_sec;
packet_metadata.ts_usec = current_time.tv_usec;
// Store full length of packet
packet_metadata.orig_len = real_packet_length;
packet_metadata.incl_len = captured_length;
// Copy only first 2048 bytes of data
unsigned packet_length_for_storing = captured_length;
if (captured_length > 2048) {
packet_length_for_storing = 2048;
}
// Copy data into internal storage
memcpy(packet_payload, payload_pointer, packet_length_for_storing);
}
// Some useful information about this packet
fastnetmon_pcap_pkthdr_t packet_metadata;
// Packet itself. Let's zeroify packet payload
uint8_t packet_payload[2048] = {};
};