]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/capture/cap_nf/cap_nf.h
Fix build on Darwin.
[stg.git] / projects / stargazer / plugins / capture / cap_nf / cap_nf.h
index b9f45c55e5cf0dee4f008871e9e8603977164a6f..ed07bd594b70ba9afc6aca938b1394b3fd42d1d3 100644 (file)
@@ -34,9 +34,12 @@ $Author: faust $
 #include "stg/logger.h"
 
 #include <string>
 #include "stg/logger.h"
 
 #include <string>
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <jthread.hpp>
+#pragma GCC diagnostic pop
 #include <cstdint>
 
 #include <cstdint>
 
-#include <pthread.h>
 #include <unistd.h> // close
 
 #define VERSION "cap_nf v. 0.4"
 #include <unistd.h> // close
 
 #define VERSION "cap_nf v. 0.4"
@@ -46,58 +49,57 @@ $Author: faust $
 namespace STG
 {
 
 namespace STG
 {
 
-struct Users;
-struct Tariffs;
+class Users;
+class Tariffs;
 struct Admins;
 struct TraffCounter;
 struct Store;
 struct Settings;
 
 struct Admins;
 struct TraffCounter;
 struct Store;
 struct Settings;
 
-}
-
-class NF_CAP : public STG::Plugin {
-public:
-    NF_CAP();
-
-    void            SetTraffcounter(STG::TraffCounter * tc) override { traffCnt = tc; }
-    void            SetSettings(const STG::ModuleSettings & s) override { settings = s; }
-    int             ParseSettings() override;
-
-    int             Start() override;
-    int             Stop() override;
-    int             Reload(const STG::ModuleSettings & /*ms*/) override { return 0; }
-
-    bool            IsRunning() override { return runningTCP || runningUDP; }
-    const std::string & GetStrError() const override { return errorStr; }
-    std::string     GetVersion() const override { return VERSION; }
-    uint16_t        GetStartPosition() const override { return START_POS; }
-    uint16_t        GetStopPosition() const override { return STOP_POS; }
-
-private:
-    NF_CAP(const NF_CAP & rvalue);
-    NF_CAP & operator=(const NF_CAP & rvalue);
-
-    STG::TraffCounter * traffCnt;
-    STG::ModuleSettings settings;
-    pthread_t tidTCP;
-    pthread_t tidUDP;
-    bool runningTCP;
-    bool runningUDP;
-    bool stoppedTCP;
-    bool stoppedUDP;
-    uint16_t portT;
-    uint16_t portU;
-    int sockTCP;
-    int sockUDP;
-    mutable std::string errorStr;
-    STG::PluginLogger logger;
-
-    static void * RunUDP(void *);
-    static void * RunTCP(void *);
-    void ParseBuffer(uint8_t * buf, ssize_t size);
-
-    bool OpenTCP();
-    bool OpenUDP();
-    void CloseTCP() { close(sockTCP); }
-    void CloseUDP() { close(sockUDP); }
+class NF_CAP : public Plugin
+{
+    public:
+        NF_CAP();
+
+        void            SetTraffcounter(TraffCounter * tc) override { traffCnt = tc; }
+        void            SetSettings(const ModuleSettings & s) override { settings = s; }
+        int             ParseSettings() override;
+
+        int             Start() override;
+        int             Stop() override;
+        int             Reload(const ModuleSettings & /*ms*/) override { return 0; }
+
+        bool            IsRunning() override { return m_threadTCP.joinable() || m_threadUDP.joinable(); }
+        const std::string & GetStrError() const override { return errorStr; }
+        std::string     GetVersion() const override { return VERSION; }
+        uint16_t        GetStartPosition() const override { return START_POS; }
+        uint16_t        GetStopPosition() const override { return STOP_POS; }
+
+    private:
+        NF_CAP(const NF_CAP & rvalue);
+        NF_CAP & operator=(const NF_CAP & rvalue);
+
+        TraffCounter * traffCnt;
+        ModuleSettings settings;
+        std::jthread m_threadTCP;
+        std::jthread m_threadUDP;
+        bool stoppedTCP;
+        bool stoppedUDP;
+        uint16_t portT;
+        uint16_t portU;
+        int sockTCP;
+        int sockUDP;
+        mutable std::string errorStr;
+        PluginLogger logger;
+
+        void RunUDP(std::stop_token token) noexcept;
+        void RunTCP(std::stop_token token) noexcept;
+        void ParseBuffer(uint8_t * buf, ssize_t size);
+
+        bool OpenTCP();
+        bool OpenUDP();
+        void CloseTCP() { close(sockTCP); }
+        void CloseUDP() { close(sockUDP); }
 };
 };
+
+}