Skip to content
This repository

A PLT scheme module for the XMPP or Jabber protocol

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 LICENCE
Octocat-spinner-32 README.md
Octocat-spinner-32 info.ss
Octocat-spinner-32 main.ss
Octocat-spinner-32 xmpp.scrbl
Octocat-spinner-32 xmpp.ss
README.md

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))

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, presence 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. A presence update can be sent as (send (presence #:status "garden path")) and queries are similar (send (iq #:type get))

Response Handlers

A handler can be registered to respond to 'message 'presence 'iq or 'other stanzas. Note that an 'iq handler will receive 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))))))

possibly 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
Something went wrong with that request. Please try again.