in src/filtration/filtration_processor.h [428:469]
static void callback(u_char* user, const struct pcap_pkthdr* pkthdr, const u_char* packet)
{
PROF; // Calc how much time was spent in this func
auto processor = reinterpret_cast<FiltrationProcessor*>(user);
PacketInfo info(pkthdr, packet, processor->datalink);
if(info.tcp)
{
if(pkthdr->caplen != pkthdr->len)
{
LOGONCE(
"pcap packet was truncated by snaplen option this "
"packed won't correclty reassembled to TCP stream");
return;
}
if(info.ipv4) // Ethernet:IPv4:TCP
{
return processor->ipv4_tcp_sessions.collect_packet(info);
}
else if(info.ipv6) // Ethernet:IPv6:TCP
{
return processor->ipv6_tcp_sessions.collect_packet(info);
}
}
else if(info.udp)
{
if(info.ipv4) // Ethernet:IPv4:UDP
{
return processor->ipv4_udp_sessions.collect_packet(info);
}
else if(info.ipv6) // Ethernet:IPv6:UDP
{
return processor->ipv6_udp_sessions.collect_packet(info);
}
}
LOGONCE(
"only following stack of protocol is supported: "
"Ethernet II:IPv4|IPv6(except additional fragments):TCP|UDP");
}