- my ($conn, $msg, $err) = @_;
- my $dxchan = DXChannel->get_by_cnum($conn); # get the dxconnnect object for this message
-
- if (!defined $msg || (defined $err && $err)) {
- if ($dxchan) {
- if (defined $err) {
- $conn->disconnect;
- undef $conn;
- $dxchan->conn(undef);
- }
- $dxchan->disconnect;
- } elsif ($conn) {
+ my ($conn, $msg) = @_;
+ my ($sort, $call, $line) = DXChannel::decode_input(0, $msg);
+ return unless defined $sort;
+
+ unless (is_callsign($call)) {
+ already_conn($conn, $call, DXM::msg($lang, "illcall", $call));
+ return;
+ }
+
+ # set up the basic channel info
+ # is there one already connected to me - locally?
+ my $user = DXUser->get_current($call);
+ my $dxchan = DXChannel->get($call);
+ if ($dxchan) {
+ my $mess = DXM::msg($lang, ($user && $user->is_node) ? 'concluster' : 'conother', $call, $main::mycall);
+ already_conn($conn, $call, $mess);
+ return;
+ }
+
+ # is he locked out ?
+ my $basecall = $call;
+ $basecall =~ s/-\d+$//;
+ my $baseuser = DXUser->get_current($basecall);
+ my $lock = $user->lockout if $user;
+ if ($baseuser && $baseuser->lockout || $lock) {
+ if (!$user || !defined $lock || $lock) {
+ my $host = $conn->{peerhost} || "unknown";
+ Log('DXCommand', "$call on $host is locked out, disconnected");