You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by gs...@locus.apache.org on 2000/10/07 03:29:39 UTC
cvs commit: apache-2.0/src/modules/dav/main mod_dav.c mod_dav.h providers.c
gstein 00/10/06 18:29:39
Modified: src/modules/dav/fs mod_dav_fs.c repos.c
src/modules/dav/main mod_dav.c mod_dav.h providers.c
Log:
clean up the provider stuff some more: don't allow pick-and-choose of
pieces, but just a complete provider. they aren't really separable anyways.
Revision Changes Path
1.8 +0 -3 apache-2.0/src/modules/dav/fs/mod_dav_fs.c
Index: mod_dav_fs.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/dav/fs/mod_dav_fs.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- mod_dav_fs.c 2000/09/09 23:23:40 1.7
+++ mod_dav_fs.c 2000/10/07 01:29:38 1.8
@@ -121,9 +121,6 @@
static void register_hooks(void)
{
- ap_hook_get_lock_hooks(dav_fs_get_lock_hooks, NULL, NULL, AP_HOOK_MIDDLE);
- ap_hook_get_propdb_hooks(dav_fs_get_propdb_hooks, NULL, NULL,
- AP_HOOK_MIDDLE);
ap_hook_gather_propsets(dav_fs_gather_propsets, NULL, NULL,
AP_HOOK_MIDDLE);
ap_hook_find_liveprop(dav_fs_find_liveprop, NULL, NULL, AP_HOOK_MIDDLE);
1.24 +8 -10 apache-2.0/src/modules/dav/fs/repos.c
Index: repos.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/dav/fs/repos.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- repos.c 2000/10/06 19:45:52 1.23
+++ repos.c 2000/10/07 01:29:38 1.24
@@ -1999,16 +1999,14 @@
dav_fs_patch_rollback,
};
-
-const dav_hooks_locks *dav_fs_get_lock_hooks(request_rec *r)
+static const dav_provider dav_fs_provider =
{
- return &dav_hooks_locks_fs;
-}
-
-const dav_hooks_propdb *dav_fs_get_propdb_hooks(request_rec *r)
-{
- return &dav_hooks_db_dbm;
-}
+ &dav_hooks_repository_fs,
+ &dav_hooks_db_dbm,
+ &dav_hooks_locks_fs,
+ &dav_hooks_liveprop_fs,
+ NULL
+};
void dav_fs_gather_propsets(apr_array_header_t *uris)
{
@@ -2046,5 +2044,5 @@
}
/* register the repository provider */
- dav_register_repository(p, "filesystem", &dav_hooks_repository_fs);
+ dav_register_provider(p, "filesystem", &dav_fs_provider);
}
1.23 +28 -50 apache-2.0/src/modules/dav/main/mod_dav.c
Index: mod_dav.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/dav/main/mod_dav.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- mod_dav.c 2000/10/07 00:50:42 1.22
+++ mod_dav.c 2000/10/07 01:29:38 1.23
@@ -216,52 +216,31 @@
return conf->d_params;
}
-const dav_hooks_locks *dav_get_lock_hooks(request_rec *r)
+static const dav_provider * dav_get_provider(request_rec *r)
{
- void *data;
- const dav_hooks_locks *hooks;
+ dav_dir_conf *conf;
- (void) apr_get_userdata(&data, DAV_KEY_LOCK_HOOKS, r->pool);
- if (data == NULL) {
- hooks = ap_run_get_lock_hooks(r);
- (void) apr_set_userdata(hooks, DAV_KEY_LOCK_HOOKS, apr_null_cleanup,
- r->pool);
- }
- else
- hooks = data;
- return hooks;
+ conf = ap_get_module_config(r->per_dir_config, &dav_module);
+ /* assert: conf->provider != NULL
+ (otherwise, DAV is disabled, and we wouldn't be here */
+
+ /* ### assert that we find it? (return value != NULL) */
+ return dav_lookup_provider(conf->provider);
}
-const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r)
+const dav_hooks_locks *dav_get_lock_hooks(request_rec *r)
{
- void *data;
- const dav_hooks_db *hooks;
+ return dav_get_provider(r)->locks;
+}
- (void) apr_get_userdata(&data, DAV_KEY_PROPDB_HOOKS, r->pool);
- if (data == NULL) {
- hooks = ap_run_get_propdb_hooks(r);
- (void) apr_set_userdata(hooks, DAV_KEY_PROPDB_HOOKS, apr_null_cleanup,
- r->pool);
- }
- else
- hooks = data;
- return hooks;
+const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r)
+{
+ return dav_get_provider(r)->propdb;
}
const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r)
{
- void *data;
- const dav_hooks_vsn *hooks;
-
- (void) apr_get_userdata(&data, DAV_KEY_VSN_HOOKS, r->pool);
- if (data == NULL) {
- hooks = ap_run_get_vsn_hooks(r);
- (void) apr_set_userdata(hooks, DAV_KEY_VSN_HOOKS, apr_null_cleanup,
- r->pool);
- }
- else
- hooks = data;
- return hooks;
+ return dav_get_provider(r)->vsn;
}
/*
@@ -280,6 +259,14 @@
else {
conf->provider = apr_pstrdup(cmd->pool, arg1);
}
+ if (conf->provider != NULL
+ && dav_lookup_provider(conf->provider) == NULL) {
+
+ /* by the time they use it, the provider should be loaded and
+ registered with us. */
+ return apr_psprintf(cmd->pool,
+ "Unknown DAV provider: %s", conf->provider);
+ }
return NULL;
}
@@ -610,7 +597,7 @@
{
void *data;
dav_dir_conf *conf;
- const dav_hooks_repository *repos_hooks;
+ const dav_provider *provider;
const char *workspace = NULL;
const char *target_selector = NULL;
int is_label = 0;
@@ -625,8 +612,8 @@
conf = ap_get_module_config(r->per_dir_config, &dav_module);
- /* assert: provider != NULL */
- repos_hooks = dav_lookup_repository(conf->provider);
+ /* assert: conf->provider != NULL */
+ provider = dav_lookup_provider(conf->provider);
/* get any workspace header */
if ((result = dav_get_workspace(r, &workspace)) != OK)
@@ -641,8 +628,8 @@
}
/* resolve the resource */
- *res_p = (*repos_hooks->get_resource)(r, conf->dir, workspace,
- target_selector, is_label);
+ *res_p = (*provider->repos->get_resource)(r, conf->dir, workspace,
+ target_selector, is_label);
if (*res_p == NULL) {
/* Apache will supply a default error for this. */
return HTTP_NOT_FOUND;
@@ -3269,19 +3256,10 @@
};
AP_HOOK_STRUCT(
- AP_HOOK_LINK(get_lock_hooks)
- AP_HOOK_LINK(get_propdb_hooks)
- AP_HOOK_LINK(get_vsn_hooks)
AP_HOOK_LINK(gather_propsets)
AP_HOOK_LINK(find_liveprop)
AP_HOOK_LINK(insert_all_liveprops)
)
-AP_IMPLEMENT_HOOK_RUN_FIRST(const dav_hooks_locks *, get_lock_hooks,
- (request_rec *r), (r), NULL);
-AP_IMPLEMENT_HOOK_RUN_FIRST(const dav_hooks_db *, get_propdb_hooks,
- (request_rec *r), (r), NULL);
-AP_IMPLEMENT_HOOK_RUN_FIRST(const dav_hooks_vsn *, get_vsn_hooks,
- (request_rec *r), (r), NULL);
AP_IMPLEMENT_HOOK_VOID(gather_propsets, (apr_array_header_t *uris), (uris))
AP_IMPLEMENT_HOOK_RUN_FIRST(int, find_liveprop,
(request_rec *r,
1.18 +23 -9 apache-2.0/src/modules/dav/main/mod_dav.h
Index: mod_dav.h
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/dav/main/mod_dav.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- mod_dav.h 2000/10/07 00:50:42 1.17
+++ mod_dav.h 2000/10/07 01:29:38 1.18
@@ -410,10 +410,26 @@
/* ### docco ... */
-AP_DECLARE_HOOK(const dav_hooks_locks *, get_lock_hooks, (request_rec *r))
-AP_DECLARE_HOOK(const dav_hooks_propdb *, get_propdb_hooks, (request_rec *r))
-AP_DECLARE_HOOK(const dav_hooks_vsn *, get_vsn_hooks, (request_rec *r))
+/*
+** dav_provider
+**
+** This structure wraps up all of the hooks that a mod_dav provider can
+** supply. The provider MUST supply <repos> and <propdb>. The rest are
+** optional and should contain NULL if that feature is not supplied.
+**
+** Note that a provider cannot pick and choose portions. There are too many
+** dependencies between a dav_resource (defined by <repos>) and the other
+** functionality.
+*/
+typedef struct {
+ const dav_hooks_repository *repos;
+ const dav_hooks_propdb *propdb;
+ const dav_hooks_locks *locks;
+ const dav_hooks_liveprop *liveprop;
+ const dav_hooks_vsn *vsn;
+} dav_provider;
+
AP_DECLARE_HOOK(void, gather_propsets, (apr_array_header_t *uris))
AP_DECLARE_HOOK(int, find_liveprop, (request_rec *r,
const char *ns_uri, const char *name,
@@ -423,18 +439,16 @@
int insvalue,
ap_text_header *phdr))
+/* ### make this internal to mod_dav.c ? */
#define DAV_KEY_RESOURCE "dav-resource"
-#define DAV_KEY_LOCK_HOOKS "dav-lock-hooks"
-#define DAV_KEY_PROPDB_HOOKS "dav-propdb-hooks"
-#define DAV_KEY_VSN_HOOKS "dav-vsn-hooks"
const dav_hooks_locks *dav_get_lock_hooks(request_rec *r);
const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r);
const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r);
-void dav_register_repository(apr_pool_t *p, const char *name,
- const dav_hooks_repository *hooks);
-const dav_hooks_repository * dav_lookup_repository(const char *name);
+void dav_register_provider(apr_pool_t *p, const char *name,
+ const dav_provider *hooks);
+const dav_provider * dav_lookup_provider(const char *name);
void dav_register_liveprop_namespace(apr_pool_t *pool, const char *uri);
int dav_get_liveprop_ns_index(const char *uri);
1.2 +4 -4 apache-2.0/src/modules/dav/main/providers.c
Index: providers.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/modules/dav/main/providers.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- providers.c 2000/09/09 23:23:42 1.1
+++ providers.c 2000/10/07 01:29:39 1.2
@@ -69,8 +69,8 @@
return APR_SUCCESS;
}
-void dav_register_repository(apr_pool_t *p, const char *name,
- const dav_hooks_repository *hooks)
+void dav_register_provider(apr_pool_t *p, const char *name,
+ const dav_provider *provider)
{
/* ### ignore the pool; it is NULL right now */
p = ap_global_hook_pool;
@@ -81,10 +81,10 @@
}
/* just set it. no biggy if it was there before. */
- apr_hash_set(dav_repos_providers, name, 0, hooks);
+ apr_hash_set(dav_repos_providers, name, 0, provider);
}
-const dav_hooks_repository * dav_lookup_repository(const char *name)
+const dav_provider * dav_lookup_provider(const char *name)
{
return apr_hash_get(dav_repos_providers, name, 0);
}