#!/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"); 
  }

  @message = unpack('(N3 N/a x![N])*', $message);

  for(my $n = 0; $n < $#message; $n += 4) {
    print STDERR  $message[$n] . "\t" .
		  $message[$n + 1] . "\t" .
		  $message[$n + 2] . "\t" .
		  unpack('H*', $message[$n + 3]) . "\n";
  }

  # Respond

  print pack('N2', 0xdeadbeef, 8);
}

# vim:softtabstop=2:sw=2

