diff -r 5dee29c7c530 -r 37ff8bf54b89 src/server/webdav/webdav.h --- 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 }