From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

package URI::ws_Punix;
our $VERSION=.002;
our %KNOWN;
=head1 NAME
URI::ws_Punix - URI for ws+unix
=head1 SYNOPSIS
use URI;
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 URI::Escape qw(uri_unescape);
=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;
if($$self=~ m,^ws+\+unix://unix%2F:?([^/]+),is) {
return uri_unescape($1);
}
return $self->SUPER::_port(@_);
}
sub host {
my $self=shift;
return $self->SUPER::host('unix/') if $#_ >-1;
if($$self=~ m,^ws+\+unix://unix%2F:?.*$,is) {
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;