X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fdisconnect.pl;h=7dad27bb31b3703e303782b66e04fbcdada61830;hb=8b21846900b9f840da86fef72e6ee86ac56cfb53;hp=8bb48ccfd5ab5d975f6a6ffaf88fce153ea82f25;hpb=7dfcb79db379b97452ba1bde654a1945718eb7df;p=spider.git diff --git a/cmd/disconnect.pl b/cmd/disconnect.pl index 8bb48ccf..7dad27bb 100644 --- a/cmd/disconnect.pl +++ b/cmd/disconnect.pl @@ -6,25 +6,42 @@ my @calls = split /\s+/, $line; my $call; my @out; -if ($self->priv < 8) { - return (1, $self->msg('e5')); +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, $self->msg('disc1'))); - } else { - $dxchan->send_now('D', $self->msg('disc1', $self->call)); - } - $dxchan->disconnect; - push @out, $self->msg('disc2', $call); - } else { - push @out, $self->msg('e10', $call); - } + $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);