aboutsummaryrefslogtreecommitdiffstats
path: root/gg_sniff/gg_sniff.c
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2012-12-04 01:02:29 +0100
committerLaurent Ghigonis <laurent@p1sec.com>2012-12-04 01:02:29 +0100
commit4b20c1c91aa0a6ad165f2fb81b90af0bb99f69ec (patch)
tree917b55583d2a977a3520271ffd9c4979a12f8122 /gg_sniff/gg_sniff.c
parentexplanation on libggnet (diff)
downloadglouglou-4b20c1c91aa0a6ad165f2fb81b90af0bb99f69ec.tar.xz
glouglou-4b20c1c91aa0a6ad165f2fb81b90af0bb99f69ec.zip
work in progress on gg_sniff
Diffstat (limited to 'gg_sniff/gg_sniff.c')
-rw-r--r--gg_sniff/gg_sniff.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/gg_sniff/gg_sniff.c b/gg_sniff/gg_sniff.c
index 1084b90..c07a1f4 100644
--- a/gg_sniff/gg_sniff.c
+++ b/gg_sniff/gg_sniff.c
@@ -18,14 +18,15 @@
#include <string.h>
#include <libglouglou.h>
+#include <libggnet.h>
+#include "gg_sniff.h"
+
#if defined(__OpenBSD__)
#include "pcap-int.h"
#endif
#define GG_SNIFF_USER "_gg_sniff"
-int net_socket;
-
#if defined(__OpenBSD__)
void __dead
#else
@@ -33,11 +34,10 @@ void
#endif
usage(void)
{
- extern char *__progname;
+ extern char *__progname;
- fprintf(stderr, "usage: %s [-hv]",
- __progname);
- exit(1);
+ fprintf(stderr, "usage: %s [-hv]", __progname);
+ exit(1);
}
static void
@@ -52,14 +52,12 @@ int
main(int argc, char **argv)
{
struct event_base *ev_base;
- struct sockaddr_in sock_addr;
+ struct ggnet *net;
struct event ev_sigint, ev_sigterm, ev_sigchld, ev_sighup;
- char errbuf[PCAP_ERRBUF_SIZE];
- struct bpf_program bprog;
- pcap_t *pcap;
- int loglevel = 0;
- int op;
- int sock_on = 1;
+ int pcap_init = 0;
+ int sniff_init = 0;
+ int loglevel = 0;
+ int op;
if (geteuid() != 0)
errx(1, "must be root");
@@ -82,11 +80,18 @@ main(int argc, char **argv)
ev_base = event_base_new();
+ net = ggnet_new();
+ if (!net)
+ goto quit;
ggcli = gg_client_connect();
-
- ggsniff_pcap_init();
-
- ggsniff_dns_init();
+ if (!ggcli)
+ goto quit;
+ pcap_init = ggsniff_pcap_init(ev_base);
+ if (!pcap_init)
+ goto quit;
+ sniff_init = ggsniff_dns_init(ev_base);
+ if (!sniff_init)
+ goto quit;
signal_set(&ev_sigint, SIGINT, sig_handler, NULL);
signal_set(&ev_sigterm, SIGTERM, sig_handler, NULL);
@@ -103,10 +108,19 @@ main(int argc, char **argv)
log_info("entering event loop");
event_base_dispatch(ev_base);
- ggsniff_dns_shutdown();
- ggsniff_pcap_shutdown();
- gg_client_disconnect(ggcli);
+quit:
+ if (dns_init)
+ ggsniff_dns_shutdown();
+ if (sniff_init)
+ ggsniff_pcap_shutdown();
+ if (ggcli)
+ gg_client_disconnect(ggcli);
+ if (net)
+ ggnet_free(net);
log_info("exiting");
+
+ gg_log_shutdown();
+
exit(0);
}