diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/gnunet-service-core_kx.c | 27 | ||||
-rw-r--r-- | src/core/gnunet-service-core_sessions.c | 14 | ||||
-rw-r--r-- | src/transport/gnunet-service-transport_neighbours.c | 40 |
3 files changed, 60 insertions, 21 deletions
diff --git a/src/core/gnunet-service-core_kx.c b/src/core/gnunet-service-core_kx.c index 4983dab0e..9d8fb415b 100644 --- a/src/core/gnunet-service-core_kx.c +++ b/src/core/gnunet-service-core_kx.c | |||
@@ -1095,7 +1095,7 @@ GSC_KX_handle_ping (struct GSC_KeyExchangeInfo *kx, | |||
1095 | GNUNET_NO); | 1095 | GNUNET_NO); |
1096 | GSC_NEIGHBOURS_transmit (&kx->peer, | 1096 | GSC_NEIGHBOURS_transmit (&kx->peer, |
1097 | &tp.header, | 1097 | &tp.header, |
1098 | GNUNET_TIME_UNIT_FOREVER_REL /* FIXME: timeout */ ); | 1098 | kx->set_key_retry_frequency); |
1099 | } | 1099 | } |
1100 | 1100 | ||
1101 | 1101 | ||
@@ -1378,24 +1378,35 @@ GSC_KX_encrypt_and_transmit (struct GSC_KeyExchangeInfo *kx, | |||
1378 | ph->iv_seed = calculate_seed (kx); | 1378 | ph->iv_seed = calculate_seed (kx); |
1379 | ph->reserved = 0; | 1379 | ph->reserved = 0; |
1380 | ph->timestamp = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_get ()); | 1380 | ph->timestamp = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_get ()); |
1381 | memcpy (&ph[1], payload, payload_size); | 1381 | memcpy (&ph[1], |
1382 | payload, | ||
1383 | payload_size); | ||
1382 | 1384 | ||
1383 | em = (struct EncryptedMessage *) cbuf; | 1385 | em = (struct EncryptedMessage *) cbuf; |
1384 | em->header.size = htons (used); | 1386 | em->header.size = htons (used); |
1385 | em->header.type = htons (GNUNET_MESSAGE_TYPE_CORE_ENCRYPTED_MESSAGE); | 1387 | em->header.type = htons (GNUNET_MESSAGE_TYPE_CORE_ENCRYPTED_MESSAGE); |
1386 | em->iv_seed = ph->iv_seed; | 1388 | em->iv_seed = ph->iv_seed; |
1387 | derive_iv (&iv, &kx->encrypt_key, ph->iv_seed, &kx->peer); | 1389 | derive_iv (&iv, |
1390 | &kx->encrypt_key, | ||
1391 | ph->iv_seed, | ||
1392 | &kx->peer); | ||
1388 | GNUNET_assert (GNUNET_OK == | 1393 | GNUNET_assert (GNUNET_OK == |
1389 | do_encrypt (kx, &iv, &ph->sequence_number, | 1394 | do_encrypt (kx, |
1395 | &iv, | ||
1396 | &ph->sequence_number, | ||
1390 | &em->sequence_number, | 1397 | &em->sequence_number, |
1391 | used - ENCRYPTED_HEADER_SIZE)); | 1398 | used - ENCRYPTED_HEADER_SIZE)); |
1392 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Encrypted %u bytes for %s\n", | 1399 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1393 | used - ENCRYPTED_HEADER_SIZE, GNUNET_i2s (&kx->peer)); | 1400 | "Encrypted %u bytes for %s\n", |
1401 | used - ENCRYPTED_HEADER_SIZE, | ||
1402 | GNUNET_i2s (&kx->peer)); | ||
1394 | derive_auth_key (&auth_key, | 1403 | derive_auth_key (&auth_key, |
1395 | &kx->encrypt_key, | 1404 | &kx->encrypt_key, |
1396 | ph->iv_seed); | 1405 | ph->iv_seed); |
1397 | GNUNET_CRYPTO_hmac (&auth_key, &em->sequence_number, | 1406 | GNUNET_CRYPTO_hmac (&auth_key, |
1398 | used - ENCRYPTED_HEADER_SIZE, &em->hmac); | 1407 | &em->sequence_number, |
1408 | used - ENCRYPTED_HEADER_SIZE, | ||
1409 | &em->hmac); | ||
1399 | GSC_NEIGHBOURS_transmit (&kx->peer, | 1410 | GSC_NEIGHBOURS_transmit (&kx->peer, |
1400 | &em->header, | 1411 | &em->header, |
1401 | GNUNET_TIME_UNIT_FOREVER_REL); | 1412 | GNUNET_TIME_UNIT_FOREVER_REL); |
diff --git a/src/core/gnunet-service-core_sessions.c b/src/core/gnunet-service-core_sessions.c index 289d9468f..a16da8b7e 100644 --- a/src/core/gnunet-service-core_sessions.c +++ b/src/core/gnunet-service-core_sessions.c | |||
@@ -275,10 +275,13 @@ transmit_typemap_task (void *cls, | |||
275 | GNUNET_SCHEDULER_add_delayed (delay, | 275 | GNUNET_SCHEDULER_add_delayed (delay, |
276 | &transmit_typemap_task, session); | 276 | &transmit_typemap_task, session); |
277 | GNUNET_STATISTICS_update (GSC_stats, | 277 | GNUNET_STATISTICS_update (GSC_stats, |
278 | gettext_noop ("# type map refreshes sent"), 1, | 278 | gettext_noop ("# type map refreshes sent"), |
279 | 1, | ||
279 | GNUNET_NO); | 280 | GNUNET_NO); |
280 | hdr = GSC_TYPEMAP_compute_type_map_message (); | 281 | hdr = GSC_TYPEMAP_compute_type_map_message (); |
281 | GSC_KX_encrypt_and_transmit (session->kxinfo, hdr, ntohs (hdr->size)); | 282 | GSC_KX_encrypt_and_transmit (session->kxinfo, |
283 | hdr, | ||
284 | ntohs (hdr->size)); | ||
282 | GNUNET_free (hdr); | 285 | GNUNET_free (hdr); |
283 | } | 286 | } |
284 | 287 | ||
@@ -761,10 +764,13 @@ try_transmission (struct Session *session) | |||
761 | } | 764 | } |
762 | GNUNET_STATISTICS_set (GSC_stats, | 765 | GNUNET_STATISTICS_set (GSC_stats, |
763 | "# avg payload per encrypted message", | 766 | "# avg payload per encrypted message", |
764 | total_bytes / total_msgs, GNUNET_NO); | 767 | total_bytes / total_msgs, |
768 | GNUNET_NO); | ||
765 | /* now actually transmit... */ | 769 | /* now actually transmit... */ |
766 | session->ready_to_transmit = GNUNET_NO; | 770 | session->ready_to_transmit = GNUNET_NO; |
767 | GSC_KX_encrypt_and_transmit (session->kxinfo, pbuf, used); | 771 | GSC_KX_encrypt_and_transmit (session->kxinfo, |
772 | pbuf, | ||
773 | used); | ||
768 | } | 774 | } |
769 | } | 775 | } |
770 | 776 | ||
diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index a2aaa19ec..76f8a9984 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c | |||
@@ -2500,14 +2500,20 @@ try_run_fast_ats_update (const struct GNUNET_HELLO_Address *address, | |||
2500 | GST_ats_is_known (n->primary_address.address, | 2500 | GST_ats_is_known (n->primary_address.address, |
2501 | n->primary_address.session)); | 2501 | n->primary_address.session)); |
2502 | } | 2502 | } |
2503 | n->primary_address.bandwidth_in = bandwidth_in; | 2503 | if (n->primary_address.bandwidth_in.value__ != bandwidth_in.value__) |
2504 | n->primary_address.bandwidth_out = bandwidth_out; | 2504 | { |
2505 | GST_neighbours_set_incoming_quota (&address->peer, | 2505 | n->primary_address.bandwidth_in = bandwidth_in; |
2506 | bandwidth_in); | 2506 | GST_neighbours_set_incoming_quota (&address->peer, |
2507 | bandwidth_min = GNUNET_BANDWIDTH_value_min (bandwidth_out, | 2507 | bandwidth_in); |
2508 | n->neighbour_receive_quota); | 2508 | } |
2509 | send_outbound_quota_to_clients (&address->peer, | 2509 | if (n->primary_address.bandwidth_out.value__ != bandwidth_out.value__) |
2510 | bandwidth_min); | 2510 | { |
2511 | n->primary_address.bandwidth_out = bandwidth_out; | ||
2512 | bandwidth_min = GNUNET_BANDWIDTH_value_min (bandwidth_out, | ||
2513 | n->neighbour_receive_quota); | ||
2514 | send_outbound_quota_to_clients (&address->peer, | ||
2515 | bandwidth_min); | ||
2516 | } | ||
2511 | return GNUNET_OK; | 2517 | return GNUNET_OK; |
2512 | } | 2518 | } |
2513 | 2519 | ||
@@ -3569,7 +3575,9 @@ GST_neighbours_test_connected (const struct GNUNET_PeerIdentity *target) | |||
3569 | 3575 | ||
3570 | 3576 | ||
3571 | /** | 3577 | /** |
3572 | * Change the incoming quota for the given peer. | 3578 | * Change the incoming quota for the given peer. Updates |
3579 | * our own receive rate and informs the neighbour about | ||
3580 | * the new quota. | ||
3573 | * | 3581 | * |
3574 | * @param neighbour identity of peer to change qutoa for | 3582 | * @param neighbour identity of peer to change qutoa for |
3575 | * @param quota new quota | 3583 | * @param quota new quota |
@@ -3593,7 +3601,21 @@ GST_neighbours_set_incoming_quota (const struct GNUNET_PeerIdentity *neighbour, | |||
3593 | ntohl (quota.value__), GNUNET_i2s (&n->id)); | 3601 | ntohl (quota.value__), GNUNET_i2s (&n->id)); |
3594 | GNUNET_BANDWIDTH_tracker_update_quota (&n->in_tracker, quota); | 3602 | GNUNET_BANDWIDTH_tracker_update_quota (&n->in_tracker, quota); |
3595 | if (0 != ntohl (quota.value__)) | 3603 | if (0 != ntohl (quota.value__)) |
3604 | { | ||
3605 | struct SessionQuotaMessage sqm; | ||
3606 | |||
3607 | sqm.header.size = htons (sizeof (struct SessionQuotaMessage)); | ||
3608 | sqm.header.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_QUOTA); | ||
3609 | sqm.quota = quota.value__; | ||
3610 | (void) send_with_session (n, | ||
3611 | &sqm, | ||
3612 | sizeof (sqm), | ||
3613 | UINT32_MAX - 1, | ||
3614 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
3615 | GNUNET_NO, | ||
3616 | NULL, NULL); | ||
3596 | return; | 3617 | return; |
3618 | } | ||
3597 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 3619 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
3598 | "Disconnecting peer `%4s' due to SET_QUOTA\n", | 3620 | "Disconnecting peer `%4s' due to SET_QUOTA\n", |
3599 | GNUNET_i2s (&n->id)); | 3621 | GNUNET_i2s (&n->id)); |