doc
|
00001 /* 00002 * libcsync -- a library to sync a directory with another 00003 * 00004 * Copyright (c) 2008 by Andreas Schneider <mail@cynapses.org> 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * as published by the Free Software Foundation; either version 2 00009 * of the License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software Foundation, 00018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 * 00020 * vim: ft=c.doxygen ts=2 sw=2 et cindent 00021 */ 00022 00023 #ifndef _CSYNC_VIO_METHOD_H 00024 #define _CSYNC_VIO_METHOD_H 00025 00026 #include <sys/time.h> 00027 00028 #include "csync.h" 00029 #include "vio/csync_vio_file_stat.h" 00030 #include "vio/csync_vio_handle.h" 00031 00032 #define VIO_METHOD_HAS_FUNC(method,func) \ 00033 ((((char *)&((method)->func)) - ((char *)(method)) < (method)->method_table_size) \ 00034 && method->func != NULL) 00035 00036 typedef struct csync_vio_method_s csync_vio_method_t; 00037 00038 /* module capabilities definition. 00039 * remember to set useful defaults in csync_vio.c if you add something here. */ 00040 struct csync_vio_capabilities_s { 00041 bool atomar_copy_support; /* set to true if the backend provides atomar copy */ 00042 bool do_post_copy_stat; /* true if csync should check the copy afterwards */ 00043 bool time_sync_required; /* true if local and remote need to be time synced */ 00044 int unix_extensions; /* -1: do csync detection, 0: no unix extensions, 00045 1: extensions available */ 00046 }; 00047 00048 typedef struct csync_vio_capabilities_s csync_vio_capabilities_t; 00049 00050 typedef csync_vio_method_t *(*csync_vio_method_init_fn)(const char *method_name, 00051 const char *config_args, csync_auth_callback cb, void *userdata); 00052 typedef void (*csync_vio_method_finish_fn)(csync_vio_method_t *method); 00053 00054 typedef csync_vio_capabilities_t *(*csync_method_get_capabilities_fn)(void); 00055 00056 typedef csync_vio_method_handle_t *(*csync_method_open_fn)(const char *durl, int flags, mode_t mode); 00057 typedef csync_vio_method_handle_t *(*csync_method_creat_fn)(const char *durl, mode_t mode); 00058 typedef int (*csync_method_close_fn)(csync_vio_method_handle_t *fhandle); 00059 typedef ssize_t (*csync_method_read_fn)(csync_vio_method_handle_t *fhandle, void *buf, size_t count); 00060 typedef ssize_t (*csync_method_write_fn)(csync_vio_method_handle_t *fhandle, const void *buf, size_t count); 00061 typedef off_t (*csync_method_lseek_fn)(csync_vio_method_handle_t *fhandle, off_t offset, int whence); 00062 00063 typedef csync_vio_method_handle_t *(*csync_method_opendir_fn)(const char *name); 00064 typedef int (*csync_method_closedir_fn)(csync_vio_method_handle_t *dhandle); 00065 typedef csync_vio_file_stat_t *(*csync_method_readdir_fn)(csync_vio_method_handle_t *dhandle); 00066 00067 typedef int (*csync_method_mkdir_fn)(const char *uri, mode_t mode); 00068 typedef int (*csync_method_rmdir_fn)(const char *uri); 00069 00070 typedef int (*csync_method_stat_fn)(const char *uri, csync_vio_file_stat_t *buf); 00071 typedef int (*csync_method_rename_fn)(const char *olduri, const char *newuri); 00072 typedef int (*csync_method_unlink_fn)(const char *uri); 00073 00074 typedef int (*csync_method_chmod_fn)(const char *uri, mode_t mode); 00075 typedef int (*csync_method_chown_fn)(const char *uri, uid_t owner, gid_t group); 00076 00077 typedef int (*csync_method_utimes_fn)(const char *uri, const struct timeval times[2]); 00078 00079 struct csync_vio_method_s { 00080 size_t method_table_size; /* Used for versioning */ 00081 csync_method_get_capabilities_fn get_capabilities; 00082 csync_method_open_fn open; 00083 csync_method_creat_fn creat; 00084 csync_method_close_fn close; 00085 csync_method_read_fn read; 00086 csync_method_write_fn write; 00087 csync_method_lseek_fn lseek; 00088 csync_method_opendir_fn opendir; 00089 csync_method_closedir_fn closedir; 00090 csync_method_readdir_fn readdir; 00091 csync_method_mkdir_fn mkdir; 00092 csync_method_rmdir_fn rmdir; 00093 csync_method_stat_fn stat; 00094 csync_method_rename_fn rename; 00095 csync_method_unlink_fn unlink; 00096 csync_method_chmod_fn chmod; 00097 csync_method_chown_fn chown; 00098 csync_method_utimes_fn utimes; 00099 }; 00100 00101 #endif /* _CSYNC_VIO_H */