GNUnet  0.10.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 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_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 734 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_ATTRIBUTE_RESULT, GNUNET_MESSAGE_TYPE_RECLAIM_CONSUME_TICKET_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().

735 {
737  {GNUNET_MQ_hd_fixed_size (success_response,
739  struct SuccessResultMessage,
740  h),
741  GNUNET_MQ_hd_var_size (attribute_result,
743  struct AttributeResultMessage,
744  h),
745  GNUNET_MQ_hd_fixed_size (ticket_result,
747  struct TicketResultMessage,
748  h),
749  GNUNET_MQ_hd_var_size (consume_ticket_result,
752  h),
753  GNUNET_MQ_hd_fixed_size (revoke_ticket_result,
756  h),
759 
760  GNUNET_assert (NULL == h->mq);
761  LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to reclaim service.\n");
762 
763  h->mq =
764  GNUNET_CLIENT_connect (h->cfg, "reclaim", handlers, &mq_error_handler, h);
765  if (NULL == h->mq)
766  return;
767  for (op = h->op_head; NULL != op; op = op->next)
768  GNUNET_MQ_send_copy (h->mq, op->env);
769 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
Ticket result message.
Definition: reclaim.h:357
Attribute list is returned from the idp.
Definition: reclaim.h:404
#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:901
#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:303
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:88
#define GNUNET_MESSAGE_TYPE_RECLAIM_ATTRIBUTE_RESULT
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:52
Message handler for a specific message type.
Attribute store/delete response message.
Definition: reclaim.h:103
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:258
#define GNUNET_MESSAGE_TYPE_RECLAIM_SUCCESS_RESPONSE
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration to use.
Definition: reclaim_api.c:243
Ticket revoke message.
Definition: reclaim.h:335
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:139
#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:401
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 332 of file reclaim_api.c.

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

Referenced by force_reconnect().

333 {
334  struct GNUNET_RECLAIM_Handle *handle = cls;
335 
336  handle->reconnect_task = NULL;
337  reconnect (handle);
338 }
Handle to the service.
Definition: reclaim_api.c:238
struct GNUNET_SCHEDULER_Task * reconnect_task
Task doing exponential back-off trying to reconnect.
Definition: reclaim_api.c:293
static void reconnect(struct GNUNET_RECLAIM_Handle *h)
Try again to connect to the service.
Definition: reclaim_api.c:734
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 347 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_attribute_result(), and mq_error_handler().

348 {
349  GNUNET_MQ_destroy (handle->mq);
350  handle->mq = NULL;
351  handle->reconnect_backoff =
353  handle->reconnect_task =
356  handle);
357 }
struct GNUNET_SCHEDULER_Task * reconnect_task
Task doing exponential back-off trying to reconnect.
Definition: reclaim_api.c:293
struct GNUNET_MQ_Handle * mq
Connection to service (if available).
Definition: reclaim_api.c:303
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1246
#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:298
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:332
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 366 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(), and handle_attribute_result().

367 {
368  struct GNUNET_RECLAIM_Handle *h = it->h;
369 
371  if (NULL != it->env)
372  GNUNET_MQ_discard (it->env);
373  GNUNET_free (it);
374 }
#define GNUNET_CONTAINER_DLL_remove(head, tail, element)
Remove an element from a DLL.
Handle to the service.
Definition: reclaim_api.c:238
struct GNUNET_RECLAIM_AttributeIterator * it_tail
Tail of active iterations.
Definition: reclaim_api.c:273
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
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:221
struct GNUNET_RECLAIM_AttributeIterator * it_head
Head of active iterations.
Definition: reclaim_api.c:268
struct GNUNET_RECLAIM_Handle * h
Main handle to access the service.
Definition: reclaim_api.c:185
#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 382 of file reclaim_api.c.

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

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

383 {
384  if (NULL == op)
385  return;
386  if (NULL != op->env)
387  GNUNET_MQ_discard (op->env);
388  GNUNET_free (op);
389 }
struct GNUNET_MQ_Envelope * env
Envelope with the message for this queue entry.
Definition: reclaim_api.c:88
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 401 of file reclaim_api.c.

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

Referenced by reconnect().

402 {
403  struct GNUNET_RECLAIM_Handle *handle = cls;
404  force_reconnect (handle);
405 }
Handle to the service.
Definition: reclaim_api.c:238
static void force_reconnect(struct GNUNET_RECLAIM_Handle *handle)
Disconnect from service and then reconnect.
Definition: reclaim_api.c:347
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 416 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.

417 {
418  struct GNUNET_RECLAIM_Handle *h = cls;
420  uint32_t r_id = ntohl (msg->id);
421  int res;
422  const char *emsg;
423 
424  for (op = h->op_head; NULL != op; op = op->next)
425  if (op->r_id == r_id)
426  break;
427  if (NULL == op)
428  return;
429 
430  res = ntohl (msg->op_result);
432  "Received SUCCESS_RESPONSE with result %d\n",
433  res);
434 
435  /* TODO: add actual error message to response... */
436  if (GNUNET_SYSERR == res)
437  emsg = _ ("failed to store record\n");
438  else
439  emsg = NULL;
440  if (NULL != op->as_cb)
441  op->as_cb (op->cls, res, emsg);
443  free_op (op);
444 }
#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:238
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:98
GNUNET_RECLAIM_ContinuationWithStatus as_cb
Continuation to invoke after attribute store call.
Definition: reclaim_api.c:68
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:94
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:263
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:52
static int res
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:258
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:139
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:382
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:93
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 456 of file reclaim_api.c.

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

