#!/afs/athena/contrib/perl/perl

$|=1;

while(<>) {
    chop;

    if (/\S+\.([^\.]+) > \S+\.([^\.]+):.*\d+:\d+\((\d+)\)/) {
	$line = 0;
	$srcport = $1;
	$dstport = $2;
	$count = $3;

	if ($srcport =~ /^(23|telnet|513|login|544|kshell)$/) {
	    $src = "server";
	} elsif ($dstport =~ /^(23|telnet|513|login|544|kshell)$/) {
	    $src = "client";
	}
    } elsif (/^\S/) {
	next;
    } else {
	$line++;
    }

    next if ($line < 3);
    next if ($count <= 0);

    s/\s+//g;

    @chars = grep(($_=pack("H2",$_),1),/../g);

    if ($line == 3) {
	@chars = @chars[8..15];
	$num = ($count<8)?$count:8;
    } else {
	$num = ($count<16)?$count:16;
    }

    $count -= $num;

    if ($src eq "client") {
	$client .= join("",@chars[0..($num-1)]);
    } else {
	# this just removes all newline printing from the client.
	# it's gross, but works empirically
	$client =~ s/\015[\000\012]//g;
	$server = join("",@chars[0..($num-1)]);
	if ($client && ($client ne $server)) {
	    $client =~ s/\033/M-/g;
	    $client =~ s/([\000-\037])/C-$1/g;
	    $client =~ tr/\000-\037/@a-z\[\\\]^_/;
	    print "(",$client,")";
	}
	$client = "";
	print $server;
    }
}
