summaryrefslogtreecommitdiffstats
path: root/Spline/Socketmap.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Spline/Socketmap.pm')
-rw-r--r--Spline/Socketmap.pm34
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;