Skip to content

zzkt/gibberish

endless
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

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

About

A PLT scheme module for the XMPP or Jabber protocol

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages