GNUnet  0.19.3
Name Store service

Store naming information on a GNUnet node. More...

Collaboration diagram for Name Store service:

Data Structures

struct  GNUNET_NAMESTORE_RecordInfo
 A struct for record bulk import. More...
 

Typedefs

typedef void(* GNUNET_NAMESTORE_ContinuationWithStatus) (void *cls, enum GNUNET_ErrorCode ec)
 Continuation called to notify client about result of the operation. More...
 
typedef void(* GNUNET_NAMESTORE_RecordMonitor) (void *cls, const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
 Process a record that was stored in the namestore. More...
 
typedef void(* GNUNET_NAMESTORE_RecordSetMonitor) (void *cls, const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)
 Process a record set that was stored in the namestore. More...
 

Enumerations

enum  GNUNET_NAMESTORE_TxControl { GNUNET_NAMESTORE_TX_BEGIN = 0 , GNUNET_NAMESTORE_TX_COMMIT = 1 , GNUNET_NAMESTORE_TX_ROLLBACK = 2 }
 Transaction control types. More...
 

Functions

struct GNUNET_NAMESTORE_HandleGNUNET_NAMESTORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Connect to the namestore service. More...
 
void GNUNET_NAMESTORE_disconnect (struct GNUNET_NAMESTORE_Handle *h)
 Disconnect from the namestore service (and free associated resources). More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
 Store an item in the namestore. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_records_store2 (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, unsigned int rd_set_count, const struct GNUNET_NAMESTORE_RecordInfo *record_info, unsigned int *rds_sent, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
 Store one or more record sets in the namestore. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_records_store_ (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, int is_zonemaster, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
 Store an item in the namestore. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_records_lookup (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls)
 Lookup an item in the namestore. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_records_lookup2 (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls, enum GNUNET_GNSRECORD_Filter filter)
 Lookup an item in the namestore with GNSRECORD filter. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_zone_to_name (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *zone, const struct GNUNET_IDENTITY_PublicKey *value_zone, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor proc, void *proc_cls)
 Look for an existing PKEY delegation record for a given public key. More...
 
void GNUNET_NAMESTORE_cancel (struct GNUNET_NAMESTORE_QueueEntry *qe)
 Cancel a namestore operation. More...
 
struct GNUNET_NAMESTORE_ZoneIteratorGNUNET_NAMESTORE_zone_iteration_start (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *zone, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor proc, void *proc_cls, GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls)
 
struct GNUNET_NAMESTORE_ZoneIteratorGNUNET_NAMESTORE_zone_iteration_start2 (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *zone, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordSetMonitor proc, void *proc_cls, GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls, enum GNUNET_GNSRECORD_Filter filter)
 Starts a new zone iteration (used to periodically PUT all of our records into our DHT). More...
 
void GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *it, uint64_t limit)
 Calls the record processor specified in GNUNET_NAMESTORE_zone_iteration_start for the next record. More...
 
void GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator *it)
 Stops iteration and releases the namestore handle for further calls. More...
 
struct GNUNET_NAMESTORE_ZoneMonitorGNUNET_NAMESTORE_zone_monitor_start (const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_IDENTITY_PrivateKey *zone, int iterate_first, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor monitor, void *monitor_cls, GNUNET_SCHEDULER_TaskCallback sync_cb, void *sync_cb_cls)
 
struct GNUNET_NAMESTORE_ZoneMonitorGNUNET_NAMESTORE_zone_monitor_start2 (const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_IDENTITY_PrivateKey *zone, int iterate_first, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordSetMonitor monitor, void *monitor_cls, GNUNET_SCHEDULER_TaskCallback sync_cb, void *sync_cb_cls, enum GNUNET_GNSRECORD_Filter filter)
 Begin monitoring a zone for changes. More...
 
void GNUNET_NAMESTORE_zone_monitor_next (struct GNUNET_NAMESTORE_ZoneMonitor *zm, uint64_t limit)
 Calls the monitor processor specified in GNUNET_NAMESTORE_zone_monitor_start for the next record(s). More...
 
void GNUNET_NAMESTORE_zone_monitor_stop (struct GNUNET_NAMESTORE_ZoneMonitor *zm)
 Stop monitoring a zone for changes. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_transaction_begin (struct GNUNET_NAMESTORE_Handle *h, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
 New API draft. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_transaction_rollback (struct GNUNET_NAMESTORE_Handle *h, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
 Begin rollback all actions in a transaction. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_transaction_commit (struct GNUNET_NAMESTORE_Handle *h, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
 Commit a namestore transaction. More...
 
struct GNUNET_NAMESTORE_QueueEntryGNUNET_NAMESTORE_records_edit (struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls)
 

Detailed Description

Store naming information on a GNUnet node.

Naming information can either be records for which this peer/user is authoritative, or blocks which are cached, encrypted naming data from other peers.

See also
Documentation

Typedef Documentation

◆ GNUNET_NAMESTORE_ContinuationWithStatus

typedef void(* GNUNET_NAMESTORE_ContinuationWithStatus) (void *cls, enum GNUNET_ErrorCode ec)

Continuation called to notify client about result of the operation.

Parameters
clsclosure
successGNUNET_SYSERR on failure (including timeout/queue drop/failure to validate) GNUNET_NO if content was already there or not found GNUNET_YES (or other positive value) on success
ecthe GNUNET_ErrorCode, GNUNET_EC_NONE on success.

Definition at line 129 of file gnunet_namestore_service.h.

◆ GNUNET_NAMESTORE_RecordMonitor

typedef void(* GNUNET_NAMESTORE_RecordMonitor) (void *cls, const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)

Process a record that was stored in the namestore.

Parameters
clsclosure
zoneprivate key of the zone
labellabel of the records
rd_countnumber of entries in rd array, 0 if label was deleted
rdarray of records with data to store

Definition at line 240 of file gnunet_namestore_service.h.

◆ GNUNET_NAMESTORE_RecordSetMonitor

typedef void(* GNUNET_NAMESTORE_RecordSetMonitor) (void *cls, const struct GNUNET_IDENTITY_PrivateKey *zone, const char *label, unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, struct GNUNET_TIME_Absolute expiry)

Process a record set that was stored in the namestore.

The record set expiration value takes existing TOMBSTONE records into account even if those are not returned.

Parameters
clsclosure
zoneprivate key of the zone
labellabel of the records
rd_countnumber of entries in rd array, 0 if label was deleted
rdarray of records with data to store
expirythe expiration of this record set.

Definition at line 260 of file gnunet_namestore_service.h.

Enumeration Type Documentation

◆ GNUNET_NAMESTORE_TxControl

Transaction control types.

They roughly correspond to DB transaction controls

Enumerator
GNUNET_NAMESTORE_TX_BEGIN 
GNUNET_NAMESTORE_TX_COMMIT 
GNUNET_NAMESTORE_TX_ROLLBACK 

Definition at line 79 of file gnunet_namestore_service.h.

80 {
84 };
@ GNUNET_NAMESTORE_TX_COMMIT
@ GNUNET_NAMESTORE_TX_ROLLBACK
@ GNUNET_NAMESTORE_TX_BEGIN

Function Documentation

◆ GNUNET_NAMESTORE_connect()

struct GNUNET_NAMESTORE_Handle* GNUNET_NAMESTORE_connect ( const struct GNUNET_CONFIGURATION_Handle cfg)

Connect to the namestore service.

Parameters
cfgconfiguration to use
Returns
handle to use to access the service

Connect to the namestore service.

Parameters
cfgconfiguration to use
Returns
handle to the GNS service, or NULL on error

Definition at line 970 of file namestore_api.c.

971 {
972  struct GNUNET_NAMESTORE_Handle *h;
973 
975  h->cfg = cfg;
976  reconnect (h);
977  if (NULL == h->mq)
978  {
979  GNUNET_free (h);
980  return NULL;
981  }
982  return h;
983 }
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_free(ptr)
Wrapper around free.
static void reconnect(struct GNUNET_NAMESTORE_Handle *h)
Reconnect to namestore service.
struct GNUNET_MQ_Handle * mq
Our connection to the ARM service.
Definition: arm_api.c:107
const struct GNUNET_CONFIGURATION_Handle * cfg
The configuration that we are using.
Definition: arm_api.c:112
Connection to the NAMESTORE service.

References cfg, GNUNET_ARM_Handle::cfg, GNUNET_free, GNUNET_new, h, GNUNET_ARM_Handle::mq, and reconnect().

Referenced by GNUNET_CONVERSATION_phone_create(), libgnunet_plugin_rest_namestore_init(), namestore_import(), RECLAIM_TICKETS_init(), run(), run_service(), and store_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_disconnect()

void GNUNET_NAMESTORE_disconnect ( struct GNUNET_NAMESTORE_Handle h)

Disconnect from the namestore service (and free associated resources).

Must not be called from within operation callbacks of the API.

Parameters
hhandle to the namestore
hhandle to the namestore

Definition at line 993 of file namestore_api.c.

994 {
997 
998  LOG (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n");
999  GNUNET_break (NULL == h->op_head);
1000  while (NULL != (q = h->op_head))
1001  {
1002  GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, q);
1003  GNUNET_free (q);
1004  }
1005  GNUNET_break (NULL == h->z_head);
1006  while (NULL != (z = h->z_head))
1007  {
1008  GNUNET_CONTAINER_DLL_remove (h->z_head, h->z_tail, z);
1009  GNUNET_free (z);
1010  }
1011  if (NULL != h->mq)
1012  {
1013  GNUNET_MQ_destroy (h->mq);
1014  h->mq = NULL;
1015  }
1016  if (NULL != h->reconnect_task)
1017  {
1019  h->reconnect_task = NULL;
1020  }
1021  GNUNET_free (h);
1022 }
static struct GNUNET_REVOCATION_Query * q
Handle for revocation query.
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.
@ GNUNET_ERROR_TYPE_DEBUG
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:683
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:975
#define LOG(kind,...)
Definition: namestore_api.c:40
struct GNUNET_SCHEDULER_Task * reconnect_task
ID of the reconnect task (if any).
Definition: arm_api.c:147
An QueueEntry used to store information for a pending NAMESTORE record operation.
Definition: namestore_api.c:53
Handle for a zone iterator operation.

References GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_MQ_destroy(), GNUNET_SCHEDULER_cancel(), h, LOG, GNUNET_ARM_Handle::mq, q, and GNUNET_ARM_Handle::reconnect_task.

Referenced by cleanup(), cleanup_handle(), do_shutdown(), GNUNET_CONVERSATION_phone_destroy(), libgnunet_plugin_rest_namestore_done(), RECLAIM_TICKETS_deinit(), and shutdown_task().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_records_store()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_records_store ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey pkey,
const char *  label,
unsigned int  rd_count,
const struct GNUNET_GNSRECORD_Data rd,
GNUNET_NAMESTORE_ContinuationWithStatus  cont,
void *  cont_cls 
)

Store an item in the namestore.

If the item is already present, it is replaced with the new record. Use an empty array to remove all records under the given name.

The continuation is called after the value has been stored in the database. Monitors may be notified asynchronously (basically with a buffer). However, if any monitor is consistently too slow to keep up with the changes, calling cont will be delayed until the monitors do keep up.

Parameters
hhandle to the namestore
pkeyprivate key of the zone
labelname that is being mapped
rd_countnumber of records in the 'rd' array
rdarray of records with data to store
contcontinuation to call when done
cont_clsclosure for cont
Returns
handle to abort the request

Definition at line 1051 of file namestore_api.c.

1059 {
1060  struct GNUNET_NAMESTORE_RecordInfo ri;
1061  unsigned int rds_sent;
1062  ri.a_label = label;
1063  ri.a_rd_count = rd_count;
1064  ri.a_rd = (struct GNUNET_GNSRECORD_Data *) rd;
1065  return GNUNET_NAMESTORE_records_store2 (h, pkey, 1, &ri, &rds_sent,
1066  cont, cont_cls);
1067 }
static char * pkey
Public key of the zone to look in, in ASCII.
static unsigned int rd_count
Number of records for currently parsed set.
static struct GNUNET_GNSRECORD_Data rd[50]
The record data under a single label.
struct GNUNET_NAMESTORE_QueueEntry * GNUNET_NAMESTORE_records_store2(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, unsigned int rd_set_count, const struct GNUNET_NAMESTORE_RecordInfo *record_info, unsigned int *rds_sent, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls)
Store one or more record sets in the namestore.
A struct for record bulk import.

References GNUNET_NAMESTORE_RecordInfo::a_label, GNUNET_NAMESTORE_RecordInfo::a_rd, GNUNET_NAMESTORE_RecordInfo::a_rd_count, GNUNET_NAMESTORE_records_store2(), h, pkey, rd, and rd_count.

Referenced by attr_store_task(), cred_add_cb(), del_monitor(), DID_create(), get_existing_record(), handle_attribute_delete_message(), handle_credential_delete_message(), issue_ticket(), move_attr_finished(), namestore_delete(), ns_lookup_cb(), parse(), process_result(), process_tickets(), purge_attributes(), purge_next_record(), register_do_cb(), remove_did_document_ego_lookup_cb(), revoke_attrs_cb(), run_with_zone_pkey(), rvk_move_attr_cb(), and update_tickets().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_records_store2()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_records_store2 ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey pkey,
unsigned int  rd_set_count,
const struct GNUNET_NAMESTORE_RecordInfo record_info,
unsigned int *  rds_sent,
GNUNET_NAMESTORE_ContinuationWithStatus  cont,
void *  cont_cls 
)

Store one or more record sets in the namestore.

If any item is already present, it is replaced with the new record. Use an empty array to remove all records under the given name.

The continuation is called after the records have been stored in the database. They may not yet have been commited. Monitors may be notified asynchronously (basically with a buffer when commited). However, if any monitor is consistently too slow to keep up with the changes, calling cont will be delayed until the monitors do keep up. Uncommited store requests within a transaction (GNUNET_NAMESTORE_transaction_begin) cause cont to be called immediately before the commit and before notification of monitors.

Parameters
hhandle to the namestore
pkeyprivate key of the zone
rd_set_countthe number of record sets
record_infothe records to add containing rd_set_count records
contcontinuation to call when done
rds_sentset to how many record sets could actually be sent
cont_clsclosure for cont
Returns
handle to abort the request

Definition at line 1070 of file namestore_api.c.

1078 {
1080  struct GNUNET_MQ_Envelope *env;
1081  const char *label;
1082  unsigned int rd_count;
1083  const struct GNUNET_GNSRECORD_Data *rd;
1084  char *name_tmp;
1085  char *rd_ser;
1086  ssize_t rd_ser_len[rd_set_count];
1087  size_t name_len;
1088  uint32_t rid;
1089  struct RecordStoreMessage *msg;
1090  struct RecordSet *rd_set;
1091  ssize_t sret;
1092  int i;
1093  size_t rd_set_len = 0;
1094  size_t key_len = 0;
1095  size_t max_len;
1097  max_len = UINT16_MAX - key_len - sizeof (struct RecordStoreMessage);
1098 
1099  *rds_sent = 0;
1100  for (i = 0; i < rd_set_count; i++)
1101  {
1102  label = record_info[i].a_label;
1103  rd_count = record_info[i].a_rd_count;
1104  rd = record_info[i].a_rd;
1105  name_len = strlen (label) + 1;
1106  if (name_len > MAX_NAME_LEN)
1107  {
1108  GNUNET_break (0);
1109  *rds_sent = 0;
1110  return NULL;
1111  }
1112  rd_ser_len[i] = GNUNET_GNSRECORD_records_get_size (rd_count, rd);
1113  if (rd_ser_len[i] < 0)
1114  {
1115  GNUNET_break (0);
1116  *rds_sent = 0;
1117  return NULL;
1118  }
1119  if (rd_ser_len[i] > max_len)
1120  {
1121  GNUNET_break (0);
1122  *rds_sent = 0;
1123  return NULL;
1124  }
1125  if ((rd_set_len + sizeof (struct RecordSet) + name_len + rd_ser_len[i]) >
1126  max_len)
1127  break;
1128  rd_set_len += sizeof (struct RecordSet) + name_len + rd_ser_len[i];
1129  }
1130  *rds_sent = i;
1132  "Sending %u of %u records!\n", *rds_sent, rd_set_count);
1133  rid = get_op_id (h);
1135  qe->h = h;
1136  qe->cont = cont;
1137  qe->cont_cls = cont_cls;
1138  qe->op_id = rid;
1139  GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, qe);
1140  /* setup msg */
1142  key_len + rd_set_len,
1144  GNUNET_assert (NULL != msg);
1145  GNUNET_assert (NULL != env);
1146  msg->gns_header.r_id = htonl (rid);
1147  msg->key_len = htons (key_len);
1148  msg->rd_set_count = htons ((uint16_t) (*rds_sent));
1150  &msg[1],
1151  key_len);
1152  rd_set = (struct RecordSet*) (((char*) &msg[1]) + key_len);
1153  for (int i = 0; i < *rds_sent; i++)
1154  {
1155  label = record_info[i].a_label;
1156  rd = record_info[i].a_rd;
1157  name_len = strlen (label) + 1;
1158  rd_set->name_len = htons (name_len);
1159  rd_set->rd_count = htons (record_info[i].a_rd_count);
1160  rd_set->rd_len = htons (rd_ser_len[i]);
1161  rd_set->reserved = ntohs (0);
1162  name_tmp = (char *) &rd_set[1];
1163  GNUNET_memcpy (name_tmp, label, name_len);
1164  rd_ser = &name_tmp[name_len];
1165  sret = GNUNET_GNSRECORD_records_serialize (record_info[i].a_rd_count,
1166  rd, rd_ser_len[i], rd_ser);
1167  if ((0 > sret) || (sret != rd_ser_len[i]))
1168  {
1169  GNUNET_break (0);
1170  GNUNET_free (env);
1171  return NULL;
1172  }
1173  // Point to next RecordSet
1174  rd_set = (struct RecordSet*) &name_tmp[name_len + rd_ser_len[i]];
1175  }
1177  "Sending NAMESTORE_RECORD_STORE message for name %u record sets\n",
1178  *rds_sent);
1179  qe->timeout_task =
1181  if (NULL == h->mq)
1182  {
1183  qe->env = env;
1185  "Delaying NAMESTORE_RECORD_STORE message as namestore is not ready!\n");
1186  }
1187  else
1188  {
1189  GNUNET_MQ_send (h->mq, env);
1190  }
1191  return qe;
1192 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
static struct GNUNET_DATASTORE_QueueEntry * qe
Current operation.
#define GNUNET_CONTAINER_DLL_insert_tail(head, tail, element)
Insert an element at the tail of a DLL.
ssize_t GNUNET_GNSRECORD_records_serialize(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd, size_t dest_size, char *dest)
Serialize the given records to the given destination buffer.
GNUNET_NETWORK_STRUCT_END ssize_t GNUNET_GNSRECORD_records_get_size(unsigned int rd_count, const struct GNUNET_GNSRECORD_Data *rd)
Calculate how many bytes we will need to serialize the given records.
ssize_t GNUNET_IDENTITY_write_private_key_to_buffer(const struct GNUNET_IDENTITY_PrivateKey *key, void *buffer, size_t len)
Writes a GNUNET_IDENTITY_PrivateKey to a compact buffer.
Definition: identity_api.c:933
ssize_t GNUNET_IDENTITY_private_key_get_length(const struct GNUNET_IDENTITY_PrivateKey *key)
Get the compacted length of a GNUNET_IDENTITY_PrivateKey.
Definition: identity_api.c:809
#define GNUNET_log(kind,...)
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
@ GNUNET_ERROR_TYPE_WARNING
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:304
#define GNUNET_MQ_msg_extra(mvar, esize, type)
Allocate an envelope, with extra space allocated after the space needed by the message struct.
Definition: gnunet_mq_lib.h:62
#define GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE
Client to service: store records (as authority)
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:1272
#define MAX_NAME_LEN
Maximum length of any name, including 0-termination.
Definition: namecache.h:33
#define NAMESTORE_DELAY_TOLERANCE
We grant the namestore up to 1 minute of latency, if it is slower than that, store queries will fail.
Definition: namestore_api.c:46
static void warn_delay(void *cls)
Task launched to warn the user that the namestore is excessively slow and that a query was thus dropp...
static uint32_t get_op_id(struct GNUNET_NAMESTORE_Handle *h)
Get a fresh operation id to distinguish between namestore requests.
struct GNUNET_DATASTORE_Handle * h
Handle to the master context.
struct GNUNET_MQ_Envelope * env
Envelope of the request to transmit, NULL after transmission.
GNUNET_DATASTORE_ContinuationWithStatus cont
Function to call after transmission of the request.
void * cont_cls
Closure for cont.
struct GNUNET_GNSRECORD_Data * a_rd
uint16_t rd_len
Length of serialized record data.
Definition: namestore.h:64
uint16_t rd_count
Number of records contained.
Definition: namestore.h:69
uint16_t reserved
Reserved for alignment.
Definition: namestore.h:74
uint16_t name_len
Name length.
Definition: namestore.h:59
Store a record to the namestore (as authority).
Definition: namestore.h:87
uint16_t rd_set_count
Number of record sets.
Definition: namestore.h:96

