Account for all IP protocols.
[darkstat] / hosts_db.c
index 3058d65..2c695b9 100644 (file)
@@ -347,20 +347,21 @@ format_row_host(struct str *buf, const struct bucket *b,
       (qu)b->total);
 
    if (opt_want_lastseen) {
-      time_t last = b->u.host.last_seen_mono;
+      int64_t last = b->u.host.last_seen_mono;
+      int64_t now = (int64_t)now_mono();
       struct str *last_str = NULL;
 
-      if ((now_mono() >= last) && (last > 0))
-         last_str = length_of_time(now_mono() - last);
+      if ((now >= last) && (last != 0))
+         last_str = length_of_time(now - last);
 
       str_append(buf, " <td class=\"num\">");
       if (last_str == NULL) {
          if (last == 0)
             str_append(buf, "(never)");
          else
-            str_appendf(buf, "(clock error: now = %qu, last = %qu)",
-                        (qu)now_mono(),
-                        (qu)last);
+            str_appendf(buf, "(clock error: last = %qd, now = %qu)",
+                        (qd)last,
+                        (qu)now);
       } else {
          str_appendstr(buf, last_str);
          str_free(last_str);
@@ -1081,20 +1082,28 @@ static struct str *html_hosts_detail(const char *ip) {
       "<p>\n"
       "<b>Last seen:</b> ");
 
-   last_seen_real = mono_to_real(h->u.host.last_seen_mono);
-   if (strftime(ls_when, sizeof(ls_when),
-      "%Y-%m-%d %H:%M:%S %Z%z", localtime(&last_seen_real)) != 0)
-         str_append(buf, ls_when);
-
-   if (h->u.host.last_seen_mono <= now_mono()) {
-      ls_len = length_of_time(now_mono() - h->u.host.last_seen_mono);
-      str_append(buf, " (");
-      str_appendstr(buf, ls_len);
-      str_free(ls_len);
-      str_append(buf, " ago)");
+   if (h->u.host.last_seen_mono == 0) {
+      str_append(buf, "(never)");
    } else {
-      str_append(buf, " (in the future, possible clock problem)");
-   }
+      last_seen_real = mono_to_real(h->u.host.last_seen_mono);
+      if (strftime(ls_when, sizeof(ls_when),
+         "%Y-%m-%d %H:%M:%S %Z%z", localtime(&last_seen_real)) != 0)
+            str_append(buf, ls_when);
+
+      if (h->u.host.last_seen_mono <= now_mono()) {
+         ls_len =
+             length_of_time((int64_t)now_mono() - h->u.host.last_seen_mono);
+         str_append(buf, " (");
+         str_appendstr(buf, ls_len);
+         str_free(ls_len);
+         str_append(buf, " ago)");
+      } else {
+         str_appendf(buf, " (in the future, possible clock problem, "
+                     "last = %qd, now = %qu)",
+                     (qd)h->u.host.last_seen_mono,
+                     (qu)now_mono());
+      }
+  }
 
    str_appendf(buf,
       "</p>\n"