ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/tcp.ext
(Generate patch)

Comparing deliantra/server/ext/tcp.ext (file contents):
Revision 1.26 by root, Tue Nov 6 03:45:17 2012 UTC vs.
Revision 1.28 by root, Sun Nov 11 04:29:11 2012 UTC

20} 20}
21 21
22sub register($$$$) { 22sub register($$$$) {
23 my ($name, $max_detect, $detect, $serve) = @_; 23 my ($name, $max_detect, $detect, $serve) = @_;
24 24
25 $DETECTORS{$name} = [$max_detect, $detect, $serve]; 25 $DETECTORS{$name} = [$max_detect, $detect, $serve, $name];
26 _update_detectors; 26 _update_detectors;
27 27
28 Guard::guard { 28 Guard::guard {
29 delete $DETECTORS{$name}; 29 delete $DETECTORS{$name};
30 _update_detectors; 30 _update_detectors if defined &_update_detectors;
31 } 31 }
32} 32}
33 33
34our $deliantra_detector = ext::tcp::register deliantra => 10, sub { 34our $deliantra_detector = ext::tcp::register deliantra => 10, sub {
35 /^..version /s 35 /^..version /s
59 my $w; $w = AE::io $fh, 0, sub { 59 my $w; $w = AE::io $fh, 0, sub {
60 my $len = sysread $fh, $buf, 512, length $buf; 60 my $len = sysread $fh, $buf, 512, length $buf;
61 61
62 if ($len) { 62 if ($len) {
63 for ($buf) { 63 for ($buf) {
64 while (my ($name, $v) = each %DETECTORS) { 64 for my $v (values %DETECTORS) {
65 if (my $cb = $v->[1]()) { 65 if (my $cb = $v->[1]()) {
66 undef $w; 66 undef $w;
67 cf::debug "$id: detected protocol $name.\n"; 67 cf::debug "$id: detected protocol $v->[3].\n";
68 $v->[2]($id, $fh, $buf); 68 $v->[2]($id, $fh, $buf);
69 return; 69 return;
70 } 70 }
71 } 71 }
72 72

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines