made some changes for perl 5.6
[spider.git] / perl / DXChannel.pm
index a2010cd418362eb9d380cf19cdd78cd993b8a976..b7d32c44ad4f22e6a98693f7e531d373b61835fb 100644 (file)
@@ -77,6 +77,7 @@ use vars qw(%channels %valid);
                  spotfilter => '5,Spot Filter',
                  inannfilter => '5,Input Ann Filter',
                  inwwvfilter => '5,Input WWV Filter',
+                 inwcyfilter => '5,Input WCY Filter',
                  inspotfilter => '5,Input Spot Filter',
                  passwd => '9,Passwd List,parray',
                  pingint => '5,Ping Interval ',
@@ -85,6 +86,7 @@ use vars qw(%channels %valid);
                  pingtime => '5,Ping totaltime,parray',
                  pingave => '0,Ping ave time',
                  logininfo => '9,Login info req,yesno',
+                 talklist => '0,Talk List,parray',
                 );
 
 # object destruction
@@ -132,6 +134,7 @@ sub alloc
        # get the filters
        $self->{spotfilter} = Filter::read_in('spots', $call, 0);
        $self->{wwvfilter} = Filter::read_in('wwv', $call, 0);
+       $self->{wcyfilter} = Filter::read_in('wcy', $call, 0);
        $self->{annfilter} = Filter::read_in('ann', $call, 0);
 
        bless $self, $pkg; 
@@ -283,7 +286,7 @@ sub send_now
        my $call = $self->{call};
        
        for (@_) {
-               chomp;
+#              chomp;
         my @lines = split /\n/;
                for (@lines) {
                        $conn->send_now("$sort$call|$_");
@@ -304,7 +307,7 @@ sub send                                            # this is always later and always data
        my $call = $self->{call};
 
        for (@_) {
-               chomp;
+#              chomp;
         my @lines = split /\n/;
                for (@lines) {
                        $conn->send_later("D$call|$_");
@@ -359,7 +362,7 @@ sub state
                dbg('state', "$self->{call} channel func $self->{func} state $self->{oldstate} -> $self->{state}\n");
 
                # if there is any queued up broadcasts then splurge them out here
-               if ($self->{delayed} && ($self->{state} eq 'prompt' || $self->{state} eq 'convers')) {
+               if ($self->{delayed} && ($self->{state} eq 'prompt' || $self->{state} eq 'talk')) {
                        $self->send (@{$self->{delayed}});
                        delete $self->{delayed};
                }
@@ -374,10 +377,8 @@ sub disconnect
        my $user = $self->{user};
        my $conn = $self->{conn};
        my $call = $self->{call};
-    my $nopc39 = shift || 0;
        
-       $self->finish($nopc39);
-       $conn->send_now("Z$call|bye") if $conn; # this will cause 'client' to disconnect
+       $self->finish($conn);
        $user->close() if defined $user;
        $conn->disconnect() if $conn;
        $self->del();
@@ -436,6 +437,26 @@ sub field_prompt
        return $valid{$ele};
 }
 
+# take a standard input message and decode it into its standard parts
+sub decode_input
+{
+       my $dxchan = shift;
+       my $data = shift;
+       my ($sort, $call, $line) = $data =~ /^([A-Z])([A-Z0-9\-]{3,9})\|(.*)$/;
+
+       my $chcall = (ref $dxchan) ? $dxchan->call : "UN.KNOWN";
+       
+       # the above regexp must work
+       if (!defined $sort || !defined $call || !defined  $line ||
+                  (ref $dxchan && $call ne $chcall)) {
+               $data =~ s/([\x00-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg;
+               dbg('chan', "DUFF Line from $chcall: $data");
+               return ();
+       }
+       
+       return ($sort, $call, $line);
+}
+
 no strict;
 sub AUTOLOAD
 {