git.stg.codes
/
stg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix debug build, use separate clang-tidy config.
[stg.git]
/
projects
/
stargazer
/
plugins
/
capture
/
divert_freebsd
/
divert_cap.cpp
diff --git
a/projects/stargazer/plugins/capture/divert_freebsd/divert_cap.cpp
b/projects/stargazer/plugins/capture/divert_freebsd/divert_cap.cpp
index aebca0592bb2ad970e9351b1963985eccda068ac..e3a1d497e357d5c6aa508773fa4ff8fc5de2caaa 100644
(file)
--- a/
projects/stargazer/plugins/capture/divert_freebsd/divert_cap.cpp
+++ b/
projects/stargazer/plugins/capture/divert_freebsd/divert_cap.cpp
@@
-22,6
+22,22
@@
$Revision: 1.13 $
$Date: 2010/09/10 06:43:03 $
*/
$Revision: 1.13 $
$Date: 2010/09/10 06:43:03 $
*/
+
+#include "divert_cap.h"
+
+#include "stg/traffcounter.h"
+#include "stg/raw_ip_packet.h"
+#include "stg/common.h"
+
+#include <algorithm>
+#include <vector>
+
+#include <cstdio>
+#include <cstring>
+#include <cerrno>
+#include <cstdlib>
+#include <csignal>
+
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@
-34,20
+50,6
@@
$Date: 2010/09/10 06:43:03 $
#include <fcntl.h>
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h>
-#include <cstdio>
-#include <cstring>
-#include <cerrno>
-#include <cstdlib>
-#include <csignal>
-
-#include <algorithm>
-#include <vector>
-
-#include "stg/common.h"
-#include "stg/traffcounter.h"
-#include "stg/plugin_creator.h"
-#include "divert_cap.h"
-
#define BUFF_LEN (16384) /* max mtu -> lo=16436 TODO why?*/
//-----------------------------------------------------------------------------
#define BUFF_LEN (16384) /* max mtu -> lo=16436 TODO why?*/
//-----------------------------------------------------------------------------
@@
-62,18
+64,11
@@
DIVERT_DATA cddiv; //capture data
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
-namespace
-{
-PLUGIN_CREATOR<DIVERT_CAP> dcc;
-}
-extern "C" PLUGIN * GetPlugin();
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-PLUGIN * GetPlugin()
+extern "C" STG::Plugin* GetPlugin()
{
{
-return dcc.GetPlugin();
+ static DIVERT_CAP plugin;
+ return &plugin;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
@@
-86,10
+81,9
@@
return "cap_divert v.1.0";
DIVERT_CAP::DIVERT_CAP()
: port(0),
disableForwarding(false),
DIVERT_CAP::DIVERT_CAP()
: port(0),
disableForwarding(false),
- nonstop(false),
isRunning(false),
traffCnt(NULL),
isRunning(false),
traffCnt(NULL),
- logger(
GetPluginLogger(GetStgLogger(),
"cap_divert"))
+ logger(
STG::PluginLogger::get(
"cap_divert"))
{
}
//-----------------------------------------------------------------------------
{
}
//-----------------------------------------------------------------------------
@@
-105,15
+99,7
@@
if (DivertCapOpen() < 0)
return -1;
}
return -1;
}
-nonstop = true;
-
-if (pthread_create(&thread, NULL, Run, this))
- {
- errorStr = "Cannot create thread.";
- logger("Cannot create thread.");
- printfd(__FILE__, "Cannot create thread\n");
- return -1;
- }
+m_thread = std::jthread([](auto token){ Run(std::move(token)); });
return 0;
}
return 0;
}
@@
-125,11
+111,9
@@
if (!isRunning)
DivertCapClose();
DivertCapClose();
-nonstop = false;
-
+m_thread.request_stop();
//5 seconds to thread stops itself
//5 seconds to thread stops itself
-int i;
-for (i = 0; i < 25; i++)
+for (size_t i = 0; i < 25; i++)
{
if (!isRunning)
break;
{
if (!isRunning)
break;
@@
-140,44
+124,36
@@
for (i = 0; i < 25; i++)
//after 5 seconds waiting thread still running. now killing it
if (isRunning)
//after 5 seconds waiting thread still running. now killing it
if (isRunning)
- {
- if (pthread_kill(thread, SIGINT))
- {
- errorStr = "Cannot kill thread.";
- logger("Cannot send signal to thread.");
- printfd(__FILE__, "Cannot kill thread\n");
- return -1;
- }
- }
+ m_thread.detach();
+else
+ m_thread.join();
return 0;
}
//-----------------------------------------------------------------------------
return 0;
}
//-----------------------------------------------------------------------------
-void
* DIVERT_CAP::Run(void * d)
+void
DIVERT_CAP::Run(std::stop_token token) noexcept
{
sigset_t signalSet;
sigfillset(&signalSet);
pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
{
sigset_t signalSet;
sigfillset(&signalSet);
pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
-DIVERT_CAP * dc = static_cast<DIVERT_CAP *>(d);
-dc->isRunning = true;
+isRunning = true;
-char buffer[
pck
tSize + 14];
-while (
dc->nonstop
)
+char buffer[
STG::packe
tSize + 14];
+while (
!token.stop_requested()
)
{
{
-
RAW_PACKET
rp;
-
dc->
DivertCapRead(buffer, sizeof(buffer), NULL);
+
STG::RawPacket
rp;
+ DivertCapRead(buffer, sizeof(buffer), NULL);
if (buffer[12] != 0x8)
continue;
if (buffer[12] != 0x8)
continue;
- memcpy(
rp.rawPacket.pckt, &buffer[14], pck
tSize);
+ memcpy(
&rp.rawPacket, &buffer[14], STG::packe
tSize);
-
dc->traffCnt->P
rocess(rp);
+
traffCnt->p
rocess(rp);
}
}
-dc->isRunning = false;
-return NULL;
+isRunning = false;
}
//-----------------------------------------------------------------------------
int DIVERT_CAP::DivertCapOpen()
}
//-----------------------------------------------------------------------------
int DIVERT_CAP::DivertCapOpen()
@@
-282,8
+258,8
@@
return 0;
int DIVERT_CAP::ParseSettings()
{
int p;
int DIVERT_CAP::ParseSettings()
{
int p;
-
PARAM_VALUE
pv;
-std::vector<
PARAM_VALUE
>::const_iterator pvi;
+
STG::ParamValue
pv;
+std::vector<
STG::ParamValue
>::const_iterator pvi;
pv.param = "Port";
pvi = std::find(settings.moduleParams.begin(), settings.moduleParams.end(), pv);
pv.param = "Port";
pvi = std::find(settings.moduleParams.begin(), settings.moduleParams.end(), pv);