Ken Johnson dcbc03e52b
All checks were successful
Build and Release / build-and-release (push) Successful in 20s
BinkP: fix multi-file transfer, add SentFiles tracking, showkey cmd
Multi-file transfer fix (matches binkd sent_fls):
- After sending all data for a file, close immediately and add to
  SentFiles tracking list instead of blocking on M_GOT. Next file
  starts sending right away — no serial waiting.
- M_GOT/M_SKIP now match against SentFiles by filename, not the
  current TxFile (which may already be on the next file).
- EOB only sent when send queue empty AND all SentFiles confirmed.
- SessionDone checks SentFiles is empty.
- Fixes bidirectional multi-file sessions that were losing files
  because M_FILE for the next file arrived before previous file's
  data was fully transmitted.

M_FILE receive handler (matches Argus bdrxReceData M_FILE):
- When new M_FILE arrives while receiving, finalize current file
  if data is complete (send M_GOT), or skip if incomplete.
- Previously always skipped, discarding completed files.

Other changes:
- Add 'showkey' command: prints public key from configured private key
- Update keygen: show PublicKey as config comment (not parsed at system level)
- Replace daemon Sleep(100) with select() on listener socket
- Strip trailing NUL bytes from BinkP args (Argus FormatBinkPMsg adds #0)

Tested: 5-node simultaneous bidirectional (45 files SHA256 verified),
Argus/Radius 4.010 interop (48 files inbound + 5 outbound), BinkIT/sbbs,
both BinkP CRAM-MD5+CRYPT and Comet ED25519+ChaCha20 protocols.
2026-04-09 08:08:34 -07:00

Comet Mailer

A modern FidoNet TCP mailer daemon for the 2020s.

Comet provides direct TCP file transfer with a purpose-built protocol while maintaining full BinkP/1.1 (FTS-1026) compatibility. Both protocols are auto-detected on the same port.

Features

  • Direct TCP file transfer with SHA-256 verification
  • Bidirectional transfer with sliding window flow control
  • ED25519 public-key authentication (no shared secrets needed)
  • CRAM-MD5 password authentication (passwords never sent in clear)
  • X25519 + ChaCha20 encryption (when using ED25519 auth)
  • Full BinkP/1.1 compatibility (FTS-1026) with auto-detection
  • Inline file requests (Hydra-style, within active sessions)
  • FTS-5 nodelist integration (automatic IP/port lookup)
  • BSO outbound scanning with point directory support
  • Optional zlib compression (per-block, automatic)
  • Multi-session daemon with per-node BSY locking
  • Config hot-reload (edit config while Comet is running)
  • Embeddable in BBS software via log and event callbacks
  • Cross-platform: Linux, FreeBSD, DOS, Windows, OS/2

Quick Start

comet keygen                    # generate ED25519 keypair
comet                           # run as daemon (listen + poll)
comet call 1:213/723            # single outbound call
comet -c /path/to/comet.cfg     # use alternate config file
comet -d call 1:213/723         # debug/trace mode

See COMET.SAM for an annotated sample configuration.

Platforms

Platform Status Notes
Linux x86-64 Production Primary platform
FreeBSD x86-64 Production Cross-compiled from Linux
DOS (FreeDOS) Production Requires CWSDPMI + Watt-32 packet driver
Windows 64-bit In progress WinSock2, needs type compatibility fixes
OS/2 Experimental FPC OS/2 Sockets unit, untested

Building

Requires Free Pascal Compiler (FPC) 3.2.x.

make              # Linux (default)
make freebsd      # FreeBSD cross-compile
make dos          # DOS cross-compile
make win64        # Windows 64-bit cross-compile

Documentation

  • COMET.DOC — Full operator manual
  • COMET.SAM — Annotated sample configuration
  • FSP-COMET.001 — Wire protocol specification

Tested Against

  • binkd (reference BinkP implementation)
  • Radius/Argus 4.010
  • Fimail 0.1.0

Contact

License

GPL-2.0

Description
Bringing Fidonet Protocols into the 21st century
Readme 8.5 MiB
Comet 1.2-1 Latest
2026-04-09 16:30:01 +00:00
Languages
JavaScript 57.8%
Pascal 39.2%
Shell 1.3%
CSS 0.8%
HTML 0.7%
Other 0.2%