GNUnet  0.10.x
Functions
json_reclaim.c File Reference
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_json_lib.h"
#include "gnunet_reclaim_attribute_lib.h"
#include "gnunet_reclaim_service.h"
Include dependency graph for json_reclaim.c:

Go to the source code of this file.

Functions

static int parse_attr (void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
 Parse given JSON object to a claim. More...
 
static void clean_attr (void *cls, struct GNUNET_JSON_Specification *spec)
 Cleanup data left from parsing RSA public key. More...
 
struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_claim (struct GNUNET_RECLAIM_ATTRIBUTE_Claim **attr)
 JSON Specification for Reclaim claims. More...
 
static int parse_ticket (void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
 Parse given JSON object to a ticket. More...
 
static void clean_ticket (void *cls, struct GNUNET_JSON_Specification *spec)
 Cleanup data left from parsing RSA public key. More...
 
struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_ticket (struct GNUNET_RECLAIM_Ticket **ticket)
 JSON Specification for Reclaim tickets. More...
 

Function Documentation

◆ parse_attr()

static int parse_attr ( void *  cls,
json_t *  root,
struct GNUNET_JSON_Specification spec 
)
static

Parse given JSON object to a claim.

Parameters
clsclosure, NULL
rootthe json object representing data
specwhere to write the data
Returns
GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error

Definition at line 44 of file json_reclaim.c.

References data, data_size, GNUNET_assert, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_log, GNUNET_OK, GNUNET_RECLAIM_ATTRIBUTE_claim_new(), GNUNET_RECLAIM_ATTRIBUTE_string_to_value(), GNUNET_RECLAIM_ATTRIBUTE_typename_to_number(), GNUNET_STRINGS_string_to_data(), GNUNET_SYSERR, GNUNET_RECLAIM_ATTRIBUTE_Claim::id, GNUNET_JSON_Specification::ptr, type, and type_str.

Referenced by GNUNET_RECLAIM_JSON_spec_claim().

45 {
46  struct GNUNET_RECLAIM_ATTRIBUTE_Claim *attr;
47  const char *name_str = NULL;
48  const char *val_str = NULL;
49  const char *type_str = NULL;
50  const char *id_str = NULL;
51  char *data;
52  int unpack_state;
53  uint32_t type;
54  size_t data_size;
55 
56  GNUNET_assert (NULL != root);
57 
58  if (! json_is_object (root))
59  {
61  "Error json is not array nor object!\n");
62  return GNUNET_SYSERR;
63  }
64  // interpret single attribute
65  unpack_state = json_unpack (root,
66  "{s:s, s?s, s:s, s:s!}",
67  "name",
68  &name_str,
69  "id",
70  &id_str,
71  "type",
72  &type_str,
73  "value",
74  &val_str);
75  if ((0 != unpack_state) || (NULL == name_str) || (NULL == val_str) ||
76  (NULL == type_str))
77  {
79  "Error json object has a wrong format!\n");
80  return GNUNET_SYSERR;
81  }
83  if (GNUNET_SYSERR ==
85  val_str,
86  (void **) &data,
87  &data_size)))
88  {
89  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Attribute value invalid!\n");
90  return GNUNET_SYSERR;
91  }
92  attr = GNUNET_RECLAIM_ATTRIBUTE_claim_new (name_str, type, data, data_size);
93  if ((NULL == id_str) || (0 == strlen (id_str)))
94  attr->id = 0;
95  else
97  strlen (id_str),
98  &attr->id,
99  sizeof (uint64_t));
100 
101  *(struct GNUNET_RECLAIM_ATTRIBUTE_Claim **) spec->ptr = attr;
102  return GNUNET_OK;
103 }
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
uint32_t GNUNET_RECLAIM_ATTRIBUTE_typename_to_number(const char *typename)
Convert a type name to the corresponding number.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
int GNUNET_RECLAIM_ATTRIBUTE_string_to_value(uint32_t type, const char *s, void **data, size_t *data_size)
Convert human-readable version of a 'claim' of an attribute to the binary representation.
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
static char * type_str
Attribute type.
void * ptr
Pointer, details specific to the parser.
struct GNUNET_RECLAIM_ATTRIBUTE_Claim * GNUNET_RECLAIM_ATTRIBUTE_claim_new(const char *attr_name, uint32_t type, const void *data, size_t data_size)
Create a new attribute claim.
#define GNUNET_log(kind,...)
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
uint32_t data
The data value.
static size_t data_size
Number of bytes in data.
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:1021
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clean_attr()

