Next: Extending service discovery, Previous: Listening for new requests, Up: Hacking and extending
To send an IQ request, use jabber-send-iq
. It will generate an
id, and create a mapping for it for use when the response comes. The
syntax is:
(jabber-send-iq connection to type query success-callback success-closure failure-callback failure-closure)
success-callback will be called if the response is of type
‘result’, and failure-callback will be called if the response
is of type ‘error’. Both callbacks take three arguments, the
connection object, the IQ stanza of the response, and the corresponding
closure item earlier passed to jabber-send-iq
.
Two standard callbacks are provided. jabber-report-success
takes
a string as closure item, and reports success or failure in the echo
area by appending either ‘succeeded’ or ‘failed’ to the
string. jabber-process-data
prepares a browse buffer. If its
closure argument is a function, it calls that function with point in
this browse buffer. If it's a string, it prints that string along with
the error message in the IQ response. If it's anything else
(e.g. nil
), it just dumps the XML in the browse buffer.
Examples follow. This is the hypothetical Jabber protocol “frob”, for which only success report is needed:
(jabber-send-iq connection "someone@somewhere.org" "set" '(query ((xmlns . "frob"))) 'jabber-report-success "Frobbing" 'jabber-report-success "Frobbing")
This will print “Frobbing succeeded” or “Frobbing failed: reason”, respectively, in the echo area.
The protocol “investigate” needs to parse results and show them in a browse buffer:
(jabber-send-iq connection "someone@somewhere.org" "get" '(query ((xmlns . "investigate"))) 'jabber-process-data 'jabber-process-investigate 'jabber-process-data "Investigation failed")
Of course, the previous example could have used
jabber-report-success
for the error message. It's a matter of
UI taste.