diff options
Diffstat (limited to 'Spline/Socketmap.pm')
-rw-r--r-- | Spline/Socketmap.pm | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/Spline/Socketmap.pm b/Spline/Socketmap.pm index df1a6a9..f78ed3f 100644 --- a/Spline/Socketmap.pm +++ b/Spline/Socketmap.pm @@ -4,7 +4,6 @@ use strict; use warnings; use base qw(Net::Server::PreFork); -use Spline::Netstring; use Spline::Srs qw( srs_forward srs_reverse ); use base 'Exporter'; @@ -32,6 +31,39 @@ sub handle_request($) { } } +sub netstring_read_length($) { + my $fd = shift; + my $length; + + local $/ = ':'; + $length = <$fd>; + die "Cannot read netstring length" unless defined($length); + chomp $length; + + return $length; +} + +sub netstring_read($) { + my $fd = shift; + my ($length, $data); + + $length = netstring_read_length($fd); + if (read($fd, $data, $length) == $length) { + (getc() eq ',') or die "Closing , missing"; + } + else { + die 'Received only ' . length($data) . " of $length bytes"; + } + + return $data; +} + +sub netstring_write($$) { + my ($fd, $data) = @_; + + print $fd length($data).':'.$data.','; +} + sub process_request { my $self = shift; |