mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-03-22 16:21:10 -04:00
Added a way to exchange a protocol's sub-protocol value. This will be
0 when a protocol goes final, and non-zero for an intermediary CVS version of a protocol that is in flux. If we find that we're talking to a CVS version with a different sub-protocol #, we automatically drop back to the prior protocol that the sides have in common.
This commit is contained in:
13
compat.c
13
compat.c
@@ -75,6 +75,19 @@ void setup_protocol(int f_out,int f_in)
|
||||
remote_protocol = read_int(f_in);
|
||||
if (protocol_version > remote_protocol)
|
||||
protocol_version = remote_protocol;
|
||||
/* CVS support: fallback to finalized protocol if incompatible */
|
||||
if (protocol_version >= 30) {
|
||||
int theirsub, oursub = PROTOCOL_SUBVERSION;
|
||||
if (!read_batch)
|
||||
write_varint(f_out, oursub);
|
||||
theirsub = read_varint(f_in);
|
||||
if (remote_protocol > PROTOCOL_VERSION)
|
||||
theirsub = 0; /* 0 == final version */
|
||||
if (protocol_version < PROTOCOL_VERSION)
|
||||
oursub = 0;
|
||||
if (theirsub != oursub)
|
||||
protocol_version--;
|
||||
}
|
||||
}
|
||||
if (read_batch && remote_protocol > protocol_version) {
|
||||
rprintf(FERROR, "The protocol version in the batch file is too new (%d > %d).\n",
|
||||
|
||||
5
rsync.h
5
rsync.h
@@ -83,6 +83,11 @@
|
||||
/* update this if you make incompatible changes */
|
||||
#define PROTOCOL_VERSION 30
|
||||
|
||||
/* This is used when working on a new protocol version in CVS, and should
|
||||
* be a new non-zero value for each CVS change that affects the protocol.
|
||||
* It must ALWAYS be 0 when the protocol goes final! */
|
||||
#define PROTOCOL_SUBVERSION 1
|
||||
|
||||
/* We refuse to interoperate with versions that are not in this range.
|
||||
* Note that we assume we'll work with later versions: the onus is on
|
||||
* people writing them to make sure that they don't send us anything
|
||||
|
||||
Reference in New Issue
Block a user