*/
struct GNUNET_TIME_Absolute timeout;
+ /**
+ * What was the last timeout we informed our monitors about?
+ */
+ struct GNUNET_TIME_Absolute last_notify_timeout;
+
/**
* At what frequency are we currently re-trying SET_KEY messages?
*/
GNUNET_SERVER_notification_context_broadcast (nc,
&msg.header,
GNUNET_NO);
+ kx->last_notify_timeout = kx->timeout;
}
*/
static void
derive_auth_key (struct GNUNET_CRYPTO_AuthKey *akey,
- const struct GNUNET_CRYPTO_SymmetricSessionKey *skey, uint32_t seed)
+ const struct GNUNET_CRYPTO_SymmetricSessionKey *skey,
+ uint32_t seed)
{
static const char ctx[] = "authentication key";
static void
update_timeout (struct GSC_KeyExchangeInfo *kx)
{
+ struct GNUNET_TIME_Relative delta;
+
kx->timeout =
GNUNET_TIME_relative_to_absolute
(GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
- monitor_notify_all (kx);
+ delta = GNUNET_TIME_absolute_get_difference (kx->last_notify_timeout,
+ kx->timeout);
+ if (delta.rel_value_us > 5LL * 1000LL * 1000LL)
+ {
+ /* we only notify monitors about timeout changes if those
+ are bigger than the threshold (5s) */
+ monitor_notify_all (kx);
+ }
if (kx->keep_alive_task != GNUNET_SCHEDULER_NO_TASK)
GNUNET_SCHEDULER_cancel (kx->keep_alive_task);
kx->keep_alive_task =
"PONG", GNUNET_i2s (&t.target), (unsigned int) t.challenge);
return;
}
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received PONG from `%s'\n",
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Received PONG from `%s'\n",
GNUNET_i2s (&kx->peer));
/* no need to resend key any longer */
if (GNUNET_SCHEDULER_NO_TASK != kx->retry_set_key_task)