/* 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 */
/* */
/* 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 <stdio.h>
#include "fgd.h"
+#include <math.h>
//#define printf //
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;
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));
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);
/* 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]);
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];
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];
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;
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);
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");
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");
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;
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]);
free(fgfs_pilot);
free(src_host);
free(fgd_txt);
- printf("MCP: Exit...\n");
exit(0);
}