- Define FULL_FLUSH and NORMAL_FLUSH.
[rsync/rsync.git] / rsync.h
diff --git a/rsync.h b/rsync.h
index e0fb182..d62767a 100644 (file)
--- a/rsync.h
+++ b/rsync.h
@@ -55,7 +55,7 @@
 #define SAME_DEV (1<<10)
 
 /* What flags are relevant after the transfer of the flist is complete? */
-#define LIVE_FLAGS (FLAG_DELETE|HAS_INODE_DATA)
+#define LIVE_FLAGS FLAG_DELETE
 
 /* update this if you make incompatible changes */
 #define PROTOCOL_VERSION 28
 #define ADD_INCLUDE 1
 #define ADD_EXCLUDE 0
 
-/* Log values.  I *think* what these mean is: FLOG goes to the server
- * logfile; FERROR and FINFO try to end up on the client, with
- * different levels of filtering. */
-enum logcode {FNONE=0, FERROR=1, FINFO=2, FLOG=3 };
+#define FULL_FLUSH     1
+#define NORMAL_FLUSH   0
+
+/* Log-message categories.  FLOG is only used on the daemon side to
+ * output messages to the log file. */
+enum logcode { FERROR=1, FINFO=2, FLOG=3 };
+
+/* 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, MSG_LOG=FLOG, /* remote logging */
+       MSG_REDO=4,     /* reprocess indicated flist index */
+       MSG_DONE=5,     /* current phase is done */
+};
 
 #include "errcode.h"
 
@@ -371,26 +382,43 @@ enum logcode {FNONE=0, FERROR=1, FINFO=2, FLOG=3 };
 
 #define GID_NONE (gid_t) -1
 
+struct hlink {
+       struct file_struct *head;
+       struct file_struct *next;
+};
+
+struct idev {
+       INO64_T inode;
+       DEV64_T dev;
+};
+
+#define F_DEV  link_u.idev->dev
+#define F_INODE        link_u.idev->inode
+
+#define F_HEAD link_u.links->head
+#define F_NEXT link_u.links->next
+
 struct file_struct {
        time_t modtime;
        OFF_T length;
        mode_t mode;
-       INO64_T inode;
-       DEV64_T dev;
        union {
                DEV64_T rdev;   /* The device number, if this is a device */
                char *sum;      /* Only a normal file can have a checksum */
                char *link;     /* Holds symlink string, if a symlink */
        } u;
-       uid_t uid;
-       gid_t gid;
+       union {
+               struct idev *idev;
+               struct hlink *links;
+       } link_u;
        char *basename;
        char *dirname;
        char *basedir;
+       uid_t uid;
+       gid_t gid;
        unsigned short flags;
 };
 
-
 #define ARENA_SIZE     (32 * 1024)
 
 struct string_area {
@@ -460,6 +488,7 @@ struct stats {
        int flist_size;
        int num_files;
        int num_transferred_files;
+       int current_file_index;
 };