00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00022 #ifndef GLOBUS_EXTENSION_H
00023 #define GLOBUS_EXTENSION_H
00024
00025 #include "globus_common_include.h"
00026 #include "globus_module.h"
00027 #include "globus_hashtable.h"
00028
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032
00033 extern globus_module_descriptor_t globus_i_extension_module;
00034 #define GLOBUS_EXTENSION_MODULE (&globus_i_extension_module)
00035
00036 enum
00037 {
00038 GLOBUS_EXTENSION_ERROR_OPEN_FAILED,
00039 GLOBUS_EXTENSION_ERROR_LOOKUP_FAILED
00040 };
00041
00056 #define GlobusExtensionDefineModule(name) \
00057 globus_module_descriptor_t name##_module
00058 #define GlobusExtensionDeclareModule(name) \
00059 extern globus_module_descriptor_t name##_module
00060 #define GlobusExtensionMyModule(name) &name##_module
00061
00094 int
00095 globus_extension_activate(
00096 const char * extension_name);
00097
00098 int
00099 globus_extension_deactivate(
00100 const char * extension_name);
00101
00102 typedef struct globus_l_extension_handle_s * globus_extension_handle_t;
00103
00104 typedef struct
00105 {
00106 globus_hashtable_t table;
00107 globus_bool_t initialized;
00108 globus_bool_t user_hashing;
00109 } globus_extension_registry_t;
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 int
00126 globus_extension_registry_add(
00127 globus_extension_registry_t * registry,
00128 void * symbol,
00129 globus_module_descriptor_t * module,
00130 void * data);
00131
00132 void *
00133 globus_extension_registry_remove(
00134 globus_extension_registry_t * registry,
00135 void * symbol);
00136
00137 int
00138 globus_extension_registry_set_hashing(
00139 globus_extension_registry_t * registry,
00140 globus_hashtable_hash_func_t hash_func,
00141 globus_hashtable_keyeq_func_t keyeq_func);
00142
00143
00159 void *
00160 globus_extension_lookup(
00161 globus_extension_handle_t * handle,
00162 globus_extension_registry_t * registry,
00163 void * symbol);
00164
00165 void *
00166 globus_extension_reference(
00167 globus_extension_handle_t handle);
00168
00169 void
00170 globus_extension_release(
00171 globus_extension_handle_t handle);
00172
00173
00174
00175 int
00176 globus_extension_get_module_version(
00177 globus_extension_handle_t handle,
00178 globus_version_t * version);
00179
00180 globus_bool_t
00181 globus_extension_error_match(
00182 globus_extension_handle_t handle,
00183 globus_object_t * error,
00184 int type);
00185
00186 typedef
00187 globus_bool_t
00188 (*globus_extension_error_match_cb_t)(
00189 globus_object_t * error,
00190 globus_module_descriptor_t * module,
00191 void * type);
00192
00193 globus_bool_t
00194 globus_extension_error_match_with_cb(
00195 globus_extension_handle_t handle,
00196 globus_object_t * error,
00197 globus_extension_error_match_cb_t callback,
00198 void * type);
00199
00204 int
00205 globus_extension_register_builtin(
00206 const char * extension_name,
00207 globus_module_descriptor_t * module_descriptor);
00208
00209 void
00210 globus_extension_unregister_builtin(
00211 const char * extension_name);
00212
00213 typedef struct
00214 {
00215 char * extension_name;
00216 globus_module_descriptor_t * module_descriptor;
00217 } globus_extension_builtin_t;
00218
00219
00220 int
00221 globus_extension_register_builtins(
00222 globus_extension_builtin_t * builtins);
00223
00224 void
00225 globus_extension_unregister_builtins(
00226 globus_extension_builtin_t * builtins);
00227
00228 #ifdef __cplusplus
00229 }
00230 #endif
00231
00232 #endif