]> gitweb.factorcode.org Git - factor-unmaintained.git/blobdiff - headers/headers.factor
unmaintained: New home for misfit Factor vocabularies.
[factor-unmaintained.git] / headers / headers.factor
diff --git a/headers/headers.factor b/headers/headers.factor
new file mode 100644 (file)
index 0000000..a228e77
--- /dev/null
@@ -0,0 +1,86 @@
+! Copyright (C) 2007 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.syntax byte-arrays io
+io.sockets kernel structs math math.parser
+prettyprint sequences ;
+IN: io.sockets.headers
+
+C-STRUCT: etherneth
+    { { "char" 6 } "dmac" }
+    { { "char" 6 } "smac" }
+    { "ushort" "type" } ;
+
+: >mac-address ( byte-array -- string )
+    6 memory>byte-array
+    [ >hex 2 48 pad-left ] { } map-as ":" join ;
+
+: etherneth. ( etherneth -- )
+    [ etherneth-dmac "Dest   MAC: " write >mac-address . ] keep
+    [ etherneth-smac "Source MAC: " write >mac-address . ] keep
+    [ etherneth-type "Type      : " write .h ] keep
+    drop ;
+
+C-STRUCT: iph
+    { "uchar" "hl|v" } ! hl is 4 bits, v is 4 bits
+    { "uchar" "tos" }
+    { "short" "len" }
+    { "short" "id" }
+    { "short" "off" }
+    { "uchar" "ttl" }
+    { "uchar" "p" }
+    { "ushort" "ip_sum" }
+    { "uint" "ip_src" }
+    { "uint" "ip_dst" } ;
+
+: iph-hl ( iph -- n )
+    iph-hl|v -4 shift ;
+
+: iph-v ( iph -- n )
+    iph-hl|v 0x0f bitand ;
+
+: set-iph-hl ( n iph -- )
+    [ iph-hl|v 0x0f bitand >r 4 shift r> bitor ] keep
+    set-iph-hl|v ;
+
+: set-iph-v ( n iph -- )
+    [ iph-hl|v 0xf0 bitand bitor ] keep
+    set-iph-hl|v ;
+
+C-STRUCT: icmph
+    { "uchar" "type" }
+    { "uchar" "code" }
+    { "short" "chksum" }
+    { "ushort" "id" }
+    { "ushort" "seq" } ;
+
+C-STRUCT: udph
+    { "ushort" "sport" }
+    { "ushort" "dport" }
+    { "ushort" "len" }
+    { "ushort" "check" } ;
+
+C-STRUCT: tcph
+    { "ushort" "sport" }
+    { "ushort" "dport" }
+    { "uint" "seq" }
+    { "uint" "ack" }
+    { "uchar" "x2|off" }
+    { "uchar" "flags" }
+    { "ushort" "win" }
+    { "ushort" "sum" }
+    { "ushort" "urp" } ;
+
+: tcph-x2 ( iph -- n )
+    tcph-x2|off -4 shift ;
+
+: tcph-off ( iph -- n )
+    tcph-x2|off 0x0f bitand ;
+
+: set-tcph-x2 ( n iph -- )
+    [ tcph-x2|off 0x0f bitand >r 4 shift r> bitor ] keep
+    set-tcph-x2|off ;
+
+: set-tcph-off ( n iph -- )
+    [ tcph-x2|off 0x0f bitand bitor ] keep
+    set-tcph-x2|off ;
+