static void clean_attr ( void *  cls,
struct GNUNET_JSON_Specification spec 
)
static

Cleanup data left from parsing RSA public key.

Parameters
clsclosure, NULL
[out]specwhere to free the data

Definition at line 112 of file json_reclaim.c.

References GNUNET_free, and GNUNET_JSON_Specification::ptr.

Referenced by GNUNET_RECLAIM_JSON_spec_claim().

113 {
114  struct GNUNET_RECLAIM_ATTRIBUTE_Claim **attr;
115  attr = (struct GNUNET_RECLAIM_ATTRIBUTE_Claim **) spec->ptr;
116  if (NULL != *attr)
117  {
118  GNUNET_free (*attr);
119  *attr = NULL;
120  }
121 }
void * ptr
Pointer, details specific to the parser.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ GNUNET_RECLAIM_JSON_spec_claim()

struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_claim ( struct GNUNET_RECLAIM_ATTRIBUTE_Claim **  attr)

JSON Specification for Reclaim claims.

Parameters
ticketstruct of GNUNET_RECLAIM_ATTRIBUTE_Claim to fill
Returns
JSON Specification

Definition at line 130 of file json_reclaim.c.

References clean_attr(), parse_attr(), GNUNET_JSON_Specification::parser, and ret.

Referenced by add_attribute_cont().

131 {
132  struct GNUNET_JSON_Specification ret = {.parser = &parse_attr,
133  .cleaner = &clean_attr,
134  .cls = NULL,
135  .field = NULL,
136  .ptr = attr,
137  .ptr_size = 0,
138  .size_ptr = NULL};
139  *attr = NULL;
140  return ret;
141 }
Entry in parser specification for GNUNET_JSON_parse().
static void clean_attr(void *cls, struct GNUNET_JSON_Specification *spec)
Cleanup data left from parsing RSA public key.
Definition: json_reclaim.c:112
static int ret
Final status code.
Definition: gnunet-arm.c:89
static int parse_attr(void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
Parse given JSON object to a claim.
Definition: json_reclaim.c:44
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parse_ticket()

static int parse_ticket ( void *  cls,
json_t *  root,
struct GNUNET_JSON_Specification spec 
)
static

Parse given JSON object to a ticket.

Parameters
clsclosure, NULL
rootthe json object representing data
specwhere to write the data
Returns
GNUNET_OK upon successful parsing; GNUNET_SYSERR upon error

Definition at line 151 of file json_reclaim.c.

References GNUNET_RECLAIM_Ticket::audience, GNUNET_assert, GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_free, GNUNET_log, GNUNET_new, GNUNET_OK, GNUNET_STRINGS_string_to_data(), GNUNET_SYSERR, GNUNET_RECLAIM_Ticket::identity, GNUNET_JSON_Specification::ptr, GNUNET_RECLAIM_Ticket::rnd, and ticket.

Referenced by GNUNET_RECLAIM_JSON_spec_ticket().

152 {
154  const char *rnd_str;
155  const char *aud_str;
156  const char *id_str;
157  int unpack_state;
158 
159  GNUNET_assert (NULL != root);
160 
161  if (! json_is_object (root))
162  {
164  "Error json is not array nor object!\n");
165  return GNUNET_SYSERR;
166  }
167  // interpret single ticket
168  unpack_state = json_unpack (root,
169  "{s:s, s:s, s:s!}",
170  "rnd",
171  &rnd_str,
172  "audience",
173  &aud_str,
174  "issuer",
175  &id_str);
176  if (0 != unpack_state)
177  {
179  "Error json object has a wrong format!\n");
180  return GNUNET_SYSERR;
181  }
182  ticket = GNUNET_new (struct GNUNET_RECLAIM_Ticket);
184  strlen (rnd_str),
185  &ticket->rnd,
186  sizeof (uint64_t)))
187  {
188  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Rnd invalid\n");
189  GNUNET_free (ticket);
190  return GNUNET_SYSERR;
191  }
192  if (GNUNET_OK !=
194  strlen (id_str),
195  &ticket->identity,
196  sizeof (
198  {
199  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Identity invalid\n");
200  GNUNET_free (ticket);
201  return GNUNET_SYSERR;
202  }
203 
204  if (GNUNET_OK !=
206  strlen (aud_str),
207  &ticket->audience,
208  sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)))
209  {
210  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Audience invalid\n");
211  GNUNET_free (ticket);
212  return GNUNET_SYSERR;
213  }
214 
215  *(struct GNUNET_RECLAIM_Ticket **) spec->ptr = ticket;
216  return GNUNET_OK;
217 }
The authorization ticket.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_new(type)
Allocate a struct or union of the given type.
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
struct GNUNET_CRYPTO_EcdsaPublicKey identity
The ticket issuer (= the user)
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
uint64_t rnd
The ticket random (NBO)
void * ptr
Pointer, details specific to the parser.
struct GNUNET_CRYPTO_EcdsaPublicKey audience
The ticket audience (= relying party)
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
#define GNUNET_log(kind,...)
int GNUNET_STRINGS_string_to_data(const char *enc, size_t enclen, void *out, size_t out_size)
Convert CrockfordBase32 encoding back to data.
Definition: strings.c:1021
#define GNUNET_free(ptr)
Wrapper around free.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ clean_ticket()

