add existing code (build system, libs, initial mizucp code)
[mizunara.git] / libidav / resource.h
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2018 Olaf Wintermann. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  *   1. Redistributions of source code must retain the above copyright
10  *      notice, this list of conditions and the following disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above copyright
13  *      notice, this list of conditions and the following disclaimer in the
14  *      documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef RESOURCE_H
30 #define RESOURCE_H
31
32 #include "webdav.h"
33 #include <ucx/string.h>
34
35 #ifdef  __cplusplus
36 extern "C" {
37 #endif
38
39 typedef struct DavResourceData   DavResourceData;
40
41 struct DavResourceData {
42     UcxMap  *properties;
43     UcxList *set;
44     UcxList *remove;
45     UcxList *crypto_set;
46     UcxList *crypto_remove;
47     
48     /*
49      * properties encapsulated in a crypto-prop property or NULL
50      */
51     UcxMap *crypto_properties;
52     
53     /*
54      * char* or stream
55      */
56     void      *content;
57     /*
58      * if NULL, content is a char*
59      */
60     read_func read;
61     /*
62      * curl seek func
63      */
64     dav_seek_func seek;
65     /*
66      * content length
67      */
68     size_t    length;
69     
70     /*
71      * sha256 content hash
72      */
73     char hash[32];
74 };
75
76 DavResource* dav_resource_new_full(DavSession *sn, char *parent_path, char *name, char *href);
77
78 void resource_free_properties(DavSession *sn, UcxMap *properties);
79
80 void resource_set_href(DavResource *res, sstr_t href);
81
82 void resource_set_info(DavResource *res, char *href_str);
83 DavResourceData* resource_data_new(DavSession *sn);
84 void resource_add_property(DavResource *res, const char *ns, const char *name, xmlNode *val);
85 void resource_set_crypto_properties(DavResource *res, UcxMap *cprops);
86 DavXmlNode* resource_get_property(DavResource *res, const char *ns, const char *name);
87 DavXmlNode* resource_get_encrypted_property(DavResource *res, const char *ns, const char *name);
88 DavXmlNode* resource_get_property_k(DavResource *res, UcxKey key);
89 DavXmlNode* resource_get_encrypted_property_k(DavResource *res, UcxKey key);
90 void resource_add_child(DavResource *parent, DavResource *child);
91 void resource_add_ordered_child(DavResource *parent, DavResource *child, UcxList *ordercr);
92 int resource_add_crypto_info(DavSession *sn, const char *href, const char *name, const char *hash);
93
94 sstr_t dav_property_key_a(UcxAllocator *a, const char *ns, const char *name);
95
96 DavXmlNode* create_crypto_prop(DavSession *sn, UcxMap *properties);
97 UcxMap* parse_crypto_prop(DavSession *sn, DavKey *key, DavXmlNode *node);
98 UcxMap* parse_crypto_prop_str(DavSession *sn, DavKey *key, const char *content);
99
100 #ifdef  __cplusplus
101 }
102 #endif
103
104 #endif  /* RESOURCE_H */
105