References GNUNET_NAMESTORE_RecordInfo::a_label, GNUNET_NAMESTORE_RecordInfo::a_rd, GNUNET_NAMESTORE_RecordInfo::a_rd_count, GNUNET_DATASTORE_QueueEntry::cont, GNUNET_DATASTORE_QueueEntry::cont_cls, env, GNUNET_DATASTORE_QueueEntry::env, get_op_id(), GNUNET_assert, GNUNET_break, GNUNET_CONTAINER_DLL_insert_tail, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_WARNING, GNUNET_free, GNUNET_GNSRECORD_records_get_size(), GNUNET_GNSRECORD_records_serialize(), GNUNET_IDENTITY_private_key_get_length(), GNUNET_IDENTITY_write_private_key_to_buffer(), GNUNET_log, GNUNET_memcpy, GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_new, GNUNET_SCHEDULER_add_delayed(), h, GNUNET_DATASTORE_QueueEntry::h, LOG, MAX_NAME_LEN, GNUNET_ARM_Handle::mq, msg, RecordSet::name_len, NAMESTORE_DELAY_TOLERANCE, pkey, qe, rd, rd_count, RecordSet::rd_count, RecordSet::rd_len, RecordStoreMessage::rd_set_count, RecordSet::reserved, and warn_delay().

