Lines Matching refs:srv

79 static int plugins_register(server *srv, plugin *p) {  in plugins_register()  argument
81 if (0 == srv->plugins.size) { in plugins_register()
82 srv->plugins.size = 4; in plugins_register()
83 srv->plugins.ptr = malloc(srv->plugins.size * sizeof(*ps)); in plugins_register()
84 srv->plugins.used = 0; in plugins_register()
85 } else if (srv->plugins.used == srv->plugins.size) { in plugins_register()
86 srv->plugins.size += 4; in plugins_register()
87 srv->plugins.ptr = realloc(srv->plugins.ptr, srv->plugins.size * sizeof(*ps)); in plugins_register()
90 ps = srv->plugins.ptr; in plugins_register()
91 ps[srv->plugins.used++] = p; in plugins_register()
103 int plugins_load(server *srv) { in plugins_load() argument
108 log_error_write(srv, __FILE__, __LINE__, "ss", #x, "plugin init failed" ); \ in plugins_load()
112 plugins_register(srv, p); in plugins_load()
119 int plugins_load(server *srv) { in plugins_load() argument
125 for (i = 0; i < srv->srvconf.modules->used; i++) { in plugins_load()
126 data_string *d = (data_string *)srv->srvconf.modules->data[i]; in plugins_load()
130 if (buffer_is_equal(d->value, ((data_string *) srv->srvconf.modules->data[j])->value)) { in plugins_load()
131 …log_error_write(srv, __FILE__, __LINE__, "sbs", "Cannot load plugin", d->value, "more than once, p… in plugins_load()
136 buffer_copy_string_buffer(srv->tmp_buf, srv->srvconf.modules_dir); in plugins_load()
138 buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN("/")); in plugins_load()
139 buffer_append_string(srv->tmp_buf, modules); in plugins_load()
141 buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN(".dll")); in plugins_load()
143 buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN(".so")); in plugins_load()
148 if (NULL == (p->lib = LoadLibrary(srv->tmp_buf->ptr))) { in plugins_load()
159 log_error_write(srv, __FILE__, __LINE__, "ssb", "LoadLibrary() failed", in plugins_load()
160 lpMsgBuf, srv->tmp_buf); in plugins_load()
168 if (NULL == (p->lib = dlopen(srv->tmp_buf->ptr, RTLD_NOW|RTLD_GLOBAL))) { in plugins_load()
169 log_error_write(srv, __FILE__, __LINE__, "sbs", "dlopen() failed for:", in plugins_load()
170 srv->tmp_buf, dlerror()); in plugins_load()
178 buffer_reset(srv->tmp_buf); in plugins_load()
179 buffer_copy_string(srv->tmp_buf, modules); in plugins_load()
180 buffer_append_string_len(srv->tmp_buf, CONST_STR_LEN("_plugin_init")); in plugins_load()
183 init = GetProcAddress(p->lib, srv->tmp_buf->ptr); in plugins_load()
196 … log_error_write(srv, __FILE__, __LINE__, "sbs", "getprocaddress failed:", srv->tmp_buf, lpMsgBuf); in plugins_load()
204 init = (int (*)(plugin *))(intptr_t)dlsym(p->lib, srv->tmp_buf->ptr); in plugins_load()
206 *(void **)(&init) = dlsym(p->lib, srv->tmp_buf->ptr); in plugins_load()
209 log_error_write(srv, __FILE__, __LINE__, "s", error); in plugins_load()
217 log_error_write(srv, __FILE__, __LINE__, "ss", modules, "plugin init failed" ); in plugins_load()
223 log_error_write(srv, __FILE__, __LINE__, "ss", modules, "plugin loaded" ); in plugins_load()
225 plugins_register(srv, p); in plugins_load()
233 handler_t plugins_call_##y(server *srv, connection *con) {\
236 if (!srv->plugin_slots) return HANDLER_GO_ON;\
237 slot = ((plugin ***)(srv->plugin_slots))[x];\
239 for (j = 0; j < srv->plugins.used && slot[j]; j++) { \
242 switch(r = p->y(srv, con, p->data)) {\
252 log_error_write(srv, __FILE__, __LINE__, "sbs", #x, p->name, "unknown state");\
281 handler_t plugins_call_##y(server *srv) {\ in PLUGIN_TO_SLOT()
284 if (!srv->plugin_slots) return HANDLER_GO_ON;\ in PLUGIN_TO_SLOT()
285 slot = ((plugin ***)(srv->plugin_slots))[x];\ in PLUGIN_TO_SLOT()
287 for (j = 0; j < srv->plugins.used && slot[j]; j++) { \ in PLUGIN_TO_SLOT()
290 switch(r = p->y(srv, p->data)) {\ in PLUGIN_TO_SLOT()
300 log_error_write(srv, __FILE__, __LINE__, "sbsd", #x, p->name, "unknown state:", r);\ in PLUGIN_TO_SLOT()
327 handler_t plugins_call_handle_fdevent(server *srv, const fd_conn *fdc) {
331 ps = srv->plugins.ptr;
333 for (i = 0; i < srv->plugins.used; i++) {
337 switch(r = p->handle_fdevent(srv, fdc, p->data)) {
346 log_error_write(srv, __FILE__, __LINE__, "d", r);
363 handler_t plugins_call_init(server *srv) {
367 ps = srv->plugins.ptr;
371 srv->plugin_slots = calloc(PLUGIN_FUNC_SIZEOF, sizeof(ps));
373 for (i = 0; i < srv->plugins.used; i++) {
381 plugin **slot = ((plugin ***)(srv->plugin_slots))[x]; \
383 slot = calloc(srv->plugins.used, sizeof(*slot));\
384 ((plugin ***)(srv->plugin_slots))[x] = slot; \
386 for (j = 0; j < srv->plugins.used; j++) { \
412 log_error_write(srv, __FILE__, __LINE__, "sb",
421 log_error_write(srv, __FILE__, __LINE__, "sb",
433 void plugins_free(server *srv) { in plugins_free() argument
435 plugins_call_cleanup(srv); in plugins_free()
437 for (i = 0; i < srv->plugins.used; i++) { in plugins_free()
438 plugin *p = ((plugin **)srv->plugins.ptr)[i]; in plugins_free()
443 for (i = 0; srv->plugin_slots && i < PLUGIN_FUNC_SIZEOF; i++) { in plugins_free()
444 plugin **slot = ((plugin ***)(srv->plugin_slots))[i]; in plugins_free()
449 free(srv->plugin_slots); in plugins_free()
450 srv->plugin_slots = NULL; in plugins_free()
452 free(srv->plugins.ptr); in plugins_free()
453 srv->plugins.ptr = NULL; in plugins_free()
454 srv->plugins.used = 0; in plugins_free()