|
Packit |
b802ec |
/*
|
|
Packit |
b802ec |
mtr -- a network diagnostic tool
|
|
Packit |
b802ec |
Copyright (C) 1997,1998 Matt Kimball
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
This program is free software; you can redistribute it and/or modify
|
|
Packit |
b802ec |
it under the terms of the GNU General Public License version 2 as
|
|
Packit |
b802ec |
published by the Free Software Foundation.
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
This program is distributed in the hope that it will be useful,
|
|
Packit |
b802ec |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
b802ec |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
b802ec |
GNU General Public License for more details.
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
You should have received a copy of the GNU General Public License
|
|
Packit |
b802ec |
along with this program; if not, write to the Free Software
|
|
Packit |
b802ec |
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
Packit |
b802ec |
*/
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#include "config.h"
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#include <stdio.h>
|
|
Packit |
b802ec |
#include <stdlib.h>
|
|
Packit |
b802ec |
#include <sys/types.h>
|
|
Packit |
b802ec |
#include <time.h>
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#include "mtr.h"
|
|
Packit |
b802ec |
#include "display.h"
|
|
Packit |
b802ec |
#include "report.h"
|
|
Packit |
b802ec |
#include "select.h"
|
|
Packit |
b802ec |
#include "raw.h"
|
|
Packit |
b802ec |
#include "dns.h"
|
|
Packit |
b802ec |
#include "asn.h"
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
#include "mtr-curses.h"
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
#include "mtr-gtk.h"
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#include "split.h"
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
#define DEFAULT_DISPLAY DisplayCurses
|
|
Packit |
b802ec |
#else
|
|
Packit |
b802ec |
#define DEFAULT_DISPLAY DisplayReport
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
#define UNUSED_IF_NO_GTK /* empty */
|
|
Packit |
b802ec |
#else
|
|
Packit |
b802ec |
#define UNUSED_IF_NO_GTK ATTRIBUTE_UNUSED
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_detect(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl,
|
|
Packit |
b802ec |
int *argc UNUSED_IF_NO_GTK,
|
|
Packit |
b802ec |
char ***argv UNUSED_IF_NO_GTK)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
ctl->DisplayMode = DEFAULT_DISPLAY;
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
if (gtk_detect(argc, argv)) {
|
|
Packit |
b802ec |
ctl->DisplayMode = DisplayGTK;
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_open(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
switch (ctl->DisplayMode) {
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
case DisplayReport:
|
|
Packit |
b802ec |
report_open();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayTXT:
|
|
Packit |
b802ec |
txt_open();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayJSON:
|
|
Packit |
b802ec |
json_open();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayXML:
|
|
Packit |
b802ec |
xml_open();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayCSV:
|
|
Packit |
b802ec |
csv_open();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
case DisplayCurses:
|
|
Packit |
b802ec |
mtr_curses_open(ctl);
|
|
Packit |
b802ec |
#ifdef HAVE_IPINFO
|
|
Packit |
b802ec |
asn_open(ctl);
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
case DisplaySplit:
|
|
Packit |
b802ec |
split_open();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
case DisplayGTK:
|
|
Packit |
b802ec |
gtk_open(ctl);
|
|
Packit |
b802ec |
#ifdef HAVE_IPINFO
|
|
Packit |
b802ec |
asn_open(ctl);
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_close(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
time_t now;
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
now = time(NULL);
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
switch (ctl->DisplayMode) {
|
|
Packit |
b802ec |
case DisplayReport:
|
|
Packit |
b802ec |
report_close(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayTXT:
|
|
Packit |
b802ec |
txt_close(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayJSON:
|
|
Packit |
b802ec |
json_close(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayXML:
|
|
Packit |
b802ec |
xml_close(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
case DisplayCSV:
|
|
Packit |
b802ec |
csv_close(ctl, now);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
case DisplayCurses:
|
|
Packit |
b802ec |
#ifdef HAVE_IPINFO
|
|
Packit |
b802ec |
asn_close(ctl);
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
mtr_curses_close();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
case DisplaySplit:
|
|
Packit |
b802ec |
split_close();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
case DisplayGTK:
|
|
Packit |
b802ec |
gtk_close();
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_redraw(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
switch (ctl->DisplayMode) {
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
case DisplayCurses:
|
|
Packit |
b802ec |
mtr_curses_redraw(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
case DisplaySplit:
|
|
Packit |
b802ec |
split_redraw(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
case DisplayGTK:
|
|
Packit |
b802ec |
gtk_redraw(ctl);
|
|
Packit |
b802ec |
break;
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
int display_keyaction(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
switch (ctl->DisplayMode) {
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
case DisplayCurses:
|
|
Packit |
b802ec |
return mtr_curses_keyaction(ctl);
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
case DisplaySplit:
|
|
Packit |
b802ec |
return split_keyaction();
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
case DisplayGTK:
|
|
Packit |
b802ec |
return gtk_keyaction();
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
return 0;
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_rawxmit(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl,
|
|
Packit |
b802ec |
int host,
|
|
Packit |
b802ec |
int seq)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
if (ctl->DisplayMode == DisplayRaw)
|
|
Packit |
b802ec |
raw_rawxmit(host, seq);
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_rawping(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl,
|
|
Packit |
b802ec |
int host,
|
|
Packit |
b802ec |
int msec,
|
|
Packit |
b802ec |
int seq)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
if (ctl->DisplayMode == DisplayRaw)
|
|
Packit |
b802ec |
raw_rawping(ctl, host, msec, seq);
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_rawhost(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl,
|
|
Packit |
b802ec |
int host,
|
|
Packit |
b802ec |
ip_t * ip_addr)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
if (ctl->DisplayMode == DisplayRaw)
|
|
Packit |
b802ec |
raw_rawhost(ctl, host, ip_addr);
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_loop(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
#ifdef HAVE_GTK
|
|
Packit |
b802ec |
if (ctl->DisplayMode == DisplayGTK)
|
|
Packit |
b802ec |
gtk_loop(ctl);
|
|
Packit |
b802ec |
else
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
select_loop(ctl);
|
|
Packit |
b802ec |
}
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
|
|
Packit |
b802ec |
void display_clear(
|
|
Packit |
b802ec |
struct mtr_ctl *ctl)
|
|
Packit |
b802ec |
{
|
|
Packit |
b802ec |
#ifdef HAVE_CURSES
|
|
Packit |
b802ec |
if (ctl->DisplayMode == DisplayCurses)
|
|
Packit |
b802ec |
mtr_curses_clear(ctl);
|
|
Packit |
b802ec |
#endif
|
|
Packit |
b802ec |
}
|