GNUnet  0.10.x
Data Structures | Functions
plugin_namecache_flat.c File Reference

flat file-based namecache backend More...

#include "platform.h"
#include "gnunet_namecache_plugin.h"
#include "gnunet_namecache_service.h"
#include "gnunet_gnsrecord_lib.h"
#include "namecache.h"
Include dependency graph for plugin_namecache_flat.c:

Go to the source code of this file.

Data Structures

struct  Plugin
 Handle for a plugin. More...
 
struct  FlatFileEntry
 

Functions

static int database_setup (struct Plugin *plugin)
 Initialize the database connections and associated data structures (create tables and indices as needed as well). More...
 
static int store_and_free_entries (void *cls, const struct GNUNET_HashCode *key, void *value)
 Store values in hashmap in file and free data. More...
 
static void database_shutdown (struct Plugin *plugin)
 Shutdown database connection and associate data structures. More...
 
static int expire_blocks (void *cls, const struct GNUNET_HashCode *key, void *value)
 
static void namecache_expire_blocks (struct Plugin *plugin)
 Removes any expired block. More...
 
static int namecache_cache_block (void *cls, const struct GNUNET_GNSRECORD_Block *block)
 Cache a block in the datastore. More...
 
static int namecache_lookup_block (void *cls, const struct GNUNET_HashCode *query, GNUNET_NAMECACHE_BlockCallback iter, void *iter_cls)
 Get the block for a particular zone and label in the datastore. More...
 
void * libgnunet_plugin_namecache_flat_init (void *cls)
 Entry point for the plugin. More...
 
void * libgnunet_plugin_namecache_flat_done (void *cls)
 Exit point from the plugin. More...
 

Detailed Description

flat file-based namecache backend

Author
Martin Schanzenbach

Definition in file plugin_namecache_flat.c.

Function Documentation

◆ database_setup()

static int database_setup ( struct Plugin plugin)
static

Initialize the database connections and associated data structures (create tables and indices as needed as well).

Parameters
pluginthe plugin context (state for this module)
Returns
GNUNET_OK on success

Definition at line 71 of file plugin_namecache_flat.c.

References _, FlatFileEntry::block, Plugin::cfg, fh, Plugin::fn, GNUNET_assert, GNUNET_break, GNUNET_CONFIGURATION_get_value_filename(), GNUNET_CONTAINER_multihashmap_create(), GNUNET_CONTAINER_multihashmap_put(), GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY, GNUNET_CRYPTO_hash_from_string, GNUNET_DISK_directory_create_for_file(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_file_read(), GNUNET_DISK_file_size(), GNUNET_DISK_file_test(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_READWRITE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_log_config_missing(), GNUNET_malloc, GNUNET_NO, GNUNET_OK, GNUNET_STRINGS_base64_decode(), GNUNET_SYSERR, GNUNET_YES, Plugin::hm, line, FlatFileEntry::query, and Plugin::size.

Referenced by libgnunet_plugin_namecache_flat_init().

72 {
73  char *afsdir;
74  char* block_buffer;
75  char* buffer;
76  char* line;
77  char* query;
78  char* block;
79  size_t size;
80  struct FlatFileEntry *entry;
81  struct GNUNET_DISK_FileHandle *fh;
82 
83  if (GNUNET_OK !=
85  "namecache-flat",
86  "FILENAME",
87  &afsdir))
88  {
90  "namecache-flat", "FILENAME");
91  return GNUNET_SYSERR;
92  }
93  if (GNUNET_OK != GNUNET_DISK_file_test(afsdir))
94  {
96  {
97  GNUNET_break(0);
98  GNUNET_free(afsdir);
99  return GNUNET_SYSERR;
100  }
101  }
102  /* afsdir should be UTF-8-encoded. If it isn't, it's a bug */
103  plugin->fn = afsdir;
104 
105  /* Load data from file into hashmap */
107  GNUNET_NO);
108  fh = GNUNET_DISK_file_open(afsdir,
113  if (NULL == fh)
114  {
116  _("Unable to initialize file: %s.\n"),
117  afsdir);
118  return GNUNET_SYSERR;
119  }
120 
121  if (GNUNET_SYSERR == GNUNET_DISK_file_size(afsdir,
122  &size,
123  GNUNET_YES,
124  GNUNET_YES))
125  {
127  _("Unable to get filesize: %s.\n"),
128  afsdir);
130  return GNUNET_SYSERR;
131  }
132 
133  if (0 == size)
134  {
136  return GNUNET_OK;
137  }
138 
139  buffer = GNUNET_malloc(size + 1);
140 
142  buffer,
143  size))
144  {
146  _("Unable to read file: %s.\n"),
147  afsdir);
148  GNUNET_free(buffer);
150  return GNUNET_SYSERR;
151  }
152  buffer[size] = '\0';
153 
155  if (0 < size)
156  {
157  line = strtok(buffer, "\n");
158  while (line != NULL)
159  {
160  query = strtok(line, ",");
161  if (NULL == query)
162  break;
163  block = strtok(NULL, ",");
164  if (NULL == block)
165  break;
166  line = strtok(NULL, "\n");
167  entry = GNUNET_malloc(sizeof(struct FlatFileEntry));
169  &entry->query));
171  strlen(block),
172  (void**)&block_buffer);
173  entry->block = (struct GNUNET_GNSRECORD_Block *)block_buffer;
174  if (GNUNET_OK !=
176  &entry->query,
177  entry,
179  {
180  GNUNET_free(entry);
181  GNUNET_break(0);
182  }
183  }
184  }
185  GNUNET_free(buffer);
186  return GNUNET_OK;
187 }
int GNUNET_DISK_file_test(const char *fil)
Check that fil corresponds to a filename (of a file that exists and that is not a directory)...
Definition: disk.c:541
Create file if it doesn&#39;t exist.
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1339
struct GNUNET_GNSRECORD_Block * block
Block.
ssize_t GNUNET_DISK_file_read(const struct GNUNET_DISK_FileHandle *h, void *result, size_t len)
Read the contents of a binary file into a buffer.
Definition: disk.c:729
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_HashCode query
query
const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
int GNUNET_DISK_directory_create_for_file(const char *filename)
Create the directory structure for storing a file.
Definition: disk.c:681
#define GNUNET_NO
Definition: gnunet_common.h:78
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
Information we have in an encrypted block with record data (i.e.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
static char * line
Desired phone line (string to be converted to a hash).
void GNUNET_log_config_missing(enum GNUNET_ErrorType kind, const char *section, const char *option)
Log error message about missing configuration option.
static int fh
Handle to the unique file.
size_t GNUNET_STRINGS_base64_decode(const char *data, size_t len, void **output)
Decode from Base64.
Definition: strings.c:1920
There must only be one value per key; storing a value should fail if a value under the same key alrea...
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
static unsigned int size
Size of the "table".
Definition: peer.c:66
struct GNUNET_CONTAINER_MultiHashMap * hm
HashMap.
int GNUNET_CONTAINER_multihashmap_put(struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key, void *value, enum GNUNET_CONTAINER_MultiHashMapOption opt)
Store a key-value pair in the map.
int GNUNET_DISK_file_size(const char *filename, uint64_t *size, int include_symbolic_links, int single_file_mode)
Get the size of the file (or directory) of the given file (in bytes).
Definition: disk.c:254
char * fn
Filename used for the DB.
#define GNUNET_log(kind,...)
Open the file for both reading and writing.
int GNUNET_CONFIGURATION_get_value_filename(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be the name of a file or directory.
struct GNUNET_CONTAINER_MultiHashMap * GNUNET_CONTAINER_multihashmap_create(unsigned int len, int do_not_copy_keys)
Create a multi hash map.
#define GNUNET_YES
Definition: gnunet_common.h:77
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1262
#define GNUNET_CRYPTO_hash_from_string(enc, result)
Convert ASCII encoding back to struct GNUNET_HashCode
Handle used to access files (and pipes).
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ store_and_free_entries()

static int store_and_free_entries ( void *  cls,
const struct GNUNET_HashCode key,
void *  value 
)
static

Store values in hashmap in file and free data.

Parameters
pluginthe plugin context

Definition at line 195 of file plugin_namecache_flat.c.

References FlatFileEntry::block, fh, GNUNET_asprintf(), GNUNET_CRYPTO_hash_to_enc(), GNUNET_DISK_file_write(), GNUNET_free, GNUNET_STRINGS_base64_encode(), GNUNET_YES, line, GNUNET_GNSRECORD_Block::purpose, FlatFileEntry::query, GNUNET_CRYPTO_EccSignaturePurpose::size, and value.

Referenced by database_shutdown().

198 {
199  struct GNUNET_DISK_FileHandle *fh = cls;
200  struct FlatFileEntry *entry = value;
201 
202  char *line;
203  char *block_b64;
204  struct GNUNET_CRYPTO_HashAsciiEncoded query;
205  size_t block_size;
206 
207  block_size = ntohl(entry->block->purpose.size) +
208  sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey) +
209  sizeof(struct GNUNET_CRYPTO_EcdsaSignature);
210 
211  GNUNET_STRINGS_base64_encode((char*)entry->block,
212  block_size,
213  &block_b64);
215  &query);
216  GNUNET_asprintf(&line,
217  "%s,%s\n",
218  (char*)&query,
219  block_b64);
220 
221  GNUNET_free(block_b64);
222 
224  line,
225  strlen(line));
226 
227  GNUNET_free(entry->block);
228  GNUNET_free(entry);
229  GNUNET_free(line);
230  return GNUNET_YES;
231 }
struct GNUNET_GNSRECORD_Block * block
Block.
struct GNUNET_HashCode query
query
int GNUNET_asprintf(char **buf, const char *format,...)
Like asprintf, just portable.
static char * line
Desired phone line (string to be converted to a hash).
static char * value
Value of the record to add/remove.
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:817
an ECC signature using ECDSA
static int fh
Handle to the unique file.
uint32_t size
How many bytes does this signature sign? (including this purpose header); in network byte order (!)...
size_t GNUNET_STRINGS_base64_encode(const void *in, size_t len, char **output)
Encode into Base64.
Definition: strings.c:1856
void GNUNET_CRYPTO_hash_to_enc(const struct GNUNET_HashCode *block, struct GNUNET_CRYPTO_HashAsciiEncoded *result)
Convert hash to ASCII encoding.
Definition: crypto_hash.c:69
0-terminated ASCII encoding of a struct GNUNET_HashCode.
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
#define GNUNET_YES
Definition: gnunet_common.h:77
struct GNUNET_CRYPTO_EccSignaturePurpose purpose
Number of bytes signed; also specifies the number of bytes of encrypted data that follow...
Handle used to access files (and pipes).
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ database_shutdown()

static void database_shutdown ( struct Plugin plugin)
static

Shutdown database connection and associate data structures.

Parameters
pluginthe plugin context (state for this module)

Definition at line 239 of file plugin_namecache_flat.c.

References _, fh, Plugin::fn, GNUNET_CONTAINER_multihashmap_destroy(), GNUNET_CONTAINER_multihashmap_iterate(), GNUNET_DISK_file_close(), GNUNET_DISK_file_open(), GNUNET_DISK_OPEN_CREATE, GNUNET_DISK_OPEN_READWRITE, GNUNET_DISK_OPEN_TRUNCATE, GNUNET_DISK_PERM_USER_READ, GNUNET_DISK_PERM_USER_WRITE, GNUNET_ERROR_TYPE_ERROR, GNUNET_log, Plugin::hm, and store_and_free_entries().

Referenced by libgnunet_plugin_namecache_flat_done(), and libgnunet_plugin_namecache_flat_init().

240 {
241  struct GNUNET_DISK_FileHandle *fh;
242 
243  fh = GNUNET_DISK_file_open(plugin->fn,
249  if (NULL == fh)
250  {
252  _("Unable to initialize file: %s.\n"),
253  plugin->fn);
254  return;
255  }
256 
259  fh);
262 }
Create file if it doesn&#39;t exist.
int GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1339
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
Truncate file if it exists.
void GNUNET_CONTAINER_multihashmap_destroy(struct GNUNET_CONTAINER_MultiHashMap *map)
Destroy a hash map.
static int fh
Handle to the unique file.
static int store_and_free_entries(void *cls, const struct GNUNET_HashCode *key, void *value)
Store values in hashmap in file and free data.
struct GNUNET_CONTAINER_MultiHashMap * hm
HashMap.
char * fn
Filename used for the DB.
#define GNUNET_log(kind,...)
Open the file for both reading and writing.
int GNUNET_CONTAINER_multihashmap_iterate(struct GNUNET_CONTAINER_MultiHashMap *map, GNUNET_CONTAINER_MulitHashMapIteratorCallback it, void *it_cls)
Iterate over all entries in the map.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1262
Handle used to access files (and pipes).
Here is the call graph for this function:
Here is the caller graph for this function:

◆ expire_blocks()

static int expire_blocks ( void *  cls,
const struct GNUNET_HashCode key,
void *  value 
)
static

Definition at line 265 of file plugin_namecache_flat.c.

References FlatFileEntry::block, GNUNET_GNSRECORD_Block::expiration_time, GNUNET_CONTAINER_multihashmap_remove_all(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_difference(), GNUNET_TIME_absolute_ntoh(), GNUNET_YES, Plugin::hm, plugin, and value.

268 {
269  struct Plugin *plugin = cls;
270  struct FlatFileEntry *entry = value;
271  struct GNUNET_TIME_Absolute now;
273 
274  now = GNUNET_TIME_absolute_get();
276 
278  expiration).rel_value_us)
279  {
281  }
282  return GNUNET_YES;
283 }
struct GNUNET_TIME_AbsoluteNBO expiration_time
Expiration time of the block.
static char * expiration
Credential TTL.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:671
struct GNUNET_GNSRECORD_Block * block
Block.
int GNUNET_CONTAINER_multihashmap_remove_all(struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key)
Remove all entries for the given key from the map.
static struct GNUNET_ATS_SolverFunctions * plugin
Our solver.
static char * value
Value of the record to add/remove.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:118
struct GNUNET_CONTAINER_MultiHashMap * hm
HashMap.
Handle for a plugin.
Definition: block.c:37
Time for absolute times used by GNUnet, in microseconds.
#define GNUNET_YES
Definition: gnunet_common.h:77
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Absolute end)
Compute the time difference between the given start and end times.
Definition: time.c:353
Here is the call graph for this function:

◆ namecache_expire_blocks()

static void namecache_expire_blocks ( struct Plugin plugin)
static

Removes any expired block.

Parameters
pluginthe plugin

Definition at line 293 of file plugin_namecache_flat.c.

References Plugin::expire_blocks, GNUNET_CONTAINER_multihashmap_iterate(), and Plugin::hm.

Referenced by namecache_cache_block().

294 {
296  &expire_blocks,
297  plugin);
298 }
struct GNUNET_CONTAINER_MultiHashMap * hm
HashMap.
static int expire_blocks(void *cls, const struct GNUNET_HashCode *key, void *value)
int GNUNET_CONTAINER_multihashmap_iterate(struct GNUNET_CONTAINER_MultiHashMap *map, GNUNET_CONTAINER_MulitHashMapIteratorCallback it, void *it_cls)
Iterate over all entries in the map.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ namecache_cache_block()

static int namecache_cache_block ( void *  cls,
const struct GNUNET_GNSRECORD_Block block 
)
static

Cache a block in the datastore.

Parameters
clsclosure (internal context for the plugin)
blockblock to cache
Returns
GNUNET_OK on success, else GNUNET_SYSERR

Definition at line 309 of file plugin_namecache_flat.c.

References FlatFileEntry::block, GNUNET_GNSRECORD_Block::derived_key, GNUNET_break, GNUNET_CONTAINER_multihashmap_put(), GNUNET_CONTAINER_multihashmap_remove_all(), GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY, GNUNET_CRYPTO_hash(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_h2s_full(), GNUNET_log, GNUNET_malloc, GNUNET_memcpy, GNUNET_OK, GNUNET_SYSERR, Plugin::hm, namecache_expire_blocks(), plugin, GNUNET_GNSRECORD_Block::purpose, and GNUNET_CRYPTO_EccSignaturePurpose::size.

Referenced by libgnunet_plugin_namecache_flat_init().

311 {
312  struct Plugin *plugin = cls;
313  struct GNUNET_HashCode query;
314  struct FlatFileEntry *entry;
315  size_t block_size;
316 
317  namecache_expire_blocks(plugin);
319  sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey),
320  &query);
321  block_size = ntohl(block->purpose.size) +
322  sizeof(struct GNUNET_CRYPTO_EcdsaPublicKey) +
323  sizeof(struct GNUNET_CRYPTO_EcdsaSignature);
324  if (block_size > 64 * 65536)
325  {
326  GNUNET_break(0);
327  return GNUNET_SYSERR;
328  }
329  entry = GNUNET_malloc(sizeof(struct FlatFileEntry));
330  entry->block = GNUNET_malloc(block_size);
331  GNUNET_memcpy(entry->block, block, block_size);
333  if (GNUNET_OK !=
335  &query,
336  entry,
338  {
339  GNUNET_free(entry);
340  GNUNET_break(0);
341  return GNUNET_SYSERR;
342  }
344  "Caching block under derived key `%s'\n",
345  GNUNET_h2s_full(&query));
346  return GNUNET_OK;
347 }
struct GNUNET_GNSRECORD_Block * block
Block.
struct GNUNET_HashCode query
query
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
int GNUNET_CONTAINER_multihashmap_remove_all(struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key)
Remove all entries for the given key from the map.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static struct GNUNET_ATS_SolverFunctions * plugin
Our solver.
void GNUNET_CRYPTO_hash(const void *block, size_t size, struct GNUNET_HashCode *ret)
Compute hash of a given block.
Definition: crypto_hash.c:44
an ECC signature using ECDSA
uint32_t size
How many bytes does this signature sign? (including this purpose header); in network byte order (!)...
static void namecache_expire_blocks(struct Plugin *plugin)
Removes any expired block.
A 512-bit hashcode.
There must only be one value per key; storing a value should fail if a value under the same key alrea...
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
struct GNUNET_CONTAINER_MultiHashMap * hm
HashMap.
const char * GNUNET_h2s_full(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
int GNUNET_CONTAINER_multihashmap_put(struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key, void *value, enum GNUNET_CONTAINER_MultiHashMapOption opt)
Store a key-value pair in the map.
Handle for a plugin.
Definition: block.c:37
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
#define GNUNET_log(kind,...)
struct GNUNET_CRYPTO_EccSignaturePurpose purpose
Number of bytes signed; also specifies the number of bytes of encrypted data that follow...
struct GNUNET_CRYPTO_EcdsaPublicKey derived_key
Derived key used for signing; hash of this is the query.
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ namecache_lookup_block()

static int namecache_lookup_block ( void *  cls,
const struct GNUNET_HashCode query,
GNUNET_NAMECACHE_BlockCallback  iter,
void *  iter_cls 
)
static

Get the block for a particular zone and label in the datastore.

Will return at most one result to the iterator.

Parameters
clsclosure (internal context for the plugin)
queryhash of public key derived from the zone and the label
iterfunction to call with the result
iter_clsclosure for iter
Returns
GNUNET_OK on success, GNUNET_NO if there were no results, GNUNET_SYSERR on error

Definition at line 361 of file plugin_namecache_flat.c.

References GNUNET_CONTAINER_multihashmap_get(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_h2s_full(), GNUNET_log, GNUNET_NO, GNUNET_YES, Plugin::hm, Plugin::iter, and plugin.

Referenced by libgnunet_plugin_namecache_flat_init().

364 {
365  struct Plugin *plugin = cls;
366  const struct GNUNET_GNSRECORD_Block *block;
367 
368  block = GNUNET_CONTAINER_multihashmap_get(plugin->hm, query);
369  if (NULL == block)
370  return GNUNET_NO;
372  "Found block under derived key `%s'\n",
373  GNUNET_h2s_full(query));
374  iter(iter_cls, block);
375  return GNUNET_YES;
376 }
#define GNUNET_NO
Definition: gnunet_common.h:78
Information we have in an encrypted block with record data (i.e.
void * GNUNET_CONTAINER_multihashmap_get(const struct GNUNET_CONTAINER_MultiHashMap *map, const struct GNUNET_HashCode *key)
Given a key find a value in the map matching the key.
static struct GNUNET_ATS_SolverFunctions * plugin
Our solver.
struct GNUNET_CONTAINER_MultiHashMap * hm
HashMap.
const char * GNUNET_h2s_full(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
Handle for a plugin.
Definition: block.c:37
#define GNUNET_log(kind,...)
#define GNUNET_YES
Definition: gnunet_common.h:77
Here is the call graph for this function:
Here is the caller graph for this function:

◆ libgnunet_plugin_namecache_flat_init()

void* libgnunet_plugin_namecache_flat_init ( void *  cls)

Entry point for the plugin.

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

Definition at line 386 of file plugin_namecache_flat.c.

References _, Plugin::api, GNUNET_NAMECACHE_PluginFunctions::cache_block, Plugin::cfg, GNUNET_NAMECACHE_PluginFunctions::cls, database_setup(), database_shutdown(), GNUNET_ERROR_TYPE_INFO, GNUNET_log, GNUNET_new, GNUNET_OK, GNUNET_NAMECACHE_PluginFunctions::lookup_block, namecache_cache_block(), namecache_lookup_block(), and plugin.

387 {
388  static struct Plugin plugin;
389  const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
391 
392  if (NULL != plugin.cfg)
393  return NULL; /* can only initialize once! */
394  memset(&plugin, 0, sizeof(struct Plugin));
395  plugin.cfg = cfg;
397  {
399  return NULL;
400  }
402  api->cls = &plugin;
406  _("flat plugin running\n"));
407  return api;
408 }
void * cls
Closure to pass to all plugin functions.
static int namecache_cache_block(void *cls, const struct GNUNET_GNSRECORD_Block *block)
Cache a block in the datastore.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
int(* cache_block)(void *cls, const struct GNUNET_GNSRECORD_Block *block)
Cache a block in the datastore.
static struct GNUNET_ATS_SolverFunctions * plugin
Our solver.
int(* lookup_block)(void *cls, const struct GNUNET_HashCode *query, GNUNET_NAMECACHE_BlockCallback iter, void *iter_cls)
Get the block for a particular zone and label in the datastore.
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
struct returned by the initialization function of the plugin
static void database_shutdown(struct Plugin *plugin)
Shutdown database connection and associate data structures.
configuration data
Definition: configuration.c:83
Handle for a plugin.
Definition: block.c:37
#define GNUNET_log(kind,...)
static int namecache_lookup_block(void *cls, const struct GNUNET_HashCode *query, GNUNET_NAMECACHE_BlockCallback iter, void *iter_cls)
Get the block for a particular zone and label in the datastore.
static int database_setup(struct Plugin *plugin)
Initialize the database connections and associated data structures (create tables and indices as need...
Here is the call graph for this function:

◆ libgnunet_plugin_namecache_flat_done()

void* libgnunet_plugin_namecache_flat_done ( void *  cls)

Exit point from the plugin.

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

Definition at line 418 of file plugin_namecache_flat.c.

References Plugin::api, Plugin::cfg, GNUNET_NAMECACHE_PluginFunctions::cls, database_shutdown(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, and plugin.

419 {
421  struct Plugin *plugin = api->cls;
422 
423  database_shutdown(plugin);
424  plugin->cfg = NULL;
425  GNUNET_free(api);
427  "flat plugin is finished\n");
428  return NULL;
429 }
void * cls
Closure to pass to all plugin functions.
const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
static struct GNUNET_ATS_SolverFunctions * plugin
Our solver.
struct returned by the initialization function of the plugin
static void database_shutdown(struct Plugin *plugin)
Shutdown database connection and associate data structures.
Handle for a plugin.
Definition: block.c:37
#define GNUNET_log(kind,...)
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function: