GNUNET_NO);
GSC_NEIGHBOURS_transmit (&kx->peer,
&tp.header,
- GNUNET_TIME_UNIT_FOREVER_REL /* FIXME: timeout */ );
+ kx->set_key_retry_frequency);
}
ph->iv_seed = calculate_seed (kx);
ph->reserved = 0;
ph->timestamp = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_get ());
- memcpy (&ph[1], payload, payload_size);
+ memcpy (&ph[1],
+ payload,
+ payload_size);
em = (struct EncryptedMessage *) cbuf;
em->header.size = htons (used);
em->header.type = htons (GNUNET_MESSAGE_TYPE_CORE_ENCRYPTED_MESSAGE);
em->iv_seed = ph->iv_seed;
- derive_iv (&iv, &kx->encrypt_key, ph->iv_seed, &kx->peer);
+ derive_iv (&iv,
+ &kx->encrypt_key,
+ ph->iv_seed,
+ &kx->peer);
GNUNET_assert (GNUNET_OK ==
- do_encrypt (kx, &iv, &ph->sequence_number,
+ do_encrypt (kx,
+ &iv,
+ &ph->sequence_number,
&em->sequence_number,
used - ENCRYPTED_HEADER_SIZE));
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Encrypted %u bytes for %s\n",
- used - ENCRYPTED_HEADER_SIZE, GNUNET_i2s (&kx->peer));
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Encrypted %u bytes for %s\n",
+ used - ENCRYPTED_HEADER_SIZE,
+ GNUNET_i2s (&kx->peer));
derive_auth_key (&auth_key,
&kx->encrypt_key,
ph->iv_seed);
- GNUNET_CRYPTO_hmac (&auth_key, &em->sequence_number,
- used - ENCRYPTED_HEADER_SIZE, &em->hmac);
+ GNUNET_CRYPTO_hmac (&auth_key,
+ &em->sequence_number,
+ used - ENCRYPTED_HEADER_SIZE,
+ &em->hmac);
GSC_NEIGHBOURS_transmit (&kx->peer,
&em->header,
GNUNET_TIME_UNIT_FOREVER_REL);
GNUNET_SCHEDULER_add_delayed (delay,
&transmit_typemap_task, session);
GNUNET_STATISTICS_update (GSC_stats,
- gettext_noop ("# type map refreshes sent"), 1,
+ gettext_noop ("# type map refreshes sent"),
+ 1,
GNUNET_NO);
hdr = GSC_TYPEMAP_compute_type_map_message ();
- GSC_KX_encrypt_and_transmit (session->kxinfo, hdr, ntohs (hdr->size));
+ GSC_KX_encrypt_and_transmit (session->kxinfo,
+ hdr,
+ ntohs (hdr->size));
GNUNET_free (hdr);
}
}
GNUNET_STATISTICS_set (GSC_stats,
"# avg payload per encrypted message",
- total_bytes / total_msgs, GNUNET_NO);
+ total_bytes / total_msgs,
+ GNUNET_NO);
/* now actually transmit... */
session->ready_to_transmit = GNUNET_NO;
- GSC_KX_encrypt_and_transmit (session->kxinfo, pbuf, used);
+ GSC_KX_encrypt_and_transmit (session->kxinfo,
+ pbuf,
+ used);
}
}
GST_ats_is_known (n->primary_address.address,
n->primary_address.session));
}
- n->primary_address.bandwidth_in = bandwidth_in;
- n->primary_address.bandwidth_out = bandwidth_out;
- GST_neighbours_set_incoming_quota (&address->peer,
- bandwidth_in);
- bandwidth_min = GNUNET_BANDWIDTH_value_min (bandwidth_out,
- n->neighbour_receive_quota);
- send_outbound_quota_to_clients (&address->peer,
- bandwidth_min);
+ if (n->primary_address.bandwidth_in.value__ != bandwidth_in.value__)
+ {
+ n->primary_address.bandwidth_in = bandwidth_in;
+ GST_neighbours_set_incoming_quota (&address->peer,
+ bandwidth_in);
+ }
+ if (n->primary_address.bandwidth_out.value__ != bandwidth_out.value__)
+ {
+ n->primary_address.bandwidth_out = bandwidth_out;
+ bandwidth_min = GNUNET_BANDWIDTH_value_min (bandwidth_out,
+ n->neighbour_receive_quota);
+ send_outbound_quota_to_clients (&address->peer,
+ bandwidth_min);
+ }
return GNUNET_OK;
}
/**
- * Change the incoming quota for the given peer.
+ * Change the incoming quota for the given peer. Updates
+ * our own receive rate and informs the neighbour about
+ * the new quota.
*
* @param neighbour identity of peer to change qutoa for
* @param quota new quota
ntohl (quota.value__), GNUNET_i2s (&n->id));
GNUNET_BANDWIDTH_tracker_update_quota (&n->in_tracker, quota);
if (0 != ntohl (quota.value__))
+ {
+ struct SessionQuotaMessage sqm;
+
+ sqm.header.size = htons (sizeof (struct SessionQuotaMessage));
+ sqm.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_QUOTA);
+ sqm.quota = quota.value__;
+ (void) send_with_session (n,
+ &sqm,
+ sizeof (sqm),
+ UINT32_MAX - 1,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ GNUNET_NO,
+ NULL, NULL);
return;
+ }
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Disconnecting peer `%4s' due to SET_QUOTA\n",
GNUNET_i2s (&n->id));