globus_common  17.9
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
globus_extension.h
Go to the documentation of this file.
1 
7 #ifndef GLOBUS_EXTENSION_H
8 #define GLOBUS_EXTENSION_H
9 
10 #include "globus_common_include.h"
11 #include "globus_module.h"
12 #include "globus_hashtable.h"
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 extern globus_module_descriptor_t globus_i_extension_module;
19 #define GLOBUS_EXTENSION_MODULE (&globus_i_extension_module)
20 
21 enum
22 {
23  GLOBUS_EXTENSION_ERROR_OPEN_FAILED,
24  GLOBUS_EXTENSION_ERROR_LOOKUP_FAILED
25 };
26 
41 #define GlobusExtensionDefineModule(name) \
42  globus_module_descriptor_t name##_module
43 #define GlobusExtensionDeclareModule(name) \
44  extern globus_module_descriptor_t name##_module
45 #define GlobusExtensionMyModule(name) &name##_module
46 
79 int
81  const char * extension_name);
82 
83 int
84 globus_extension_deactivate(
85  const char * extension_name);
86 
87 typedef struct globus_l_extension_handle_s * globus_extension_handle_t;
88 
89 typedef struct
90 {
91  globus_hashtable_t table;
92  globus_bool_t initialized;
93  globus_bool_t user_hashing;
94 } globus_extension_registry_t;
95 
96 /* these two calls are only to be called from within an extensions activate
97  * and deactivate functions
98  *
99  * the module in the add can either be GlobusExtensionMyModule(name),
100  * some other module, or NULL. It's purpose is to specify the module that
101  * is associated with the error objects that might come from use of this
102  * addition to the registry.
103  *
104  * symbol is a char * by default. the key can be changed by calling
105  * globus_extension_registry_set_hashing() before it is accessed.
106  *
107  * regardless, the memory pointed to by symbol must exist as long as the entry
108  * is in the registry
109  */
110 int
111 globus_extension_registry_add(
112  globus_extension_registry_t * registry,
113  void * symbol,
115  void * data);
116 
117 void *
118 globus_extension_registry_remove(
119  globus_extension_registry_t * registry,
120  void * symbol);
121 
122 int
123 globus_extension_registry_set_hashing(
124  globus_extension_registry_t * registry,
126  globus_hashtable_keyeq_func_t keyeq_func);
127 
128 
144 void *
146  globus_extension_handle_t * handle,
147  globus_extension_registry_t * registry,
148  void * symbol);
149 
150 void *
151 globus_extension_reference(
152  globus_extension_handle_t handle);
153 
154 void
155 globus_extension_release(
156  globus_extension_handle_t handle);
157 
158 /* get the module version of a loaded extension. version is a pointer to
159  an existing globus_version_t */
160 int
161 globus_extension_get_module_version(
162  globus_extension_handle_t handle,
163  globus_version_t * version);
164 
166 globus_extension_error_match(
167  globus_extension_handle_t handle,
168  globus_object_t * error,
169  int type);
170 
171 typedef
173 (*globus_extension_error_match_cb_t)(
174  globus_object_t * error,
176  void * type);
177 
179 globus_extension_error_match_with_cb(
180  globus_extension_handle_t handle,
181  globus_object_t * error,
182  globus_extension_error_match_cb_t callback,
183  void * type);
184 
189 int
191  const char * extension_name,
192  globus_module_descriptor_t * module_descriptor);
193 
194 void
195 globus_extension_unregister_builtin(
196  const char * extension_name);
197 
198 typedef struct
199 {
200  char * extension_name;
201  globus_module_descriptor_t * module_descriptor;
202 } globus_extension_builtin_t;
203 
204 /* array of builtins, with null entry at end */
205 int
206 globus_extension_register_builtins(
207  globus_extension_builtin_t * builtins);
208 
209 void
210 globus_extension_unregister_builtins(
211  globus_extension_builtin_t * builtins);
212 
213 #ifdef __cplusplus
214 }
215 #endif
216 
217 #endif /* GLOBUS_EXTENSION_H */
int(* globus_hashtable_hash_func_t)(void *key, int limit)
Definition: globus_hashtable.h:41
int globus_extension_activate(const char *extension_name)
Definition: globus_extension.c:513
int globus_bool_t
Boolean type.
Definition: globus_types.h:78
Reference Counting Module Activation and Deactivation.
Hash Table.
int(* globus_hashtable_keyeq_func_t)(void *key1, void *key2)
Definition: globus_hashtable.h:53
int globus_extension_register_builtin(const char *extension_name, globus_module_descriptor_t *module_descriptor)
Definition: globus_extension.c:1085
Include System Headers.
void * globus_extension_lookup(globus_extension_handle_t *handle, globus_extension_registry_t *registry, void *symbol)
Definition: globus_extension.c:857
Module Descriptor.
Definition: globus_module.h:54