[Gd-chatter] r10851 - trunk/libraries/network-flow

hannes at gwydiondylan.org hannes at gwydiondylan.org
Fri Aug 11 21:40:23 CEST 2006


Author: hannes
Date: Fri Aug 11 21:40:21 2006
New Revision: 10851

Modified:
   trunk/libraries/network-flow/module.dylan
   trunk/libraries/network-flow/network-flow.dylan
Log:
Bug: 7299
*implement <completer> which takes a template frame
  and fills all fields set to a value in the template
  frame to each frame passing through it
   (for use in layering)
* add push-data-aux(<push-input>, <pcap-file-writer>, <pcap-packet>)
   this is needed to write <pcap-packets> where the time is already
   set (used in gui-sniffer)

Modified: trunk/libraries/network-flow/module.dylan
==============================================================================
--- trunk/libraries/network-flow/module.dylan	(original)
+++ trunk/libraries/network-flow/module.dylan	Fri Aug 11 21:40:21 2006
@@ -16,6 +16,7 @@
   export <summary-printer>, <verbose-printer>,
     <decapsulator>, <demultiplexer>,
     create-output-for-filter,
+    <completer>,
     <frame-filter>,
     <pcap-file-reader>,
     <pcap-file-writer>,

Modified: trunk/libraries/network-flow/network-flow.dylan
==============================================================================
--- trunk/libraries/network-flow/network-flow.dylan	(original)
+++ trunk/libraries/network-flow/network-flow.dylan	Fri Aug 11 21:40:21 2006
@@ -184,6 +184,35 @@
   force-output(node.file-stream);
 end;
 
+define method push-data-aux (input :: <push-input>,
+                             node :: <pcap-file-writer>,
+                             frame :: <pcap-packet>)
+  write(node.file-stream,
+        assemble-frame(frame));
+  force-output(node.file-stream);
+end;
+
+define class <completer> (<filter>)
+  constant slot template-frame :: <frame>, required-init-keyword: template-frame:;
+end;
+
+define method push-data-aux (input :: <push-input>,
+                             node :: <completer>,
+                             frame :: <container-frame>);
+  for (field in node.template-frame.fields)
+    unless (field.getter(frame))
+      let default-field-value = field.getter(node.template-frame);
+      if (default-field-value)
+        field.setter(default-field-value, frame);
+      elseif (~ field.fixup-function)
+        format-out("Field %=\n", field.field-name);
+        signal(make(<undefined-field-error>));
+      end;
+    end;
+  end;
+  push-data(node.the-output, frame);
+end;
+
 
 /*
 begin



More information about the chatter mailing list