From d8de534e9fa654b3211497bd62b421e2edd8e9c1 Mon Sep 17 00:00:00 2001
From: Benoit Mortier <opensides@users.sourceforge.net>
Date: Fri, 24 Dec 2004 18:06:05 +0000
Subject: first pass at adapting to plugin guidelines and start of localization

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1057 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/plugins/check_icmp.c b/plugins/check_icmp.c
index 361e924..cbd6864 100644
--- a/plugins/check_icmp.c
+++ b/plugins/check_icmp.c
@@ -21,6 +21,15 @@
  * The fping website can be found at http://www.fping.com
  */
 
+const char *progname = "check_icmp";
+const char *revision = "$Revision$";
+const char *copyright = "2004";
+const char *email = "nagiosplug-devel@lists.sourceforge.net";
+
+#include "common.h"
+#include "netutils.h"
+#include "utils.h"
+
 #include <stdio.h>
 #include <errno.h>
 #include <time.h>
@@ -66,8 +75,8 @@ extern char *optarg;
 extern int optind, opterr;
 
 /*** Constants ***/
-#define EMAIL		"ae@op5.se"
-#define VERSION		"0.8.1"
+//#define EMAIL		"ae@op5.se"
+//#define VERSION		"0.8.1"
 
 #ifndef INADDR_NONE
 # define INADDR_NONE 0xffffffU
@@ -219,9 +228,9 @@ int num_pingsent = 0;			/* total pings sent */
 int num_pingreceived = 0;		/* total pings received */
 int num_othericmprcvd = 0;		/* total non-echo-reply ICMP received */
 
-struct timeval current_time;	/* current time (pseudo) */
-struct timeval start_time;
-struct timeval end_time;
+struct timeval current_time;	  /* current time (pseudo) */
+struct timeval my_start_time;   /* conflict with utils.c 33, but not found ?? */
+struct timeval my_end_time;     /* conflict with utils.c 33, but not found ?? */
 struct timeval last_send_time;	/* time last ping was sent */
 struct timezone tz;
 
@@ -245,23 +254,29 @@ int recvfrom_wto(int, char *, int, struct sockaddr *, int);
 void remove_job(HOST_ENTRY *);
 void send_ping(int, HOST_ENTRY *);
 long timeval_diff(struct timeval *, struct timeval *);
-void usage(void);
+//void usage(void);
 int wait_for_reply(int);
 void finish(void);
 int handle_random_icmp(struct icmp *, struct sockaddr_in *);
 char *sprint_tm(int);
 int get_threshold(char *, threshold *);
 
+/* common functions */
+void print_help (void);
+void print_usage (void);
+
 /*** the various exit-states */
-enum {
+/*enum {
 	STATE_OK = 0,
 	STATE_WARNING,
 	STATE_CRITICAL,
 	STATE_UNKNOWN,
 	STATE_DEPENDANT,
 	STATE_OOB
-};
+};*/
+
 /* the strings that correspond to them */
+/*
 char *status_string[STATE_OOB] = {
 	"OK",
 	"WARNING",
@@ -269,6 +284,7 @@ char *status_string[STATE_OOB] = {
 	"UNKNOWN",
 	"DEPENDANT"
 };
+*/
 
 int status = STATE_OK;
 int fin_stat = STATE_OK;
@@ -288,6 +304,10 @@ int main(int argc, char **argv)
 	if(strchr(argv[0], '/')) prog = strrchr(argv[0], '/') + 1;
 	else prog = argv[0];
 
+	setlocale (LC_ALL, "");
+	bindtextdomain (PACKAGE, LOCALEDIR);
+	textdomain (PACKAGE);
+	
 	/* check if we are root */
 	if(geteuid()) {
 		printf("Root access needed (for raw sockets)\n");
@@ -309,7 +329,7 @@ int main(int argc, char **argv)
 		seteuid(uid);
 	}
 	
-	if(argc < 2) usage();
+	if(argc < 2) print_usage();
 
 	ident = getpid() & 0xFFFF;
 
@@ -356,35 +376,35 @@ int main(int argc, char **argv)
 			case 'w':
 				if(get_threshold(optarg, &warn)) {
 					printf("Illegal threshold pair specified for -%c", c);
-					usage();
+					print_usage();
 				}
 				break;
 
 			case 'c':
 				if(get_threshold(optarg, &crit)) {
 					printf("Illegal threshold pair specified for -%c", c);
-					usage();
+					print_usage();
 				}
 				break;
 
 			case 't':
 				if(!(timeout = (u_int) strtoul(optarg, NULL, 0) * 100)) {
 					printf("option -%c requires integer argument\n", c);
-					usage();
+					print_usage();
 				}
 				break;
 
 			case 'r':
 				if(!(retry = (u_int) strtoul(optarg, NULL, 0))) {
 					printf("option -%c requires integer argument\n", c);
-					usage();
+					print_usage();
 				}
 				break;
 
 			case 'i':
 				if(!(interval = (u_int) strtoul(optarg, NULL, 0) * 100)) {
 					printf("option -%c requires positive non-zero integer argument\n", c);
-					usage();
+					print_usage();
 				}
 				break;
 
@@ -392,19 +412,19 @@ int main(int argc, char **argv)
 			case 'n':
 				if(!(count = (u_int) strtoul(optarg, NULL, 0))) {
 					printf("option -%c requires positive non-zero integer argument\n", c);
-					usage();
+					print_usage();
 				}
 				break;
 
 			case 'b':
 				if(!(ping_data_size = (u_int) strtoul(optarg, NULL, 0))) {
 					printf("option -%c requires integer argument\n", c);
-					usage();
+					print_usage();
 				}
 				break;
 
 			case 'h':
-				usage();
+				print_usage();
 				break;
 
 			case 'e':
@@ -437,7 +457,7 @@ int main(int argc, char **argv)
 
 			case 'v':
 				printf("%s: Version %s $Date$\n", prog, VERSION);
-				printf("%s: comments to %s\n", prog, EMAIL);
+				printf("%s: comments to %s\n", prog, email);
 				exit(STATE_OK);
 
 			case 'g':
@@ -448,7 +468,7 @@ int main(int argc, char **argv)
 
 			default:
 				printf("option flag -%c specified, but not recognized\n", c);
-				usage();
+				print_usage();
 				break;
 		}
 	}
