[Gd-chatter] r10866 - in trunk/libraries: gui-sniffer packetizer

hannes at gwydiondylan.org hannes at gwydiondylan.org
Wed Aug 30 03:17:12 CEST 2006


Author: hannes
Date: Wed Aug 30 03:17:09 2006
New Revision: 10866

Modified:
   trunk/libraries/gui-sniffer/gui-sniffer.dylan
   trunk/libraries/packetizer/packetizer.dylan
Log:
Bug: 7299
*fix packetizer-test (since repeated fields can contain translated-frames, the frame slot of <rep-frame-field> can't contain a type specification on <frame>
*fix compute-absolute-offset once more.. repeated frame-fields had an error in their computation
*some cleanup

Modified: trunk/libraries/gui-sniffer/gui-sniffer.dylan
==============================================================================
--- trunk/libraries/gui-sniffer/gui-sniffer.dylan	(original)
+++ trunk/libraries/gui-sniffer/gui-sniffer.dylan	Wed Aug 30 03:17:09 2006
@@ -233,12 +233,12 @@
 end;
 
 define method show-packet-hex-dump (frame :: <gui-sniffer-frame>, network-packet)
-  //XXX: this should be easier!
   frame.packet-hex-dump.gadget-value := get-hex-dump(network-packet);
 end;
 
 define function get-hex-dump (network-packet) => (string :: <string>)
   if (network-packet)
+    //XXX: this should be easier!
     let out = make(<string-stream>, direction: #"output");
     block()
       hexdump(out, network-packet.packet); //XXX: once assemble-frame
@@ -258,16 +258,16 @@
 end;
 
 define method find-frame-field (frame :: <container-frame>, search :: <container-frame>)
- => (res :: false-or(<frame-field>))
+ => (res :: false-or(type-union(<frame-field>, <rep-frame-field>)))
   block(ret)
     for (ff in sorted-frame-fields(frame))
       if (ff.value == search)
         ret(ff)
       end;
       if (instance?(ff.value, <collection>))
-        for (ele in ff.value)
+        for (ele in ff.value, i from 0)
           if (ele == search)
-            ret(ff)
+\            ret(ff.frame-field-list[i])
           end;
         end;
       end;
@@ -279,7 +279,7 @@
 define method compute-absolute-offset (frame :: <container-frame>)
   if (frame.parent)
     let ff = find-frame-field(frame.parent, frame);
-    compute-absolute-offset(frame.parent) + ff.start-offset;
+    compute-absolute-offset(ff);
   else
     0
   end;
@@ -363,11 +363,13 @@
   let start-pos = 6 + start-rest * 3 + if (start-rest >= 8) 1 else 0 end;
   let end-pos = 6 + end-rest * 3 + if (end-rest > 8) 1 else 0 end;
   
-  hex-dump[start-line + 1][start-pos - 1] := '[';
-  if (end-pos >= hex-dump[end-line + 1].size)
-    hex-dump[end-line + 1] := add!(hex-dump[end-line + 1], ']');
-  else
-    hex-dump[end-line + 1][end-pos - 1] := ']';
+  unless (start-line = end-line & start-pos = end-pos)
+    hex-dump[start-line + 1][start-pos - 1] := '[';
+    if (end-pos >= hex-dump[end-line + 1].size)
+      hex-dump[end-line + 1] := add!(hex-dump[end-line + 1], ']');
+    else
+      hex-dump[end-line + 1][end-pos - 1] := ']';
+    end;
   end;
   hex-dump := reduce1(method(a,b) concatenate(a, "\n", b) end, hex-dump);
   mframe.packet-hex-dump.gadget-value := hex-dump;

Modified: trunk/libraries/packetizer/packetizer.dylan
==============================================================================
--- trunk/libraries/packetizer/packetizer.dylan	(original)
+++ trunk/libraries/packetizer/packetizer.dylan	Wed Aug 30 03:17:09 2006
@@ -102,7 +102,7 @@
 
 define function compute-static-offset(list :: <simple-vector>)
   //input is a list of <field>
-  //set static-start, static-end, static-length for all fields
+  //sets static-start, static-end, static-length for all fields
   let start = 0;
   for (field in list)
     if (start ~= $unknown-at-compile-time)
@@ -183,7 +183,6 @@
 end;
 
 define open generic high-level-type (low-level-type :: subclass(<frame>)) => (res :: <type>);
-//define high-level-type (subclass(<frame>));
 
 define inline method high-level-type (object :: subclass(<frame>)) => (res :: <type>)
   object
@@ -511,10 +510,6 @@
 end;
 
 define abstract class <repeated-field> (<statically-typed-field>)
-  //only <untranslated-frames> are stored in <repeated-fields>
-
-  //this is only temporary, it should be moved to self-delimited-repeated-field
-  //slot reached-end?, required-init-keyword: reached-end?:;
 end;
 
 define class <self-delimited-repeated-field> (<repeated-field>)
@@ -554,7 +549,7 @@
 
 define class <rep-frame-field> (<position-mixin>)
   constant slot parent-frame-field :: <frame-field>, required-init-keyword: parent:;
-  constant slot frame :: <frame>, required-init-keyword: frame:;
+  constant slot frame, required-init-keyword: frame:;
 end;
 
 define method start-offset (ff :: <position-mixin>)
@@ -584,11 +579,6 @@
   end;
 end;
 
-/* define inline method find-frame-by-offset (frame :: <container-frame>, offset :: <integer>)
-  block(ret)
-    for (frame-field in sorted-frame-fields(frame))
-      if (frame-field.start-offset = offset
-end; */
 define inline method value (frame-field :: <frame-field>) => (res)
   frame-field.field.getter(frame-field.frame);
 end;



More information about the chatter mailing list