diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-10-15 10:17:29 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-10-15 10:17:29 +0200 |
| commit | a0be6bfcac07a256949082e935e1be06753ab872 (patch) | |
| tree | c6f531254e0abf8303080ba6287cf1fc405a72c1 /CLAUDE.md | |
| parent | 2f90f4b60cd50f7e9649daaf8e76a120e608cff6 (diff) | |
| download | meshbay-a0be6bfcac07a256949082e935e1be06753ab872.tar.gz | |
feat(cli): stream — a film or a song played in a media player
`meshbay-cli stream PATH` serves one video or sound file over HTTP on
127.0.0.1 for VLC, mpv or any player that reads HTTP; `--player PROGRAM`
starts the player, and closing it stops the stream, as Ctrl+C does.
The file goes as the node stores it: no remux, no transcode, no stream
slot on the node. Byte ranges are answered from leaseless file_req chunks
decrypted in memory, eight ahead and the last 24 kept. Loopback only, a
random token in the address, a foreign Host refused (DNS rebinding), an
audio or video type with nosniff. The connection is pinged and reopened
when it dies; a refusal by the node stops the stream (exit 5).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'CLAUDE.md')
| -rw-r--r-- | CLAUDE.md | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -1171,6 +1171,7 @@ which pytest also runs when `ANDROID_HOME` is set (`test_android_shell.py`). | Chat: read and post | `client/chat.py`, `commands/chat.py` | `chatbox` seal/verify; signature before decryption; unreadable shown, never dropped; `--follow` reconnects and prints each message once (`Follower`) | | Chat: whose device signed (Tier 2) | `client/roster.py` | port of `transport-roster.js`, held to it by `test_account_pinning.py`; account pins in `state.json` | | Interactive chat | `tui/chat.py` | `meshbay-cli chat` alone; pushed `chat_msg` live; Esc or /part back to the groups | +| Streaming to a media player | `client/relay.py`, `commands/stream.py` | §8.6: HTTP on 127.0.0.1, token in the address, foreign `Host` refused; leaseless `file_req` chunks, read ahead and kept; reconnects; a node refusal stops it | | Deleting files | `client/remove.py`, `commands/rm.py` | §5.4: the uploader's account or the node's operator; the whole run is checked before asking | | Interactive mode | `meshbay_cli/tui/` | Textual; names are drawn as text, never markup | | Man page | `meshbay_cli/manpage.py` | generated from the parser at build time; `test_manpage.py` | |