zebrad reads @DEFAULT_MONITOR@ which mixes every PA stream on a machine, so each browser tab hears its own carrier echoed back. without a filter, every outbound message would render twice in the chat log (once as 'me' at send time, once as 'peer' on echo arrival). filter: compare frame.sid (carried in DATA + HELLO) against our own senderIdBytes(). if equal, drop frame before any UI work. loopback mode unaffected since BroadcastChannel never echoes to sender by spec. senderIdBytes returns a stable per-tab id: * passphrase mode: random 4 bytes cached for tab lifetime * pubkey mode: first 4 of SHA-256(pubkey), stable across reloads |
||
|---|---|---|
| .. | ||
| blog | ||
| fonts | ||
| chat.html | ||
| index.html | ||
| kernel.html | ||