#ifndef RESOURCE_H
#define RESOURCE_H
#include "webdav.h"
#include "crypto.h"
#include <cx/string.h>
#include <cx/hash_key.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct DavResourceData DavResourceData;
struct DavResourceData {
CxMap *properties;
CxList *set;
CxList *remove;
CxList *crypto_set;
CxList *crypto_remove;
CxMap *crypto_properties;
void *content;
dav_read_func read;
dav_seek_func seek;
size_t length;
char hash[
32];
};
typedef struct {
DAV_SHA_CTX *sha;
void *stream;
dav_read_func read;
dav_seek_func seek;
int error;
} HashStream;
struct DavInputStream {
DavResource *res;
CURLM *m;
CURL *c;
AESDecrypter *dec;
char *buffer;
size_t alloc;
size_t size;
size_t pos;
int eof;
};
struct DavOutputStream {
DavResource *res;
CURLM *m;
CURL *c;
AESEncrypter *enc;
HashStream *hstr;
const char *buffer;
size_t size;
size_t pos;
int eof;
};
DavResource* dav_resource_new_full(DavSession *sn,
const char *parent_path,
const char *name,
char *href);
void resource_free_properties(DavSession *sn, CxMap *properties);
void resource_set_href(DavResource *res, cxstring href);
void resource_set_info(DavResource *res,
const char *href_str);
DavResourceData* resource_data_new(DavSession *sn);
void resource_add_property(DavResource *res,
const char *ns,
const char *name, xmlNode *val);
void resource_set_crypto_properties(DavResource *res, CxMap *cprops);
DavXmlNode* resource_get_property(DavResource *res,
const char *ns,
const char *name);
DavXmlNode* resource_get_encrypted_property(DavResource *res,
const char *ns,
const char *name);
DavXmlNode* resource_get_property_k(DavResource *res, CxHashKey key);
DavXmlNode* resource_get_encrypted_property_k(DavResource *res, CxHashKey key);
void resource_add_child(DavResource *parent, DavResource *child);
void resource_add_ordered_child(DavResource *parent, DavResource *child, CxList *ordercr);
int resource_add_crypto_info(DavSession *sn,
const char *href,
const char *name,
const char *hash);
cxmutstr dav_property_key_a(
const CxAllocator *a,
const char *ns,
const char *name);
DavXmlNode* create_crypto_prop(DavSession *sn, CxMap *properties);
CxMap* parse_crypto_prop(DavSession *sn, DavKey *key, DavXmlNode *node);
CxMap* parse_crypto_prop_str(DavSession *sn, DavKey *key,
const char *content);
#ifdef __cplusplus
}
#endif
#endif