19 #ifndef INCLUDE_RCF_FILETRANSFERSERVICE_HPP 20 #define INCLUDE_RCF_FILETRANSFERSERVICE_HPP 27 #include <RCF/Service.hpp> 29 #include <SF/vector.hpp> 46 class FileTransferService;
49 class FileDownloadInfo;
54 class FileDownloadInfo;
56 typedef std::shared_ptr<FileUploadInfo> FileUploadInfoPtr;
57 typedef std::shared_ptr<FileDownloadInfo> FileDownloadInfoPtr;
59 typedef std::function<bool(const FileUploadInfo &)> UploadAccessCallback;
60 typedef std::function<bool(const FileDownloadInfo &)> DownloadAccessCallback;
63 typedef std::shared_ptr<FileIoRequest> FileIoRequestPtr;
72 std::string getUploadId()
const;
74 FileManifest mManifest;
75 std::uint32_t mCurrentFile;
76 std::uint64_t mCurrentPos;
81 friend class FileTransferService;
83 FileHandlePtr mFileHandle;
85 FileIoRequestPtr mWriteOp;
89 std::uint32_t mTimeStampMs;
91 std::uint32_t mSessionLocalId;
92 std::string mUploadId;
105 FileManifest mManifest;
106 std::uint32_t mCurrentFile;
107 std::uint64_t mCurrentPos;
112 friend class FileTransferService;
114 FileHandlePtr mFileHandle;
115 Path mFileHandlePath;
116 FileIoRequestPtr mReadOp;
123 Timer mTransferWindowTimer;
124 std::uint32_t mTransferWindowBytesSoFar;
125 std::uint32_t mTransferWindowBytesTotal;
127 std::uint32_t mSessionLocalId;
128 std::string mServerDownloadId;
133 typedef std::shared_ptr<FileUploadInfo> FileUploadInfoPtr;
134 typedef std::shared_ptr<FileDownloadInfo> FileDownloadInfoPtr;
137 class FileTransferRequest;
146 class RCF_EXPORT FileTransferService :
public I_Service
149 FileTransferService();
152 typedef BandwidthQuotaCallback UploadQuotaCallback;
153 typedef BandwidthQuotaCallback DownloadQuotaCallback;
156 void setTransferWindowS(std::uint32_t transferWindowS);
157 std::uint32_t getTransferWindowS();
163 const FileManifest & manifest,
164 const std::vector<FileChunk> & chunks,
165 FileChunk & startPos,
166 std::uint32_t & maxMessageLength,
167 std::string & uploadId,
169 std::uint32_t sessionLocalId);
172 const std::vector<FileChunk> & chunks,
173 std::uint32_t & bps);
176 FileManifest & manifest,
177 const FileTransferRequest & request,
178 std::vector<FileChunk> & chunks,
179 std::uint32_t & maxMessageLength,
181 std::uint32_t sessionLocalId,
182 const std::string & serverDownloadId);
185 const FileChunk & startPos);
188 const FileTransferRequest & request,
189 std::vector<FileChunk> & chunks,
190 std::uint32_t & adviseWaitMs,
191 std::uint32_t & bps);
200 void addFileTransfer(
const std::string & transferId,
const TransferInfo & transferInfo);
201 void removeFileTransfer(
const std::string & transferId);
202 TransferInfo findFileTransfer(
const std::string & transferId);
204 Mutex mFileTransfersInProgressMutex;
205 std::map<std::string, TransferInfo> mFileTransfersInProgress;
207 void checkForUploadCompletion(FileUploadInfoPtr uploadInfoPtr);
214 Path mUploadDirectory;
219 std::uint32_t mTransferWindowS;
224 BandwidthQuotaCallback mUploadQuotaCallback;
225 BandwidthQuotaCallback mDownloadQuotaCallback;
228 typedef std::shared_ptr<FileTransferService> FileTransferServicePtr;
232 #endif // ! INCLUDE_RCF_FILETRANSFERSERVICE_HPP Represents an archive, in which serialized objects are stored.
Definition: Archive.hpp:32
RCF_FILESYSTEM_NS::path Path
Typedef for standard C++ path type.
Definition: FileSystem.hpp:32
std::function< BandwidthQuotaPtr(RcfSession &)> BandwidthQuotaCallback
Describes user-provided callback functions for assigning custom bandwidth quotas to a RcfSession...
Definition: RcfFwd.hpp:141
std::function< void(RcfSession &, FileDownloadInfo &)> DownloadProgressCallback
Describes user-provided callback functions for server-side monitoring of a file download.
Definition: RcfFwd.hpp:135
Represents a server side session, associated with a client connection.
Definition: RcfSession.hpp:65
std::shared_ptr< BandwidthQuota > BandwidthQuotaPtr
Reference counted wrapper for RCF::BandwidthQuota.
Definition: RcfFwd.hpp:128
Server-side information about a file download taking place from a RcfServer.
Definition: FileTransferService.hpp:98
Definition: ByteBuffer.hpp:189
Provides RCF server-side functionality.
Definition: RcfServer.hpp:54
std::function< void(RcfSession &, FileUploadInfo &)> UploadProgressCallback
Describes user-provided callback functions for server-side monitoring of a file upload.
Definition: RcfFwd.hpp:138
Definition: ByteBuffer.hpp:40
Definition: AmiIoHandler.hpp:24
Server-side information about a file upload taking place to a RcfServer.
Definition: FileTransferService.hpp:66