static void callback()

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");
    }