version 1.3, 2019/02/10 23:43:31 |
version 1.4, 2019/02/11 19:18:36 |
|
|
* This will also remove all invalid files. |
* This will also remove all invalid files. |
*/ |
*/ |
|
|
if ( ! flist_gen(sess, argc, argv, &fl, &flsz)) { |
if (!flist_gen(sess, argc, argv, &fl, &flsz)) { |
ERRX1(sess, "flist_gen"); |
ERRX1(sess, "flist_gen"); |
goto out; |
goto out; |
} |
} |
|
|
/* Client sends zero-length exclusions if deleting. */ |
/* Client sends zero-length exclusions if deleting. */ |
|
|
if ( ! sess->opts->server && sess->opts->del && |
if (!sess->opts->server && sess->opts->del && |
! io_write_int(sess, fdout, 0)) { |
!io_write_int(sess, fdout, 0)) { |
ERRX1(sess, "io_write_int"); |
ERRX1(sess, "io_write_int"); |
goto out; |
goto out; |
} |
} |
|
|
* Finally, the IO error (always zero for us). |
* Finally, the IO error (always zero for us). |
*/ |
*/ |
|
|
if ( ! flist_send(sess, fdin, fdout, fl, flsz)) { |
if (!flist_send(sess, fdin, fdout, fl, flsz)) { |
ERRX1(sess, "flist_send"); |
ERRX1(sess, "flist_send"); |
goto out; |
goto out; |
} else if ( ! io_write_int(sess, fdout, 0)) { |
} else if (!io_write_int(sess, fdout, 0)) { |
ERRX1(sess, "io_write_int"); |
ERRX1(sess, "io_write_int"); |
goto out; |
goto out; |
} |
} |
|
|
WARNX(sess, "sender has empty file list: exiting"); |
WARNX(sess, "sender has empty file list: exiting"); |
rc = 1; |
rc = 1; |
goto out; |
goto out; |
} else if ( ! sess->opts->server) |
} else if (!sess->opts->server) |
LOG1(sess, "Transfer starting: %zu files", flsz); |
LOG1(sess, "Transfer starting: %zu files", flsz); |
|
|
/* |
/* |
|
|
*/ |
*/ |
|
|
if (sess->opts->server) { |
if (sess->opts->server) { |
if ( ! io_read_size(sess, fdin, &excl)) { |
if (!io_read_size(sess, fdin, &excl)) { |
ERRX1(sess, "io_read_size"); |
ERRX1(sess, "io_read_size"); |
goto out; |
goto out; |
} else if (0 != excl) { |
} else if (0 != excl) { |
|
|
LOG2(sess, "sender transmitting phase 1 data"); |
LOG2(sess, "sender transmitting phase 1 data"); |
|
|
for (;;) { |
for (;;) { |
if ( ! io_read_int(sess, fdin, &idx)) { |
if (!io_read_int(sess, fdin, &idx)) { |
ERRX1(sess, "io_read_int"); |
ERRX1(sess, "io_read_int"); |
goto out; |
goto out; |
} |
} |
|
|
*/ |
*/ |
|
|
if (-1 == idx) { |
if (-1 == idx) { |
if ( ! io_write_int(sess, fdout, idx)) { |
if (!io_write_int(sess, fdout, idx)) { |
ERRX1(sess, "io_write_int"); |
ERRX1(sess, "io_write_int"); |
goto out; |
goto out; |
} |
} |
|
|
/* FIXME: I don't understand this ack. */ |
/* FIXME: I don't understand this ack. */ |
|
|
if (sess->opts->server && sess->rver > 27) |
if (sess->opts->server && sess->rver > 27) |
if ( ! io_write_int(sess, fdout, idx)) { |
if (!io_write_int(sess, fdout, idx)) { |
ERRX1(sess, "io_write_int"); |
ERRX1(sess, "io_write_int"); |
goto out; |
goto out; |
} |
} |
|
|
ERRX(sess, "blocks requested for " |
ERRX(sess, "blocks requested for " |
"symlink: %s", fl[idx].path); |
"symlink: %s", fl[idx].path); |
goto out; |
goto out; |
} else if ( ! S_ISREG(fl[idx].st.mode)) { |
} else if (!S_ISREG(fl[idx].st.mode)) { |
ERRX(sess, "blocks requested for " |
ERRX(sess, "blocks requested for " |
"special: %s", fl[idx].path); |
"special: %s", fl[idx].path); |
goto out; |
goto out; |
} |
} |
|
|
if ( ! sess->opts->server) |
if (!sess->opts->server) |
LOG1(sess, "%s", fl[idx].wpath); |
LOG1(sess, "%s", fl[idx].wpath); |
|
|
/* Dry-run doesn't do anything. */ |
/* Dry-run doesn't do anything. */ |
|
|
if (sess->opts->dry_run) { |
if (sess->opts->dry_run) { |
if ( ! io_write_int(sess, fdout, idx)) { |
if (!io_write_int(sess, fdout, idx)) { |
ERRX1(sess, "io_write_int"); |
ERRX1(sess, "io_write_int"); |
goto out; |
goto out; |
} |
} |
|
|
if (NULL == blks) { |
if (NULL == blks) { |
ERRX1(sess, "blk_recv"); |
ERRX1(sess, "blk_recv"); |
goto out; |
goto out; |
} else if ( ! blk_recv_ack(sess, fdout, blks, idx)) { |
} else if (!blk_recv_ack(sess, fdout, blks, idx)) { |
ERRX1(sess, "blk_recv_ack"); |
ERRX1(sess, "blk_recv_ack"); |
goto out; |
goto out; |
} |
} |
|
|
c = blk_match(sess, fdout, blks, fl[idx].path); |
c = blk_match(sess, fdout, blks, fl[idx].path); |
blkset_free(blks); |
blkset_free(blks); |
|
|
if ( ! c) { |
if (!c) { |
ERRX1(sess, "blk_match"); |
ERRX1(sess, "blk_match"); |
goto out; |
goto out; |
} |
} |
} |
} |
|
|
if ( ! sess_stats_send(sess, fdout)) { |
if (!sess_stats_send(sess, fdout)) { |
ERRX1(sess, "sess_stats_end"); |
ERRX1(sess, "sess_stats_end"); |
goto out; |
goto out; |
} |
} |
|
|
/* Final "goodbye" message. */ |
/* Final "goodbye" message. */ |
|
|
if ( ! io_read_int(sess, fdin, &idx)) { |
if (!io_read_int(sess, fdin, &idx)) { |
ERRX1(sess, "io_read_int"); |
ERRX1(sess, "io_read_int"); |
goto out; |
goto out; |
} else if (-1 != idx) { |
} else if (-1 != idx) { |