pub struct RoomAnnouncement {
pub room_id: String,
pub name: String,
pub encrypted: bool,
pub passphrase_salt: Option<Vec<u8>>,
pub member_count: u32,
pub creator_fingerprint: String,
pub announced_at: i64,
pub owner_fingerprints: Vec<String>,
pub verified_only: bool,
pub host_addrs: Vec<String>,
pub kind: RoomKind,
}Expand description
Broadcast on the global ROOMS_TOPIC. Each peer republishes the rooms they’re currently in, periodically. Listeners maintain a cache with TTL.
Fields§
§room_id: String§name: String§encrypted: bool§passphrase_salt: Option<Vec<u8>>Argon2id salt — present iff encrypted. Joiners derive their
passphrase key from (passphrase, salt) to unwrap session keys.
member_count: u32§creator_fingerprint: String§announced_at: i64Seconds since UNIX_EPOCH when this announcement was emitted.
owner_fingerprints: Vec<String>Phase B: fingerprints with role = ‘owner’ — the soft moderator
set. Newcomers learn from this who’s authorized to grant other
owners and to issue bans (signed via SignedRoomMessage).
#[serde(default)] for forward-compat with pre-0.3 senders.
verified_only: boolPhase E: when true, existing members refuse to wrap their
session key for a joiner whose fingerprint isn’t in the
global verified_peers set. Joiner sees a JoinRefused
reply from at least one owner so the UX isn’t a silent hang.
#[serde(default)] so pre-0.3 senders default to permissive.
host_addrs: Vec<String>Phase D follow-up: dialable multiaddrs of the announcing node. Populated from AutoNAT-confirmed external addresses + relay circuit reservations (capped at 4 entries to keep the announcement small). Empty for pre-0.3-followup senders.
Consumer: when a peer sees an announcement with non-empty
host_addrs and isn’t already connected to creator_fingerprint,
it opportunistically dials the first entry. This lets cross-
internet peers bootstrap via relay-circuit addresses without
requiring an invite link.
kind: RoomKindhuddle 0.7: explicit room kind. RoomKind::Direct (1-1 DM) is
filtered out by honest 0.7+ consumers if neither member is them —
DMs never leak past the two participants’ sidebars. Pre-0.7
peers omit the field, which #[serde(default)] resolves to
RoomKind::Group (Default impl) — they keep working unchanged.
Trait Implementations§
Source§impl Clone for RoomAnnouncement
impl Clone for RoomAnnouncement
Source§fn clone(&self) -> RoomAnnouncement
fn clone(&self) -> RoomAnnouncement
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more