diff options
Diffstat (limited to 'libglouglou/libggnet_traceroute.c')
-rw-r--r-- | libglouglou/libggnet_traceroute.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libglouglou/libggnet_traceroute.c b/libglouglou/libggnet_traceroute.c index 0c18d9f..352cb0b 100644 --- a/libglouglou/libggnet_traceroute.c +++ b/libglouglou/libggnet_traceroute.c @@ -259,6 +259,10 @@ ggnet_traceroute_report(struct ggnet_traceroute_req *req) { #define left (sizeof(report) - (p - report)) p = report; + if (req->hopcount != 0) + p += (u_char)snprintf(p, left, "%d hops\n", req->hopcount); + else + p += (u_char)snprintf(p, left, "target not answering\n"); TAILQ_FOREACH(hop, &req->hops_list, entry) { p += (u_char)snprintf(p, left, "%.2d: %s %s %.2f [XXX %p]\n", hop->ttl, addr_ntoa(&hop->ip), hop->answer, hop->delay, hop); } @@ -536,6 +540,7 @@ _hop_sport(struct ggnet_traceroute_req *req, int sport) /** * Returns the target hop, and clean the hops_list before calling user callback + * Also sets the hopcount */ static struct ggnet_traceroute_hop * _hop_last(struct ggnet_traceroute_req *req) @@ -543,13 +548,16 @@ _hop_last(struct ggnet_traceroute_req *req) struct ggnet_traceroute_hop *h, *ht; struct ggnet_traceroute_hop *last = NULL; int found = 0; + int count = 0; TAILQ_FOREACH_SAFE(h, &req->hops_list, entry, ht) { + count++; if (found) TAILQ_REMOVE(&req->hops_list, h, entry); else if (addr_cmp(&h->ip, &req->target->ip) == 0) { last = h; found = 1; + req->hopcount = count; } } |