GNUnet  0.11.x
Data Structures | Macros | Functions
reclaim_api.c File Reference

api to interact with the reclaim service More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_constants.h"
#include "gnunet_mq_lib.h"
#include "gnunet_protocols.h"
#include "gnunet_reclaim_attribute_lib.h"
#include "gnunet_reclaim_service.h"
#include "reclaim.h"
Include dependency graph for reclaim_api.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_RECLAIM_Operation
 Handle for an operation with the service. More...
 
struct  GNUNET_RECLAIM_TicketIterator
 Handle for a ticket iterator operation. More...
 
struct  GNUNET_RECLAIM_AttributeIterator
 Handle for a attribute iterator operation. More...
 
struct  GNUNET_RECLAIM_Handle
 Handle to the service. More...
 

Macros

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

Functions

static void reconnect (struct GNUNET_RECLAIM_Handle *h)
 Try again to connect to the service. More...
 
static void reconnect_task (void *cls)
 Reconnect. More...
 
static void force_reconnect (struct GNUNET_RECLAIM_Handle *handle)
 Disconnect from service and then reconnect. More...
 
static void free_it (struct GNUNET_RECLAIM_AttributeIterator *it)
 Free it. More...
 
static void free_op (struct GNUNET_RECLAIM_Operation *op)
 Free op. 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 handle_success_response (void *cls, const struct SuccessResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_SUCCESS_RESPONSE. More...
 
static int check_consume_ticket_result (void *cls, const struct ConsumeTicketResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT. More...
 
static void handle_consume_ticket_result (void *cls, const struct ConsumeTicketResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT. More...
 
static int check_attribute_result (void *cls, const struct AttributeResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT. More...
 
static void handle_attribute_result (void *cls, const struct AttributeResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT. More...
 
static int check_attestation_result (void *cls, const struct AttributeResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT. More...
 
static void handle_attestation_result (void *cls, const struct AttributeResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT. More...
 
static int check_reference_result (void *cls, const struct ReferenceResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT. More...
 
static void handle_reference_result (void *cls, const struct ReferenceResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT. More...
 
static void handle_ticket_result (void *cls, const struct TicketResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT. More...
 
static void handle_revoke_ticket_result (void *cls, const struct RevokeTicketResultMessage *msg)
 Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT. More...
 
struct GNUNET_RECLAIM_HandleGNUNET_RECLAIM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Connect to the reclaim service. More...
 
void GNUNET_RECLAIM_cancel (struct GNUNET_RECLAIM_Operation *op)
 Cancel an operation. More...
 
void GNUNET_RECLAIM_disconnect (struct GNUNET_RECLAIM_Handle *h)
 Disconnect from service. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_attribute_store (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr, const struct GNUNET_TIME_Relative *exp_interval, GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 Store an attribute. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_attribute_delete (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr, GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 Delete an attribute. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_attestation_store (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const struct GNUNET_RECLAIM_ATTESTATION_Claim *attr, const struct GNUNET_TIME_Relative *exp_interval, GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 Store an attestation. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_attestation_delete (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const struct GNUNET_RECLAIM_ATTESTATION_Claim *attr, GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 Delete an attestation. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_attestation_reference_store (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const struct GNUNET_RECLAIM_ATTESTATION_REFERENCE *attr, const struct GNUNET_TIME_Relative *exp_interval, GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 Store an attestation reference. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_attestation_reference_delete (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *pkey, const struct GNUNET_RECLAIM_ATTESTATION_REFERENCE *attr, GNUNET_RECLAIM_ContinuationWithStatus cont, void *cont_cls)
 Delete an attestation reference. More...
 
struct GNUNET_RECLAIM_AttributeIteratorGNUNET_RECLAIM_get_attributes_start (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_RECLAIM_AttributeResult proc, void *proc_cls, GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls)
 List all attributes for a local identity. More...
 
void GNUNET_RECLAIM_get_attributes_next (struct GNUNET_RECLAIM_AttributeIterator *it)
 Calls the record processor specified in GNUNET_RECLAIM_get_attributes_start for the next record. More...
 
void GNUNET_RECLAIM_get_attributes_stop (struct GNUNET_RECLAIM_AttributeIterator *it)
 Stops iteration and releases the handle for further calls. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_ticket_issue (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *iss, const struct GNUNET_CRYPTO_EcdsaPublicKey *rp, const struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs, GNUNET_RECLAIM_TicketCallback cb, void *cb_cls)
 Issues a ticket to another relying party. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_ticket_consume (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, const struct GNUNET_RECLAIM_Ticket *ticket, GNUNET_RECLAIM_AttributeResult cb, void *cb_cls)
 Consumes an issued ticket. More...
 
struct GNUNET_RECLAIM_TicketIteratorGNUNET_RECLAIM_ticket_iteration_start (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, GNUNET_SCHEDULER_TaskCallback error_cb, void *error_cb_cls, GNUNET_RECLAIM_TicketCallback proc, void *proc_cls, GNUNET_SCHEDULER_TaskCallback finish_cb, void *finish_cb_cls)
 Lists all tickets that have been issued to remote identites (relying parties) More...
 
void GNUNET_RECLAIM_ticket_iteration_next (struct GNUNET_RECLAIM_TicketIterator *it)
 Calls the ticket processor specified in GNUNET_RECLAIM_ticket_iteration_start for the next record. More...
 
void GNUNET_RECLAIM_ticket_iteration_stop (struct GNUNET_RECLAIM_TicketIterator *it)
 Stops iteration and releases the handle for further calls. More...
 
struct GNUNET_RECLAIM_OperationGNUNET_RECLAIM_ticket_revoke (struct GNUNET_RECLAIM_Handle *h, const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity, const struct GNUNET_RECLAIM_Ticket *ticket, GNUNET_RECLAIM_ContinuationWithStatus cb, void *cb_cls)
 Revoked an issued ticket. More...
 

Detailed Description

api to interact with the reclaim service

Author
Martin Schanzenbach

Definition in file reclaim_api.c.

Macro Definition Documentation

◆ LOG

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

Function Documentation

◆ reconnect()

static void reconnect ( struct GNUNET_RECLAIM_Handle h)
static

Try again to connect to the service.

Parameters
hhandle to the reclaim service.

Definition at line 951 of file reclaim_api.c.

References GNUNET_RECLAIM_Handle::cfg, GNUNET_RECLAIM_Operation::env, GNUNET_assert, GNUNET_CLIENT_connect(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT, GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT, GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT, GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT, GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT, GNUNET_MESSAGE_TYPE_RECLAIM_SUCCESS_RESPONSE, GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT, GNUNET_MQ_handler_end, GNUNET_MQ_hd_fixed_size, GNUNET_MQ_hd_var_size, GNUNET_MQ_send_copy(), LOG, GNUNET_RECLAIM_Handle::mq, mq_error_handler(), GNUNET_RECLAIM_Operation::next, op, and GNUNET_RECLAIM_Handle::op_head.

Referenced by GNUNET_RECLAIM_connect(), and reconnect_task().

952 {
954  { GNUNET_MQ_hd_fixed_size (success_response,
956  struct SuccessResultMessage,
957  h),
958  GNUNET_MQ_hd_var_size (attribute_result,
960  struct AttributeResultMessage,
961  h),
962  GNUNET_MQ_hd_var_size (attestation_result,
964  struct AttributeResultMessage,
965  h),
966  GNUNET_MQ_hd_var_size (reference_result,
968  struct ReferenceResultMessage,
969  h),
970  GNUNET_MQ_hd_fixed_size (ticket_result,
972  struct TicketResultMessage,
973  h),
974  GNUNET_MQ_hd_var_size (consume_ticket_result,
977  h),
978  GNUNET_MQ_hd_fixed_size (revoke_ticket_result,
981  h),
984 
985  GNUNET_assert (NULL == h->mq);
986  LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to reclaim service.\n");
987 
988  h->mq =
989  GNUNET_CLIENT_connect (h->cfg, "reclaim", handlers, &mq_error_handler, h);
990  if (NULL == h->mq)
991  return;
992  for (op = h->op_head; NULL != op; op = op->next)
993  GNUNET_MQ_send_copy (h->mq, op->env);
994 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#define GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT
Ticket result message.
Definition: reclaim.h:396
Attribute list is returned from the idp.
Definition: reclaim.h:443
#define GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT
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:1057
Reference plus Attestation is returned from the idp.
Definition: reclaim.h:159
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT
#define GNUNET_MQ_hd_fixed_size(name, code, str, ctx)
Handle for an operation with the service.
Definition: reclaim_api.c:41
struct GNUNET_MQ_Handle * mq
Connection to service (if available).
Definition: reclaim_api.c:300
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
#define GNUNET_MQ_hd_var_size(name, code, str, ctx)
struct GNUNET_MQ_Envelope * env
Envelope with the message for this queue entry.
Definition: reclaim_api.c:87
#define GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
Message handler for a specific message type.
Attribute store/delete response message.
Definition: reclaim.h:103
#define GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
#define GNUNET_MESSAGE_TYPE_RECLAIM_SUCCESS_RESPONSE
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration to use.
Definition: reclaim_api.c:240
Ticket revoke message.
Definition: reclaim.h:374
void GNUNET_MQ_send_copy(struct GNUNET_MQ_Handle *mq, const struct GNUNET_MQ_Envelope *ev)
Send a copy of a message with the given message queue.
Definition: mq.c:432
Attribute is returned from the idp.
Definition: reclaim.h:124
#define GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
#define GNUNET_MQ_handler_end()
End-marker for the handlers array.
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...
Definition: reclaim_api.c:399
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

Reconnect.

Parameters
clsthe handle

Definition at line 329 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::cls, handle, reconnect(), and GNUNET_RECLAIM_Handle::reconnect_task.

Referenced by force_reconnect().

330 {
331  struct GNUNET_RECLAIM_Handle *handle = cls;
332 
333  handle->reconnect_task = NULL;
334  reconnect (handle);
335 }
Handle to the service.
Definition: reclaim_api.c:235
struct GNUNET_SCHEDULER_Task * reconnect_task
Task doing exponential back-off trying to reconnect.
Definition: reclaim_api.c:290
static void reconnect(struct GNUNET_RECLAIM_Handle *h)
Try again to connect to the service.
Definition: reclaim_api.c:951
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ force_reconnect()

static void force_reconnect ( struct GNUNET_RECLAIM_Handle handle)
static

Disconnect from service and then reconnect.

Parameters
handleour service

Definition at line 344 of file reclaim_api.c.

References GNUNET_MQ_destroy(), GNUNET_SCHEDULER_add_delayed(), GNUNET_TIME_STD_BACKOFF, GNUNET_RECLAIM_Handle::mq, GNUNET_RECLAIM_Handle::reconnect_backoff, GNUNET_RECLAIM_Handle::reconnect_task, and reconnect_task().

Referenced by handle_attestation_result(), handle_attribute_result(), handle_reference_result(), and mq_error_handler().

345 {
346  GNUNET_MQ_destroy (handle->mq);
347  handle->mq = NULL;
348  handle->reconnect_backoff =
350  handle->reconnect_task =
353  handle);
354 }
struct GNUNET_SCHEDULER_Task * reconnect_task
Task doing exponential back-off trying to reconnect.
Definition: reclaim_api.c:290
struct GNUNET_MQ_Handle * mq
Connection to service (if available).
Definition: reclaim_api.c:300
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:1253
#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_TIME_Relative reconnect_backoff
Time for next connect retry.
Definition: reclaim_api.c:295
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:824
static void reconnect_task(void *cls)
Reconnect.
Definition: reclaim_api.c:329
Here is the call graph for this function:
Here is the caller graph for this function:

◆ free_it()

static void free_it ( struct GNUNET_RECLAIM_AttributeIterator it)
static

Free it.

Parameters
itentry to free

Definition at line 363 of file reclaim_api.c.

References GNUNET_RECLAIM_AttributeIterator::env, GNUNET_CONTAINER_DLL_remove, GNUNET_free, GNUNET_MQ_discard(), GNUNET_RECLAIM_Operation::h, GNUNET_RECLAIM_AttributeIterator::h, GNUNET_RECLAIM_Handle::it_head, and GNUNET_RECLAIM_Handle::it_tail.

Referenced by GNUNET_RECLAIM_get_attributes_stop(), handle_attestation_result(), handle_attribute_result(), and handle_reference_result().

364 {
365  struct GNUNET_RECLAIM_Handle *h = it->h;
366 
368  if (NULL != it->env)
369  GNUNET_MQ_discard (it->env);
370  GNUNET_free (it);
371 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:235
struct GNUNET_RECLAIM_AttributeIterator * it_tail
Tail of active iterations.
Definition: reclaim_api.c:270
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
void GNUNET_MQ_discard(struct GNUNET_MQ_Envelope *mqm)
Discard the message queue message, free all allocated resources.
Definition: mq.c:321
struct GNUNET_MQ_Envelope * env
Envelope of the message to send to the service, if not yet sent.
Definition: reclaim_api.c:218
struct GNUNET_RECLAIM_AttributeIterator * it_head
Head of active iterations.
Definition: reclaim_api.c:265
struct GNUNET_RECLAIM_Handle * h
Main handle to access the service.
Definition: reclaim_api.c:182
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ free_op()

static void free_op ( struct GNUNET_RECLAIM_Operation op)
static

Free op.

Parameters
opthe operation to free

Definition at line 380 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::env, GNUNET_free, and GNUNET_MQ_discard().

Referenced by GNUNET_RECLAIM_cancel(), handle_attestation_result(), handle_attribute_result(), handle_consume_ticket_result(), handle_reference_result(), handle_revoke_ticket_result(), handle_success_response(), and handle_ticket_result().

381 {
382  if (NULL == op)
383  return;
384  if (NULL != op->env)
385  GNUNET_MQ_discard (op->env);
386  GNUNET_free (op);
387 }
struct GNUNET_MQ_Envelope * env
Envelope with the message for this queue entry.
Definition: reclaim_api.c:87
void GNUNET_MQ_discard(struct GNUNET_MQ_Envelope *mqm)
Discard the message queue message, free all allocated resources.
Definition: mq.c:321
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller 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_GNS_Handle *
errorerror code

Definition at line 399 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::cls, force_reconnect(), and handle.

Referenced by reconnect().

400 {
401  struct GNUNET_RECLAIM_Handle *handle = cls;
402 
403  force_reconnect (handle);
404 }
Handle to the service.
Definition: reclaim_api.c:235
static void force_reconnect(struct GNUNET_RECLAIM_Handle *handle)
Disconnect from service and then reconnect.
Definition: reclaim_api.c:344
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_success_response()

static void handle_success_response ( void *  cls,
const struct SuccessResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_SUCCESS_RESPONSE.

Parameters
cls
msgthe message we received

Definition at line 415 of file reclaim_api.c.

References _, GNUNET_RECLAIM_Operation::as_cb, GNUNET_RECLAIM_Operation::cls, free_op(), GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_SYSERR, GNUNET_RECLAIM_Operation::h, SuccessResultMessage::id, LOG, GNUNET_RECLAIM_Operation::next, op, GNUNET_RECLAIM_Handle::op_head, SuccessResultMessage::op_result, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_Operation::r_id, and res.

416 {
417  struct GNUNET_RECLAIM_Handle *h = cls;
419  uint32_t r_id = ntohl (msg->id);
420  int res;
421  const char *emsg;
422 
423  for (op = h->op_head; NULL != op; op = op->next)
424  if (op->r_id == r_id)
425  break;
426  if (NULL == op)
427  return;
428 
429  res = ntohl (msg->op_result);
431  "Received SUCCESS_RESPONSE with result %d\n",
432  res);
433 
434  /* TODO: add actual error message to response... */
435  if (GNUNET_SYSERR == res)
436  emsg = _ ("failed to store record\n");
437  else
438  emsg = NULL;
439  if (NULL != op->as_cb)
440  op->as_cb (op->cls, res, emsg);
442  free_op (op);
443 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:235
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
GNUNET_RECLAIM_ContinuationWithStatus as_cb
Continuation to invoke after attribute store call.
Definition: reclaim_api.c:67
int32_t op_result
GNUNET_SYSERR on failure, GNUNET_OK on success
Definition: reclaim.h:118
Handle for an operation with the service.
Definition: reclaim_api.c:41
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
#define _(String)
GNU gettext support macro.
Definition: platform.h:180
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
static int res
#define GNUNET_SYSERR
Definition: gnunet_common.h:84
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:113
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function:

◆ check_consume_ticket_result()

static int check_consume_ticket_result ( void *  cls,
const struct ConsumeTicketResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT.

Parameters
cls
msgthe message we received
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 455 of file reclaim_api.c.

References ConsumeTicketResultMessage::attrs_len, GNUNET_break, GNUNET_OK, GNUNET_SYSERR, ConsumeTicketResultMessage::header, and GNUNET_MessageHeader::size.

457 {
458  size_t msg_len;
459  size_t attrs_len;
460 
461  msg_len = ntohs (msg->header.size);
462  attrs_len = ntohs (msg->attrs_len);
463  if (msg_len != sizeof(struct ConsumeTicketResultMessage) + attrs_len)
464  {
465  GNUNET_break (0);
466  return GNUNET_SYSERR;
467  }
468  return GNUNET_OK;
469 }
Attribute list is returned from the idp.
Definition: reclaim.h:443
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:83
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define GNUNET_SYSERR
Definition: gnunet_common.h:84
uint16_t attrs_len
Length of serialized attribute data.
Definition: reclaim.h:463
struct GNUNET_MessageHeader header
Message header.
Definition: reclaim.h:448

◆ handle_consume_ticket_result()

static void handle_consume_ticket_result ( void *  cls,
const struct ConsumeTicketResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_RESULT.

Parameters
cls
msgthe message we received

Definition at line 480 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::ar_cb, GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry::attest, ConsumeTicketResultMessage::attrs_len, GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry::claim, GNUNET_RECLAIM_Operation::cls, free_op(), GNUNET_assert, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free_non_null, GNUNET_log, GNUNET_RECLAIM_ATTRIBUTE_list_deserialize(), GNUNET_RECLAIM_ATTRIBUTE_list_destroy(), GNUNET_RECLAIM_Operation::h, GNUNET_RECLAIM_ATTESTATION_Claim::id, ConsumeTicketResultMessage::id, GNUNET_RECLAIM_ATTESTATION_REFERENCE::id_attest, GNUNET_RECLAIM_ATTRIBUTE_ClaimList::list_head, GNUNET_RECLAIM_Operation::next, GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_Operation::r_id, and GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry::reference.

482 {
483  struct GNUNET_RECLAIM_Handle *h = cls;
485  size_t attrs_len;
486  uint32_t r_id = ntohl (msg->id);
487 
488  attrs_len = ntohs (msg->attrs_len);
489  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Processing ticket result.\n");
490 
491 
492  for (op = h->op_head; NULL != op; op = op->next)
493  if (op->r_id == r_id)
494  break;
495  if (NULL == op)
496  return;
497 
498  {
502  attrs =
503  GNUNET_RECLAIM_ATTRIBUTE_list_deserialize ((char *) &msg[1], attrs_len);
504  if (NULL != op->ar_cb)
505  {
506  if (NULL == attrs)
507  {
508  op->ar_cb (op->cls, &msg->identity, NULL, NULL, NULL);
509  }
510  else
511  {
512  for (le = attrs->list_head; NULL != le; le = le->next)
513  {
514  if (le->reference != NULL && le->attest == NULL)
515  {
516  for (le2 = attrs->list_head; NULL != le2; le2 = le2->next)
517  {
518  if (le2->attest != NULL && le2->attest->id == le->reference->id_attest)
519  {
520  op->ar_cb (op->cls, &msg->identity, le->claim, le2->attest, le->reference);
521  break;
522  }
523 
524  }
525  }
526  }
528  attrs = NULL;
529  }
530  op->ar_cb (op->cls, NULL, NULL, NULL, NULL);
531  }
533  free_op (op);
534  GNUNET_free_non_null (attrs);
535  return;
536  }
537  GNUNET_assert (0);
538 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_RECLAIM_ATTRIBUTE_Claim * claim
The attribute claim.
Handle to the service.
Definition: reclaim_api.c:235
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
struct GNUNET_RECLAIM_ATTESTATION_REFERENCE * reference
The reference.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:453
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
uint64_t id_attest
Referenced ID of Attestation.
Handle for an operation with the service.
Definition: reclaim_api.c:41
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
struct GNUNET_RECLAIM_ATTESTATION_Claim * attest
The attestation claim.
void GNUNET_RECLAIM_ATTRIBUTE_list_destroy(struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList *attrs)
Destroy claim list.
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
GNUNET_RECLAIM_AttributeResult ar_cb
Attribute result callback.
Definition: reclaim_api.c:72
struct GNUNET_CRYPTO_EcdsaPublicKey identity
The public key of the identity.
Definition: reclaim.h:473
A list of GNUNET_RECLAIM_ATTRIBUTE_Claim structures.
uint16_t attrs_len
Length of serialized attribute data.
Definition: reclaim.h:463
#define GNUNET_log(kind,...)
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry * next
DLL.
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry * list_head
List head.
struct GNUNET_RECLAIM_ATTRIBUTE_ClaimList * GNUNET_RECLAIM_ATTRIBUTE_list_deserialize(const char *data, size_t data_size)
Deserialize an attribute list.
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function:

◆ check_attribute_result()

static int check_attribute_result ( void *  cls,
const struct AttributeResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT.

Parameters
cls
msgthe message we received
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 550 of file reclaim_api.c.

References AttributeResultMessage::attr_len, GNUNET_break, GNUNET_OK, GNUNET_SYSERR, AttributeResultMessage::header, and GNUNET_MessageHeader::size.

551 {
552  size_t msg_len;
553  size_t attr_len;
554 
555  msg_len = ntohs (msg->header.size);
556  attr_len = ntohs (msg->attr_len);
557  if (msg_len != sizeof(struct AttributeResultMessage) + attr_len)
558  {
559  GNUNET_break (0);
560  return GNUNET_SYSERR;
561  }
562  return GNUNET_OK;
563 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:83
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define GNUNET_SYSERR
Definition: gnunet_common.h:84
Attribute is returned from the idp.
Definition: reclaim.h:124
uint16_t attr_len
Length of serialized attribute data.
Definition: reclaim.h:139
struct GNUNET_MessageHeader header
Message header.
Definition: reclaim.h:129

◆ handle_attribute_result()

static void handle_attribute_result ( void *  cls,
const struct AttributeResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT.

Parameters
cls
msgthe message we received

Definition at line 574 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::ar_cb, AttributeResultMessage::attr_len, GNUNET_RECLAIM_Operation::cls, GNUNET_RECLAIM_AttributeIterator::finish_cb, GNUNET_RECLAIM_AttributeIterator::finish_cb_cls, force_reconnect(), free_it(), free_op(), GNUNET_assert, GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_RECLAIM_ATTRIBUTE_deserialize(), GNUNET_RECLAIM_Operation::h, AttributeResultMessage::id, AttributeResultMessage::identity, GNUNET_RECLAIM_Handle::it_head, LOG, GNUNET_RECLAIM_Operation::next, GNUNET_RECLAIM_AttributeIterator::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_AttributeIterator::proc, GNUNET_RECLAIM_AttributeIterator::proc_cls, GNUNET_RECLAIM_Operation::r_id, and GNUNET_RECLAIM_AttributeIterator::r_id.

575 {
576  static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
577  struct GNUNET_RECLAIM_Handle *h = cls;
580  size_t attr_len;
581  uint32_t r_id = ntohl (msg->id);
582 
583  attr_len = ntohs (msg->attr_len);
584  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n");
585 
586 
587  for (it = h->it_head; NULL != it; it = it->next)
588  if (it->r_id == r_id)
589  break;
590  for (op = h->op_head; NULL != op; op = op->next)
591  if (op->r_id == r_id)
592  break;
593  if ((NULL == it) && (NULL == op))
594  return;
595 
596  if ((0 ==
597  (memcmp (&msg->identity, &identity_dummy, sizeof(identity_dummy)))))
598  {
599  if ((NULL == it) && (NULL == op))
600  {
601  GNUNET_break (0);
602  force_reconnect (h);
603  return;
604  }
605  if (NULL != it)
606  {
607  if (NULL != it->finish_cb)
608  it->finish_cb (it->finish_cb_cls);
609  free_it (it);
610  }
611  if (NULL != op)
612  {
613  if (NULL != op->ar_cb)
614  op->ar_cb (op->cls, NULL, NULL, NULL, NULL);
616  free_op (op);
617  }
618  return;
619  }
620 
621  {
622  struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr;
623  attr = GNUNET_RECLAIM_ATTRIBUTE_deserialize ((char *) &msg[1], attr_len);
624  if (NULL != it)
625  {
626  if (NULL != it->proc)
627  it->proc (it->proc_cls, &msg->identity, attr, NULL, NULL);
628  }
629  else if (NULL != op)
630  {
631  if (NULL != op->ar_cb)
632  op->ar_cb (op->cls, &msg->identity, attr, NULL, NULL);
633  }
634  GNUNET_free (attr);
635  return;
636  }
637  GNUNET_assert (0);
638 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:235
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:134
void * finish_cb_cls
Closure for finish_cb.
Definition: reclaim_api.c:192
Private ECC key encoded for transmission.
Handle for an operation with the service.
Definition: reclaim_api.c:41
GNUNET_RECLAIM_AttributeResult proc
The continuation to call with the results.
Definition: reclaim_api.c:197
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
void * proc_cls
Closure for proc.
Definition: reclaim_api.c:202
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
static void force_reconnect(struct GNUNET_RECLAIM_Handle *handle)
Disconnect from service and then reconnect.
Definition: reclaim_api.c:344
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
Handle for a attribute iterator operation.
Definition: reclaim_api.c:167
struct GNUNET_RECLAIM_AttributeIterator * next
Kept in a DLL.
Definition: reclaim_api.c:172
uint32_t r_id
The operation id this zone iteration operation has.
Definition: reclaim_api.c:228
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
GNUNET_RECLAIM_AttributeResult ar_cb
Attribute result callback.
Definition: reclaim_api.c:72
struct GNUNET_RECLAIM_AttributeIterator * it_head
Head of active iterations.
Definition: reclaim_api.c:265
uint16_t attr_len
Length of serialized attribute data.
Definition: reclaim.h:139
struct GNUNET_CRYPTO_EcdsaPublicKey identity
The public key of the identity.
Definition: reclaim.h:149
static void free_it(struct GNUNET_RECLAIM_AttributeIterator *it)
Free it.
Definition: reclaim_api.c:363
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
struct GNUNET_RECLAIM_ATTRIBUTE_Claim * GNUNET_RECLAIM_ATTRIBUTE_deserialize(const char *data, size_t data_size)
Deserialize an attribute.
GNUNET_SCHEDULER_TaskCallback finish_cb
Function to call on completion.
Definition: reclaim_api.c:187
#define GNUNET_free(ptr)
Wrapper around free.
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function:

◆ check_attestation_result()

static int check_attestation_result ( void *  cls,
const struct AttributeResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT.

Parameters
cls
msgthe message we received
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 649 of file reclaim_api.c.

References AttributeResultMessage::attr_len, GNUNET_break, GNUNET_OK, GNUNET_SYSERR, AttributeResultMessage::header, and GNUNET_MessageHeader::size.

650 {
651  size_t msg_len;
652  size_t attr_len;
653 
654  msg_len = ntohs (msg->header.size);
655  attr_len = ntohs (msg->attr_len);
656  if (msg_len != sizeof(struct AttributeResultMessage) + attr_len)
657  {
658  GNUNET_break (0);
659  return GNUNET_SYSERR;
660  }
661  return GNUNET_OK;
662 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:83
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
#define GNUNET_SYSERR
Definition: gnunet_common.h:84
Attribute is returned from the idp.
Definition: reclaim.h:124
uint16_t attr_len
Length of serialized attribute data.
Definition: reclaim.h:139
struct GNUNET_MessageHeader header
Message header.
Definition: reclaim.h:129

◆ handle_attestation_result()

static void handle_attestation_result ( void *  cls,
const struct AttributeResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT.

Parameters
cls
msgthe message we received

Definition at line 673 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::ar_cb, AttributeResultMessage::attr_len, GNUNET_RECLAIM_Operation::cls, GNUNET_RECLAIM_AttributeIterator::finish_cb, GNUNET_RECLAIM_AttributeIterator::finish_cb_cls, force_reconnect(), free_it(), free_op(), GNUNET_assert, GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_RECLAIM_ATTESTATION_deserialize(), GNUNET_RECLAIM_Operation::h, AttributeResultMessage::id, AttributeResultMessage::identity, GNUNET_RECLAIM_Handle::it_head, LOG, GNUNET_RECLAIM_Operation::next, GNUNET_RECLAIM_AttributeIterator::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_AttributeIterator::proc, GNUNET_RECLAIM_AttributeIterator::proc_cls, GNUNET_RECLAIM_Operation::r_id, and GNUNET_RECLAIM_AttributeIterator::r_id.

674 {
675  static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
676  struct GNUNET_RECLAIM_Handle *h = cls;
679  size_t attr_len;
680  uint32_t r_id = ntohl (msg->id);
681 
682  attr_len = ntohs (msg->attr_len);
683  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attestation result.\n");
684 
685 
686  for (it = h->it_head; NULL != it; it = it->next)
687  if (it->r_id == r_id)
688  break;
689  for (op = h->op_head; NULL != op; op = op->next)
690  if (op->r_id == r_id)
691  break;
692  if ((NULL == it) && (NULL == op))
693  return;
694 
695  if ((0 ==
696  (memcmp (&msg->identity, &identity_dummy, sizeof(identity_dummy)))))
697  {
698  if ((NULL == it) && (NULL == op))
699  {
700  GNUNET_break (0);
701  force_reconnect (h);
702  return;
703  }
704  if (NULL != it)
705  {
706  if (NULL != it->finish_cb)
707  it->finish_cb (it->finish_cb_cls);
708  free_it (it);
709  }
710  if (NULL != op)
711  {
712  if (NULL != op->ar_cb)
713  op->ar_cb (op->cls, NULL, NULL, NULL, NULL);
715  free_op (op);
716  }
717  return;
718  }
719 
720  {
722  attr = GNUNET_RECLAIM_ATTESTATION_deserialize ((char *) &msg[1], attr_len);
723  if (NULL != it)
724  {
725  if (NULL != it->proc)
726  it->proc (it->proc_cls, &msg->identity, NULL, attr, NULL);
727  }
728  else if (NULL != op)
729  {
730  if (NULL != op->ar_cb)
731  op->ar_cb (op->cls, &msg->identity, NULL, attr, NULL);
732  }
733  GNUNET_free (attr);
734  return;
735  }
736  GNUNET_assert (0);
737 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:235
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:134
void * finish_cb_cls
Closure for finish_cb.
Definition: reclaim_api.c:192
Private ECC key encoded for transmission.
Handle for an operation with the service.
Definition: reclaim_api.c:41
GNUNET_RECLAIM_AttributeResult proc
The continuation to call with the results.
Definition: reclaim_api.c:197
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
void * proc_cls
Closure for proc.
Definition: reclaim_api.c:202
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
static void force_reconnect(struct GNUNET_RECLAIM_Handle *handle)
Disconnect from service and then reconnect.
Definition: reclaim_api.c:344
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
Handle for a attribute iterator operation.
Definition: reclaim_api.c:167
struct GNUNET_RECLAIM_AttributeIterator * next
Kept in a DLL.
Definition: reclaim_api.c:172
uint32_t r_id
The operation id this zone iteration operation has.
Definition: reclaim_api.c:228
struct GNUNET_RECLAIM_ATTESTATION_Claim * GNUNET_RECLAIM_ATTESTATION_deserialize(const char *data, size_t data_size)
Deserialize an attestation.
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
GNUNET_RECLAIM_AttributeResult ar_cb
Attribute result callback.
Definition: reclaim_api.c:72
struct GNUNET_RECLAIM_AttributeIterator * it_head
Head of active iterations.
Definition: reclaim_api.c:265
uint16_t attr_len
Length of serialized attribute data.
Definition: reclaim.h:139
struct GNUNET_CRYPTO_EcdsaPublicKey identity
The public key of the identity.
Definition: reclaim.h:149
static void free_it(struct GNUNET_RECLAIM_AttributeIterator *it)
Free it.
Definition: reclaim_api.c:363
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
GNUNET_SCHEDULER_TaskCallback finish_cb
Function to call on completion.
Definition: reclaim_api.c:187
#define GNUNET_free(ptr)
Wrapper around free.
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function:

◆ check_reference_result()

static int check_reference_result ( void *  cls,
const struct ReferenceResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT.

Parameters
cls
msgthe message we received
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 748 of file reclaim_api.c.

References ReferenceResultMessage::attest_len, GNUNET_break, GNUNET_OK, GNUNET_SYSERR, ReferenceResultMessage::header, ReferenceResultMessage::ref_len, and GNUNET_MessageHeader::size.

749 {
750  size_t msg_len;
751  size_t attr_len;
752  size_t ref_len;
753 
754  msg_len = ntohs (msg->header.size);
755  attr_len = ntohs (msg->attest_len);
756  ref_len = ntohs (msg->ref_len);
757  if (msg_len != sizeof(struct ReferenceResultMessage) + attr_len + ref_len)
758  {
759  GNUNET_break (0);
760  return GNUNET_SYSERR;
761  }
762  return GNUNET_OK;
763 }
Reference plus Attestation is returned from the idp.
Definition: reclaim.h:159
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:83
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
uint16_t ref_len
Length of serialized reference data.
Definition: reclaim.h:179
#define GNUNET_SYSERR
Definition: gnunet_common.h:84
uint16_t attest_len
Length of serialized attestation data.
Definition: reclaim.h:174
struct GNUNET_MessageHeader header
Message header.
Definition: reclaim.h:164

◆ handle_reference_result()

static void handle_reference_result ( void *  cls,
const struct ReferenceResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_REFERENCE_RESULT.

Parameters
cls
msgthe message we received

Definition at line 773 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::ar_cb, ReferenceResultMessage::attest_len, GNUNET_RECLAIM_Operation::cls, GNUNET_RECLAIM_AttributeIterator::finish_cb, GNUNET_RECLAIM_AttributeIterator::finish_cb_cls, force_reconnect(), free_it(), free_op(), GNUNET_assert, GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_free, GNUNET_RECLAIM_ATTESTATION_deserialize(), GNUNET_RECLAIM_ATTESTATION_REF_deserialize(), GNUNET_RECLAIM_Operation::h, ReferenceResultMessage::id, ReferenceResultMessage::identity, GNUNET_RECLAIM_Handle::it_head, LOG, GNUNET_RECLAIM_Operation::next, GNUNET_RECLAIM_AttributeIterator::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_AttributeIterator::proc, GNUNET_RECLAIM_AttributeIterator::proc_cls, GNUNET_RECLAIM_Operation::r_id, GNUNET_RECLAIM_AttributeIterator::r_id, and ReferenceResultMessage::ref_len.

774 {
775  static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
776  struct GNUNET_RECLAIM_Handle *h = cls;
779  size_t attest_len;
780  size_t ref_len;
781  uint32_t r_id = ntohl (msg->id);
782  attest_len = ntohs (msg->attest_len);
783  ref_len = ntohs (msg->ref_len);
784  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing reference result.\n");
785  for (it = h->it_head; NULL != it; it = it->next)
786  if (it->r_id == r_id)
787  break;
788  for (op = h->op_head; NULL != op; op = op->next)
789  if (op->r_id == r_id)
790  break;
791  if ((NULL == it) && (NULL == op))
792  return;
793 
794  if ((0 ==
795  (memcmp (&msg->identity, &identity_dummy, sizeof(identity_dummy)))))
796  {
797  if ((NULL == it) && (NULL == op))
798  {
799  GNUNET_break (0);
800  force_reconnect (h);
801  return;
802  }
803  if (NULL != it)
804  {
805  if (NULL != it->finish_cb)
806  it->finish_cb (it->finish_cb_cls);
807  free_it (it);
808  }
809  if (NULL != op)
810  {
811  if (NULL != op->ar_cb)
812  op->ar_cb (op->cls, NULL, NULL, NULL, NULL);
814  free_op (op);
815  }
816  return;
817  }
818 
819  {
821  struct GNUNET_RECLAIM_ATTESTATION_Claim *attest;
822  attest = GNUNET_RECLAIM_ATTESTATION_deserialize ((char *) &msg[1],
823  attest_len);
824  ref = GNUNET_RECLAIM_ATTESTATION_REF_deserialize ((char *) &msg[1]
825  + attest_len,
826  ref_len);
827  if (NULL != it)
828  {
829  if (NULL != it->proc)
830  it->proc (it->proc_cls, &msg->identity, NULL, attest, ref);
831  }
832  else if (NULL != op)
833  {
834  if (NULL != op->ar_cb)
835  op->ar_cb (op->cls, &msg->identity, NULL, attest, ref);
836  }
837  GNUNET_free (ref);
838  GNUNET_free (attest);
839  return;
840  }
841  GNUNET_assert (0);
842 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:235
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_RECLAIM_ATTESTATION_REFERENCE * GNUNET_RECLAIM_ATTESTATION_REF_deserialize(const char *data, size_t data_size)
Deserialize a reference.
void * finish_cb_cls
Closure for finish_cb.
Definition: reclaim_api.c:192
Private ECC key encoded for transmission.
Handle for an operation with the service.
Definition: reclaim_api.c:41
GNUNET_RECLAIM_AttributeResult proc
The continuation to call with the results.
Definition: reclaim_api.c:197
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
void * proc_cls
Closure for proc.
Definition: reclaim_api.c:202
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
static void force_reconnect(struct GNUNET_RECLAIM_Handle *handle)
Disconnect from service and then reconnect.
Definition: reclaim_api.c:344
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
Handle for a attribute iterator operation.
Definition: reclaim_api.c:167
struct GNUNET_RECLAIM_AttributeIterator * next
Kept in a DLL.
Definition: reclaim_api.c:172
uint32_t r_id
The operation id this zone iteration operation has.
Definition: reclaim_api.c:228
uint16_t ref_len
Length of serialized reference data.
Definition: reclaim.h:179
struct GNUNET_RECLAIM_ATTESTATION_Claim * GNUNET_RECLAIM_ATTESTATION_deserialize(const char *data, size_t data_size)
Deserialize an attestation.
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
struct GNUNET_CRYPTO_EcdsaPublicKey identity
The public key of the identity.
Definition: reclaim.h:189
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
GNUNET_RECLAIM_AttributeResult ar_cb
Attribute result callback.
Definition: reclaim_api.c:72
uint16_t attest_len
Length of serialized attestation data.
Definition: reclaim.h:174
struct GNUNET_RECLAIM_AttributeIterator * it_head
Head of active iterations.
Definition: reclaim_api.c:265
static void free_it(struct GNUNET_RECLAIM_AttributeIterator *it)
Free it.
Definition: reclaim_api.c:363
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:169
GNUNET_SCHEDULER_TaskCallback finish_cb
Function to call on completion.
Definition: reclaim_api.c:187
#define GNUNET_free(ptr)
Wrapper around free.
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function:

◆ handle_ticket_result()

static void handle_ticket_result ( void *  cls,
const struct TicketResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_TICKET_RESULT.

Parameters
cls
msgthe message we received

Definition at line 852 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::cls, GNUNET_RECLAIM_TicketIterator::cls, GNUNET_RECLAIM_TicketIterator::finish_cb, GNUNET_RECLAIM_TicketIterator::finish_cb_cls, free_op(), GNUNET_break, GNUNET_CONTAINER_DLL_remove, GNUNET_free, handle, TicketResultMessage::id, GNUNET_RECLAIM_Operation::next, GNUNET_RECLAIM_TicketIterator::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_Operation::r_id, GNUNET_RECLAIM_TicketIterator::r_id, TicketResultMessage::ticket, GNUNET_RECLAIM_Handle::ticket_it_head, GNUNET_RECLAIM_Handle::ticket_it_tail, GNUNET_RECLAIM_Operation::tr_cb, and GNUNET_RECLAIM_TicketIterator::tr_cb.

853 {
854  struct GNUNET_RECLAIM_Handle *handle = cls;
857  uint32_t r_id = ntohl (msg->id);
858  static const struct GNUNET_RECLAIM_Ticket ticket;
859 
860  for (op = handle->op_head; NULL != op; op = op->next)
861  if (op->r_id == r_id)
862  break;
863  for (it = handle->ticket_it_head; NULL != it; it = it->next)
864  if (it->r_id == r_id)
865  break;
866  if ((NULL == op) && (NULL == it))
867  return;
868  if (NULL != op)
869  {
870  GNUNET_CONTAINER_DLL_remove (handle->op_head, handle->op_tail, op);
871  if (0 ==
872  memcmp (&msg->ticket, &ticket, sizeof(struct GNUNET_RECLAIM_Ticket)))
873  {
874  if (NULL != op->tr_cb)
875  op->tr_cb (op->cls, NULL);
876  }
877  else
878  {
879  if (NULL != op->tr_cb)
880  op->tr_cb (op->cls, &msg->ticket);
881  }
882  free_op (op);
883  return;
884  }
885  else if (NULL != it)
886  {
887  if (0 ==
888  memcmp (&msg->ticket, &ticket, sizeof(struct GNUNET_RECLAIM_Ticket)))
889  {
891  handle->ticket_it_tail,
892  it);
893  it->finish_cb (it->finish_cb_cls);
894  GNUNET_free (it);
895  }
896  else
897  {
898  if (NULL != it->tr_cb)
899  it->tr_cb (it->cls, &msg->ticket);
900  }
901  return;
902  }
903  GNUNET_break (0);
904 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
struct GNUNET_RECLAIM_TicketIterator * ticket_it_tail
Tail of active iterations.
Definition: reclaim_api.c:280
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:406
Handle to the service.
Definition: reclaim_api.c:235
The authorization ticket.
struct GNUNET_RECLAIM_Ticket ticket
The new ticket.
Definition: reclaim.h:411
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
void * finish_cb_cls
Closure for finish_cb.
Definition: reclaim_api.c:129
Handle for an operation with the service.
Definition: reclaim_api.c:41
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
static struct GNUNET_DNS_Handle * handle
Handle to transport service.
uint32_t r_id
The operation id this zone iteration operation has.
Definition: reclaim_api.c:160
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
void * cls
Closure for tr_cb.
Definition: reclaim_api.c:139
GNUNET_RECLAIM_TicketCallback tr_cb
Ticket result callback.
Definition: reclaim_api.c:82
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
struct GNUNET_RECLAIM_TicketIterator * next
Kept in a DLL.
Definition: reclaim_api.c:109
GNUNET_RECLAIM_TicketCallback tr_cb
The continuation to call with the results.
Definition: reclaim_api.c:134
Handle for a ticket iterator operation.
Definition: reclaim_api.c:104
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
GNUNET_SCHEDULER_TaskCallback finish_cb
Function to call on completion.
Definition: reclaim_api.c:124
struct GNUNET_RECLAIM_TicketIterator * ticket_it_head
Head of active iterations.
Definition: reclaim_api.c:275
#define GNUNET_free(ptr)
Wrapper around free.
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function:

◆ handle_revoke_ticket_result()

static void handle_revoke_ticket_result ( void *  cls,
const struct RevokeTicketResultMessage msg 
)
static

Handle an incoming message of type GNUNET_MESSAGE_TYPE_RECLAIM_REVOKE_TICKET_RESULT.

Parameters
cls
msgthe message we received

Definition at line 915 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::cls, free_op(), GNUNET_assert, GNUNET_CONTAINER_DLL_remove, GNUNET_ERROR_TYPE_DEBUG, GNUNET_RECLAIM_Operation::h, RevokeTicketResultMessage::id, LOG, GNUNET_RECLAIM_Operation::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, GNUNET_RECLAIM_Operation::r_id, GNUNET_RECLAIM_Operation::rvk_cb, and RevokeTicketResultMessage::success.

917 {
918  struct GNUNET_RECLAIM_Handle *h = cls;
920  uint32_t r_id = ntohl (msg->id);
921  int32_t success;
922 
923  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing revocation result.\n");
924 
925 
926  for (op = h->op_head; NULL != op; op = op->next)
927  if (op->r_id == r_id)
928  break;
929  if (NULL == op)
930  return;
931  success = ntohl (msg->success);
932  {
933  if (NULL != op->rvk_cb)
934  {
935  op->rvk_cb (op->cls, success, NULL);
936  }
938  free_op (op);
939  return;
940  }
941  GNUNET_assert (0);
942 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:235
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:97
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
Handle for an operation with the service.
Definition: reclaim_api.c:41
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
GNUNET_RECLAIM_ContinuationWithStatus rvk_cb
Revocation result callback.
Definition: reclaim_api.c:77
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:260
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:51
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:255
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:384
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:144
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:380
uint32_t success
Revocation result.
Definition: reclaim.h:389
uint32_t r_id
request id
Definition: reclaim_api.c:92
Here is the call graph for this function: