#!/usr/bin/perl -w
$| = 1;
my $header;
my $message;
while(sysread(STDIN, $header, 8) == 8) {
(my $magic, my $length) = unpack('N2', $header);
if ($magic != 0xbeefdead || $length < 8) {
die("Bad header: " . unpack('H*', $header) . "!\n");
}
$length -= 8;
if (sysread(STDIN, $message, $length) != $length) {
die("read($length): $!\n");
}
for(my $ofs = 0; $ofs < $length; $ofs += $skiplen) {
(my $spc, my $vnd, my $atr, my $len) = unpack('@' . $ofs . 'N4', $message);
$ofs += 16;
$skiplen = ($len + 3) & ~3;
my $val = unpack('@' . $ofs . 'a[' . $skiplen . ']', $message);
print STDERR $spc . "\t" .
$vnd . "\t" .
$atr . "\t" .
$len . "\t" .
unpack('H*', $val) . "\n";
}
# Respond
print pack('N2', 0xdeadbeef, 8);
}
# vim:softtabstop=2:sw=2
syntax highlighted by Code2HTML, v. 0.9.1