00001
00013 #ifndef BORIS_PLUGIN_H
00014 #define BORIS_PLUGIN_H
00015
00019 #define PLUGIN_API 1
00020
00025 struct plugin_basic_class {
00026 unsigned api_version;
00027 char *class_name;
00028 int (*initialize)(void);
00029 int (*shutdown)(void);
00030 };
00031
00035 struct plugin_factory_class {
00036 struct plugin_basic_class base_class;
00037 size_t instance_size;
00038 void *(*alloc)(const struct plugin_factory_class *class);
00039 void (*destroy)(void *instance);
00040 };
00041
00046 struct plugin_logging_interface {
00047
00048 void (*log)(int priority, const char *domain, const char *fmt, ...);
00049
00050 void (*set_level)(int level);
00051 };
00052
00056 struct plugin_room_interface {
00060 struct room *(*get)(unsigned room_id);
00062 void (*put)(struct room *r);
00066 int (*attr_set)(struct room *r, const char *name, const char *value);
00072 const char *(*attr_get)(struct room *r, const char *name);
00076 int (*save)(struct room *r);
00077 };
00078
00079 struct plugin_fdb_interface {
00080 int (*domain_init)(const char *domain);
00081 struct fdb_write_handle *(*write_begin)(const char *domain, const char *id);
00082 struct fdb_write_handle *(*write_begin_uint)(const char *domain, unsigned id);
00083 int (*write_pair)(struct fdb_write_handle *h, const char *name, const char *value_str);
00084 int (*write_format)(struct fdb_write_handle *h, const char *name, const char *value_fmt, ...);
00085 int (*write_end)(struct fdb_write_handle *h);
00086 void (*write_abort)(struct fdb_write_handle *h);
00087 struct fdb_read_handle *(*read_begin)(const char *domain, const char *id);
00088 struct fdb_read_handle *(*read_begin_uint)(const char *domain, unsigned id);
00089 int (*read_next)(struct fdb_read_handle *h, const char **name, const char **value);
00090 int (*read_end)(struct fdb_read_handle *h);
00091 struct fdb_iterator *(*iterator_begin)(const char *domain);
00092 const char *(*iterator_next)(struct fdb_iterator *it);
00093 void (*iterator_end)(struct fdb_iterator *it);
00094 };
00095
00096 struct plugin_character_interface {
00101 struct character *(*get)(unsigned character_id);
00103 void (*put)(struct character *ch);
00108 struct character *(*new)(void);
00112 int (*attr_set)(struct character *ch, const char *name, const char *value);
00118 const char *(*attr_get)(struct character *ch, const char *name);
00122 int (*save)(struct character *ch);
00123 };
00124
00125 struct plugin_channel_interface {
00126 int (*join)(struct channel *ch, struct channel_member *cm);
00127 void (*part)(struct channel *ch, struct channel_member *cm);
00131 struct channel *(*public)(const char *name);
00132 int (*broadcast)(struct channel *ch, struct channel_member **exclude_list, unsigned exclude_list_len, const char *fmt, ...);
00133 };
00134 #endif