#ifndef OPERATION_H
#define OPERATION_H
#include "../public/webdav.h"
#include <cx/list.h>
#include <cx/map.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef int(*response_close_func)(WebdavOperation *, WebdavResource *);
typedef struct WebdavVFSOperation WebdavVFSOperation;
typedef struct WebdavCopy WebdavCopy;
typedef struct CopyResource CopyResource;
struct WebdavOperation {
WebdavBackend *dav;
Request *rq;
Session *sn;
WebdavProppatchRequest *proppatch;
WebdavPList *reqprops;
WebdavPropfindRequestList *requests;
WebdavResponse *response;
response_close_func response_close;
VFS_DIR parent;
struct stat *stat;
};
struct WebdavVFSOperation {
WebdavBackend *dav;
Request *rq;
Session *sn;
VFSContext *vfs;
char *path;
struct stat *stat;
int stat_errno;
};
struct WebdavCopy {
WebdavResponse response;
Session *sn;
Request *rq;
CopyResource *current;
char *src_href;
char *src_path;
char *dst_href;
char *dst_path;
};
struct CopyResource {
WebdavResource resource;
CxMap *properties;
};
enum WebdavVFSOpType {
WEBDAV_VFS_MKDIR =
0,
WEBDAV_VFS_DELETE
};
typedef enum WebdavVFSOpType WebdavVFSOpType;
typedef int(*vfs_op_func)(WebdavVFSRequest *, WSBool *);
typedef int(*vfs_op_finish_func)(WebdavVFSRequest *, WSBool);
typedef int(*vfs_op_child_func)(
VFSContext *,
const char *,
const char *,
VFSDir *,
struct stat *,
void *);
size_t webdav_num_backends(WebdavBackend *dav);
WebdavOperation* webdav_create_propfind_operation(
Session *sn,
Request *rq,
WebdavBackend *dav,
WebdavPList *reqprops,
WebdavPropfindRequestList *requests,
WebdavResponse *response);
int webdav_op_propfind_begin(
WebdavOperation *op,
const char *href,
VFS_DIR parent,
struct stat *s);
int webdav_op_propfind_children(
WebdavOperation *op,
VFSContext *vfs,
const char *href,
const char *path);
int webdav_op_propfiond_close_resource(
WebdavOperation *op,
WebdavResource *resource);
int webdav_op_propfind_finish(WebdavOperation *op);
WebdavOperation* webdav_create_proppatch_operation(
Session *sn,
Request *rq,
WebdavBackend *dav,
WebdavProppatchRequest *proppatch,
WebdavResponse *response);
int webdav_op_proppatch(
WebdavOperation *op,
const char *href,
const char *path);
int webdav_op_proppatch_close_resource(
WebdavOperation *op,
WebdavResource *resource);
WebdavVFSOperation* webdav_vfs_op(
Session *sn,
Request *rq,
WebdavBackend *dav,
WSBool precondition);
WebdavVFSOperation webdav_vfs_sub_op(
WebdavVFSOperation *op,
char *path,
struct stat *s);
int webdav_op_iterate_children(
VFSContext *vfs,
int depth,
const char *href,
const char *path,
vfs_op_child_func func,
void *userdata);
int webdav_vfs_stat(WebdavVFSOperation *op);
int webdav_vfs_op_do(WebdavVFSOperation *op, WebdavVFSOpType type);
int webdav_vfs_unlink(WebdavVFSOperation *op);
WebdavCopy* webdav_copy_create(
Session *sn,
Request *rq,
VFSContext *vfs,
char *from_href,
char *from_path,
char *to_href,
char *to_path);
#ifdef __cplusplus
}
#endif
#endif