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;


_______________________________________________
netrek-cvs mailing list
[email protected]
http://mailman.us.netrek.org/mailman/listinfo/netrek-cvs

Reply via email to