io_printf(fd,"%s\n",path);
if (p) *p = '/';
- while (1) {
- /* Old servers may just drop the connection here,
- rather than sending a proper EXIT command. Yuck. */
- kludge_around_eof= True;
+ /* Old servers may just drop the connection here,
+ rather than sending a proper EXIT command. Yuck. */
+ kludge_around_eof = remote_version < 25;
+ while (1) {
if (!read_line(fd, line, sizeof(line)-1)) {
return -1;
}
{
int n = lp_numservices();
int i;
-
+ extern int remote_version;
+
for (i=0;i<n;i++)
if (lp_list(i))
io_printf(fd, "%-15s\t%s\n", lp_name(i), lp_comment(i));
- io_printf(fd, "@RSYNCD: EXIT\n");
+ if (remote_version >= 25)
+ io_printf(fd,"@RSYNCD: EXIT\n");
}
/* this is called when a socket connection is established to a client
+------------
+Protocol version changes
+
+25 (2001-08-20, 2.4.7pre2)
+
+ Send an explicit "@RSYNC EXIT" command at the end of the
+ module listing. We never intentionally end the transmission
+ by just closing the socket anymore.
#define SAME_TIME (1<<7)
/* update this if you make incompatible changes */
-#define PROTOCOL_VERSION 24
+#define PROTOCOL_VERSION 25
+
+/* 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
+ * we won't understand.
+ *
+ * There are two possible explanations for the limit at thirty: either
+ * to allow new major-rev versions that do not interoperate with us,
+ * and (more likely) so that we can detect an attempt to connect rsync
+ * to a non-rsync server, which is unlikely to begin by sending a byte
+ * between 15 and 30. */
#define MIN_PROTOCOL_VERSION 15
#define MAX_PROTOCOL_VERSION 30