]> granicus.if.org Git - apache/commitdiff
get rid of more of the old module/provider mechanisms -- use ap_hooks to
authorGreg Stein <gstein@apache.org>
Sat, 8 Jul 2000 13:22:14 +0000 (13:22 +0000)
committerGreg Stein <gstein@apache.org>
Sat, 8 Jul 2000 13:22:14 +0000 (13:22 +0000)
look up the plugins' function hook tables.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@85790 13f79535-47bb-0310-9956-ffa450edef68

modules/dav/fs/mod_dav_fs.c
modules/dav/fs/repos.c
modules/dav/fs/repos.h
modules/dav/main/mod_dav.c
modules/dav/main/mod_dav.h
modules/dav/main/props.c

index 4ac57712ef49c31eda0f691a1d2f292087bcdd64..7e86f0a10af55af6fdc6a7eeaed35be5d52425c5 100644 (file)
@@ -122,6 +122,8 @@ static const command_rec dav_fs_cmds[] =
 static void register_hooks(void)
 {
     ap_hook_get_resource(dav_fs_hook_get_resource, NULL, NULL, AP_HOOK_MIDDLE);
+    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);
 }
 
 module MODULE_VAR_EXPORT dav_fs_module =
index 9f15a9e86f2284d437dddf31703d32f8389a38d5..d0eec2b49e1465397d4438c2b73a6f3ca2e3b9c0 100644 (file)
@@ -2027,20 +2027,7 @@ static const dav_dyn_provider dav_dyn_providers_fs[] =
         &dav_hooks_liveprop_fs,
         NULL
     },
-    /* propdb provider */
-    {
-       DAV_FS_PROVIDER_ID,
-        DAV_DYN_TYPE_PROPDB,
-        &dav_hooks_db_dbm,
-        NULL
-    },
-    /* locks provider */
-    {
-       DAV_FS_PROVIDER_ID,
-        DAV_DYN_TYPE_LOCKS,
-        &dav_hooks_locks_fs,
-        NULL
-    },
+
     /* must always be last */
     DAV_DYN_END_MARKER
 };
@@ -2073,3 +2060,13 @@ int dav_fs_hook_get_resource(request_rec *r, const char *root_dir,
                            r->pool);
     return OK;
 }
+
+const dav_hooks_locks *dav_fs_get_lock_hooks(request_rec *r)
+{
+    return &dav_hooks_locks_fs;
+}
+
+const dav_hooks_propdb *dav_fs_get_propdb_hooks(request_rec *r)
+{
+    return &dav_hooks_db_dbm;
+}
index 9d00ac183b643ba8521a785d6a0221cdb776c6d8..06b882eb5ad216960a10728066332ba199aa87d4 100644 (file)
@@ -97,5 +97,7 @@ const char *dav_get_lockdb_path(const request_rec *r);
 
 int dav_fs_hook_get_resource(request_rec *r, const char *root_dir,
                              const char *workspace);
+const dav_hooks_locks *dav_fs_get_lock_hooks(request_rec *r);
+const dav_hooks_propdb *dav_fs_get_propdb_hooks(request_rec *r);
 
 #endif /* _DAV_FS_REPOS_H_ */
index c7e829077391d020fed819e8729e220a8e2c2c98..33dd8f951cb74bed9de8b209734fb9123b8dd5dd 100644 (file)
@@ -112,10 +112,7 @@ typedef struct {
     ap_table_t *d_params;      /* per-directory DAV config parameters */
     struct dav_dyn_mod_ctx *dmc;
 
-    dav_dyn_hooks propdb;
-    dav_dyn_hooks locks;
     dav_dyn_hooks *liveprop;
-    dav_dyn_hooks vsn;
 } dav_dir_conf;
 
 /* per-server configuration */
