diff --git a/src/Simplex/FileTransfer/Agent.hs b/src/Simplex/FileTransfer/Agent.hs index 9a789a104..f45389462 100644 --- a/src/Simplex/FileTransfer/Agent.hs +++ b/src/Simplex/FileTransfer/Agent.hs @@ -393,7 +393,7 @@ runXFTPSndPrepareWorker c Worker {doWork} = do let CryptoFile {filePath} = srcFile fileName = takeFileName filePath fileSize <- liftIO $ fromInteger <$> CF.getFileContentsSize srcFile - when (fileSize > maxFileSize) $ throwError $ INTERNAL "max file size exceeded" + when (fileSize > maxFileSizeHard) $ throwError $ INTERNAL "max file size exceeded" let fileHdr = smpEncode FileHeader {fileName, fileExtra = Nothing} fileSize' = fromIntegral (B.length fileHdr) + fileSize chunkSizes = prepareChunkSizes $ fileSize' + fileSizeLen + authTagSize diff --git a/src/Simplex/FileTransfer/Client/Main.hs b/src/Simplex/FileTransfer/Client/Main.hs index e1ef9f0d8..c0277cd9f 100644 --- a/src/Simplex/FileTransfer/Client/Main.hs +++ b/src/Simplex/FileTransfer/Client/Main.hs @@ -19,6 +19,7 @@ module Simplex.FileTransfer.Client.Main prepareChunkSizes, prepareChunkSpecs, maxFileSize, + maxFileSizeHard, fileSizeLen, getChunkDigest, SentRecipientReplica (..), @@ -76,12 +77,17 @@ import UnliftIO.Directory xftpClientVersion :: String xftpClientVersion = "1.0.1" +-- | Soft limit for XFTP clients. Should be checked and reported to user. maxFileSize :: Int64 maxFileSize = gb 1 maxFileSizeStr :: String maxFileSizeStr = B.unpack . strEncode $ FileSize maxFileSize +-- | Hard internal limit for XFTP agent after which it refuses to prepare chunks. +maxFileSizeHard :: Int64 +maxFileSizeHard = gb 5 + fileSizeLen :: Int64 fileSizeLen = 8