Update of /cvsroot/netrek/server/Vanilla/tools
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13292/tools

Modified Files:
	players.c 
Log Message:
describe a local server as on this computer

Index: players.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/tools/players.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- players.c	22 Apr 2006 02:16:47 -0000	1.5
+++ players.c	6 May 2006 12:23:30 -0000	1.6
@@ -4,6 +4,8 @@
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 #include "defs.h"
 #include "struct.h"
 #include "data.h"
@@ -185,16 +187,16 @@
 }
 
 /* server comment */
-static char *comment() {
+static char *comment_get() {
 #define MAXPATH 256
   char name[MAXPATH];
   snprintf(name, MAXPATH, "%s/%s", SYSCONFDIR, "comment");
   FILE *file = fopen(name, "r");
-  if (file == NULL) return "";
+  if (file == NULL) return NULL;
   static char text[80];
   char *res = fgets(text, 80, file);
   fclose(file);
-  if (res == NULL) return "";
+  if (res == NULL) return NULL;
   res[strlen(res)-1] = '\0';
   return res;
 }
@@ -216,10 +218,10 @@
 static void udp()
 {
   char buf[2];
-  struct sockaddr addr;
+  struct sockaddr_in addr;
   socklen_t addrlen = sizeof(addr);
   int sock = 0;
-  int stat = recvfrom(sock, buf, 1, MSG_TRUNC, &addr, &addrlen);
+  int stat = recvfrom(sock, buf, 1, MSG_TRUNC, (struct sockaddr *) &addr, &addrlen);
   if (stat < 0 && errno == ENOTSOCK)
     fprintf(stderr, "players: must be called by netrekd with UDP file descriptor setup\n");
   if (stat < 0) { perror("players: recvfrom"); return; }
@@ -231,24 +233,35 @@
   /* compose a reply packet */
   char packet[128];
   
+  /* default the comment */
+  char *comment = comment_get();
+  if (comment == NULL) {
+    char *ip = inet_ntoa(addr.sin_addr);
+    if (!strcmp(ip,"127.0.0.1")) {
+      comment = "server on this computer";
+    } else {
+      comment = "a nearby netrek server";
+    }
+  }
+
   /* s,type,comment,ports,port,players,queue[,port,players,queue] */
   /* if server isn't running, send simple reply */
   if (!openmem(-1)) {
-    sprintf(packet, "s,B,%s,1,2592,%d,%d\n", comment(), 0, 0);
+    sprintf(packet, "s,B,%s,1,2592,%d,%d\n", comment, 0, 0);
   } else {
     if (status->gameup & GU_INROBOT) {
       int q1 = QU_HOME;
       int q2 = QU_AWAY;
       sprintf(packet, "s,B,%s,2,4566,%d,%d,4577,%d,%d\n", 
-	      comment(), pc(q1), ql(q1), pc(q2), ql(q2));
+	      comment, pc(q1), ql(q1), pc(q2), ql(q2));
     } else {
       int q = QU_PICKUP;
-      sprintf(packet, "s,B,%s,1,2592,%d,%d\n", comment(), pc(q), ql(q));
+      sprintf(packet, "s,B,%s,1,2592,%d,%d\n", comment, pc(q), ql(q));
     }
   }
   
   /* send the reply */
-  stat = sendto(sock, packet, strlen(packet), 0, &addr, addrlen);
+  stat = sendto(sock, packet, strlen(packet), 0, (struct sockaddr *) &addr, addrlen);
   if (stat < 0) { perror("players: sendto"); return; }
 }