]> git.mxchange.org Git - flightgear.git/blobdiff - src/NetworkOLK/Tools/fgd_mcp.c
2000 17 Jan updates from "Oliver Delise" <delise@mail.isis.de>
[flightgear.git] / src / NetworkOLK / Tools / fgd_mcp.c
index e3466aa19334da666d9249a0a10cff70990f58a9..2ab5f4517f2cd7e3eb50d80cb7e732453e3eb2ae 100644 (file)
@@ -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   */
 /*                                                           */
 /*    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 //
 
@@ -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);
 }