synk

synchronize files between hosts
Log | Files | Refs | README | LICENSE

commit 7e527e7825ec47e18fbba3ebb88ef9910bfa5ec4
parent c20b5a3174a84d877f65d2885ec681943e67751f
Author: Willy <willyatmailoodotorg>
Date:   Tue Aug 30 22:33:09 +0200

Check sync status amongst a peer list

Diffstat:
synk.c | 23+++++++++++++++++++++++
1 file changed, 23 insertions(+), 0 deletions(-)
diff --git a/synk.c b/synk.c @@ -56,6 +56,7 @@ long gettimestamp(const char *path); int getpeermeta(struct peer_t *, struct metadata_t); struct peer_t *freshestpeer(struct peers_t *); int syncfile(struct peers_t *, const char *); +int syncstatus(struct peers_t *); int flushpeers(struct peers_t *); const char *rsync_cmd[] = { "rsync", "-azEq", "--delete", NULL }; @@ -222,6 +223,28 @@ flushpeers(struct peers_t *plist) } /* + * Check the synchronisation status between all peers. If at least 2 hashes + * differ, it returns with a non-zero status. + */ +int +syncstatus(struct peers_t *plist) +{ + struct peer_t *tmp = NULL; + unsigned char *hash = NULL; + + SLIST_FOREACH(tmp, plist, entries) { + if (hash == NULL) { + hash = tmp->meta.hash; + } else { + if (!sha512_compare(hash, tmp->meta.hash)) + return 1; + } + } + + return 1; +} + +/* * Client part: connect to the given address/port and send the given path to * the server. The server should return the timestamp for this file on the * socket. Connection is terminated after receiving the timestamp