mirror of
https://github.com/pavel-odintsov/fastnetmon
synced 2024-05-03 22:26:30 +02:00
45 lines
1.4 KiB
C++
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(¤t_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] = {};
|
|
};
|