151 {
152 TLOG() <<
"debug : RClone : Downloading file " << f_meta.get_file_name();
153
154 char* input_request = new char[1000];
155
157 std::string file_relative_path =
158 std::filesystem::relative(f_meta.get_file_path(),
m_params.root_folder).generic_string();
159
160
161 if (file_relative_path.find("..") != std::string::npos) {
162 TLOG() <<
"debug : RClone : File path is not relative to root folder";
164 f_meta.set_error_code("File path is not relative to root folder !");
165 return false;
166 }
167
168 sprintf(input_request,
169 "{"
170 "\"srcFs\": "
171 "{"
172 "\"type\": \"http\","
173 "\"url\": \"http://%s:%d\""
174 "},"
175 "\"srcRemote\": \"%s\","
176
177 "\"dstFs\": "
178 "\"/\","
179 "\"dstRemote\": \"%s\","
180
181 "\"_config\": {"
182
183 "\"BindAddr\": \"\","
184
185 "\"MultiThreadSet\": true,"
186 "\"Transfers\": %d,"
187 "\"Checkers\": %d,"
188 "\"MultiThreadStreams\": %d,"
189 "\"MultiThreadCutoff\": \"%s\","
190 "\"StreamingUploadCutoff\": \"%s\","
191
192 "\"UseMmap\": %s,"
193 "\"CheckSum\": %s,"
194 "\"BufferSize\": \"%s\","
195 "\"ErrorOnNoTransfer\": true"
196 "},"
197
198 "\"_async\": true"
199 "}",
200
201
202 f_meta.get_src().get_ip().c_str(),
204 file_relative_path.c_str(),
205
206
207 dest.append(f_meta.get_file_name()).string().c_str(),
208
209
215 m_params.use_mmap ?
"true" :
"false",
216 m_params.checksum ?
"true" :
"false",
218 }
else if (
m_params.protocol ==
"sftp") {
219 sprintf(input_request,
220 "{"
221 "\"srcFs\": "
222
223
224
225
226
227
228
229
230 "{"
231 "\"type\": \"sftp\","
232 "\"host\": \"%s\","
233 "\"user\": \"%s\","
234 "\"port\": \"%d\","
235 "\"key_file\": \"/home/ljoly/.ssh/id_rsa\","
236 "\"disable_concurrent_writes\": \"false\","
237 "\"concurrency\": \"%d\""
238
239
240
241
242 "},"
243 "\"srcRemote\": \"../..%s\","
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260 "\"dstFs\": "
261 "\"/\","
262 "\"dstRemote\": \"%s\","
263
264 "\"_config\": {"
265
266 "\"BindAddr\": \"\","
267
268 "\"MultiThreadSet\": true,"
269 "\"Transfers\": %d,"
270 "\"Checkers\": %d,"
271 "\"MultiThreadStreams\": %d,"
272 "\"MultiThreadCutoff\": \"%s\","
273
274 "\"UseMmap\": %s,"
275 "\"CheckSum\": %s,"
276 "\"BufferSize\": \"%s\","
277 "\"ErrorOnNoTransfer\": true"
278 "},"
279
280 "\"_async\": true"
281 "}",
282
283
284
285 f_meta.get_src().get_ip().c_str(),
289
290
291 f_meta.get_file_path().string().c_str(),
292
293
294 dest.append(f_meta.get_file_name()).string().c_str(),
295
296
301 m_params.use_mmap ?
"true" :
"false",
302 m_params.checksum ?
"true" :
"false",
304 }
305
306 auto res =
requestRPC(
"operations/copyfile", input_request);
307 TLOG() <<
"Requested copyfile operation with parameters : " << input_request;
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344 TLOG() << input_request;
345
346 delete[] input_request;
347 if (res.has_value()) {
348 m_jobs_id[&f_meta] = res.value()[
"jobid"];
349 } else {
350 return false;
351 }
352
353
355
356 return true;
357 }