altered pc21 logic
[spider.git] / cmd / disconnect.pl
1 #
2 # disconnect a local user
3 #
4 my ($self, $line) = @_;
5 my @calls = split /\s+/, $line;
6 my $call;
7 my @out;
8
9 if ($self->priv < 5) {
10         return (1, $self->msg('e5'));
11 }
12
13 foreach $call (@calls) {
14         $call = uc $call;
15         next if $call eq $main::mycall;
16         my $dxchan = DXChannel->get($call);
17         if ($dxchan) {
18                 if ($dxchan->is_node) {
19 #                       $dxchan->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', $self->call)));
20                 } else {
21                         return (1, $self->msg('e5')) if $self->priv < 8;
22                         $dxchan->send_now('D', $self->msg('disc1', $self->call));
23                 } 
24                 $dxchan->disconnect;
25                 push @out, $self->msg('disc2', $call);
26         } elsif (my $conn = Msg->conns($call)) {
27                 $conn->disconnect;
28                 push @out, $self->msg('disc3', $call);
29         } elsif (my $ref = DXCLuster->get_exact($call)) {
30                 my $dxchan = $ref->dxchan;
31                 if ($dxchan && $dxchan->call eq $main::mycall) {
32                         $ref->del;
33                         push @out, $self->msg('disc4', $call);
34                 }
35         } else {
36                 push @out, $self->msg('e10', $call);
37         }
38 }
39
40 return (1, @out);