Add option min_propset
This commit is contained in:
@ -202,6 +202,12 @@
|
||||
/* Use "Content-Encoding: gzip" for GET requests. */
|
||||
#define DAV_USE_COMPRESSION 1
|
||||
|
||||
/* Only request a minimal set or properties (getcontentlength and
|
||||
resourcetype). For read-only filesystems to speed up PROPFIND
|
||||
requests.
|
||||
May be overridden by system config file and user config file. */
|
||||
#define DAV_MIN_PROPSET 0
|
||||
|
||||
/* Timeout in seconds used when libneon supports non blocking io
|
||||
A value of zero means use the TCP default
|
||||
May be overriden by system config file and user config file. */
|
||||
|
@ -1717,6 +1717,7 @@ new_args(void)
|
||||
args->precheck = DAV_PRECHECK;
|
||||
args->ignore_dav_header = DAV_IGNORE_DAV_HEADER;
|
||||
args->use_compression = DAV_USE_COMPRESSION;
|
||||
args->min_propset = DAV_MIN_PROPSET;
|
||||
args->connect_timeout = DAV_CONNECT_TIMEOUT;
|
||||
args->read_timeout = DAV_READ_TIMEOUT;
|
||||
args->retry = DAV_RETRY;
|
||||
@ -2206,6 +2207,8 @@ read_config(dav_args *args, const char * filename, int system)
|
||||
args->ignore_dav_header = arg_to_int(parmv[1], 10, parmv[0]);
|
||||
} else if (strcmp(parmv[0], "use_compression") == 0) {
|
||||
args->use_compression = arg_to_int(parmv[1], 10, parmv[0]);
|
||||
} else if (strcmp(parmv[0], "min_propset") == 0) {
|
||||
args->min_propset = arg_to_int(parmv[1], 10, parmv[0]);
|
||||
} else if (strcmp(parmv[0], "connect_timeout") == 0) {
|
||||
args->connect_timeout = arg_to_int(parmv[1], 10, parmv[0]);
|
||||
} else if (strcmp(parmv[0], "read_timeout") == 0) {
|
||||
|
@ -93,6 +93,7 @@ typedef struct {
|
||||
int precheck; /* User config file, system config file */
|
||||
int ignore_dav_header; /* User config file, system config file */
|
||||
int use_compression; /* User config file, system config file */
|
||||
int min_propset; /* User config file, system config file */
|
||||
time_t connect_timeout; /* User config file, system config file */
|
||||
time_t read_timeout; /* User config file, system config file */
|
||||
time_t retry; /* User config file, system config file */
|
||||
|
81
src/webdav.c
81
src/webdav.c
@ -114,27 +114,38 @@ typedef struct {
|
||||
/* Properties to be retrieved from the server. This constants
|
||||
are used by dav_get_collection(). */
|
||||
enum {
|
||||
ETAG = 0,
|
||||
TYPE = 0,
|
||||
LENGTH,
|
||||
MODIFIED,
|
||||
TYPE,
|
||||
END
|
||||
ETAG,
|
||||
MODIFIED
|
||||
};
|
||||
|
||||
static const ne_propname prop_names[] = {
|
||||
[ETAG] = {"DAV:", "getetag"},
|
||||
[LENGTH] = {"DAV:", "getcontentlength"},
|
||||
[MODIFIED] = {"DAV:", "getlastmodified"},
|
||||
static const ne_propname full_prop_names[] = {
|
||||
[TYPE] = {"DAV:", "resourcetype"},
|
||||
[END] = {NULL, NULL}
|
||||
[LENGTH] = {"DAV:", "getcontentlength"},
|
||||
[ETAG] = {"DAV:", "getetag"},
|
||||
[MODIFIED] = {"DAV:", "getlastmodified"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static const ne_propname anonymous_prop_names[] = {
|
||||
[ETAG] = {NULL, "getetag"},
|
||||
[LENGTH] = {NULL, "getcontentlength"},
|
||||
[MODIFIED] = {NULL, "getlastmodified"},
|
||||
static const ne_propname full_anonymous_prop_names[] = {
|
||||
[TYPE] = {NULL, "resourcetype"},
|
||||
[END] = {NULL, NULL}
|
||||
[LENGTH] = {NULL, "getcontentlength"},
|
||||
[ETAG] = {NULL, "getetag"},
|
||||
[MODIFIED] = {NULL, "getlastmodified"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static const ne_propname min_prop_names[] = {
|
||||
[TYPE] = {"DAV:", "resourcetype"},
|
||||
[LENGTH] = {"DAV:", "getcontentlength"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static const ne_propname min_anonymous_prop_names[] = {
|
||||
[TYPE] = {NULL, "resourcetype"},
|
||||
[LENGTH] = {NULL, "getcontentlength"},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/* Properties to be retrieved from the server. This constants
|
||||
@ -199,6 +210,11 @@ static int ignore_dav_header;
|
||||
/* Use "Content-Encoding: gzip" for GET requests. */
|
||||
static int use_compression;
|
||||
|
||||
/* Only request a minimal set of properties. */
|
||||
static int min_propset;
|
||||
static const ne_propname *prop_names;
|
||||
static const ne_propname *anonymous_prop_names;
|
||||
|
||||
/* Will be set to 1 when dav_init_connection() succeeded. */
|
||||
static int initialized;
|
||||
|
||||
@ -431,6 +447,14 @@ dav_init_webdav(dav_args *args)
|
||||
precheck = args->precheck;
|
||||
ignore_dav_header = args->ignore_dav_header;
|
||||
use_compression = args->use_compression & ne_has_support(NE_FEATURE_ZLIB);
|
||||
min_propset = args->min_propset;
|
||||
if (min_propset) {
|
||||
prop_names = min_prop_names;
|
||||
anonymous_prop_names = min_anonymous_prop_names;
|
||||
} else {
|
||||
prop_names = full_prop_names;
|
||||
anonymous_prop_names = full_anonymous_prop_names;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1713,10 +1737,6 @@ prop_result(void *userdata, const ne_uri *uri, const ne_prop_result_set *set)
|
||||
#endif
|
||||
}
|
||||
|
||||
data = ne_propset_value(set, &prop_names[ETAG]);
|
||||
if (!data)
|
||||
data = ne_propset_value(set, &anonymous_prop_names[ETAG]);
|
||||
result->etag = normalize_etag(data);
|
||||
|
||||
data = ne_propset_value(set, &prop_names[LENGTH]);
|
||||
if (!data)
|
||||
@ -1728,15 +1748,22 @@ prop_result(void *userdata, const ne_uri *uri, const ne_prop_result_set *set)
|
||||
result->size = strtol(data, NULL, 10);
|
||||
#endif /* _FILE_OFFSET_BITS != 64 */
|
||||
|
||||
data = ne_propset_value(set, &prop_names[MODIFIED]);
|
||||
if (!data)
|
||||
data = ne_propset_value(set, &anonymous_prop_names[MODIFIED]);
|
||||
if (data) {
|
||||
result->mtime = ne_httpdate_parse(data);
|
||||
if (result->mtime == (time_t) -1)
|
||||
result->mtime = ne_iso8601_parse(data);
|
||||
if (result->mtime == (time_t) -1)
|
||||
result->mtime = 0;
|
||||
if (!min_propset) {
|
||||
data = ne_propset_value(set, &prop_names[ETAG]);
|
||||
if (!data)
|
||||
data = ne_propset_value(set, &anonymous_prop_names[ETAG]);
|
||||
result->etag = normalize_etag(data);
|
||||
|
||||
data = ne_propset_value(set, &prop_names[MODIFIED]);
|
||||
if (!data)
|
||||
data = ne_propset_value(set, &anonymous_prop_names[MODIFIED]);
|
||||
if (data) {
|
||||
result->mtime = ne_httpdate_parse(data);
|
||||
if (result->mtime == (time_t) -1)
|
||||
result->mtime = ne_iso8601_parse(data);
|
||||
if (result->mtime == (time_t) -1)
|
||||
result->mtime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
result->next = ctx->results;
|
||||
|
Reference in New Issue
Block a user