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",
/* 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