Referenced by bulk_tx_start(), GNUNET_NAMESTORE_records_store(), and import_next_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_records_store_()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_records_store_ ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey pkey,
const char *  label,
unsigned int  rd_count,
const struct GNUNET_GNSRECORD_Data rd,
int  is_zonemaster,
GNUNET_NAMESTORE_ContinuationWithStatus  cont,
void *  cont_cls 
)

Store an item in the namestore.

If the item is already present, it is replaced with the new record. Use an empty array to remove all records under the given name.

The continuation is called after the value has been stored in the database. Monitors may be notified asynchronously (basically with a buffer). However, if any monitor is consistently too slow to keep up with the changes, calling cont will be delayed until the monitors do keep up.

Parameters
hhandle to the namestore
pkeyprivate key of the zone
labelname that is being mapped
rd_countnumber of records in the 'rd' array
rdarray of records with data to store
is_zonemasterupdate tombstones, do not process monitors
contcontinuation to call when done
cont_clsclosure for cont
Returns
handle to abort the request

◆ GNUNET_NAMESTORE_records_lookup()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_records_lookup ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey pkey,
const char *  label,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor  rm,
void *  rm_cls 
)

Lookup an item in the namestore.

Parameters
hhandle to the namestore
pkeyprivate key of the zone
labelname that is being mapped
error_cbfunction to call on error (i.e. disconnect) the handle is afterwards invalid
error_cb_clsclosure for error_cb
rmfunction to call with the result (with 0 records if we don't have that label); the handle is afterwards invalid
rm_clsclosure for rm
Returns
handle to abort the request

Definition at line 1250 of file namestore_api.c.

1258 {
1259  return records_lookup (h, pkey, label,
1260  error_cb, error_cb_cls,
1262 
1263 }
static void error_cb(void *cls)
Function called if lookup fails.
Definition: gnunet-abd.c:479
@ GNUNET_GNSRECORD_FILTER_NONE
No filter flags set.
@ GNUNET_NO
static struct GNUNET_NAMESTORE_QueueEntry * records_lookup(struct GNUNET_NAMESTORE_Handle *h, const struct GNUNET_IDENTITY_PrivateKey *pkey, const char *label, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_NAMESTORE_RecordMonitor rm, void *rm_cls, int is_edit_request, enum GNUNET_GNSRECORD_Filter filter)

References error_cb(), GNUNET_NAMESTORE_QueueEntry::error_cb_cls, GNUNET_GNSRECORD_FILTER_NONE, GNUNET_NO, h, pkey, and records_lookup().

Referenced by create_response(), cred_store_task(), handle_collect(), move_attrs(), namestore_add_or_update(), RECLAIM_TICKETS_revoke(), run_with_zone_pkey(), and store_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_records_lookup2()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_records_lookup2 ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey pkey,
const char *  label,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor  rm,
void *  rm_cls,
enum GNUNET_GNSRECORD_Filter  filter 
)

Lookup an item in the namestore with GNSRECORD filter.

Parameters
hhandle to the namestore
pkeyprivate key of the zone
labelname that is being mapped
error_cbfunction to call on error (i.e. disconnect) the handle is afterwards invalid
error_cb_clsclosure for error_cb
rmfunction to call with the result (with 0 records if we don't have that label); the handle is afterwards invalid
rm_clsclosure for rm
filterthe record set filter to use
Returns
handle to abort the request

Definition at line 1266 of file namestore_api.c.

1275 {
1276  return records_lookup (h, pkey, label,
1277  error_cb, error_cb_cls,
1278  rm, rm_cls, GNUNET_NO, filter);
1279 
1280 }
static struct GNUNET_CONTAINER_BloomFilter * filter
Bloomfilter to quickly tell if we don't have the content.

References error_cb(), GNUNET_NAMESTORE_QueueEntry::error_cb_cls, filter, GNUNET_NO, h, pkey, and records_lookup().

Referenced by namestore_get().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_to_name()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_zone_to_name ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey zone,
const struct GNUNET_IDENTITY_PublicKey value_zone,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor  proc,
void *  proc_cls 
)

Look for an existing PKEY delegation record for a given public key.

Returns at most one result to the processor.

Parameters
hhandle to the namestore
zoneprivate key of the zone to look up in, never NULL
value_zonepublic key of the target zone (value), never NULL
error_cbfunction to call on error (i.e. disconnect) the handle is afterwards invalid
error_cb_clsclosure for error_cb
procfunction to call on the matching records, or with NULL (rd_count == 0) if there are no matching records; the handle is afterwards invalid
proc_clsclosure for proc
Returns
a handle that can be used to cancel

Definition at line 1299 of file namestore_api.c.

1307 {
1309  struct GNUNET_MQ_Envelope *env;
1310  struct ZoneToNameMessage *msg;
1311  uint32_t rid;
1312  size_t key_len;
1313  ssize_t pkey_len;
1314 
1315  rid = get_op_id (h);
1317  qe->h = h;
1318  qe->error_cb = error_cb;
1319  qe->error_cb_cls = error_cb_cls;
1320  qe->proc = proc;
1321  qe->proc_cls = proc_cls;
1322  qe->op_id = rid;
1323  GNUNET_CONTAINER_DLL_insert_tail (h->op_head, h->op_tail, qe);
1324 
1329  msg->gns_header.r_id = htonl (rid);
1330  msg->key_len = htons (key_len);
1331  msg->pkey_len = htons (pkey_len);
1334  (char*) &msg[1] + key_len,
1335  pkey_len);
1336  if (NULL == h->mq)
1337  qe->env = env;
1338  else
1339  GNUNET_MQ_send (h->mq, env);
1340  return qe;
1341 }
static char * zone
Name of the zone being managed.
ssize_t GNUNET_IDENTITY_write_public_key_to_buffer(const struct GNUNET_IDENTITY_PublicKey *key, void *buffer, size_t len)
Writes a GNUNET_IDENTITY_PublicKey to a compact buffer.
Definition: identity_api.c:890
ssize_t GNUNET_IDENTITY_public_key_get_length(const struct GNUNET_IDENTITY_PublicKey *key)
Get the compacted length of a GNUNET_IDENTITY_PublicKey.
Definition: identity_api.c:830
#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME
Client to service: "reverse" lookup for zone name based on zone key.
Lookup a name for a zone hash.
Definition: namestore.h:218
uint16_t pkey_len
Length of the public value zone key.
Definition: namestore.h:232
uint16_t key_len
Length of the zone key.
Definition: namestore.h:227

