mirror of
https://github.com/MeexReay/RAC-Hub.git
synced 2025-06-23 23:27:00 +03:00
init commit
This commit is contained in:
commit
b89c31ec48
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/Archive/** filter=lfs diff=lfs merge=lfs -text
|
||||
* !text !filter !merge !diff
|
1
HOST_TEMPLATE.md
Normal file
1
HOST_TEMPLATE.md
Normal file
@ -0,0 +1 @@
|
||||
| {address} | {description} | {software} | {status} | {protocol} | {auth} |
|
13
LICENSE
Normal file
13
LICENSE
Normal file
@ -0,0 +1,13 @@
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
17
RACv1.99.md
Normal file
17
RACv1.99.md
Normal file
@ -0,0 +1,17 @@
|
||||
# RACv1.99 Protocol
|
||||
|
||||
Message Retrieval
|
||||
a. The client initiates a message retrieval session by sending the byte 0x00 to the server.
|
||||
|
||||
b. In response, the server transmits the size of the available messages as an ASCII-encoded string.
|
||||
|
||||
c. After receiving the size, the client must send one of the following bytes or close the connection:
|
||||
|
||||
i. Sending 0x01 instructs the server to transmit all messages in full.
|
||||
|
||||
ii. Sending 0x02 followed by the client’s cached messages length (as an ASCII string, e.g., 0x02"1024") instructs the server to transmit only new messages added since the cached length. The server sends messages starting from the cached length offset, and the client updates its cached length to the total size received in step 1b after processing the new messages.
|
||||
|
||||
Message Transmission
|
||||
a. To send a message, the client issues a request in the following format:
|
||||
|
||||
The client sends the byte 0x01 followed immediately by the message content. The server does not send a response.
|
19
RACv1.md
Normal file
19
RACv1.md
Normal file
@ -0,0 +1,19 @@
|
||||
# RACv2.0 Protocol
|
||||
|
||||
## Message Retrieval
|
||||
|
||||
a. The client initiates a message retrieval session by sending the byte 0x00 to the server.
|
||||
|
||||
b. In response, the server transmits the size of the available messages as an ASCII-encoded string.
|
||||
|
||||
c. After receiving the size, the client must send one of the following bytes or close the connection:
|
||||
|
||||
i. Sending 0x01 instructs the server to transmit all messages in full.
|
||||
|
||||
ii. Sending 0x02 followed by the client’s cached messages length (as an ASCII string, e.g., 0x02"1024") instructs the server to transmit only new messages added since the cached length. The server sends messages starting from the cached length offset, and the client updates its cached length to the total size received in step 1b after processing the new messages.
|
||||
|
||||
## Message Transmission
|
||||
|
||||
a. The client sends the byte 0x01 followed immediately by the message content. The server does not send a response.
|
||||
|
||||
Source: https://gitea.bedohswe.eu.org/pixtaded/crab#rac-protocol
|
45
RACv2.md
Normal file
45
RACv2.md
Normal file
@ -0,0 +1,45 @@
|
||||
# RACv2.0 Protocol
|
||||
|
||||
## Message Retrieval
|
||||
|
||||
a. The client initiates a message retrieval session by sending the byte 0x00 to the server.
|
||||
|
||||
b. In response, the server transmits the size of the available messages as an ASCII-encoded string.
|
||||
|
||||
c. After receiving the size, the client must send one of the following bytes or close the connection:
|
||||
|
||||
i. Sending 0x01 instructs the server to transmit all messages in full.
|
||||
|
||||
ii. Sending 0x02 followed by the client’s cached messages length (as an ASCII string, e.g., 0x02"1024") instructs the server to transmit only new messages added since the cached length. The server sends messages starting from the cached length offset, and the client updates its cached length to the total size received in step 1b after processing the new messages.
|
||||
|
||||
## Message Transmission
|
||||
|
||||
a. To send a message, the client issues a request in one of the following formats:
|
||||
|
||||
i. Unauthenticated Message: The client sends the byte 0x01 followed immediately by the message content. The server does not send a response.
|
||||
|
||||
ii. Authenticated Message: The client sends the byte 0x02 followed by the username, a newline character (\n), the password, a newline character and the message content. The server responds with a single byte:
|
||||
|
||||
0x01 indicates the user does not exist.
|
||||
|
||||
0x02 indicates the password is incorrect.
|
||||
|
||||
A successful authentication results in the server accepting the message without sending a response.
|
||||
|
||||
## User Registration
|
||||
|
||||
a. To register a new user, the client sends a request formatted as:
|
||||
|
||||
The byte 0x03.
|
||||
|
||||
The username, followed by a newline character (\n).
|
||||
|
||||
The password.
|
||||
|
||||
b. The server processes the request and responds with a single byte:
|
||||
|
||||
0x01 if the username already exists.
|
||||
|
||||
A successful registration is assumed if no error byte (0x01) is received. The client should close the connection after handling the response.
|
||||
|
||||
Source: https://gitea.bedohswe.eu.org/pixtaded/crab#rac-protocol
|
72
README.md
Normal file
72
README.md
Normal file
@ -0,0 +1,72 @@
|
||||
This repository provides an overview of software built around the RAC protocol — including clients, servers, and associated tools.
|
||||
|
||||
You're welcome to contribute by [sharing additional entries or information](https://github.com/MeexReay/RAC-Hub/pulls) to help expand this directory.
|
||||
|
||||
# Clients
|
||||
|
||||
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
|
||||
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
|
||||
| [bRAC](https://github.com/MeexReay/bRAC)[^1] | better RAC client (GUI) | MeexReay | [0.1.5+2.0](https://github.com/MeexReay/bRAC/releases/tag/0.1.5%2B2.0) | Active | Rust | v2.0 | v2.0 |
|
||||
| [сRACk](https://github.com/pansangg/cRACk)[^5] | client for RAC kettles (TUI) | pansangg | [v2.0-beta](https://github.com/pansangg/cRACk/releases/tag/v2.0-beta) | Active | Python | v2.0 | ❌ |
|
||||
| clRAC | The official RAC client | Mr. Sugoma | [2.0.1](https://wdfiles.ru/Ofx7) | Active | C | v2.0 | ❌ |
|
||||
| [Mefedroniy](https://github.com/OctoBanon-Main/mefedroniy-client) | TUI client for RAC | OctoBanon | [v1.3.1+1.99.2](https://github.com/OctoBanon-Main/mefedroniy-client/releases/tag/v1.3.1%2B1.99.2) | Active | Rust | v1.99.2 | ❌ |
|
||||
| [RAC.rs](https://github.com/kostya-zero/rac-rs) | Rust library for RAC client (used by [Tower](https://github.com/kostya-zero/tower)) | Kostya Zero | [0.1.0](https://crates.io/crates/rac_rs/0.1.0) | Active | Rust | v2.0 | v2.0 |
|
||||
| [Tower](https://github.com/kostya-zero/tower) | GUI client for RAC developed using Tauri | Kostya Zero | ❌ | Active | Rust | v2.0 | v2.0 |
|
||||
| [Snowdrop](https://github.com/Forbirdden/Snowdrop) | WRAC GUI client | Forbirdden | ❌ | Active | JavaScript | ❌ | v2.0 |
|
||||
| [CRAB](https://gitea.bedohswe.eu.org/pixtaded/crab) | Bundle with both client and server | pixtaded | [2.0.0](https://gitea.bedohswe.eu.org/pixtaded/crab/releases/tag/2.0.0-snapshot-202502092015) | Frozen | Java | v1.99.2 | ❌ |
|
||||
| [Dobroho Vechora](https://gitea.bedohswe.eu.org/bedohswe/dobroho_vechora) | The first open-source client | Bʰedoh₂ swé | [Source code](https://gitea.bedohswe.eu.org/bedohswe/dobroho_vechora/raw/branch/main/dobroho_vechora.bash) | Abandoned | Bash | v1.0[^2] | ❌ |
|
||||
| lRAC | The first original RAC client using tkinter | Mr. Sugoma | [1.0.2](https://media.githubusercontent.com/media/MeexReay/RAC-Hub/refs/heads/main/Archive/lRAC/lrac_1.0.2.py) | Abandoned | Python | v1.0[^4] | ❌ |
|
||||
|
||||
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.0, v1.99.2 | ❌ | -->
|
||||
<!-- | WinRAC | GUI client for RAC developed using WinForms | cat8753 | | Abandoned | C# | v1.99.2 | ❌ | -->
|
||||
|
||||
[^1]: bRAC-0.1.3+2.0 requires GTK4 to be installed on Windows [(see more)](https://github.com/MeexReay/bRAC/releases/tag/0.1.3%2B2.0#user-content-window-gui-install)
|
||||
[^2]: "_Я раньше хотел допилить его до v2, но мой bash код было трудно обновить_" - chunbyonga
|
||||
[^5]: "_Не срал с утра или прошлого вечера, терпел ради cRACkа._" - pansangg
|
||||
|
||||
# Server software
|
||||
|
||||
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
|
||||
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
|
||||
| [sRAC](https://github.com/MeexReay/sRAC) | simple RAC server | MeexReay | [1.0.0](https://github.com/MeexReay/sRAC/releases) | Active | Rust | v2.0 | v2.0 |
|
||||
| lRACd | The official RAC server | Mr. Sugoma | [2.0.9](https://wdfiles.ru/Obvt) | Active | C | v2.0 | ❌ |
|
||||
| [CRAB](https://gitea.bedohswe.eu.org/pixtaded/crab) | Bundle with both client and server | pixtaded | [2.0.0](https://gitea.bedohswe.eu.org/pixtaded/crab/releases/tag/2.0.0-snapshot-202502092015) | Frozen | Java | v1.99.2 | ❌ |
|
||||
| [AlmatyD](https://gitea.bedohswe.eu.org/bedohswe/almatyd) | Open source server | Bʰedoh₂ swé | [Source code](https://gitea.bedohswe.eu.org/bedohswe/almatyd) | Abandoned[^3] | TypeScript | v1.0 | ❌ |
|
||||
|
||||
<!-- | Gashishnik | WRAC server | OctoBanon | Soon... | In development | Rust | ❌ | v2.0 | -->
|
||||
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.99.2 | ❌ | -->
|
||||
<!-- | Butter | Simple Node.js RAC server | Forbirdden | ❌ | Abandoned | JavaScript | v1.99.2, v2.0 | ❌ | -->
|
||||
|
||||
[^3]: "_Мне лень его допиливать. Если тебе зачем-то очень нужен RAC сервер, то ставь CRAB._" - chunbyonga
|
||||
|
||||
# Known servers
|
||||
|
||||
| Address | Description | Software | Status | Protocol | Auth |
|
||||
| :------------------: | :-----------------------------------: | :--------------------------------------: | :----: | :-------: | :------: |
|
||||
| 91.192.22.20:42666 | Official server by Mr. Sugoma | lRACd (2.0.9) | Active | RACv2.0 | Optional |
|
||||
| meex.lol:11234 | WRACS tor proxy of 91.192.22.20:42666 | [sRAC](https://github.com/MeexReay/sRAC) | Active | WRACSv2.0 | Optional |
|
||||
| meex.lol:42666 | RAC proxy of meex.lol:52667 | [sRAC](https://github.com/MeexReay/sRAC) | Active | RACv2.0 | Required |
|
||||
| meex.lol:52667 | Official WRACS server | [sRAC](https://github.com/MeexReay/sRAC) | Active | WRACSv2.0 | Required |
|
||||
|
||||
# Protocol documentation
|
||||
|
||||
The following documents cover the structure, behavior, and expectations of RAC and WRAC protocols:
|
||||
|
||||
- [RACv1.0](RACv1.md)[^4]
|
||||
- [RACv1.99.x](RACv1.99.md)
|
||||
- [RACv2.0](RACv2.md)
|
||||
- [WRACv2.0](WRAC.md)
|
||||
- [Users additions](USERS_ADDITIONS.md)
|
||||
|
||||
[^4]: "_Про RAC 1 вообще забудь, это днище, его юзать нельзя._" - Mr. Sugoma
|
||||
|
||||
# See also
|
||||
|
||||
- [Project sources](https://github.com/MeexReay/RAC-Hub)
|
||||
- [Historical archives](https://github.com/MeexReay/RAC-Hub-Archive)
|
||||
|
||||
<br>
|
||||
|
||||
[<img src="https://github.com/user-attachments/assets/f2be5caa-6246-4a6a-9bee-2b53086f9afb" height="50">]() [<img src="https://github.com/user-attachments/assets/4d35191d-1dbc-4391-a761-6ae7f76ba7af" height="50">]()
|
||||
|
||||
This project was inspired by the ideas from [The-Stratosphere-Solutions/RAC-Hub](https://github.com/The-Stratosphere-Solutions/RAC-Hub), but all text and documentation have been created independently.
|
48
README_TEMPLATE.md
Normal file
48
README_TEMPLATE.md
Normal file
@ -0,0 +1,48 @@
|
||||
Here you can find RAC clients, servers and more
|
||||
|
||||
You can help RAC Hub by [adding more information](https://github.com/MeexReay/RAC-Hub/pulls)
|
||||
|
||||
# Clients
|
||||
|
||||
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
|
||||
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
|
||||
{clients}
|
||||
|
||||
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.0, v1.99.2 | ❌ | -->
|
||||
<!-- | WinRAC | GUI client for RAC developed using WinForms | cat8753 | | Abandoned | C# | v1.99.2 | ❌ | -->
|
||||
|
||||
# Server software
|
||||
|
||||
| Title | Description | Author | Release | Status | Lang | RAC | WRAC |
|
||||
| :---: | :---------: | :----: | :-----: | :----: | :--: | :-: | :--: |
|
||||
{servers}
|
||||
|
||||
<!-- | Gashishnik | WRAC server | OctoBanon | Soon... | In development | Rust | ❌ | v2.0 | -->
|
||||
<!-- | WebbyCRAB | Fork of CRAB that runs online using TeaVM | Forbirdden | ❌ | Abandoned | Java | v1.99.2 | ❌ | -->
|
||||
<!-- | Butter | Simple Node.js RAC server | Forbirdden | ❌ | Abandoned | JavaScript | v1.99.2, v2.0 | ❌ | -->
|
||||
|
||||
# Known servers
|
||||
|
||||
| Address | Description | Software | Status | Protocol | Auth |
|
||||
| :------------------: | :-----------------------------------: | :--------------------------------------: | :----: | :-------: | :------: |
|
||||
{hosts}
|
||||
|
||||
# Protocol documentation
|
||||
|
||||
- [RACv1.0](RACv1.md)[^1]
|
||||
- [RACv1.99.x](RACv1.99.md)
|
||||
- [RACv2.0](RACv2.md)
|
||||
- [WRACv2.0](WRAC.md)
|
||||
- [Users additions](USERS_ADDITIONS.md)
|
||||
|
||||
# See also
|
||||
|
||||
- [Original RAC-Hub](https://github.com/The-Stratosphere-Solutions/RAC-Hub)
|
||||
- [RAC-Hub github](https://github.com/MeexReay/RAC-Hub)
|
||||
- [Archive](https://github.com/MeexReay/RAC-Hub/tree/main/Archive)
|
||||
|
||||
<br>
|
||||
|
||||
[<img src="https://github.com/user-attachments/assets/f2be5caa-6246-4a6a-9bee-2b53086f9afb" height="50">]() [<img src="https://github.com/user-attachments/assets/4d35191d-1dbc-4391-a761-6ae7f76ba7af" height="50">]()
|
||||
|
||||
{notes}
|
1
SOFTWARE_TEMPLATE.md
Normal file
1
SOFTWARE_TEMPLATE.md
Normal file
@ -0,0 +1 @@
|
||||
| {name} | {description} | {author} | {release} | {status} | {lang} | {rac_version} | {wrac_version} |
|
32
USERS_ADDITIONS.md
Normal file
32
USERS_ADDITIONS.md
Normal file
@ -0,0 +1,32 @@
|
||||
# Users additions
|
||||
|
||||
## Server info packet
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x69`
|
||||
|
||||
Server sends:
|
||||
|
||||
- (nothing or closes socket if server doesn't support this feature)
|
||||
- Protocol version:
|
||||
- Byte `0x01` for RACv1
|
||||
- Byte `0x02` for RACv1.99
|
||||
- Byte `0x03` for RACv2
|
||||
- Server name
|
||||
|
||||
## User agents
|
||||
|
||||
User agents in RAC is the way how to get know from what client the message was sent. It works by just checking the message text throught regex.
|
||||
|
||||
Here are listed the most common clients, and their common names colors in the chat.
|
||||
|
||||
| Client | Format | Regex | Color |
|
||||
| :----: | :----: | :----: | :----: |
|
||||
| [bRAC](https://github.com/MeexReay/bRAC) | 리㹰<{name}> {text} | `\uB9AC\u3E70<(.*?)> (.*)` | green
|
||||
| [CRAB](https://gitea.bedohswe.eu.org/pixtaded/crab) | ═══<{name}> {text} | `\u2550\u2550\u2550<(.*?)> (.*)` | light red
|
||||
| [Mefidroniy](https://github.com/OctoBanon-Main/mefedroniy-client) | °ʘ<{name}> {text} | `\u00B0\u0298<(.*?)> (.*)` | light magenta
|
||||
| [cRACk](https://github.com/pansangg/cRACk) | ⁂<{name}> {text} | `\u2042<(.*?)> (.*)` | gold
|
||||
| [Snowdrop](https://github.com/Forbirdden/Snowdrop) | ඞ<{name}> {text} | `\u0D9E<(.*?)> (.*)` | toxic green
|
||||
| clRAC | <{name}> {text} | `<(.*?)> (.*)` | cyan
|
||||
|
86
WRAC.md
Normal file
86
WRAC.md
Normal file
@ -0,0 +1,86 @@
|
||||
# WRACv2.0 Protocol
|
||||
|
||||
Uses websocket for connections, and sends binary data only (works in packet-way manner)
|
||||
|
||||
Totally inherits all packets of RACv2, except of reading messages
|
||||
|
||||
## Sending messages
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x01`
|
||||
- Message text
|
||||
|
||||
## Sending authorized messages
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x02`
|
||||
- Username
|
||||
- `\n`
|
||||
- Password
|
||||
- `\n`
|
||||
- Message
|
||||
|
||||
Server sends:
|
||||
|
||||
- nothing if message was sent successfully
|
||||
- `0x01` if the user does not exists
|
||||
- `0x02` if the password is incorrect
|
||||
|
||||
## Registration users
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x03`
|
||||
- Username
|
||||
- `\n`
|
||||
- Password
|
||||
|
||||
Server sends:
|
||||
|
||||
- nothing if user was registered successfully
|
||||
- `0x01` if the username is already taken
|
||||
|
||||
## Reading messages
|
||||
|
||||
### Getting message length
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x00`
|
||||
|
||||
Server sends:
|
||||
|
||||
- Size of all messages in ASCII (data_size)
|
||||
|
||||
### Normal reading
|
||||
|
||||
This packet is independent from getting message length packet.
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x00`
|
||||
- Byte `0x01`
|
||||
|
||||
Server sends:
|
||||
|
||||
- All messages
|
||||
|
||||
### Chunked reading
|
||||
|
||||
This packet is independent from getting message length packet.
|
||||
|
||||
Client sends:
|
||||
|
||||
- Byte `0x00`
|
||||
- Byte `0x02`
|
||||
- Size of messages you have in ASCII (last_size)
|
||||
|
||||
Server sends:
|
||||
|
||||
- All new messages
|
||||
|
||||
*for example: if you want to read last N bytes, last_size = data_size - N*
|
||||
|
||||
Source: https://github.com/MeexReay/bRAC/blob/main/docs/wrac.md
|
1
_includes/head-custom.html
Normal file
1
_includes/head-custom.html
Normal file
@ -0,0 +1 @@
|
||||
<link rel="stylesheet" href="style.css">
|
28
mkreadme.py
Normal file
28
mkreadme.py
Normal file
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# from typing import Optional
|
||||
# from enum import Enum
|
||||
|
||||
# class
|
||||
|
||||
# def read_template(name):
|
||||
# return open(name.upper()+"_TEMPLATE.md", "r", encoding="utf8").read()
|
||||
|
||||
# SOFTWARE_TEMPLATE = read_template("software")
|
||||
# HOST_TEMPLATE = read_template("host")
|
||||
# README_TEMPLATE = read_template("readme")
|
||||
|
||||
|
||||
|
||||
# def software(
|
||||
# name: str | (str, str),
|
||||
# description: str,
|
||||
# author: str,
|
||||
# release: Optional[(str, str)],
|
||||
# status: str,
|
||||
# lang: str,
|
||||
# rac_version: Optional[str],
|
||||
# wrac_version: Optional[str],
|
||||
# note: Optional[str]
|
||||
# ):
|
||||
# pass
|
24
style.css
Normal file
24
style.css
Normal file
@ -0,0 +1,24 @@
|
||||
@import "https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.6.1/github-markdown.min.css";
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
body {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
background-color: #0d1117;
|
||||
}
|
||||
}
|
||||
|
||||
.markdown-body {
|
||||
box-sizing: border-box;
|
||||
min-width: 200px;
|
||||
max-width: 980px;
|
||||
margin: 0 auto;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user