GNUnet 0.24.1-8-gf7e69b2ee
transport_api_application.c File Reference
Include dependency graph for transport_api_application.c:

Go to the source code of this file.

Data Structures

struct  GNUNET_TRANSPORT_ApplicationSuggestHandle
 Handle for TRANSPORT address suggestion requests. More...
 
struct  GNUNET_TRANSPORT_ApplicationHandle
 Handle to the TRANSPORT subsystem for application management. More...
 

Macros

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

Functions

static void reconnect (struct GNUNET_TRANSPORT_ApplicationHandle *ch)
 Re-establish the connection to the TRANSPORT service. More...
 
static void reconnect_task (void *cls)
 Re-establish the connection to the TRANSPORT service. More...
 
static void force_reconnect (struct GNUNET_TRANSPORT_ApplicationHandle *ch)
 Disconnect from TRANSPORT and then reconnect. More...
 
static void error_handler (void *cls, enum GNUNET_MQ_Error error)
 We encountered an error handling the MQ to the TRANSPORT service. More...
 
static int transmit_suggestion (void *cls, const struct GNUNET_PeerIdentity *peer, void *value)
 Transmit request for an address suggestion. More...
 
struct GNUNET_TRANSPORT_ApplicationHandleGNUNET_TRANSPORT_application_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Initialize the TRANSPORT application suggestion client handle. More...
 
static int free_sug_handle (void *cls, const struct GNUNET_PeerIdentity *key, void *value)
 Function called to free all struct GNUNET_TRANSPORT_ApplicationSuggestHandles in the map. More...
 
void GNUNET_TRANSPORT_application_done (struct GNUNET_TRANSPORT_ApplicationHandle *ch)
 Client is done with TRANSPORT application management, release resources. More...
 
struct GNUNET_TRANSPORT_ApplicationSuggestHandleGNUNET_TRANSPORT_application_suggest (struct GNUNET_TRANSPORT_ApplicationHandle *ch, const struct GNUNET_PeerIdentity *peer, enum GNUNET_MQ_PriorityPreferences pk, struct GNUNET_BANDWIDTH_Value32NBO bw)
 An application would like TRANSPORT to connect to a peer. More...
 
void GNUNET_TRANSPORT_application_suggest_cancel (struct GNUNET_TRANSPORT_ApplicationSuggestHandle *sh)
 We no longer care about being connected to a peer. More...
 
void GNUNET_TRANSPORT_application_validate (struct GNUNET_TRANSPORT_ApplicationHandle *ch, const struct GNUNET_PeerIdentity *peer, enum GNUNET_NetworkType nt, const char *addr)
 An application (or a communicator) has received a HELLO (or other address data of another peer) and wants TRANSPORT to validate that the address is correct. More...
 

Macro Definition Documentation

◆ LOG

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

Definition at line 32 of file transport_api_application.c.

Function Documentation

◆ reconnect()

static void reconnect ( struct GNUNET_TRANSPORT_ApplicationHandle ch)
static

Re-establish the connection to the TRANSPORT service.

Parameters
chhandle to use to re-connect.

Definition at line 194 of file transport_api_application.c.

195{
196 static const struct GNUNET_MQ_MessageHandler handlers[] = { { NULL, 0, 0 } };
197
198 GNUNET_assert (NULL == ch->mq);
199 ch->mq =
200 GNUNET_CLIENT_connect (ch->cfg, "transport", handlers, &error_handler, ch);
201 if (NULL == ch->mq)
202 {
204 return;
205 }
208 ch);
209}
struct GNUNET_MQ_MessageHandlers handlers[]
Definition: 003.c:1
static struct GNUNET_CADET_Channel * ch
Channel handle.
Definition: gnunet-cadet.c:117
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:1060
int GNUNET_CONTAINER_multipeermap_iterate(struct GNUNET_CONTAINER_MultiPeerMap *map, GNUNET_CONTAINER_PeerMapIterator it, void *it_cls)
Iterate over all entries in the map.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
struct GNUNET_MQ_Handle * mq
Message Queue for the channel (which we are implementing).
Definition: cadet.h:142
Message handler for a specific message type.
static void force_reconnect(struct GNUNET_TRANSPORT_ApplicationHandle *ch)
Disconnect from TRANSPORT and then reconnect.
static void error_handler(void *cls, enum GNUNET_MQ_Error error)
We encountered an error handling the MQ to the TRANSPORT service.
static int transmit_suggestion(void *cls, const struct GNUNET_PeerIdentity *peer, void *value)
Transmit request for an address suggestion.

References ch, error_handler(), force_reconnect(), GNUNET_assert, GNUNET_CLIENT_connect(), GNUNET_CONTAINER_multipeermap_iterate(), handlers, GNUNET_CADET_Channel::mq, and transmit_suggestion().

Referenced by GNUNET_TRANSPORT_application_init(), and reconnect_task().

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

Re-establish the connection to the TRANSPORT service.

Parameters
clshandle to use to re-connect.

