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