aboutsummaryrefslogtreecommitdiffstats
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
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
-rw-r--r--clientserver.c8
-rw-r--r--compat.c60
2 files changed, 35 insertions, 33 deletions
diff --git a/clientserver.c b/clientserver.c
index 18d9494e..78e2104d 100644
--- a/clientserver.c
+++ b/clientserver.c
@@ -32,7 +32,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
int sargc=0;
char line[1024];
char *p;
- int version;
+ extern int remote_version;
fd = open_socket_out(host, rsync_port);
if (fd == -1) {
@@ -52,7 +52,7 @@ int start_socket_client(char *host, char *path, int argc, char *argv[])
return -1;
}
- if (sscanf(line,"@RSYNCD: %d", &version) != 1) {
+ if (sscanf(line,"@RSYNCD: %d", &remote_version) != 1) {
return -1;
}
@@ -214,9 +214,9 @@ static int start_daemon(int fd)
{
char line[200];
char *motd;
- int version;
int i = -1;
extern char *config_file;
+ extern int remote_version;
if (!lp_load(config_file)) {
exit_cleanup(1);
@@ -230,7 +230,7 @@ static int start_daemon(int fd)
return -1;
}
- if (sscanf(line,"@RSYNCD: %d", &version) != 1) {
+ if (sscanf(line,"@RSYNCD: %d", &remote_version) != 1) {
return -1;
}
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();
}