@@ -479,27 +499,27 @@ int main(int argc, char **argv)
 				prog, MIN_INTERVAL, MAX_RETRY);
 		printf("Current settings; i = %d, r = %d\n",
 			   interval / 100, retry);
-		usage();
+		print_usage();
 	}
 
 	if((ping_data_size > MAX_PING_DATA) || (ping_data_size < MIN_PING_DATA)) {
 		printf("%s: data size %u not valid, must be between %u and %u\n",
 				prog, ping_data_size, MIN_PING_DATA, MAX_PING_DATA);
-		usage();
+		print_usage();
 
 	}
 
 	if((backoff > MAX_BACKOFF_FACTOR) || (backoff < MIN_BACKOFF_FACTOR)) {
 		printf("%s: backoff factor %.1f not valid, must be between %.1f and %.1f\n",
 				prog, backoff, MIN_BACKOFF_FACTOR, MAX_BACKOFF_FACTOR);
-		usage();
+		print_usage();
 
 	}
 
 	if(count > MAX_COUNT) {
 		printf("%s: count %u not valid, must be less than %u\n",
 				prog, count, MAX_COUNT);
-		usage();
+		print_usage();
 	}
 
 	if(count_flag) {
@@ -517,7 +537,7 @@ int main(int argc, char **argv)
 	/* generate requires command line parameters beyond the switches */
 	if(generate_flag && !*argv) {
 		printf("generate flag requires command line parameters beyond switches\n");
-		usage();
+		print_usage();
 	}
 
 	if(*argv && !generate_flag) {
@@ -546,7 +566,7 @@ int main(int argc, char **argv)
 
 	if(!num_hosts) {
 		printf("No hosts to work with!\n\n");
-		usage();
+		print_usage();
 	}
 
 	/* allocate array to hold outstanding ping requests */
@@ -566,8 +586,8 @@ int main(int argc, char **argv)
 
 	signal(SIGINT, (void *)finish);
 
-	gettimeofday(&start_time, &tz);
-	current_time = start_time;
+	gettimeofday(&my_start_time, &tz);
+	current_time = my_start_time;
 
 	last_send_time.tv_sec = current_time.tv_sec - 10000;
 
@@ -666,7 +686,7 @@ void finish()
 	int i;
 	HOST_ENTRY *h;
 
-	gettimeofday(&end_time, &tz);
+	gettimeofday(&my_end_time, &tz);
 
 	/* tot up unreachables */
 	for(i=0; i<num_hosts; i++) {
@@ -712,7 +732,7 @@ void finish()
 
 			if(num_hosts == 1 || status != STATE_OK) {
 				printf("%s - %s: rta %s ms, lost %d%%",
-					   status_string[status], h->host,
+					   state_text(status), h->host,
 					   sprint_tm(h->total_time / h->num_recv),
 					   h->num_sent > 0 ? ((h->num_sent - h->num_recv) * 100) / h->num_sent : 0
 					   );
@@ -735,7 +755,7 @@ void finish()
 
 	if(num_noaddress) {
 		printf("No hostaddress specified.\n");
-		usage();
+		print_usage();
 	}
 	else if(num_alive != num_hosts) {
 		/* for future multi-check support */
@@ -1340,37 +1360,57 @@ int get_threshold(char *str, threshold *th)
 	return 0;
 }
 
-/* make a blahblah */
-void usage(void)
+void
+print_help (void)
 {
-	printf("\nUsage: %s [options] [targets]\n", prog);
-	printf("  -H host  target host\n");
-	printf("  -b n     ping packet size in bytes (default %d)\n", ping_data_size);
-	printf("  -n|p n   number of pings to send to each target (default %d)\n", count);
-	printf("  -r n     number of retries (default %d)\n", retry);
-	printf("  -t n     timeout value (in msec) (default %d)\n", timeout / 100);
-	printf("  -i n     packet interval (in msec) (default %d)\n", DEFAULT_INTERVAL);
-/* XXX - possibly on todo-list
-	printf("  -m       ping multiple interfaces on target host\n");
-	printf("  -a       show targets that are alive\n");
-	printf("  -d       show dead targets\n");
-*/	printf("  -v       show version\n");
-	printf("  -D       increase debug output level\n");
-	printf("  -w       warning threshold pair, given as RTA[ums],PL[%%]\n");
-	printf("  -c       critical threshold pair, given as RTA[ums],PL[%%]\n");
-	printf("\n");
-	printf("Note:\n");
-	printf("* This program requires root privileges to run properly.\n");
-	printf("  If it is run as setuid root it will halt with an error if;\n");
-	printf("    interval < 25 || retries > 5\n\n");
-	printf("* Threshold pairs are given as such;\n");
-	printf("    100,40%%\n");
-	printf("  to set a threshold value pair of 100 milliseconds and 40%% packetloss\n");
-	printf("  The '%%' sign is optional, and if rta value is suffixed by;\n");
-	printf("    s, rta time is set in seconds\n");
-	printf("    m, rta time will be set in milliseconds (this is default)\n");
-	printf("    u, rta time will be set in microseconds\n");
-	printf("  Decimal points are silently ignored for sideways compatibility.\n");
-	printf("\n");
-	exit(3);
-}								/* usage() */
+	print_revision (progname, revision);
+
+	printf ("Copyright (c) 2004 Andreas Ericsson <ae@op5.se>\n");
+	printf (COPYRIGHT, copyright, email);
+
+	printf (_("This plugin will check hosts sending icmp pings\n\n"));
+
+	print_usage ();
+
+	printf (_(UT_HELP_VRSN));
+	
+	printf (_("\
+ -H, \n\
+    Host name argument for servers\n\
+ -b  \n\
+   ping packet size in bytes (default %d)\n\
+ -n  \n\
+   number of pings to send to each target (default %d)\n\
+ -r  \n\
+   number of retries (default %d)\n\
+ -t  \n\
+   timeout value (in msec) (default %d)\n\
+ -i  \n\
+   packet interval (in msec) (default %d)\n\
+ -w  \n\
+   warning threshold pair, given as RTA[ums],PL[%%]\n\
+ -c  \n\
+   critical threshold pair, given as RTA[ums],PL[%%]\n\
+ -D  \n\
+   increase debug output level\n\n"),ping_data_size,count,retry,(timeout / 100),DEFAULT_INTERVAL);
+
+	printf (_(UT_WARN_CRIT));
+
+	printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+
+	printf (_(UT_VERBOSE));
+
+//	printf (_("This plugin will check hosts sending icmp pings\n"));
+
+	printf (_(UT_SUPPORT));
+}
+
+void
+print_usage (void)
+{
+	printf ("\
+Usage: %s -H <vhost> | [-b <ping packet size in bytes>] [-n <number of pings>]\n\
+                  [-r <number of retries>] [-t <timeout>] [-i packet interval]\n\
+                  [-w <warning threshold>] [-c <critical threshold>]\n\
+                  [-D <debug>] \n", progname);
+}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 3697da4..ba5b8c4 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -7,6 +7,7 @@ plugins/check_fping.c
 plugins/check_game.c
 plugins/check_hpjd.c
 plugins/check_http.c
+plugins/check_icmp.c
 plugins/check_ldap.c
 plugins/check_load.c
 plugins/check_mrtg.c
diff --git a/po/fr.po b/po/fr.po
index c3a9fd8..4d816fc 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -12,7 +12,7 @@ msgstr ""
 "POT-Creation-Date: 2004-12-20 19:49+1100\n"
 "PO-Revision-Date: 2004-12-20 21:03+0100\n"
 "Last-Translator: Benoit Mortier <benoit.mortier@opensides.be>\n"
-"Language-Team: Français <fr@li.org>\n"
+"Language-Team: Français <benoit.mortier@opensides.be>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -1633,8 +1633,6 @@ msgid ""
 "this plugin works well for monitoring that kind of data as well.\n"
 "\n"
 msgstr ""
-"Ce plugin est utile pour surveiller des données MRTG qui ne correspond pas\n"
-"à de la bande passante. (Utilisez le plugin check_mrtgtraf"
 
 #: plugins/check_mrtg.c:359
 #, c-format
-- 
cgit v0.10-9-g596f

