nextcloud-desktop/src/csync_private.h

210 lines
4.4 KiB
C
Raw Normal View History

2008-02-27 20:56:47 +03:00
/*
* libcsync -- a library to sync a directory with another
*
2012-10-27 17:15:59 +04:00
* Copyright (c) 2006-2012 by Andreas Schneider <asn@cryptomilk.org>
2008-02-27 20:56:47 +03:00
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/**
* @file csync_private.h
*
* @brief Private interface of csync
*
* @defgroup csyncInternalAPI csync internal API
*
* @{
*/
#ifndef _CSYNC_PRIVATE_H
#define _CSYNC_PRIVATE_H
#include <stdint.h>
#include <stdbool.h>
2008-02-27 20:56:47 +03:00
#include <sqlite3.h>
#include "config.h"
2008-02-27 20:56:47 +03:00
#include "c_lib.h"
#include "c_private.h"
2008-02-27 20:56:47 +03:00
#include "csync.h"
#ifdef WITH_ICONV
#include <iconv.h>
#endif
#include "vio/csync_vio_method.h"
2008-02-27 20:56:47 +03:00
#include "csync_macros.h"
/**
* How deep to scan directories.
*/
#define MAX_DEPTH 50
/**
* Maximum time difference between two replicas in seconds
*/
#define MAX_TIME_DIFFERENCE 10
2008-02-27 20:56:47 +03:00
/**
* Maximum size of a buffer for transfer
*/
#ifndef MAX_XFER_BUF_SIZE
#define MAX_XFER_BUF_SIZE (16 * 1024)
#endif
2008-02-27 20:56:47 +03:00
#define CSYNC_STATUS_INIT 1 << 0
#define CSYNC_STATUS_UPDATE 1 << 1
#define CSYNC_STATUS_RECONCILE 1 << 2
#define CSYNC_STATUS_PROPAGATE 1 << 3
2009-03-26 12:27:04 +03:00
#define CSYNC_STATUS_DONE (CSYNC_STATUS_INIT | \
CSYNC_STATUS_UPDATE | \
CSYNC_STATUS_RECONCILE | \
CSYNC_STATUS_PROPAGATE)
2008-02-27 20:56:47 +03:00
enum csync_replica_e {
LOCAL_REPLICA,
REMOTE_REPLICA
2008-02-27 20:56:47 +03:00
};
/**
* @brief csync public structure
*/
struct csync_s {
struct {
csync_auth_callback auth_function;
csync_overall_progress_callback overall_progress_cb;
csync_file_progress_callback file_progress_cb;
void *userdata;
} callbacks;
2008-03-20 12:34:58 +03:00
c_strlist_t *excludes;
2008-04-29 11:23:51 +04:00
struct {
char *file;
2008-04-29 11:23:51 +04:00
sqlite3 *db;
int exists;
int disabled;
2008-07-09 12:10:00 +04:00
} statedb;
struct {
char *uri;
c_rbtree_t *tree;
c_list_t *list;
enum csync_replica_e type;
} local;
struct {
char *uri;
c_rbtree_t *tree;
c_list_t *list;
enum csync_replica_e type;
} remote;
struct {
void *handle;
csync_vio_method_t *method;
csync_vio_method_finish_fn finish_fn;
csync_vio_capabilities_t capabilities;
} module;
struct {
int max_depth;
int max_time_difference;
int sync_symbolic_links;
2009-01-19 13:32:58 +03:00
int unix_extensions;
char *config_dir;
bool with_conflict_copys;
bool local_only_mode;
#ifdef WITH_ICONV
iconv_t iconv_cd;
#endif
} options;
struct {
uid_t uid;
uid_t euid;
} pwd;
struct {
int file_count;
int current_file_no;
long long byte_sum;
long long byte_current;
} progress;
2009-01-23 16:10:08 +03:00
/* replica we are currently walking */
enum csync_replica_e current;
2009-01-23 16:10:08 +03:00
/* replica we want to work on */
enum csync_replica_e replica;
/* csync error code */
enum csync_status_codes_e status_code;
char *error_string;
2008-04-29 11:23:51 +04:00
int status;
2008-02-27 20:56:47 +03:00
};
enum csync_ftw_type_e {
CSYNC_FTW_TYPE_FILE,
CSYNC_FTW_TYPE_SLINK,
CSYNC_FTW_TYPE_DIR
};
#ifdef _MSC_VER
#pragma pack(1)
#endif
struct csync_file_stat_s {
2011-09-08 01:04:21 +04:00
uint64_t phash; /* u64 */
time_t modtime; /* u64 */
off_t size; /* u64 */
size_t pathlen; /* u64 */
ino_t inode; /* u64 */
uid_t uid; /* u32 */
gid_t gid; /* u32 */
mode_t mode; /* u32 */
int nlink; /* u32 */
int type; /* u32 */
enum csync_instructions_e instruction; /* u32 */
char path[1]; /* u8 */
}
#if !defined(__SUNPRO_C) && !defined(_MSC_VER)
__attribute__ ((packed))
#endif
#ifdef _MSC_VER
#pragma pack()
#endif
;
typedef struct csync_file_stat_s csync_file_stat_t;
/*
* context for the treewalk function
*/
struct _csync_treewalk_context_s
{
csync_treewalk_visit_func *user_visitor;
int instruction_filter;
void *userdata;
};
typedef struct _csync_treewalk_context_s _csync_treewalk_context;
2008-02-27 20:56:47 +03:00
/**
* }@
*/
#endif /* _CSYNC_PRIVATE_H */
2009-05-13 12:12:07 +04:00
/* vim: set ft=c.doxygen ts=8 sw=2 et cindent: */