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 (carriesFileInfo, 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.