Update of /cvsroot/netrek/client/netrekxp/src
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6576/src
Modified Files:
data.c feature.c socket.c
Log Message:
Next pass at generic_32 version b support.
Known issues: can't find win32 equivalent for attribute packing,
feature packet arg1 of /002 is causing pointer error to arg2
Index: feature.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/feature.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- feature.c 19 Apr 2008 20:03:01 -0000 1.22
+++ feature.c 12 Jul 2008 12:09:37 -0000 1.23
@@ -76,7 +76,7 @@
{"SELF_8FLAGS2", &F_self_8flags2, 'S', 0, 0, 0},
{"19FLAGS", &F_self_19flags, 'S', 1, 0, 0},
{"SHIP_CAP", &F_ship_cap, 'S', 1, 0, 0},
- {"SP_GENERIC_32", &F_sp_generic_32, 'S', 1, 0, 0},
+ {"SP_GENERIC_32", &F_sp_generic_32, 'S', 1, "\002", 0},
{"FULL_DIRECTION_RESOLUTION", &F_full_direction_resolution, 'S', 1, 0, 0},
{"FULL_WEAPON_RESOLUTION", &F_full_weapon_resolution, 'S', 1, 0, 0},
{"CHECK_PLANETS", &F_check_planets, 'S', 1, 0, 0},
@@ -117,11 +117,15 @@
{
struct feature *f;
int value;
+ char arg1, arg2;
for (f = features; f->name != 0; f++)
{
if (strcmpi (f->name, "FEATURE_PACKETS") != 0)
{
+ value = f->value;
+ arg1 = (f->arg1 ? *f->arg1 : 0);
+ arg2 = (f->arg2 ? *f->arg2 : 0);
if (!strcmp(f->name, "CHECK_PLANETS"))
value = useCheckPlanets;
else if (!strcmp(f->name, "FULL_DIRECTION_RESOLUTION"))
@@ -130,16 +134,10 @@
value = useFullWeapInfo;
else if (!strcmp(f->name, "SP_GENERIC_32"))
value = useGeneric32;
- else
- value = f->value;
- sendFeature (f->name,
- f->feature_type,
- value,
- (char) (f->arg1 ? *f->arg1 : 0),
- (char) (f->arg2 ? *f->arg2 : 0));
-
+ sendFeature (f->name, f->feature_type, value, arg1, arg2);
#ifdef DEBUG
- LineToConsole ("(C->S) %s (%c): %d\n", f->name, f->feature_type, value);
+ LineToConsole ("(C->S) %s (%c): %d (%d/%d)\n", f->name,
+ f->feature_type, value, arg1, arg2);
#endif
}
}
@@ -164,8 +162,9 @@
}
#endif
- sprintf (buf, "%s: %s(%d)", &packet->name[0],
- ((value == 1) ? "ON" : (value == 0) ? "OFF" : "UNKNOWN"), value);
+ sprintf (buf, "%s: %s(%d) (%d/%d)", &packet->name[0],
+ ((value == 1) ? "ON" : (value == 0) ? "OFF" : "UNKNOWN"), value,
+ packet->arg1, packet->arg2);
#ifdef TOOLS
W_WriteText (toolsWin, 0, 0, textColor, buf, strlen (buf), W_RegularFont);
@@ -213,7 +212,11 @@
lame_base_refit = value;
return;
}
-
+ if (strcmpi (packet->name, "SP_GENERIC_32") == 0)
+ {
+ generic_32_version = packet->arg1;
+ return;
+ }
if (features[i].name == 0)
{
LineToConsole ("Feature %s from server unknown to client!\n", packet->name);
Index: socket.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/socket.c,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -d -r1.48 -r1.49
--- socket.c 12 Jul 2008 03:49:45 -0000 1.48
+++ socket.c 12 Jul 2008 12:09:37 -0000 1.49
@@ -922,7 +922,7 @@
if (paradise)
size = sizeof(struct motd_pic_spacket);
else
- size = sizeof(struct generic_32_spacket);
+ size = GENERIC_32_LENGTH;
break;
case SP_STATS2:
//case SP_FLAGS_ALL:
@@ -2818,28 +2818,47 @@
#endif
return;
}
- if (packet->version < 'a')
- return;
- else if (packet->version == 'a')
+ return;
+}
+
+void
+handleGeneric32_a (struct generic_32_spacket_a *packet)
+{
+
+ if (sizeof(struct generic_32_spacket) != GENERIC_32_LENGTH)
{
- me->p_repair_time = packet->repair_time;
- me->pl_orbit = packet->pl_orbit;
- return;
+#ifdef DEBUG
+ LineToConsole("Generic32 packet length of %d, ignoring packet.\n", sizeof(struct generic_32_spacket));
+#endif
+ return;
}
- else if (packet->version == 'b')
+ me->p_repair_time = packet->repair_time;
+ me->pl_orbit = packet->pl_orbit;
+ return;
+}
+
+void
+handleGeneric32_b (struct generic_32_spacket_b *packet)
+{
+
+ if (sizeof(struct generic_32_spacket) != GENERIC_32_LENGTH)
{
- me->p_repair_time = ntohs (packet->repair_time);
- me->pl_orbit = packet->pl_orbit;
- context->gameup = ntohs(packet->gameup);
- context->tournament_teams = packet->tournament_teams;
- context->tournament_age = packet->tournament_age;
- context->tournament_age_units = packet->tournament_age_units;
- context->tournament_remain = packet->tournament_remain;
- context->tournament_remain_units = packet->tournament_remain_units;
- context->starbase_remain = packet->starbase_remain;
- context->team_remain = packet->team_remain;
- return;
+#ifdef DEBUG
+ LineToConsole("Generic32 packet length of %d, ignoring packet.\n", sizeof(struct generic_32_spacket));
+#endif
+ return;
}
+ me->p_repair_time = ntohs (packet->repair_time);
+ me->pl_orbit = packet->pl_orbit;
+ context->gameup = ntohs(packet->gameup);
+ context->tournament_teams = packet->tournament_teams;
+ context->tournament_age = packet->tournament_age;
+ context->tournament_age_units = packet->tournament_age_units;
+ context->tournament_remain = packet->tournament_remain;
+ context->tournament_remain_units = packet->tournament_remain_units;
+ context->starbase_remain = packet->starbase_remain;
+ context->team_remain = packet->team_remain;
+ return;
}
void
@@ -2986,7 +3005,14 @@
if (paradise)
handleMotdPic ((struct motd_pic_spacket *) sbuf);
else
- handleGeneric32 ((struct generic_32_spacket *) sbuf);
+ {
+ if (generic_32_version == 'a')
+ handleGeneric32_a ((struct generic_32_spacket_a *) sbuf);
+ else if (generic_32_version == 'b')
+ handleGeneric32_b ((struct generic_32_spacket_b *) sbuf);
+ else
+ handleGeneric32 ((struct generic_32_spacket *) sbuf);
+ }
return;
}
void handlePacket33 (unsigned char *sbuf)
@@ -5086,10 +5112,29 @@
{
LineToConsole("\nS->C SP_GENERIC_32\t");
if (log_packets > 1)
- LineToConsole(" version=%d, repair_time=%d, pl_orbit=%d,",
- ((struct generic_32_spacket *) packet)->version,
- ntohs(((struct generic_32_spacket *) packet)->repair_time),
- ntohs(((struct generic_32_spacket *) packet)->pl_orbit) );
+ {
+ if (generic_32_version == 'a')
+ LineToConsole(" version=%d, repair_time=%d, pl_orbit=%d,",
+ ((struct generic_32_spacket_a *) packet)->version,
+ ((struct generic_32_spacket_a *) packet)->repair_time,
+ ((struct generic_32_spacket_a *) packet)->pl_orbit);
+ else if (generic_32_version == 'b')
+ LineToConsole(" version=%d, repair_time=%d, pl_orbit=%d, gameup=%d, tourn_teams=%d, tourn_age=%d, tourn_age_units=%d, tourn_remain=%d, tourn_remain_units=%d, starbase_remain=%d, team_remain=%d,",
+ ((struct generic_32_spacket_b *) packet)->version,
+ ntohs(((struct generic_32_spacket_b *) packet)->repair_time),
+ ((struct generic_32_spacket_b *) packet)->pl_orbit,
+ ((struct generic_32_spacket_b *) packet)->gameup,
+ ((struct generic_32_spacket_b *) packet)->tournament_teams,
+ ((struct generic_32_spacket_b *) packet)->tournament_age,
+ ((struct generic_32_spacket_b *) packet)->tournament_age_units,
+ ((struct generic_32_spacket_b *) packet)->tournament_remain,
+ ((struct generic_32_spacket_b *) packet)->tournament_remain_units,
+ ((struct generic_32_spacket_b *) packet)->starbase_remain,
+ ((struct generic_32_spacket_b *) packet)->team_remain );
+
+ else
+ LineToConsole(" version=unknown," );
+ }
break;
}
case SP_FLAGS_ALL :
Index: data.c
===================================================================
RCS file: /cvsroot/netrek/client/netrekxp/src/data.c,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -d -r1.112 -r1.113
--- data.c 12 Jul 2008 03:49:45 -0000 1.112
+++ data.c 12 Jul 2008 12:09:37 -0000 1.113
@@ -928,4 +928,5 @@
int fullBitmapRotation = 1; /* draw old bitmap sets to all angles */
int hideConsole = 0; /* show console window or not */
+int generic_32_version = 0; /* what version of generic_32 does server send us */
struct context *context;