ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/bin/tracer
Revision: 1.2
Committed: Mon Jul 21 13:39:02 2003 UTC (20 years, 10 months ago) by pcg
Branch: MAIN
Changes since 1.1: +4 -4 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.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 pcg 1.2 $rlen = ($sgen->{client_state} >> 24) ^ unpack "v", $sbuf;
48 pcg 1.1 }
49    
50     if ($rlen and $rlen <= length $sbuf) {
51     my $pkt = substr $sbuf, 0, $rlen, "";
52 pcg 1.2 $sgen->dec_client ($pkt);
53 pcg 1.1
54     my $type = unpack "xx v", $pkt;
55 pcg 1.2 my $msg = eval { $KGS::Messages::dec_client{$type} };
56 pcg 1.1 warn "ERROR: $@" if $@;
57     if ($msg) {
58     $msg = $msg->(substr $pkt, 4);
59    
60 pcg 1.2 $prot->{generator}->set_server_seed ($msg->{name}) if $msg->{type} eq "login";
61 pcg 1.1
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