A non-standard internet relay chat program.
Project description
dum-dum-irc
A handcrafted implementation of an internet relay chat without following any conventions or RFC standards.
Changelog | Contributing Guide
Usage
With Python 3.11+ and Git installed, you can install the newest pinned version:
pip install git+https://github.com/thegamecracks/dum-dum-irc@v0.4.0
Or alternatively you can install the latest development version:
pip install git+https://github.com/thegamecracks/dum-dum-irc
Once installed, the dumdum
and dumdum-server
entry points should be
provided. Run dumdum-server --help
for options.
Implementation
Dumdum consists of two parts:
- The Sans-IO protocol, defined in dumdum.protocol
- The asyncio wrapper, defined in dumdum.client and dumdum.server
The Sans-IO protocol is responsible for handling the generation and consumption of byte streams, along with producing events from received messages, while the asyncio wrapper is responsible for the actual network communication between the server and its clients.
Protocol
Clients are able to send the following messages:
- HELLO:
0x00 | 1-byte version
- AUTHENTICATE:
0x02 | varchar nickname (32)
- SEND_MESSAGE:
0x03 | varchar channel name (32) | varchar content (1024)
- LIST_CHANNELS:
0x04
- LIST_MESSAGES:
0x05 | 8-byte before snowflake or 0 | 8-byte after snowflake or 0
Servers are able to send the following messages:
- HELLO:
0x00 | 0 or 1 using SSL
- INCOMPATIBLE_VERSION:
0x01 | 1-byte version
- ACKNOWLEDGE_AUTHENTICATION:
0x02 | 0 or 1 success
- SEND_MESSAGE:
0x03 | 8-byte snowflake | varchar channel name (32) | varchar nickname (32) | varchar content (1024)
- LIST_CHANNELS:
0x04 | 2-byte length | varchar channel name (32) | ...
- LIST_MESSAGES:
0x05 | 3-byte length | same fields after SEND_MESSAGE | ...
Clients must send a HELLO command and wait for the server to respond with HELLO. Afterwards the client must send an AUTHENTICATE command and wait for a successful ACKNOWLEDGE_AUTHENTICATION before they can begin chat communications.
When the client disconnects and reconnects, they MUST re-send hello and re-authenticate with the server.
If the server supports SSL, they can set using SSL
in HELLO to indicate
that the client should upgrade the connection to SSL.
At this point, the protocol should not receive any data until after the
SSL handshake is complete.
As this protocol has been intentionally designed to be simple (no timeouts or keep alives), I/O wrappers do not need a significant amount of work to implement it.
TLS Encryption
dumdum-server
can use SSL certificates to encrypt connections.
For example, if you want to use a self-signed certificate and private key,
you can install OpenSSL and run the following command:
openssl req -new -x509 -days 365 -nodes -out dumdum.crt -keyout dumdum.key
After filling out (or skipping) the certificate signing request prompts,
you can then run the server with the resulting dumdum.crt
and dumdum.key
files:
dumdum-server --cert dumdum.crt:dumdum.key
As for the dumdum
client, SSL can be enabled by the user before connecting
to a server. If the server uses a self-signed certificate, the user will need
to download the server's certificate (.crt) and select it.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for dum_dum_irc-0.4.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b86bb20654b09fe4dbba0f2d8d1305de6194eb068e195f8498da5f4ae7f132c |
|
MD5 | 2a1e7ace7ecdc15494f3c1bb566b389a |
|
BLAKE2b-256 | 8765fc808e98895cfcc1c336fa364d05ba0a579cae3047f6164dbfea2d073481 |