info.ss | ||
LICENCE | ||
README.md | ||
xmpp.scrbl | ||
xmpp.ss |
XMPP
A basic module for IM using the Jabber/XMPP protocol with PLT Scheme.
Protocol Support
Should eventually implement XMPP-Core and XMPP-IM to conform with RFCs 3920 and 3921. Progress toward supporting the full protocol is currently documented in the file 'xmpp.ss'
Installation
(require (planet zzkt/xmpp:1:0/xmpp))
Session
It is necessary to establish a session with a Jabber server before sending any messages or presence updates. This can be done manually, or with the help of with-xmpp-session.
Sending
Once a session is established, the 'send' function can be used to send messages, presnece updates or queries.
(with-xmpp-session jid pass
(send (message user@host "some random message")))
Where 'jid' is the senders jid and 'pass' is the password
Response Handlers
A handler can be registered to repsond to 'message 'presence 'iq or 'other stanzas. Note that an 'iq handler will revive any error messages from the server
(set-xmpp-handler 'message print-message)
Example Chat Client
(require xmpp)
(define (read-input prompt)
(display prompt)
(read-line (current-input-port)))
(define (chat)
(let ((jid (read-input "jid: "))
(pass (read-input "password: "))
(to (read-input "chat with: ")))
(with-xmpp-session jid pass
(set-xmpp-handler 'message print-message)
(let loop ()
(let ((msg (read-line (current-input-port))))
(send (message to msg))
(loop))))))
possiby interesting extensions to implement.
see http://xmpp.org/extensions/
- XEP-0047: In-Band Bytestreams
- XEP-0066: Out of Band Data
- XEP-0030: Service Discovery
- XEP-0060: Publish-Subscribe
- XEP-0045: Multi-User Chat
- XEP-0149: Time Periods
- XEP-0166: Jingle
- XEP-0174: Serverless Messaging
- XEP-0199: XMPP Ping
- XEP-0224: Attention
- XEP-0077: In-Band Registration