static int send_file(const char *fname, int patches, const char *best, const char *datapth, unsigned long long *bytes, char cmd, int64_t winattr, int compression, struct cntr *cntr, struct config *cconf) { int ret=0; size_t datalen=0; FILE *fp=NULL; if(open_file_for_send(NULL, &fp, best, winattr, &datalen, cntr)) return -1; //logp("sending: %s\n", best); if(async_write(cmd, fname, strlen(fname))) ret=-1; else if(patches) { // If we did some patches, the resulting file // is not gzipped. Gzip it during the send. ret=send_whole_file_gz(best, datapth, 1, bytes, NULL, cntr, 9, NULL, fp, NULL, 0, -1); } else { // If it was encrypted, it may or may not have been compressed // before encryption. Send it as it as, and let the client // sort it out. if(cmd==CMD_ENC_FILE || cmd==CMD_ENC_METADATA || cmd==CMD_ENC_VSS || cmd==CMD_ENC_VSS_T || cmd==CMD_EFS_FILE) { ret=send_whole_file(cmd, best, datapth, 1, bytes, cntr, NULL, fp, NULL, 0, -1); } // It might have been stored uncompressed. Gzip it during // the send. If the client knew what kind of file it would be // receiving, this step could disappear. else if(!dpth_is_compressed(compression, datapth)) { ret=send_whole_file_gz(best, datapth, 1, bytes, NULL, cntr, 9, NULL, fp, NULL, 0, -1); } else { // If we did not do some patches, the resulting // file might already be gzipped. Send it as it is. ret=send_whole_file(cmd, best, datapth, 1, bytes, cntr, NULL, fp, NULL, 0, -1); } } close_file_for_send(NULL, &fp); return ret; }
static int send_whole_file_w(char cmd, const char *fname, const char *datapth, int quick_read, unsigned long long *bytes, const char *encpassword, struct cntr *cntr, int compression, BFILE *bfd, FILE *fp, const char *extrameta, size_t elen) { if((compression || encpassword) && cmd!=CMD_EFS_FILE) return send_whole_file_gz(fname, datapth, quick_read, bytes, encpassword, cntr, compression, bfd, fp, extrameta, elen); else return send_whole_file(cmd, fname, datapth, quick_read, bytes, cntr, bfd, fp, extrameta, elen); }