aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-06-07 03:26:59 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-06-07 03:26:59 +0200
commit3dfb9374cf415512371fecbd500a58735a3d92e6 (patch)
treed0913180fdabc41d9135d224ee13b5540870e682 /libglouglou
parentlibglouglou: remove extra function header (diff)
downloadglouglou-3dfb9374cf415512371fecbd500a58735a3d92e6.tar.xz
glouglou-3dfb9374cf415512371fecbd500a58735a3d92e6.zip
libglouglou: improve traceroute callbacks
Diffstat (limited to 'libglouglou')
-rw-r--r--libglouglou/examples/traceroute.c9
-rw-r--r--libglouglou/libggnet_traceroute.c10
-rw-r--r--libglouglou/libggnet_traceroute.h6
3 files changed, 15 insertions, 10 deletions
diff --git a/libglouglou/examples/traceroute.c b/libglouglou/examples/traceroute.c
index 1336901..7dfae10 100644
--- a/libglouglou/examples/traceroute.c
+++ b/libglouglou/examples/traceroute.c
@@ -20,8 +20,7 @@
#include <libglouglou.h> /* for get_iface() and droppriv() */
#include <libggnet_traceroute.h>
-static void _cb_traceroute(struct addr *,
- struct ggnet_traceroute_req *, void *);
+static void _cb_traceroute(struct ggnet_traceroute_req *, void *);
struct event_base *_ev_base;
struct ggnet_traceroute_req *_route = NULL;
@@ -48,7 +47,8 @@ main(int argc, char *argv[])
ggtr = ggnet_traceroute_new(_ev_base, get_iface(argv[1]));
droppriv("nobody", 1, NULL); /* bad practise you should use dedicated user */
- ggnet_traceroute_trace(ggtr, &ip, TRACEMODE_ICMP, _cb_traceroute, NULL);
+ ggnet_traceroute_trace(ggtr, &ip, TRACEMODE_ICMP,
+ _cb_traceroute, NULL, NULL);
event_base_loopexit(_ev_base, &tv);
event_base_dispatch(_ev_base);
@@ -65,8 +65,7 @@ main(int argc, char *argv[])
}
static void
-_cb_traceroute(struct addr *ip,
- struct ggnet_traceroute_req *route, void *data)
+_cb_traceroute(struct ggnet_traceroute_req *route, void *data)
{
_route = route;
_answer = 1;
diff --git a/libglouglou/libggnet_traceroute.c b/libglouglou/libggnet_traceroute.c
index 561f0aa..1960cff 100644
--- a/libglouglou/libggnet_traceroute.c
+++ b/libglouglou/libggnet_traceroute.c
@@ -140,7 +140,8 @@ ggnet_traceroute_free(struct ggnet_traceroute *ggtr)
struct ggnet_traceroute_req *
ggnet_traceroute_trace(struct ggnet_traceroute *ggtr,
struct addr *ip, enum tracemode mode,
- void (*cb_usr)(struct addr *, struct ggnet_traceroute_req *, void *),
+ void (*cb_done)(struct ggnet_traceroute_req *, void *),
+ void (*cb_hop)(struct ggnet_traceroute_req *, struct ggnet_traceroute_hop *, void *),
void *data)
{
struct ggnet_traceroute_req *req;
@@ -177,7 +178,8 @@ ggnet_traceroute_trace(struct ggnet_traceroute *ggtr,
_cb_trace_timeout, req);
event_add(req->run.ev_timeout, NULL);
- req->cb_usr = cb_usr;
+ req->cb_done = cb_done;
+ req->cb_hop = cb_hop;
req->data = data;
req->ggtr = ggtr;
@@ -232,6 +234,8 @@ _cb_recv(evutil_socket_t fd, short what, void *arg)
printf("XXX cbggnet_traceroute cb_recv %s -> %s\n",
addr_ntoa(&req->srcip), addr_ntoa(&req->target->ip));
#if 0
+ // XXX call cb_hop if hop successfuly detected
+ // req->cb_hop(req, hop, req->data);
req = arg;
ggtr = req->ggtr;
@@ -403,7 +407,7 @@ _cb_trace_timeout(evutil_socket_t fd, short what, void *arg)
last = _hop_last(req);
if (last)
req->target->ttl = last->ttl + 1;
- req->cb_usr(&req->srcip, req, req->data);
+ req->cb_done(req, req->data);
}
static int
diff --git a/libglouglou/libggnet_traceroute.h b/libglouglou/libggnet_traceroute.h
index 5699bfb..3cfd8fa 100644
--- a/libglouglou/libggnet_traceroute.h
+++ b/libglouglou/libggnet_traceroute.h
@@ -44,7 +44,8 @@ struct ggnet_traceroute_req {
struct timeval tv_timeout;
int last_ttl_sent;
} run;
- void (*cb_usr)(struct addr *, struct ggnet_traceroute_req *, void *);
+ void (*cb_done)(struct ggnet_traceroute_req *, void *);
+ void (*cb_hop)(struct ggnet_traceroute_req *, struct ggnet_traceroute_hop *, void *);
void *data;
struct ggnet_traceroute *ggtr;
};
@@ -67,7 +68,8 @@ void ggnet_traceroute_free(struct ggnet_traceroute *);
struct ggnet_traceroute_req *
ggnet_traceroute_trace(struct ggnet_traceroute *,
struct addr *ip, enum tracemode,
- void (*cb_usr)(struct addr *, struct ggnet_traceroute_req *, void *),
+ void (*cb_done)(struct ggnet_traceroute_req *, void *),
+ void (*cb_hop)(struct ggnet_traceroute_req *, struct ggnet_traceroute_hop *, void *),
void *);
void ggnet_traceroute_cancel(struct ggnet_traceroute *,
struct ggnet_traceroute_req *);