[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