Skip to main content

mumcord_protocol/
lib.rs

1//! Mumble protocol implementation.
2//!
3//! The control channel ([`connect`]) gives a [`Handle`] for commands and a stream of [`Event`]s.
4//! The voice transport plugs in via [`Event::CryptSetup`] / [`Handle::send_crypt_setup`] for UDP
5//! crypto and [`Event::UdpTunnel`] / [`Handle::send_tunnel`] for TCP-tunnelled voice.
6
7pub mod ban;
8pub mod client;
9pub mod error;
10pub mod framing;
11pub mod permissions;
12pub mod query;
13mod ratelimit;
14pub mod registered;
15pub mod state;
16pub mod tap;
17pub mod tls;
18pub mod version;
19pub mod voice;
20
21pub use ban::{
22    ADDRESS_LEN, Ban, format_start, from_message, parse_iso, query_message, to_message, wire_mask,
23};
24pub use client::{
25    ConnectConfig, Connection, DisconnectReason, Event, Handle, LowOutcome, PLUGIN_DATA_MAX,
26    PluginData, PluginTicket, SyncProgress, TextMessage, TextTarget, UdpPing, connect,
27    connect_with_progress, connect_with_tap, set_client_release,
28};
29pub use error::{
30    CommandError, ConnectError, DenyKind, PermissionDenied, ProtocolError, RejectReason,
31};
32pub use query::{
33    LEGACY_ANSWER_LEN, LEGACY_QUERY_LEN, QueryAnswer, decode_answer, encode_legacy_query,
34    encode_query,
35};
36pub use registered::RegisteredUser;
37/// Certificate/key DER types used by [`ClientIdentity`] and [`ServerCert`].
38pub use rustls::pki_types;
39pub use state::{Channel, CryptSetup, ServerInfo, ServerState, User, UserChange};
40pub use tap::{PacketTap, TapDirection, TapPacing, TapPluginData, TappedFrame};
41pub use tls::{CertVerifier, ClientIdentity, ServerCert, cert_hash};
42pub use version::MumbleVersion;
43pub use voice::{
44    CryptStats, LinkStats, MAX_VOICE_PAYLOAD, OutgoingAudio, Transport, VOICE_TARGET_MAX,
45    VoiceEvent, VoicePacket, VoiceTransport, WhisperKind,
46};
47
48/// Control-channel messages generated from the vendored `Mumble.proto`.
49#[allow(clippy::all, missing_docs)]
50pub mod proto {
51    include!(concat!(env!("OUT_DIR"), "/mumble_proto.rs"));
52}
53
54/// UDP voice messages generated from the vendored `MumbleUDP.proto`.
55#[allow(clippy::all, missing_docs)]
56pub mod udp_proto {
57    include!(concat!(env!("OUT_DIR"), "/mumble_udp.rs"));
58}
59
60// Compiles the README example as a doctest so it cannot rot.
61#[cfg(doctest)]
62#[doc = include_str!("../README.md")]
63struct ReadmeDoctests;