MOO-XMPP
MOO-XMPP was written by Kenny Root as an experiment in connecting to XMPP (AKA Jabber) services. It was initially developed on his MOO ice-nine and later ported to Waterpoint.
It acts as a server connection for other XMPP-compliant servers to connect to. This means that any user on the MOO can use MOO-XMPP to send messages to other XMPP users or register with XMPP gateways.
The MOO-XMPP service uses a couple extensions from the "basic" LambdaMOO Server. It uses the WAIF extensions written by Ben Jackson, current LambdaMOO server maintainer, and Expat binding for MOO written by Ken Fox.
Features
| Feature | Supports? |
|---|---|
| Messaging (XEP-0022) | Yes |
| Browsing (XEP-0011) | Partial |
| Last Activity (XEP-0012) | Yes |
| Service Discovery (XEP-0030) | Partial |
| vcard-temp (XEP-0054) | Yes1 |
| Gateway Interaction (XEP-0100) | Yes2 |
Prerequisites
The MOO core MOO-XMPP was designed around was a Waterpoint-style JHCore extraction. If you are using a different core then you may be lacking the prerequisite objects. If you are, contact me and I'll try to post more object dumps here.
Server Patches
| Name | Instructions | URL |
|---|---|---|
| WAIF | Download the WAIF branch from GitHub (view project) that contains the base upon which I build. | https://github.com/xythian/wp-lambdamoo |
| XML | Download Ken Fox's Expat binding for MOO and install that. | https://www.xythian.com/moo/expat-binding/ |
Dictionary WAIFs
Dictionary WAIFs were originally coded by Jay Carlson as an extension to
Ben Jackson's WAIF work. The dictionary WAIFs basically add a way for
obj.prop[index] where index is a string or number.
Object code: dict.zip
- Install waif.moo
@property #0.waif;$waif = _- Install dict-utils.moo
@property #0.dict;$dict = _- Install dict-waif.moo
;$dict._waif_class = _;_.utils = $dict;$dict.empty = $dict:new()
XML Utilities
These XML objects make a standard interface for interaction with the Expat bindings by Ken Fox.
Object code xml.zip
- Install xml.moo
@register xml on $local- Install xml-node.moo
;$local.xml.node = _
In-MOO Resolver
Ben Jackson wrote an in-MOO resolver using WAIFs. XMPP utilizes this to support SRV records.
Object code: dns.zip
- Install dns-resolver.moo
@register resolver on $local- Install dns-waif.moo
- Install dns-header-waif.moo
;$local.resolver.header = _- Install dns-query-waif.moo
;$local.resolver.header.query = _- Install dns-rr-waif.moo
;$local.resolver.header.resource = _;$local.resolver.server = "IP address for your local DNS server"- Install semaphore.moo
;$local.resolver.mutex = _:new()
Source Code
Here is the heart of the XMPP system. It is a very complicated installation process simply because of the nature of MOO. These instructions are a work in progress right now.
Code: xmpp.zip
- Install crypto.moo
@register crypto on $local- Install image-utils.moo
@register image_utils on $local- Install xmpp-s2s-daemon.moo
@register jabber on $local- Open binary-handler.moo and change the parent object to the local generic daemon service handler from a JHCore/Waterpoint core.
- Note: binary-handler's
:notify,:read_bytes,:notify_lines,:notify_lines_safe, and:notify_rawmust be wizardly. - --- INSERT MORE INSTRUCTIONS HERE ---
- Install xmpp-s2s-handler.moo
;$local.jabber.handler = _- --- UNFINISHED ---