[Gd-chatter] r10932 - in trunk/libraries: id3v2 interfaces network-flow packetizer packetizer/packetizer-test pcap
hannes at gwydiondylan.org
hannes at gwydiondylan.org
Thu Oct 19 10:16:05 CEST 2006
Author: hannes
Date: Thu Oct 19 10:16:02 2006
New Revision: 10932
Modified:
trunk/libraries/id3v2/id3v2-reader.dylan
trunk/libraries/interfaces/interfaces.dylan
trunk/libraries/interfaces/module.dylan
trunk/libraries/network-flow/network-flow.dylan
trunk/libraries/packetizer/dns.dylan
trunk/libraries/packetizer/ieee80211.dylan
trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan
trunk/libraries/packetizer/packetizer.dylan
trunk/libraries/pcap/library.dylan
trunk/libraries/pcap/pcap.dylan
Log:
Bug: 7299
*specify parse-frame on <collection> to convert them to <stretchy-byte-vector-subsequence>
*use parse-frame instead of make(unparsed-class(frame))
Modified: trunk/libraries/id3v2/id3v2-reader.dylan
==============================================================================
--- trunk/libraries/id3v2/id3v2-reader.dylan (original)
+++ trunk/libraries/id3v2/id3v2-reader.dylan Thu Oct 19 10:16:02 2006
@@ -9,7 +9,7 @@
define method toplevel (reader :: <id3v2-reader>)
//let file = as(<byte-vector>, stream-contents(reader.file-stream));
let tag-data = read-to(reader.file-stream, as(<character>, #xff), test: \==);
- let id3v2-container = make(unparsed-class(<id3v2-tag>), packet: as(<byte-vector>, tag-data));
+ let id3v2-container = parse-frame(<id3v2-tag>, tag-data);
format-out("%s\n", as(<string>, id3v2-container));
format-out("repeated fields: %d\n", id3v2-container.id3v2-frame.size);
-end;
\ No newline at end of file
+end;
Modified: trunk/libraries/interfaces/interfaces.dylan
==============================================================================
--- trunk/libraries/interfaces/interfaces.dylan (original)
+++ trunk/libraries/interfaces/interfaces.dylan Thu Oct 19 10:16:02 2006
@@ -112,14 +112,14 @@
define method push-data-aux (input :: <push-input>,
node :: <ethernet-interface>,
- frame :: <frame>)
+ frame :: <ethernet-frame>)
send(node.unix-interface, assemble-frame(frame).packet);
end;
define method toplevel (node :: <ethernet-interface>)
while(#t)
let packet = receive(node.unix-interface);
- let frame = make(unparsed-class(<ethernet-frame>), packet: as(<stretchy-byte-vector-subsequence>, packet));
+ let frame = parse-frame(<ethernet-frame>, packet);
push-data(node.the-output, frame);
end while;
end;
Modified: trunk/libraries/interfaces/module.dylan
==============================================================================
--- trunk/libraries/interfaces/module.dylan (original)
+++ trunk/libraries/interfaces/module.dylan Thu Oct 19 10:16:02 2006
@@ -18,7 +18,7 @@
use machine-words;
use big-integers;
use flow;
- use packetizer, import: { unparsed-class, <ethernet-frame>, <frame>, assemble-frame };
+ use packetizer, import: { <ethernet-frame>, parse-frame, assemble-frame, packet };
export <ethernet-interface>, interface-name;
end module interfaces;
Modified: trunk/libraries/network-flow/network-flow.dylan
==============================================================================
--- trunk/libraries/network-flow/network-flow.dylan (original)
+++ trunk/libraries/network-flow/network-flow.dylan Thu Oct 19 10:16:02 2006
@@ -156,8 +156,7 @@
end;
define method toplevel (reader :: <pcap-file-reader>)
- let file = as(<stretchy-byte-vector-subsequence>, stream-contents(reader.file-stream));
- let pcap-file = make(unparsed-class(<pcap-file>), packet: file);
+ let pcap-file = parse-frame(<pcap-file>, stream-contents(reader.file-stream));
for(frame in pcap-file.packets)
push-data(reader.the-output, payload(frame));
end;
Modified: trunk/libraries/packetizer/dns.dylan
==============================================================================
--- trunk/libraries/packetizer/dns.dylan (original)
+++ trunk/libraries/packetizer/dns.dylan Thu Oct 19 10:16:02 2006
@@ -107,9 +107,10 @@
define method parse-frame (frame-type == <domain-name-fragment>,
packet :: <byte-sequence>,
- #key parent :: false-or(<container-frame>) = #f)
+ #next next-method,
+ #key parent :: false-or(<container-frame>))
=> (value :: <domain-name-fragment>, next-unparsed :: false-or(<integer>))
- let domain-name = make(unparsed-class(<domain-name-fragment>), packet: packet);
+ let domain-name = next-method();
let label-frame-type
= select (domain-name.type-code)
0 => <label>;
Modified: trunk/libraries/packetizer/ieee80211.dylan
==============================================================================
--- trunk/libraries/packetizer/ieee80211.dylan (original)
+++ trunk/libraries/packetizer/ieee80211.dylan Thu Oct 19 10:16:02 2006
@@ -151,8 +151,11 @@
" Mbit");
end;
-define method parse-frame (frame == <rate>, packet :: <byte-sequence>, #key parent)
- let f = make(unparsed-class(frame), packet: packet);
+define method parse-frame (frame == <rate>,
+ packet :: <byte-sequence>,
+ #next next-method,
+ #key parent)
+ let f = next-method();
let type = select (f.bss-basic-set?)
0 => <extended-rate>;
1 => <basic-set-rate>;
Modified: trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan
==============================================================================
--- trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan (original)
+++ trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan Thu Oct 19 10:16:02 2006
@@ -30,8 +30,7 @@
end;
define test packetizer-parser ()
- let frame = make(unparsed-class(<test-protocol>),
- packet: as(<byte-vector>, #(#x23, #x42)));
+ let frame = parse-frame(<test-protocol>, #(#x23, #x42));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, 8, 16);
@@ -45,8 +44,7 @@
check-equal("Assembled frame is correct", as(<byte-vector>, #(#x23, #x42)), byte-vector.packet);
end;
define test packetizer-modify ()
- let frame = make(unparsed-class(<test-protocol>),
- packet: as(<byte-vector>, #(#x23, #x42)));
+ let frame = parse-frame(<test-protocol>, #(#x23, #x42));
frame.bar := #x69;
let byte-vector = assemble-frame(frame);
check-equal("Modified frame is correct", as(<byte-vector>, #(#x23, #x69)), byte-vector.packet);
@@ -59,8 +57,7 @@
end;
define test packetizer-dynamic-parser ()
- let frame = make(unparsed-class(<dynamic-test>),
- packet: as(<byte-vector>, #(#x2, #x0, #x0, #x3, #x4, #x5)));
+ let frame = parse-frame(<dynamic-test>, #(#x2, #x0, #x0, #x3, #x4, #x5));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], $unknown-at-compile-time, $unknown-at-compile-time, $unknown-at-compile-time);
@@ -83,8 +80,7 @@
end;
define test static-start-test ()
- let frame = make(unparsed-class(<static-start>),
- packet: as(<byte-vector>, #(#x3, #x4, #x5, #x6)));
+ let frame = parse-frame(<static-start>, #(#x3, #x4, #x5, #x6));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 24, $unknown-at-compile-time, $unknown-at-compile-time);
@@ -107,8 +103,7 @@
end;
define test repeated-test ()
- let frame = make(unparsed-class(<repeated-test>),
- packet: as(<byte-vector>, #(#x23, #x42, #x43, #x44, #x67, #x0, #x55)));
+ let frame = parse-frame(<repeated-test>, #(#x23, #x42, #x43, #x44, #x67, #x0, #x55));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, $unknown-at-compile-time, $unknown-at-compile-time);
@@ -141,9 +136,8 @@
end;
define test repeated-and-dynamic-test ()
- let frame = make(unparsed-class(<repeated-and-dynamic-test>),
- packet: as(<byte-vector>, #(#x8, #x23, #x42, #x43, #x44, #x45,
- #x46, #x47, #x80, #x81, #x82)));
+ let frame = parse-frame(<repeated-and-dynamic-test>,
+ #(#x8, #x23, #x42, #x43, #x44, #x45, #x46, #x47, #x80, #x81, #x82));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, 8, 16);
@@ -156,9 +150,8 @@
end;
define test repeated-and-dynamic-test2 ()
- let frame = make(unparsed-class(<repeated-and-dynamic-test>),
- packet: as(<byte-vector>, #(#x8, #x23, #x42, #x43, #x44, #x0,
- #x46, #x47, #x80, #x81, #x82)));
+ let frame = parse-frame(<repeated-and-dynamic-test>,
+ #(#x8, #x23, #x42, #x43, #x44, #x0, #x46, #x47, #x80, #x81, #x82));
let field-list = fields(frame);
frame-field-checker(0, frame, 0, 8, 8);
frame-field-checker(1, frame, 8, 8, 16);
@@ -185,9 +178,8 @@
end;
define test count-repeated-test ()
- let frame = make(unparsed-class(<count-repeated-test>),
- packet: as(<byte-vector>, #(#x3, #x23, #x42, #x43, #x44, #x0,
- #x46, #x47, #x80, #x81, #x82)));
+ let frame = parse-frame(<count-repeated-test>,
+ #(#x3, #x23, #x42, #x43, #x44, #x0, #x46, #x47, #x80, #x81, #x82));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, $unknown-at-compile-time, $unknown-at-compile-time);
@@ -222,8 +214,7 @@
end;
define test label-test ()
- let frame = make(unparsed-class(<labe>),
- packet: as(<byte-vector>, #(#x23, #x42, #x01, #x02, #x42, #x03, #x33, #x33, #x33, #x42, #x00, #x42)));
+ let frame = parse-frame(<labe>, #(#x23, #x42, #x01, #x02, #x42, #x03, #x33, #x33, #x33, #x42, #x00, #x42));
let field-list = fields(frame);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, $unknown-at-compile-time, $unknown-at-compile-time);
@@ -253,8 +244,7 @@
end;
define test inheritance-test()
- let frame = make(unparsed-class(<a-sub>),
- packet: as(<byte-vector>, #(#x23, #x42, #x23)));
+ let frame = parse-frame(<a-sub>, #(#x23, #x42, #x23));
let field-list = fields(frame);
check-equal("Field list has correct size",
2, field-list.size);
@@ -278,8 +268,7 @@
end;
define test inheritance-dynamic-length()
- let aframe = make(unparsed-class(<b-sub>),
- packet: as(<byte-vector>, #(#x23, #x3, #x0, #x0, #x0, #x42, #x42)));
+ let aframe = parse-frame(<b-sub>, #(#x23, #x3, #x0, #x0, #x0, #x42, #x42));
let field-list = fields(aframe);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, 8, 16);
@@ -299,8 +288,7 @@
end;
define test dyn-length ()
- let aframe = make(unparsed-class(<b-sub-sub>),
- packet: as(<byte-vector>, #(#x3, #x0, #x0, #x0, #x42, #x42)));
+ let aframe = parse-frame(<b-sub-sub>, #(#x3, #x0, #x0, #x0, #x42, #x42));
let field-list = fields(aframe);
static-checker(field-list[0], 0, 8, 8);
static-checker(field-list[1], 8, $unknown-at-compile-time, $unknown-at-compile-time);
@@ -316,8 +304,7 @@
end;
define test dynamic-length ()
- let aframe = make(unparsed-class(<b-subb>),
- packet: as(<byte-vector>, #(#x3, #x0, #x0, #x0, #x42, #x42)));
+ let aframe = parse-frame(<b-subb>, #(#x3, #x0, #x0, #x0, #x42, #x42));
let field-list = fields(aframe);
static-checker(field-list[0], 0, $unknown-at-compile-time, $unknown-at-compile-time);
frame-field-checker(0, aframe, 0, 40, 40);
@@ -337,8 +324,7 @@
end;
define test half-byte-parsing ()
- let frame = make(unparsed-class(<half-byte-protocol>),
- packet: as(<byte-vector>, #(#x23, #x42)));
+ let frame = parse-frame(<half-byte-protocol>, #(#x23, #x42));
let field-list = fields(frame);
static-checker(field-list[0], 0, 4, 4);
static-checker(field-list[1], 4, 7, 11);
@@ -404,7 +390,7 @@
end;
define test dns-foo-parsing ()
- let frame = make(unparsed-class(<dns-foo>), packet: as(<byte-vector>, #(#xc0, #x4e)));
+ let frame = parse-frame(<dns-foo>, #(#xc0, #x4e));
check-equal("type of frame is correct", 3, frame.typed);
check-equal("pointer of frame is correct", #x4e, frame.pointer);
end;
Modified: trunk/libraries/packetizer/packetizer.dylan
==============================================================================
--- trunk/libraries/packetizer/packetizer.dylan (original)
+++ trunk/libraries/packetizer/packetizer.dylan Thu Oct 19 10:16:02 2006
@@ -95,11 +95,11 @@
define method parse-frame
(frame-type :: subclass (<frame>),
- packet :: <byte-vector>,
+ packet :: <sequence>,
#rest rest,
#key, #all-keys)
=> (value :: <object>, next-unparsed :: false-or(<integer>));
- let packet-subseq = subsequence(as(<stretchy-byte-vector-subsequence>, packet));
+ let packet-subseq = as(<stretchy-byte-vector-subsequence>, packet);
apply(parse-frame, frame-type, packet-subseq, rest);
end;
@@ -253,15 +253,6 @@
slot cache :: <container-frame>, init-keyword: cache:;
end;
-define method make (class :: subclass(<unparsed-container-frame>),
- #next next-method, #rest rest, #key packet, parent, #all-keys)
- => (res :: <unparsed-container-frame>)
- if (instance?(packet, <byte-vector>))
- let packet = as(<stretchy-byte-vector-subsequence>, packet);
- replace-arg(rest, #"packet", packet);
- end;
- apply(next-method, class, rest);
-end;
define method initialize (class :: <unparsed-container-frame>,
#rest rest, #key parent, #all-keys)
next-method();
Modified: trunk/libraries/pcap/library.dylan
==============================================================================
--- trunk/libraries/pcap/library.dylan (original)
+++ trunk/libraries/pcap/library.dylan Thu Oct 19 10:16:02 2006
@@ -25,12 +25,10 @@
use byte-vector;
use flow;
use packetizer,
- import: { unparsed-class,
+ import: { parse-frame,
<ethernet-frame>,
- <frame>,
assemble-frame,
- packet,
- <stretchy-byte-vector-subsequence> };
+ packet };
export <ethernet-interface>, interface-name, running?-setter, running?, find-all-devices;
end;
Modified: trunk/libraries/pcap/pcap.dylan
==============================================================================
--- trunk/libraries/pcap/pcap.dylan (original)
+++ trunk/libraries/pcap/pcap.dylan Thu Oct 19 10:16:02 2006
@@ -15,7 +15,7 @@
for (i from 0 below packet.caplen)
res[i] := bytes[i];
end;
- push-data(real-interface.the-output, make(unparsed-class(<ethernet-frame>), packet: as(<stretchy-byte-vector-subsequence>, res)));
+ push-data(real-interface.the-output, parse-frame(<ethernet-frame>, res));
end;
define C-callable-wrapper receive-callback of pcap-receive-callback
@@ -168,7 +168,7 @@
define method push-data-aux (input :: <push-input>,
node :: <ethernet-interface>,
- frame :: <frame>)
+ frame :: <ethernet-frame>)
let buffer = as(<byte-vector>, assemble-frame(frame).packet);
pcap-inject(node.pcap-t, buffer-offset(buffer, 0), buffer.size);
end;
More information about the chatter
mailing list