mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
Dynamic library module is now only a thin wrapper that loads dynamic libraries and forwards all function calls directly to the loaded module. This meant adding get_mem and clear, and get_mem calls have been added in the expected places. Documentation has also been added to the example.conf and the unbound.conf manpage.
50 lines
1.6 KiB
C
50 lines
1.6 KiB
C
/*
|
|
* This is an example to show how dynamic libraries can be made to work with
|
|
* unbound. To build a .so file simply run:
|
|
* gcc -I../.. -shared -Wall -Werror -fpic -o helloworld.so helloworld.c
|
|
* And to build for windows, first make unbound with the --with-dynlibmod
|
|
* switch, then use this command:
|
|
* x86_64-w64-mingw32-gcc -m64 -I../.. -shared -Wall -Werror -fpic -o helloworld.dll helloworld.c -L../.. -l:libunbound.a
|
|
* to cross-compile a 64-bit Windows DLL.
|
|
*/
|
|
|
|
#include "../../config.h"
|
|
#include "../../util/module.h"
|
|
|
|
#ifdef HAVE_WINDOWS_H
|
|
#define EXPORT __declspec(dllexport)
|
|
#else
|
|
#define EXPORT
|
|
#endif
|
|
|
|
EXPORT void init(struct module_env* env, int id) {
|
|
log_info("Hello world from init");
|
|
}
|
|
|
|
EXPORT void deinit(struct module_env* env, int id) {
|
|
log_info("Hello world from deinit");
|
|
}
|
|
|
|
EXPORT void operate(struct module_qstate* qstate, enum module_ev event, int id, struct outbound_entry* entry) {
|
|
log_info("Hello world from operate");
|
|
if (event == module_event_new || event == module_event_pass) {
|
|
qstate->ext_state[id] = module_wait_module;
|
|
} else if (event == module_event_moddone) {
|
|
qstate->ext_state[id] = module_finished;
|
|
} else {
|
|
qstate->ext_state[id] = module_error;
|
|
}
|
|
}
|
|
|
|
EXPORT void inform_super(struct module_qstate* qstate, int id, struct module_qstate* super) {
|
|
log_info("Hello world from inform_super");
|
|
}
|
|
|
|
EXPORT void clear(struct module_qstate* qstate, int id) {
|
|
log_info("Hello world from clear");
|
|
}
|
|
|
|
EXPORT size_t get_mem(struct module_env* env, int id) {
|
|
log_info("Hello world from get_mem");
|
|
return 0;
|
|
}
|