458 {
459  size_t msg_len;
460  size_t attrs_len;
461 
462  msg_len = ntohs (msg->header.size);
463  attrs_len = ntohs (msg->attrs_len);
464  if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len)
465  {
466  GNUNET_break (0);
467  return GNUNET_SYSERR;
468  }
469  return GNUNET_OK;
470 }
Attribute list is returned from the idp.
Definition: reclaim.h:404
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#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:79
uint16_t attrs_len
Length of serialized attribute data.
Definition: reclaim.h:424
struct GNUNET_MessageHeader header
Message header.
Definition: reclaim.h:409

◆ 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 481 of file reclaim_api.c.

References GNUNET_RECLAIM_Operation::ar_cb, 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_RECLAIM_ATTRIBUTE_list_deserialize(), GNUNET_RECLAIM_ATTRIBUTE_list_destroy(), GNUNET_RECLAIM_Operation::h, ConsumeTicketResultMessage::id, GNUNET_RECLAIM_ATTRIBUTE_ClaimList::list_head, LOG, GNUNET_RECLAIM_Operation::next, GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry::next, op, GNUNET_RECLAIM_Handle::op_head, GNUNET_RECLAIM_Handle::op_tail, and GNUNET_RECLAIM_Operation::r_id.

483 {
484  struct GNUNET_RECLAIM_Handle *h = cls;
486  size_t attrs_len;
487  uint32_t r_id = ntohl (msg->id);
488 
489  attrs_len = ntohs (msg->attrs_len);
490  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n");
491 
492 
493  for (op = h->op_head; NULL != op; op = op->next)
494  if (op->r_id == r_id)
495  break;
496  if (NULL == op)
497  return;
498 
499  {
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);
509  }
510  else
511  {
512  for (le = attrs->list_head; NULL != le; le = le->next)
513  op->ar_cb (op->cls, &msg->identity, le->claim);
515  attrs = NULL;
516  }
517  op->ar_cb (op->cls, NULL, NULL);
518  }
520  free_op (op);
521  GNUNET_free_non_null (attrs);
522  return;
523  }
524  GNUNET_assert (0);
525 }
#define LOG(kind,...)
Definition: reclaim_api.c:35
#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:238
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:98
#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:414
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
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:94
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:263
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:52
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:258
GNUNET_RECLAIM_AttributeResult ar_cb
Attribute result callback.
Definition: reclaim_api.c:73
struct GNUNET_CRYPTO_EcdsaPublicKey identity
The public key of the identity.
Definition: reclaim.h:434
A list of GNUNET_RECLAIM_ATTRIBUTE_Claim structures.
uint16_t attrs_len
Length of serialized attribute data.
Definition: reclaim.h:424
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:139
struct GNUNET_RECLAIM_ATTRIBUTE_ClaimListEntry * next
DLL.
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:382
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:93
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 537 of file reclaim_api.c.

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

