sbrwxmpp
A XMPP server specifically designed for Soapbox Race World.
Motivation
Traditionally SBRW servers have used Openfire as the XMPP server. So why make a new one?
-
TLSv1 support
The game uses an ancient version of OpenSSL that doesn't support newer TLS versions. Newer Java versions disable TLSv1 so one must go through hoops to re-enable it for Openfire. SBRWXMPP uses a vendored version of Go TLS library, so not even a Go update can break TLS for SBRWXMPP.
-
Old XMPP standards
The game requires the XMPP server to support obsolete XMPP standards like XEP-0078 and Groupchat 1.0. Openfire updates may remove support for these standards. XEP-0078 is already unsupported in Openfire and requires installing a plugin to re-enable it. But SBRWXMPP is guaranteed to support features required by the game.
-
Game's fragile XMPP client
The game's XMPP implementation is known to break if the XMPP handshake contains features not expected by the client. For example not disabling Stream Compression and Roster Versioning in Openfire breaks the game. SBRWXMPP doesn't support any unnecessary XMPP extensions that are not needed by the game.
-
Performance
SBRWXMPP is written in Go, instead of Java, and is designed to be as lightweight and performant as possible.
Usage
Download the latest release of sbrwxmpp (or build it yourself)
Create a folder for sbrwxmpp, place the binary in the created folder and run it.
A configuration file (sbrwxmpp.toml
) will be created with other necessary files such as certificate and database.
By default, the SBRW Core only supports Openfire API. You will need to apply a patch for adding sbrwxmpp support.
You will need to do the following modifications in PARAMETER
table:
Parameter |
Value |
SBRWXMPP_ADDRESS |
http://127.0.0.1:8087/api/ |
SBRWXMPP_TOKEN |
value of api.key in sbrwxmpp.toml |
XMPP_IP |
publicly accessible IP or domain name of the XMPP server |
XMPP_PORT |
port of addr in sbrwxmpp.toml (5333 by default) |
OPENFIRE_ADDRESS |
(delete this parameter) |
OPENFIRE_TOKEN |
(delete this parameter) |
Make sure you change the value of domain
in sbrwxmpp.toml
. It should be equal to the value of XMPP_IP
in core configuration.
Used by