@@ -157,26 +154,6 @@ static void dav_copy_providers(ap_pool_t *p, const char *name, dav_dir_conf *con
 
        switch (provider->type) {
 
-       case DAV_DYN_TYPE_PROPDB:
-           conf->propdb = hooks;
-           break;
-
-       case DAV_DYN_TYPE_LOCKS:
-           conf->locks = hooks;
-           break;
-
-       case DAV_DYN_TYPE_QUERY_GRAMMAR:
-           /* ### not yet defined */
-           break;
-
-       case DAV_DYN_TYPE_ACL:
-           /* ### not yet defined */
-           break;
-
-       case DAV_DYN_TYPE_VSN:
-           conf->vsn = hooks;
-           break;
-
        case DAV_DYN_TYPE_LIVEPROP:
        {
            dav_dyn_hooks *ddh = ap_palloc(p, sizeof(*ddh));
@@ -278,21 +255,6 @@ static void *dav_merge_dir_config(ap_pool_t *p, void *base, void *overrides)
     ap_overlap_tables(newconf->d_params, child->d_params,
                      AP_OVERLAP_TABLES_SET);
 
-    if (child->propdb.hooks != NULL)
-        newconf->propdb = child->propdb;
-    else
-        newconf->propdb = parent->propdb;
-    
-    if (child->locks.hooks != NULL)
-        newconf->locks = child->locks;
-    else
-        newconf->locks = parent->locks;
-
-    if (child->vsn.hooks != NULL)
-        newconf->vsn = child->vsn;
-    else
-        newconf->vsn = parent->vsn;
-
     if (child->liveprop != NULL)
         newconf->liveprop = child->liveprop;
     else
@@ -328,51 +290,62 @@ size_t dav_get_limit_xml_body(const request_rec *r)
     return (size_t)conf->limit_xml_body;
 }
 
-const dav_dyn_hooks *dav_get_provider_hooks(request_rec *r, int provider_type)
+const dav_hooks_locks *dav_get_lock_hooks(request_rec *r)
 {
-    dav_dir_conf *conf;
-    const dav_dyn_hooks *hooks;
-    static const dav_dyn_hooks null_hooks = { { 0 } };
-
-    conf = (dav_dir_conf *) ap_get_module_config(r->per_dir_config,
-                                                &dav_module);
-    switch (provider_type) {
-
-    case DAV_DYN_TYPE_PROPDB:
-        hooks = &conf->propdb;
-        break;
-
-    case DAV_DYN_TYPE_LOCKS:
-        hooks = &conf->locks;
-        break;
+    void *data;
+    const dav_hooks_locks *hooks;
 
-    case DAV_DYN_TYPE_QUERY_GRAMMAR:
-        /* ### not yet defined */
-        hooks = &null_hooks;
-        break;
+    (void) ap_get_userdata(&data, DAV_KEY_LOCK_HOOKS, r->pool);
+    if (data == NULL) {
+        hooks = ap_run_get_lock_hooks(r);
+        (void) ap_set_userdata(hooks, DAV_KEY_LOCK_HOOKS, ap_null_cleanup,
+                               r->pool);
+    }
+    else
+        hooks = data;
+    return hooks;
+}
 
-    case DAV_DYN_TYPE_ACL:
-        /* ### not yet defined */
-        hooks = &null_hooks;
-        break;
+const dav_hooks_propdb *dav_get_propdb_hooks(request_rec *r)
+{
+    void *data;
+    const dav_hooks_db *hooks;
 
-    case DAV_DYN_TYPE_VSN:
-        hooks = &conf->vsn;
-        break;
+    (void) ap_get_userdata(&data, DAV_KEY_PROPDB_HOOKS, r->pool);
+    if (data == NULL) {
+        hooks = ap_run_get_propdb_hooks(r);
+        (void) ap_set_userdata(hooks, DAV_KEY_PROPDB_HOOKS, ap_null_cleanup,
+                               r->pool);
+    }
+    else
+        hooks = data;
+    return hooks;
+}
 
-    case DAV_DYN_TYPE_LIVEPROP:
-        hooks = conf->liveprop;
-        break;
+const dav_hooks_vsn *dav_get_vsn_hooks(request_rec *r)
+{
+    void *data;
+    const dav_hooks_vsn *hooks;
 
-    default:
-        /* unknown provider type */
-        hooks = &null_hooks;
-       break;
+    (void) ap_get_userdata(&data, DAV_KEY_VSN_HOOKS, r->pool);
+    if (data == NULL) {
+        hooks = ap_run_get_vsn_hooks(r);
+        (void) ap_set_userdata(hooks, DAV_KEY_VSN_HOOKS, ap_null_cleanup,
+                               r->pool);
     }
-
+    else
+        hooks = data;
     return hooks;
 }
 
+const dav_dyn_hooks *dav_get_liveprop_hooks(request_rec *r)
+{
+    dav_dir_conf *conf;
+
+    conf = ap_get_module_config(r->per_dir_config, &dav_module);
+    return conf->liveprop;
+}
+
 /*
  * Command handler for the DAV directive, which is FLAG.
  */
@@ -3264,9 +3237,9 @@ module MODULE_VAR_EXPORT dav_module =
 
 AP_HOOK_STRUCT(
     AP_HOOK_LINK(get_resource)
-    AP_HOOK_LINK(set_lock_hooks)
-    AP_HOOK_LINK(set_propdb_hooks)
-    AP_HOOK_LINK(set_vsn_hooks)
+    AP_HOOK_LINK(get_lock_hooks)
+    AP_HOOK_LINK(get_propdb_hooks)
+    AP_HOOK_LINK(get_vsn_hooks)
     AP_HOOK_LINK(find_liveprop)
     AP_HOOK_LINK(insert_all_liveprops)
     )
@@ -3274,3 +3247,9 @@ AP_IMPLEMENT_HOOK_RUN_FIRST(int, get_resource,
                             (request_rec *r, const char *root_dir,
                              const char *workspace),
                             (r, root_dir, workspace), DECLINED);
+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);
index 448fea5ad74e3ef25fcba16fb19fec030f42106e..bcfd71228f3ae200ee6562c3d95a1c9e9ddc802d 100644 (file)
@@ -226,12 +226,15 @@ dav_error *dav_push_error(ap_pool_t *p, int status, int error_id, const char *de
 */
 
 /* forward-declare this structure */
-typedef struct dav_hooks_db dav_hooks_db;
+typedef struct dav_hooks_propdb dav_hooks_propdb;
 typedef struct dav_hooks_locks dav_hooks_locks;
 typedef struct dav_hooks_vsn dav_hooks_vsn;
 typedef struct dav_hooks_repository dav_hooks_repository;
 typedef struct dav_hooks_liveprop dav_hooks_liveprop;
 
+/* ### deprecated name */
+typedef dav_hooks_propdb dav_hooks_db;
+
 
 /* --------------------------------------------------------------------
 **
@@ -384,12 +387,14 @@ ap_xml_elem *dav_find_child(const ap_xml_elem *elem, const char *tagname);
 
 AP_DECLARE_HOOK(int, get_resource, (request_rec *r, const char *root_dir,
                                     const char *workspace))
-AP_DECLARE_HOOK(int, set_lock_hooks, (request_rec *r))
-AP_DECLARE_HOOK(int, set_propdb_hooks, (request_rec *r))
-AP_DECLARE_HOOK(int, set_vsn_hooks, (request_rec *r))
-AP_DECLARE_HOOK(int, find_liveprop, (const char *ns_uri, const char *name,
-                                     struct dav_hooks_liveprop **hooks))
-AP_DECLARE_HOOK(void, insert_all_liveprops, (const dav_resource *resource,
+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))
+AP_DECLARE_HOOK(int, find_liveprop, (request_rec *r,
+                                     const char *ns_uri, const char *name,
+                                     const dav_hooks_liveprop **hooks))
+AP_DECLARE_HOOK(void, insert_all_liveprops, (request_rec *r,
+                                             const dav_resource *resource,
                                              int insvalue, ap_hash_t *ns_map,
                                              ap_text_header *phdr))
 
@@ -398,6 +403,10 @@ AP_DECLARE_HOOK(void, insert_all_liveprops, (const dav_resource *resource,
 #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);
+
 
 /* --------------------------------------------------------------------
 **
@@ -554,23 +563,15 @@ int dav_scan_providers(void *ctx,
                       const dav_dyn_provider **provider,
                       dav_dyn_hooks *output);
 
-/* handy macros to assist with dav_dyn_hooks.hooks usage */
-#define DAV_AS_HOOKS_PROPDB(ph)                ((const dav_hooks_db *)((ph)->hooks))
-#define DAV_AS_HOOKS_LOCKS(ph)         ((const dav_hooks_locks *)((ph)->hooks))
-#define DAV_AS_HOOKS_QUERY_GRAMMAR(ph) ((void *)((ph)->hooks))
-#define DAV_AS_HOOKS_ACL(ph)           ((void *)((ph)->hooks))
-#define DAV_AS_HOOKS_VSN(ph)           ((const dav_hooks_vsn *)((ph)->hooks))
-#define DAV_AS_HOOKS_LIVEPROP(ph)      ((const dav_hooks_liveprop *)((ph)->hooks))
+/* ### deprecated */
+#define DAV_GET_HOOKS_PROPDB(r)         dav_get_propdb_hooks(r)
+#define DAV_GET_HOOKS_LOCKS(r)          dav_get_lock_hooks(r)
+#define DAV_GET_HOOKS_VSN(r)            dav_get_vsn_hooks(r)
 
-/* get provider hooks, given a request record */
-const dav_dyn_hooks *dav_get_provider_hooks(request_rec *r, int provider_type);
-
-#define DAV_GET_HOOKS_PROPDB(r)         DAV_AS_HOOKS_PROPDB(dav_get_provider_hooks(r, DAV_DYN_TYPE_PROPDB))
-#define DAV_GET_HOOKS_LOCKS(r)          DAV_AS_HOOKS_LOCKS(dav_get_provider_hooks(r, DAV_DYN_TYPE_LOCKS))
-#define DAV_GET_HOOKS_QUERY_GRAMMAR(r)  DAV_AS_HOOKS_QUERY_GRAMMAR(dav_get_provider_hooks(r, DAV_DYN_TYPE_QUERY_GRAMMAR))
-#define DAV_GET_HOOKS_ACL(r)            DAV_AS_HOOKS_ACL(dav_get_provider_hooks(r, DAV_DYN_TYPE_ACL))
-#define DAV_GET_HOOKS_VSN(r)            DAV_AS_HOOKS_VSN(dav_get_provider_hooks(r, DAV_DYN_TYPE_VSN))
-#define DAV_GET_HOOKS_LIVEPROP(r)       DAV_AS_HOOKS_LIVEPROP(dav_get_provider_hooks(r, DAV_DYN_TYPE_LIVEPROP))
+/* ### temporary; this semantic won't apply in the new scheme */
+const dav_dyn_hooks *dav_get_liveprop_hooks(request_rec *r);
+#define DAV_AS_HOOKS_LIVEPROP(ph)      ((const dav_hooks_liveprop *)((ph)->hooks))
+#define DAV_GET_HOOKS_LIVEPROP(r)       DAV_AS_HOOKS_LIVEPROP(dav_get_liveprop_hooks(r))
 
 
 /* --------------------------------------------------------------------
@@ -824,7 +825,7 @@ typedef struct
 } dav_datum;
 
 /* hook functions to enable pluggable databases */
-struct dav_hooks_db
+struct dav_hooks_propdb
 {
     dav_error * (*open)(ap_pool_t *p, const dav_resource *resource, int ro,
                        dav_db **pdb);
index 08df14ac39fcddb1dc6639ba9ac2395617d6e6e9..9363cfce34848dcb55c321929272e6f97b3e8c94 100644 (file)
@@ -972,7 +972,8 @@ dav_error *dav_open_propdb(request_rec *r, dav_lockdb *lockdb,
     propdb->db_hooks = DAV_GET_HOOKS_PROPDB(r);
     propdb->vsn_hooks = DAV_GET_HOOKS_VSN(r);
 
-    propdb->liveprop = dav_get_provider_hooks(r, DAV_DYN_TYPE_LIVEPROP);
+    /* ### this will need to change */
+    propdb->liveprop = dav_get_liveprop_hooks(r);
 
     propdb->lockdb = lockdb;