538 {
539  size_t msg_len;
540  size_t attr_len;
541 
542  msg_len = ntohs (msg->header.size);
543  attr_len = ntohs (msg->attr_len);
544  if (msg_len != sizeof (struct AttributeResultMessage) + attr_len)
545  {
546  GNUNET_break (0);
547  return GNUNET_SYSERR;
548  }
549  return GNUNET_OK;
550 }
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
uint16_t size
The length of the struct (in bytes, including the length field itself), in big-endian format...
#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:79
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 561 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.

562 {
563  static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
564  struct GNUNET_RECLAIM_Handle *h = cls;
567  size_t attr_len;
568  uint32_t r_id = ntohl (msg->id);
569 
570  attr_len = ntohs (msg->attr_len);
571  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attribute result.\n");
572 
573 
574  for (it = h->it_head; NULL != it; it = it->next)
575  if (it->r_id == r_id)
576  break;
577  for (op = h->op_head; NULL != op; op = op->next)
578  if (op->r_id == r_id)
579  break;
580  if ((NULL == it) && (NULL == op))
581  return;
582 
583  if ((0 ==
584  (memcmp (&msg->identity, &identity_dummy, sizeof (identity_dummy)))))
585  {
586  if ((NULL == it) && (NULL == op))
587  {
588  GNUNET_break (0);
589  force_reconnect (h);
590  return;
591  }
592  if (NULL != it)
593  {
594  if (NULL != it->finish_cb)
595  it->finish_cb (it->finish_cb_cls);
596  free_it (it);
597  }
598  if (NULL != op)
599  {
600  if (NULL != op->ar_cb)
601  op->ar_cb (op->cls, NULL, NULL);
603  free_op (op);
604  }
605  return;
606  }
607 
608  {
609  struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr;
610  attr = GNUNET_RECLAIM_ATTRIBUTE_deserialize ((char *) &msg[1], attr_len);
611  if (NULL != it)
612  {
613  if (NULL != it->proc)
614  it->proc (it->proc_cls, &msg->identity, attr);
615  }
616  else if (NULL != op)
617  {
618  if (NULL != op->ar_cb)
619  op->ar_cb (op->cls, &msg->identity, attr);
620  }
621  GNUNET_free (attr);
622  return;
623  }
624  GNUNET_assert (0);
625 }
#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:238
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:98
#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:195
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:200
#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:205
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:94
static void force_reconnect(struct GNUNET_RECLAIM_Handle *handle)
Disconnect from service and then reconnect.
Definition: reclaim_api.c:347
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:263
Handle for a attribute iterator operation.
Definition: reclaim_api.c:169
struct GNUNET_RECLAIM_AttributeIterator * next
Kept in a DLL.
Definition: reclaim_api.c:175
uint32_t r_id
The operation id this zone iteration operation has.
Definition: reclaim_api.c:231
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:52
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:258
GNUNET_RECLAIM_AttributeResult ar_cb
Attribute result callback.
Definition: reclaim_api.c:73
struct GNUNET_RECLAIM_AttributeIterator * it_head
Head of active iterations.
Definition: reclaim_api.c:268
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:366
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:139
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:382
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:190
#define GNUNET_free(ptr)
Wrapper around free.
uint32_t r_id
request id
Definition: reclaim_api.c:93
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 636 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.

