__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
package URI::irc; # draft-butcher-irc-url-04
use strict;
use warnings;
our $VERSION = '5.30';
use parent 'URI::_login';
use overload (
'""' => sub { $_[0]->as_string },
'==' => sub { URI::_obj_eq(@_) },
'!=' => sub { !URI::_obj_eq(@_) },
fallback => 1,
);
sub default_port { 6667 }
# ircURL = ircURI "://" location "/" [ entity ] [ flags ] [ options ]
# ircURI = "irc" / "ircs"
# location = [ authinfo "@" ] hostport
# authinfo = [ username ] [ ":" password ]
# username = *( escaped / unreserved )
# password = *( escaped / unreserved ) [ ";" passtype ]
# passtype = *( escaped / unreserved )
# entity = [ "#" ] *( escaped / unreserved )
# flags = ( [ "," enttype ] [ "," hosttype ] )
# /= ( [ "," hosttype ] [ "," enttype ] )
# enttype = "," ( "isuser" / "ischannel" )
# hosttype = "," ( "isserver" / "isnetwork" )
# options = "?" option *( "&" option )
# option = optname [ "=" optvalue ]
# optname = *( ALPHA / "-" )
# optvalue = optparam *( "," optparam )
# optparam = *( escaped / unreserved )
# XXX: Technically, passtype is part of the protocol, but is rarely used and
# not defined in the RFC beyond the URL ABNF.
# Starting the entity with /# is okay per spec, but it needs to be encoded to
# %23 for the URL::_generic::path operations to parse correctly.
sub _init {
my $class = shift;
my $self = $class->SUPER::_init(@_);
$$self =~ s|^((?:[^:/?\#]+:)?(?://[^/?\#]*)?)/\#|$1/%23|s;
$self;
}
# Return the /# form, since this is most common for channel names.
sub path {
my $self = shift;
my ($new) = @_;
$new =~ s|^/\#|/%23| if (@_ && defined $new);
my $val = $self->SUPER::path(@_ ? $new : ());
$val =~ s|^/%23|/\#|;
$val;
}
sub path_query {
my $self = shift;
my ($new) = @_;
$new =~ s|^/\#|/%23| if (@_ && defined $new);
my $val = $self->SUPER::path_query(@_ ? $new : ());
$val =~ s|^/%23|/\#|;
$val;
}
sub as_string {
my $self = shift;
my $val = $self->SUPER::as_string;
$val =~ s|^((?:[^:/?\#]+:)?(?://[^/?\#]*)?)/%23|$1/\#|s;
$val;
}
sub entity {
my $self = shift;
my $path = $self->path;
$path =~ s|^/||;
my ($entity, @flags) = split /,/, $path;
if (@_) {
my $new = shift;
$new = '' unless defined $new;
$self->path( '/'.join(',', $new, @flags) );
}
return unless length $entity;
$entity;
}
sub flags {
my $self = shift;
my $path = $self->path;
$path =~ s|^/||;
my ($entity, @flags) = split /,/, $path;
if (@_) {
$self->path( '/'.join(',', $entity, @_) );
}
@flags;
}
sub options { shift->query_form(@_) }
sub canonical {
my $self = shift;
my $other = $self->SUPER::canonical;
# Clean up the flags
my $path = $other->path;
$path =~ s|^/||;
my ($entity, @flags) = split /,/, $path;
my @clean =
map { $_ eq 'isnick' ? 'isuser' : $_ } # convert isnick->isuser
map { lc }
# NOTE: Allow flags from draft-mirashi-url-irc-01 as well
grep { /^(?:is(?:user|channel|server|network|nick)|need(?:pass|key))$/i }
@flags
;
# Only allow the first type of each category, per the Butcher draft
my ($enttype) = grep { /^is(?:user|channel)$/ } @clean;
my ($hosttype) = grep { /^is(?:server|network)$/ } @clean;
my @others = grep { /^need(?:pass|key)$/ } @clean;
my @new = (
$enttype ? $enttype : (),
$hosttype ? $hosttype : (),
@others,
);
unless (join(',', @new) eq join(',', @flags)) {
$other = $other->clone if $other == $self;
$other->path( '/'.join(',', $entity, @new) );
}
$other;
}
1;
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| file | Folder | 0755 |
|
|
| urn | Folder | 0755 |
|
|
| Escape.pm | File | 7.73 KB | 0644 |
|
| Heuristic.pm | File | 6.37 KB | 0644 |
|
| IRI.pm | File | 794 B | 0644 |
|
| QueryParam.pm | File | 655 B | 0644 |
|
| Split.pm | File | 2.3 KB | 0644 |
|
| URL.pm | File | 5.36 KB | 0644 |
|
| WithBase.pm | File | 3.77 KB | 0644 |
|
| _foreign.pm | File | 107 B | 0644 |
|
| _generic.pm | File | 6.66 KB | 0644 |
|
| _idna.pm | File | 2.03 KB | 0644 |
|
| _ldap.pm | File | 3.17 KB | 0644 |
|
| _login.pm | File | 231 B | 0644 |
|
| _punycode.pm | File | 5.5 KB | 0644 |
|
| _query.pm | File | 4.74 KB | 0644 |
|
| _segment.pm | File | 416 B | 0644 |
|
| _server.pm | File | 3.79 KB | 0644 |
|
| _userpass.pm | File | 1.01 KB | 0644 |
|
| data.pm | File | 3.31 KB | 0644 |
|
| file.pm | File | 9.46 KB | 0644 |
|
| ftp.pm | File | 1.06 KB | 0644 |
|
| ftpes.pm | File | 150 B | 0644 |
|
| ftps.pm | File | 175 B | 0644 |
|
| geo.pm | File | 10.5 KB | 0644 |
|
| gopher.pm | File | 2.37 KB | 0644 |
|
| http.pm | File | 425 B | 0644 |
|
| https.pm | File | 144 B | 0644 |
|
| icap.pm | File | 1.46 KB | 0644 |
|
| icaps.pm | File | 1.41 KB | 0644 |
|
| irc.pm | File | 3.64 KB | 0644 |
|
| ircs.pm | File | 142 B | 0644 |
|
| ldap.pm | File | 2.86 KB | 0644 |
|
| ldapi.pm | File | 440 B | 0644 |
|
| ldaps.pm | File | 144 B | 0644 |
|
| mailto.pm | File | 1.62 KB | 0644 |
|
| mms.pm | File | 125 B | 0644 |
|
| news.pm | File | 1.42 KB | 0644 |
|
| nntp.pm | File | 127 B | 0644 |
|
| nntps.pm | File | 144 B | 0644 |
|
| otpauth.pm | File | 8.31 KB | 0644 |
|
| pop.pm | File | 1.18 KB | 0644 |
|
| rlogin.pm | File | 129 B | 0644 |
|
| rsync.pm | File | 207 B | 0644 |
|
| rtsp.pm | File | 125 B | 0644 |
|
| rtspu.pm | File | 126 B | 0644 |
|
| scp.pm | File | 97 B | 0644 |
|
| sftp.pm | File | 98 B | 0644 |
|
| sip.pm | File | 1.63 KB | 0644 |
|
| sips.pm | File | 143 B | 0644 |
|
| snews.pm | File | 172 B | 0644 |
|
| ssh.pm | File | 175 B | 0644 |
|
| telnet.pm | File | 128 B | 0644 |
|
| tn3270.pm | File | 128 B | 0644 |
|
| urn.pm | File | 2.03 KB | 0644 |
|