[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