References env, GNUNET_DATASTORE_QueueEntry::env, error_cb(), get_op_id(), GNUNET_CONTAINER_DLL_insert_tail, GNUNET_IDENTITY_private_key_get_length(), GNUNET_IDENTITY_public_key_get_length(), GNUNET_IDENTITY_write_private_key_to_buffer(), GNUNET_IDENTITY_write_public_key_to_buffer(), GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_TO_NAME, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_new, h, GNUNET_DATASTORE_QueueEntry::h, ZoneToNameMessage::key_len, GNUNET_ARM_Handle::mq, msg, ZoneToNameMessage::pkey_len, qe, and zone.

Referenced by iterate_done_cb(), and run_with_zone_pkey().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_cancel()

void GNUNET_NAMESTORE_cancel ( struct GNUNET_NAMESTORE_QueueEntry qe)

Cancel a namestore operation.

The final callback from the operation must not have been done yet. Must be called on any namestore operation that has not yet completed prior to calling GNUNET_NAMESTORE_disconnect.

Parameters
qeoperation to cancel

The final callback from the operation must not have been done yet.

Parameters
qeoperation to cancel

Definition at line 1492 of file namestore_api.c.

1493 {
1494  free_qe (qe);
1495 }
static void free_qe(struct GNUNET_NAMESTORE_QueueEntry *qe)
Free qe.

