package DJabberd::Plugin::EntityTime;
use warnings;
use strict;
use base 'DJabberd::Plugin';
use POSIX qw(strftime);
our $logger = DJabberd::Log->get_logger();
=head1 NAME
DJabberd::EntityTime - Implements XEP-0090 and XEP-0202
=head1 VERSION
Version 0.03
=cut
our $VERSION = '0.03';
=head1 SYNOPSIS
Implements XEP-0090 and XEP-0202
=cut
=head2 register($self, $vhost)
Register the vhost with the module.
=cut
sub register {
my ($self,$vhost) = @_;
my $private_cb = sub {
my ($vh, $cb, $iq) = @_;
unless ($iq->isa("DJabberd::IQ") and defined $iq->to) {
$cb->decline;
return;
}
unless ($iq->to eq $vhost->{server_name}) {
$cb->decline;
return;
}
if ($iq->signature eq 'get-{jabber:iq:time}query') {
$self->_get_time90($vh, $iq);
$cb->stop_chain;
return;
} elsif ($iq->signature eq 'get-{urn:xmpp:time}time') {
$self->_get_time202($vh, $iq);
$cb->stop_chain;
return;
}
$cb->decline;
};
$vhost->register_hook("switch_incoming_client",$private_cb);
$vhost->register_hook("switch_incoming_server",$private_cb);
$vhost->add_feature("jabber:iq:time");
$vhost->add_feature("urn:xmpp:time");
}
sub _get_time90 {
my ($self, $vh, $iq) = @_;
$logger->info('Getting time from : '.$iq->from_jid);
$iq->send_reply('result',qq()
.''.strftime("%Y%m%dT%H:%M:%S",gmtime).''
.''.gmtime().''
.''.strftime("%Z",gmtime).''
.qq() );
}
sub _get_time202 {
my ($self, $vh, $iq) = @_;
$logger->info('Getting time from : '.$iq->from_jid);
my $zone = strftime("%z",gmtime);
$zone =~ s/(\d\d)(\d\d)$/$1:$2/;
$iq->send_reply('result',qq() );
}
=head1 AUTHOR
Edward Rudd, C<< >>
=head1 COPYRIGHT & LICENSE
Copyright 2007 Edward Rudd, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
1; # End of DJabberd::Plugin::EntityTime