fix console.pl max scroll depth
[spider.git] / cmd / disconnect.pl
index 51ddc696e4a54bf62abf593ffff9a552a1531f15..7dad27bb31b3703e303782b66e04fbcdada61830 100644 (file)
@@ -6,24 +6,42 @@ my @calls = split /\s+/, $line;
 my $call;
 my @out;
 
-if ($self->priv < 9) {
-  return (1, "not allowed");
+if ($self->priv < 5) {
+       return (1, $self->msg('e5'));
 }
 
+if ($calls[0] =~ /^user/i ) {
+       @calls = grep {$_ ne $self->call} DXChannel::get_all_user_calls();
+} elsif ($calls[0] =~ /^node/i) {
+       @calls = grep {$_ ne $main::mycall} DXChannel::get_all_node_calls();
+} elsif (lc $calls[0] eq 'all') {
+       @calls = grep {$_ ne $main::mycall && $_ ne $self->call} DXChannel::get_all_node_calls(), DXChannel::get_all_user_calls();
+}
 foreach $call (@calls) {
-  $call = uc $call;
-  next if $call eq $main::mycall;
-  my $dxchan = DXChannel->get($call);
-  if ($dxchan) {
-    if ($dxchan->is_ak1a) {
-      $dxchan->send_now("D", DXProt::pc39($main::mycall, 'Disconnected'));
-    } else {
-      $dxchan->disconnect;
-       } 
-       push @out, "disconnected $call";
-  } else {
-    push @out, "$call not connected locally";
-  }
+       $call = uc $call;
+       next if $call eq $main::mycall;
+       my $dxchan = DXChannel::get($call);
+       if ($dxchan) {
+               if ($dxchan->is_node) {
+#                      $dxchan->send_pc39($self->msg('disc1', $self->call));
+               } else {
+                       return (1, $self->msg('e5')) if $self->priv < 8;
+                       $dxchan->send_now('D', $self->msg('disc1', $self->call));
+               } 
+               $dxchan->disconnect;
+               push @out, $self->msg('disc2', $call);
+       } elsif (my $conn = Msg->conns($call)) {
+               $conn->disconnect;
+               push @out, $self->msg('disc3', $call);
+#      } elsif (my $ref = DXCluster->get_exact($call)) {
+#              my $dxchancall = $ref->dxchancall;
+#              if ($dxchancall eq $main::mycall || !DXChannel::get($dxchancall)) {
+#                      $ref->del;
+#                      push @out, $self->msg('disc4', $call);
+#              }
+       } else {
+               push @out, $self->msg('e10', $call);
+       }
 }
 
 return (1, @out);