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 363 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().

364 {
366 
367  h->reconnect = GNUNET_NO;
368  GNUNET_MQ_destroy(h->mq);
369  h->mq = NULL;
370  while (NULL != (qe = h->op_head))
371  {
373  h->op_tail,
374  qe);
375  if (NULL != qe->cont)
376  qe->cont(qe->cont_cls,
378  _("Error communicating with namecache service"));
379  GNUNET_free(qe);
380  }
382  "Reconnecting to namecache\n");
386  h);
387 }
#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:78
#define _(String)
GNU gettext support macro.
Definition: platform.h:181
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:1237
void * cont_cls
Closure for cont.
Definition: namecache_api.c:71
struct GNUNET_MQ_Handle * mq
Message queue to service.
#define GNUNET_SYSERR
Definition: gnunet_common.h:76
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:821
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:66
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 158 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().

160 {
162 
163  for (qe = h->op_head; qe != NULL; qe = qe->next)
164  {
165  if (qe->op_id == rid)
166  {
168  h->op_tail,
169  qe);
170  return qe;
171  }
172  }
173  return NULL;
174 }
#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:86
struct GNUNET_NAMECACHE_QueueEntry * next
Kept in a DLL.
Definition: namecache_api.c:51
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 185 of file namecache_api.c.

References GNUNET_OK.

187 {
188  /* any length will do, format validation is in handler */
189  return GNUNET_OK;
190 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75

◆ 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 201 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.

203 {
204  struct GNUNET_NAMECACHE_Handle *h = cls;
205  size_t size;
207 
209  "Received LOOKUP_BLOCK_RESPONSE\n");
210  qe = find_qe(h,
211  ntohl(msg->gns_header.r_id));
212  if (NULL == qe)
213  return;
215  {
216  /* no match found */
217  if (NULL != qe->block_proc)
218  qe->block_proc(qe->block_proc_cls,
219  NULL);
220  GNUNET_free(qe);
221  return;
222  }
223  size = ntohs(msg->gns_header.header.size)
224  - sizeof(struct LookupBlockResponseMessage);
225  {
226  char buf[size + sizeof(struct GNUNET_GNSRECORD_Block)] GNUNET_ALIGN;
227  struct GNUNET_GNSRECORD_Block *block;
228 
229  block = (struct GNUNET_GNSRECORD_Block *)buf;
230  block->signature = msg->signature;
231  block->derived_key = msg->derived_key;
233  block->purpose.size = htonl(size +
234  sizeof(struct GNUNET_TIME_AbsoluteNBO) +
235  sizeof(struct GNUNET_CRYPTO_EccSignaturePurpose));
236  block->expiration_time = msg->expire;
237  GNUNET_memcpy(&block[1],
238  &msg[1],
239  size);
240  if (GNUNET_OK !=
242  {
243  GNUNET_break(0);
244  if (NULL != qe->block_proc)
245  qe->block_proc(qe->block_proc_cls,
246  NULL);
247  force_reconnect(h);
248  }
249  else
250  {
251  if (NULL != qe->block_proc)
252  qe->block_proc(qe->block_proc_cls,
253  block);
254  }
255  }
256  GNUNET_free(qe);
257 }
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:87
Lookup response.
Definition: namecache.h:73
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:671
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:45
#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
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 ...
static char buf[2048]
void * block_proc_cls
Closure for block_proc.
Definition: namecache_api.c:81
GNUNET_NAMECACHE_BlockProcessor block_proc
Function to call with the blocks we get back; or NULL.
Definition: namecache_api.c:76
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:77
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:66
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:92
uint32_t r_id
Request ID in NBO.
Definition: namecache.h:50
Connection to the NAMECACHE service.
Definition: namecache_api.c:93
#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:82
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 270 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.

272 {
273  struct GNUNET_NAMECACHE_Handle *h = cls;
275  int res;
276 
278  "Received BLOCK_CACHE_RESPONSE\n");
279  qe = find_qe(h,
280  ntohl(msg->gns_header.r_id));
281  if (NULL == qe)
282  return;
283  res = ntohl(msg->op_result);
284  /* TODO: add actual error message from namecache to response... */
285  if (NULL != qe->cont)
286  qe->cont(qe->cont_cls,
287  res,
288  (GNUNET_OK == res)
289  ? NULL
290  : _("Namecache failed to cache block"));
291  GNUNET_free(qe);
292 }
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:75
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:181
void * cont_cls
Closure for cont.
Definition: namecache_api.c:71
static int res
struct GNUNET_NAMECACHE_Header gns_header
Type will be GNUNET_MESSAGE_TYPE_NAMECACHE_BLOCK_CACHE_RESPONSE.
Definition: namecache.h:133
uint32_t r_id
Request ID in NBO.
Definition: namecache.h:50
Connection to the NAMECACHE service.
Definition: namecache_api.c:93
#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:138
#define GNUNET_free(ptr)
Wrapper around free.
GNUNET_NAMECACHE_ContinuationWithStatus cont
Continuation to call.
Definition: namecache_api.c:66
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 304 of file namecache_api.c.

References force_reconnect(), and h.

Referenced by reconnect().

306 {
307  struct GNUNET_NAMECACHE_Handle *h = cls;
308 
309  force_reconnect(h);
310 }
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
Connection to the NAMECACHE service.
Definition: namecache_api.c:93
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 319 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().

320 {
322  GNUNET_MQ_hd_var_size(lookup_block_response,
325  h),
326  GNUNET_MQ_hd_fixed_size(block_cache_response,
329  h),
331  };
332 
333  GNUNET_assert(NULL == h->mq);
334  h->mq = GNUNET_CLIENT_connect(h->cfg,
335  "namecache",
336  handlers,
338  h);
339 }
#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:73
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:900
Response to a request to cache a block.
Definition: namecache.h:129
#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.
Definition: namecache_api.c:97
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 348 of file namecache_api.c.

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

Referenced by force_reconnect().

349 {
350  struct GNUNET_NAMECACHE_Handle *h = cls;
351 
352  h->reconnect_task = NULL;
353  reconnect(h);
354 }
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:93
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 397 of file namecache_api.c.

References GNUNET_NAMECACHE_Handle::last_op_id_used.

Referenced by GNUNET_NAMECACHE_block_cache(), and GNUNET_NAMECACHE_lookup_block().

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