static void clean_ticket ( void *  cls,
struct GNUNET_JSON_Specification spec 
)
static

Cleanup data left from parsing RSA public key.

Parameters
clsclosure, NULL
[out]specwhere to free the data

Definition at line 226 of file json_reclaim.c.

References GNUNET_free, GNUNET_JSON_Specification::ptr, and ticket.

Referenced by GNUNET_RECLAIM_JSON_spec_ticket().

227 {
228  struct GNUNET_RECLAIM_Ticket **ticket;
229  ticket = (struct GNUNET_RECLAIM_Ticket **) spec->ptr;
230  if (NULL != *ticket)
231  {
232  GNUNET_free (*ticket);
233  *ticket = NULL;
234  }
235 }
The authorization ticket.
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
void * ptr
Pointer, details specific to the parser.
#define GNUNET_free(ptr)
Wrapper around free.
Here is the caller graph for this function:

◆ GNUNET_RECLAIM_JSON_spec_ticket()

struct GNUNET_JSON_Specification GNUNET_RECLAIM_JSON_spec_ticket ( struct GNUNET_RECLAIM_Ticket **  ticket)

JSON Specification for Reclaim tickets.

Parameters
ticketstruct of GNUNET_RECLAIM_Ticket to fill
Returns
JSON Specification

Definition at line 244 of file json_reclaim.c.

References clean_ticket(), parse_ticket(), GNUNET_JSON_Specification::parser, ret, and ticket.

Referenced by consume_ticket_cont(), and revoke_ticket_cont().

245 {
246  struct GNUNET_JSON_Specification ret = {.parser = &parse_ticket,
247  .cleaner = &clean_ticket,
248  .cls = NULL,
249  .field = NULL,
250  .ptr = ticket,
251  .ptr_size = 0,
252  .size_ptr = NULL};
253  *ticket = NULL;
254  return ret;
255 }
Entry in parser specification for GNUNET_JSON_parse().
static int ret
Final status code.
Definition: gnunet-arm.c:89
static struct GNUNET_RECLAIM_Ticket ticket
Ticket to consume.
static int parse_ticket(void *cls, json_t *root, struct GNUNET_JSON_Specification *spec)
Parse given JSON object to a ticket.
Definition: json_reclaim.c:151
static void clean_ticket(void *cls, struct GNUNET_JSON_Specification *spec)
Cleanup data left from parsing RSA public key.
Definition: json_reclaim.c:226
Here is the call graph for this function:
Here is the caller graph for this function: