src/server/webdav/webdav.h

changeset 26
37ff8bf54b89
parent 15
cff9c4101dd7
child 27
05b7576dca2b
--- a/src/server/webdav/webdav.h	Sat Feb 25 12:43:26 2012 +0100
+++ b/src/server/webdav/webdav.h	Sun Feb 26 19:51:14 2012 +0100
@@ -42,20 +42,24 @@
 extern "C" {
 #endif
 
-typedef struct PropfindResponse PropfindResponse;
-typedef struct DAVPropertyBackend DAVPropertyBackend;
+#define DAV_FOREACH(elem, list) \
+        for (UcxDlist *elem = list ; elem != NULL ; elem = elem->next)
+    
+typedef struct PropfindResponse     PropfindResponse;
+typedef struct DAVPropertyBackend   DAVPropertyBackend;
 
-typedef struct PropfindRequest   PropfindRequest;
-typedef struct DavProperty       DavProperty;
+typedef struct PropfindRequest      PropfindRequest;
+typedef struct DavProperty          DavProperty;
 
 struct PropfindRequest {
     Session            *sn;
     Request            *rq;
 
-    UcxDlist           *properties; /* DavProperty list */
+    UcxDlist           *properties; /* DavProperty list, requested props */
     int8_t             allprop;
     int8_t             propname;
-
+    
+    int8_t             prop;
     UcxDlist           *notFoundProps;
     UcxDlist           *forbiddenProps;
     DAVPropertyBackend *propertyBackend;
@@ -71,41 +75,60 @@
     char *name;
 };
 
-typedef char*(*prop_get_func)(
-        DAVPropertyBackend*,
-        PropfindRequest*,
-        char*,
-        char*,
-        char*,
-        int*);
+/*
+ * dav_res_propfind_f
+ * 
+ * Gets all requested properties of a WebDAV resource(file). This function
+ * should add properties with dav_propfind_add_str_prop or
+ * dav_prop_add_xml_prop. Unavailable properties should be added with
+ * 
+ * 
+ * arg0: property backend
+ * arg1: current PropfindRequest object
+ * arg2: the webdav resource path
+ */
+typedef void(*dav_res_propfind_f)(DAVPropertyBackend*,PropfindRequest*,char*);
 
 struct DAVPropertyBackend {
-    prop_get_func get_property;
+    dav_res_propfind_f propfind;
 };
 
 int webdav_service(pblock *pb, Session *sn, Request *rq);
+int webdav_propfind(pblock *pb, Session *sn, Request *rq);
 
-void dav_create_response(PropfindRequest *davrq);
+void dav_resource_response(PropfindRequest *rq, sstr_t path, sstr_t uri);
 
-int dav_foreach_reqprop(UcxDlist *list, PropfindRequest *davrq);
+/*
+ * dav_propfind_add_str_prop
+ * 
+ * Adds a string property to the current WebDAV resource response
+ */
+void dav_propfind_add_str_prop(
+        PropfindRequest *rq,
+        DavProperty* prop,
+        char *str,
+        size_t len);
 
-char* dav_get_property(
-        DAVPropertyBackend *b,
-        PropfindRequest *davrq,
-        char *path,
-        char *xmlns,
-        char *name,
-        int *error);
+//void dav_propfind_add_xml_prop();
+
+/*
+ * dav_propfind_add_prop_error
+ * 
+ * Adds a unavailable property to the response
+ * 
+ * rq:    propfind request object
+ * prop:  unavailable property
+ * error: HTTP status code
+ */
+void dav_propfind_add_prop_error(
+        PropfindRequest *rq,
+        DavProperty *prop,
+        int error);
+
+
 
 DAVPropertyBackend* create_property_backend();
-
-typedef struct {
-    DAVPropertyBackend backend;
-    char *path;
-    struct stat st;
-    int s;
-} DAVDefaultBackend;
-
+void dav_rq_propfind(DAVPropertyBackend *b,PropfindRequest *rq ,char *path);
 
 #ifdef	__cplusplus
 }

mercurial