Sun, 06 May 2012 10:09:27 +0200
added logging
13 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | * | |
4 | * Copyright 2011 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 WEBDAV_H | |
30 | #define WEBDAV_H | |
31 | ||
14
b8bf95b39952
New source folder layout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
13
diff
changeset
|
32 | #include "../public/nsapi.h" |
13 | 33 | |
34 | #include <sys/file.h> | |
35 | #include <sys/stat.h> | |
36 | ||
15
cff9c4101dd7
Replaced old utils with ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
14
diff
changeset
|
37 | #include "../ucx/map.h" |
14
b8bf95b39952
New source folder layout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
13
diff
changeset
|
38 | #include "../ucx/dlist.h" |
b8bf95b39952
New source folder layout
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
13
diff
changeset
|
39 | #include "../util/strbuf.h" |
13 | 40 | |
41 | #ifdef __cplusplus | |
42 | extern "C" { | |
43 | #endif | |
44 | ||
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
45 | #define DAV_FOREACH(elem, list) \ |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
46 | for (UcxDlist *elem = list ; elem != NULL ; elem = elem->next) |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
47 | |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
48 | typedef struct PropfindResponse PropfindResponse; |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
49 | typedef struct DAVPropertyBackend DAVPropertyBackend; |
13 | 50 | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
51 | typedef struct PropfindRequest PropfindRequest; |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
52 | typedef struct DavProperty DavProperty; |
13 | 53 | |
54 | struct PropfindRequest { | |
55 | Session *sn; | |
56 | Request *rq; | |
57 | ||
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
58 | UcxDlist *properties; /* DavProperty list, requested props */ |
13 | 59 | int8_t allprop; |
60 | int8_t propname; | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
61 | |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
62 | int8_t prop; |
13 | 63 | UcxDlist *notFoundProps; |
64 | UcxDlist *forbiddenProps; | |
65 | DAVPropertyBackend *propertyBackend; | |
66 | ||
67 | char *path; | |
68 | char *uri; | |
69 | ||
70 | sbuf_t *out; | |
71 | }; | |
72 | ||
73 | struct DavProperty { | |
74 | char *xmlns; | |
75 | char *name; | |
76 | }; | |
77 | ||
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
78 | /* |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
79 | * dav_res_propfind_f |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
80 | * |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
81 | * Gets all requested properties of a WebDAV resource(file). This function |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
82 | * should add properties with dav_propfind_add_str_prop or |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
83 | * dav_prop_add_xml_prop. Unavailable properties should be added with |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
84 | * |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
85 | * |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
86 | * arg0: property backend |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
87 | * arg1: current PropfindRequest object |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
88 | * arg2: the webdav resource path |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
89 | */ |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
90 | typedef void(*dav_res_propfind_f)(DAVPropertyBackend*,PropfindRequest*,char*); |
13 | 91 | |
92 | struct DAVPropertyBackend { | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
93 | dav_res_propfind_f propfind; |
13 | 94 | }; |
95 | ||
96 | int webdav_service(pblock *pb, Session *sn, Request *rq); | |
27
05b7576dca2b
added put method
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
26
diff
changeset
|
97 | int webdav_put(pblock *pb, Session *sn, Request *rq); |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
98 | int webdav_propfind(pblock *pb, Session *sn, Request *rq); |
13 | 99 | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
100 | void dav_resource_response(PropfindRequest *rq, sstr_t path, sstr_t uri); |
13 | 101 | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
102 | /* |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
103 | * dav_propfind_add_str_prop |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
104 | * |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
105 | * Adds a string property to the current WebDAV resource response |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
106 | */ |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
107 | void dav_propfind_add_str_prop( |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
108 | PropfindRequest *rq, |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
109 | DavProperty* prop, |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
110 | char *str, |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
111 | size_t len); |
13 | 112 | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
113 | //void dav_propfind_add_xml_prop(); |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
114 | |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
115 | /* |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
116 | * dav_propfind_add_prop_error |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
117 | * |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
118 | * Adds a unavailable property to the response |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
119 | * |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
120 | * rq: propfind request object |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
121 | * prop: unavailable property |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
122 | * error: HTTP status code |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
123 | */ |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
124 | void dav_propfind_add_prop_error( |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
125 | PropfindRequest *rq, |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
126 | DavProperty *prop, |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
127 | int error); |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
128 | |
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
129 | |
13 | 130 | |
131 | DAVPropertyBackend* create_property_backend(); | |
26
37ff8bf54b89
Minimal webdav support
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
15
diff
changeset
|
132 | void dav_rq_propfind(DAVPropertyBackend *b,PropfindRequest *rq ,char *path); |
13 | 133 | |
134 | #ifdef __cplusplus | |
135 | } | |
136 | #endif | |
137 | ||
138 | #endif /* WEBDAV_H */ | |
139 |