Definition at line 112 of file transport_api_application.c.

113{
115
116 ch->task = NULL;
117 reconnect (ch);
118}
Handle to the TRANSPORT subsystem for application management.
static void reconnect(struct GNUNET_TRANSPORT_ApplicationHandle *ch)
Re-establish the connection to the TRANSPORT service.

References ch, and reconnect().

Referenced by force_reconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ force_reconnect()

static void force_reconnect ( struct GNUNET_TRANSPORT_ApplicationHandle ch)
static

Disconnect from TRANSPORT and then reconnect.

Parameters
chour handle

Definition at line 127 of file transport_api_application.c.

128{
129 if (NULL != ch->mq)
130 {
132 ch->mq = NULL;
133 }
134 ch->backoff = GNUNET_TIME_STD_BACKOFF (ch->backoff);
135 ch->task = GNUNET_SCHEDULER_add_delayed (ch->backoff, &reconnect_task, ch);
136}
void GNUNET_MQ_destroy(struct GNUNET_MQ_Handle *mq)
Destroy the message queue.
Definition: mq.c:700
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:1277
#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_task(void *cls)
Re-establish the connection to the TRANSPORT service.

References ch, GNUNET_MQ_destroy(), GNUNET_SCHEDULER_add_delayed(), GNUNET_TIME_STD_BACKOFF, GNUNET_CADET_Channel::mq, and reconnect_task().

Referenced by error_handler(), and reconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ error_handler()

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

We encountered an error handling the MQ to the TRANSPORT service.

Reconnect.

Parameters
clsthe struct GNUNET_TRANSPORT_ApplicationHandle
errordetails about the error

Definition at line 147 of file transport_api_application.c.

148{
150
152 "TRANSPORT connection died (code %d), reconnecting\n",
153 (int) error);
155}
@ GNUNET_ERROR_TYPE_DEBUG
#define LOG(kind,...)

References ch, force_reconnect(), GNUNET_ERROR_TYPE_DEBUG, and LOG.

Referenced by reconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ transmit_suggestion()

static int transmit_suggestion ( void *  cls,
const struct GNUNET_PeerIdentity peer,
void *  value 
)
static

Transmit request for an address suggestion.

Parameters
clsthe struct GNUNET_TRANSPORT_ApplicationHandle
peerpeer to ask for an address suggestion for
valuethe struct GNUNET_TRANSPORT_SuggestHandle
Returns
GNUNET_OK (continue to iterate), GNUNET_SYSERR on failure (message queue no longer exists)

Definition at line 168 of file transport_api_application.c.

171{
174 struct GNUNET_MQ_Envelope *ev;
176
177 if (NULL == ch->mq)
178 return GNUNET_SYSERR;
180 m->pk = htonl ((uint32_t) sh->pk);
181 m->bw = sh->bw;
182 m->peer = *peer;
183 GNUNET_MQ_send (ch->mq, ev);
184 return GNUNET_OK;
185}
static struct GNUNET_ARM_MonitorHandle * m
Monitor connection with ARM.
Definition: gnunet-arm.c:103
static struct GNUNET_IDENTITY_Handle * sh
Handle to IDENTITY service.
static char * value
Value of the record to add/remove.
@ GNUNET_OK
@ GNUNET_SYSERR
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:305
#define GNUNET_MQ_msg(mvar, type)
Allocate a GNUNET_MQ_Envelope.
Definition: gnunet_mq_lib.h:76
#define GNUNET_MESSAGE_TYPE_TRANSPORT_SUGGEST
Type of the 'struct ExpressPreferenceMessage' send by clients to TRANSPORT to establish bandwidth pre...
Application client to TRANSPORT service: we would like to have address suggestions for this peer.
Definition: transport.h:806
struct GNUNET_PeerIdentity peer
Peer to get address suggestions for.
Definition: transport.h:823
Handle for TRANSPORT address suggestion requests.

References ch, GNUNET_MESSAGE_TYPE_TRANSPORT_SUGGEST, GNUNET_MQ_msg, GNUNET_MQ_send(), GNUNET_OK, GNUNET_SYSERR, m, GNUNET_CADET_Channel::mq, ExpressPreferenceMessage::peer, sh, and value.

Referenced by GNUNET_TRANSPORT_application_suggest(), and reconnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ free_sug_handle()

static int free_sug_handle ( void *  cls,
const struct GNUNET_PeerIdentity key,
void *  value 
)
static

Function called to free all struct GNUNET_TRANSPORT_ApplicationSuggestHandles in the map.

Parameters
clsNULL
keythe key
valuethe value to free
Returns
GNUNET_OK (continue to iterate)

Definition at line 242 of file transport_api_application.c.

243{
245
246 GNUNET_free (cur);
247 return GNUNET_OK;
248}
#define GNUNET_free(ptr)
Wrapper around free.

References GNUNET_free, GNUNET_OK, and value.

Referenced by GNUNET_TRANSPORT_application_done().

Here is the caller graph for this function: