X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a054570942981a1bb35ea81cb25a299688c4209a..bec617b934dc2ef90b7acd1c7ef4b5db74821e91:/sender.c diff --git a/sender.c b/sender.c index 5c7b9c54..b19ecb54 100644 --- a/sender.c +++ b/sender.c @@ -27,7 +27,9 @@ extern int log_before_transfer; extern int log_format_has_i; extern int daemon_log_format_has_i; extern int csum_length; +extern int append_mode; extern int io_error; +extern int allowed_lull; extern int protocol_version; extern int remove_sent_files; extern int updating_basis_file; @@ -56,6 +58,7 @@ static struct sum_struct *receive_sums(int f) { struct sum_struct *s; int32 i; + int lull_mod = allowed_lull * 5; OFF_T offset = 0; if (!(s = new(struct sum_struct))) @@ -70,6 +73,13 @@ static struct sum_struct *receive_sums(int f) (double)s->count, (long)s->blength, (long)s->remainder); } + if (append_mode) { + s->flength = (OFF_T)s->count * s->blength; + if (s->remainder) + s->flength -= s->blength - s->remainder; + return s; + } + if (s->count == 0) return(s); @@ -89,6 +99,9 @@ static struct sum_struct *receive_sums(int f) s->sums[i].len = s->blength; offset += s->sums[i].len; + if (allowed_lull && !(i % lull_mod)) + maybe_send_keepalive(); + if (verbose > 3) { rprintf(FINFO, "chunk[%d] len=%d offset=%.0f sum1=%08x\n", @@ -175,10 +188,6 @@ int read_item_attrs(int f_in, int f_out, int ndx, uchar *type_ptr, } *len_ptr = len; - /* Temporary handling of 2.6.4pre3 */ - if (iflags & ITEM_DUMMY_BIT && iflags & (ITEM_LOCAL_CHANGE|ITEM_TRANSFER)) - iflags &= ~ITEM_DUMMY_BIT; - if (iflags & ITEM_TRANSFER) { if (!S_ISREG(the_file_list->files[ndx]->mode)) { rprintf(FERROR, @@ -230,10 +239,11 @@ void send_files(struct file_list *flist, int f_out, int f_in) /* For inplace: redo phase turns off the backup * flag so that we do a regular inplace send. */ make_backups = 0; + append_mode = 0; continue; } - iflags = read_item_attrs(f_in, f_xfer, i, &fnamecmp_type, + iflags = read_item_attrs(f_in, f_out, i, &fnamecmp_type, xname, &xlen); if (iflags == ITEM_IS_NEW) /* no-op packet */ continue; @@ -272,7 +282,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) if (!do_xfers) { /* log the transfer */ if (!am_server && log_format) log_item(file, &stats, iflags, NULL); - write_ndx_and_attrs(f_xfer, i, iflags, fnamecmp_type, + write_ndx_and_attrs(f_out, i, iflags, fnamecmp_type, xname, xlen); continue; } @@ -324,7 +334,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) safe_fname(fname), (double)st.st_size); } - write_ndx_and_attrs(f_xfer, i, iflags, fnamecmp_type, + write_ndx_and_attrs(f_out, i, iflags, fnamecmp_type, xname, xlen); write_sum_head(f_xfer, s);