summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-06-29 04:08:31 -0500
committerJesse Luehrs <doy@tozt.net>2009-06-29 04:08:31 -0500
commit2b4f01cfcce1f76b090306e96a2a9a71fd6fa442 (patch)
treeaec7ea93f2ff4b191b4e455c6a2055d29ed22172
parentdba37b41de6155d96f9cdc988a12d077bff4d665 (diff)
downloadio-socket-telnet-halfduplex-2b4f01cfcce1f76b090306e96a2a9a71fd6fa442.tar.gz
io-socket-telnet-halfduplex-2b4f01cfcce1f76b090306e96a2a9a71fd6fa442.zip
hack in a working telnet_simple_callback
(this should be fixed on IO::Socket::Telnet's end, really... it's not nearly extensible enough)
-rw-r--r--lib/IO/Socket/Telnet/HalfDuplex.pm15
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;