#include <sys/types.h>#include <stdarg.h>#include "dynstuff.h"#include "sessions.h"Go to the source code of this file.
Data Structures | |
| struct | plugins_params_t |
| struct | protocol_plugin_priv |
| struct | plugin |
| struct | queryx |
| struct | watch |
Defines | |
| #define | EKG_ABI_VER 4729 |
| #define | EXPORT __attribute__ ((visibility("default"))) |
| #define | PLUGIN_VAR_ADD(name, type, value, secret, notify) { name, value, secret, type, notify } |
| #define | PLUGIN_VAR_END() { NULL, NULL, 0, -1, NULL } |
| #define | PLUGIN_CHECK_VER(name) { if (!plugin_abi_version(EKG_ABI_VER, name)) return -1; } |
| #define | PLUGIN_DEFINE(x, y, z) |
| #define | QUERY(x) int x(void *data, va_list ap) |
| #define | WATCHER(x) int x(int type, int fd, watch_type_t watch, void *data) |
| #define | WATCHER_LINE(x) int x(int type, int fd, const char *watch, void *data) |
| #define | WATCHER_SESSION(x) int x(int type, int fd, watch_type_t watch, session_t *s) |
| #define | WATCHER_SESSION_LINE(x) int x(int type, int fd, const char *watch, session_t *s) |
| #define | watch_add_line(p, fd, type, handler, data) watch_add(p, fd, type, (watcher_handler_func_t *) (handler), data) |
| #define | watch_add_session_line(s, fd, type, handler) watch_add_session(s, fd, type, (watcher_session_handler_func_t *) (handler)) |
Typedefs | |
| typedef int(*) | plugin_destroy_func_t (void) |
| typedef int(*) | plugin_theme_init_func_t (void) |
| typedef void( | plugin_notify_func_t )(session_t *, const char *) |
| typedef plugin | plugin_t |
| typedef int | query_handler_func_t (void *data, va_list ap) |
| typedef queryx | query_t |
| typedef int | watcher_handler_func_t (int type, int fd, watch_type_t watch, void *data) |
| typedef int | watcher_session_handler_func_t (int type, int fd, watch_type_t watch, session_t *s) |
| typedef watch | watch_t |
| typedef void * | watch_handler_func_t |
Enumerations | |
| enum | plugin_class_t { PLUGIN_ANY = 0, PLUGIN_GENERIC, PLUGIN_PROTOCOL, PLUGIN_UI, PLUGIN_LOG, PLUGIN_SCRIPTING, PLUGIN_AUDIO, PLUGIN_CODEC, PLUGIN_CRYPT } |
| enum | watch_type_t { WATCH_NONE = 0, WATCH_WRITE = 1, WATCH_READ = 2, WATCH_READ_LINE = 4, WATCH_WRITE_LINE = 8 } |
Functions | |
| int | plugin_abi_version (int plugin_abi_ver, const char *plugin_name) |
| int | plugin_load (const char *name, int prio, int quiet) |
| int | plugin_unload (plugin_t *) |
| int | plugin_register (plugin_t *, int prio) |
| int | plugin_unregister (plugin_t *) |
| plugin_t * | plugin_find (const char *name) |
| plugin_t * | plugin_find_uid (const char *uid) |
| int | have_plugin_of_class (plugin_class_t pclass) |
| int | plugin_var_add (plugin_t *pl, const char *name, int type, const char *value, int secret, plugin_notify_func_t *notify) |
| int | plugin_var_find (plugin_t *pl, const char *name) |
| void | plugins_unlink (plugin_t *pl) |
| query_t * | query_connect (plugin_t *plugin, const char *name, query_handler_func_t *handler, void *data) |
| query_t * | query_connect_id (plugin_t *plugin, const int id, query_handler_func_t *handler, void *data) |
| int | query_free (query_t *q) |
| void | query_external_free () |
| int | query_emit_id (plugin_t *, const int,...) |
| int | query_emit_id_ro (plugin_t *plugin, const int id,...) |
| int | query_emit (plugin_t *, const char *,...) |
| void | queries_reconnect () |
| const char * | query_name (const int id) |
| query_def * | query_struct (const int id) |
| int | watch_write (watch_t *w, const char *format,...) |
| int | watch_write_data (watch_t *w, const char *buf, int len) |
| watch_t * | watch_find (plugin_t *plugin, int fd, watch_type_t type) |
| void | watch_free (watch_t *w) |
| int | watch_timeout_set (watch_t *w, time_t timeout) |
| watch_t * | watch_add (plugin_t *plugin, int fd, watch_type_t type, watcher_handler_func_t *handler, void *data) |
| watch_t * | watch_add_session (session_t *session, int fd, watch_type_t type, watcher_session_handler_func_t *handler) |
| int | watch_remove (plugin_t *plugin, int fd, watch_type_t type) |
| void | watch_handle (watch_t *w) |
| void | watch_handle_line (watch_t *w) |
| int | watch_handle_write (watch_t *w) |
| int | ekg2_dlinit () |
Variables | |
| plugin_t * | plugins |
| list_t | watches |
| query_t * | queries [] |
| #define EKG_ABI_VER 4729 |
| #define EXPORT __attribute__ ((visibility("default"))) |
| #define PLUGIN_DEFINE | ( | x, | |||
| y, | |||||
| z | ) |
Value:
static int x##_plugin_destroy(); \ \ plugin_t x##_plugin = { \ .name = #x, \ .pclass = y, \ .destroy = x##_plugin_destroy, \ .theme_init = z \ }
| #define PLUGIN_VAR_END | ( | ) | { NULL, NULL, 0, -1, NULL } |
| #define QUERY | ( | x | ) | int x(void *data, va_list ap) |
| #define watch_add_line | ( | p, | |||
| fd, | |||||
| type, | |||||
| handler, | |||||
| data | ) | watch_add(p, fd, type, (watcher_handler_func_t *) (handler), data) |
| #define watch_add_session_line | ( | s, | |||
| fd, | |||||
| type, | |||||
| handler | ) | watch_add_session(s, fd, type, (watcher_session_handler_func_t *) (handler)) |
| #define WATCHER | ( | x | ) | int x(int type, int fd, watch_type_t watch, void *data) |
| #define WATCHER_SESSION | ( | x | ) | int x(int type, int fd, watch_type_t watch, session_t *s) |
| typedef int(*) plugin_destroy_func_t(void) |
| typedef void( plugin_notify_func_t)(session_t *, const char *) |
| typedef int(*) plugin_theme_init_func_t(void) |
| typedef int query_handler_func_t(void *data, va_list ap) |
| typedef void* watch_handler_func_t |
| typedef int watcher_handler_func_t(int type, int fd, watch_type_t watch, void *data) |
| typedef int watcher_session_handler_func_t(int type, int fd, watch_type_t watch, session_t *s) |
| enum plugin_class_t |
| enum watch_type_t |
| int ekg2_dlinit | ( | ) |
| int have_plugin_of_class | ( | plugin_class_t | pclass | ) |
Check if we have loaded plugin from pclass
| pclass |
| int plugin_abi_version | ( | int | plugin_abi_ver, | |
| const char * | plugin_name | |||
| ) |
| plugin_t* plugin_find | ( | const char * | name | ) |
Find plugin by name
| name | - name of plugin_t |
| plugin_t* plugin_find_uid | ( | const char * | uid | ) |
Find PLUGIN_PROTOCOL plugin which can handle uid
| int plugin_load | ( | const char * | name, | |
| int | prio, | |||
| int | quiet | |||
| ) |
| int plugin_register | ( | plugin_t * | , | |
| int | prio | |||
| ) |
| int plugin_unload | ( | plugin_t * | ) |
| int plugin_unregister | ( | plugin_t * | ) |
| int plugin_var_add | ( | plugin_t * | pl, | |
| const char * | name, | |||
| int | type, | |||
| const char * | value, | |||
| int | secret, | |||
| plugin_notify_func_t * | notify | |||
| ) |
| int plugin_var_find | ( | plugin_t * | pl, | |
| const char * | name | |||
| ) |
it looks for given variable name in given plugin
| pl | - plugin | |
| name | - variable name |
| void plugins_unlink | ( | plugin_t * | pl | ) |
| void queries_reconnect | ( | ) |
Reconnect (resort) all queries, e.g. after plugin prio change.
| query_t* query_connect | ( | plugin_t * | plugin, | |
| const char * | name, | |||
| query_handler_func_t * | handler, | |||
| void * | data | |||
| ) |
| query_t* query_connect_id | ( | plugin_t * | plugin, | |
| const int | id, | |||
| query_handler_func_t * | handler, | |||
| void * | data | |||
| ) |
| int query_emit | ( | plugin_t * | , | |
| const char * | , | |||
| ... | ||||
| ) |
| int query_emit_id | ( | plugin_t * | , | |
| const | int, | |||
| ... | ||||
| ) |
| int query_emit_id_ro | ( | plugin_t * | plugin, | |
| const int | id, | |||
| ... | ||||
| ) |
Like query_emit_id() It was created to avoid manual strdup()'s && xmemdup()'s in code. where stuff is read-only (we don't want query handlers to replace params) [scripts for instance, but cause scripts don't work, this function is not finished :>]
| void query_external_free | ( | ) |
Free memory allocated by query_id() for not-known-in-core-query-names
| int query_free | ( | query_t * | q | ) |
| const char* query_name | ( | const int | id | ) |
Get name of query, by passed id
| struct query_def* query_struct | ( | const int | id | ) |
Get struct of query, by passed id
| watch_t* watch_add | ( | plugin_t * | plugin, | |
| int | fd, | |||
| watch_type_t | type, | |||
| watcher_handler_func_t * | handler, | |||
| void * | data | |||
| ) |
Create new watch_t and add it on the beginning of watches list.
| plugin | - plugin | |
| fd | - fd to watch data for. | |
| type | - type of watch. | |
| handler | - handler of watch. | |
| data | - data which be passed to handler. |
| watch_t* watch_add_session | ( | session_t * | session, | |
| int | fd, | |||
| watch_type_t | type, | |||
| watcher_session_handler_func_t * | handler | |||
| ) |
Create new session watch_t and add it on the beginning of watches list.
| session | - session | |
| fd | - fd to watch data for | |
| type | - type of watch. | |
| handler | - handler of watch. |
| watch_t* watch_find | ( | plugin_t * | plugin, | |
| int | fd, | |||
| watch_type_t | type | |||
| ) |
| void watch_free | ( | watch_t * | w | ) |
| void watch_handle | ( | watch_t * | w | ) |
Handler for watches with type: WATCH_READ or WATCH_WRITE
Mark watch with w->removed = -1, to indicate that watch is in use. And it shouldn't be executed again. [If watch can or even must be executed twice from ekg_loop() than you must change w->removed by yourself.]
If handler of watch return -1 or watch was removed inside function [by watch_remove() or watch_free()]. Than it'll be removed.
ELSE Update w->started field to current time.
| w | - watch_t to handler |
| void watch_handle_line | ( | watch_t * | w | ) |
| int watch_handle_write | ( | watch_t * | w | ) |
| int watch_remove | ( | plugin_t * | plugin, | |
| int | fd, | |||
| watch_type_t | type | |||
| ) |
| int watch_timeout_set | ( | watch_t * | w, | |
| time_t | timeout | |||
| ) |
| int watch_write | ( | watch_t * | w, | |
| const char * | format, | |||
| ... | ||||
| ) |
| int watch_write_data | ( | watch_t * | w, | |
| const char * | buf, | |||
| int | len | |||
| ) |
1.5.1