package SockJS::Transport::Base;
use strict;
use warnings;
use List::Util qw(any);
sub new {
my $class = shift;
my (%params) = @_;
my $self = {};
bless $self, $class;
$self->{name} = $params{name} || '';
$self->{allowed_methods} = ['OPTIONS'];
return $self;
}
sub name { shift->{name} }
sub dispatch {
my $self = shift;
my ($env) = @_;
$env->{'sockjs.cacheable'} = $self->{cacheable};
$env->{'sockjs.allowed_methods'} = $self->{allowed_methods};
my $method = $env->{REQUEST_METHOD};
if ( !any { $_ eq $method } @{ $self->{allowed_methods} } ) {
return [ 405, [ 'Allow' => join ', ', @{ $self->{allowed_methods} } ],
[''] ];
}
$method = "dispatch_$method";
return $self->$method(@_);
}
sub dispatch_OPTIONS {
my $self = shift;
my ($env) = @_;
$env->{'sockjs.cacheable'} = 1;
return [ 204, [], [''] ];
}
sub _return_error {
my $self = shift;
my ( $error, %params ) = @_;
return [
$params{status} || 500,
[
'Content-Type' => 'text/plain; charset=UTF-8',
'Content-Length' => length($error),
$params{headers} ? @{ $params{headers} } : ()
],
[$error]
];
}
1;