References free_qe(), and qe.

Referenced by cleanup_adh(), cleanup_as_handle(), cleanup_handle(), cleanup_issue_handle(), cleanup_rvk(), completed_cb(), do_shutdown(), reset_handles(), and warn_delay().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_iteration_start()

struct GNUNET_NAMESTORE_ZoneIterator* GNUNET_NAMESTORE_zone_iteration_start ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey zone,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor  proc,
void *  proc_cls,
GNUNET_SCHEDULER_TaskCallback  finish_cb,
void *  finish_cb_cls 
)
Deprecated:
since 0.16.7 will be replaced in 0.18
See also
GNUNET_NAMESTORE_zone_iteration_start2()

Starts a new zone iteration (used to periodically PUT all of our records into our DHT). This MUST lock the struct GNUNET_NAMESTORE_Handle for any other calls than GNUNET_NAMESTORE_zone_iterator_next() and GNUNET_NAMESTORE_zone_iteration_stop. proc will be called once immediately, and then again after GNUNET_NAMESTORE_zone_iterator_next() is invoked.

On error (disconnect), error_cb will be invoked. On normal completion, finish_cb proc will be invoked.

Parameters
hhandle to the namestore
zonezone to access, NULL for all zones
error_cbfunction to call on error (i.e. disconnect), the handle is afterwards invalid
error_cb_clsclosure for error_cb
procfunction to call on each name from the zone; it will be called repeatedly with a value (if available)
proc_clsclosure for proc
finish_cbfunction to call on completion the handle is afterwards invalid
finish_cb_clsclosure for finish_cb
Returns
an iterator handle to use for iteration

Definition at line 1345 of file namestore_api.c.

1354 {
1355  struct GNUNET_NAMESTORE_ZoneIterator *it;
1356  struct GNUNET_MQ_Envelope *env;
1358  uint32_t rid;
1359  size_t key_len = 0;
1360 
1361  LOG (GNUNET_ERROR_TYPE_DEBUG, "Sending ZONE_ITERATION_START message\n");
1362  rid = get_op_id (h);
1364  it->h = h;
1365  it->error_cb = error_cb;
1366  it->error_cb_cls = error_cb_cls;
1367  it->finish_cb = finish_cb;
1368  it->finish_cb_cls = finish_cb_cls;
1369  it->proc = proc;
1370  it->proc_cls = proc_cls;
1371  it->op_id = rid;
1372  if (NULL != zone)
1373  {
1374  it->zone = *zone;
1376  }
1377  GNUNET_CONTAINER_DLL_insert_tail (h->z_head, h->z_tail, it);
1379  key_len,
1381  msg->gns_header.r_id = htonl (rid);
1382  msg->key_len = htons (key_len);
1383  if (NULL != zone)
1385  if (NULL == h->mq)
1386  it->env = env;
1387  else
1388  GNUNET_MQ_send (h->mq, env);
1389  return it;
1390 }
#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START
Client to service: please start iteration; receives "GNUNET_MESSAGE_TYPE_NAMESTORE_LOOKUP_NAME_RESPON...
void * finish_cb_cls
Closure for error_cb.
void * error_cb_cls
Closure for error_cb.
struct GNUNET_NAMESTORE_Handle * h
Main handle to access the namestore.
void * proc_cls
Closure for proc.
uint32_t op_id
The operation id this zone iteration operation has.
struct GNUNET_IDENTITY_PrivateKey zone
Private key of the zone.
GNUNET_NAMESTORE_RecordMonitor proc
The continuation to call with the results.
GNUNET_SCHEDULER_TaskCallback error_cb
Function to call on errors.
struct GNUNET_MQ_Envelope * env
Envelope of the message to send to the service, if not yet sent.
GNUNET_SCHEDULER_TaskCallback finish_cb
Function to call on completion.
Start a zone iteration for the given zone.
Definition: namestore.h:433
uint16_t key_len
Length of the zone key.
Definition: namestore.h:448

References env, GNUNET_NAMESTORE_ZoneIterator::env, error_cb(), GNUNET_NAMESTORE_ZoneIterator::error_cb, GNUNET_NAMESTORE_ZoneIterator::error_cb_cls, GNUNET_NAMESTORE_ZoneIterator::finish_cb, GNUNET_NAMESTORE_ZoneIterator::finish_cb_cls, get_op_id(), GNUNET_CONTAINER_DLL_insert_tail, GNUNET_ERROR_TYPE_DEBUG, GNUNET_IDENTITY_private_key_get_length(), GNUNET_IDENTITY_write_private_key_to_buffer(), GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_new, h, GNUNET_NAMESTORE_ZoneIterator::h, ZoneIterationStartMessage::key_len, LOG, GNUNET_ARM_Handle::mq, msg, GNUNET_NAMESTORE_ZoneIterator::op_id, GNUNET_NAMESTORE_ZoneIterator::proc, GNUNET_NAMESTORE_ZoneIterator::proc_cls, zone, and GNUNET_NAMESTORE_ZoneIterator::zone.

Referenced by create_response(), get_ego(), handle_credential_iteration_start(), handle_iteration_start(), iterate_zones(), move_attrs(), RECLAIM_TICKETS_issue(), RECLAIM_TICKETS_iteration_start(), and start_consistency_update().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_iteration_start2()

struct GNUNET_NAMESTORE_ZoneIterator* GNUNET_NAMESTORE_zone_iteration_start2 ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey zone,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordSetMonitor  proc,
void *  proc_cls,
GNUNET_SCHEDULER_TaskCallback  finish_cb,
void *  finish_cb_cls,
enum GNUNET_GNSRECORD_Filter  filter 
)

Starts a new zone iteration (used to periodically PUT all of our records into our DHT).

This MUST lock the struct GNUNET_NAMESTORE_Handle for any other calls than GNUNET_NAMESTORE_zone_iterator_next() and GNUNET_NAMESTORE_zone_iteration_stop. proc will be called once immediately, and then again after GNUNET_NAMESTORE_zone_iterator_next() is invoked.

On error (disconnect), error_cb will be invoked. On normal completion, finish_cb proc will be invoked.

Parameters
hhandle to the namestore
zonezone to access, NULL for all zones
error_cbfunction to call on error (i.e. disconnect), the handle is afterwards invalid
error_cb_clsclosure for error_cb
procfunction to call on each name from the zone; it will be called repeatedly with a value (if available)
proc_clsclosure for proc
finish_cbfunction to call on completion the handle is afterwards invalid
finish_cb_clsclosure for finish_cb
filterthe record set filter to use
Returns
an iterator handle to use for iteration

Definition at line 1393 of file namestore_api.c.

1403 {
1404  struct GNUNET_NAMESTORE_ZoneIterator *it;
1405  struct GNUNET_MQ_Envelope *env;
1407  uint32_t rid;
1408  size_t key_len = 0;
1409 
1410  LOG (GNUNET_ERROR_TYPE_DEBUG, "Sending ZONE_ITERATION_START message\n");
1411  rid = get_op_id (h);
1413  it->h = h;
1414  it->error_cb = error_cb;
1415  it->error_cb_cls = error_cb_cls;
1416  it->finish_cb = finish_cb;
1417  it->finish_cb_cls = finish_cb_cls;
1418  it->proc2 = proc;
1419  it->proc_cls = proc_cls;
1420  it->op_id = rid;
1421  if (NULL != zone)
1422  {
1423  it->zone = *zone;
1425  }
1426  GNUNET_CONTAINER_DLL_insert_tail (h->z_head, h->z_tail, it);
1428  key_len,
1430  msg->gns_header.r_id = htonl (rid);
1431  msg->key_len = htons (key_len);
1432  msg->filter = htons ((uint16_t) filter);
1433  if (NULL != zone)
1435  if (NULL == h->mq)
1436  it->env = env;
1437  else
1438  GNUNET_MQ_send (h->mq, env);
1439  return it;
1440 }
GNUNET_NAMESTORE_RecordSetMonitor proc2
The continuation to call with the results.

References env, GNUNET_NAMESTORE_ZoneIterator::env, error_cb(), GNUNET_NAMESTORE_ZoneIterator::error_cb, GNUNET_NAMESTORE_ZoneIterator::error_cb_cls, filter, GNUNET_NAMESTORE_ZoneIterator::finish_cb, GNUNET_NAMESTORE_ZoneIterator::finish_cb_cls, get_op_id(), GNUNET_CONTAINER_DLL_insert_tail, GNUNET_ERROR_TYPE_DEBUG, GNUNET_IDENTITY_private_key_get_length(), GNUNET_IDENTITY_write_private_key_to_buffer(), GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_START, GNUNET_MQ_msg_extra, GNUNET_MQ_send(), GNUNET_new, h, GNUNET_NAMESTORE_ZoneIterator::h, ZoneIterationStartMessage::key_len, LOG, GNUNET_ARM_Handle::mq, msg, GNUNET_NAMESTORE_ZoneIterator::op_id, GNUNET_NAMESTORE_ZoneIterator::proc2, GNUNET_NAMESTORE_ZoneIterator::proc_cls, zone, and GNUNET_NAMESTORE_ZoneIterator::zone.

Referenced by namestore_get(), publish_zone_dht_start(), and run_with_zone_pkey().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_iterator_next()

void GNUNET_NAMESTORE_zone_iterator_next ( struct GNUNET_NAMESTORE_ZoneIterator it,
uint64_t  limit 
)

Calls the record processor specified in GNUNET_NAMESTORE_zone_iteration_start for the next record.

Parameters
itthe iterator
limitnumber of records to return to the iterator in one shot (before GNUNET_NAMESTORE_zone_iterator_next is to be called again)

Definition at line 1444 of file namestore_api.c.

1446 {
1447  struct GNUNET_NAMESTORE_Handle *h = it->h;
1448  struct ZoneIterationNextMessage *msg;
1449  struct GNUNET_MQ_Envelope *env;
1450 
1452  "Sending ZONE_ITERATION_NEXT message with limit %llu\n",
1453  (unsigned long long) limit);
1455  msg->gns_header.r_id = htonl (it->op_id);
1456  msg->limit = GNUNET_htonll (limit);
1457  GNUNET_MQ_send (h->mq, env);
1458 }
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:37
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:77
#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT
Client to service: next record(s) in iteration please.
Ask for next result of zone iteration for the given operation.
Definition: namestore.h:460

References env, GNUNET_ERROR_TYPE_DEBUG, GNUNET_htonll(), GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_NEXT, GNUNET_MQ_msg, GNUNET_MQ_send(), h, GNUNET_NAMESTORE_ZoneIterator::h, LOG, GNUNET_ARM_Handle::mq, msg, and GNUNET_NAMESTORE_ZoneIterator::op_id.

Referenced by attr_iter_cb(), check_credential_iteration_start(), collect_tickets_cb(), consistency_iter(), display_record_iterator(), filter_tickets_cb(), handle_credential_iteration_next(), handle_iteration_next(), iterate_do_cb(), namestore_list_iteration(), ns_lookup_result_cb(), publish_zone_namestore_next(), purge_orphans_iterator(), purge_zone_iterator(), RECLAIM_TICKETS_iteration_next(), rvk_ticket_update(), and zone_iterator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_iteration_stop()

void GNUNET_NAMESTORE_zone_iteration_stop ( struct GNUNET_NAMESTORE_ZoneIterator it)

Stops iteration and releases the namestore handle for further calls.

Must be called on any iteration that has not yet completed prior to calling GNUNET_NAMESTORE_disconnect.

Parameters
itthe iterator
itthe iterator

Definition at line 1467 of file namestore_api.c.

1468 {
1469  struct GNUNET_NAMESTORE_Handle *h = it->h;
1470  struct GNUNET_MQ_Envelope *env;
1471  struct ZoneIterationStopMessage *msg;
1472 
1473  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending ZONE_ITERATION_STOP message\n");
1474  if (NULL != h->mq)
1475  {
1476  env =
1478  msg->gns_header.r_id = htonl (it->op_id);
1479  GNUNET_MQ_send (h->mq, env);
1480  }
1481  free_ze (it);
1482 }
#define GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP
Client to service: stop iterating.
static void free_ze(struct GNUNET_NAMESTORE_ZoneIterator *ze)
Free ze.
Stop zone iteration for the given operation.
Definition: namestore.h:479

