/usr/share/perl5/AnyEvent/XMPP/Component.pm is in libanyevent-xmpp-perl 0.55-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | package AnyEvent::XMPP::Component;
use strict;
use AnyEvent::XMPP::Connection;
use AnyEvent::XMPP::Namespaces qw/xmpp_ns/;
our @ISA = qw/AnyEvent::XMPP::Connection/;
=head1 NAME
AnyEvent::XMPP::Component - "XML" stream that implements the XEP-0114
=head1 SYNOPSIS
use AnyEvent::XMPP::Component;
my $con = AnyEvent::XMPP::Component->new (
domain => 'chat.jabber.org'
host => 'jabber.org',
port => 5347,
secret => 'insecurepasswordforthehackers'
);
$con->reg_cb (session_ready => sub { ... });
$con->connect;
=head1 DESCRIPTION
This module represents a XMPP connection to a server that authenticates as
component.
This module is a subclass of C<AnyEvent::XMPP::Connection> and inherits all methods.
For example C<reg_cb> and the stanza sending routines.
For additional events that can be registered to look below in the EVENTS section.
Please note that for component several functionality in L<AnyEvent::XMPP::Connection>
might have no effect or not the desired effect. Basically you should
use the L<AnyEvent::XMPP::Component> as component and only handle events
the handle with incoming data. And only use functions that send stanzas.
No effect has the event C<stream_pre_authentication> and the C<authenticate>
method of L<AnyEvent::XMPP::Connection>, because those handle the usual SASL or iq-auth
authentication. "Jabber" components have a completly different authentication
mechanism.
Also note that the support for some XEPs in L<AnyEvent::XMPP::Ext> is just thought
for client side usage, if you miss any functionaly don't hesitate to ask the
author or send him a patch! (See L<AnyEvent::XMPP> for contact information).
=head1 METHODS
=over 4
=item B<new (%args)>
This is the constructor. It takes the same arguments as
the constructor of L<AnyEvent::XMPP::Connection> along with a
few others:
B<NOTE>: Please note that some arguments that L<AnyEvent::XMPP::Connection>
usually takes have no effect when using this class. (That would be
the 'username', 'password', 'resource' and 'jid' arguments for example.)
=over 4
=item secret => $secret
C<$secret> is the secret that will be used for authentication with the server.
=back
=cut
sub new {
my $this = shift;
my $class = ref($this) || $this;
my %args = @_;
unless (exists $args{initial_presence}) {
$args{stream_namespace} = 'component';
}
$args{host} ||= delete $args{server};
$args{host}
or die "Required 'host' argument missing to new for this component!";
unless (defined $args{port}) {
$args{port} = 5347;
}
my $self = $class->SUPER::new (%args);
$self->{parser}->set_stream_cb (sub {
my $secret = $self->{parser}->{parser}->xml_escape ($self->{secret});
my $id = $self->{stream_id} = $_[0]->attr ('id');
$self->{writer}->send_handshake ($id, $secret);
});
$self->reg_cb (recv_stanza_xml => sub {
my ($self, $node) = @_;
if ($node->eq (component => 'handshake')) {
$self->{authenticated} = 1;
$self->event ('session_ready');
}
},
stream_pre_authentication => sub {
my ($self, $rcon) = @_;
$$rcon = 0;
});
$self
}
sub default_namespace {
return 'component';
}
sub authenticate {
warn "authenticate called! Please read the documentation of "
."AnyEvent::XMPP::Component why this is an error!"
}
=back
=head1 EVENTS
These additional events can be registered on with C<reg_cb>:
NOTE: The event C<stream_pre_authentication> should _not_ be handled
and just ignored. Don't attach callbacks to it!
=over 4
=item session_ready
This event indicates that the component has connected successfully
and can now be used to transmit stanzas.
=back
=head1 AUTHOR
Robin Redeker, C<< <elmex at ta-sa.org> >>, JID: C<< <elmex at jabber.org> >>
=head1 COPYRIGHT & LICENSE
Copyright 2007, 2008 Robin Redeker, 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 AnyEvent::XMPP::Component
|