]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Add "dynlib" prefix to example output, log queries
authorPMunch <peterme@peterme.net>
Mon, 4 Nov 2019 15:03:04 +0000 (16:03 +0100)
committerPMunch <peterme@peterme.net>
Mon, 4 Nov 2019 15:03:04 +0000 (16:03 +0100)
This adds the "dynlib: " prefix to all messages created by the
`helloworld.c` dynamic library example.

It also adds logging of queries that pass through `operate`.

dynlibmod/examples/helloworld.c

index 3d7708af00f372a0d6a29fd781b7591428bdb294..d001b3ee88fafbb88bbe95ddfb5bebb95d4a2c58 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "../../config.h"
 #include "../../util/module.h"
+#include "../../sldns/parseutil.h"
 #include "../dynlibmod.h"
 
 /* Declare the EXPORT macro that expands to exporting the symbol for DLLs when
@@ -33,7 +34,7 @@ int reply_callback(struct query_info* qinfo,
 /* Init is called when the module is first loaded. It should be used to set up
  * the environment for this module and do any other initialisation required. */
 EXPORT void init(struct module_env* env, int id) {
-    log_info("Hello world from init");
+    log_info("dynlib: hello world from init");
     struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id];
     de->inplace_cb_register_wrapped(&reply_callback,
                                     inplace_cb_reply,
@@ -45,7 +46,7 @@ EXPORT void init(struct module_env* env, int id) {
 /* Deinit is run as the program is shutting down. It should be used to clean up
  * the environment and any left over data. */
 EXPORT void deinit(struct module_env* env, int id) {
-    log_info("Hello world from deinit");
+    log_info("dynlib: hello world from deinit");
     struct dynlibmod_env* de = (struct dynlibmod_env*) env->modinfo[id];
     de->inplace_cb_delete_wrapped(env, inplace_cb_reply, id);
     if (de->dyn_env != NULL) free(de->dyn_env);
@@ -55,7 +56,13 @@ EXPORT void deinit(struct module_env* env, int id) {
  * used to determine which direction in the module chain it came from. */
 EXPORT void operate(struct module_qstate* qstate, enum module_ev event,
                     int id, struct outbound_entry* entry) {
-    log_info("Hello world from operate");
+    log_info("dynlib: hello world from operate");
+    log_info("dynlib: incoming query: %s %s(%d) %s(%d)",
+            qstate->qinfo.qname,
+            sldns_lookup_by_id(sldns_rr_classes, qstate->qinfo.qclass)->name,
+            qstate->qinfo.qclass,
+            sldns_rr_descript(qstate->qinfo.qtype)->_name,
+            qstate->qinfo.qtype);
     if (event == module_event_new || event == module_event_pass) {
         qstate->ext_state[id] = module_wait_module;
         struct dynlibmod_env* env = qstate->env->modinfo[id];
@@ -65,7 +72,7 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event,
             ((int *)env->dyn_env)[1] = 102;
             ((int *)env->dyn_env)[2] = 192;
         } else {
-            log_err("Already has data!");
+            log_err("dynlib: already has data!");
             qstate->ext_state[id] = module_error;
         }
     } else if (event == module_event_moddone) {
@@ -80,13 +87,13 @@ EXPORT void operate(struct module_qstate* qstate, enum module_ev event,
  * mesh_attach_sub in services/mesh.h to see how this is done. */
 EXPORT void inform_super(struct module_qstate* qstate, int id,
                          struct module_qstate* super) {
-    log_info("Hello world from inform_super");
+    log_info("dynlib: hello world from inform_super");
 }
 
 /* Clear is called once a query is complete and the response has been sent
  * back. It is used to clear up any per-query allocations. */
 EXPORT void clear(struct module_qstate* qstate, int id) {
-    log_info("Hello world from clear");
+    log_info("dynlib: hello world from clear");
     struct dynlibmod_env* env = qstate->env->modinfo[id];
     if (env->dyn_env != NULL) {
         free(env->dyn_env);
@@ -97,7 +104,7 @@ EXPORT void clear(struct module_qstate* qstate, int id) {
 /* Get mem is called when Unbound is printing performance information. This
  * only happens explicitly and is only used to show memory usage to the user. */
 EXPORT size_t get_mem(struct module_env* env, int id) {
-    log_info("Hello world from get_mem");
+    log_info("dynlib: hello world from get_mem");
     return 0;
 }
 
@@ -108,10 +115,10 @@ int reply_callback(struct query_info* qinfo,
     struct edns_data* edns, struct edns_option** opt_list_out,
     struct comm_reply* repinfo, struct regional* region, int id,
     void* callback) {
-    log_info("Hello world from callback");
+    log_info("dynlib: hello world from callback");
     struct dynlibmod_env* env = qstate->env->modinfo[id];
     if (env->dyn_env != NULL) {
-        log_info("Numbers gotten from query: %d, %d, and %d",
+        log_info("dynlib: numbers gotten from query: %d, %d, and %d",
             ((int *)env->dyn_env)[0],
             ((int *)env->dyn_env)[1],
             ((int *)env->dyn_env)[2]);