aboutsummaryrefslogtreecommitdiffstats
path: root/compat.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-05-13 08:58:07 +0000
committerAndrew Tridgell <tridge@samba.org>1998-05-13 08:58:07 +0000
commit13c5fc0e1462307270145b8528e96a8cebfdcdc0 (patch)
tree70bf4c2126479baa801f81606f1dd5fced814f58 /compat.c
parent0c515f17c44344813e8949fbb684b357ad70cfdf (diff)
downloadandroid_external_rsync-13c5fc0e1462307270145b8528e96a8cebfdcdc0.tar.gz
android_external_rsync-13c5fc0e1462307270145b8528e96a8cebfdcdc0.tar.bz2
android_external_rsync-13c5fc0e1462307270145b8528e96a8cebfdcdc0.zip
save one round trip (version swapping) for daemon.
This is an imcompatible change in the socket protocol. You get "is your shell clean" if using an older rsync client
Diffstat (limited to 'compat.c')
-rw-r--r--compat.c60
1 files changed, 31 insertions, 29 deletions
diff --git a/compat.c b/compat.c
index 84010215..f53c433f 100644
--- a/compat.c
+++ b/compat.c
@@ -40,35 +40,37 @@ extern int verbose;
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 == 0) {
+ 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) {
- rprintf(FERROR,"protocol version mismatch - is your shell clean?\n");
- exit_cleanup(1);
- }
-
- if (verbose > 2)
- rprintf(FINFO, "local_version=%d remote_version=%d\n",
- PROTOCOL_VERSION, remote_version);
-
- if (remote_version >= 12) {
- if (am_server) {
- checksum_seed = time(NULL);
- write_int(f_out,checksum_seed);
- } else {
- checksum_seed = read_int(f_in);
- }
- }
-
- checksum_init();
+ if (remote_version < MIN_PROTOCOL_VERSION ||
+ remote_version > MAX_PROTOCOL_VERSION) {
+ rprintf(FERROR,"protocol version mismatch - is your shell clean?\n");
+ exit_cleanup(1);
+ }
+
+ if (verbose > 2)
+ rprintf(FINFO, "local_version=%d remote_version=%d\n",
+ PROTOCOL_VERSION, remote_version);
+
+ if (remote_version >= 12) {
+ if (am_server) {
+ checksum_seed = time(NULL);
+ write_int(f_out,checksum_seed);
+ } else {
+ checksum_seed = read_int(f_in);
+ }
+ }
+
+ checksum_init();
}