remove active debugging from mds
[spider.git] / cmd / show / wm7d.pl
index 6dfb5b14172a8885511fd9fa97055eb19565c6e4..0aa7e9918084c6e32ace0d25f50d41f9e982d712 100644 (file)
@@ -1,43 +1,86 @@
 #
 # Query the WM7D Database server for a callsign
 #
-# Largely based on "sh/qrz" and info in the Net::Telnet documentation
-#
-# Copyright (c) 2002 Charlie Carroll K1XX
+# Was Largely based on "sh/qrz"
 #
+# Original Copyright (c) 2002 Charlie Carroll K1XX
 #
+# Async version (c) Dirk Koopman G1TLH
 #
 
+sub waitfor
+{
+       my $conn = shift;
+       my $msg = shift;
+       $msg =~ s/\cM//g;
+
+       my $buf = $conn->{msg};
+       $buf =~ s/\r/\\r/g;
+       $buf =~ s/\n/\\n/g;
+
+       dbg "state $conn->{state} '$msg' '$buf'" if isdbg('wm7d');
+
+       $conn->{_wm7d} ||= [];
+       
+       if ($conn->{state} eq 'waitfor') {
+               if ($msg =~ /utc$/ ) { 
+                       $conn->send_later("$conn->{target_call}\n");
+                       $conn->{state} = 'working';
+               }
+       } elsif ($conn->{state} eq 'working') {
+               if ($conn->{msg} =~ /^\rquery->\s*$/) {
+                       $conn->send_later("QUIT\n");
+                       $conn->{state} = 'ending';
+               }
+               return if $msg =~ /^query->/;
+               push @{$conn->{_wm7d}}, $msg;
+       } else {
+               return if $msg =~ /^query->/ || $msg =~ /bye/;
+#              $conn->handle_raw($msg);
+               push @{$conn->{_wm7d}}, $msg;
+       }
+}
+
+sub on_disc
+{
+       my $conn = shift;
+       my $dxchan = shift;
+#      $DB::single = 1;
+       
+       $dxchan->send(map {"$conn->{prefix}$_"} @{$conn->{_wm7d}});
+}
+
 # wm7d accepts only single callsign
-my ($self, $line) = @_;
-my $call = $self->call;
-my @out;
-
-# send 'e24' if allow in Internet.pm is not set to 1
-return (1, $self->msg('e24')) unless $Internet::allow;
-return (1, "SHOW/WM7D <callsign>, e.g. SH/WM7D k1xx") unless $line;
-my $target = $Internet::wm7d_url || 'www.wm7d.net';
-my $port = 5000;
-my $cmdprompt = '/query->.*$/';
-
-my($info, $t);
-                                    
-$t = new Net::Telnet;
-$info =  $t->open(Host    => $target,
-                 Port    => $port,
-                 Timeout => 20);
-
-if (!$info) {
-       push @out, $self->msg('e18', 'WM7D.net');
-} else {
-        ## Wait for prompt and respond with callsign.
-        $t->waitfor($cmdprompt);
-       $t->print($line);
-        ($info) = $t->waitfor($cmdprompt);
-    
-       # Log the lookup
+sub handle
+{
+
+       my ($self, $line) = @_;
+       my $call = $self->call;
+       my @out;
+
+#      $DB::single = 1;
+       
+
+       # send 'e24' if allow in Internet.pm is not set to 1
+       return (1, $self->msg('e24')) unless $Internet::allow;
+       return (1, "SHOW/WM7D <callsign>, e.g. SH/WM7D k1xx") unless $line;
+       my $target = $Internet::wm7d_url || 'www.wm7d.net';
+       my $port = 5000;
+       my $cmdprompt = '/query->.*$/';
+
        Log('call', "$call: show/wm7d \U$line");
-       $t->close;
-       push @out, split /[\r\n]+/, $info;
+
+       my $conn = AsyncMsg->raw($self, $target, $port,
+                                                        handler => \&waitfor, prefix=>'wm7d> ', on_disc =>\&on_disc);
+       if ($conn) {
+               $conn->{state} = 'waitfor';
+               $conn->{target_call} = $line;
+               
+               push @out, $self->msg('m21', "show/wm7d");
+       } else {
+               push @out, $self->msg('e18', 'WM7D.net');
+       }
+
+       return (1, @out);
 }
-return (1, @out);
+