TIC Processor
Handles FidoNet file echoes — files distributed network-wide
the same way Echomail distributes messages, but with metadata
in a separate .TIC companion file.
Flow
inbound BinkP
↓
.TIC + file land in inbox/<area>/
↓
TIC processor parses .TIC:
Area: SCENE_FILES
File: scene2026-01.zip
Desc: BBS scene news, January
Crc: 12345678
↓
File moves to data/files/<area>/ + description set
↓
File appears in /files/<area>/
Sysop config
File areas that carry a TIC file-echo are managed at
/admin/file-areas — each one is a FileArea row attached to an
EchomailNetwork (network_id set). For each: which local storage
path to drop into, and (under /admin/file-echo-subs) which peers
are subscribed to receive it.
Forwarding
If you have nodes peering off you for the same TIC area, the
processor regenerates a fresh .TIC with you in the path and
queues it for outbound BinkP to each downlink.
Outbound — auto-hatch on local upload
Inbound TIC processing (above) isn't the only way a file gets
distributed. Any file that lands in a network-attached file area
gets queued for outbound distribution automatically — no separate
"send this out" step:
- A user or sysop uploads a file into a file area whose
network_idis not null (for example one of
ANotherNetwork'sANN.FILES.*areas). - The upload route calls
hatch_local_file(), which looks up every
peer subscribed to that file echo and drops oneHatchQueuerow
per peer — this is the origin hop, so there's no prior TIC to
forward, just a fresh one built from scratch. - The next outbound BinkP session to each subscribed peer picks up
its pendingHatchQueuerows, builds the.TICcompanion file
(filling inSEEN-BY/PATHfor that hop), and ships the file.
This runs from every upload path that can write into a network file
area — the regular /files/ upload form, the sysop's
"manage upload" tool, the smart-upload flow, and approving a queued
file in the upload-review queue. A local-only file area
(network_id is null) never triggers this — there's nobody to hatch
to.
Checksums
.TIC carries a CRC32. If the file's CRC doesn't match, the
processor moves both into bad/ and logs the mismatch. Manual
intervention required.