remove finishes and derive disconnect instead
authorminima <minima>
Wed, 14 Mar 2001 00:48:35 +0000 (00:48 +0000)
committerminima <minima>
Wed, 14 Mar 2001 00:48:35 +0000 (00:48 +0000)
Changes
perl/BBS.pm
perl/DXChannel.pm
perl/DXCommandmode.pm
perl/DXProt.pm
perl/cluster.pl

diff --git a/Changes b/Changes
index 83a5ae4874f03c6c78f31bb81ad70c5225235f6c..ceeb92461a06d4f8abcd88a1177666c705a92fa4 100644 (file)
--- a/Changes
+++ b/Changes
@@ -5,6 +5,7 @@
 4. made the \r\n work correctly on External connections
 5. removed client.pl
 6. fixed memory leakages in DXMsg
+7. fixed pc39/21 handling
 10Mar01=======================================================================
 1. minor changes to the admin manual to reflect differences in distibutions
 thanks to pa3ezl (g0vgs)
index c8f3b1f3dc9f7b979b9fdcd1def3582807784b0f..741fb116a15da803d27a9f24730f7ba3f4a72bec 100644 (file)
@@ -123,11 +123,12 @@ sub normal
 #
 # end a connection (called by disconnect)
 #
-sub finish
+sub disconnect
 {
        my $self = shift;
        my $call = $self->call;
        Log('BBS', "$call", "disconnected");
+       $self->SUPER::disconnect;
 }
 
 # 
index 808b4821206fb6ddc91cd3eaa1d232f8bb1a082d..6afd97e9dcf06a001eb235dc85df3a6bf02d610c 100644 (file)
@@ -366,9 +366,7 @@ sub disconnect
 {
        my $self = shift;
        my $user = $self->{user};
-       my $call = $self->{call};
        
-       $self->finish;
        $user->close() if defined $user;
        $self->{conn}->disconnect;
        $self->del();
index aea2064e615b3754bfb6ec849428211455702d94..6e7a0944f5461c109d9b4a5d6a5106ba2092515b 100644 (file)
@@ -384,7 +384,7 @@ sub process
 #
 # finish up a user context
 #
-sub finish
+sub disconnect
 {
        my $self = shift;
        my $call = $self->call;
@@ -409,6 +409,8 @@ sub finish
        Log('DXCommand', "$call disconnected");
        my $ref = DXCluster->get_exact($call);
        $ref->del() if $ref;
+
+       $self->SUPER::disconnect;
 }
 
 #
index a7ef30c2831a5d7e76665f079ad26b6dae6b7317..c099a92c4163050ebe63ad157296a9f2dccfa2b5 100644 (file)
@@ -1144,38 +1144,6 @@ sub process
 #
 # finish up a pc context
 #
-sub finish
-{
-       my $self = shift;
-       my $call = $self->call;
-       my $ref = DXCluster->get_exact($call);
-       
-       # unbusy and stop and outgoing mail
-       my $mref = DXMsg::get_busy($call);
-       $mref->stop_msg($call) if $mref;
-       
-       # broadcast to all other nodes that all the nodes connected to via me are gone
-       foreach my $node (grep { $_->dxchan == $self } DXNode::get_all) {
-               next if $node->call eq $call;
-               next if $node->call eq $main::mycall;
-               broadcast_ak1a(pc21($node->call, 'Gone.'), $self) unless $self->{isolate};
-       }
-
-       # remove outstanding pings
-       delete $pings{$call};
-       
-       # now broadcast to all other ak1a nodes that I have gone
-       broadcast_ak1a(pc21($call, 'Gone.'), $self) unless $self->{isolate};
-
-       # I was the last node visited
-    $self->user->node($main::mycall);
-
-       # send info to all logged in thingies
-       $self->tell_login('logoutn');
-
-       Log('DXProt', $call . " Disconnected");
-       $ref->del() if $ref;
-}
 
 #
 # some active measures
@@ -1682,11 +1650,40 @@ sub disconnect
 {
        my $self = shift;
        my $nopc39 = shift;
+       my $call = $self->call;
 
-       if ($self->{conn} && !$nopc39) {
+       unless ($nopc39) {
                $self->send_now("D", DXProt::pc39($main::mycall, $self->msg('disc1', "System Op")));
        }
 
+       # unbusy and stop and outgoing mail
+       my $mref = DXMsg::get_busy($call);
+       $mref->stop_msg($call) if $mref;
+       
+       # broadcast to all other nodes that all the nodes connected to via me are gone
+       foreach my $node (grep { $_->dxchan == $self } DXNode::get_all) {
+               next if $node->call eq $call;
+               next if $node->call eq $main::mycall;
+               broadcast_ak1a(pc21($node->call, 'Gone.'), $self) unless $self->{isolate};
+               $node->del;
+       }
+
+       # remove outstanding pings
+       delete $pings{$call};
+       
+       # now broadcast to all other ak1a nodes that I have gone
+       broadcast_ak1a(pc21($call, 'Gone.'), $self) unless $self->{isolate};
+
+       # I was the last node visited
+    $self->user->node($main::mycall);
+
+       # send info to all logged in thingies
+       $self->tell_login('logoutn');
+
+       Log('DXProt', $call . " Disconnected");
+       my $ref = DXCluster->get_exact($call);
+       $ref->del() if $ref;
+
        $self->SUPER::disconnect;
 }
 
index 554ba4ee7ae0d82f5ef9c1a18dc1a7846c976f0e..06dab32b2456a291d0b558e0b8006ec08c043704 100755 (executable)
@@ -102,7 +102,7 @@ sub error_handler
 {
        my $dxchan = shift;
        $dxchan->{conn}->set_error(undef) if exists $dxchan->{conn};
-       $dxchan->disconnect;
+       $dxchan->disconnect(1);
 }
 
 # handle incoming messages