GNUnet  0.10.x
Data Structures | Macros | Functions
identity_api_lookup.c File Reference

api to lookup an ego More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_identity_service.h"
#include "identity.h"
Include dependency graph for identity_api_lookup.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_IDENTITY_EgoLookup
 Handle for ego lookup. More...
 

Macros

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

Functions

static int check_identity_result_code (void *cls, const struct ResultCodeMessage *rcm)
 We received a result code from the service. More...
 
static void handle_identity_result_code (void *cls, const struct ResultCodeMessage *rcm)
 We received a result code from the service. More...
 
static int check_identity_update (void *cls, const struct UpdateMessage *um)
 Check validity of identity update message. More...
 
static void handle_identity_update (void *cls, const struct UpdateMessage *um)
 Handle identity update message. 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...
 
struct GNUNET_IDENTITY_EgoLookupGNUNET_IDENTITY_ego_lookup (const struct GNUNET_CONFIGURATION_Handle *cfg, const char *name, GNUNET_IDENTITY_EgoCallback cb, void *cb_cls)
 Lookup an ego by name. More...
 
void GNUNET_IDENTITY_ego_lookup_cancel (struct GNUNET_IDENTITY_EgoLookup *el)
 Abort ego lookup attempt. More...
 

Detailed Description

api to lookup an ego

Author
Christian Grothoff

Definition in file identity_api_lookup.c.

Macro Definition Documentation

◆ LOG

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

Definition at line 31 of file identity_api_lookup.c.

Function Documentation

◆ check_identity_result_code()

static int check_identity_result_code ( void *  cls,
const struct ResultCodeMessage rcm 
)
static

We received a result code from the service.

Check the message is well-formed.

Parameters
clsclosure
rcmresult message received
Returns
GNUNET_OK if the message is well-formed

Definition at line 71 of file identity_api_lookup.c.

References GNUNET_MQ_check_zero_termination, GNUNET_OK, ResultCodeMessage::header, and GNUNET_MessageHeader::size.

72 {
73  if (sizeof (*rcm) != htons (rcm->header.size))
75  return GNUNET_OK;
76 }
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_IDENTITY_RESULT_CODE.
Definition: identity.h:47
#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_MQ_check_zero_termination(m)
Insert code for a "check_" function that verifies that a given variable-length message received over ...

◆ handle_identity_result_code()

static void handle_identity_result_code ( void *  cls,
const struct ResultCodeMessage rcm 
)
static

We received a result code from the service.

Parameters
clsclosure
rcmresult message received

Definition at line 86 of file identity_api_lookup.c.

References GNUNET_IDENTITY_EgoLookup::cb, GNUNET_IDENTITY_EgoLookup::cb_cls, el, and GNUNET_IDENTITY_ego_lookup_cancel().

87 {
88  struct GNUNET_IDENTITY_EgoLookup *el = cls;
89 
90  el->cb (el->cb_cls, NULL);
92 }
void GNUNET_IDENTITY_ego_lookup_cancel(struct GNUNET_IDENTITY_EgoLookup *el)
Abort ego lookup attempt.
Handle for ego lookup.
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
GNUNET_IDENTITY_EgoCallback cb
Function to call with the result.
void * cb_cls
Closure for cb.
Here is the call graph for this function:

◆ check_identity_update()

static int check_identity_update ( void *  cls,
const struct UpdateMessage um 
)
static

Check validity of identity update message.

Parameters
clsclosure
ummessage received
Returns
GNUNET_OK if the message is well-formed

Definition at line 103 of file identity_api_lookup.c.

References GNUNET_break, GNUNET_OK, GNUNET_SYSERR, UpdateMessage::header, UpdateMessage::name_len, size, and GNUNET_MessageHeader::size.

104 {
105  uint16_t size = ntohs (um->header.size);
106  uint16_t name_len = ntohs (um->name_len);
107  const char *str = (const char *) &um[1];
108 
109  if ((size != name_len + sizeof (struct UpdateMessage)) ||
110  ((0 != name_len) && ('\0' != str[name_len - 1])))
111  {
112  GNUNET_break (0);
113  return GNUNET_SYSERR;
114  }
115  return GNUNET_OK;
116 }
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_IDENTITY_UPDATE.
Definition: identity.h:82
#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
static unsigned int size
Size of the "table".
Definition: peer.c:67
uint16_t name_len
Number of bytes in ego name string including 0-termination, in NBO; 0 if the ego was deleted...
Definition: identity.h:88
Service informs client about status of a pseudonym.
Definition: identity.h:77

