GNUnet  0.11.x
Data Structures | Macros | Functions | Variables
plugin_rest_config.c File Reference
#include "platform.h"
#include "gnunet_rest_plugin.h"
#include <gnunet_rest_lib.h>
#include <gnunet_util_lib.h>
#include <jansson.h>
Include dependency graph for plugin_rest_config.c:

Go to the source code of this file.

Data Structures

struct  Plugin
 Handle for a plugin. More...
 
struct  RequestHandle
 The request handle. More...
 

Macros

#define GNUNET_REST_API_NS_CONFIG   "/config"
 

Functions

static void cleanup_handle (struct RequestHandle *handle)
 Cleanup request handle. More...
 
static void do_error (void *cls)
 Task run on shutdown. More...
 
static void add_sections (void *cls, const char *section, const char *option, const char *value)
 
static void add_section_contents (void *cls, const char *section, const char *option, const char *value)
 
static void get_cont (struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
 Handle rest request. More...
 
struct GNUNET_CONFIGURATION_Handleset_value (struct GNUNET_CONFIGURATION_Handle *config, const char *section, const char *option, json_t *value)
 
static void set_cont (struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
 Handle REST POST request. More...
 
static void options_cont (struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
 Handle rest request. More...
 
static enum GNUNET_GenericReturnValue rest_config_process_request (struct GNUNET_REST_RequestHandle *conndata_handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
 Function processing the REST call. More...
 
void * libgnunet_plugin_rest_config_init (void *cls)
 Entry point for the plugin. More...
 
void * libgnunet_plugin_rest_config_done (void *cls)
 Exit point from the plugin. More...
 

Variables

const struct GNUNET_CONFIGURATION_Handlecfg
 Handle to our configuration. More...
 
static struct RequestHandlerequests_head
 DLL. More...
 
static struct RequestHandlerequests_tail
 DLL. More...
 

Macro Definition Documentation

◆ GNUNET_REST_API_NS_CONFIG

#define GNUNET_REST_API_NS_CONFIG   "/config"

Function Documentation

◆ cleanup_handle()

static void cleanup_handle ( struct RequestHandle handle)
static

Cleanup request handle.

Parameters
handleHandle to clean up

Definition at line 101 of file plugin_rest_config.c.

References GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, and RequestHandle::url.

Referenced by do_error(), get_cont(), libgnunet_plugin_rest_config_done(), options_cont(), rest_config_process_request(), and set_cont().

102 {
103  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n");
104  if (NULL != handle->url)
105  GNUNET_free (handle->url);
108  handle);
109  GNUNET_free (handle);
110 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static struct RequestHandle * requests_head
DLL.
static struct RequestHandle * requests_tail
DLL.
#define GNUNET_log(kind,...)
#define GNUNET_free(ptr)
Wrapper around free.
char * url
The url.
Here is the caller graph for this function:

◆ do_error()

static void do_error ( void *  cls)
static

Task run on shutdown.

Cleans up everything.

Parameters
clsunused
tcscheduler context

Definition at line 120 of file plugin_rest_config.c.

References cleanup_handle(), GNUNET_REST_create_response(), handle, RequestHandle::proc, RequestHandle::proc_cls, and RequestHandle::response_code.

Referenced by get_cont(), and set_cont().

121 {
122  struct RequestHandle *handle = cls;
123  struct MHD_Response *resp;
124 
125  resp = GNUNET_REST_create_response (NULL);
126  handle->proc (handle->proc_cls, resp, handle->response_code);
127  cleanup_handle (handle);
128 }
GNUNET_REST_ResultProcessor proc
The plugin result processor.
void * proc_cls
The closure of the result processor.
The request handle.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
int response_code
Response code.
struct MHD_Response * GNUNET_REST_create_response(const char *data)
Create REST MHD response.
Definition: rest.c:57
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ add_sections()

static void add_sections ( void *  cls,
const char *  section,
const char *  option,
const char *  value 
)
static

Definition at line 132 of file plugin_rest_config.c.

Referenced by get_cont().

136 {
137  json_t *sections_obj = cls;
138  json_t *sec_obj;
139 
140  sec_obj = json_object_get (sections_obj, section);
141  if (NULL != sec_obj)
142  {
143  json_object_set_new (sec_obj, option, json_string (value));
144  return;
145  }
146  sec_obj = json_object ();
147  json_object_set_new (sec_obj, option, json_string (value));
148  json_object_set_new (sections_obj, section, sec_obj);
149 }
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
Here is the caller graph for this function:

◆ add_section_contents()

static void add_section_contents ( void *  cls,
const char *  section,
const char *  option,
const char *  value 
)
static

Definition at line 153 of file plugin_rest_config.c.

Referenced by get_cont().

157 {
158  json_t *section_obj = cls;
159 
160  json_object_set_new (section_obj, option, json_string (value));
161 }
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
Here is the caller graph for this function:

◆ get_cont()

static void get_cont ( struct GNUNET_REST_RequestHandle con_handle,
const char *  url,
void *  cls 
)
static

Handle rest request.

Parameters
handlethe lookup handle

Definition at line 170 of file plugin_rest_config.c.

References add_section_contents(), add_sections(), cleanup_handle(), do_error(), GNUNET_CONFIGURATION_iterate(), GNUNET_CONFIGURATION_iterate_section_values(), GNUNET_free, GNUNET_REST_API_NS_CONFIG, GNUNET_REST_create_response(), GNUNET_SCHEDULER_add_now(), handle, RequestHandle::proc, RequestHandle::proc_cls, response, RequestHandle::response_code, result, section, and RequestHandle::url.

Referenced by rest_config_process_request().

173 {
174  struct MHD_Response *resp;
175  struct RequestHandle *handle = cls;
176  const char *section;
177  char *response;
178  json_t *result;
179 
180  if (strlen (GNUNET_REST_API_NS_CONFIG) > strlen (handle->url))
181  {
182  handle->response_code = MHD_HTTP_BAD_REQUEST;
184  return;
185  }
186  if (strlen (GNUNET_REST_API_NS_CONFIG) == strlen (handle->url))
187  {
188  result = json_object ();
190  }
191  else
192  {
193  result = json_object ();
194  section = &handle->url[strlen (GNUNET_REST_API_NS_CONFIG) + 1];
196  section,
198  result);
199  }
200  response = json_dumps (result, 0);
201  resp = GNUNET_REST_create_response (response);
202  MHD_add_response_header (resp, "Content-Type", "application/json");
203  handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
204  cleanup_handle (handle);
205  GNUNET_free (response);
206  json_decref (result);
207 }
#define GNUNET_REST_API_NS_CONFIG
void GNUNET_CONFIGURATION_iterate_section_values(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, GNUNET_CONFIGURATION_Iterator iter, void *iter_cls)
Iterate over values of a section in the configuration.
void GNUNET_CONFIGURATION_iterate(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CONFIGURATION_Iterator iter, void *iter_cls)
Iterate over all options in the configuration.
const struct GNUNET_CONFIGURATION_Handle * cfg
Handle to our configuration.
GNUNET_REST_ResultProcessor proc
The plugin result processor.
void * proc_cls
The closure of the result processor.
The request handle.
static char * section
Name of the section.
Definition: gnunet-config.c:33
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1296
static void do_error(void *cls)
Task run on shutdown.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
static int result
Global testing status.
static void add_section_contents(void *cls, const char *section, const char *option, const char *value)
int response_code
Response code.
struct MHD_Response * GNUNET_REST_create_response(const char *data)
Create REST MHD response.
Definition: rest.c:57
static struct MHD_Response * response
Our canonical response.
static void add_sections(void *cls, const char *section, const char *option, const char *value)
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
#define GNUNET_free(ptr)
Wrapper around free.
char * url
The url.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_value()

struct GNUNET_CONFIGURATION_Handle* set_value ( struct GNUNET_CONFIGURATION_Handle config,
const char *  section,
const char *  option,
json_t *  value 
)

Definition at line 211 of file plugin_rest_config.c.

References config, GNUNET_CONFIGURATION_set_value_number(), and GNUNET_CONFIGURATION_set_value_string().

Referenced by set_cont().

215 {
216  if (json_is_string (value))
218  json_string_value (value));
219  else if (json_is_number (value))
221  json_integer_value (value));
222  else if (json_is_null (value))
224  else if (json_is_true (value))
226  else if (json_is_false (value))
228  else
229  return NULL;
230  return config; // for error handling (0 -> success, 1 -> error)
231 }
void GNUNET_CONFIGURATION_set_value_number(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, unsigned long long number)
Set a configuration value that should be a number.
static char * section
Name of the section.
Definition: gnunet-config.c:33
static char * value
Value of the record to add/remove.
static char * option
Name of the option.
Definition: gnunet-config.c:38
static const struct GNUNET_CONFIGURATION_Handle * config
void GNUNET_CONFIGURATION_set_value_string(struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, const char *value)
Set a configuration value that should be a string.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_cont()

static void set_cont ( struct GNUNET_REST_RequestHandle con_handle,
const char *  url,
void *  cls 
)
static

Handle REST POST request.

Parameters
handlethe lookup handle

Definition at line 240 of file plugin_rest_config.c.

References cleanup_handle(), config_file, GNUNET_REST_RequestHandle::data, GNUNET_REST_RequestHandle::data_size, DIR_SEPARATOR_STR, do_error(), getenv(), GNUNET_asprintf(), GNUNET_CONFIGURATION_dup(), GNUNET_CONFIGURATION_write(), GNUNET_ERROR_TYPE_ERROR, GNUNET_log, GNUNET_memcpy, GNUNET_OS_project_data_get(), GNUNET_REST_API_NS_CONFIG, GNUNET_REST_create_response(), GNUNET_SCHEDULER_add_now(), GNUNET_strdup, handle, option, RequestHandle::proc, RequestHandle::proc_cls, RequestHandle::response_code, RequestHandle::rest_handle, section, set_value(), RequestHandle::url, and value.

Referenced by rest_config_process_request().

243 {
244  struct RequestHandle *handle = cls;
245  char term_data[handle->rest_handle->data_size + 1];
247 
248  json_error_t err;
249  json_t *data_json;
250  const char *section;
251  const char *option;
252  json_t *sec_obj;
253  json_t *value;
254  char *cfg_fn;
255 
256  // invalid url
257  if (strlen (GNUNET_REST_API_NS_CONFIG) > strlen (handle->url))
258  {
259  handle->response_code = MHD_HTTP_BAD_REQUEST;
261  return;
262  }
263 
264  // extract data from handle
265  term_data[handle->rest_handle->data_size] = '\0';
266  GNUNET_memcpy (term_data,
267  handle->rest_handle->data,
268  handle->rest_handle->data_size);
269  data_json = json_loads (term_data, JSON_DECODE_ANY, &err);
270 
271  if (NULL == data_json)
272  {
274  "Unable to parse JSON Object from %s\n",
275  term_data);
277  return;
278  }
279 
280  // POST /config => {<section> : {<option> : <value>}}
281  if (strlen (GNUNET_REST_API_NS_CONFIG) == strlen (handle->url)) // POST /config
282  {
283  // iterate over sections
284  json_object_foreach (data_json, section, sec_obj)
285  {
286  // iterate over options
287  json_object_foreach (sec_obj, option, value)
288  {
289  out = set_value (out, section, option, value);
290  if (NULL == out)
291  {
292  handle->response_code = MHD_HTTP_BAD_REQUEST;
294  json_decref (data_json);
295  return;
296  }
297  }
298  }
299  }
300  else // POST /config/<section> => {<option> : <value>}
301  {
302  // extract the "<section>" part from the url
303  section = &handle->url[strlen (GNUNET_REST_API_NS_CONFIG) + 1];
304  // iterate over options
305  json_object_foreach (data_json, option, value)
306  {
307  out = set_value (out, section, option, value);
308  if (NULL == out)
309  {
310  handle->response_code = MHD_HTTP_BAD_REQUEST;
312  json_decref (data_json);
313  return;
314  }
315  }
316  }
317  json_decref (data_json);
318 
319 
320  // get cfg file path
321  cfg_fn = NULL;
322  const char *xdg = getenv ("XDG_CONFIG_HOME");
323  if (NULL != xdg)
324  GNUNET_asprintf (&cfg_fn,
325  "%s%s%s",
326  xdg,
329  else
330  cfg_fn = GNUNET_strdup (GNUNET_OS_project_data_get ()->user_config_file);
331 
332  GNUNET_CONFIGURATION_write (out, cfg_fn);
333  cfg = out;
334  handle->proc (handle->proc_cls,
336  MHD_HTTP_OK);
337  cleanup_handle (handle);
338 }
#define GNUNET_REST_API_NS_CONFIG
int GNUNET_CONFIGURATION_write(struct GNUNET_CONFIGURATION_Handle *cfg, const char *filename)
Write configuration file.
size_t data_size
The POST data size.
const struct GNUNET_CONFIGURATION_Handle * cfg
Handle to our configuration.
GNUNET_REST_ResultProcessor proc
The plugin result processor.
static char * config_file
Set to the name of the config file used.
Definition: gnunet-arm.c:84
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
void * proc_cls
The closure of the result processor.
The request handle.
static char * section
Name of the section.
Definition: gnunet-config.c:33
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
static char * value
Value of the record to add/remove.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1296
#define DIR_SEPARATOR_STR
Definition: platform.h:171
static char * option
Name of the option.
Definition: gnunet-config.c:38
static void do_error(void *cls)
Task run on shutdown.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
struct GNUNET_REST_RequestHandle * rest_handle
Rest connection.
int response_code
Response code.
const char * data
The POST data.
char * getenv()
struct GNUNET_CONFIGURATION_Handle * GNUNET_CONFIGURATION_dup(const struct GNUNET_CONFIGURATION_Handle *cfg)
Duplicate an existing configuration object.
configuration data
Definition: configuration.c:84
struct MHD_Response * GNUNET_REST_create_response(const char *data)
Create REST MHD response.
Definition: rest.c:57
#define GNUNET_log(kind,...)
const struct GNUNET_OS_ProjectData * GNUNET_OS_project_data_get(void)
struct GNUNET_CONFIGURATION_Handle * set_value(struct GNUNET_CONFIGURATION_Handle *config, const char *section, const char *option, json_t *value)
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
char * url
The url.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ options_cont()

static void options_cont ( struct GNUNET_REST_RequestHandle con_handle,
const char *  url,
void *  cls 
)
static

Handle rest request.

Parameters
handlethe lookup handle

Definition at line 347 of file plugin_rest_config.c.

References cleanup_handle(), GNUNET_REST_create_response(), handle, RequestHandle::proc, and RequestHandle::proc_cls.

Referenced by rest_config_process_request().

350 {
351  struct MHD_Response *resp;
352  struct RequestHandle *handle = cls;
353 
354  resp = GNUNET_REST_create_response (NULL);
355  MHD_add_response_header (resp,
356  "Access-Control-Allow-Methods",
357  MHD_HTTP_METHOD_GET);
358  handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
359  cleanup_handle (handle);
360 }
GNUNET_REST_ResultProcessor proc
The plugin result processor.
void * proc_cls
The closure of the result processor.
The request handle.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
struct MHD_Response * GNUNET_REST_create_response(const char *data)
Create REST MHD response.
Definition: rest.c:57
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rest_config_process_request()

static enum GNUNET_GenericReturnValue rest_config_process_request ( struct GNUNET_REST_RequestHandle conndata_handle,
GNUNET_REST_ResultProcessor  proc,
void *  proc_cls 
)
static

Function processing the REST call.

Parameters
methodHTTP method
urlURL of the HTTP request
databody of the HTTP request (optional)
data_sizelength of the body
proccallback function for the result
proc_clsclosure for proc
Returns
GNUNET_OK if request accepted

Definition at line 375 of file plugin_rest_config.c.

References cleanup_handle(), get_cont(), GNUNET_CONTAINER_DLL_insert, GNUNET_new, GNUNET_NO, GNUNET_REST_API_NS_CONFIG, GNUNET_REST_handle_request(), GNUNET_REST_HANDLER_END, GNUNET_strdup, GNUNET_YES, handle, options_cont(), RequestHandle::proc, RequestHandle::proc_cls, RequestHandle::rest_handle, set_cont(), GNUNET_REST_RequestHandle::url, and RequestHandle::url.

Referenced by libgnunet_plugin_rest_config_init().

378 {
379  static const struct GNUNET_REST_RequestHandler handlers[] = {
380  { MHD_HTTP_METHOD_GET, GNUNET_REST_API_NS_CONFIG, &get_cont },
381  { MHD_HTTP_METHOD_POST, GNUNET_REST_API_NS_CONFIG, &set_cont },
382  { MHD_HTTP_METHOD_OPTIONS, GNUNET_REST_API_NS_CONFIG, &options_cont },
384  };
385  struct RequestHandle *handle = GNUNET_new (struct RequestHandle);
387 
388  handle->proc_cls = proc_cls;
389  handle->proc = proc;
390  handle->rest_handle = conndata_handle;
391  handle->url = GNUNET_strdup (conndata_handle->url);
392  if (handle->url[strlen (handle->url) - 1] == '/')
393  handle->url[strlen (handle->url) - 1] = '\0';
396  handle);
397  if (GNUNET_NO ==
398  GNUNET_REST_handle_request (conndata_handle, handlers, &err, handle))
399  {
400  cleanup_handle (handle);
401  return GNUNET_NO;
402  }
403  return GNUNET_YES;
404 }
#define GNUNET_REST_API_NS_CONFIG
#define GNUNET_CONTAINER_DLL_insert(head, tail, element)
Insert an element at the head of a DLL.
static struct RequestHandle * requests_head
DLL.
GNUNET_REST_ResultProcessor proc
The plugin result processor.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
void * proc_cls
The closure of the result processor.
#define GNUNET_REST_HANDLER_END
The request handle.
static struct RequestHandle * requests_tail
DLL.
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
const char * url
The url as string.
static void get_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Handle rest request.
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
int GNUNET_REST_handle_request(struct GNUNET_REST_RequestHandle *conn, const struct GNUNET_REST_RequestHandler *handlers, struct GNUNET_REST_RequestHandlerError *err, void *cls)
Definition: rest.c:77
struct GNUNET_REST_RequestHandle * rest_handle
Rest connection.
static void set_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Handle REST POST request.
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
static void options_cont(struct GNUNET_REST_RequestHandle *con_handle, const char *url, void *cls)
Handle rest request.
char * url
The url.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ libgnunet_plugin_rest_config_init()

