ролей, членства и ограниченной истории без MAM. Изменение фиксируется до публикации ответа; при ошибке записи состояние комнаты откатывается. - Crash recovery использует последнее сохранённое поколение после SIGKILL, включая временные комнаты. Heartbeat обновляет живое членство; ожидающие записи сохраняют исходный deadline через повторные перезапуски. `muc_recovery_grace_period`: по умолчанию 300 секунд, пределы 1..604800. - Подтверждённые выходы, смена nick, ролей и политик комнаты не заменяются старой записью восстановления. Native config/state остаются экспортом для Prosody; согласованное восстановление Rust использует собственный sidecar. - Исправлены MUC probe, неизвестные типы presence, вход без MUC `<x/>`, ошибки доставки и статус 333. Обычные presence extensions сохраняются в живом обмене; поддельная MUC identity фильтруется. `subject` вместе с `body` либо `thread` не изменяет тему комнаты. - Подключены `muc_max_rooms`, `restrict_room_creation`, политики регистрации и зарегистрированного nick, `muc_tombstone_expiry`; добавлены встроенные административные ad-hoc команды уничтожения комнат и изменения affiliation. - Hub сохраняет resumable XEP-0198 сессии, счётчики и очередь. Resume после перезапуска доступен на новом TLS/SASL-транспорте через legacy SASL и SASL2. Действующие приватные SM-записи восстанавливают логические сессии и MUC до открытия listeners: offline-доставка попадает в очередь, синтетический join и история повторно не отправляются. SM resume не требует дополнительной available presence; без SM восстановление MUC требует новой аутентификации точного полного JID и available presence либо явного MUC-входа. Входящий handled-счётчик обновляется после обработки. Сокеты TCP/TLS не сохраняются; неопределённая сетевая отправка допускает повторную доставку. - Известные встроенные MUC-возможности Prosody отображаются на Rust-реализацию. Произвольные Lua/community-модули не исполняются; неизвестные явно включённые MUC-модули отклоняются при запуске. Общие и host `modules_disabled` учитываются для vCard и occupant-id. Порядок восстановления, ограничения хранения и отката на Prosody: [docs/MUC-RECOVERY.md](docs/MUC-RECOVERY.md). Проверка: 293 Rust tests, Clippy/fmt/release, полный сетевой прогон, 500 TLS MUC+SM ресурсов с SIGKILL/resume и native reference — успешно. Подробности: [docs/VALIDATION-0.8.0.md](docs/VALIDATION-0.8.0.md).
47 lines
1.3 KiB
TOML
47 lines
1.3 KiB
TOML
[package]
|
|
name = "rust-xmpp"
|
|
version = "0.8.0"
|
|
edition = "2024"
|
|
description = "Experimental Rust XMPP server with Prosody-compatible storage"
|
|
license = "MIT"
|
|
|
|
[dependencies]
|
|
anyhow = "1"
|
|
mlua = { version = "0.12", features = ["lua54", "vendored", "serde"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
serde_yaml_ng = "0.10"
|
|
toml = "0.9"
|
|
glob = "0.3"
|
|
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "io-util", "sync", "time", "signal", "fs"] }
|
|
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
|
|
rustls-pemfile = "2"
|
|
roxmltree = "0.21"
|
|
base64 = "0.22"
|
|
sha1 = "0.10"
|
|
sha2 = "0.10"
|
|
hmac = "0.12"
|
|
pbkdf2 = "0.12"
|
|
hex = "0.4"
|
|
subtle = "2"
|
|
stringprep = "0.1"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
|
|
chrono = { version = "0.4", default-features = false, features = ["std", "clock"] }
|
|
|
|
axum = { version = "0.8", features = ["ws"] }
|
|
futures-util = "0.3"
|
|
tokio-util = { version = "0.7", features = ["io"] }
|
|
http-body-util = "0.1"
|
|
hyper = { version = "1", features = ["client", "http1"] }
|
|
hyper-util = { version = "0.1", features = ["server-auto", "tokio", "service"] }
|
|
|
|
socket2 = "0.6"
|
|
|
|
hickory-resolver = { version = "0.24", features = ["tokio-runtime", "system-config"] }
|
|
rustls-native-certs = "0.8"
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|