#ifndef WS_PG_WEBDAV_H
#define WS_PG_WEBDAV_H
#include "../../public/nsapi.h"
#include "../../public/webdav.h"
#include "config.h"
#include <libpq-fe.h>
#include <cx/buffer.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PG_MAX_PATH_LEN 0x8000
typedef struct PgWebdavBackend {
ResourceData *pg_resource;
PGconn *connection;
PgRepository *repository;
char root_resource_id_str[
32];
} PgWebdavBackend;
typedef struct PgPropfindExtCol {
PgPropertyStoreExt *ext;
int field_num;
} PgPropfindExtCol;
typedef struct PgPropfind {
const char *path;
int64_t resource_id;
WebdavVFSProperties vfsproperties;
PGresult *result;
PgPropfindExtCol *ext;
size_t numext;
int nrows;
} PgPropfind;
typedef struct PgProppatchExtProp PgProppatchExtProp;
struct PgProppatchExtProp {
PgPropertyStoreExt *column;
WebdavProperty *property;
PgProppatchExtProp *next;
};
typedef struct {
PgProppatchExtProp *set_begin;
PgProppatchExtProp *set_end;
PgProppatchExtProp *remove_begin;
PgProppatchExtProp *remove_end;
WSBool isused;
} PgProppatchExt;
typedef struct {
int64_t resource_id;
PgProppatchExt *ext;
size_t numext;
WSBool extensions_used;
} PgProppatch;
void* pg_webdav_init(ServerConfiguration *cfg,
pool_handle_t *pool, WSConfigNode *config);
WebdavBackend* pg_webdav_create(Session *sn, Request *rq, pblock *pb,
void *initData);
WebdavBackend* pg_webdav_create_from_resdata(Session *sn, Request *rq, PgRepository *repo, ResourceData *resdata);
WebdavBackend* pg_webdav_prop_create(Session *sn, Request *rq, pblock *pb);
int pg_create_property_param_arrays(WebdavPList *plist, CxBuffer *xmlns, CxBuffer *pname);
int pg_dav_propfind_init(
WebdavPropfindRequest *rq,
const char *path,
const char *href,
WebdavPList **outplist);
int pg_dav_propfind_do(
WebdavPropfindRequest *rq,
WebdavResponse *response,
VFS_DIR parent,
WebdavResource *resource,
struct stat *s);
int pg_dav_propfind_finish(WebdavPropfindRequest *rq);
int pg_dav_proppatch_do(
WebdavProppatchRequest *request,
WebdavResource *response,
VFSFile *file,
WebdavPList **out_set,
WebdavPList **out_remove);
int pg_dav_proppatch_finish(
WebdavProppatchRequest *request,
WebdavResource *response,
VFSFile *file,
WSBool commit);
#ifdef __cplusplus
}
#endif
#endif