X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3ec4dd9781ed23be4a2b939fa5bfded619a1a8fb..1c8162a921cbae803b3bf375fda4aa7916bcfc68:/compat.c diff --git a/compat.c b/compat.c index 237e40c0..f89fb513 100644 --- a/compat.c +++ b/compat.c @@ -17,14 +17,16 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* compatability routines for older rsync protocol versions */ +/** + * @file compat.c + * + * Compatibility routines for older rsync protocol versions. + **/ #include "rsync.h" extern int am_server; -extern int csum_length; - extern int preserve_links; extern int preserve_perms; extern int preserve_devices; @@ -36,34 +38,41 @@ extern int checksum_seed; extern int remote_version; +extern int verbose; + +extern int read_batch; /* dw */ +extern int write_batch; /* dw */ void setup_protocol(int f_out,int f_in) { - if (am_server) { - remote_version = read_int(f_in); - write_int(f_out,PROTOCOL_VERSION); - write_flush(f_out); - } else { - write_int(f_out,PROTOCOL_VERSION); - write_flush(f_out); - remote_version = read_int(f_in); - } - - if (remote_version < MIN_PROTOCOL_VERSION || - remote_version > MAX_PROTOCOL_VERSION) { - fprintf(FERROR,"protocol version mismatch - is your shell clean?\n"); - exit_cleanup(1); - } + if (remote_version == 0) { + if (am_server) { + remote_version = read_int(f_in); + write_int(f_out,PROTOCOL_VERSION); + } else { + write_int(f_out,PROTOCOL_VERSION); + remote_version = read_int(f_in); + } + } - if (remote_version >= 12) { - if (am_server) { - checksum_seed = time(NULL); - write_int(f_out,checksum_seed); - } else { - checksum_seed = read_int(f_in); - } - } + if (remote_version < MIN_PROTOCOL_VERSION || + remote_version > MAX_PROTOCOL_VERSION) { + rprintf(FERROR,"protocol version mismatch - is your shell clean?\n"); + rprintf(FERROR,"(see the rsync man page for an explanation)\n"); + exit_cleanup(RERR_PROTOCOL); + } + if (remote_version < OLD_PROTOCOL_VERSION) + rprintf(FINFO,"%s is very old version of rsync, upgrade recommended.\n", + am_server ? "Server" : "Client"); - checksum_init(); + if (am_server) { + if (read_batch || write_batch) /* dw */ + checksum_seed = 32761; + else + checksum_seed = time(NULL); + write_int(f_out,checksum_seed); + } else { + checksum_seed = read_int(f_in); + } }