State 1: Build the JUD query form

Based upon how many arguments we have in the @a array, as described earlier, we can build the response, which will represent one of three states:

  • JUD query form

  • JUD query results

  • vCard display

If Demo::JBook is called without arguments (i.e., http://[ hostname ]/jbook), which we test for like this:

if (scalar @a == 0) {

then we want to build and present the JUD search form. This form—the fields that the form consists of—will be specific to the particular JUD that will be searched.

We construct an IQ-get to send to the JUD to ask for a list of search fields and instructions. What we’re looking for is something like the IQ-get shown in Example 10-1, like this:

SEND: <iq type="get" to="users.jabber.org">
        <query xmlns="jabber:iq:search"/>
      </iq>

To construct this, we start with a new node (element) created by using the node factory:

    my $iq = $nf->newNode('iq');
    $iq->attr('to', JUD);
    $iq->attr('type', IQ_GET);
    $iq->insertTag('query', NS_SEARCH);

In previous recipes, we’ve called methods in the Jabber libraries (Jabberpy, JabberBeans, Net::Jabber, and Jabber::Connection) to send an element to the Jabber server. Typically, such a method is called a send() method. Here, we don’t use a send() method. Instead, we use Jabber::Connection’s ask(). Like Net::Jabber’s SendAndReceiveWithID() method, and Jabberpy’s method of the same name, ask() not only sends the element to the Jabber server, it waits for a reply.

A reply—in Jabber terms—is a response in ...

Get Programming Jabber now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.