Files
Evgeny @ SimpleX Chat 1cc4d98dd0 terms 2
2026-03-13 17:56:14 +00:00

1.4 KiB

Simplex.FileTransfer.Server.Env

XFTP router environment: configuration, storage quota tracking, and request routing.

Source: FileTransfer/Server/Env.hs

Non-obvious behavior

1. Startup storage accounting with quota warning

newXFTPServerEnv computes usedStorage by summing data packet sizes from the in-memory store at startup. If the computed usage exceeds the configured fileSizeQuota, a warning is logged but the router still starts. This allows the router to come up even if it's over quota (e.g., after a quota reduction), relying on expiration to reclaim space.

2. XFTPRequest ADT separates new data packets from commands

XFTPRequest has three constructors:

  • XFTPReqNew: data packet creation (carries FileInfo, recipient keys, optional basic auth)
  • XFTPReqCmd: command on an existing data packet (carries file ID, FileRec, and the command)
  • XFTPReqPing: health check

This separation occurs after credential verification in Server.hs. XFTPReqNew bypasses entity lookup entirely since the data packet doesn't exist yet.

3. fileTimeout for upload deadline

fileTimeout in XFTPServerConfig sets the maximum time allowed for a single data packet upload (FPUT). The router wraps the receive operation in timeout fileTimeout. Default is 5 minutes (for 4MB chunks). This prevents slow or stalled uploads from holding router resources indefinitely.