]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/capture/ipq_linux/ipq_cap.cpp
Added note about waiting rscriptd until message queue becomes empty
[stg.git] / projects / stargazer / plugins / capture / ipq_linux / ipq_cap.cpp
index 9fc946ca1056f0c50548acf32bd17abad953dec0..97b70a0b55cc5b6392a5af8364c78077a47cc03e 100644 (file)
@@ -1,18 +1,38 @@
+/*
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+* Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
+*/
+
 #include <signal.h>
 #include <cerrno>
 #include <netinet/in.h>
 #include <linux/netfilter.h>
 
+#include "stg/raw_ip_packet.h"
+#include "stg/traffcounter.h"
 #include "ipq_cap.h"
-#include "raw_ip_packet.h"
 
 extern "C"
-    {
-    #include "libipq.h"
-    }
-
-class IPQ_CAP_CREATOR
 {
+#include "libipq.h"
+}
+
+class IPQ_CAP_CREATOR {
 private:
     IPQ_CAP * ic;
 
@@ -20,16 +40,16 @@ public:
     IPQ_CAP_CREATOR()
         : ic(new IPQ_CAP())
         {
-        };
+        }
     ~IPQ_CAP_CREATOR()
         {
         delete ic;
-        };
+        }
 
     IPQ_CAP * GetCapturer()
         {
         return ic;
-        };
+        }
 };
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -38,32 +58,26 @@ IPQ_CAP_CREATOR icc;
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-BASE_PLUGIN * GetPlugin()
+PLUGIN * GetPlugin()
 {
 return icc.GetCapturer();
 }
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-const string IPQ_CAP::GetVersion() const
+const std::string IPQ_CAP::GetVersion() const
 {
 return "ipq_cap v.1.2";
 }
 //-----------------------------------------------------------------------------
 IPQ_CAP::IPQ_CAP()
+    : ipq_h(NULL),
+      nonstop(false),
+      isRunning(false),
+      capSock(-1),
+      traffCnt(NULL)
 {
-isRunning = false;
-nonstop = false;
-}
-//-----------------------------------------------------------------------------
-void IPQ_CAP::SetTraffcounter(TRAFFCOUNTER * tc)
-{
-traffCnt = tc;
-}
-//-----------------------------------------------------------------------------
-const string & IPQ_CAP::GetStrError() const
-{
-return errorStr;
+memset(buf, 0, BUFSIZE);
 }
 //-----------------------------------------------------------------------------
 int IPQ_CAP::Start()
@@ -123,15 +137,9 @@ IPQCapClose();
 return 0;
 }
 //-----------------------------------------------------------------------------
-bool IPQ_CAP::IsRunning()
-{
-return isRunning;
-}
-//-----------------------------------------------------------------------------
 void * IPQ_CAP::Run(void * d)
 {
 RAW_PACKET raw_packet;
-int status;
 
 IPQ_CAP * dc = (IPQ_CAP *)d;
 dc->isRunning = true;
@@ -139,7 +147,7 @@ memset(&raw_packet, 0, sizeof(raw_packet));
 raw_packet.dataLen = -1;
 while (dc->nonstop)
     {
-    status = dc->IPQCapRead(&raw_packet, 68);
+    int status = dc->IPQCapRead(&raw_packet, 68);
     if (status == -1 ||
         status == -2 ||
         status == -3 ||
@@ -151,20 +159,8 @@ dc->isRunning = false;
 return NULL;
 }
 //-----------------------------------------------------------------------------
-uint16_t IPQ_CAP::GetStartPosition() const
-{
-return 0;
-}
-//-----------------------------------------------------------------------------
-uint16_t IPQ_CAP::GetStopPosition() const
-{
-return 0;
-}
-//-----------------------------------------------------------------------------
 int IPQ_CAP::IPQCapOpen()
 {
-int status;
-
 ipq_h = ipq_create_handle(0, PF_INET);
 if (ipq_h == NULL)
     {
@@ -172,7 +168,7 @@ if (ipq_h == NULL)
     errorStr = "Cannot create ipq handle!";
     return -1;
     }
-status = ipq_set_mode(ipq_h, IPQ_COPY_PACKET, PAYLOAD_LEN);
+int status = ipq_set_mode(ipq_h, IPQ_COPY_PACKET, PAYLOAD_LEN);
 if (status < 0)
     {
     ipq_destroy_handle(ipq_h);
@@ -190,11 +186,8 @@ return 0;
 //-----------------------------------------------------------------------------
 int IPQ_CAP::IPQCapRead(void * buffer, int blen)
 {
-int status;
-static ipq_packet_msg_t *m;
-
 memset(buf, 0, BUFSIZE);
-status = ipq_read(ipq_h, buf, BUFSIZE, 1);
+int status = ipq_read(ipq_h, buf, BUFSIZE, 1);
 if (status == 0)
     return -4;
 if (errno == EINTR)
@@ -203,7 +196,7 @@ if (status < 0)
     return -1;
 if (ipq_message_type(buf) != IPQM_PACKET)
     return -2;
-m = ipq_get_packet(buf);
+static ipq_packet_msg_t * m = ipq_get_packet(buf);
 memcpy(buffer, m->payload, blen);
 ipq_set_verdict(ipq_h, m->packet_id, NF_ACCEPT, 0, NULL);
 return 0;