#include <sys/types.h>
#include <stdarg.h>
#include "dynstuff.h"
#include "sessions.h"
Idź do kodu źródłowego tego pliku.
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 | 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)) |
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) |
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 (plugin_t *, const char *,...) |
void | queries_reconnect () |
const char * | query_name (const int id) |
struct 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 () |
Dokumentacja definicji
#define PLUGIN_DEFINE |
( |
|
x, |
|
|
|
y, |
|
|
|
z |
|
) |
| |
Wartość:static int x##_plugin_destroy(); \
.pclass = y, \
.destroy = x##_plugin_destroy, \
.theme_init = z \
}
#define PLUGIN_VAR_ADD |
( |
|
name, |
|
|
|
type, |
|
|
|
value, |
|
|
|
secret, |
|
|
|
notify |
|
) |
| { name, value, secret, type, notify } |
#define QUERY |
( |
|
x | ) |
int x(void *data, va_list ap) |
#define WATCHER_LINE |
( |
|
x | ) |
int x(int type, int fd, const char *watch, void *data) |
Dokumentacja definicji typów
typedef int(* plugin_destroy_func_t)(void) |
typedef int(* plugin_theme_init_func_t)(void) |
typedef int query_handler_func_t(void *data, va_list ap) |
Dokumentacja typów wyliczanych
- Wartości wyliczeń:
PLUGIN_ANY |
|
PLUGIN_GENERIC |
|
PLUGIN_PROTOCOL |
|
PLUGIN_UI |
|
PLUGIN_LOG |
|
PLUGIN_SCRIPTING |
|
PLUGIN_AUDIO |
|
PLUGIN_CODEC |
|
PLUGIN_CRYPT |
|
PLUGIN_ANY |
|
PLUGIN_GENERIC |
|
PLUGIN_PROTOCOL |
|
PLUGIN_UI |
|
PLUGIN_LOG |
|
PLUGIN_SCRIPTING |
|
PLUGIN_AUDIO |
|
PLUGIN_CODEC |
|
PLUGIN_CRYPT |
|
- Wartości wyliczeń:
WATCH_NONE |
|
WATCH_WRITE |
|
WATCH_READ |
|
WATCH_READ_LINE |
|
WATCH_WRITE_LINE |
|
WATCH_NONE |
|
WATCH_WRITE |
|
WATCH_READ |
|
WATCH_READ_LINE |
|
WATCH_WRITE_LINE |
|
Dokumentacja funkcji
have_plugin_of_class()
Check if we have loaded plugin from pclass
- Parametry
-
- Zwraca
- 1 - If such plugin was founded
else 0
int plugin_abi_version |
( |
int |
plugin_abi_ver, |
|
|
const char * |
plugin_name |
|
) |
| |
plugin_find()
Find plugin by name
- Parametry
-
- Zwraca
- plugin_t with given name, or NULL if not found.
int plugin_load |
( |
const char * |
name, |
|
|
int |
prio, |
|
|
int |
quiet |
|
) |
| |
int plugin_register |
( |
plugin_t * |
, |
|
|
int |
prio |
|
) |
| |
plugin_var_find()
it looks for given variable name in given plugin
- Parametry
-
pl | - plugin |
name | - variable name |
returns sequence number+1 of variable if found, else 0
void queries_reconnect |
( |
| ) |
|
void query_external_free |
( |
| ) |
|
query_external_free()
Free memory allocated by query_id() for not-known-in-core-query-names
- Do zrobienia:
- We don't destroy here queries which uses these ids >= QUERY_EXTERNAL.
It's quite correct in current api. But if you change it, you must clean after yourself.
query_name()
Get name of query, by passed id
- Zwraca
- If id is known for core (id < QUERY_EXTERNAL) than return it's name
- If it was ,,seen'' by query_id() than return name registered.
- else return NULL, and display info that smth really nasty happen.
watch_add()
Create new watch_t and add it on the beginning of watches list.
- Parametry
-
plugin | - plugin |
fd | - fd to watch data for. |
type | - type of watch. |
handler | - handler of watch. |
data | - data which be passed to handler. |
- Zwraca
- Created watch_t. if type is either WATCH_READ_LINE or WATCH_WRITE_LINE than also allocate memory for buffer
watch_add_session()
Create new session watch_t and add it on the beginning of watches list.
- Parametry
-
session | - session |
fd | - fd to watch data for |
type | - type of watch. |
handler | - handler of watch. |
- Zwraca
- If session is NULL, or session->plugin is NULL, it return NULL.
else created watch_t
watch_handle()
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.
- Parametry
-
- Do zrobienia:
- We only check for w->removed == -1, maybe instead change it to: w->removed != 0
void watch_handle_line |
( |
watch_t * |
w | ) |
|
int watch_handle_write |
( |
watch_t * |
w | ) |
|
int watch_timeout_set |
( |
watch_t * |
w, |
|
|
time_t |
timeout |
|
) |
| |
int watch_write_data |
( |
watch_t * |
w, |
|
|
const char * |
buf, |
|
|
int |
len |
|
) |
| |
Dokumentacja zmiennych