From e61785f83bcdfbf27128687656ec79b9ab7f9ab1 Mon Sep 17 00:00:00 2001 From: curt Date: Tue, 18 Jan 2000 18:28:51 +0000 Subject: [PATCH] 2000 17 Jan updates from "Oliver Delise" --- src/NetworkOLK/FILES | 8 ++- src/NetworkOLK/README | 2 +- src/NetworkOLK/Tools/FILES | 6 +- src/NetworkOLK/Tools/HEADERS | 11 +++- src/NetworkOLK/Tools/Makefile | 4 +- src/NetworkOLK/Tools/README | 6 +- src/NetworkOLK/Tools/fgd.c | 40 ++++++++---- src/NetworkOLK/Tools/fgd.h | 11 ++++ src/NetworkOLK/Tools/fgd_com.c | 64 +++++++++--------- src/NetworkOLK/Tools/fgd_mcp.c | 112 ++++++++++++++++++-------------- src/NetworkOLK/Tools/fgd_scan.c | 64 +++++++++--------- src/NetworkOLK/fgd.h | 13 +++- src/NetworkOLK/net_hud.cxx | 2 +- src/NetworkOLK/net_send.cxx | 38 ++++++++--- src/NetworkOLK/network.cxx | 2 +- src/NetworkOLK/network.h | 2 +- 16 files changed, 232 insertions(+), 153 deletions(-) diff --git a/src/NetworkOLK/FILES b/src/NetworkOLK/FILES index 224377267..6bfd4c6ff 100644 --- a/src/NetworkOLK/FILES +++ b/src/NetworkOLK/FILES @@ -3,7 +3,9 @@ README - containing Network info Makefile.am - net_hud.cxx - display found player's info in bottom/left part of HUD network.cxx - initialization of netcode and vars -network.h - declaration of used vars and functions for libnetwork.a - should be included from other files using libnetwork +fgd.h - +network.h - declaration of used vars and functions for libNetworkOLK.a + should be included from other files using libNetworkOLK net_send.cxx - communication with deamon -Tools - directory containing network tools and toys +Tools - directory containing the deamon, tools and toys necessairy + for testing the network with and without FGFS. diff --git a/src/NetworkOLK/README b/src/NetworkOLK/README index a8db2a9a9..eb6a3e688 100644 --- a/src/NetworkOLK/README +++ b/src/NetworkOLK/README @@ -31,4 +31,4 @@ b) Runtime - setting the "int net_hud_display" variable to 0 disables any network display (default) Have Phun -Oliver +Oliver diff --git a/src/NetworkOLK/Tools/FILES b/src/NetworkOLK/Tools/FILES index 13d08a414..cef2f89eb 100644 --- a/src/NetworkOLK/Tools/FILES +++ b/src/NetworkOLK/Tools/FILES @@ -1,9 +1,11 @@ FILES - This file, describing the other files HEADERS - Necessairy headers to compile the programs -README - Infos about programs +INSTALL - +README - Detailed explanation about the programs and how to use Makefile - fgd.h - Headerfile included by all programs -fgd.c - Flightgear deamon +fgd.c - Flightgear deamon, talkative, strongly recommended for start +fgd_silent.c - Flightgear deamon with no debug output, for advanced users fgd_com.c - Sends commandos to fgd fgd_scan.c - Scanner to detect Flightgear deamons via TCP fgd_mcp.c - Master Control Program for fgd diff --git a/src/NetworkOLK/Tools/HEADERS b/src/NetworkOLK/Tools/HEADERS index 09b47436d..2f44fb8b7 100644 --- a/src/NetworkOLK/Tools/HEADERS +++ b/src/NetworkOLK/Tools/HEADERS @@ -1,4 +1,4 @@ -Please check the presence of the following header files on your system +These includes must be available on any Un*x, Windoze and Mac Donald's #include #include @@ -8,4 +8,11 @@ Please check the presence of the following header files on your system #include #include #include -#include \ No newline at end of file +#include + +Please look also into *all* your systemwide "socket.h" and the header +files (mainly in /usr/include/sys or krnl-src) included by them for +declarations like "MSG_PEEK" etc. +In case of missing MSG_foo declarations please contact me: + +Oliver Delise diff --git a/src/NetworkOLK/Tools/Makefile b/src/NetworkOLK/Tools/Makefile index 1c7461f81..f23e8d371 100644 --- a/src/NetworkOLK/Tools/Makefile +++ b/src/NetworkOLK/Tools/Makefile @@ -2,7 +2,7 @@ CPPFLAGS = CFLAGS = CC = gcc RM = rm -PROGS = fgd fgd_scan fgd_com fgd_mcp fgd_verbose +PROGS = fgd fgd_scan fgd_com fgd_mcp fgd_silent BINDIR = /usr/local/bin all: $(PROGS) @@ -10,7 +10,7 @@ all: $(PROGS) fgd: fgd.c $(CC) -o $@ $^ -fgd_verbose: fgd_verbose.c +fgd_silent: fgd_silent.c $(CC) -o $@ $^ fgd_scan: fgd_scan.c diff --git a/src/NetworkOLK/Tools/README b/src/NetworkOLK/Tools/README index df6d29f05..d4d646cd4 100644 --- a/src/NetworkOLK/Tools/README +++ b/src/NetworkOLK/Tools/README @@ -1,7 +1,7 @@ Welcome to FlightGear Deamon fgd -------------------------------- Here the first Tools to play with FlightGear Deamon. -This is yet alpha and the sources remain to be tidied up, +This is yet alpha moving to beta and the sources remain to be tidied up, and to get documented. @@ -242,6 +242,8 @@ History: Nov 29 1999 -> Implementing scenario functions like virtual Pilots Nov 30 1999 -> ??? + v0.1-beta : Jan 16 2000 -> Several libc5, glibc-2.0 and glibc-2.1 + issues cleaned up Future Plans: @@ -284,4 +286,4 @@ You can do whatever you want with this software, even enhance it. Send comments/flames/BEER/whatever to delise@mail.isis.de -Oliver Delise Nov/08/99 +Oliver Delise Jan/16/00 diff --git a/src/NetworkOLK/Tools/fgd.c b/src/NetworkOLK/Tools/fgd.c index a41b93395..66a744fd7 100644 --- a/src/NetworkOLK/Tools/fgd.c +++ b/src/NetworkOLK/Tools/fgd.c @@ -2,10 +2,9 @@ /* FGD.C by Oliver Delise */ /* Contact info: */ /* e-mail: delise@mail.isis.de */ -/* www: http://www.isis.de/members/~odelise/progs/mmx-emu/ */ -/* ftp: http://www.isis.de/members/~odelise/progs/flightgear */ +/* www: http://www.isis.de/members/odelise/progs/flightgear */ /* */ -/* Version 0.1-alpha */ +/* Version 0.1-beta */ /* The author of this program offers no waranty at all */ /* about the correct execution of this software material. */ /* Furthermore, the author can NOT be held responsible for */ @@ -28,6 +27,8 @@ /* */ /* History: v0.1pre-alpha: May 25 1999 -> First release */ /* v0.1-alpha : Nov 08 1999 */ +/* v0.1-beta : Jan 16 2000 */ +/* libc5, glibc-2.0, 2.1 cleanups */ /*************************************************************/ @@ -41,7 +42,7 @@ #include #include -#define printf // +//#define printf // /* Net-stuff */ fd_set rset, allset; @@ -217,7 +218,7 @@ int fgd_ele_len; struct sockaddr_in address; struct sockaddr_in my_address; int result; -extern char *sys_errlist[]; + extern int errno; int current_port = 0; u_short base_port = 0; @@ -301,6 +302,7 @@ struct { char *ip, *lon, *lat, *alt;} fg_id; if (1 == 1) { if ( bind(sock, (struct sockaddr *)&address, sizeof(address)) == -1) { printf(" Aiiiieeehh...ADRESS ALSO IN USE...\7hmmm...please check another port\n"); + printf(" Just wait a few seconds or do a netstat to see the port status.\n"); exit(-1); } listen(sock, 5); @@ -449,10 +451,12 @@ for (;;){ } else strcpy( fgd_client.adr, "UNKNOWN"); /* writing answer back to client */ - sprintf( (char*) buff, "%s %s", "FGD", fgd_client.adr); - buff[3] = strlen(fgd_client.adr); + sprintf( (char*) buff, "%sLH%s ", "FGD", fgd_client.adr); + buff[3] = strlen(fgd_client.adr) + 1; + buff[4] = 0; + buff[ buff[3] + 4] = 0; printf(" IP : %s\n", fgd_client.adr); - write( my_sock, &buff, buff[3]+4); + write( my_sock, &buff, buff[3]+5); // close(my_sock); break; case 17: printf(" fgd : Get Mat4 DATA from client\n"); @@ -500,7 +504,7 @@ for (;;){ sprintf( (char*) buff, "%s %s", "FGD", fgd_client.adr); buff[3] = 0; fgd_cnt = 0; - fgd_curpos = 5; + fgd_curpos = 6; test = head->next; while (test != tail) { printf(" IP : %-16s Callsign : %-16s\n", test->ipadr, test->callsign); @@ -533,7 +537,8 @@ for (;;){ if (fgd_cnt == 0) fgd_curpos --; printf(" ele_len %d curpos %d\n", fgd_ele_len, fgd_curpos); buff[3] = fgd_curpos; - buff[4] = fgd_cnt; + buff[4] = fgd_curpos / 256; + buff[5] = fgd_cnt; write( my_sock, &buff, fgd_curpos); // close(my_sock); break; @@ -596,10 +601,19 @@ for (;;){ } else strcpy( fgd_client.adr, "UNKNOWN"); /* writing answer back to client */ - sprintf( (char*) buff, "%s %s", "FGD", fgd_client.adr); - buff[3] = strlen(fgd_client.adr); + sprintf( (char*) buff, "FGDLH%s", fgd_client.adr); + buff[3] = strlen(fgd_client.adr) + 1; + buff[4] = buff[buff[3]+5] = 0; printf(" IP : %s\n", fgd_client.adr); - write( my_sock, &buff, buff[3]+4); + write( my_sock, &buff, buff[3]+5); +// Just leaving the old stuff in, to correct it for FGFS later... +// I'm sick of this f$%&ing libc5/glibc2.0/2.1 quirks +// Oliver...very angry... +// /* writing answer back to client */ +// sprintf( (char*) buff, "%s %s", "FGD", fgd_client.adr); +// buff[3] = strlen(fgd_client.adr); +// printf(" IP : %s\n", fgd_client.adr); +// write( my_sock, &buff, buff[3]+4); // close(my_sock); break; case 9: printf(" fgd : Shutdown\n"); diff --git a/src/NetworkOLK/Tools/fgd.h b/src/NetworkOLK/Tools/fgd.h index a1cbb766b..ceedb5a74 100644 --- a/src/NetworkOLK/Tools/fgd.h +++ b/src/NetworkOLK/Tools/fgd.h @@ -6,3 +6,14 @@ #include #include #include + +/* this seems to be missing for glibc-2.0.x */ +/* libc5 & glibc-2.1 do have them */ +#ifndef MSG_PEEK +int MSG_PEEK = 0x02; /* Peek at incoming messages. */ +#define MSG_PEEK MSG_PEEK +#endif +#ifndef MSG_WAITALL +int MSG_WAITALL = 0x100; /* Wait for a full request. */ +#define MSG_WAITALL MSG_WAITALL +#endif diff --git a/src/NetworkOLK/Tools/fgd_com.c b/src/NetworkOLK/Tools/fgd_com.c index 276d98f56..1f6424ce0 100644 --- a/src/NetworkOLK/Tools/fgd_com.c +++ b/src/NetworkOLK/Tools/fgd_com.c @@ -1,34 +1,35 @@ -/***********************************************************/ -/* FGD_COM.C by Oliver Delise */ -/* Contact info: */ -/* e-mail: delise@mail-isis.de */ -/* www: http://www.online-club.de/~olk/progs/mmx-emu/ */ -/* ftp: http://www.online-club.de/~olk/progs/flightgear */ -/* */ -/* Version 0.1-alpha */ -/* The author of this program offers no waranty at all */ -/* about the correct execution of this software material. */ -/* Furthermore, the author can NOT be held responsible for */ -/* any physical or moral damage caused by the use of this */ -/* software. */ -/* */ -/* This is a standalone Tool to communicate with any */ -/* FlightGear-Deamon. */ -/* This is Open Source Software with many parts */ -/* shamelessly stolen from others... */ -/* */ -/* -> This program will use a TCP port listening on a */ -/* remote or local host inside the range you give to it.*/ -/* I offer no warranty over the accuracy though :) */ -/* There are 3 verbose modes: No info, service info, and*/ -/* full info. No info is good of you only want the list */ -/* of the ports, no more info. The best mode is Full */ -/* info, as you get error information,etc. The main */ -/* output is STDOUT, and ALL the errors go to STDERR. */ -/* */ -/* History: v0.1pre-alpha: May 25 1999 -> First release */ -/* v0.1-alpha Nov 08 1999 */ -/***********************************************************/ +/*************************************************************/ +/* FGD_COM.C by Oliver Delise */ +/* Contact info: */ +/* e-mail: delise@mail-isis.de */ +/* www: http://www.isis.de/members/odelise/progs/flightgear */ +/* */ +/* Version 0.1-beta */ +/* The author of this program offers no waranty at all */ +/* about the correct execution of this software material. */ +/* Furthermore, the author can NOT be held responsible for */ +/* any physical or moral damage caused by the use of this */ +/* software. */ +/* */ +/* This is a standalone Tool to communicate with any */ +/* FlightGear-Deamon. */ +/* This is Open Source Software with many parts */ +/* shamelessly stolen from others... */ +/* */ +/* -> This program will use a TCP port listening on a */ +/* remote or local host inside the range you give to it. */ +/* I offer no warranty over the accuracy though :) */ +/* There are 3 verbose modes: No info, service info, and */ +/* full info. No info is good of you only want the list */ +/* of the ports, no more info. The best mode is Full */ +/* info, as you get error information,etc. The main */ +/* output is STDOUT, and ALL the errors go to STDERR. */ +/* */ +/* History: v0.1pre-alpha: May 25 1999 -> First release */ +/* v0.1-alpha Nov 08 1999 */ +/* v0.1-beta Jan 16 2000 -> libc5/glibc-2.0 */ +/* glibc2.1 cleanups */ +/*************************************************************/ #include #include @@ -47,7 +48,6 @@ int my_sock; struct sockaddr_in address; struct sockaddr_in my_address; int result; -extern char *sys_errlist[]; extern int errno; int current_port = 0; u_short base_port = 0; diff --git a/src/NetworkOLK/Tools/fgd_mcp.c b/src/NetworkOLK/Tools/fgd_mcp.c index e3466aa19..2ab5f4517 100644 --- a/src/NetworkOLK/Tools/fgd_mcp.c +++ b/src/NetworkOLK/Tools/fgd_mcp.c @@ -2,10 +2,9 @@ /* FGD_MCP.C by Oliver Delise */ /* Contact info: */ /* e-mail: delise@mail.isis.de */ -/* www: http://www.isis.de/members/~odelise/progs/mmx-emu/ */ -/* ftp: http://www.isis.de/members/~odelise/progs/flightgear */ +/* www: http://www.isis.de/members/odelise/progs/flightgear */ /* */ -/* Version 0.1-alpha */ +/* Version 0.1-beta */ /* The author of this program offers no waranty at all */ /* about the correct execution of this software material. */ /* Furthermore, the author can NOT be held responsible for */ @@ -28,10 +27,13 @@ /* */ /* History: v0.1pre-alpha: May 25 1999 -> First release */ /* v0.1-alpha Nov 11 1999 */ +/* v0.1-beta Jan 16 2000 libc5/glibc-2.0 */ +/* glibc-2.1 cleanups */ /*************************************************************/ #include #include "fgd.h" +#include //#define printf // @@ -41,7 +43,6 @@ int my_sock; struct sockaddr_in address; struct sockaddr_in my_address; int result; -extern char *sys_errlist[]; extern int errno; int current_port = 10000; u_short base_port = 10000; @@ -197,7 +198,7 @@ void fgd_init(void){ address.sin_family = AF_INET; /* determinating the source/sending host */ if (uname(&myname) == 0) strcpy(src_host , myname.nodename); - printf("MCP: I'm running on HOST : %s ", src_host); + printf("MCP: I'm running on HOST : %s ", src_host); if (host_info = gethostbyname( src_host)) { bcopy(host_info->h_addr, (char *)&address.sin_addr,host_info->h_length); strcpy((char *) fgd_mcp_ip, (char *) inet_ntoa(address.sin_addr)); @@ -209,17 +210,19 @@ void fgd_init(void){ bcopy(host_info->h_addr, (char *)&address.sin_addr,host_info->h_length); strcpy((char *) fgd_ip, (char *) inet_ntoa(address.sin_addr)); if (verbose == 2) { - printf(" resolved\n FGD running on HOST : %s", fgd_host); - printf(" IP : %s\n", fgd_ip); - } + printf(" resolved\n FGD running on HOST : %s", fgd_host); + printf(" IP : %s\n", fgd_ip); + } } else if ((address.sin_addr.s_addr = inet_addr( fgd_host)) == INADDR_NONE) { - fprintf(stderr," Could not get %s host entry !\n", fgd_host); printf(" NOT resolved !!!\n"); - exit(1); + printf("MCP: Could not get %s host entry !\n", fgd_host); + printf("MCP: Enter '10' for deamon IP or fqdn or alias. (your choice)\n"); +// exit(1); } else if (verbose == 2) printf(" address valid\n"); if ((base_port > end_port) || ((short)base_port < 0)) { - fprintf(stderr,"Bad port range : start=%d end=%d !\n"); + printf("MCP: Bad port range : start=%d end=%d !\n"); + printf("MCP: Enter '10' for deamon IP/fqdn\n"); exit(1); } else if (verbose == 2) { printf(" Port range: %d to %d\n",base_port,end_port); @@ -319,10 +322,10 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { /* The Receiving Part, fgd returns errormessages, succes, etc... */ do { - fgd_status = recv( sock, (char *) buffp, 4, MSG_WAITALL); + fgd_status = recv( sock, (char *) buffp, 5, MSG_WAITALL); printf(" status %d\n", fgd_status); } -// while ( (fgd_status != 4) && (fgd_status != 0) ); +// while ( (fgd_status != 5) && (fgd_status != 0) ); while ( (fgd_status == -1) || (fgd_status == -1) ); if (verbose == 2) { printf(" Got reply : %x %x %x\n", buffp[0], buffp[1], buffp[2]); @@ -337,15 +340,17 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { case 1: printf("FGD: Registering Host %s\n", FGFS_host); break; case 2: printf("FGD: Showing registered Hosts at %s\n", fgd_host); - if (buffp[3] != 4) { -/* FIXME: replace with SELECT to avoid broken pipes, known bug (-; */ + printf(" %d %d\n", buffp[3], buffp[4]); + if ( (buffp[3] + 256 * buffp[4]) != 5 ) { +/* FIXME: replace with SELECT to avoid broken pipes, known bug (-; */ +/* but the transfer is calculated very accurately, null problemo */ do { - fgd_status = recv( sock, fgd_txt, buffp[3]-4, MSG_WAITALL); + fgd_status = recv( sock, fgd_txt, buffp[3]-5, MSG_WAITALL); // printf(" status %d\n", fgd_status); } // while ( (fgd_status != 4) && (fgd_status != 0) ); while ( (fgd_status == -1) || (fgd_status == -1) ); -// read( sock, fgd_txt, buffp[3]-4); +// read( sock, fgd_txt, buffp[3]-5); fgd_curpos = 2; for (fgd_cnt = 1; fgd_cnt < (fgd_txt[0]+1); fgd_cnt++) { fgd_ele_len = fgd_txt[fgd_curpos-1]; @@ -355,27 +360,26 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { printf(" #%d %s\n", fgd_cnt, fgfs_host); } } - break; case 5: printf("FGD: Receiving data from Host %s\n", FGFS_host); - read( sock, fgd_txt, buffp[3]); + read( sock, fgd_txt, (unsigned char) buffp[3] + 256 * (unsigned char) buffp[4]); fgd_txt[buffp[3]] = 0; - if (strcmp(fgd_txt, "UNKNOWN") == -1) { - printf("FGD: Data from Host %s received\n", fgd_txt); - } - else printf("FGD: Host not in list, sorry...\n"); + if (strcmp(fgd_txt, "UNKNOWN") == 0) { + printf("FGD: Host not in list, sorry...\n"); + } + else printf("FGD: Data from Host %s received\n", fgd_txt); break; case 6: printf("FGD: Sending data to Host %s\n", FGFS_host); - if (buffp[3] != 4) { + if (buffp[3] != 5) { /* FIXME: replace with SELECT */ - if (verbose == 2) printf("Noch %d bytes\n", (unsigned char) buffp[3]); + if (verbose == 2) printf("Noch %d bytes\n", (unsigned char) buffp[3] + 256 * (unsigned char) buffp[4]); do { - fgd_status = recv( sock, fgd_txt, (unsigned char) buffp[3]-4, MSG_PEEK); + fgd_status = recv( sock, fgd_txt, (unsigned char) buffp[3]-5, MSG_PEEK); if (verbose == 2) printf("Status %d\n", fgd_status); } - while ( (fgd_status == 4) || (fgd_status == -1) ); + while ( (fgd_status == 5) || (fgd_status == -1) ); // while ( (fgd_status == -1) || (fgd_status == -1) ); - read( sock, fgd_txt, buffp[3]-4); + read( sock, fgd_txt, buffp[3]-5); fgd_curpos = 2; fgd_ppl_old = fgd_ppl; fgd_ppl = fgd_txt[0]; @@ -432,10 +436,10 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { case 8: printf("FGD: Unregistering Host %s\n", FGFS_host); read( sock, fgd_txt, buffp[3]); fgd_txt[buffp[3]] = 0; - if (strcmp(fgd_txt, "UNKNOWN") == -1) { - printf("FGD: Host %s unregistered\n", fgd_txt); + if (strcmp(fgd_txt, "UNKNOWN") == 0) { + printf("FGD: Host not in list, sorry...\n"); } - else printf("FGD: Host not in list, sorry...\n"); + else printf("FGD: Host %s unregistered\n", fgd_txt); break; case 9: printf(" Shutdown FlightGear-Deamon %s .\n", fgd_name); break; @@ -457,13 +461,13 @@ int main(int argc, char **argv) { fgd_init(); for ( ; (atoi( (char*) fgd_job)) != 99;){ printf("MCP: ready...enter commando (42 help) "); - gets((char *) fgd_job); - if (verbose == 2) printf("MCP: got %s %d\n", (char *) fgd_job, strlen((char *) fgd_job)); - if ( strcmp( fgd_job, "") > 0 ) switch( atoi((char*) fgd_job)) { - case 0 : if ( strcmp( (char *) fgd_job, "0") == 0 ){ + fgets((char *) fgd_job, 5, stdin); +// if (verbose == 2) printf("MCP: got %s %d\n", (char *) fgd_job, strlen((char *) fgd_job)); + if ( strcmp( fgd_job, "\n") > 0 ) switch( atoi((char*) fgd_job)) { + case 0 : if ( strncmp( (char *) fgd_job, "0", 1) == 0 ){ printf("MCP: Scan for fgd\n"); fgd_send_com( "0", src_host); - } + } break; case 1 : printf("MCP: Register to fgd\n"); fgd_send_com( "1", src_host); @@ -491,33 +495,39 @@ int main(int argc, char **argv) { printf(" Deamon Host IP Port\n"); printf(" %-16s%-16s%-16s%-16d\n", fgd_name, fgd_host, fgd_ip, base_port); printf("\n Enter new Host:[%s] ", fgd_host); - gets((char *) fgd_txt); - if ( strlen(fgd_txt) != 0 ) { + fgets((char *) fgd_txt, 32, stdin); + if ( strlen(fgd_txt) != 1 ) { strcpy(fgd_host, fgd_txt); + fgd_host[ strlen( fgd_txt) - 1] = 0; if (host_info = gethostbyname( fgd_host)) { bcopy(host_info->h_addr, (char *)&address.sin_addr,host_info->h_length); strcpy((char *) fgd_ip, (char *) inet_ntoa(address.sin_addr)); if (verbose == 2) { - printf(" resolved\n FGD running on HOST : %s", fgd_host); + printf("MCP: Resolved...FGD running on HOST : %s", fgd_host); printf(" IP : %s\n", fgd_ip); } } else if ((address.sin_addr.s_addr = inet_addr( fgd_host)) == INADDR_NONE) { - fprintf(stderr," Could not get %s host entry !\n", fgd_host); - printf(" NOT resolved !!!\n"); - exit(1); + fprintf(stderr,"MCP: Could not get %s host entry !\n", fgd_host); + printf(" NOT resolved !!!\n"); +// exit(1); } else if (verbose == 2) printf(" address valid\n"); } break; case 11 : printf("MCP: Choose default deamon Port:\n"); printf(" Deamon Host IP Port\n"); printf(" %-16s%-16s%-16s%-16d\n", fgd_name, fgd_host, fgd_ip, base_port); - printf(" Enter new Port: "); - gets((char *) buffp); + printf(" Enter new Port:[%d] ", base_port); + fgets((char *) buffp, 16, stdin); current_port = atoi((char*) buffp); + if (current_port < 1025) { + printf("MCP: Be fair please...Ports below 1024 are not a good choice\n"); + current_port = base_port; + break; + } if (current_port != 0) { base_port = atoi((char*) buffp); end_port = base_port; - } + } break; case 20 : printf("MCP: Current values:\n"); printf(" Deamon Host IP Port\n"); @@ -543,7 +553,8 @@ int main(int argc, char **argv) { break; case 21 : printf("MCP: Enter your callsign, Pilot "); - gets((char *) fgd_callsign); + fgets((char *) fgd_callsign, 32, stdin); + fgd_callsign[ strlen(fgd_callsign) - 1 ] = 0; break; case 42 : printf("MCP: Commands available:\n 0 Scan for fgd\n 1 Register\n"); printf(" 2 Show registered\n 3 Send MSG\n 4 Send MSG to ALL\n"); @@ -551,7 +562,7 @@ int main(int argc, char **argv) { printf(" 8 Unregister from fgd\n 9 Shutdown fgd\n"); printf("10 Set deamon HOST\n11 Set deamon PORT\n"); printf("20 Show values\n21 Set own callsign\n"); - printf("31 Set deamon PORT\n"); +// printf("31 Set deamon PORT\n"); printf("98 Stress test\n"); printf("99 Quit Master Control Program (not recommended)\n"); break; @@ -566,14 +577,16 @@ int main(int argc, char **argv) { fgd_send_com( "5", src_host); fgd_send_com( "6", src_host); printf("other lat:%7.3f boss lat:%7.3f\n", other->latf, boss->latf); - if (fabs(boss->latf - other->latf) > 0.001) { + if (fabs( (double) boss->latf - (double) other->latf ) > 0.001) { printf("other lat:%7.3f boss lat:%7.3f\n", other->latf, boss->latf); fgd_loss++; } } printf(" Packets lost: %d\n", fgd_loss); break; - default: break; + case 99 : printf("MCP: Good bye...\n"); + break; + default: printf("MCP: ???\n"); } } // fgd_send_com( argv[5], argv[6]); @@ -588,6 +601,5 @@ int main(int argc, char **argv) { free(fgfs_pilot); free(src_host); free(fgd_txt); - printf("MCP: Exit...\n"); exit(0); } diff --git a/src/NetworkOLK/Tools/fgd_scan.c b/src/NetworkOLK/Tools/fgd_scan.c index 25f617cf1..7f301bfad 100644 --- a/src/NetworkOLK/Tools/fgd_scan.c +++ b/src/NetworkOLK/Tools/fgd_scan.c @@ -1,34 +1,35 @@ -/***********************************************************/ -/* FGD_SCAN.C by Oliver Delise */ -/* Contact info: */ -/* e-mail: delise@mail-isis.de */ -/* www: http://www.online-club.de/~olk/progs/mmx-emu/ */ -/* ftp: http://www.online-club.de/~olk/progs/flightgear */ -/* */ -/* Version 0.1-alpha */ -/* The author of this program offers no waranty at all */ -/* about the correct execution of this software material. */ -/* Furthermore, the author can NOT be held responsible for */ -/* any physical or moral damage caused by the use of this */ -/* software. */ -/* */ -/* This is a standalone Tool to scan for any FlightGear */ -/* Deamon. */ -/* This is Open Source Software with many parts */ -/* shamelessly stolen from others... */ -/* */ -/* -> This program will scan for TCP port listening on a */ -/* remote or local host inside the range you give to it.*/ -/* I offer no warranty over the accuracy though :) */ -/* There are 3 verbose modes: No info, service info, and*/ -/* full info. No info is good of you only want the list */ -/* of the ports, no more info. The best mode is Full */ -/* info, as you get error information,etc. The main */ -/* output is STDOUT, and ALL the errors go to STDERR. */ -/* */ -/* History: v0.1pre-alpha: May 25 1999 -> First release */ -/* v0.1-alpha Nov 08 1999 */ -/***********************************************************/ +/*************************************************************/ +/* FGD_SCAN.C by Oliver Delise */ +/* Contact info: */ +/* e-mail: delise@mail-isis.de */ +/* www: http://www.isis.de/members/odelise/progs/flightgear */ +/* */ +/* Version 0.1-beta */ +/* The author of this program offers no waranty at all */ +/* about the correct execution of this software material. */ +/* Furthermore, the author can NOT be held responsible for */ +/* any physical or moral damage caused by the use of this */ +/* software. */ +/* */ +/* This is a standalone Tool to scan for any FlightGear */ +/* Deamon. */ +/* This is Open Source Software with many parts */ +/* shamelessly stolen from others... */ +/* */ +/* -> This program will scan for TCP port listening on a */ +/* remote or local host inside the range you give to it. */ +/* I offer no warranty over the accuracy though :) */ +/* There are 3 verbose modes: No info, service info, and */ +/* full info. No info is good of you only want the list */ +/* of the ports, no more info. The best mode is Full */ +/* info, as you get error information,etc. The main */ +/* output is STDOUT, and ALL the errors go to STDERR. */ +/* */ +/* History: v0.1pre-alpha: May 25 1999 -> First release */ +/* v0.1-alpha Nov 08 1999 */ +/* v0.1-beta Jan 16 2000 libc5/glibc-2.0 */ +/* glibc-2.1 cleanups */ +/*************************************************************/ #include @@ -47,7 +48,6 @@ int my_sock; struct sockaddr_in address; struct sockaddr_in my_address; int result; -extern char *sys_errlist[]; extern int errno; int current_port = 20000; u_short base_port = 20000; diff --git a/src/NetworkOLK/fgd.h b/src/NetworkOLK/fgd.h index c25d2b521..ceedb5a74 100644 --- a/src/NetworkOLK/fgd.h +++ b/src/NetworkOLK/fgd.h @@ -5,4 +5,15 @@ #include #include #include -#include \ No newline at end of file +#include + +/* this seems to be missing for glibc-2.0.x */ +/* libc5 & glibc-2.1 do have them */ +#ifndef MSG_PEEK +int MSG_PEEK = 0x02; /* Peek at incoming messages. */ +#define MSG_PEEK MSG_PEEK +#endif +#ifndef MSG_WAITALL +int MSG_WAITALL = 0x100; /* Wait for a full request. */ +#define MSG_WAITALL MSG_WAITALL +#endif diff --git a/src/NetworkOLK/net_hud.cxx b/src/NetworkOLK/net_hud.cxx index 89aabafd8..bee19df93 100644 --- a/src/NetworkOLK/net_hud.cxx +++ b/src/NetworkOLK/net_hud.cxx @@ -2,7 +2,7 @@ // // Written by Oliver Delise, started May 1999. // -// Copyleft (C) 1999 Oliver Delise - delise@rp-plus.de +// Copyleft (C) 1999 Oliver Delise - delise@mail.isis.de // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as diff --git a/src/NetworkOLK/net_send.cxx b/src/NetworkOLK/net_send.cxx index d6e2ca296..ba7a78781 100644 --- a/src/NetworkOLK/net_send.cxx +++ b/src/NetworkOLK/net_send.cxx @@ -1,11 +1,10 @@ /*************************************************************/ -/* FGD_MCP.C by Oliver Delise */ +/* NET_SEND.CXX by Oliver Delise */ /* Contact info: */ /* e-mail: delise@mail.isis.de */ -/* www: http://www.isis.de/members/~odelise/progs/mmx-emu/ */ -/* ftp: http://www.isis.de/members/~odelise/progs/flightgear */ +/* www: http://www.isis.de/members/odelise/progs/flightgear */ /* */ -/* Version 0.1-alpha */ +/* Version 0.1-beta */ /* The author of this program offers no waranty at all */ /* about the correct execution of this software material. */ /* Furthermore, the author can NOT be held responsible for */ @@ -28,6 +27,8 @@ /* */ /* History: v0.1pre-alpha: May 25 1999 -> First release */ /* v0.1-alpha Nov 11 1999 */ +/* v0.1-beta Jan 16 2000 -> libc5, glibc2.0 */ +/* glibc-2.1 issues fixed */ /*************************************************************/ #include @@ -256,12 +257,12 @@ void fgd_init(void){ } else if ((address.sin_addr.s_addr = inet_addr( fgd_host)) == INADDR_NONE) { fprintf(stderr," Could not get %s host entry !\n", fgd_host); printf(" NOT resolved !!!\n"); - exit(1); + // exit(1); } else if (verbose == 2) printf(" address valid\n"); if ((base_port > end_port) || ((short)base_port < 0)) { fprintf(stderr,"Bad port range : start=%d end=%d !\n"); - exit(1); + // exit(1); } else if (verbose == 2) { printf(" Port range: %d to %d\n",base_port,end_port); } @@ -314,7 +315,8 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { if (sock == -1) { fprintf(stderr, "Error assigning master socket: %s\n",sys_errlist[errno]); - exit(-1); + /* must check how severe this really is */ + // exit(-1); } address.sin_port = htons(current_port); @@ -416,7 +418,8 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { } } else if (errno == 113) { fprintf(stderr,"No route to host !\n"); - exit(1); + /* must check this */ + // exit(1); } /* fprintf(stderr,"Error %d connecting socket %d to port %d: %s\n", errno,sock,current_port,sys_errlist[errno]); */ @@ -473,10 +476,18 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { case 5: printf("FGD: Receiving data from Host %s\n", FGFS_host); read( sock, fgd_txt, buffp[3]); fgd_txt[buffp[3]] = 0; +/* This works... + if (strcmp(fgd_txt, "UNKNOWN") == 0) { + printf("FGD: Host not in list, sorry...\n"); + } + else printf("FGD: Data from Host %s received\n", fgd_txt); +*/ +/* This has problem with glibc-2.1 if (strcmp(fgd_txt, "UNKNOWN") == -1) { if (verbose == 2) printf("FGD: Data from Host %s received\n", fgd_txt); } else if (verbose == 2) printf("FGD: Host not in list, sorry...\n"); +*/ break; case 17: if (verbose == 2) printf("FGD: Receiving Mat4 data from Host %s\n", FGFS_host); read( sock, fgd_txt, fgd_reply_len); @@ -634,11 +645,18 @@ void fgd_send_com( char *FGD_com, char *FGFS_host) { test = test->next; } fgd_ppl = 0; -/* +/* This does... + if (strcmp(fgd_txt, "UNKNOWN") == 0) { + printf("FGD: Host not in list, sorry...\n"); + } + else printf("FGD: Host %s unregistered\n", fgd_txt); +*/ +/* This does not work on glibc-2.1 if (strcmp(fgd_txt, "UNKNOWN") == -1) { printf("FGD: Host %s unregistered\n", fgd_txt); } - else printf("FGD: Host not in list, sorry...\n"); */ + else printf("FGD: Host not in list, sorry...\n"); +*/ break; case 9: printf(" Shutdown FlightGear-Deamon %s .\n", fgd_name); break; diff --git a/src/NetworkOLK/network.cxx b/src/NetworkOLK/network.cxx index 845bed907..b5e985486 100644 --- a/src/NetworkOLK/network.cxx +++ b/src/NetworkOLK/network.cxx @@ -2,7 +2,7 @@ // // Written by Oliver Delise, started May 1999. // -// Copyleft (C) 1999 Oliver Delise - delise@rp-plus.de +// Copyleft (C) 1999 Oliver Delise - delise@mail.isis.de // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as diff --git a/src/NetworkOLK/network.h b/src/NetworkOLK/network.h index 7c4a84a2a..69897f925 100644 --- a/src/NetworkOLK/network.h +++ b/src/NetworkOLK/network.h @@ -2,7 +2,7 @@ // // Written by Oliver Delise, started May 1999. // -// Copyleft (C) 1999 Oliver Delise - delise@rp-plus.de +// Copyleft (C) 1999 Oliver Delise - delise@mail.isis.de // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as