References env, free_ze(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_log, GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_ITERATION_STOP, GNUNET_MQ_msg, GNUNET_MQ_send(), h, GNUNET_NAMESTORE_ZoneIterator::h, GNUNET_ARM_Handle::mq, msg, and GNUNET_NAMESTORE_ZoneIterator::op_id.

Referenced by cleanup_adh(), cleanup_handle(), cleanup_iter(), cleanup_rvk(), completed_cb(), do_shutdown(), filter_tickets_cb(), iterate_do_cb(), RECLAIM_TICKETS_iteration_stop(), reset_handles(), and shutdown_task().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_monitor_start()

struct GNUNET_NAMESTORE_ZoneMonitor* GNUNET_NAMESTORE_zone_monitor_start ( const struct GNUNET_CONFIGURATION_Handle cfg,
const struct GNUNET_IDENTITY_PrivateKey zone,
int  iterate_first,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor  monitor,
void *  monitor_cls,
GNUNET_SCHEDULER_TaskCallback  sync_cb,
void *  sync_cb_cls 
)
Deprecated:
since 0.16.7 will be replaced in 0.18
See also
GNUNET_NAMESTORE_zone_monitor_start2()

Begin monitoring a zone for changes. Will first call the monitor function on all existing records in the selected zone(s) if iterate_first is GNUNET_YES. In any case, we will then call sync_cb, and then afterwards call the monitor whenever a record changes. If the namestore disconnects, the error_cb function is called with a disconnect event. Once the connection is re-established, the process begins from the start (depending on iterate_first, we will again first do all existing records, then sync, then updates).

Parameters
cfgconfiguration to use to connect to namestore
zonezone to monitor, NULL for all zones
iterate_firstGNUNET_YES to first iterate over all existing records, GNUNET_NO to only return changes that happen from now on
error_cbfunction to call on error (i.e. disconnect); note that unlike the other error callbacks in this API, a call to this function does NOT destroy the monitor handle, it merely signals that monitoring is down. You need to still explicitly call GNUNET_NAMESTORE_zone_monitor_stop().
error_cb_clsclosure for error_cb
monitorfunction to call on zone changes, with an initial limit of 1
monitor_clsclosure for monitor
sync_cbfunction called when we're in sync with the namestore
sync_cb_clsclosure for sync_cb
Returns
handle to stop monitoring

Definition at line 316 of file namestore_api_monitor.c.

326 {
328 
330  if (NULL != zone)
331  {
333  zm->zone = *zone;
334  }
336  zm->error_cb = error_cb;
338  zm->monitor = monitor;
340  zm->sync_cb = sync_cb;
342  zm->cfg = cfg;
343  reconnect (zm);
344  if (NULL == zm->mq)
345  {
346  GNUNET_free (zm);
347  return NULL;
348  }
349  return zm;
350 }
static int monitor
Monitor ARM activity.
Definition: gnunet-arm.c:64
static void sync_cb(void *cls)
Function called once we are in sync in monitor mode.
static struct GNUNET_NAMESTORE_ZoneMonitor * zm
Monitor handle.
static void reconnect(struct GNUNET_NAMESTORE_ZoneMonitor *zm)
Reconnect to the namestore service.
Handle for a monitoring activity.
GNUNET_SCHEDULER_TaskCallback sync_cb
Function called when we've synchronized.
void * monitor_cls
Closure for monitor.
void * sync_cb_cls
Closure for sync_cb.
struct GNUNET_IDENTITY_PrivateKey zone
Monitored zone.
struct GNUNET_MQ_Handle * mq
Handle to namestore service.
GNUNET_NAMESTORE_RecordMonitor monitor
Function to call on events.
void * error_cb_cls
Closure for error_cb.
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration (to reconnect).
uint32_t key_len
Zone key length.
int iterate_first
Do we first iterate over all existing records?
GNUNET_SCHEDULER_TaskCallback error_cb
Function to call on errors.

References cfg, GNUNET_NAMESTORE_ZoneMonitor::cfg, error_cb(), GNUNET_NAMESTORE_ZoneMonitor::error_cb, GNUNET_NAMESTORE_ZoneMonitor::error_cb_cls, GNUNET_free, GNUNET_IDENTITY_private_key_get_length(), GNUNET_new, GNUNET_NAMESTORE_ZoneMonitor::iterate_first, GNUNET_NAMESTORE_ZoneMonitor::key_len, monitor, GNUNET_NAMESTORE_ZoneMonitor::monitor, GNUNET_NAMESTORE_ZoneMonitor::monitor_cls, GNUNET_NAMESTORE_ZoneMonitor::mq, reconnect(), sync_cb(), GNUNET_NAMESTORE_ZoneMonitor::sync_cb, GNUNET_NAMESTORE_ZoneMonitor::sync_cb_cls, zm, zone, and GNUNET_NAMESTORE_ZoneMonitor::zone.

Here is the call graph for this function:

◆ GNUNET_NAMESTORE_zone_monitor_start2()

struct GNUNET_NAMESTORE_ZoneMonitor* GNUNET_NAMESTORE_zone_monitor_start2 ( const struct GNUNET_CONFIGURATION_Handle cfg,
const struct GNUNET_IDENTITY_PrivateKey zone,
int  iterate_first,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordSetMonitor  monitor,
void *  monitor_cls,
GNUNET_SCHEDULER_TaskCallback  sync_cb,
void *  sync_cb_cls,
enum GNUNET_GNSRECORD_Filter  filter 
)

Begin monitoring a zone for changes.

Will first call the monitor function on all existing records in the selected zone(s) if iterate_first is GNUNET_YES. In any case, we will then call sync_cb, and then afterwards call the monitor whenever a record changes. If the namestore disconnects, the error_cb function is called with a disconnect event. Once the connection is re-established, the process begins from the start (depending on iterate_first, we will again first do all existing records, then sync, then updates).

Parameters
cfgconfiguration to use to connect to namestore
zonezone to monitor, NULL for all zones
iterate_firstGNUNET_YES to first iterate over all existing records, GNUNET_NO to only return changes that happen from now on
error_cbfunction to call on error (i.e. disconnect); note that unlike the other error callbacks in this API, a call to this function does NOT destroy the monitor handle, it merely signals that monitoring is down. You need to still explicitly call GNUNET_NAMESTORE_zone_monitor_stop().
error_cb_clsclosure for error_cb
monitorfunction to call on zone changes, with an initial limit of 1
monitor_clsclosure for monitor
sync_cbfunction called when we're in sync with the namestore
sync_cb_clsclosure for sync_cb
filterthe record set filter to use
Returns
handle to stop monitoring

Definition at line 353 of file namestore_api_monitor.c.

364 {
366 
368  if (NULL != zone)
369  {
371  zm->zone = *zone;
372  }
374  zm->error_cb = error_cb;
376  zm->monitor2 = monitor;
378  zm->sync_cb = sync_cb;
380  zm->cfg = cfg;
381  zm->filter = filter;
382  reconnect (zm);
383  if (NULL == zm->mq)
384  {
385  GNUNET_free (zm);
386  return NULL;
387  }
388  return zm;
389 }
enum GNUNET_GNSRECORD_Filter filter
Record set filter for this monitor.
GNUNET_NAMESTORE_RecordSetMonitor monitor2
Function to call on events.

References cfg, GNUNET_NAMESTORE_ZoneMonitor::cfg, error_cb(), GNUNET_NAMESTORE_ZoneMonitor::error_cb, GNUNET_NAMESTORE_ZoneMonitor::error_cb_cls, filter, GNUNET_NAMESTORE_ZoneMonitor::filter, GNUNET_free, GNUNET_IDENTITY_private_key_get_length(), GNUNET_new, GNUNET_NAMESTORE_ZoneMonitor::iterate_first, GNUNET_NAMESTORE_ZoneMonitor::key_len, monitor, GNUNET_NAMESTORE_ZoneMonitor::monitor2, GNUNET_NAMESTORE_ZoneMonitor::monitor_cls, GNUNET_NAMESTORE_ZoneMonitor::mq, reconnect(), sync_cb(), GNUNET_NAMESTORE_ZoneMonitor::sync_cb, GNUNET_NAMESTORE_ZoneMonitor::sync_cb_cls, zm, zone, and GNUNET_NAMESTORE_ZoneMonitor::zone.

Referenced by run(), and run_with_zone_pkey().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_monitor_next()

void GNUNET_NAMESTORE_zone_monitor_next ( struct GNUNET_NAMESTORE_ZoneMonitor zm,
uint64_t  limit 
)

Calls the monitor processor specified in GNUNET_NAMESTORE_zone_monitor_start for the next record(s).

This function is used to allow clients that merely monitor the NAMESTORE to still throttle namestore operations, so we can be sure that the monitors can keep up.

Note that GNUNET_NAMESTORE_records_store() only waits for this call if the previous limit set by the client was already reached. Thus, by using a limit greater than 1, monitors basically enable a queue of notifications to be processed asynchronously with some delay. Note that even with a limit of 1 the GNUNET_NAMESTORE_records_store() function will run asynchronously and the continuation may be invoked before the monitors completed (or even started) processing the notification. Thus, monitors will only closely track the current state of the namestore, but not be involved in the transactions.

Parameters
zmthe monitor
limitnumber of records to return to the iterator in one shot (before GNUNET_NAMESTORE_zone_monitor_next is to be called again)

Definition at line 414 of file namestore_api_monitor.c.

416 {
417  struct GNUNET_MQ_Envelope *env;
418  struct ZoneMonitorNextMessage *nm;
419 
421  nm->limit = GNUNET_htonll (limit);
422  GNUNET_MQ_send (zm->mq, env);
423 }
#define GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_NEXT
Client to service: I am now ready for the next (set of) monitor events.
Ask for next result of zone iteration for the given operation.
Definition: namestore.h:409
uint64_t limit
Number of records to return to the iterator in one shot (before #GNUNET_MESSAGE_TYPE_NAMESTORE_ZONE_M...
Definition: namestore.h:425

References env, GNUNET_htonll(), GNUNET_MESSAGE_TYPE_NAMESTORE_MONITOR_NEXT, GNUNET_MQ_msg, GNUNET_MQ_send(), ZoneMonitorNextMessage::limit, GNUNET_NAMESTORE_ZoneMonitor::mq, and zm.

Referenced by dht_put_continuation(), display_record_monitor(), handle_monitor_event(), and run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_zone_monitor_stop()

void GNUNET_NAMESTORE_zone_monitor_stop ( struct GNUNET_NAMESTORE_ZoneMonitor zm)

Stop monitoring a zone for changes.

Parameters
zmhandle to the monitor activity to stop

Definition at line 432 of file namestore_api_monitor.c.

433 {
434  if (NULL != zm->mq)
435  {
437  zm->mq = NULL;
438  }
439  GNUNET_free (zm);
440 }

References GNUNET_free, GNUNET_MQ_destroy(), GNUNET_NAMESTORE_ZoneMonitor::mq, and zm.

Referenced by reset_handles(), and shutdown_task().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_transaction_begin()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_transaction_begin ( struct GNUNET_NAMESTORE_Handle h,
GNUNET_NAMESTORE_ContinuationWithStatus  cont,
void *  cont_cls 
)

New API draft.

Experimental Begin a namestore transaction.

Parameters
hhandle to the namestore
contfunction to call on result
cont_clsclosure for cont
Returns
handle to abort the request

Definition at line 1533 of file namestore_api.c.

1536 {
1537  return send_transaction_control_msg (h, cont, cont_cls,
1539 }
static struct GNUNET_NAMESTORE_QueueEntry * send_transaction_control_msg(struct GNUNET_NAMESTORE_Handle *h, GNUNET_NAMESTORE_ContinuationWithStatus cont, void *cont_cls, enum GNUNET_NAMESTORE_TxControl ctrl)
New API draft.

References GNUNET_NAMESTORE_QueueEntry::cont, GNUNET_NAMESTORE_QueueEntry::cont_cls, GNUNET_NAMESTORE_TX_BEGIN, h, and send_transaction_control_msg().

Referenced by id_connect_cb(), identity_cb(), and namestore_import().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_transaction_rollback()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_transaction_rollback ( struct GNUNET_NAMESTORE_Handle h,
GNUNET_NAMESTORE_ContinuationWithStatus  cont,
void *  cont_cls 
)

Begin rollback all actions in a transaction.

Reverts all actions performed since GNUNET_NAMESTORE_transaction_begin

Parameters
hhandle to the namestore
contfunction to call on result
cont_clsclosure for cont
Returns
handle to abort the request

Definition at line 1553 of file namestore_api.c.

1557 {
1558  return send_transaction_control_msg (h, cont, cont_cls,
1560 }

References GNUNET_NAMESTORE_QueueEntry::cont, GNUNET_NAMESTORE_QueueEntry::cont_cls, GNUNET_NAMESTORE_TX_ROLLBACK, h, and send_transaction_control_msg().

Here is the call graph for this function:

◆ GNUNET_NAMESTORE_transaction_commit()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_transaction_commit ( struct GNUNET_NAMESTORE_Handle h,
GNUNET_NAMESTORE_ContinuationWithStatus  cont,
void *  cont_cls 
)

Commit a namestore transaction.

Saves all actions performed since GNUNET_NAMESTORE_transaction_begin

Parameters
hhandle to the namestore
contfunction to call on result
cont_clsclosure for cont
Returns
handle to abort the request

Definition at line 1542 of file namestore_api.c.

1546 {
1547  return send_transaction_control_msg (h, cont, cont_cls,
1549 }

References GNUNET_NAMESTORE_QueueEntry::cont, GNUNET_NAMESTORE_QueueEntry::cont_cls, GNUNET_NAMESTORE_TX_COMMIT, h, and send_transaction_control_msg().

Referenced by finish_command(), import_next_cb(), parse(), and process_command_stdin().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_NAMESTORE_records_edit()

struct GNUNET_NAMESTORE_QueueEntry* GNUNET_NAMESTORE_records_edit ( struct GNUNET_NAMESTORE_Handle h,
const struct GNUNET_IDENTITY_PrivateKey pkey,
const char *  label,
GNUNET_SCHEDULER_TaskCallback  error_cb,
void *  error_cb_cls,
GNUNET_NAMESTORE_RecordMonitor  rm,
void *  rm_cls 
)

Definition at line 1284 of file namestore_api.c.

1292 {
1293  return records_lookup (h, pkey, label,
1294  error_cb, error_cb_cls,
1296 }
@ GNUNET_YES

References error_cb(), GNUNET_NAMESTORE_QueueEntry::error_cb_cls, GNUNET_GNSRECORD_FILTER_NONE, GNUNET_YES, h, pkey, and records_lookup().

Here is the call graph for this function: