summaryrefslogtreecommitdiffstats
path: root/Spline/Socketmap.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Spline/Socketmap.pm')
-rw-r--r--Spline/Socketmap.pm65
1 files changed, 65 insertions, 0 deletions
diff --git a/Spline/Socketmap.pm b/Spline/Socketmap.pm
new file mode 100644
index 0000000..df1a6a9
--- /dev/null
+++ b/Spline/Socketmap.pm
@@ -0,0 +1,65 @@
+package Spline::Socketmap;
+
+use strict;
+use warnings;
+use base qw(Net::Server::PreFork);
+
+use Spline::Netstring;
+use Spline::Srs qw( srs_forward srs_reverse );
+
+use base 'Exporter';
+our @EXPORT = qw( );
+our @EXPORT_OK = qw( );
+
+our $timeout = 10;
+our $handler = undef;
+
+sub call_handler(@) {
+ return unless ref($handler) eq 'CODE';
+ return \&$handler(@_);
+}
+
+sub handle_request($) {
+ my $data = shift;
+
+ my ($map, $key) = split(/ /, $data, 2);
+ my $result = call_handler($map, $key);
+ if (defined $result) {
+ reply($result);
+ }
+ else {
+ reply('TEMP Protocol error');
+ }
+}
+
+sub process_request {
+ my $self = shift;
+
+ eval {
+ local $SIG{'ALRM'} = sub { die "Timed Out!\n" };
+ alarm($timeout);
+
+ handle_request(netstring_read(*STDIN));
+ alarm(0);
+ };
+ my $err = $@;
+ alarm(0);
+
+
+ if ($err) {
+ if ($err =~ /timed out/i) {
+ reply('TEMP Timeout');
+ }
+ else {
+ reply('TEMP Unknown error');
+ }
+ }
+}
+
+sub reply($) {
+ netstring_write(*STDOUT, @_);
+}
+
+1;
+
+# vim: set et ts=4: