/*
This file is part of GNUnet.
- Copyright (C) 2010-2015 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2010-2015 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
* longer valid and then possibly triggers its removal.
*
* @param cls the `struct ValidationEntry`
- * @param tc scheduler context (unused)
*/
static void
-timeout_hello_validation (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+timeout_hello_validation (void *cls)
{
struct ValidationEntry *ve = cls;
struct GNUNET_TIME_Absolute max;
transmit_ping_if_allowed (void *cls,
const struct GNUNET_PeerIdentity *pid,
const struct GNUNET_HELLO_Address *address_null,
- struct Session *session_null,
+ struct GNUNET_ATS_Session *session_null,
int result)
{
struct ValidationEntry *ve = cls;
size_t tsize;
size_t slen;
uint16_t hsize;
- struct Session *session;
+ struct GNUNET_ATS_Session *session;
ve->bc = NULL;
if (GNUNET_OK != result)
NULL, NULL);
if (-1 == ret)
{
- GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Failed to send PING to `%s' at `%s'\n",
GNUNET_i2s (pid),
GST_plugins_a2s (ve->address));
* Do address validation again to keep address valid.
*
* @param cls the `struct ValidationEntry`
- * @param tc scheduler context (unused)
*/
static void
-revalidate_address (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+revalidate_address (void *cls)
{
struct ValidationEntry *ve = cls;
struct GNUNET_TIME_Relative canonical_delay;
ve->in_use = GNUNET_SYSERR; /* not defined */
ve->address = GNUNET_HELLO_address_copy (address);
ve->pong_sig_valid_until = GNUNET_TIME_UNIT_ZERO_ABS;
- memset (&ve->pong_sig_cache, '\0', sizeof (struct GNUNET_CRYPTO_EddsaSignature));
+ memset (&ve->pong_sig_cache,
+ '\0',
+ sizeof (struct GNUNET_CRYPTO_EddsaSignature));
ve->latency = GNUNET_TIME_UNIT_FOREVER_REL;
ve->challenge =
GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_NONCE, UINT32_MAX);
struct ValidationEntry *ve;
struct GNUNET_PeerIdentity pid;
struct GNUNET_ATS_Properties prop;
+ struct GNUNET_TRANSPORT_PluginFunctions *papi;
if (0 == GNUNET_TIME_absolute_get_remaining (expiration).rel_value_us)
return GNUNET_OK; /* expired */
GNUNET_break (0);
return GNUNET_OK; /* invalid HELLO !? */
}
- if (NULL == GST_plugins_find (address->transport_name))
+ if (NULL == (papi = GST_plugins_find (address->transport_name)))
{
/* might have been valid in the past, but we don't have that
plugin loaded right now */
return GNUNET_OK;
}
+ if (NULL ==
+ papi->address_to_string (papi->cls,
+ address->address,
+ address->address_length))
+ {
+ /* Why do we try to add an ill-formed address? */
+ GNUNET_break (0);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Address with %u bytes for plugin %s and peer %s is malformed\n",
+ (unsigned int) address->address_length,
+ address->transport_name,
+ GNUNET_i2s (&pid));
+ return GNUNET_OK;
+ }
ve = find_validation_entry (address);
+ ve->network = papi->get_network_for_address (papi->cls,
+ address);
+ GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != ve->network);
ve->valid_until = GNUNET_TIME_absolute_max (ve->valid_until,
expiration);
if (NULL == ve->revalidation_task)
{
struct TransportPongMessage *pong = cls;
struct GNUNET_TRANSPORT_PluginFunctions *papi;
- struct Session *session;
+ struct GNUNET_ATS_Session *session;
papi = GST_plugins_find (address->transport_name);
if (NULL == papi)
GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender,
const struct GNUNET_MessageHeader *hdr,
const struct GNUNET_HELLO_Address *sender_address,
- struct Session *session)
+ struct GNUNET_ATS_Session *session)
{
const struct TransportPingMessage *ping;
struct TransportPongMessage *pong;
ssize_t ret;
struct GNUNET_HELLO_Address address;
+ if (0 ==
+ memcmp (&GST_my_identity,
+ sender,
+ sizeof (struct GNUNET_PeerIdentity)))
+ return GNUNET_OK; /* our own, ignore! */
if (ntohs (hdr->size) < sizeof (struct TransportPingMessage))
{
GNUNET_break_op (0);
int sig_res;
int do_verify;
+ if (0 ==
+ memcmp (&GST_my_identity,
+ sender,
+ sizeof (struct GNUNET_PeerIdentity)))
+ return GNUNET_OK; /* our own, ignore! */
+
if (ntohs (hdr->size) < sizeof (struct TransportPongMessage))
{
GNUNET_break_op (0);
struct GNUNET_ATS_Properties prop;
memset (&prop, 0, sizeof (prop));
+ GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != ve->network);
prop.scope = ve->network;
prop.delay = GNUNET_TIME_relative_divide (ve->latency, 2);
GNUNET_assert (GNUNET_NO ==