9 Commits

Author SHA1 Message Date
da732a10bd Version 1.2.1: full BinkP/Argus parity, Comet augmentation, WebUI
Some checks failed
Build and Release / build-and-release (push) Failing after 13m54s
Version scheme: Major.Minor.Build-Revision.

BinkP gains every major Argus/binkd extension:

- PLZ (zlib) compression with adaptive block sizing (4KB→16KB)
- NR mode inbound resume via .bkp-part partials (FSP-1029)
- ND/NDA deferred cleanup: mid-session abort preserves outbound (FSP-1038)
- MBT multi-batch: FREQ response rides same session via second EOB
- M_NUL TRF traffic advisory and M_NUL FREQ (FRL-1026)
- M_NUL NDL/PHN info strings (new Phone, NodelistFlags config)
- RFC 2822 date format for M_NUL TIME
- Strict M_GET validation and duplicate-file pre-check
- TBinkpPostAuthCallback: host can route InboundDir before transfer
  (models binkd select_inbound / complete_login)
- TCometBinkpResult: Authenticated / AuthMethod fields

Comet native extensions keep the protocol ahead of BinkP:

- INIT payload adds Location/Time/Phone/NodelistFlags (trailing
  strings, backward-compatible)
- LST file listing: NPKT_LSTREQ/LSTITEM/LSTEND + COPT_LST
- Transactional file cleanup: destructive actions deferred until
  successful session close (matches ND semantics)
- Shared CometRFCDateStr across protocols — no drift between
  BinkP TIME and Comet INIT.Time

Daemon:
- BinkP inbound now starts unsecure and promotes to secure only
  after auth (fixes pre-1.2.1 bug where SecInbound was selected
  unconditionally).

TCometFileProvider: GetPartialSize and OpenForReceiveNamed for
NR partials; defaults preserve the random-temp scheme for
providers that don't track partials (Fastway plugin safe).

WebUI: /src/web/ + /src/webui/ backend, modeled after the Argus
GUI. Live session activity, outbound polls, FREQ requests,
nodelist, config editor, scheduler, SSE event stream.
2026-04-21 09:37:03 -07:00
c5602dd7e4 Remove unreleased software from docs 2026-04-09 09:22:48 -07:00
9f1e212a2b Update docs: showkey command, CallNodeExternal API, v1.2 changelog
- COMET.DOC: Added showkey to command reference. Added section 17.7
  documenting CallNodeExternal API with code examples for both
  simple (BSO) and host-provided (stream) modes. Updated changelog
  with all v1.2 changes.
- COMET.SAM: Added showkey command, updated PrivateKey/PublicKey
  comments to reflect keygen output format.
- README.md: Added showkey to quick start, updated tested-against
  list with Argus, Fastway, BinkIT versions and auth methods.
2026-04-09 09:21:58 -07:00
0d7fa7a245 Update COMET.DOC for v1.2 stream I/O provider API
- Version header updated to 1.2
- Added cometio.pas to source file listing
- Updated embedding example to show FileIO provider usage
- New section 17.5: File I/O Provider API reference
- New section 17.6: Custom file provider example
- Added v1.2 changelog entry
2026-04-08 10:25:14 -07:00
5bf3177540 Add README, update docs for encryption and protocol accuracy
Add README.md as a concise repo landing page. Update FSP-COMET.001
to document session encryption (X25519 + ChaCha20), KEYEX packet
type, COPT_CRYPT/COPT_NOPWD capability flags, AUTH_NOPWD, and fix
FINFO/EOF wire formats. Update COMET.DOC with encryption feature
listing, operator documentation, and fix section numbering.
2026-04-07 10:41:41 -07:00
8aeef4d323 Release 1.01: docs, all-platform binaries, and TIC files
Updated COMET.DOC, COMET.QA, COMET.SAM to version 1.01 with changelog.
Fixed DOS build: removed StrUtils dependency, guarded SO_SNDBUF for
Watt-32, added IFDEF UNIX around CometTcpRecv EINTR retry loop for
Windows. Release archives and TIC files for all 5 platforms.
2026-04-02 07:59:19 -07:00
1dc095cfa7 Auth cascade fix + encryption gating + event callback system
- Fix: encryption (X25519+ChaCha20) now requires ED25519 authentication.
  Previously encryption activated whenever COPT_CRYPT was negotiated,
  even with NOPWD/CRAM-MD5 — vulnerable to MITM.
- Add AuthMethod tracking (AUTH_ED25519/CRAM/NOPWD/PLAIN) to TCometSession
- Strip COPT_CRYPT from SharedCaps when auth != ED25519, communicated
  via INITACK so both sides agree
- Remove plain text password support from Comet protocol (ED25519/CRAM/NOPWD only)
- NOPWD signaled via COPT_NOPWD capability flag, not password field
- Add log/event callback system for BBS embedding (cometlog.pas):
  CometLogSetCallback() for log messages, CometLogSetEventCallback()
  for structured session events (progress, file start/end, auth status)
- Wire progress events into both Comet and BinkP transfer loops (4/sec throttle)
- Document embedding API in COMET.DOC section 17
2026-04-01 11:09:17 -07:00
c37813289c Security hardening + per-block zlib compression
Security (27 fixes across all protocol paths):
- FINFO: NUL-terminator bounds check before parsing filename
- FINFOACK/RPOS: validate seek offsets against file size
- DATA: reject received bytes exceeding declared file size
- FREQ: sanitize patterns with ExtractFileName, reject ".."
- CometFinalizeFile: defense-in-depth path traversal check
- CometBuildInit: pre-calculate payload size, prevent overflow
- GetNulStr: cap protocol strings at 1024 bytes
- Frame realloc: use ReallocMem to avoid dangling pointer
- BinkP M_FILE: sanitize filename, validate resume offset
- BinkP data receive: bounds check against declared size
- Shell quote Exec rule variables to prevent injection
- Auth rate limiting: 5 failures/5min per IP, then reject
- Password wiping in session cleanup (Comet + BinkP)
- CometNegotiate: out -> var to fix uninitialized read
- Windows non-blocking: implement via ioctlsocket(FIONBIO)
- Banner timeout: fix broken DateTimeToTimeStamp arithmetic
- RPOS loop detection: track same-position repeats
- Config file permission warning on Unix
- Zero-address INIT rejection
- Address component range validation (0-65535)
- Port range validation in config parser
- RX resume offset validation against actual file size

Compression:
- Add COPT_ZLIB capability flag ($08) for per-block zlib
- DATA wire format: offset(4) + comp_type(1) + data(N)
- comp_type 0 = uncompressed, 1 = zlib/deflate
- Blocks that don't compress well sent uncompressed automatically
- Uses FPC paszlib (pure Pascal, works on all platforms incl DOS)
- Backward compatible: old wire format when remote lacks COPT_ZLIB
- Config: Compression = zlib (default) or none

Docs:
- FSP-COMET.001: FTSC format compliance, Security Considerations
- COMET.DOC: added Security Notes section
- COMET.SAM: documented Compression option
- FPC path: use /opt/fpcup compiler

Tested: CometA <-> CometB bidirectional transfer with compressible
text (128KB) and random binary (100KB), compression fallback when
one side has Compression=none. SHA-256 verified on all transfers.
2026-03-31 10:07:18 -07:00
5396556e4d Add COMET.DOC operator manual (complete documentation) 2026-03-30 21:48:02 -07:00