diff options
Diffstat (limited to 'lib/IO/Socket/Telnet/HalfDuplex.pm')
-rw-r--r-- | lib/IO/Socket/Telnet/HalfDuplex.pm | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/IO/Socket/Telnet/HalfDuplex.pm b/lib/IO/Socket/Telnet/HalfDuplex.pm index 2e8eb95..61ae4a6 100644 --- a/lib/IO/Socket/Telnet/HalfDuplex.pm +++ b/lib/IO/Socket/Telnet/HalfDuplex.pm @@ -7,10 +7,16 @@ sub new { my $code = delete $args{code} || 99; my $self = $class->SUPER::new(@_); ${*{$self}}{code} = $code; - $self->telnet_simple_callback(\&telnet_negotiation); + $self->IO::Socket::Telnet::telnet_simple_callback(\&telnet_negotiation); return $self; } +sub telnet_simple_callback { + my $self = shift; + ${*$self}{halfduplex_simple_cb} = $_[0] if @_; + ${*$self}{halfduplex_simple_cb}; +} + sub read { my $self = shift; my $buffer; @@ -41,13 +47,16 @@ sub telnet_negotiation { my $self = shift; my $option = shift; + my $external_callback = ${*{$self}}{halfduplex_simple_cb}; my $code = ${*{$self}}{code}; if ($option =~ / $code$/) { ${*{$self}}{got_pong} = 1; - return ''; + return '' unless $external_callback; + return $self->$external_callback($option); } - return; + return unless $external_callback; + return $self->$external_callback($option); } 1; |