+#define PROTOCOL_VERSION 29
+
+/* 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.
+ *
+ * Interoperation with old but supported protocol versions
+ * should cause a warning to be printed. At a future date
+ * the old protocol will become the minimum and
+ * compatibility code removed.
+ *
+ * There are two possible explanations for the limit at
+ * MAX_PROTOCOL_VERSION: 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 MIN_PROTOCL_VERSION and
+ * MAX_PROTOCOL_VERSION. */
+
+#define MIN_PROTOCOL_VERSION 20
+#define OLD_PROTOCOL_VERSION 25
+#define MAX_PROTOCOL_VERSION 40
+
+#define RSYNC_PORT 873
+
+#define SPARSE_WRITE_SIZE (1024)
+#define WRITE_SIZE (32*1024)
+#define CHUNK_SIZE (32*1024)
+#define MAX_MAP_SIZE (256*1024)
+#define IO_BUFFER_SIZE (4092)
+#define MAX_BLOCK_SIZE ((int32)1 << 29)
+
+#define IOERR_GENERAL (1<<0) /* For backward compatibility, this must == 1 */
+#define IOERR_VANISHED (1<<1)
+
+#define MAX_ARGS 1000
+
+#define MAX_BASIS_DIRS 20
+
+#define MPLEX_BASE 7
+
+#define NO_FILTERS 0
+#define SERVER_FILTERS 1
+#define ALL_FILTERS 2
+
+#define XFLG_FATAL_ERRORS (1<<0)
+#define XFLG_OLD_PREFIXES (1<<1)
+#define XFLG_ANCHORED2ABS (1<<2)
+
+#define PERMS_REPORT (1<<0)
+#define PERMS_SKIP_MTIME (1<<1)
+
+#define FULL_FLUSH 1
+#define NORMAL_FLUSH 0
+
+#define PDIR_CREATE 1
+#define PDIR_DELETE 0
+
+/* Note: 0x00 - 0x7F are used for basis_dir[] indexes! */
+#define FNAMECMP_BASIS_DIR_LOW 0x00 /* Must remain 0! */
+#define FNAMECMP_BASIS_DIR_HIGH 0x7F
+#define FNAMECMP_FNAME 0x80
+#define FNAMECMP_PARTIAL_DIR 0x81
+#define FNAMECMP_BACKUP 0x82
+#define FNAMECMP_FUZZY 0x83
+
+/* For calling delete_file() */
+#define DEL_NO_RECURSE (1<<1)
+#define DEL_FORCE_RECURSE (1<<2) /* recurse even w/o --force */
+#define DEL_TERSE (1<<3)
+
+/* For use by the itemize_changes code */
+#define ITEM_UPDATING (1<<0)
+#define ITEM_REPORT_CHECKSUM (1<<1)
+#define ITEM_REPORT_SIZE (1<<2)
+#define ITEM_REPORT_TIME (1<<3)
+#define ITEM_REPORT_PERMS (1<<4)
+#define ITEM_REPORT_OWNER (1<<5)
+#define ITEM_REPORT_GROUP (1<<6)
+#define ITEM_IS_NEW (1<<7)
+#define ITEM_USING_ALT_BASIS (1<<8)
+
+#define ITEM_MISSING_DATA (1<<16) /* these are outside the transmitted flags */
+#define ITEM_DELETED (1<<17)
+
+/* Log-message categories. FLOG and FCLIENT are only used on the daemon
+ * side for custom logging -- they don't get sent over the socket. */
+enum logcode { FERROR=1, FINFO=2, FLOG=3, FCLIENT=4 };
+
+/* Messages types that are sent over the message channel. The logcode
+ * values must all be present here with identical numbers. */
+enum msgcode {
+ MSG_DATA=0, /* raw data on the multiplexed stream */
+ MSG_ERROR=FERROR, MSG_INFO=FINFO, /* remote logging */
+ MSG_LOG=FLOG, MSG_FCLIENT=FCLIENT, /* sibling logging */
+ MSG_REDO=9, /* reprocess indicated flist index */
+ MSG_SUCCESS=100,/* successfully updated indicated flist index */
+ MSG_DELETED=101,/* successfully deleted a file on receiving side */
+ MSG_DONE=86 /* current phase is done */
+};