——————package
URI::ws_Punix;
our
$VERSION
=.002;
our
%KNOWN
;
=head1 NAME
URI::ws_Punix - URI for ws+unix
=head1 SYNOPSIS
use URI;
my $url='ws+unix://unix%2F:%2Ftest%2Fsocket.sock/testing';
my $uri=new URI($url);
# will output: ws+unix
print $uri->scheme,"\n";
# will output: unix/
print $uri->host,"\n";
# will output: /test/socket.sock
print $uri->port
# some classes don't yet understand the scheme ws+unix, so here is a work around
$uri->set_false_scheme('ws');
print $uri->scheme,"\n"; # now prints "ws"
=head1 DESCRIPTION
This class acts as a parser layer for URI, and adds support for handling the rare WebSocket URI using a "Unix Domain Socket. The scheme expected is "ws+unix". Since most modules don't understand this just yet, the fake scheme or $uri->set_false_scheme('ws') was added.
=cut
use
strict;
use
warnings;
=head1 METHODS
=head2 URI::ws_Punix-E<gt>default_port
Returns the default port /tmp/unix.sock
=cut
sub
default_port {
'/tmp/unix.sock'
}
sub
_port {
my
$self
=
shift
;
return
$self
->SUPER::_port(
@_
)
if
$#_
>-1;
return
uri_unescape($1);
}
return
$self
->SUPER::_port(
@_
);
}
sub
host {
my
$self
=
shift
;
return
$self
->SUPER::host(
'unix/'
)
if
$#_
>-1;
return
'unix/'
;
}
return
$self
->SUPER::host(
@_
);
}
=head2 $uri->set_false_scheme('ws')
Used to overload the default behavior.. sometimes you may want to say "ws" in place of "ws+unix". Some modules expect ws, this method lets you overload the default of $uri->scheme.
=cut
sub
set_false_scheme {
my
(
$self
,
$scheme
)=
@_
;
$KNOWN
{
$self
}=
$scheme
;
}
=head2 URI::ws_Punix-E<gt>scheme
Normally follows the defaults unless $uri->set_false_scheme('value') was called on this instance.
=cut
sub
scheme {
my
$self
=
shift
;
if
(
$#_
>-1) {
return
$self
->SUPER::scheme(
@_
);
}
if
(
exists
$KNOWN
{
$self
}) {
return
$KNOWN
{
$self
};
}
return
$self
->SUPER::scheme;
}
=head2 URI::ws_Punix-E<gt>secure
Returns false
=cut
sub
secure { 0 }
our
%KNWON
=();
sub
DESTROY {
my
$self
=
shift
;
delete
$KNOWN
{
$self
};
}
=head1 AUTHOR
Michael Shipper <AKALINUX@CPAN.ORG>
=cut
1;