ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/bin/tracer
Revision: 1.1
Committed: Sun Jul 20 15:03:45 2003 UTC (20 years, 10 months ago) by pcg
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# Content
1 #!/usr/bin/perl
2
3 use IO::Socket::INET;
4
5 use KGS::Protocol;
6 use KGS::Messages;
7
8 use KGS::Listener::Debug;
9
10 my $l = new IO::Socket::INET LocalPort => 2379, Listen => 1, ReuseAddr => 1;
11
12 my $prot = new KGS::Protocol;
13 my $sgen = new KGS::Protocol::Generator;
14
15 (my $listener = mylistener->new)->listen ($prot, "*");
16
17 print "connect with cgoban2 to localhost:2379 to see a protocol dump.\n";
18 print "ready.\n";
19
20 while (my $l = $l->accept) {
21 if (fork == 0) {
22 my $r = new IO::Socket::INET PeerHost => "kgs.kiseido.com:2379";
23 $prot->handshake ($r);
24 {
25 sysread $l, my $buf, 1;
26 $buf = chr 3;
27 syswrite $l, $buf, 1;
28 }
29
30 my $rlen = 0;
31 my $sbuf = "";
32
33 my $Rb = "";
34 print "connection established\n";
35 (vec $Rb, fileno $l, 1) = 1;
36 (vec $Rb, fileno $r, 1) = 1;
37 while (select my $rb = $Rb, undef, undef, undef) {
38 if (vec $rb, fileno $l, 1) {
39 last unless sysread $l, my $buf, 8192;
40 syswrite $r, $buf, 8192;
41
42 $sbuf .= $buf;
43
44
45 for (;;) {
46 if (!$rlen and 2 <= length $sbuf) {
47 $rlen = ($sgen->{srand} >> 24) ^ unpack "v", $sbuf;
48 }
49
50 if ($rlen and $rlen <= length $sbuf) {
51 my $pkt = substr $sbuf, 0, $rlen, "";
52 $sgen->dec_send ($pkt);
53
54 my $type = unpack "xx v", $pkt;
55 my $msg = eval { $KGS::Messages::dec_send{$type} };
56 warn "ERROR: $@" if $@;
57 if ($msg) {
58 $msg = $msg->(substr $pkt, 4);
59
60 $prot->{generator}->set_rseed ($msg->{name}) if $msg->{type} eq "login";
61
62 print "\npackage type received from CLIENT:\n";
63 print KGS::Listener::Debug::dumpval $msg;
64 } else {
65 print "\007\n\nUNKNOWN PACKAGE TYPE RECEIVED FROM CLIENT:\n";
66 open XTYPE, "|xtype"; printf XTYPE "%16d%s", (length $pkt), $pkt; close XTYPE;
67 }
68
69 $rlen = 0;
70 } else {
71 last;
72 }
73 }
74 }
75 if (vec $rb, fileno $r, 1) {
76 last unless sysread $r, my $buf, 8192;
77 syswrite $l, $buf, 8192;
78 eval {
79 $prot->feed_data ($buf);
80 };
81 warn "ERROR: $@" if $@;
82 }
83 }
84 print "closing connection.\n";
85 exit;
86 }
87 }
88
89 package mylistener;
90
91 use base KGS::Listener;
92
93 sub inject {
94 my ($self, $msg) = @_;
95
96 print "received msg from SERVER\n";
97 print KGS::Listener::Debug::dumpval $msg;
98 }
99