void* libgnunet_plugin_rest_config_init ( void *  cls)

Entry point for the plugin.

Parameters
clsthe "struct GNUNET_NAMESTORE_PluginEnvironment*"
Returns
NULL on error, otherwise the plugin context

Definition at line 414 of file plugin_rest_config.c.

References _, Plugin::api, Plugin::cfg, GNUNET_REST_Plugin::cls, GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_new, GNUNET_REST_API_NS_CONFIG, GNUNET_REST_Plugin::name, plugin, GNUNET_REST_Plugin::process_request, and rest_config_process_request().

415 {
416  static struct Plugin plugin;
417 
418  cfg = cls;
419  struct GNUNET_REST_Plugin *api;
420 
421  memset (&plugin, 0, sizeof(struct Plugin));
422  plugin.cfg = cfg;
423  api = GNUNET_new (struct GNUNET_REST_Plugin);
424  api->cls = &plugin;
427  GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("CONFIG REST API initialized\n"));
428  return api;
429 }
#define GNUNET_REST_API_NS_CONFIG
void * cls
The closure of the plugin.
const struct GNUNET_CONFIGURATION_Handle * cfg
Handle to our configuration.
struct returned by the initialization function of the plugin
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define _(String)
GNU gettext support macro.
Definition: platform.h:184
static enum GNUNET_GenericReturnValue rest_config_process_request(struct GNUNET_REST_RequestHandle *conndata_handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
Function processing the REST call.
char * name
Plugin name.
static char * plugin
Solver plugin name as string.
Handle for a plugin.
Definition: block.c:37
#define GNUNET_log(kind,...)
enum GNUNET_GenericReturnValue(* process_request)(struct GNUNET_REST_RequestHandle *handle, GNUNET_REST_ResultProcessor proc, void *proc_cls)
Function to process a REST call.
Here is the call graph for this function:

◆ libgnunet_plugin_rest_config_done()

void* libgnunet_plugin_rest_config_done ( void *  cls)

Exit point from the plugin.

Parameters
clsthe plugin context (as returned by "init")
Returns
always NULL

Definition at line 439 of file plugin_rest_config.c.

References Plugin::api, Plugin::cfg, cleanup_handle(), GNUNET_REST_Plugin::cls, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, and plugin.

440 {
441  struct GNUNET_REST_Plugin *api = cls;
442  struct Plugin *plugin;
443 
444  while (NULL != requests_head)
446  plugin = api->cls;
447  plugin->cfg = NULL;
448  GNUNET_free (api);
449  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CONFIG REST plugin is finished\n");
450  return NULL;
451 }
static struct RequestHandle * requests_head
DLL.
void * cls
The closure of the plugin.
const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
struct returned by the initialization function of the plugin
static char * plugin
Solver plugin name as string.
Handle for a plugin.
Definition: block.c:37
#define GNUNET_log(kind,...)
static void cleanup_handle(struct RequestHandle *handle)
Cleanup request handle.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:

Variable Documentation

◆ cfg

const struct GNUNET_CONFIGURATION_Handle* cfg

Handle to our configuration.

Handle to our configuration.

Definition at line 43 of file plugin_rest_config.c.

◆ requests_head

struct RequestHandle* requests_head
static

DLL.

Definition at line 86 of file plugin_rest_config.c.

◆ requests_tail

struct RequestHandle* requests_tail
static

DLL.

Definition at line 91 of file plugin_rest_config.c.