amiagent 0.3.0 — no more hung-command wedge
Fixes the one failure a remote user could not recover from.
Up to 0.2.0 a command ran inline on the agent's accept loop, so any program
waiting for input nobody would give it parked the whole agent — recoverable
only by pressing Ctrl-C at the physical machine. Not a good property for
something you run remotely.
Commands now run in a child process while the agent waits with a deadline. Past
it, the agent reports that the command is still running, returns to accepting
connections, and leaves it going. Screen capture, file transfer, directory
listing and input all keep working meanwhile; only a second command is refused,
and the refusal names the one blocking it.
New BREAK sends Ctrl-C to the stuck command remotely. System() runs
commands in a CLI process the agent never gets a pointer to, so the agent
snapshots CLI numbers before starting a job and signals whatever appeared since.
Best effort — a program that ignores Ctrl-C still needs attention at the machine.
Verified on an A4000/060 under AmigaOS 3.2.3: Wait 300 hit its deadline in
5.6s, the agent answered ping, system info and directory listings instantly
while it hung, a second command was correctly refused, and BREAK killed it
in 1.2s with no leftover process.
Upgrading
The wire format changed — EXEC gained a deadline field, so the client and
agent must both be 0.3.0. python3 server/amimcp.py --probe prints the agent's
version.
| File | For |
|---|---|
amiagent |
68000 baseline — runs on every Amiga |
amiagent.020 |
68020+ |
amiagent TOKEN=pickasecret
Set a TOKEN. The agent runs arbitrary commands for anyone who can reach its
port, and the protocol is unencrypted. Keep it on a LAN you trust.