aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/examples/traceroute.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/examples/traceroute.c')
-rw-r--r--libglouglou/examples/traceroute.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/libglouglou/examples/traceroute.c b/libglouglou/examples/traceroute.c
index a791b4d..5ee9a00 100644
--- a/libglouglou/examples/traceroute.c
+++ b/libglouglou/examples/traceroute.c
@@ -20,17 +20,15 @@
#include <libglouglou.h> /* for get_iface() and droppriv() */
#include <libggnet_traceroute.h>
-static void _cb_traceroute(struct ggnet_traceroute_req *, void *);
+static void _cb_done(struct ggnet_traceroute_req *, void *);
struct event_base *_ev_base;
-struct ggnet_traceroute_req *_route = NULL;
-int _answer = 0;
int
main(int argc, char *argv[])
{
struct ggnet_traceroute *ggtr;
- struct ggnet_traceroute_hop *hop;
+ struct ggnet_traceroute_req *req;
struct addr ip;
struct timeval tv;
@@ -47,26 +45,21 @@ main(int argc, char *argv[])
ggtr = ggnet_traceroute_new(_ev_base, get_iface(argv[1]));
droppriv("nobody", 1, NULL); /* bad practise, use dedicated user */
- ggnet_traceroute_trace_tcp(ggtr, &ip, 80, _cb_traceroute, NULL, NULL);
+ req = ggnet_traceroute_trace_tcp(ggtr, &ip, 80,
+ _cb_done, NULL, NULL);
event_base_loopexit(_ev_base, &tv);
event_base_dispatch(_ev_base);
- if (_answer) {
- printf("%s:\n", addr_ntoa(&ip));
- TAILQ_FOREACH(hop, &_route->hops_list, entry) {
- printf("%.2d: %s %s %.2f [XXX %p]\n", hop->ttl, addr_ntoa(&hop->ip), hop->answer, hop->delay, hop);
- }
- } else {
- printf("no answer\n");
- }
+ printf("REPORT for %s:\n%s\n", addr_ntoa(&ip),
+ ggnet_traceroute_report(req));
+
return 0;
}
static void
-_cb_traceroute(struct ggnet_traceroute_req *route, void *data)
+_cb_done(struct ggnet_traceroute_req *req, void *data)
{
- _route = route;
- _answer = 1;
+ printf("traceroute: done !\n");
event_base_loopexit(_ev_base, NULL);
}