diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2013-06-07 03:26:59 +0200 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2013-06-07 03:26:59 +0200 |
commit | 3dfb9374cf415512371fecbd500a58735a3d92e6 (patch) | |
tree | d0913180fdabc41d9135d224ee13b5540870e682 | |
parent | libglouglou: remove extra function header (diff) | |
download | glouglou-3dfb9374cf415512371fecbd500a58735a3d92e6.tar.xz glouglou-3dfb9374cf415512371fecbd500a58735a3d92e6.zip |
libglouglou: improve traceroute callbacks
-rw-r--r-- | libglouglou/examples/traceroute.c | 9 | ||||
-rw-r--r-- | libglouglou/libggnet_traceroute.c | 10 | ||||
-rw-r--r-- | libglouglou/libggnet_traceroute.h | 6 |
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 *); |