00001 /*------------------------------------------------------------------------- 00002 * C-Pluff, a plug-in framework for C 00003 * Copyright 2007 Johannes Lehtinen 00004 * 00005 * Permission is hereby granted, free of charge, to any person obtaining a 00006 * copy of this software and associated documentation files (the "Software"), 00007 * to deal in the Software without restriction, including without limitation 00008 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00009 * and/or sell copies of the Software, and to permit persons to whom the 00010 * Software is furnished to do so, subject to the following conditions: 00011 * 00012 * The above copyright notice and this permission notice shall be included 00013 * in all copies or substantial portions of the Software. 00014 * 00015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00016 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00017 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00018 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 00019 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 00020 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 00021 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00022 *-----------------------------------------------------------------------*/ 00023 00033 #ifndef CPLUFF_H_ 00034 #define CPLUFF_H_ 00035 00041 #include <cpluffdef.h> 00042 00043 #ifdef __cplusplus 00044 extern "C" { 00045 #endif /*__cplusplus*/ 00046 00047 00048 /* ------------------------------------------------------------------------ 00049 * Defines 00050 * ----------------------------------------------------------------------*/ 00051 00060 #ifndef CP_C_API 00061 #define CP_C_API CP_IMPORT 00062 #endif 00063 00064 00073 00078 #define CP_SP_UPGRADE 0x01 00079 00084 #define CP_SP_STOP_ALL_ON_UPGRADE 0x02 00085 00091 #define CP_SP_STOP_ALL_ON_INSTALL 0x04 00092 00097 #define CP_SP_RESTART_ACTIVE 0x08 00098 00102 /* ------------------------------------------------------------------------ 00103 * Data types 00104 * ----------------------------------------------------------------------*/ 00105 00122 /* Enumerations */ 00123 00133 enum cp_status_t { 00134 00139 CP_OK = 0, 00140 00142 CP_ERR_RESOURCE, 00143 00145 CP_ERR_UNKNOWN, 00146 00148 CP_ERR_IO, 00149 00151 CP_ERR_MALFORMED, 00152 00154 CP_ERR_CONFLICT, 00155 00157 CP_ERR_DEPENDENCY, 00158 00160 CP_ERR_RUNTIME 00161 00162 }; 00163 00175 enum cp_plugin_state_t { 00176 00181 CP_PLUGIN_UNINSTALLED, 00182 00190 CP_PLUGIN_INSTALLED, 00191 00202 CP_PLUGIN_RESOLVED, 00203 00213 CP_PLUGIN_STARTING, 00214 00224 CP_PLUGIN_STOPPING, 00225 00230 CP_PLUGIN_ACTIVE 00231 00232 }; 00233 00241 enum cp_log_severity_t { 00242 00244 CP_LOG_DEBUG, 00245 00247 CP_LOG_INFO, 00248 00250 CP_LOG_WARNING, 00251 00253 CP_LOG_ERROR 00254 00255 }; 00256 00260 /* Typedefs */ 00261 00268 00281 typedef struct cp_context_t cp_context_t; 00282 00291 00293 typedef struct cp_plugin_info_t cp_plugin_info_t; 00294 00296 typedef struct cp_plugin_import_t cp_plugin_import_t; 00297 00299 typedef struct cp_ext_point_t cp_ext_point_t; 00300 00302 typedef struct cp_extension_t cp_extension_t; 00303 00305 typedef struct cp_cfg_element_t cp_cfg_element_t; 00306 00308 typedef struct cp_plugin_runtime_t cp_plugin_runtime_t; 00309 00311 typedef enum cp_status_t cp_status_t; 00312 00314 typedef enum cp_plugin_state_t cp_plugin_state_t; 00315 00317 typedef enum cp_log_severity_t cp_log_severity_t; 00318 00327 00344 typedef void (*cp_plugin_listener_func_t)(const char *plugin_id, cp_plugin_state_t old_state, cp_plugin_state_t new_state, void *user_data); 00345 00358 typedef void (*cp_logger_func_t)(cp_log_severity_t severity, const char *msg, const char *apid, void *user_data); 00359 00369 typedef void (*cp_fatal_error_func_t)(const char *msg); 00370 00381 typedef int (*cp_run_func_t)(void *plugin_data); 00382 00386 /* Data structures */ 00387 00396 struct cp_plugin_info_t { 00397 00405 char *identifier; 00406 00413 char *name; 00414 00420 char *version; 00421 00429 char *provider_name; 00430 00438 char *plugin_path; 00439 00451 char *abi_bw_compatibility; 00452 00465 char *api_bw_compatibility; 00466 00475 char *req_cpluff_version; 00476 00478 unsigned int num_imports; 00479 00484 cp_plugin_import_t *imports; 00485 00493 char *runtime_lib_name; 00494 00501 char *runtime_funcs_symbol; 00502 00504 unsigned int num_ext_points; 00505 00511 cp_ext_point_t *ext_points; 00512 00514 unsigned int num_extensions; 00515 00521 cp_extension_t *extensions; 00522 00523 }; 00524 00530 struct cp_plugin_import_t { 00531 00536 char *plugin_id; 00537 00546 char *version; 00547 00557 int optional; 00558 }; 00559 00566 struct cp_ext_point_t { 00567 00573 cp_plugin_info_t *plugin; 00574 00580 char *local_id; 00581 00587 char *identifier; 00588 00595 char *name; 00596 00603 char *schema_path; 00604 }; 00605 00611 struct cp_extension_t { 00612 00618 cp_plugin_info_t *plugin; 00619 00625 char *ext_point_id; 00626 00632 char *local_id; 00633 00639 char *identifier; 00640 00647 char *name; 00648 00655 cp_cfg_element_t *configuration; 00656 }; 00657 00667 struct cp_cfg_element_t { 00668 00673 char *name; 00674 00676 unsigned int num_atts; 00677 00682 char **atts; 00683 00689 char *value; 00690 00692 cp_cfg_element_t *parent; 00693 00695 unsigned int index; 00696 00698 unsigned int num_children; 00699 00704 cp_cfg_element_t *children; 00705 }; 00706 00734 struct cp_plugin_runtime_t { 00735 00753 void *(*create)(cp_context_t *ctx); 00754 00775 int (*start)(void *data); 00776 00800 void (*stop)(void *data); 00801 00814 void (*destroy)(void *data); 00815 00816 }; 00817 00821 /* ------------------------------------------------------------------------ 00822 * Function declarations 00823 * ----------------------------------------------------------------------*/ 00824 00844 00851 CP_C_API const char *cp_get_version(void) CP_GCC_PURE; 00852 00860 CP_C_API const char *cp_get_host_type(void) CP_GCC_PURE; 00861 00874 00885 CP_C_API void cp_set_fatal_error_handler(cp_fatal_error_func_t error_handler); 00886 00902 CP_C_API cp_status_t cp_init(void); 00903 00914 CP_C_API void cp_destroy(void); 00915 00933 00947 CP_C_API cp_context_t * cp_create_context(cp_status_t *status); 00948 00956 CP_C_API void cp_destroy_context(cp_context_t *ctx) CP_GCC_NONNULL(1); 00957 00970 CP_C_API cp_status_t cp_register_pcollection(cp_context_t *ctx, const char *dir) CP_GCC_NONNULL(1, 2); 00971 00981 CP_C_API void cp_unregister_pcollection(cp_context_t *ctx, const char *dir) CP_GCC_NONNULL(1, 2); 00982 00990 CP_C_API void cp_unregister_pcollections(cp_context_t *ctx) CP_GCC_NONNULL(1); 00991 01004 01020 CP_C_API cp_status_t cp_register_logger(cp_context_t *ctx, cp_logger_func_t logger, void *user_data, cp_log_severity_t min_severity) CP_GCC_NONNULL(1, 2); 01021 01028 CP_C_API void cp_unregister_logger(cp_context_t *ctx, cp_logger_func_t logger) CP_GCC_NONNULL(1, 2); 01029 01037 CP_C_API void cp_log(cp_context_t *ctx, cp_log_severity_t severity, const char *msg) CP_GCC_NONNULL(1, 3); 01038 01046 CP_C_API int cp_is_logged(cp_context_t *ctx, cp_log_severity_t severity) CP_GCC_NONNULL(1); 01047 01059 01076 CP_C_API cp_plugin_info_t * cp_load_plugin_descriptor(cp_context_t *ctx, const char *path, cp_status_t *status) CP_GCC_NONNULL(1, 2); 01077 01094 CP_C_API cp_status_t cp_install_plugin(cp_context_t *ctx, cp_plugin_info_t *pi) CP_GCC_NONNULL(1, 2); 01095 01119 CP_C_API cp_status_t cp_scan_plugins(cp_context_t *ctx, int flags) CP_GCC_NONNULL(1); 01120 01133 CP_C_API cp_status_t cp_start_plugin(cp_context_t *ctx, const char *id) CP_GCC_NONNULL(1, 2); 01134 01147 CP_C_API cp_status_t cp_stop_plugin(cp_context_t *ctx, const char *id) CP_GCC_NONNULL(1, 2); 01148 01154 CP_C_API void cp_stop_plugins(cp_context_t *ctx) CP_GCC_NONNULL(1); 01155 01164 CP_C_API cp_status_t cp_uninstall_plugin(cp_context_t *ctx, const char *id) CP_GCC_NONNULL(1, 2); 01165 01172 CP_C_API void cp_uninstall_plugins(cp_context_t *ctx) CP_GCC_NONNULL(1); 01173 01186 01200 CP_C_API cp_plugin_info_t * cp_get_plugin_info(cp_context_t *ctx, const char *id, cp_status_t *status) CP_GCC_NONNULL(1); 01201 01214 CP_C_API cp_plugin_info_t ** cp_get_plugins_info(cp_context_t *ctx, cp_status_t *status, int *num) CP_GCC_NONNULL(1); 01215 01228 CP_C_API cp_ext_point_t ** cp_get_ext_points_info(cp_context_t *ctx, cp_status_t *status, int *num) CP_GCC_NONNULL(1); 01229 01243 CP_C_API cp_extension_t ** cp_get_extensions_info(cp_context_t *ctx, const char *extpt_id, cp_status_t *status, int *num) CP_GCC_NONNULL(1); 01244 01255 CP_C_API void cp_release_info(cp_context_t *ctx, void *info) CP_GCC_NONNULL(1, 2); 01256 01265 CP_C_API cp_plugin_state_t cp_get_plugin_state(cp_context_t *ctx, const char *id) CP_GCC_NONNULL(1, 2); 01266 01280 CP_C_API cp_status_t cp_register_plistener(cp_context_t *ctx, cp_plugin_listener_func_t listener, void *user_data) CP_GCC_NONNULL(1, 2); 01281 01289 CP_C_API void cp_unregister_plistener(cp_context_t *ctx, cp_plugin_listener_func_t listener) CP_GCC_NONNULL(1, 2); 01290 01304 CP_C_API cp_cfg_element_t * cp_lookup_cfg_element(cp_cfg_element_t *base, const char *path) CP_GCC_PURE CP_GCC_NONNULL(1, 2); 01305 01322 CP_C_API char * cp_lookup_cfg_value(cp_cfg_element_t *base, const char *path) CP_GCC_PURE CP_GCC_NONNULL(1, 2); 01323 01351 01365 CP_C_API cp_status_t cp_run_function(cp_context_t *ctx, cp_run_func_t runfunc) CP_GCC_NONNULL(1, 2); 01366 01376 CP_C_API void cp_run_plugins(cp_context_t *ctx) CP_GCC_NONNULL(1); 01377 01389 CP_C_API int cp_run_plugins_step(cp_context_t *ctx) CP_GCC_NONNULL(1); 01390 01405 CP_C_API void cp_set_context_args(cp_context_t *ctx, char **argv) CP_GCC_NONNULL(1, 2); 01406 01418 CP_C_API char **cp_get_context_args(cp_context_t *ctx, int *argc) CP_GCC_NONNULL(1); 01419 01432 01445 CP_C_API cp_status_t cp_define_symbol(cp_context_t *ctx, const char *name, void *ptr) CP_GCC_NONNULL(1, 2, 3); 01446 01477 CP_C_API void *cp_resolve_symbol(cp_context_t *ctx, const char *id, const char *name, cp_status_t *status) CP_GCC_NONNULL(1, 2, 3); 01478 01488 CP_C_API void cp_release_symbol(cp_context_t *ctx, const void *ptr) CP_GCC_NONNULL(1, 2); 01489 01493 #ifdef __cplusplus 01494 } 01495 #endif /*__cplusplus*/ 01496 01497 #endif /*CPLUFF_H_*/
Generated on Fri Apr 6 15:40:55 2007 for C-Pluff C API by 1.5.1