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
 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)
 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)
 #
 #
 # end a connection (called by disconnect)
 #
-sub finish
+sub disconnect
 {
        my $self = shift;
        my $call = $self->call;
        Log('BBS', "$call", "disconnected");
 {
        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 $self = shift;
        my $user = $self->{user};
-       my $call = $self->{call};
        
        
-       $self->finish;
        $user->close() if defined $user;
        $self->{conn}->disconnect;
        $self->del();
        $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
 #
 #
 # finish up a user context
 #
-sub finish
+sub disconnect
 {
        my $self = shift;
        my $call = $self->call;
 {
        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;
        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
 #
 #
 # 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
 
 #
 # some active measures
@@ -1682,11 +1650,40 @@ sub disconnect
 {
        my $self = shift;
        my $nopc39 = shift;
 {
        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")));
        }
 
                $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;
 }
 
        $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};
 {
        my $dxchan = shift;
        $dxchan->{conn}->set_error(undef) if exists $dxchan->{conn};
-       $dxchan->disconnect;
+       $dxchan->disconnect(1);
 }
 
 # handle incoming messages
 }
 
 # handle incoming messages