diff options
author | t3sserakt <t3ss@posteo.de> | 2020-10-06 07:20:10 +0200 |
---|---|---|
committer | t3sserakt <t3ss@posteo.de> | 2020-10-06 07:20:10 +0200 |
commit | 8c40115c58f639edc17ff242ec1a79c2078dc301 (patch) | |
tree | dae8d014805bcbb23234f9903e570c80f2816746 /src/transport/gnunet-communicator-udp.c | |
parent | 87467c4aa2cfb5385d09caa021e701a419b9a9fe (diff) | |
download | gnunet-8c40115c58f639edc17ff242ec1a79c2078dc301.tar.gz gnunet-8c40115c58f639edc17ff242ec1a79c2078dc301.zip |
- first attempt to fix the udp backchannel
Diffstat (limited to 'src/transport/gnunet-communicator-udp.c')
-rw-r--r-- | src/transport/gnunet-communicator-udp.c | 372 |
1 files changed, 226 insertions, 146 deletions
diff --git a/src/transport/gnunet-communicator-udp.c b/src/transport/gnunet-communicator-udp.c index 5ca5a4e86..579f744e5 100644 --- a/src/transport/gnunet-communicator-udp.c +++ b/src/transport/gnunet-communicator-udp.c | |||
@@ -75,6 +75,9 @@ | |||
75 | */ | 75 | */ |
76 | #define ADDRESS_VALIDITY_PERIOD GNUNET_TIME_UNIT_HOURS | 76 | #define ADDRESS_VALIDITY_PERIOD GNUNET_TIME_UNIT_HOURS |
77 | 77 | ||
78 | #define WORKING_QUEUE_INTERVALL \ | ||
79 | GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MICROSECONDS,1) | ||
80 | |||
78 | /** | 81 | /** |
79 | * AES key size. | 82 | * AES key size. |
80 | */ | 83 | */ |
@@ -90,6 +93,8 @@ | |||
90 | */ | 93 | */ |
91 | #define GCM_TAG_SIZE (128 / 8) | 94 | #define GCM_TAG_SIZE (128 / 8) |
92 | 95 | ||
96 | #define GENERATE_AT_ONCE 20 | ||
97 | |||
93 | /** | 98 | /** |
94 | * If we fall below this number of available KCNs, | 99 | * If we fall below this number of available KCNs, |
95 | * we generate additional ACKs until we reach | 100 | * we generate additional ACKs until we reach |
@@ -500,6 +505,12 @@ struct SenderAddress | |||
500 | unsigned int num_secrets; | 505 | unsigned int num_secrets; |
501 | 506 | ||
502 | /** | 507 | /** |
508 | * Number of BOX keys from ACKs we have currently | ||
509 | * available for this sender. | ||
510 | */ | ||
511 | unsigned int acks_available; | ||
512 | |||
513 | /** | ||
503 | * Which network type does this queue use? | 514 | * Which network type does this queue use? |
504 | */ | 515 | */ |
505 | enum GNUNET_NetworkType nt; | 516 | enum GNUNET_NetworkType nt; |
@@ -796,26 +807,15 @@ bi_destroy (struct BroadcastInterface *bi) | |||
796 | static void | 807 | static void |
797 | receiver_destroy (struct ReceiverAddress *receiver) | 808 | receiver_destroy (struct ReceiverAddress *receiver) |
798 | { | 809 | { |
799 | struct GNUNET_MQ_Handle *mq; | ||
800 | 810 | ||
801 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 811 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
802 | "Disconnecting receiver for peer `%s'\n", | 812 | "Disconnecting receiver for peer `%s'\n", |
803 | GNUNET_i2s (&receiver->target)); | 813 | GNUNET_i2s (&receiver->target)); |
804 | if (NULL != (mq = receiver->kx_mq)) | ||
805 | { | ||
806 | receiver->kx_mq = NULL; | ||
807 | GNUNET_MQ_destroy (mq); | ||
808 | } | ||
809 | if (NULL != receiver->kx_qh) | 814 | if (NULL != receiver->kx_qh) |
810 | { | 815 | { |
811 | GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh); | 816 | GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh); |
812 | receiver->kx_qh = NULL; | 817 | receiver->kx_qh = NULL; |
813 | } | 818 | } |
814 | if (NULL != (mq = receiver->d_mq)) | ||
815 | { | ||
816 | receiver->d_mq = NULL; | ||
817 | GNUNET_MQ_destroy (mq); | ||
818 | } | ||
819 | if (NULL != receiver->d_qh) | 819 | if (NULL != receiver->d_qh) |
820 | { | 820 | { |
821 | GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh); | 821 | GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh); |
@@ -847,6 +847,7 @@ kce_destroy (struct KeyCacheEntry *kce) | |||
847 | struct SharedSecret *ss = kce->ss; | 847 | struct SharedSecret *ss = kce->ss; |
848 | 848 | ||
849 | ss->active_kce_count--; | 849 | ss->active_kce_count--; |
850 | ss->sender->acks_available--; | ||
850 | GNUNET_CONTAINER_DLL_remove (ss->kce_head, ss->kce_tail, kce); | 851 | GNUNET_CONTAINER_DLL_remove (ss->kce_head, ss->kce_tail, kce); |
851 | GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multishortmap_remove (key_cache, | 852 | GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multishortmap_remove (key_cache, |
852 | &kce->kid, | 853 | &kce->kid, |
@@ -902,6 +903,7 @@ kce_generate (struct SharedSecret *ss, uint32_t seq) | |||
902 | get_kid (&ss->master, seq, &kce->kid); | 903 | get_kid (&ss->master, seq, &kce->kid); |
903 | GNUNET_CONTAINER_DLL_insert (ss->kce_head, ss->kce_tail, kce); | 904 | GNUNET_CONTAINER_DLL_insert (ss->kce_head, ss->kce_tail, kce); |
904 | ss->active_kce_count++; | 905 | ss->active_kce_count++; |
906 | ss->sender->acks_available++; | ||
905 | (void) GNUNET_CONTAINER_multishortmap_put ( | 907 | (void) GNUNET_CONTAINER_multishortmap_put ( |
906 | key_cache, | 908 | key_cache, |
907 | &kce->kid, | 909 | &kce->kid, |
@@ -930,12 +932,19 @@ secret_destroy (struct SharedSecret *ss) | |||
930 | { | 932 | { |
931 | GNUNET_CONTAINER_DLL_remove (sender->ss_head, sender->ss_tail, ss); | 933 | GNUNET_CONTAINER_DLL_remove (sender->ss_head, sender->ss_tail, ss); |
932 | sender->num_secrets--; | 934 | sender->num_secrets--; |
935 | sender->acks_available -= ss->active_kce_count; | ||
936 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
937 | "%u acks available after secrect destroy.\n", | ||
938 | sender->acks_available); | ||
933 | } | 939 | } |
934 | if (NULL != (receiver = ss->receiver)) | 940 | if (NULL != (receiver = ss->receiver)) |
935 | { | 941 | { |
936 | GNUNET_CONTAINER_DLL_remove (receiver->ss_head, receiver->ss_tail, ss); | 942 | GNUNET_CONTAINER_DLL_remove (receiver->ss_head, receiver->ss_tail, ss); |
937 | receiver->num_secrets--; | 943 | receiver->num_secrets--; |
938 | receiver->acks_available -= (ss->sequence_allowed - ss->sequence_used); | 944 | receiver->acks_available -= (ss->sequence_allowed - ss->sequence_used); |
945 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
946 | "%u acks available after secrect destroy.\n", | ||
947 | receiver->acks_available); | ||
939 | } | 948 | } |
940 | while (NULL != (kce = ss->kce_head)) | 949 | while (NULL != (kce = ss->kce_head)) |
941 | kce_destroy (kce); | 950 | kce_destroy (kce); |
@@ -1250,6 +1259,10 @@ setup_shared_secret_enc (const struct GNUNET_CRYPTO_EcdhePrivateKey *ephemeral, | |||
1250 | &receiver->target.public_key, | 1259 | &receiver->target.public_key, |
1251 | &ss->master); | 1260 | &ss->master); |
1252 | calculate_cmac (ss); | 1261 | calculate_cmac (ss); |
1262 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1263 | "Created cmac %s for secret %p.\n", | ||
1264 | GNUNET_h2s (&ss->cmac), | ||
1265 | ss); | ||
1253 | ss->receiver = receiver; | 1266 | ss->receiver = receiver; |
1254 | GNUNET_CONTAINER_DLL_insert (receiver->ss_head, receiver->ss_tail, ss); | 1267 | GNUNET_CONTAINER_DLL_insert (receiver->ss_head, receiver->ss_tail, ss); |
1255 | receiver->num_secrets++; | 1268 | receiver->num_secrets++; |
@@ -1298,12 +1311,11 @@ handle_ack (void *cls, const struct GNUNET_PeerIdentity *pid, void *value) | |||
1298 | 1311 | ||
1299 | allowed = ntohl (ack->sequence_max); | 1312 | allowed = ntohl (ack->sequence_max); |
1300 | 1313 | ||
1314 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1315 | "%u > %u (%u)\n", allowed, ss->sequence_allowed, | ||
1316 | receiver->acks_available); | ||
1301 | if (allowed > ss->sequence_allowed) | 1317 | if (allowed > ss->sequence_allowed) |
1302 | { | 1318 | { |
1303 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1304 | "%u > %u (%u)\n", allowed, ss->sequence_allowed, | ||
1305 | receiver->acks_available); | ||
1306 | |||
1307 | receiver->acks_available += (allowed - ss->sequence_allowed); | 1319 | receiver->acks_available += (allowed - ss->sequence_allowed); |
1308 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1320 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1309 | "Tell transport we have more acks!\n"); | 1321 | "Tell transport we have more acks!\n"); |
@@ -1312,6 +1324,9 @@ handle_ack (void *cls, const struct GNUNET_PeerIdentity *pid, void *value) | |||
1312 | (allowed | 1324 | (allowed |
1313 | - ss->sequence_allowed), | 1325 | - ss->sequence_allowed), |
1314 | 1); | 1326 | 1); |
1327 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1328 | "%u acks made available.\n", | ||
1329 | receiver->acks_available); | ||
1315 | ss->sequence_allowed = allowed; | 1330 | ss->sequence_allowed = allowed; |
1316 | /* move ss to head to avoid discarding it anytime soon! */ | 1331 | /* move ss to head to avoid discarding it anytime soon! */ |
1317 | GNUNET_CONTAINER_DLL_remove (receiver->ss_head, receiver->ss_tail, ss); | 1332 | GNUNET_CONTAINER_DLL_remove (receiver->ss_head, receiver->ss_tail, ss); |
@@ -1370,6 +1385,19 @@ try_handle_plaintext (struct SenderAddress *sender, | |||
1370 | } | 1385 | } |
1371 | } | 1386 | } |
1372 | 1387 | ||
1388 | static void | ||
1389 | kce_generate_cb (void *cls) | ||
1390 | { | ||
1391 | struct SharedSecret *ss = cls; | ||
1392 | |||
1393 | for (int i = 0; i < GENERATE_AT_ONCE; i++) | ||
1394 | kce_generate (ss, ++ss->sequence_allowed); | ||
1395 | |||
1396 | /*GNUNET_SCHEDULER_add_delayed (WORKING_QUEUE_INTERVALL, | ||
1397 | kce_generate_cb, | ||
1398 | ss);*/ | ||
1399 | |||
1400 | } | ||
1373 | 1401 | ||
1374 | /** | 1402 | /** |
1375 | * We established a shared secret with a sender. We should try to send | 1403 | * We established a shared secret with a sender. We should try to send |
@@ -1392,7 +1420,12 @@ consider_ss_ack (struct SharedSecret *ss) | |||
1392 | (MAX_SQN_DELTA < | 1420 | (MAX_SQN_DELTA < |
1393 | ss->kce_head->sequence_number - ss->kce_tail->sequence_number)) | 1421 | ss->kce_head->sequence_number - ss->kce_tail->sequence_number)) |
1394 | kce_destroy (ss->kce_tail); | 1422 | kce_destroy (ss->kce_tail); |
1395 | if (ss->active_kce_count < KCN_THRESHOLD) | 1423 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1424 | "%u active count and %u acks available\n", | ||
1425 | ss->active_kce_count, | ||
1426 | ss->sender->acks_available); | ||
1427 | if ((ss->active_kce_count < KCN_THRESHOLD) && (ss->sender->acks_available < | ||
1428 | KCN_TARGET) ) | ||
1396 | { | 1429 | { |
1397 | struct UDPAck ack; | 1430 | struct UDPAck ack; |
1398 | 1431 | ||
@@ -1403,15 +1436,19 @@ consider_ss_ack (struct SharedSecret *ss) | |||
1403 | * we only generate a single KCE to prevent | 1436 | * we only generate a single KCE to prevent |
1404 | * unnecessary overhead. | 1437 | * unnecessary overhead. |
1405 | */ | 1438 | */ |
1406 | if (0 < ss->active_kce_count) { | 1439 | GNUNET_SCHEDULER_add_now (kce_generate_cb, ss); |
1440 | /*if (0 < ss->sequence_allowed) | ||
1441 | { | ||
1407 | while (ss->active_kce_count < KCN_TARGET) | 1442 | while (ss->active_kce_count < KCN_TARGET) |
1408 | kce_generate (ss, ++ss->sequence_allowed); | 1443 | kce_generate (ss, ++ss->sequence_allowed); |
1409 | } else { | ||
1410 | kce_generate (ss, ++ss->sequence_allowed); | ||
1411 | } | 1444 | } |
1445 | else {*/ | ||
1446 | /*kce_generate (ss, ++ss->sequence_allowed); | ||
1447 | kce_generate (ss, ++ss->sequence_allowed);*/ | ||
1448 | // } | ||
1412 | ack.header.type = htons (GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_ACK); | 1449 | ack.header.type = htons (GNUNET_MESSAGE_TYPE_COMMUNICATOR_UDP_ACK); |
1413 | ack.header.size = htons (sizeof(ack)); | 1450 | ack.header.size = htons (sizeof(ack)); |
1414 | ack.sequence_max = htonl (ss->sequence_allowed); | 1451 | ack.sequence_max = htonl (ss->sequence_allowed + GENERATE_AT_ONCE); |
1415 | ack.cmac = ss->cmac; | 1452 | ack.cmac = ss->cmac; |
1416 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1453 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1417 | "Notifying transport of UDPAck %s\n", | 1454 | "Notifying transport of UDPAck %s\n", |
@@ -1452,6 +1489,10 @@ decrypt_box (const struct UDPBox *box, | |||
1452 | 1, | 1489 | 1, |
1453 | GNUNET_NO); | 1490 | GNUNET_NO); |
1454 | kce_destroy (kce); | 1491 | kce_destroy (kce); |
1492 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1493 | "decrypting of UDPBox with kid %s and cmac %s failed\n", | ||
1494 | GNUNET_sh2s (&box->kid), | ||
1495 | GNUNET_h2s (&ss->cmac)); | ||
1455 | return; | 1496 | return; |
1456 | } | 1497 | } |
1457 | kce_destroy (kce); | 1498 | kce_destroy (kce); |
@@ -1459,6 +1500,9 @@ decrypt_box (const struct UDPBox *box, | |||
1459 | "# bytes decrypted with BOX", | 1500 | "# bytes decrypted with BOX", |
1460 | sizeof(out_buf), | 1501 | sizeof(out_buf), |
1461 | GNUNET_NO); | 1502 | GNUNET_NO); |
1503 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1504 | "decrypted UDPBox with kid %s\n", | ||
1505 | GNUNET_sh2s (&box->kid)); | ||
1462 | try_handle_plaintext (ss->sender, out_buf, sizeof(out_buf)); | 1506 | try_handle_plaintext (ss->sender, out_buf, sizeof(out_buf)); |
1463 | consider_ss_ack (ss); | 1507 | consider_ss_ack (ss); |
1464 | } | 1508 | } |
@@ -1517,7 +1561,7 @@ find_sender_by_address (void *cls, | |||
1517 | * might already have one, so a fresh one is only allocated | 1561 | * might already have one, so a fresh one is only allocated |
1518 | * if one does not yet exist for @a address. | 1562 | * if one does not yet exist for @a address. |
1519 | * | 1563 | * |
1520 | * @param target peer to generate address for | 1564 | * @param target peer to generate address for (can be NULL, if we already have one). |
1521 | * @param address target address | 1565 | * @param address target address |
1522 | * @param address_len number of bytes in @a address | 1566 | * @param address_len number of bytes in @a address |
1523 | * @return data structure to keep track of key material for | 1567 | * @return data structure to keep track of key material for |
@@ -1530,14 +1574,14 @@ setup_sender (const struct GNUNET_PeerIdentity *target, | |||
1530 | { | 1574 | { |
1531 | struct SenderAddress *sender; | 1575 | struct SenderAddress *sender; |
1532 | struct SearchContext sc = { .address = address, | 1576 | struct SearchContext sc = { .address = address, |
1533 | .address_len = address_len, | 1577 | .address_len = address_len, |
1534 | .sender = NULL }; | 1578 | .sender = NULL }; |
1535 | 1579 | ||
1536 | GNUNET_CONTAINER_multipeermap_get_multiple (senders, | 1580 | GNUNET_CONTAINER_multipeermap_get_multiple (senders, |
1537 | target, | 1581 | target, |
1538 | &find_sender_by_address, | 1582 | &find_sender_by_address, |
1539 | &sc); | 1583 | &sc); |
1540 | if (NULL != sc.sender) | 1584 | if ((NULL != sc.sender)||(NULL == target)) |
1541 | { | 1585 | { |
1542 | reschedule_sender_timeout (sc.sender); | 1586 | reschedule_sender_timeout (sc.sender); |
1543 | return sc.sender; | 1587 | return sc.sender; |
@@ -1547,10 +1591,10 @@ setup_sender (const struct GNUNET_PeerIdentity *target, | |||
1547 | sender->address = GNUNET_memdup (address, address_len); | 1591 | sender->address = GNUNET_memdup (address, address_len); |
1548 | sender->address_len = address_len; | 1592 | sender->address_len = address_len; |
1549 | (void) GNUNET_CONTAINER_multipeermap_put ( | 1593 | (void) GNUNET_CONTAINER_multipeermap_put ( |
1550 | senders, | 1594 | senders, |
1551 | &sender->target, | 1595 | &sender->target, |
1552 | sender, | 1596 | sender, |
1553 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1597 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1554 | GNUNET_STATISTICS_set (stats, | 1598 | GNUNET_STATISTICS_set (stats, |
1555 | "# senders active", | 1599 | "# senders active", |
1556 | GNUNET_CONTAINER_multipeermap_size (receivers), | 1600 | GNUNET_CONTAINER_multipeermap_size (receivers), |
@@ -1587,10 +1631,10 @@ verify_confirmation (const struct GNUNET_CRYPTO_EcdhePublicKey *ephemeral, | |||
1587 | uhs.ephemeral = *ephemeral; | 1631 | uhs.ephemeral = *ephemeral; |
1588 | uhs.monotonic_time = uc->monotonic_time; | 1632 | uhs.monotonic_time = uc->monotonic_time; |
1589 | return GNUNET_CRYPTO_eddsa_verify ( | 1633 | return GNUNET_CRYPTO_eddsa_verify ( |
1590 | GNUNET_SIGNATURE_COMMUNICATOR_UDP_HANDSHAKE, | 1634 | GNUNET_SIGNATURE_COMMUNICATOR_UDP_HANDSHAKE, |
1591 | &uhs, | 1635 | &uhs, |
1592 | &uc->sender_sig, | 1636 | &uc->sender_sig, |
1593 | &uc->sender.public_key); | 1637 | &uc->sender.public_key); |
1594 | } | 1638 | } |
1595 | 1639 | ||
1596 | 1640 | ||
@@ -1610,22 +1654,22 @@ sockaddr_to_udpaddr_string (const struct sockaddr *address, | |||
1610 | 1654 | ||
1611 | switch (address->sa_family) | 1655 | switch (address->sa_family) |
1612 | { | 1656 | { |
1613 | case AF_INET: | 1657 | case AF_INET: |
1614 | GNUNET_asprintf (&ret, | 1658 | GNUNET_asprintf (&ret, |
1615 | "%s-%s", | 1659 | "%s-%s", |
1616 | COMMUNICATOR_ADDRESS_PREFIX, | 1660 | COMMUNICATOR_ADDRESS_PREFIX, |
1617 | GNUNET_a2s (address, address_len)); | 1661 | GNUNET_a2s (address, address_len)); |
1618 | break; | 1662 | break; |
1619 | 1663 | ||
1620 | case AF_INET6: | 1664 | case AF_INET6: |
1621 | GNUNET_asprintf (&ret, | 1665 | GNUNET_asprintf (&ret, |
1622 | "%s-%s", | 1666 | "%s-%s", |
1623 | COMMUNICATOR_ADDRESS_PREFIX, | 1667 | COMMUNICATOR_ADDRESS_PREFIX, |
1624 | GNUNET_a2s (address, address_len)); | 1668 | GNUNET_a2s (address, address_len)); |
1625 | break; | 1669 | break; |
1626 | 1670 | ||
1627 | default: | 1671 | default: |
1628 | GNUNET_assert (0); | 1672 | GNUNET_assert (0); |
1629 | } | 1673 | } |
1630 | return ret; | 1674 | return ret; |
1631 | } | 1675 | } |
@@ -1660,7 +1704,8 @@ sock_read (void *cls) | |||
1660 | return; | 1704 | return; |
1661 | } | 1705 | } |
1662 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1706 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1663 | "Read %lu bytes\n", rcvd); | 1707 | "Read %lu bytes.\n", |
1708 | rcvd); | ||
1664 | /* first, see if it is a UDPBox */ | 1709 | /* first, see if it is a UDPBox */ |
1665 | if (rcvd > sizeof(struct UDPBox)) | 1710 | if (rcvd > sizeof(struct UDPBox)) |
1666 | { | 1711 | { |
@@ -1674,6 +1719,9 @@ sock_read (void *cls) | |||
1674 | decrypt_box (box, (size_t) rcvd, kce); | 1719 | decrypt_box (box, (size_t) rcvd, kce); |
1675 | return; | 1720 | return; |
1676 | } | 1721 | } |
1722 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1723 | "No kid %s.\n", | ||
1724 | GNUNET_sh2s (&box->kid)); | ||
1677 | } | 1725 | } |
1678 | 1726 | ||
1679 | /* next, check if it is a broadcast */ | 1727 | /* next, check if it is a broadcast */ |
@@ -1731,7 +1779,8 @@ sock_read (void *cls) | |||
1731 | kx = (const struct InitialKX *) buf; | 1779 | kx = (const struct InitialKX *) buf; |
1732 | ss = setup_shared_secret_dec (&kx->ephemeral); | 1780 | ss = setup_shared_secret_dec (&kx->ephemeral); |
1733 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1781 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1734 | "Before DEC\n"); | 1782 | "Before DEC with ephemeral %s\n", |
1783 | GNUNET_e2s (&kx->ephemeral)); | ||
1735 | 1784 | ||
1736 | if (GNUNET_OK != try_decrypt (ss, | 1785 | if (GNUNET_OK != try_decrypt (ss, |
1737 | kx->gcm_tag, | 1786 | kx->gcm_tag, |
@@ -1744,10 +1793,10 @@ sock_read (void *cls) | |||
1744 | "Unable to decrypt tag, dropping...\n"); | 1793 | "Unable to decrypt tag, dropping...\n"); |
1745 | GNUNET_free (ss); | 1794 | GNUNET_free (ss); |
1746 | GNUNET_STATISTICS_update ( | 1795 | GNUNET_STATISTICS_update ( |
1747 | stats, | 1796 | stats, |
1748 | "# messages dropped (no kid, AEAD decryption failed)", | 1797 | "# messages dropped (no kid, AEAD decryption failed)", |
1749 | 1, | 1798 | 1, |
1750 | GNUNET_NO); | 1799 | GNUNET_NO); |
1751 | return; | 1800 | return; |
1752 | } | 1801 | } |
1753 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1802 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
@@ -1768,6 +1817,10 @@ sock_read (void *cls) | |||
1768 | "Before SETUP_SENDER\n"); | 1817 | "Before SETUP_SENDER\n"); |
1769 | 1818 | ||
1770 | calculate_cmac (ss); | 1819 | calculate_cmac (ss); |
1820 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1821 | "Got cmac %s for secret %p.\n", | ||
1822 | GNUNET_h2s (&ss->cmac), | ||
1823 | ss); | ||
1771 | sender = setup_sender (&uc->sender, (const struct sockaddr *) &sa, salen); | 1824 | sender = setup_sender (&uc->sender, (const struct sockaddr *) &sa, salen); |
1772 | ss->sender = sender; | 1825 | ss->sender = sender; |
1773 | GNUNET_CONTAINER_DLL_insert (sender->ss_head, sender->ss_tail, ss); | 1826 | GNUNET_CONTAINER_DLL_insert (sender->ss_head, sender->ss_tail, ss); |
@@ -1778,9 +1831,12 @@ sock_read (void *cls) | |||
1778 | 1, | 1831 | 1, |
1779 | GNUNET_NO); | 1832 | GNUNET_NO); |
1780 | try_handle_plaintext (sender, &uc[1], sizeof(pbuf) - sizeof(*uc)); | 1833 | try_handle_plaintext (sender, &uc[1], sizeof(pbuf) - sizeof(*uc)); |
1834 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
1835 | "We have %u secrets\n", | ||
1836 | sender->num_secrets); | ||
1837 | /*if (sender->num_secrets > MAX_SECRETS) | ||
1838 | secret_destroy (sender->ss_tail);*/ | ||
1781 | consider_ss_ack (ss); | 1839 | consider_ss_ack (ss); |
1782 | if (sender->num_secrets > MAX_SECRETS) | ||
1783 | secret_destroy (sender->ss_tail); | ||
1784 | } | 1840 | } |
1785 | } | 1841 | } |
1786 | 1842 | ||
@@ -1859,9 +1915,9 @@ udp_address_to_sockaddr (const char *bindto, socklen_t *sock_len) | |||
1859 | else | 1915 | else |
1860 | { | 1916 | { |
1861 | GNUNET_log ( | 1917 | GNUNET_log ( |
1862 | GNUNET_ERROR_TYPE_ERROR, | 1918 | GNUNET_ERROR_TYPE_ERROR, |
1863 | "BINDTO specification `%s' invalid: last ':' not followed by number\n", | 1919 | "BINDTO specification `%s' invalid: last ':' not followed by number\n", |
1864 | bindto); | 1920 | bindto); |
1865 | GNUNET_free (cp); | 1921 | GNUNET_free (cp); |
1866 | return NULL; | 1922 | return NULL; |
1867 | } | 1923 | } |
@@ -1939,8 +1995,8 @@ do_pad (gcry_cipher_hd_t out_cipher, char *dgram, size_t pad_size) | |||
1939 | memcpy (pad, &hdr, sizeof(hdr)); | 1995 | memcpy (pad, &hdr, sizeof(hdr)); |
1940 | } | 1996 | } |
1941 | GNUNET_assert ( | 1997 | GNUNET_assert ( |
1942 | 0 == | 1998 | 0 == |
1943 | gcry_cipher_encrypt (out_cipher, dgram, sizeof(pad), pad, sizeof(pad))); | 1999 | gcry_cipher_encrypt (out_cipher, dgram, sizeof(pad), pad, sizeof(pad))); |
1944 | } | 2000 | } |
1945 | 2001 | ||
1946 | 2002 | ||
@@ -1982,6 +2038,8 @@ mq_send_kx (struct GNUNET_MQ_Handle *mq, | |||
1982 | GNUNET_CRYPTO_ecdhe_key_create (&epriv); | 2038 | GNUNET_CRYPTO_ecdhe_key_create (&epriv); |
1983 | 2039 | ||
1984 | ss = setup_shared_secret_enc (&epriv, receiver); | 2040 | ss = setup_shared_secret_enc (&epriv, receiver); |
2041 | /*if (receiver->num_secrets > MAX_SECRETS) | ||
2042 | secret_destroy (receiver->ss_tail);*/ | ||
1985 | setup_cipher (&ss->master, 0, &out_cipher); | 2043 | setup_cipher (&ss->master, 0, &out_cipher); |
1986 | /* compute 'uc' */ | 2044 | /* compute 'uc' */ |
1987 | uc.sender = my_identity; | 2045 | uc.sender = my_identity; |
@@ -2007,13 +2065,13 @@ mq_send_kx (struct GNUNET_MQ_Handle *mq, | |||
2007 | dpos += sizeof(uc); | 2065 | dpos += sizeof(uc); |
2008 | /* Append encrypted payload to dgram */ | 2066 | /* Append encrypted payload to dgram */ |
2009 | GNUNET_assert ( | 2067 | GNUNET_assert ( |
2010 | 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize)); | 2068 | 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize)); |
2011 | dpos += msize; | 2069 | dpos += msize; |
2012 | do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos); | 2070 | do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos); |
2013 | /* Datagram starts with kx */ | 2071 | /* Datagram starts with kx */ |
2014 | kx.ephemeral = uhs.ephemeral; | 2072 | kx.ephemeral = uhs.ephemeral; |
2015 | GNUNET_assert ( | 2073 | GNUNET_assert ( |
2016 | 0 == gcry_cipher_gettag (out_cipher, kx.gcm_tag, sizeof(kx.gcm_tag))); | 2074 | 0 == gcry_cipher_gettag (out_cipher, kx.gcm_tag, sizeof(kx.gcm_tag))); |
2017 | gcry_cipher_close (out_cipher); | 2075 | gcry_cipher_close (out_cipher); |
2018 | memcpy (dgram, &kx, sizeof(kx)); | 2076 | memcpy (dgram, &kx, sizeof(kx)); |
2019 | if (-1 == GNUNET_NETWORK_socket_sendto (udp_sock, | 2077 | if (-1 == GNUNET_NETWORK_socket_sendto (udp_sock, |
@@ -2023,8 +2081,10 @@ mq_send_kx (struct GNUNET_MQ_Handle *mq, | |||
2023 | receiver->address_len)) | 2081 | receiver->address_len)) |
2024 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "send"); | 2082 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "send"); |
2025 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 2083 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
2026 | "Sending KX to %s\n", GNUNET_a2s (receiver->address, | 2084 | "Sending KX to %s with ephemeral %s\n", |
2027 | receiver->address_len)); | 2085 | GNUNET_a2s (receiver->address, |
2086 | receiver->address_len), | ||
2087 | GNUNET_e2s (&kx.ephemeral)); | ||
2028 | GNUNET_MQ_impl_send_continue (mq); | 2088 | GNUNET_MQ_impl_send_continue (mq); |
2029 | } | 2089 | } |
2030 | 2090 | ||
@@ -2045,6 +2105,11 @@ mq_send_d (struct GNUNET_MQ_Handle *mq, | |||
2045 | struct ReceiverAddress *receiver = impl_state; | 2105 | struct ReceiverAddress *receiver = impl_state; |
2046 | uint16_t msize = ntohs (msg->size); | 2106 | uint16_t msize = ntohs (msg->size); |
2047 | 2107 | ||
2108 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2109 | "sending to receiver %s with %u acks available.\n", | ||
2110 | receiver->foreign_addr, | ||
2111 | receiver->acks_available); | ||
2112 | |||
2048 | GNUNET_assert (mq == receiver->d_mq); | 2113 | GNUNET_assert (mq == receiver->d_mq); |
2049 | if ((msize > receiver->d_mtu) || | 2114 | if ((msize > receiver->d_mtu) || |
2050 | (0 == receiver->acks_available)) | 2115 | (0 == receiver->acks_available)) |
@@ -2069,12 +2134,16 @@ mq_send_d (struct GNUNET_MQ_Handle *mq, | |||
2069 | 2134 | ||
2070 | box = (struct UDPBox *) dgram; | 2135 | box = (struct UDPBox *) dgram; |
2071 | ss->sequence_used++; | 2136 | ss->sequence_used++; |
2137 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2138 | "get kid with sequence number %u and cmac %s.\n", | ||
2139 | ss->sequence_used, | ||
2140 | GNUNET_h2s (&ss->cmac)); | ||
2072 | get_kid (&ss->master, ss->sequence_used, &box->kid); | 2141 | get_kid (&ss->master, ss->sequence_used, &box->kid); |
2073 | setup_cipher (&ss->master, ss->sequence_used, &out_cipher); | 2142 | setup_cipher (&ss->master, ss->sequence_used, &out_cipher); |
2074 | /* Append encrypted payload to dgram */ | 2143 | /* Append encrypted payload to dgram */ |
2075 | dpos = sizeof(struct UDPBox); | 2144 | dpos = sizeof(struct UDPBox); |
2076 | GNUNET_assert ( | 2145 | GNUNET_assert ( |
2077 | 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize)); | 2146 | 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize)); |
2078 | dpos += msize; | 2147 | dpos += msize; |
2079 | do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos); | 2148 | do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos); |
2080 | GNUNET_assert (0 == gcry_cipher_gettag (out_cipher, | 2149 | GNUNET_assert (0 == gcry_cipher_gettag (out_cipher, |
@@ -2087,8 +2156,19 @@ mq_send_d (struct GNUNET_MQ_Handle *mq, | |||
2087 | receiver->address, | 2156 | receiver->address, |
2088 | receiver->address_len)) | 2157 | receiver->address_len)) |
2089 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "send"); | 2158 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "send"); |
2159 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2160 | "Sending UDPBox to %s with shared secrect %p and kid %s\n", | ||
2161 | GNUNET_a2s ( | ||
2162 | receiver->address, | ||
2163 | receiver | ||
2164 | ->address_len), | ||
2165 | ss, | ||
2166 | GNUNET_sh2s (&box->kid)); | ||
2090 | GNUNET_MQ_impl_send_continue (mq); | 2167 | GNUNET_MQ_impl_send_continue (mq); |
2091 | receiver->acks_available--; | 2168 | receiver->acks_available--; |
2169 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
2170 | "%u acks available after sending.\n", | ||
2171 | receiver->acks_available); | ||
2092 | if (0 == receiver->acks_available) | 2172 | if (0 == receiver->acks_available) |
2093 | { | 2173 | { |
2094 | /* We have no more ACKs */ | 2174 | /* We have no more ACKs */ |
@@ -2205,25 +2285,25 @@ setup_receiver_mq (struct ReceiverAddress *receiver) | |||
2205 | // GNUNET_assert (NULL == receiver->mq); | 2285 | // GNUNET_assert (NULL == receiver->mq); |
2206 | switch (receiver->address->sa_family) | 2286 | switch (receiver->address->sa_family) |
2207 | { | 2287 | { |
2208 | case AF_INET: | 2288 | case AF_INET: |
2209 | base_mtu = 1480 /* Ethernet MTU, 1500 - Ethernet header - VLAN tag */ | 2289 | base_mtu = 1480 /* Ethernet MTU, 1500 - Ethernet header - VLAN tag */ |
2210 | - sizeof(struct GNUNET_TUN_IPv4Header) /* 20 */ | 2290 | - sizeof(struct GNUNET_TUN_IPv4Header) /* 20 */ |
2211 | - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */; | 2291 | - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */; |
2212 | break; | 2292 | break; |
2213 | 2293 | ||
2214 | case AF_INET6: | 2294 | case AF_INET6: |
2215 | base_mtu = 1280 /* Minimum MTU required by IPv6 */ | 2295 | base_mtu = 1280 /* Minimum MTU required by IPv6 */ |
2216 | - sizeof(struct GNUNET_TUN_IPv6Header) /* 40 */ | 2296 | - sizeof(struct GNUNET_TUN_IPv6Header) /* 40 */ |
2217 | - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */; | 2297 | - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */; |
2218 | break; | 2298 | break; |
2219 | 2299 | ||
2220 | default: | 2300 | default: |
2221 | GNUNET_assert (0); | 2301 | GNUNET_assert (0); |
2222 | break; | 2302 | break; |
2223 | } | 2303 | } |
2224 | /* MTU based on full KX messages */ | 2304 | /* MTU based on full KX messages */ |
2225 | receiver->kx_mtu = base_mtu - sizeof(struct InitialKX) /* 48 */ | 2305 | receiver->kx_mtu = base_mtu - sizeof(struct InitialKX) /* 48 */ |
2226 | - sizeof(struct UDPConfirmation); /* 104 */ | 2306 | - sizeof(struct UDPConfirmation); /* 104 */ |
2227 | /* MTU based on BOXed messages */ | 2307 | /* MTU based on BOXed messages */ |
2228 | receiver->d_mtu = base_mtu - sizeof(struct UDPBox); | 2308 | receiver->d_mtu = base_mtu - sizeof(struct UDPBox); |
2229 | 2309 | ||
@@ -2314,10 +2394,10 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity *peer, const char *address) | |||
2314 | receiver->target = *peer; | 2394 | receiver->target = *peer; |
2315 | receiver->nt = GNUNET_NT_scanner_get_type (is, in, in_len); | 2395 | receiver->nt = GNUNET_NT_scanner_get_type (is, in, in_len); |
2316 | (void) GNUNET_CONTAINER_multipeermap_put ( | 2396 | (void) GNUNET_CONTAINER_multipeermap_put ( |
2317 | receivers, | 2397 | receivers, |
2318 | &receiver->target, | 2398 | &receiver->target, |
2319 | receiver, | 2399 | receiver, |
2320 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 2400 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
2321 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 2401 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
2322 | "Added %s to receivers\n", | 2402 | "Added %s to receivers\n", |
2323 | GNUNET_i2s_full (&receiver->target)); | 2403 | GNUNET_i2s_full (&receiver->target)); |
@@ -2553,55 +2633,55 @@ ifc_broadcast (void *cls) | |||
2553 | 2633 | ||
2554 | switch (bi->sa->sa_family) | 2634 | switch (bi->sa->sa_family) |
2555 | { | 2635 | { |
2556 | case AF_INET: { | 2636 | case AF_INET: { |
2557 | static int yes = 1; | 2637 | static int yes = 1; |
2558 | static int no = 0; | 2638 | static int no = 0; |
2559 | ssize_t sent; | 2639 | ssize_t sent; |
2560 | 2640 | ||
2561 | if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, | 2641 | if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, |
2562 | SOL_SOCKET, | 2642 | SOL_SOCKET, |
2563 | SO_BROADCAST, | 2643 | SO_BROADCAST, |
2564 | &yes, | 2644 | &yes, |
2565 | sizeof(int))) | 2645 | sizeof(int))) |
2566 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt"); | 2646 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt"); |
2567 | sent = GNUNET_NETWORK_socket_sendto (udp_sock, | 2647 | sent = GNUNET_NETWORK_socket_sendto (udp_sock, |
2568 | &bi->bcm, | 2648 | &bi->bcm, |
2569 | sizeof(bi->bcm), | 2649 | sizeof(bi->bcm), |
2570 | bi->ba, | 2650 | bi->ba, |
2571 | bi->salen); | 2651 | bi->salen); |
2572 | if (-1 == sent) | 2652 | if (-1 == sent) |
2573 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto"); | 2653 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto"); |
2574 | if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, | 2654 | if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, |
2575 | SOL_SOCKET, | 2655 | SOL_SOCKET, |
2576 | SO_BROADCAST, | 2656 | SO_BROADCAST, |
2577 | &no, | 2657 | &no, |
2578 | sizeof(int))) | 2658 | sizeof(int))) |
2579 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt"); | 2659 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt"); |
2580 | break; | 2660 | break; |
2581 | } | 2661 | } |
2582 | 2662 | ||
2583 | case AF_INET6: { | 2663 | case AF_INET6: { |
2584 | ssize_t sent; | 2664 | ssize_t sent; |
2585 | struct sockaddr_in6 dst; | 2665 | struct sockaddr_in6 dst; |
2586 | 2666 | ||
2587 | dst.sin6_family = AF_INET6; | 2667 | dst.sin6_family = AF_INET6; |
2588 | dst.sin6_port = htons (my_port); | 2668 | dst.sin6_port = htons (my_port); |
2589 | dst.sin6_addr = bi->mcreq.ipv6mr_multiaddr; | 2669 | dst.sin6_addr = bi->mcreq.ipv6mr_multiaddr; |
2590 | dst.sin6_scope_id = ((struct sockaddr_in6 *) bi->ba)->sin6_scope_id; | 2670 | dst.sin6_scope_id = ((struct sockaddr_in6 *) bi->ba)->sin6_scope_id; |
2591 | 2671 | ||
2592 | sent = GNUNET_NETWORK_socket_sendto (udp_sock, | 2672 | sent = GNUNET_NETWORK_socket_sendto (udp_sock, |
2593 | &bi->bcm, | 2673 | &bi->bcm, |
2594 | sizeof(bi->bcm), | 2674 | sizeof(bi->bcm), |
2595 | (const struct sockaddr *) &dst, | 2675 | (const struct sockaddr *) &dst, |
2596 | sizeof(dst)); | 2676 | sizeof(dst)); |
2597 | if (-1 == sent) | 2677 | if (-1 == sent) |
2598 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto"); | 2678 | GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto"); |
2599 | break; | 2679 | break; |
2600 | } | 2680 | } |
2601 | 2681 | ||
2602 | default: | 2682 | default: |
2603 | GNUNET_break (0); | 2683 | GNUNET_break (0); |
2604 | break; | 2684 | break; |
2605 | } | 2685 | } |
2606 | } | 2686 | } |
2607 | 2687 | ||
@@ -2683,7 +2763,7 @@ iface_proc (void *cls, | |||
2683 | (const struct sockaddr_in6 *) broadcast_addr; | 2763 | (const struct sockaddr_in6 *) broadcast_addr; |
2684 | 2764 | ||
2685 | GNUNET_assert ( | 2765 | GNUNET_assert ( |
2686 | 1 == inet_pton (AF_INET6, "FF05::13B", &bi->mcreq.ipv6mr_multiaddr)); | 2766 | 1 == inet_pton (AF_INET6, "FF05::13B", &bi->mcreq.ipv6mr_multiaddr)); |
2687 | 2767 | ||
2688 | /* http://tools.ietf.org/html/rfc2553#section-5.2: | 2768 | /* http://tools.ietf.org/html/rfc2553#section-5.2: |
2689 | * | 2769 | * |
@@ -2820,17 +2900,17 @@ run (void *cls, | |||
2820 | GNUNET_a2s ((const struct sockaddr *) &in_sto, sto_len)); | 2900 | GNUNET_a2s ((const struct sockaddr *) &in_sto, sto_len)); |
2821 | switch (in->sa_family) | 2901 | switch (in->sa_family) |
2822 | { | 2902 | { |
2823 | case AF_INET: | 2903 | case AF_INET: |
2824 | my_port = ntohs (((struct sockaddr_in *) in)->sin_port); | 2904 | my_port = ntohs (((struct sockaddr_in *) in)->sin_port); |
2825 | break; | 2905 | break; |
2826 | 2906 | ||
2827 | case AF_INET6: | 2907 | case AF_INET6: |
2828 | my_port = ntohs (((struct sockaddr_in6 *) in)->sin6_port); | 2908 | my_port = ntohs (((struct sockaddr_in6 *) in)->sin6_port); |
2829 | break; | 2909 | break; |
2830 | 2910 | ||
2831 | default: | 2911 | default: |
2832 | GNUNET_break (0); | 2912 | GNUNET_break (0); |
2833 | my_port = 0; | 2913 | my_port = 0; |
2834 | } | 2914 | } |
2835 | stats = GNUNET_STATISTICS_create ("C-UDP", cfg); | 2915 | stats = GNUNET_STATISTICS_create ("C-UDP", cfg); |
2836 | senders = GNUNET_CONTAINER_multipeermap_create (32, GNUNET_YES); | 2916 | senders = GNUNET_CONTAINER_multipeermap_create (32, GNUNET_YES); |
@@ -2845,9 +2925,9 @@ run (void *cls, | |||
2845 | if (NULL == my_private_key) | 2925 | if (NULL == my_private_key) |
2846 | { | 2926 | { |
2847 | GNUNET_log ( | 2927 | GNUNET_log ( |
2848 | GNUNET_ERROR_TYPE_ERROR, | 2928 | GNUNET_ERROR_TYPE_ERROR, |
2849 | _ ( | 2929 | _ ( |
2850 | "Transport service is lacking key configuration settings. Exiting.\n")); | 2930 | "Transport service is lacking key configuration settings. Exiting.\n")); |
2851 | GNUNET_SCHEDULER_shutdown (); | 2931 | GNUNET_SCHEDULER_shutdown (); |
2852 | return; | 2932 | return; |
2853 | } | 2933 | } |
@@ -2923,8 +3003,8 @@ main (int argc, char *const *argv) | |||
2923 | options, | 3003 | options, |
2924 | &run, | 3004 | &run, |
2925 | NULL)) | 3005 | NULL)) |
2926 | ? 0 | 3006 | ? 0 |
2927 | : 1; | 3007 | : 1; |
2928 | GNUNET_free_nz ((void *) argv); | 3008 | GNUNET_free_nz ((void *) argv); |
2929 | return ret; | 3009 | return ret; |
2930 | } | 3010 | } |