Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv27902/src
Modified Files:
console.c cowmain.c data.c main.c newwin.c parsemeta.c
Log Message:
This patch merges the COW metaserver code. It adds a UDP metaserver option, which can be refreshed, that merges data from all known metaservers. The UPD metaserver can also solicit other servers as if they were a metaserver, and supports the server option to display a comment rather than server name. There is also support for multicast server packets.
data.h, data.c: Changes default metaserver format from array to comma delimited list
parsemeta.h: Fixes description of parsemeta function
console.c (LineToConsole): Increases buffer size (large error messages like displaying the metaserver packet was causing a buffer overflow)
cowmain.c: Adds support for metatype sysdef option
main.c: Renames old -m option to -M, and adds -m option for UDP metaserver
newwin.c: Changes how metaserver window dimensions are set (slightly wider, height variable)
parsemeta.c: Extensively rewritten. Highlights include new server fields, bug fixes related to the size/initialization of the comment field, and new metaserver headers based on what optional fields (age, ping) are displayed. Totally new functions, such as ReadMetasSend, grow, server_find, version_s, version_r, ReadMetasRecv, SaveMetasCache, and LoadMetasCache, have also been added.
Index: newwin.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/newwin.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- newwin.c 9 Jul 2006 08:25:38 -0000 1.42
+++ newwin.c 27 Nov 2006 07:08:41 -0000 1.43
@@ -31,6 +31,7 @@
#include "proto.h"
extern HINSTANCE MyInstance;
+extern int metaHeight; /* height of metaserver window */
static int line = 0;
int MaxMotdLine = 0;
@@ -852,7 +853,7 @@
W_SetWindowButtonHandler (helpWin, helpaction);
#ifdef META
- metaWin = W_MakeMenu ("MetaServer List", 0, 0, 72, num_servers + 2,
+ metaWin = W_MakeMenu ("MetaServer List", 0, 0, 80, metaHeight,
NULL, 2);
W_SetWindowKeyDownHandler (metaWin, metaaction);
W_SetWindowButtonHandler (metaWin, metaaction);
Index: cowmain.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/cowmain.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- cowmain.c 28 May 2006 23:05:12 -0000 1.15
+++ cowmain.c 27 Nov 2006 07:08:41 -0000 1.16
@@ -496,6 +496,10 @@
#ifdef META
int usemeta = 0;
+int metaType; /* which meta to use, UDP, cache, or TCP */
+ /* can be set in xtrekrc with metaType: */
+ /* 1 == UDP, 2 == cache, TCP, 3 = TCP, cache */
+#define DEFAULT_METATYPE 3 /* want TCP, cache as the default */
#endif
/******************************************************************************/
@@ -644,7 +648,13 @@
#ifdef META
if (usemeta)
- parsemeta (usemeta);
+ {
+ metaType = intDefault("metaType", usemeta);
+ /* use default metatype for illegal values */
+ if ((metaType < 1) || (metaType > 3))
+ metaType = DEFAULT_METATYPE;
+ parsemeta(metaType);
+ }
#endif
fed_ship_bmp = "bitmaps/shiplib/fedship.bmp";
Index: main.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/main.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- main.c 10 Aug 2006 10:59:15 -0000 1.10
+++ main.c 27 Nov 2006 07:08:41 -0000 1.11
@@ -67,8 +67,9 @@
LineToConsole (" [-c] run players check on the server\n");
#ifdef META
- LineToConsole (" [-m] check metaserver for active servers\n");
- LineToConsole (" [-k] display known servers\n");
+ LineToConsole (" [-m] list servers, using UDP/IP to multiple metaservers\n");
+ LineToConsole (" [-M] list servers, using TCP/IP to single metaserver\n");
+ LineToConsole (" [-k] list servers from cache generated by -M\n");
#endif
LineToConsole (" [-D] output debug info\n");
@@ -214,25 +215,35 @@
break;
#ifdef META
- case 'm': /* show metaserver window */
+ case 'm': /* use multiple metaservers by UDP */
if (usemeta && usemeta != 1)
{
- fputs ("The options -k and -m are mutually exclusive\n",
+ fputs ("The options -k, -m and -M are mutually exclusive\n",
stderr);
err++;
}
usemeta = 1;
break;
- case 'k': /* show metacache window */
+ case 'k': /* use metaserver cache from prior -M usage */
if (usemeta && usemeta != 2)
{
- fputs ("The options -k and -m are mutually exclusive\n",
+ fputs ("The options -k, -m and -M are mutually exclusive\n",
stderr);
err++;
}
usemeta = 2;
break;
+
+ case 'M': /* use single metaserver by TCP */
+ if (usemeta && usemeta != 3)
+ {
+ fputs("The options -k, -m and -M are mutually exclusive\n",
+ stderr);
+ err++;
+ }
+ usemeta = 3;
+ break;
#endif
#ifdef RSA
@@ -377,7 +388,8 @@
} /* end while */
} /* end for */
- if (!usemeta && !servertmp) /* no meta type was selected, pick metaserver */
+ if (!usemeta && !servertmp) /* no meta type was selected, and no server
+ specified, so pick metaserver */
usemeta = 1;
if (usage || err)
Index: data.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/data.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- data.c 20 Sep 2006 13:04:53 -0000 1.41
+++ data.c 27 Nov 2006 07:08:41 -0000 1.42
@@ -228,9 +228,8 @@
int updatesPerSec = 10;
#ifdef META
-/* Metaservers list */
-char *metaServer[] = {"metaserver.us.netrek.org",
- "metaserver2.us.netrek.org"};
+/* Metaservers list - comma delimited */
+char *metaServer = "metaserver.us.netrek.org, metaserver2.us.netrek.org";
int metaPort = 3521;
char *metaCache = NULL;
#ifdef METAPING
Index: parsemeta.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/parsemeta.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- parsemeta.c 6 Jun 2006 05:14:14 -0000 1.11
+++ parsemeta.c 27 Nov 2006 07:08:41 -0000 1.12
@@ -30,6 +30,8 @@
/*** 06/2003 Erik Hietbrink Added metaPing option.
/*** Added Connecting Now state.
/***
+/*** 11/2006 Bill Balcerski Merged COW UDP metaserver, server solicitation,
+/** and multicast server packet code
/******************************************************************************/
#undef DEBUG
@@ -61,34 +63,45 @@
/* Constants */
[...1221 lines suppressed...]
fd_set readfds;
int nRet;
- // untill I find a better way of killing this thread, only
+ FD_ZERO(&readfds);
+ if (s >= 0) FD_SET(s, &readfds);
+
+ // until I find a better way of killing this thread, only
// wait in periods of maximum 250ms. Better for menu responsiveness ;-)
if (waittime > 250) waittime = 250;
@@ -1151,7 +1849,7 @@
}
// Refresh the displayed ping stats
- for (i = 0; i < num_servers; ++i) metarefresh(i);
+ for (i = 0; i < num_servers; ++i) metarefresh(i, textColor);
// Proceed to the next cycle of ping samples
idx = (unsigned short) ((idx + 1) % RTT_AVG_BUFLEN);
Index: console.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/console.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- console.c 7 May 2006 16:59:27 -0000 1.2
+++ console.c 27 Nov 2006 07:08:40 -0000 1.3
@@ -53,7 +53,7 @@
LineToConsole (char * format, ...)
{
struct cons_buffer * tmp; // temporary pointer to our linked list;
- char str[256];
+ char str[1024];
DWORD numChars;
va_list args;