#include <sys/types.h>
#include <stdarg.h>
#include "dynstuff.h"
#include "sessions.h"
Idź do kodu źródłowego tego pliku.
Struktury danych | |
struct | plugins_params_t |
struct | plugin |
struct | queryx |
struct | watch |
Definicje | |
#define | EKG_ABI_VER 4921 |
#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 | watch_add_line(p, fd, type, handler, data) watch_add(p, fd, type, (watcher_handler_func_t *) (handler), data) |
Definicje typów | |
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 struct plugin | plugin_t |
typedef int | query_handler_func_t (void *data, va_list ap) |
typedef struct queryx | query_t |
typedef int | watcher_handler_func_t (int type, int fd, watch_type_t watch, void *data) |
typedef struct watch | watch_t |
typedef void * | watch_handler_func_t |
Wyliczenia | |
enum | plugin_class_t { PLUGIN_ANY = 0, PLUGIN_GENERIC, PLUGIN_PROTOCOL, PLUGIN_UI, PLUGIN_LOG, PLUGIN_SCRIPTING, PLUGIN_AUDIO, PLUGIN_CODEC, PLUGIN_CRYPT, 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, WATCH_NONE = 0, WATCH_WRITE = 1, WATCH_READ = 2, WATCH_READ_LINE = 4, WATCH_WRITE_LINE = 8 } |
Funkcje | |
int | plugin_abi_version (int plugin_abi_ver, const char *plugin_name) |
void | plugin_load (const char *name) |
void | plugin_unload (plugin_t *p) |
plugin_t * | remote_plugin_load (const char *name, int prio) |
int | plugin_register (plugin_t *, int prio) |
int | plugin_unregister (plugin_t *) |
void | remote_plugins_destroy () |
plugin_t * | plugin_find (const char *name) |
query_t * | query_connect_id (plugin_t *plugin, const int id, query_handler_func_t *handler, void *data) |
int | query_emit_id (plugin_t *, const int,...) |
void | queries_destroy () |
int | watch_write (watch_t *w, const char *buf, int len) |
void | watch_free (watch_t *w) |
watch_t * | watch_add (plugin_t *plugin, int fd, watch_type_t type, watcher_handler_func_t *handler, void *data) |
int | watch_remove (plugin_t *plugin, int fd, watch_type_t type) |
void | watch_handle (watch_t *w) |
void | watches_destroy () |
Zmienne | |
plugin_t * | plugins |
list_t | watches |
plugin_t * | ui_plugin |
int | ekg_watches_removed |
#define EKG_ABI_VER 4921 |
#define EXPORT __attribute__ ((visibility("default"))) |
#define PLUGIN_DEFINE | ( | x, | ||
y, | ||||
z | ||||
) |
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 WATCHER | ( | x | ) | int x(int type, int fd, watch_type_t watch, void *data) |
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) |
enum plugin_class_t |
enum watch_type_t |
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 |
void plugin_load | ( | const char * | name | ) |
int plugin_register | ( | plugin_t * | , | |
int | prio | |||
) |
void plugin_unload | ( | plugin_t * | p | ) |
int plugin_unregister | ( | plugin_t * | ) |
void queries_destroy | ( | ) |
query_t* query_connect_id | ( | plugin_t * | plugin, | |
const int | id, | |||
query_handler_func_t * | handler, | |||
void * | data | |||
) |
int query_emit_id | ( | plugin_t * | , | |
const | int, | |||
... | ||||
) |
plugin_t* remote_plugin_load | ( | const char * | name, | |
int | prio | |||
) |
void remote_plugins_destroy | ( | ) |
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. |
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 |
int watch_remove | ( | plugin_t * | plugin, | |
int | fd, | |||
watch_type_t | type | |||
) |
int watch_write | ( | watch_t * | w, | |
const char * | buf, | |||
int | len | |||
) |
void watches_destroy | ( | ) |