version 1.48, 2010/07/06 07:48:38
|
version 1.50, 2010/12/21 11:17:33
|
Line 184 sub new {
|
Line 184 sub new {
|
TimeoutCallback => undef, |
TimeoutCallback => undef, |
TransitionCallback => undef, |
TransitionCallback => undef, |
Timeoutable => 0, |
Timeoutable => 0, |
TimeoutValue => 300, |
TimeoutValue => 30, |
TimeoutRemaining => 0, |
TimeoutRemaining => 0, |
LocalKeyFile => "", |
LocalKeyFile => "", |
CipherKey => "", |
CipherKey => "", |
Line 342 sub Readable {
|
Line 342 sub Readable {
|
} |
} |
# Append the data to the buffer. And figure out if the read is done: |
# Append the data to the buffer. And figure out if the read is done: |
|
|
|
$self->{TimeoutRemaining} = $self->{TimeoutValue}; # getting data resets the timeout period. |
|
|
&Debug(9,"Received from host: ".$data); |
&Debug(9,"Received from host: ".$data); |
$self->{TransactionReply} .= $data; |
$self->{TransactionReply} .= $data; |
if($self->{TransactionReply} =~ m/\n$/) { |
if($self->{TransactionReply} =~ m/\n$/) { |
Line 501 sub Readable {
|
Line 503 sub Readable {
|
$self->{InformWritable} = 1; |
$self->{InformWritable} = 1; |
$self->{InformReadable} = 0; |
$self->{InformReadable} = 0; |
$self->{Timeoutable} = 1; |
$self->{Timeoutable} = 1; |
$self->{TimeoutRemaining} = $self->{TimeoutValue}; |
|
$self->Transition("SendingRequest"); |
$self->Transition("SendingRequest"); |
return 0; |
return 0; |
} else { |
} else { |
Line 563 sub Writable {
|
Line 564 sub Writable {
|
($errno == POSIX::EAGAIN) || |
($errno == POSIX::EAGAIN) || |
($errno == POSIX::EINTR) || |
($errno == POSIX::EINTR) || |
($errno == 0)) { |
($errno == 0)) { |
$self->{TimeoutRemaining} = $self->{TimeoutValue}; |
$self->{TimeoutRemaining} = $self->{TimeoutValue}; |
substr($self->{TransactionRequest}, 0, $nwritten) = ""; # rmv written part |
substr($self->{TransactionRequest}, 0, $nwritten) = ""; # rmv written part |
if(length $self->{TransactionRequest} == 0) { |
if(length $self->{TransactionRequest} == 0) { |
$self->{InformWritable} = 0; |
$self->{InformWritable} = 0; |
$self->{InformReadable} = 1; |
$self->{InformReadable} = 1; |
$self->{TransactionReply} = ''; |
$self->{TransactionReply} = ''; |
# |
# |
# Figure out the next state: |
# Figure out the next state: |
# |
# |
if($self->{State} eq "Connected") { |
if($self->{State} eq "Connected") { |
$self->Transition("Initialized"); |
$self->Transition("Initialized"); |
} elsif($self->{State} eq "ChallengeReceived") { |
} elsif($self->{State} eq "ChallengeReceived") { |
$self->Transition("ChallengeReplied"); |
$self->Transition("ChallengeReplied"); |
} elsif($self->{State} eq "RequestingVersion") { |
} elsif($self->{State} eq "RequestingVersion") { |
$self->Transition("ReadingVersionString"); |
$self->Transition("ReadingVersionString"); |
} elsif ($self->{State} eq "SetHost") { |
} elsif ($self->{State} eq "SetHost") { |
$self->Transition("HostSet"); |
$self->Transition("HostSet"); |
} elsif($self->{State} eq "RequestingKey") { |
} elsif($self->{State} eq "RequestingKey") { |
$self->Transition("ReceivingKey"); |
$self->Transition("ReceivingKey"); |
# $self->{InformWritable} = 0; |
# $self->{InformWritable} = 0; |
# $self->{InformReadable} = 1; |
# $self->{InformReadable} = 1; |
# $self->{TransactionReply} = ''; |
# $self->{TransactionReply} = ''; |
} elsif ($self->{State} eq "SendingRequest") { |
} elsif ($self->{State} eq "SendingRequest") { |
$self->Transition("ReceivingReply"); |
$self->Transition("ReceivingReply"); |
$self->{TimeoutRemaining} = $self->{TimeoutValue}; |
$self->{TimeoutRemaining} = $self->{TimeoutValue}; |
} elsif ($self->{State} eq "Disconnected") { |
} elsif ($self->{State} eq "Disconnected") { |
return -1; |
return -1; |
} |
} |
return 0; |
return 0; |
} |
} |
} else { # The write failed (e.g. partner disconnected). |
} else { # The write failed (e.g. partner disconnected). |
$self->Transition("Disconnected"); |
$self->Transition("Disconnected"); |
$socket->close(); |
$socket->close(); |
return -1; |
return -1; |
} |
} |
|
|
} |
} |
=pod |
=pod |
|
|
Line 745 sub Shutdown {
|
Line 746 sub Shutdown {
|
$socket->shutdown(2); |
$socket->shutdown(2); |
} |
} |
} |
} |
|
$self->{Timeoutable} = 0; # Shutdown sockets can't timeout. |
} |
} |
|
|
=pod |
=pod |