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

api to get information from the network size estimation service More...

#include "platform.h"
#include "gnunet_constants.h"
#include "gnunet_arm_service.h"
#include "gnunet_hello_lib.h"
#include "gnunet_protocols.h"
#include "gnunet_util_lib.h"
#include "gnunet_nse_service.h"
#include "nse.h"
Include dependency graph for nse_api.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_NSE_Handle
 Handle for talking with the NSE service. More...
 

Macros

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

Functions

static void reconnect (void *cls)
 Try again to connect to network size estimation service. 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_estimate (void *cls, const struct GNUNET_NSE_ClientMessage *client_msg)
 Type of a function to call when we receive a message from the service. More...
 
struct GNUNET_NSE_HandleGNUNET_NSE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_NSE_Callback func, void *func_cls)
 Connect to the network size estimation service. More...
 
void GNUNET_NSE_disconnect (struct GNUNET_NSE_Handle *h)
 Disconnect from network size estimation service. More...
 

Detailed Description

api to get information from the network size estimation service

Author
Nathan Evans

Definition in file nse_api.c.

Macro Definition Documentation

◆ LOG

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

Definition at line 35 of file nse_api.c.

Referenced by reconnect().

Function Documentation

◆ reconnect()

static void reconnect ( void *  cls)
static

Try again to connect to network size estimation service.

Parameters
clsclosure with the struct GNUNET_NSE_Handle *
clsthe struct GNUNET_NSE_Handle *

Definition at line 132 of file nse_api.c.

References GNUNET_NSE_Handle::cfg, env, GNUNET_assert, GNUNET_CLIENT_connect(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_MESSAGE_TYPE_NSE_ESTIMATE, GNUNET_MESSAGE_TYPE_NSE_START, GNUNET_MQ_handler_end, GNUNET_MQ_hd_fixed_size, GNUNET_MQ_msg, GNUNET_MQ_send(), h, LOG, GNUNET_NSE_Handle::mq, mq_error_handler(), msg, and GNUNET_NSE_Handle::reconnect_task.

Referenced by GNUNET_NSE_connect(), and mq_error_handler().

133 {
134  struct GNUNET_NSE_Handle *h = cls;
136  { GNUNET_MQ_hd_fixed_size (estimate,
139  h),
141  struct GNUNET_MessageHeader *msg;
142  struct GNUNET_MQ_Envelope *env;
143 
144  h->reconnect_task = NULL;
146  "Connecting to network size estimation service.\n");
147  GNUNET_assert (NULL == h->mq);
148  h->mq = GNUNET_CLIENT_connect (h->cfg, "nse", handlers, &mq_error_handler, h);
149  if (NULL == h->mq)
150  return;
152  GNUNET_MQ_send (h->mq, env);
153 }
#define GNUNET_MESSAGE_TYPE_NSE_START
client->service message indicating start
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
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
struct GNUNET_MQ_Handle * mq
Message queue (if available).
Definition: nse_api.c:50
struct GNUNET_SCHEDULER_Task * reconnect_task
Task doing exponential back-off trying to reconnect.
Definition: nse_api.c:55
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
Network size estimate sent from the service to clients.
Definition: nse.h:42
#define GNUNET_MQ_hd_fixed_size(name, code, str, ctx)
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:67
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: nse_api.c:93
#define GNUNET_MESSAGE_TYPE_NSE_ESTIMATE
service->client message indicating
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration to use.
Definition: nse_api.c:45
static struct GNUNET_CADET_MessageHandler handlers[]
Handlers, for diverse services.
#define LOG(kind,...)
Definition: nse_api.c:35
Message handler for a specific message type.
Handle for talking with the NSE service.
Definition: nse_api.c:40
struct GNUNET_MQ_Envelope * env
Definition: 005.c:1
Header for all communications.
void GNUNET_MQ_send(struct GNUNET_MQ_Handle *mq, struct GNUNET_MQ_Envelope *ev)
Send a message with the given message queue.
Definition: mq.c:353
#define GNUNET_MQ_handler_end()
End-marker for the handlers array.
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_NSE_Handle *
errorerror code

Definition at line 93 of file nse_api.c.

References GNUNET_MQ_destroy(), GNUNET_SCHEDULER_add_delayed(), GNUNET_TIME_STD_BACKOFF, h, GNUNET_NSE_Handle::mq, reconnect(), GNUNET_NSE_Handle::reconnect_delay, and GNUNET_NSE_Handle::reconnect_task.

Referenced by reconnect().

94 {
95  struct GNUNET_NSE_Handle *h = cls;
96 
97  (void) error;
98  GNUNET_MQ_destroy (h->mq);
99  h->mq = NULL;
100  h->reconnect_task =
103 }
struct GNUNET_MQ_Handle * mq
Message queue (if available).
Definition: nse_api.c:50
struct GNUNET_SCHEDULER_Task * reconnect_task
Task doing exponential back-off trying to reconnect.
Definition: nse_api.c:55
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
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
Handle for talking with the NSE service.
Definition: nse_api.c:40
#define GNUNET_TIME_STD_BACKOFF(r)
Perform our standard exponential back-off calculation, starting at 1 ms and then going by a factor of...
static void reconnect(void *cls)
Try again to connect to network size estimation service.
Definition: nse_api.c:132
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:824
struct GNUNET_TIME_Relative reconnect_delay
Time for next connect retry.
Definition: nse_api.c:60
Here is the call graph for this function:
Here is the caller graph for this function:

◆ handle_estimate()

static void handle_estimate ( void *  cls,
const struct GNUNET_NSE_ClientMessage client_msg 
)
static

Type of a function to call when we receive a message from the service.

Parameters
clsclosure
client_msgmessage received

Definition at line 114 of file nse_api.c.

References GNUNET_ntoh_double(), GNUNET_TIME_absolute_ntoh(), GNUNET_TIME_UNIT_ZERO, h, GNUNET_NSE_Handle::reconnect_delay, GNUNET_NSE_Handle::recv_cb, GNUNET_NSE_Handle::recv_cb_cls, GNUNET_NSE_ClientMessage::size_estimate, GNUNET_NSE_ClientMessage::std_deviation, and GNUNET_NSE_ClientMessage::timestamp.

115 {
116  struct GNUNET_NSE_Handle *h = cls;
117 
119  h->recv_cb (h->recv_cb_cls,
120  GNUNET_TIME_absolute_ntoh (client_msg->timestamp),
121  GNUNET_ntoh_double (client_msg->size_estimate),
122  GNUNET_ntoh_double (client_msg->std_deviation));
123 }
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:673
struct GNUNET_TIME_AbsoluteNBO timestamp
Timestamp at which the server received the message.
Definition: nse.h:57
void * recv_cb_cls
Closure to pass to recv_cb callback.
Definition: nse_api.c:70
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition: gnunet-arm.c:99
double std_deviation
The standard deviation (rounded down to the nearest integer) of size estimations. ...
Definition: nse.h:69
GNUNET_NSE_Callback recv_cb
Callback function to call when message is received.
Definition: nse_api.c:65
Handle for talking with the NSE service.
Definition: nse_api.c:40
double GNUNET_ntoh_double(double d)
Convert double to host byte order.
Definition: common_endian.c:84
double size_estimate
The current estimated network size.
Definition: nse.h:62
#define GNUNET_TIME_UNIT_ZERO
Relative time zero.
struct GNUNET_TIME_Relative reconnect_delay
Time for next connect retry.
Definition: nse_api.c:60
Here is the call graph for this function: