GNUnet  0.10.x
Data Structures | Macros | Functions
namecache_api.c File Reference

API to access the NAMECACHE service. More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_crypto_lib.h"
#include "gnunet_constants.h"
#include "gnunet_dnsparser_lib.h"
#include "gnunet_gnsrecord_lib.h"
#include "gnunet_signatures.h"
#include "gnunet_namecache_service.h"
#include "namecache.h"
Include dependency graph for namecache_api.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_NAMECACHE_QueueEntry
 An QueueEntry used to store information for a pending NAMECACHE record operation. More...
 
struct  GNUNET_NAMECACHE_Handle
 Connection to the NAMECACHE service. More...
 

Macros

#define LOG(kind, ...)   GNUNET_log_from (kind, "namecache-api",__VA_ARGS__)
 

Functions

static void force_reconnect (struct GNUNET_NAMECACHE_Handle *h)
 Disconnect from service and then reconnect. More...
 
static struct GNUNET_NAMECACHE_QueueEntryfind_qe (struct GNUNET_NAMECACHE_Handle *h, uint32_t rid)
 Find queue entry for the given rid. More...
 
static int check_lookup_block_response (void *cls, const struct LookupBlockResponseMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE. More...
 
static void handle_lookup_block_response (void *cls, const struct LookupBlockResponseMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE. More...
 
static void handle_block_cache_response (void *cls, const struct BlockCacheResponseMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE. More...
 
static void mq_error_handler (void *cls, enum GNUNET_MQ_Error error)
 Generic error handler, called with the appropriate error code and the same closure specified at the creation of the message queue. More...
 
static void reconnect (struct GNUNET_NAMECACHE_Handle *h)
 Reconnect to namecache service. More...
 
static void reconnect_task (void *cls)
 Re-establish the connection to the service. More...
 
static uint32_t get_op_id (struct GNUNET_NAMECACHE_Handle *h)
 Get a fresh operation id to distinguish between namecache requests. More...
 
struct GNUNET_NAMECACHE_HandleGNUNET_NAMECACHE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Initialize the connection with the NAMECACHE service. More...
 
void GNUNET_NAMECACHE_disconnect (struct GNUNET_NAMECACHE_Handle *h)
 Disconnect from the namecache service (and free associated resources). More...
 
struct GNUNET_NAMECACHE_QueueEntryGNUNET_NAMECACHE_block_cache (struct GNUNET_NAMECACHE_Handle *h, const struct GNUNET_GNSRECORD_Block *block, GNUNET_NAMECACHE_ContinuationWithStatus cont, void *cont_cls)
 Store an item in the namecache. More...
 
struct GNUNET_NAMECACHE_QueueEntryGNUNET_NAMECACHE_lookup_block (struct GNUNET_NAMECACHE_Handle *h, const struct GNUNET_HashCode *derived_hash, GNUNET_NAMECACHE_BlockProcessor proc, void *proc_cls)
 Get a result for a particular key from the namecache. More...
 
void GNUNET_NAMECACHE_cancel (struct GNUNET_NAMECACHE_QueueEntry *qe)
 Cancel a namecache operation. More...
 

Detailed Description

API to access the NAMECACHE service.

Author
Martin Schanzenbach
Matthias Wachs
Christian Grothoff

Definition in file namecache_api.c.

Macro Definition Documentation

◆ LOG

#define LOG (   kind,
  ... 
)    GNUNET_log_from (kind, "namecache-api",__VA_ARGS__)

Function Documentation

◆ force_reconnect()

static void force_reconnect ( struct GNUNET_NAMECACHE_Handle h)
static

Disconnect from service and then reconnect.

Parameters
hour handle

Definition at line 368 of file namecache_api.c.

References _, GNUNET_NAMECACHE_QueueEntry::cont, GNUNET_NAMECACHE_QueueEntry::cont_cls, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_log, GNUNET_MQ_destroy(), GNUNET_NO, GNUNET_SCHEDULER_add_delayed(), GNUNET_SYSERR, GNUNET_TIME_STD_BACKOFF, GNUNET_NAMECACHE_Handle::mq, GNUNET_NAMECACHE_Handle::op_head, GNUNET_NAMECACHE_Handle::op_tail, qe, GNUNET_NAMECACHE_Handle::reconnect, GNUNET_NAMECACHE_Handle::reconnect_delay, GNUNET_NAMECACHE_Handle::reconnect_task, and reconnect_task().

Referenced by handle_lookup_block_response(), and mq_error_handler().

369 {
371 
372  h->reconnect = GNUNET_NO;
373  GNUNET_MQ_destroy (h->mq);
374  h->mq = NULL;
375  while (NULL != (qe = h->op_head))
376  {
378  h->op_tail,
379  qe);
380  if (NULL != qe->cont)
381  qe->cont (qe->cont_cls,
383  _("Error communicating with namecache service"));
384  GNUNET_free (qe);
385  }
387  "Reconnecting to namecache\n");
391  h);
392 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_TIME_Relative reconnect_delay
Delay introduced before we reconnect.
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
struct GNUNET_NAMECACHE_QueueEntry * op_tail
Tail of pending namecache queue entries.
struct GNUNET_SCHEDULER_Task * reconnect_task
Reconnect task.
#define GNUNET_NO
Definition: gnunet_common.h:81
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1246
void * cont_cls
Closure for cont.
Definition: namecache_api.c:73
struct GNUNET_MQ_Handle * mq
Message queue to service.
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
int reconnect
Should we reconnect to service due to some serious error?
#define GNUNET_TIME_STD_BACKOFF(r)
Perform our standard exponential back-off calculation, starting at 1 ms and then going by a factor of...
struct GNUNET_NAMECACHE_QueueEntry * op_head
Head of pending namecache queue entries.
#define GNUNET_log(kind,...)
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:824
An QueueEntry used to store information for a pending NAMECACHE record operation. ...
Definition: namecache_api.c:47
#define GNUNET_free(ptr)
Wrapper around free.
GNUNET_NAMECACHE_ContinuationWithStatus cont
Continuation to call.
Definition: namecache_api.c:68
static void reconnect_task(void *cls)
Re-establish the connection to the service.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ find_qe()

static struct GNUNET_NAMECACHE_QueueEntry* find_qe ( struct GNUNET_NAMECACHE_Handle h,
uint32_t  rid 
)
static

Find queue entry for the given rid.

Parameters
hhandle to search
ridrequest ID to look for
Returns
NULL if not found, otherwise the queue entry (removed from the queue)

Definition at line 164 of file namecache_api.c.

References GNUNET_CONTAINER_DLL_remove, GNUNET_NAMECACHE_QueueEntry::next, GNUNET_NAMECACHE_Handle::op_head, GNUNET_NAMECACHE_QueueEntry::op_id, GNUNET_NAMECACHE_Handle::op_tail, and qe.

Referenced by handle_block_cache_response(), and handle_lookup_block_response().

166 {
168 
169  for (qe = h->op_head; qe != NULL; qe = qe->next)
170  {
171  if (qe->op_id == rid)
172  {
174  h->op_tail,
175  qe);
176  return qe;
177  }
178  }
179  return NULL;
180 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
uint32_t op_id
The operation id this zone iteration operation has.
Definition: namecache_api.c:88
struct GNUNET_NAMECACHE_QueueEntry * next
Kept in a DLL.
Definition: namecache_api.c:53
struct GNUNET_NAMECACHE_QueueEntry * op_tail
Tail of pending namecache queue entries.
struct GNUNET_NAMECACHE_QueueEntry * op_head
Head of pending namecache queue entries.
An QueueEntry used to store information for a pending NAMECACHE record operation. ...
Definition: namecache_api.c:47
Here is the caller graph for this function:

◆ check_lookup_block_response()

static int check_lookup_block_response ( void *  cls,
const struct LookupBlockResponseMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE.

Parameters
clsthe struct GNUNET_NAMECACHE_Handle
msgthe message we received

Definition at line 191 of file namecache_api.c.

References GNUNET_OK.

193 {
194  /* any length will do, format validation is in handler */
195  return GNUNET_OK;
196 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78

◆ handle_lookup_block_response()

static void handle_lookup_block_response ( void *  cls,
const struct LookupBlockResponseMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE.

Parameters
clsthe struct GNUNET_NAMECACHE_Handle
msgthe message we received

Definition at line 207 of file namecache_api.c.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_NAMECACHE_QueueEntry::block_proc, GNUNET_NAMECACHE_QueueEntry::block_proc_cls, buf, LookupBlockResponseMessage::derived_key, GNUNET_GNSRECORD_Block::derived_key, GNUNET_GNSRECORD_Block::expiration_time, LookupBlockResponseMessage::expire, find_qe(), force_reconnect(), LookupBlockResponseMessage::gns_header, GNUNET_break, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_GNSRECORD_block_verify(), GNUNET_memcpy, GNUNET_OK, GNUNET_SIGNATURE_PURPOSE_GNS_RECORD_SIGN, GNUNET_TIME_absolute_ntoh(), h, GNUNET_NAMECACHE_Header::header, LOG, GNUNET_CRYPTO_EccSignaturePurpose::purpose, GNUNET_GNSRECORD_Block::purpose, qe, GNUNET_NAMECACHE_Header::r_id, LookupBlockResponseMessage::signature, GNUNET_GNSRECORD_Block::signature, size, GNUNET_CRYPTO_EccSignaturePurpose::size, and GNUNET_MessageHeader::size.

209 {
210  struct GNUNET_NAMECACHE_Handle *h = cls;
211  size_t size;
213 
215  "Received LOOKUP_BLOCK_RESPONSE\n");
216  qe = find_qe (h,
217  ntohl (msg->gns_header.r_id));
218  if (NULL == qe)
219  return;
221  {
222  /* no match found */
223  if (NULL != qe->block_proc)
224  qe->block_proc (qe->block_proc_cls,
225  NULL);
226  GNUNET_free (qe);
227  return;
228  }
229  size = ntohs (msg->gns_header.header.size)
230  - sizeof (struct LookupBlockResponseMessage);
231  {
232  char buf[size + sizeof (struct GNUNET_GNSRECORD_Block)] GNUNET_ALIGN;
233  struct GNUNET_GNSRECORD_Block *block;
234 
235  block = (struct GNUNET_GNSRECORD_Block *) buf;
236  block->signature = msg->signature;
237  block->derived_key = msg->derived_key;
239  block->purpose.size = htonl (size +
240  sizeof (struct GNUNET_TIME_AbsoluteNBO) +
241  sizeof (struct GNUNET_CRYPTO_EccSignaturePurpose));
242  block->expiration_time = msg->expire;
243  GNUNET_memcpy (&block[1],
244  &msg[1],
245  size);
246  if (GNUNET_OK !=
248  {
249  GNUNET_break (0);
250  if (NULL != qe->block_proc)
251  qe->block_proc (qe->block_proc_cls,
252  NULL);
253  force_reconnect (h);
254  }
255  else
256  {
257  if (NULL != qe->block_proc)
258  qe->block_proc (qe->block_proc_cls,
259  block);
260  }
261  }
262  GNUNET_free (qe);
263 }
struct GNUNET_TIME_AbsoluteNBO expiration_time
Expiration time of the block.
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
struct GNUNET_CRYPTO_EcdsaSignature signature
Signature.
Definition: namecache.h:91
Lookup response.
Definition: namecache.h:76
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:670
uint32_t purpose
What does this signature vouch for? This must contain a GNUNET_SIGNATURE_PURPOSE_XXX constant (from g...
struct GNUNET_MessageHeader header
header.type will be GNUNET_MESSAGE_TYPE_NAMECACHE_* header.size will be message size ...
Definition: namecache.h:46
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
Information we have in an encrypted block with record data (i.e.
static struct GNUNET_NAMECACHE_QueueEntry * find_qe(struct GNUNET_NAMECACHE_Handle *h, uint32_t rid)
Find queue entry for the given rid.
Time for absolute time used by GNUnet, in microseconds and in network byte order. ...
uint64_t abs_value_us
The actual value.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
header of what an ECC signature signs this must be followed by "size - 8" bytes of the actual signed ...
#define GNUNET_memcpy(dst, src, n)
static char buf[2048]
void * block_proc_cls
Closure for block_proc.
Definition: namecache_api.c:83
GNUNET_NAMECACHE_BlockProcessor block_proc
Function to call with the blocks we get back; or NULL.
Definition: namecache_api.c:78
uint32_t size
How many bytes does this signature sign? (including this purpose header); in network byte order (!)...
struct GNUNET_NAMECACHE_Header gns_header
Type will be GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE.
Definition: namecache.h:81
int GNUNET_GNSRECORD_block_verify(const struct GNUNET_GNSRECORD_Block *block)
Check if a signature is valid.
static unsigned int size
Size of the "table".
Definition: peer.c:67
struct GNUNET_CRYPTO_EcdsaSignature signature
Signature of the block.
#define GNUNET_ALIGN
gcc-ism to force alignment; we use this to align char-arrays that may then be cast to 'struct's...
struct GNUNET_CRYPTO_EcdsaPublicKey derived_key
Derived public key.
Definition: namecache.h:96
uint32_t r_id
Request ID in NBO.
Definition: namecache.h:51
Connection to the NAMECACHE service.
Definition: namecache_api.c:96
#define GNUNET_SIGNATURE_PURPOSE_GNS_RECORD_SIGN
Signature of a gnunet naming system record block.
#define LOG(kind,...)
Definition: namecache_api.c:40
struct GNUNET_TIME_AbsoluteNBO expire
Expiration time.
Definition: namecache.h:86
An QueueEntry used to store information for a pending NAMECACHE record operation. ...
Definition: namecache_api.c:47
static void force_reconnect(struct GNUNET_NAMECACHE_Handle *h)
Disconnect from service and then reconnect.
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_free(ptr)
Wrapper around free.
Here is the call graph for this function:

◆ handle_block_cache_response()

static void handle_block_cache_response ( void *  cls,
const struct BlockCacheResponseMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE.

Parameters
clsthe struct GNUNET_NAMECACHE_Handle
msgthe message we received
sizethe message size
Returns
GNUNET_OK on success, GNUNET_SYSERR on error and we did NOT notify the client

Definition at line 276 of file namecache_api.c.

References _, GNUNET_NAMECACHE_QueueEntry::cont, GNUNET_NAMECACHE_QueueEntry::cont_cls, find_qe(), BlockCacheResponseMessage::gns_header, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_OK, h, LOG, BlockCacheResponseMessage::op_result, qe, GNUNET_NAMECACHE_Header::r_id, and res.

278 {
279  struct GNUNET_NAMECACHE_Handle *h = cls;
281  int res;
282 
284  "Received BLOCK_CACHE_RESPONSE\n");
285  qe = find_qe (h,
286  ntohl (msg->gns_header.r_id));
287  if (NULL == qe)
288  return;
289  res = ntohl (msg->op_result);
290  /* TODO: add actual error message from namecache to response... */
291  if (NULL != qe->cont)
292  qe->cont (qe->cont_cls,
293  res,
294  (GNUNET_OK == res)
295  ? NULL
296  : _("Namecache failed to cache block"));
297  GNUNET_free (qe);
298 }
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
static struct GNUNET_NAMECACHE_QueueEntry * find_qe(struct GNUNET_NAMECACHE_Handle *h, uint32_t rid)
Find queue entry for the given rid.
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
void * cont_cls
Closure for cont.
Definition: namecache_api.c:73
static int res
struct GNUNET_NAMECACHE_Header gns_header
Type will be GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE.
Definition: namecache.h:139
uint32_t r_id
Request ID in NBO.
Definition: namecache.h:51
Connection to the NAMECACHE service.
Definition: namecache_api.c:96
#define LOG(kind,...)
Definition: namecache_api.c:40
An QueueEntry used to store information for a pending NAMECACHE record operation. ...
Definition: namecache_api.c:47
int32_t op_result
GNUNET_OK on success, GNUNET_SYSERR error
Definition: namecache.h:144
#define GNUNET_free(ptr)
Wrapper around free.
GNUNET_NAMECACHE_ContinuationWithStatus cont
Continuation to call.
Definition: namecache_api.c:68
Here is the call graph for this function:

◆ mq_error_handler()

static void mq_error_handler ( void *  cls,
enum GNUNET_MQ_Error  error 
)
static

Generic error handler, called with the appropriate error code and the same closure specified at the creation of the message queue.

Not every message queue implementation supports an error handler.

Parameters
clsclosure with the struct GNUNET_NAMECACHE_Handle *
errorerror code

Definition at line 310 of file namecache_api.c.

References force_reconnect(), and h.

Referenced by reconnect().

312 {
313  struct GNUNET_NAMECACHE_Handle *h = cls;
314 
315  force_reconnect (h);
316 }
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
Connection to the NAMECACHE service.
Definition: namecache_api.c:96
static void force_reconnect(struct GNUNET_NAMECACHE_Handle *h)
Disconnect from service and then reconnect.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reconnect()

static void reconnect ( struct GNUNET_NAMECACHE_Handle h)
static

Reconnect to namecache service.

Parameters
hthe handle to the NAMECACHE service

Definition at line 325 of file namecache_api.c.

References GNUNET_NAMECACHE_Handle::cfg, GNUNET_assert, GNUNET_CLIENT_connect(), GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE, GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE, GNUNET_MQ_handler_end, GNUNET_MQ_hd_fixed_size, GNUNET_MQ_hd_var_size, GNUNET_NAMECACHE_Handle::mq, and mq_error_handler().

Referenced by GNUNET_NAMECACHE_connect(), and reconnect_task().

326 {
328  GNUNET_MQ_hd_var_size (lookup_block_response,
331  h),
332  GNUNET_MQ_hd_fixed_size (block_cache_response,
335  h),
337  };
338  GNUNET_assert (NULL == h->mq);
339  h->mq = GNUNET_CLIENT_connect (h->cfg,
340  "namecache",
341  handlers,
343  h);
344 }
#define GNUNET_MESSAGE_TYPE_NAMECACHE_LOOKUP_BLOCK_RESPONSE
Service to client: result of block lookup.
#define GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE
Service to client: result of block cache request.
Lookup response.
Definition: namecache.h:76
struct GNUNET_MQ_Handle * GNUNET_CLIENT_connect(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *service_name, const struct GNUNET_MQ_MessageHandler *handlers, GNUNET_MQ_ErrorHandler error_handler, void *error_handler_cls)
Create a message queue to connect to a GNUnet service.
Definition: client.c:901
Response to a request to cache a block.
Definition: namecache.h:134
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MQ_hd_fixed_size(name, code, str, ctx)
static void mq_error_handler(void *cls, enum GNUNET_MQ_Error error)
Generic error handler, called with the appropriate error code and the same closure specified at the c...
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
#define GNUNET_MQ_hd_var_size(name, code, str, ctx)
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration to use.
Message handler for a specific message type.
struct GNUNET_MQ_Handle * mq
Message queue to service.
#define GNUNET_MQ_handler_end()
End-marker for the handlers array.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ reconnect_task()

static void reconnect_task ( void *  cls)
static

Re-establish the connection to the service.

Parameters
clshandle to use to re-connect.

Definition at line 353 of file namecache_api.c.

References h, reconnect(), and GNUNET_NAMECACHE_Handle::reconnect_task.

Referenced by force_reconnect().

354 {
355  struct GNUNET_NAMECACHE_Handle *h = cls;
356 
357  h->reconnect_task = NULL;
358  reconnect (h);
359 }
struct GNUNET_SCHEDULER_Task * reconnect_task
Reconnect task.
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
static void reconnect(struct GNUNET_NAMECACHE_Handle *h)
Reconnect to namecache service.
Connection to the NAMECACHE service.
Definition: namecache_api.c:96
Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_op_id()

static uint32_t get_op_id ( struct GNUNET_NAMECACHE_Handle h)
static

Get a fresh operation id to distinguish between namecache requests.

Parameters
hthe namecache handle
Returns
next operation id to use

Definition at line 402 of file namecache_api.c.

References GNUNET_NAMECACHE_Handle::last_op_id_used.

Referenced by GNUNET_NAMECACHE_block_cache(), and GNUNET_NAMECACHE_lookup_block().

403 {
404  return h->last_op_id_used++;
405 }
uint32_t last_op_id_used
The last operation id used for a NAMECACHE operation.
Here is the caller graph for this function: