#!/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