637 {
638  struct GNUNET_RECLAIM_Handle *handle = cls;
641  uint32_t r_id = ntohl (msg->id);
642  static const struct GNUNET_RECLAIM_Ticket ticket;
643  for (op = handle->op_head; NULL != op; op = op->next)
644  if (op->r_id == r_id)
645  break;
646  for (it = handle->ticket_it_head; NULL != it; it = it->next)
647  if (it->r_id == r_id)
648  break;
649  if ((NULL == op) && (NULL == it))
650  return;
651  if (NULL != op)
652  {
653  GNUNET_CONTAINER_DLL_remove (handle->op_head, handle->op_tail, op);
654  if (0 ==
655  memcmp (&msg->ticket, &ticket, sizeof (struct GNUNET_RECLAIM_Ticket)))
656  {
657  if (NULL != op->tr_cb)
658  op->tr_cb (op->cls, NULL);
659  }
660  else
661  {
662  if (NULL != op->tr_cb)
663  op->tr_cb (op->cls, &msg->ticket);
664  }
665  free_op (op);
666  return;
667  }
668  else if (NULL != it)
669  {
670  if (0 ==
671  memcmp (&msg->ticket, &ticket, sizeof (struct GNUNET_RECLAIM_Ticket)))
672  {
674  handle->ticket_it_tail,
675  it);
676  it->finish_cb (it->finish_cb_cls);
677  GNUNET_free (it);
678  }
679  else
680  {
681  if (NULL != it->tr_cb)
682  it->tr_cb (it->cls, &msg->ticket);
683  }
684  return;
685  }
686  GNUNET_break (0);
687 }
#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:283
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:367
Handle to the service.
Definition: reclaim_api.c:238
The authorization ticket.
struct GNUNET_RECLAIM_Ticket ticket
The new ticket.
Definition: reclaim.h:372
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:98
void * finish_cb_cls
Closure for finish_cb.
Definition: reclaim_api.c:131
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:263
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:162
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:52
void * cls
Closure for tr_cb.
Definition: reclaim_api.c:141
GNUNET_RECLAIM_TicketCallback tr_cb
Ticket result callback.
Definition: reclaim_api.c:83
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:258
struct GNUNET_RECLAIM_TicketIterator * next
Kept in a DLL.
Definition: reclaim_api.c:111
GNUNET_RECLAIM_TicketCallback tr_cb
The continuation to call with the results.
Definition: reclaim_api.c:136
Handle for a ticket iterator operation.
Definition: reclaim_api.c:105
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:139
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:382
GNUNET_SCHEDULER_TaskCallback finish_cb
Function to call on completion.
Definition: reclaim_api.c:126
struct GNUNET_RECLAIM_TicketIterator * ticket_it_head
Head of active iterations.
Definition: reclaim_api.c:278
#define GNUNET_free(ptr)
Wrapper around free.
uint32_t r_id
request id
Definition: reclaim_api.c:93
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 698 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.

700 {
701  struct GNUNET_RECLAIM_Handle *h = cls;
703  uint32_t r_id = ntohl (msg->id);
704  int32_t success;
705 
706  LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing revocation result.\n");
707 
708 
709  for (op = h->op_head; NULL != op; op = op->next)
710  if (op->r_id == r_id)
711  break;
712  if (NULL == op)
713  return;
714  success = ntohl (msg->success);
715  {
716  if (NULL != op->rvk_cb)
717  {
718  op->rvk_cb (op->cls, success, NULL);
719  }
721  free_op (op);
722  return;
723  }
724  GNUNET_assert (0);
725 }
#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:238
void * cls
Closure for cont or cb.
Definition: reclaim_api.c:98
#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:94
GNUNET_RECLAIM_ContinuationWithStatus rvk_cb
Revocation result callback.
Definition: reclaim_api.c:78
struct GNUNET_RECLAIM_Operation * op_tail
Tail of active operations.
Definition: reclaim_api.c:263
struct GNUNET_RECLAIM_Operation * next
We keep operations in a DLL.
Definition: reclaim_api.c:52
struct GNUNET_RECLAIM_Operation * op_head
Head of active operations.
Definition: reclaim_api.c:258
uint32_t id
Unique identifier for this request (for key collisions).
Definition: reclaim.h:345
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:139
static void free_op(struct GNUNET_RECLAIM_Operation *op)
Free op.
Definition: reclaim_api.c:382
uint32_t success
Revocation result.
Definition: reclaim.h:350
uint32_t r_id
request id
Definition: reclaim_api.c:93
Here is the call graph for this function: