The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

SYNOPSIS

VERSION

Version 0.006

DESCRIPTION

Example from RFC3921:

<iq from='juliet@example.com/balcony'
    id='bv1bs71f'
    type='get'>
 <query xmlns='jabber:iq:roster'/>
</iq>

Response from server:

<iq id='bv1bs71f'
    to='juliet@example.com/chamber'
    type='result'>
 <query xmlns='jabber:iq:roster' ver='ver7'>
   <item jid='nurse@example.com'/>
   <item jid='romeo@example.net'/>
 </query>
</iq>

IQ start - stash current IQ on stream Query start - set IQ query type to xmlns

Each item is parsed as a roster entry.

A roster request for a user that does not exist will return an error as follows:

<iq id='bv1bs71f'
    to='juliet@example.com/chamber'
    type='error'>
 <error type='auth'>
   <item-not-found
       xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
 </error>
</iq>

Updates:

An update request is as follows:

<iq from='juliet@example.com/balcony'
    id='rs1'
    type='set'>
 <query xmlns='jabber:iq:roster'>
   <item jid='nurse@example.com'/>
 </query>
</iq>

Pass subscription='remove' as the item attribute to remove rather than adding the contact.

More detailed example:

  C: <iq from='juliet@example.com/balcony'
         id='ph1xaz53'
         type='set'>
       <query xmlns='jabber:iq:roster'>
         <item jid='nurse@example.com'
               name='Nurse'>
           <group>Servants</group>
         </item>
       </query>
     </iq>
Server push requests can be sent through as follows:

<iq id='a78b4q6ha463'
    to='juliet@example.com/chamber'
    type='set'>
 <query xmlns='jabber:iq:roster'>
   <item jid='nurse@example.com'/>
 </query>
</iq>

with the client reponse being an empty result:

<iq from='juliet@example.com/balcony'
    id='a78b4q6ha463'
    type='result'/>

Until the client sends the initial roster request, it will not receive any server push information.

Subscribe by sending something like this:

UC: <presence id='xk3h1v69'
              to='juliet@example.com'
              type='subscribe'/>
Requesting a new contact will cause the server to send out an ask request:

US: <iq id='b89c5r7ib574'
        to='romeo@example.net/foo'
        type='set'>
      <query xmlns='jabber:iq:roster'>
        <item ask='subscribe'
              jid='juliet@example.com'
              subscription='none'/>
      </query>
    </iq>
=head1 METHODS

INHERITED METHODS

Protocol::XMPP::ElementBase

attributes, characters, class_from_element, end_element, new, parent

Protocol::XMPP::Base

debug, dispatch_event, is_authorised, is_loggedin, new_future, next_id, stream, write_text, write_xml

Mixin::Event::Dispatch

add_handler_for_event, clear_event_handlers, event_handlers, invoke_event, subscribe_to_event, unsubscribe_from_event

AUTHOR

Tom Molesworth <cpan@entitymodel.com>

LICENSE

Copyright Tom Molesworth 2010-2014. Licensed under the same terms as Perl itself.