How akshatjski/p2p-terminal-chat works
P2P Terminal Chat is a terminal-based, end-to-end encrypted peer-to-peer chat application. A host announces and accepts connections; a joiner discovers or enters a host address, verifies its fingerprint, and joins a room to exchange messages. Host-side room relaying also supports moderation, history, file transfer, games, and bridging rooms across networks; mesh mode provides a separate multi-hop relay path. The graph reflects README capabilities where source excerpts are incomplete, so some subsystem wiring is intentionally not inferred.
Main entry points: ClientMain.java CLI entry · HostNode.java Host node · ClientNode.java Client node · SecureChannel.java Secure channel
Components 30
Terminal app
- CLI entry
src/main/java/com/p2p/chat/ClientMain.java - Configuration
src/main/java/com/p2p/chat/config/Config.java
Peer connectivity
- LAN discovery
src/main/java/com/p2p/chat/discovery/Discovery.java - Presence announcer
src/main/java/com/p2p/chat/discovery/DiscoveryAnnouncer.java - Host scanner
src/main/java/com/p2p/chat/discovery/DiscoveryScanner.java - Join selection
src/main/java/com/p2p/chat/discovery/JoinPicker.java - Tailnet status
src/main/java/com/p2p/chat/discovery/TailscaleStatus.java - Reconnect channel
src/main/java/com/p2p/chat/core/ReconnectableChannel.java - Socket transport
src/main/java/com/p2p/chat/transport/SocketTransport.java
Secure channels
- Peer identity
src/main/java/com/p2p/chat/crypto/Identity.java - Secure channel
src/main/java/com/p2p/chat/crypto/SecureChannel.java - Crypto primitives
src/main/java/com/p2p/chat/crypto/CryptoUtil.java - Trust verification
src/main/java/com/p2p/chat/core/TrustGate.java - Trusted peers
src/main/java/com/p2p/chat/crypto/TrustStore.java
Room features
- Host node
src/main/java/com/p2p/chat/core/HostNode.java - Client node
src/main/java/com/p2p/chat/core/ClientNode.java - Chat protocol
src/main/java/com/p2p/chat/protocol/Protocol.java - Message history
src/main/java/com/p2p/chat/core/MessageHistory.java - File receiving
src/main/java/com/p2p/chat/core/FileReceiver.java - Room games
src/main/java/com/p2p/chat/game/GameEngine.java - Dynamic game hints
src/main/java/com/p2p/chat/game/guess/ItunesHintSource.java - Host room bridge
src/main/java/com/p2p/chat/core/HostNode.java
Mesh mode
- Mesh entry
src/main/java/com/p2p/chat/mesh/MeshMain.java - Mesh relay node
src/main/java/com/p2p/chat/mesh/MeshNode.java - Mesh link
src/main/java/com/p2p/chat/mesh/MeshLink.java
Other components
- Terminal user
- Tailscale CLI
- Remote peer
- LAN multicast
- iTunes services
Connections 39
- Terminal user → CLI entry: starts chat
- CLI entry → Configuration: loads settings
- CLI entry → Peer identity: loads identity
- CLI entry → Host node: starts host
- CLI entry → Client node: joins host
- CLI entry → Presence announcer: announces presence
- CLI entry → Host scanner: scans hosts
- CLI entry → Tailnet status: checks tailnet
- Presence announcer → LAN multicast: broadcasts presence
- Host scanner → LAN multicast: scans presence
- Host scanner → LAN discovery: parses records
- CLI entry → Join selection: selects host
- Tailnet status → Tailscale CLI: queries status
- Client node → Remote peer: connects to host
- Client node → Reconnect channel: recovers connection
- Reconnect channel → Secure channel: re-establishes channel
- Host node → Secure channel: secures connections
- Client node → Secure channel: secures connection
- Secure channel → Crypto primitives: encrypts messages
- Secure channel → Peer identity: uses key identity
- Host node → Trust verification: verifies peers
- Client node → Trust verification: verifies host
- Trust verification → Trusted peers: checks fingerprints
- Client node → Socket transport: sends protocol data
- Host node → Socket transport: sends protocol data
- Client node → Chat protocol: formats room commands
- Host node → Chat protocol: routes room commands
- Host node → Message history: records messages
- Client node → File receiving: receives file chunks
- Host node → Room games: routes game commands
- Room games → Dynamic game hints: requests clues
- Dynamic game hints → iTunes services: fetches chart data
- Host node → Host room bridge: bridges host rooms
- Terminal user → Mesh entry: starts mesh mode
- Mesh entry → Mesh relay node: starts relay node
- Mesh relay node → Mesh link: manages peer links
- Mesh relay node → Secure channel: secures peer links
- Mesh relay node → Trust verification: verifies peers
- Mesh relay node → Chat protocol: relays mesh messages