File indexing completed on 2024-06-23 05:27:53

0001 /*
0002     SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #ifndef ACCUMULATOR_H
0008 #define ACCUMULATOR_H
0009 
0010 #include <atomic>
0011 #include <memory>
0012 #include <mutex>
0013 #include <thread>
0014 #include <unordered_map>
0015 
0016 #include "Packet.h"
0017 #include "TimeStamps.h"
0018 
0019 class Capture;
0020 class ConnectionMapping;
0021 class Packet;
0022 
0023 class Accumulator
0024 {
0025 public:
0026     using InboundOutboundData = std::pair<int, int>;
0027     using PidDataCounterHash = std::unordered_map<int, InboundOutboundData>;
0028 
0029     Accumulator(std::shared_ptr<Capture> capture, std::shared_ptr<ConnectionMapping> mapping);
0030     ~Accumulator();
0031 
0032     PidDataCounterHash data();
0033 
0034 private:
0035     void addData(Packet::Direction direction, const Packet &packet, int pid);
0036     void loop();
0037 
0038     std::shared_ptr<Capture> m_capture;
0039     std::shared_ptr<ConnectionMapping> m_mapping;
0040 
0041     std::thread m_thread;
0042     std::atomic_bool m_running;
0043     std::mutex m_mutex;
0044 
0045     PidDataCounterHash m_data;
0046 };
0047 
0048 #endif // ACCUMULATOR_H