- # is there one already connected?
- if (DXChannel->get($call)) {
- my $mess = DXM::msg($lang, 'conother', $call);
- dbg('chan', "-> D $call $mess\n");
- $conn->send_now("D$call|$mess");
- sleep(1);
- dbg('chan', "-> Z $call bye\n");
- $conn->send_now("Z$call|bye"); # this will cause 'client' to disconnect
- return;
- }
-
- # is there one already connected elsewhere in the cluster?
- if (DXCluster->get($call)) {
- my $mess = DXM::msg($lang, 'concluster', $call);
- dbg('chan', "-> D $call $mess\n");
- $conn->send_now("D$call|$mess");
- sleep(1);
- dbg('chan', "-> Z $call bye\n");
- $conn->send_now("Z$call|bye"); # this will cause 'client' to disconnect
- return;
+ # is there one already connected elsewhere in the cluster (and not a cluster)
+ my $user = DXUser->get($call);
+ if ($user) {
+ if ($user->sort eq 'A' && !DXCluster->get_exact($call)) {
+ ;
+ } elsif ($user->sort eq 'U' && $call eq $main::myalias && !DXCluster->get_exact($call)) {
+ ;
+ } else {
+ if (DXChannel->get($call)) {
+ my $mess = DXM::msg($lang, $user->sort eq 'A' ? 'concluster' : 'conother', $call);
+ already_conn($conn, $call, $mess);
+ return;
+ }
+ }
+ } else {
+ if (DXChannel->get($call)) {
+ my $mess = DXM::msg($lang, 'conother', $call);
+ already_conn($conn, $call, $mess);
+ return;
+ }