aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/gnunet-service-core_kx.c27
-rw-r--r--src/core/gnunet-service-core_sessions.c14
-rw-r--r--src/transport/gnunet-service-transport_neighbours.c40
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));