AnyEvent-XMPP
view release on metacpan or search on metacpan
lib/AnyEvent/XMPP/Util.pm view on Meta::CPAN
package AnyEvent::XMPP::Util;
use strict;
no warnings;
use Encode;
use Net::LibIDN qw/idn_prep_name idn_prep_resource idn_prep_node/;
use AnyEvent::XMPP::Namespaces qw/xmpp_ns_maybe/;
use Time::Local;
require Exporter;
our @EXPORT_OK = qw/resourceprep nodeprep prep_join_jid join_jid
split_jid split_uri stringprep_jid prep_bare_jid bare_jid
is_bare_jid simxml dump_twig_xml install_default_debug_dump
cmp_jid cmp_bare_jid
node_jid domain_jid res_jid
prep_node_jid prep_domain_jid prep_res_jid
from_xmpp_datetime to_xmpp_datetime to_xmpp_time
xmpp_datetime_as_timestamp
filter_xml_chars filter_xml_attr_hash_chars
/;
our @ISA = qw/Exporter/;
=head1 NAME
AnyEvent::XMPP::Util - Utility functions for AnyEvent::XMPP
=head1 SYNOPSIS
use AnyEvent::XMPP::Util qw/split_jid/;
...
=head1 FUNCTIONS
These functions can be exported if you want:
=over 4
=item B<resourceprep ($string)>
This function applies the stringprep profile for resources to C<$string>
and returns the result.
=cut
sub resourceprep {
my ($str) = @_;
decode_utf8 (idn_prep_resource (encode_utf8 ($str), 'UTF-8'))
}
=item B<nodeprep ($string)>
This function applies the stringprep profile for nodes to C<$string>
and returns the result.
=cut
sub nodeprep {
my ($str) = @_;
decode_utf8 (idn_prep_node (encode_utf8 ($str), 'UTF-8'))
}
=item B<prep_join_jid ($node, $domain, $resource)>
This function joins the parts C<$node>, C<$domain> and C<$resource>
to a full jid and applies stringprep profiles. If the profiles couldn't
be applied undef will be returned.
=cut
sub prep_join_jid {
my ($node, $domain, $resource) = @_;
my $jid = "";
if ($node ne '') {
$node = nodeprep ($node);
return undef unless defined $node;
$jid .= "$node\@";
}
$domain = $domain; # TODO: apply IDNA!
$jid .= $domain;
if ($resource ne '') {
$resource = resourceprep ($resource);
return undef unless defined $resource;
$jid .= "/$resource";
}
$jid
}
=item B<join_jid ($user, $domain, $resource)>
This is a plain concatenation of C<$user>, C<$domain> and C<$resource>
without stringprep.
See also L<prep_join_jid>
=cut
sub join_jid {
my ($node, $domain, $resource) = @_;
my $jid = "";
$jid .= "$node\@" if $node ne '';
$jid .= $domain;
$jid .= "/$resource" if $resource ne '';
$jid
}
=item B<split_uri ($uri)>
This function splits up the C<$uri> into service and node
part and will return them as list.
my ($service, $node) = split_uri ($uri);
=cut
sub split_uri {
( run in 0.773 second using v1.01-cache-2.11-cpan-39bf76dae61 )