◆ handle_identity_update()

static void handle_identity_update ( void *  cls,
const struct UpdateMessage um 
)
static

Handle identity update message.

Parameters
clsclosure
ummessage received

Definition at line 126 of file identity_api_lookup.c.

References GNUNET_IDENTITY_EgoLookup::cb, GNUNET_IDENTITY_EgoLookup::cb_cls, el, UpdateMessage::end_of_list, GNUNET_break, GNUNET_CRYPTO_ecdsa_key_get_public(), GNUNET_CRYPTO_hash(), GNUNET_IDENTITY_ego_lookup_cancel(), GNUNET_YES, id, GNUNET_IDENTITY_Ego::id, GNUNET_IDENTITY_Ego::name, UpdateMessage::name_len, GNUNET_IDENTITY_Ego::pk, and UpdateMessage::private_key.

127 {
128  struct GNUNET_IDENTITY_EgoLookup *el = cls;
129  uint16_t name_len = ntohs (um->name_len);
130  const char *str = (0 == name_len) ? NULL : (const char *) &um[1];
132  struct GNUNET_HashCode id;
133  struct GNUNET_IDENTITY_Ego ego;
134 
135  GNUNET_break (GNUNET_YES != ntohs (um->end_of_list));
137  GNUNET_CRYPTO_hash (&pub, sizeof (pub), &id);
138  ego.pk = (struct GNUNET_CRYPTO_EcdsaPrivateKey *) &um->private_key;
139  ego.name = (char *) str;
140  ego.id = id;
141  el->cb (el->cb_cls, &ego);
143 }
void GNUNET_IDENTITY_ego_lookup_cancel(struct GNUNET_IDENTITY_EgoLookup *el)
Abort ego lookup attempt.
Handle for ego lookup.
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
struct GNUNET_CRYPTO_EcdsaPrivateKey private_key
The private key.
Definition: identity.h:98
static struct GNUNET_IDENTITY_Handle * id
Handle to identity service.
Private ECC key encoded for transmission.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
Handle for an ego.
Definition: identity.h:245
void GNUNET_CRYPTO_hash(const void *block, size_t size, struct GNUNET_HashCode *ret)
Compute hash of a given block.
Definition: crypto_hash.c:44
A 512-bit hashcode.
void GNUNET_CRYPTO_ecdsa_key_get_public(const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv, struct GNUNET_CRYPTO_EcdsaPublicKey *pub)
Extract the public key for the given private key.
Definition: crypto_ecc.c:241
uint16_t name_len
Number of bytes in ego name string including 0-termination, in NBO; 0 if the ego was deleted...
Definition: identity.h:88
static struct GNUNET_CRYPTO_EddsaPublicKey pub
Definition: gnunet-scrypt.c:39
uint16_t end_of_list
Usually GNUNET_NO, GNUNET_YES to signal end of list.
Definition: identity.h:93
Public ECC key (always for Curve25519) encoded in a format suitable for network transmission and ECDS...
GNUNET_IDENTITY_EgoCallback cb
Function to call with the result.
#define GNUNET_YES
Definition: gnunet_common.h:80
void * cb_cls
Closure for cb.
Here is the call graph for this function:

◆ mq_error_handler()

static void mq_error_handler ( void *  cls,
enum GNUNET_MQ_Error  error 
)
static

Generic error handler, called with the appropriate error code and the same closure specified at the creation of the message queue.

Not every message queue implementation supports an error handler.

Parameters
clsclosure with the struct GNUNET_IDENTITY_EgoLookup *
errorerror code

Definition at line 155 of file identity_api_lookup.c.

References GNUNET_IDENTITY_EgoLookup::cb, GNUNET_IDENTITY_EgoLookup::cb_cls, and el.

Referenced by GNUNET_IDENTITY_ego_lookup().

156 {
157  struct GNUNET_IDENTITY_EgoLookup *el = cls;
158 
159  el->cb (el->cb_cls, NULL);
160 }
Handle for ego lookup.
static struct GNUNET_IDENTITY_EgoLookup * el
EgoLookup.
GNUNET_IDENTITY_EgoCallback cb
Function to call with the result.
void * cb_cls
Closure for cb.
Here is the caller graph for this function: