aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/gnunet-communicator-udp.c264
1 files changed, 132 insertions, 132 deletions
diff --git a/src/transport/gnunet-communicator-udp.c b/src/transport/gnunet-communicator-udp.c
index 173c86bfb..5ca5a4e86 100644
--- a/src/transport/gnunet-communicator-udp.c
+++ b/src/transport/gnunet-communicator-udp.c
@@ -1380,7 +1380,7 @@ try_handle_plaintext (struct SenderAddress *sender,
1380 * @param ss shared secret to generate ACKs for 1380 * @param ss shared secret to generate ACKs for
1381 */ 1381 */
1382static void 1382static void
1383consider_ss_ack (struct SharedSecret *ss, int yesno) 1383consider_ss_ack (struct SharedSecret *ss)
1384{ 1384{
1385 GNUNET_assert (NULL != ss->sender); 1385 GNUNET_assert (NULL != ss->sender);
1386 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1386 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1460,7 +1460,7 @@ decrypt_box (const struct UDPBox *box,
1460 sizeof(out_buf), 1460 sizeof(out_buf),
1461 GNUNET_NO); 1461 GNUNET_NO);
1462 try_handle_plaintext (ss->sender, out_buf, sizeof(out_buf)); 1462 try_handle_plaintext (ss->sender, out_buf, sizeof(out_buf));
1463 consider_ss_ack (ss, GNUNET_YES); 1463 consider_ss_ack (ss);
1464} 1464}
1465 1465
1466 1466
@@ -1530,8 +1530,8 @@ setup_sender (const struct GNUNET_PeerIdentity *target,
1530{ 1530{
1531 struct SenderAddress *sender; 1531 struct SenderAddress *sender;
1532 struct SearchContext sc = { .address = address, 1532 struct SearchContext sc = { .address = address,
1533 .address_len = address_len, 1533 .address_len = address_len,
1534 .sender = NULL }; 1534 .sender = NULL };
1535 1535
1536 GNUNET_CONTAINER_multipeermap_get_multiple (senders, 1536 GNUNET_CONTAINER_multipeermap_get_multiple (senders,
1537 target, 1537 target,
@@ -1547,10 +1547,10 @@ setup_sender (const struct GNUNET_PeerIdentity *target,
1547 sender->address = GNUNET_memdup (address, address_len); 1547 sender->address = GNUNET_memdup (address, address_len);
1548 sender->address_len = address_len; 1548 sender->address_len = address_len;
1549 (void) GNUNET_CONTAINER_multipeermap_put ( 1549 (void) GNUNET_CONTAINER_multipeermap_put (
1550 senders, 1550 senders,
1551 &sender->target, 1551 &sender->target,
1552 sender, 1552 sender,
1553 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1553 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1554 GNUNET_STATISTICS_set (stats, 1554 GNUNET_STATISTICS_set (stats,
1555 "# senders active", 1555 "# senders active",
1556 GNUNET_CONTAINER_multipeermap_size (receivers), 1556 GNUNET_CONTAINER_multipeermap_size (receivers),
@@ -1587,10 +1587,10 @@ verify_confirmation (const struct GNUNET_CRYPTO_EcdhePublicKey *ephemeral,
1587 uhs.ephemeral = *ephemeral; 1587 uhs.ephemeral = *ephemeral;
1588 uhs.monotonic_time = uc->monotonic_time; 1588 uhs.monotonic_time = uc->monotonic_time;
1589 return GNUNET_CRYPTO_eddsa_verify ( 1589 return GNUNET_CRYPTO_eddsa_verify (
1590 GNUNET_SIGNATURE_COMMUNICATOR_UDP_HANDSHAKE, 1590 GNUNET_SIGNATURE_COMMUNICATOR_UDP_HANDSHAKE,
1591 &uhs, 1591 &uhs,
1592 &uc->sender_sig, 1592 &uc->sender_sig,
1593 &uc->sender.public_key); 1593 &uc->sender.public_key);
1594} 1594}
1595 1595
1596 1596
@@ -1610,22 +1610,22 @@ sockaddr_to_udpaddr_string (const struct sockaddr *address,
1610 1610
1611 switch (address->sa_family) 1611 switch (address->sa_family)
1612 { 1612 {
1613 case AF_INET: 1613 case AF_INET:
1614 GNUNET_asprintf (&ret, 1614 GNUNET_asprintf (&ret,
1615 "%s-%s", 1615 "%s-%s",
1616 COMMUNICATOR_ADDRESS_PREFIX, 1616 COMMUNICATOR_ADDRESS_PREFIX,
1617 GNUNET_a2s (address, address_len)); 1617 GNUNET_a2s (address, address_len));
1618 break; 1618 break;
1619 1619
1620 case AF_INET6: 1620 case AF_INET6:
1621 GNUNET_asprintf (&ret, 1621 GNUNET_asprintf (&ret,
1622 "%s-%s", 1622 "%s-%s",
1623 COMMUNICATOR_ADDRESS_PREFIX, 1623 COMMUNICATOR_ADDRESS_PREFIX,
1624 GNUNET_a2s (address, address_len)); 1624 GNUNET_a2s (address, address_len));
1625 break; 1625 break;
1626 1626
1627 default: 1627 default:
1628 GNUNET_assert (0); 1628 GNUNET_assert (0);
1629 } 1629 }
1630 return ret; 1630 return ret;
1631} 1631}
@@ -1730,8 +1730,8 @@ sock_read (void *cls)
1730 1730
1731 kx = (const struct InitialKX *) buf; 1731 kx = (const struct InitialKX *) buf;
1732 ss = setup_shared_secret_dec (&kx->ephemeral); 1732 ss = setup_shared_secret_dec (&kx->ephemeral);
1733 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1733 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1734 "Before DEC\n"); 1734 "Before DEC\n");
1735 1735
1736 if (GNUNET_OK != try_decrypt (ss, 1736 if (GNUNET_OK != try_decrypt (ss,
1737 kx->gcm_tag, 1737 kx->gcm_tag,
@@ -1744,14 +1744,14 @@ sock_read (void *cls)
1744 "Unable to decrypt tag, dropping...\n"); 1744 "Unable to decrypt tag, dropping...\n");
1745 GNUNET_free (ss); 1745 GNUNET_free (ss);
1746 GNUNET_STATISTICS_update ( 1746 GNUNET_STATISTICS_update (
1747 stats, 1747 stats,
1748 "# messages dropped (no kid, AEAD decryption failed)", 1748 "# messages dropped (no kid, AEAD decryption failed)",
1749 1, 1749 1,
1750 GNUNET_NO); 1750 GNUNET_NO);
1751 return; 1751 return;
1752 } 1752 }
1753 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1753 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1754 "Before VERIFY\n"); 1754 "Before VERIFY\n");
1755 1755
1756 uc = (const struct UDPConfirmation *) pbuf; 1756 uc = (const struct UDPConfirmation *) pbuf;
1757 if (GNUNET_OK != verify_confirmation (&kx->ephemeral, uc)) 1757 if (GNUNET_OK != verify_confirmation (&kx->ephemeral, uc))
@@ -1764,8 +1764,8 @@ sock_read (void *cls)
1764 GNUNET_NO); 1764 GNUNET_NO);
1765 return; 1765 return;
1766 } 1766 }
1767 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 1767 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
1768 "Before SETUP_SENDER\n"); 1768 "Before SETUP_SENDER\n");
1769 1769
1770 calculate_cmac (ss); 1770 calculate_cmac (ss);
1771 sender = setup_sender (&uc->sender, (const struct sockaddr *) &sa, salen); 1771 sender = setup_sender (&uc->sender, (const struct sockaddr *) &sa, salen);
@@ -1778,7 +1778,7 @@ sock_read (void *cls)
1778 1, 1778 1,
1779 GNUNET_NO); 1779 GNUNET_NO);
1780 try_handle_plaintext (sender, &uc[1], sizeof(pbuf) - sizeof(*uc)); 1780 try_handle_plaintext (sender, &uc[1], sizeof(pbuf) - sizeof(*uc));
1781 consider_ss_ack (ss, GNUNET_NO); 1781 consider_ss_ack (ss);
1782 if (sender->num_secrets > MAX_SECRETS) 1782 if (sender->num_secrets > MAX_SECRETS)
1783 secret_destroy (sender->ss_tail); 1783 secret_destroy (sender->ss_tail);
1784 } 1784 }
@@ -1859,9 +1859,9 @@ udp_address_to_sockaddr (const char *bindto, socklen_t *sock_len)
1859 else 1859 else
1860 { 1860 {
1861 GNUNET_log ( 1861 GNUNET_log (
1862 GNUNET_ERROR_TYPE_ERROR, 1862 GNUNET_ERROR_TYPE_ERROR,
1863 "BINDTO specification `%s' invalid: last ':' not followed by number\n", 1863 "BINDTO specification `%s' invalid: last ':' not followed by number\n",
1864 bindto); 1864 bindto);
1865 GNUNET_free (cp); 1865 GNUNET_free (cp);
1866 return NULL; 1866 return NULL;
1867 } 1867 }
@@ -1939,8 +1939,8 @@ do_pad (gcry_cipher_hd_t out_cipher, char *dgram, size_t pad_size)
1939 memcpy (pad, &hdr, sizeof(hdr)); 1939 memcpy (pad, &hdr, sizeof(hdr));
1940 } 1940 }
1941 GNUNET_assert ( 1941 GNUNET_assert (
1942 0 == 1942 0 ==
1943 gcry_cipher_encrypt (out_cipher, dgram, sizeof(pad), pad, sizeof(pad))); 1943 gcry_cipher_encrypt (out_cipher, dgram, sizeof(pad), pad, sizeof(pad)));
1944} 1944}
1945 1945
1946 1946
@@ -2007,13 +2007,13 @@ mq_send_kx (struct GNUNET_MQ_Handle *mq,
2007 dpos += sizeof(uc); 2007 dpos += sizeof(uc);
2008 /* Append encrypted payload to dgram */ 2008 /* Append encrypted payload to dgram */
2009 GNUNET_assert ( 2009 GNUNET_assert (
2010 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize)); 2010 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize));
2011 dpos += msize; 2011 dpos += msize;
2012 do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos); 2012 do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos);
2013 /* Datagram starts with kx */ 2013 /* Datagram starts with kx */
2014 kx.ephemeral = uhs.ephemeral; 2014 kx.ephemeral = uhs.ephemeral;
2015 GNUNET_assert ( 2015 GNUNET_assert (
2016 0 == gcry_cipher_gettag (out_cipher, kx.gcm_tag, sizeof(kx.gcm_tag))); 2016 0 == gcry_cipher_gettag (out_cipher, kx.gcm_tag, sizeof(kx.gcm_tag)));
2017 gcry_cipher_close (out_cipher); 2017 gcry_cipher_close (out_cipher);
2018 memcpy (dgram, &kx, sizeof(kx)); 2018 memcpy (dgram, &kx, sizeof(kx));
2019 if (-1 == GNUNET_NETWORK_socket_sendto (udp_sock, 2019 if (-1 == GNUNET_NETWORK_socket_sendto (udp_sock,
@@ -2074,7 +2074,7 @@ mq_send_d (struct GNUNET_MQ_Handle *mq,
2074 /* Append encrypted payload to dgram */ 2074 /* Append encrypted payload to dgram */
2075 dpos = sizeof(struct UDPBox); 2075 dpos = sizeof(struct UDPBox);
2076 GNUNET_assert ( 2076 GNUNET_assert (
2077 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize)); 2077 0 == gcry_cipher_encrypt (out_cipher, &dgram[dpos], msize, msg, msize));
2078 dpos += msize; 2078 dpos += msize;
2079 do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos); 2079 do_pad (out_cipher, &dgram[dpos], sizeof(dgram) - dpos);
2080 GNUNET_assert (0 == gcry_cipher_gettag (out_cipher, 2080 GNUNET_assert (0 == gcry_cipher_gettag (out_cipher,
@@ -2193,37 +2193,37 @@ setup_receiver_mq (struct ReceiverAddress *receiver)
2193 size_t base_mtu; 2193 size_t base_mtu;
2194 2194
2195 /*if (NULL != receiver->kx_qh) 2195 /*if (NULL != receiver->kx_qh)
2196 { 2196 {
2197 GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh); 2197 GNUNET_TRANSPORT_communicator_mq_del (receiver->kx_qh);
2198 receiver->kx_qh = NULL; 2198 receiver->kx_qh = NULL;
2199 } 2199 }
2200 if (NULL != receiver->d_qh) 2200 if (NULL != receiver->d_qh)
2201 { 2201 {
2202 GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh); 2202 GNUNET_TRANSPORT_communicator_mq_del (receiver->d_qh);
2203 receiver->d_qh = NULL; 2203 receiver->d_qh = NULL;
2204 }*/ 2204 }*/
2205 // GNUNET_assert (NULL == receiver->mq); 2205 // GNUNET_assert (NULL == receiver->mq);
2206 switch (receiver->address->sa_family) 2206 switch (receiver->address->sa_family)
2207 { 2207 {
2208 case AF_INET: 2208 case AF_INET:
2209 base_mtu = 1480 /* Ethernet MTU, 1500 - Ethernet header - VLAN tag */ 2209 base_mtu = 1480 /* Ethernet MTU, 1500 - Ethernet header - VLAN tag */
2210 - sizeof(struct GNUNET_TUN_IPv4Header) /* 20 */ 2210 - sizeof(struct GNUNET_TUN_IPv4Header) /* 20 */
2211 - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */; 2211 - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */;
2212 break; 2212 break;
2213 2213
2214 case AF_INET6: 2214 case AF_INET6:
2215 base_mtu = 1280 /* Minimum MTU required by IPv6 */ 2215 base_mtu = 1280 /* Minimum MTU required by IPv6 */
2216 - sizeof(struct GNUNET_TUN_IPv6Header) /* 40 */ 2216 - sizeof(struct GNUNET_TUN_IPv6Header) /* 40 */
2217 - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */; 2217 - sizeof(struct GNUNET_TUN_UdpHeader) /* 8 */;
2218 break; 2218 break;
2219 2219
2220 default: 2220 default:
2221 GNUNET_assert (0); 2221 GNUNET_assert (0);
2222 break; 2222 break;
2223 } 2223 }
2224 /* MTU based on full KX messages */ 2224 /* MTU based on full KX messages */
2225 receiver->kx_mtu = base_mtu - sizeof(struct InitialKX) /* 48 */ 2225 receiver->kx_mtu = base_mtu - sizeof(struct InitialKX) /* 48 */
2226 - sizeof(struct UDPConfirmation); /* 104 */ 2226 - sizeof(struct UDPConfirmation); /* 104 */
2227 /* MTU based on BOXed messages */ 2227 /* MTU based on BOXed messages */
2228 receiver->d_mtu = base_mtu - sizeof(struct UDPBox); 2228 receiver->d_mtu = base_mtu - sizeof(struct UDPBox);
2229 2229
@@ -2314,10 +2314,10 @@ mq_init (void *cls, const struct GNUNET_PeerIdentity *peer, const char *address)
2314 receiver->target = *peer; 2314 receiver->target = *peer;
2315 receiver->nt = GNUNET_NT_scanner_get_type (is, in, in_len); 2315 receiver->nt = GNUNET_NT_scanner_get_type (is, in, in_len);
2316 (void) GNUNET_CONTAINER_multipeermap_put ( 2316 (void) GNUNET_CONTAINER_multipeermap_put (
2317 receivers, 2317 receivers,
2318 &receiver->target, 2318 &receiver->target,
2319 receiver, 2319 receiver,
2320 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 2320 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
2321 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2321 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2322 "Added %s to receivers\n", 2322 "Added %s to receivers\n",
2323 GNUNET_i2s_full (&receiver->target)); 2323 GNUNET_i2s_full (&receiver->target));
@@ -2553,55 +2553,55 @@ ifc_broadcast (void *cls)
2553 2553
2554 switch (bi->sa->sa_family) 2554 switch (bi->sa->sa_family)
2555 { 2555 {
2556 case AF_INET: { 2556 case AF_INET: {
2557 static int yes = 1; 2557 static int yes = 1;
2558 static int no = 0; 2558 static int no = 0;
2559 ssize_t sent; 2559 ssize_t sent;
2560 2560
2561 if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, 2561 if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock,
2562 SOL_SOCKET, 2562 SOL_SOCKET,
2563 SO_BROADCAST, 2563 SO_BROADCAST,
2564 &yes, 2564 &yes,
2565 sizeof(int))) 2565 sizeof(int)))
2566 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt"); 2566 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt");
2567 sent = GNUNET_NETWORK_socket_sendto (udp_sock, 2567 sent = GNUNET_NETWORK_socket_sendto (udp_sock,
2568 &bi->bcm, 2568 &bi->bcm,
2569 sizeof(bi->bcm), 2569 sizeof(bi->bcm),
2570 bi->ba, 2570 bi->ba,
2571 bi->salen); 2571 bi->salen);
2572 if (-1 == sent) 2572 if (-1 == sent)
2573 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto"); 2573 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto");
2574 if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock, 2574 if (GNUNET_OK != GNUNET_NETWORK_socket_setsockopt (udp_sock,
2575 SOL_SOCKET, 2575 SOL_SOCKET,
2576 SO_BROADCAST, 2576 SO_BROADCAST,
2577 &no, 2577 &no,
2578 sizeof(int))) 2578 sizeof(int)))
2579 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt"); 2579 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "setsockopt");
2580 break; 2580 break;
2581 } 2581 }
2582 2582
2583 case AF_INET6: { 2583 case AF_INET6: {
2584 ssize_t sent; 2584 ssize_t sent;
2585 struct sockaddr_in6 dst; 2585 struct sockaddr_in6 dst;
2586 2586
2587 dst.sin6_family = AF_INET6; 2587 dst.sin6_family = AF_INET6;
2588 dst.sin6_port = htons (my_port); 2588 dst.sin6_port = htons (my_port);
2589 dst.sin6_addr = bi->mcreq.ipv6mr_multiaddr; 2589 dst.sin6_addr = bi->mcreq.ipv6mr_multiaddr;
2590 dst.sin6_scope_id = ((struct sockaddr_in6 *) bi->ba)->sin6_scope_id; 2590 dst.sin6_scope_id = ((struct sockaddr_in6 *) bi->ba)->sin6_scope_id;
2591 2591
2592 sent = GNUNET_NETWORK_socket_sendto (udp_sock, 2592 sent = GNUNET_NETWORK_socket_sendto (udp_sock,
2593 &bi->bcm, 2593 &bi->bcm,
2594 sizeof(bi->bcm), 2594 sizeof(bi->bcm),
2595 (const struct sockaddr *) &dst, 2595 (const struct sockaddr *) &dst,
2596 sizeof(dst)); 2596 sizeof(dst));
2597 if (-1 == sent) 2597 if (-1 == sent)
2598 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto"); 2598 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "sendto");
2599 break; 2599 break;
2600 } 2600 }
2601 2601
2602 default: 2602 default:
2603 GNUNET_break (0); 2603 GNUNET_break (0);
2604 break; 2604 break;
2605 } 2605 }
2606} 2606}
2607 2607
@@ -2683,7 +2683,7 @@ iface_proc (void *cls,
2683 (const struct sockaddr_in6 *) broadcast_addr; 2683 (const struct sockaddr_in6 *) broadcast_addr;
2684 2684
2685 GNUNET_assert ( 2685 GNUNET_assert (
2686 1 == inet_pton (AF_INET6, "FF05::13B", &bi->mcreq.ipv6mr_multiaddr)); 2686 1 == inet_pton (AF_INET6, "FF05::13B", &bi->mcreq.ipv6mr_multiaddr));
2687 2687
2688 /* http://tools.ietf.org/html/rfc2553#section-5.2: 2688 /* http://tools.ietf.org/html/rfc2553#section-5.2:
2689 * 2689 *
@@ -2820,17 +2820,17 @@ run (void *cls,
2820 GNUNET_a2s ((const struct sockaddr *) &in_sto, sto_len)); 2820 GNUNET_a2s ((const struct sockaddr *) &in_sto, sto_len));
2821 switch (in->sa_family) 2821 switch (in->sa_family)
2822 { 2822 {
2823 case AF_INET: 2823 case AF_INET:
2824 my_port = ntohs (((struct sockaddr_in *) in)->sin_port); 2824 my_port = ntohs (((struct sockaddr_in *) in)->sin_port);
2825 break; 2825 break;
2826 2826
2827 case AF_INET6: 2827 case AF_INET6:
2828 my_port = ntohs (((struct sockaddr_in6 *) in)->sin6_port); 2828 my_port = ntohs (((struct sockaddr_in6 *) in)->sin6_port);
2829 break; 2829 break;
2830 2830
2831 default: 2831 default:
2832 GNUNET_break (0); 2832 GNUNET_break (0);
2833 my_port = 0; 2833 my_port = 0;
2834 } 2834 }
2835 stats = GNUNET_STATISTICS_create ("C-UDP", cfg); 2835 stats = GNUNET_STATISTICS_create ("C-UDP", cfg);
2836 senders = GNUNET_CONTAINER_multipeermap_create (32, GNUNET_YES); 2836 senders = GNUNET_CONTAINER_multipeermap_create (32, GNUNET_YES);
@@ -2845,9 +2845,9 @@ run (void *cls,
2845 if (NULL == my_private_key) 2845 if (NULL == my_private_key)
2846 { 2846 {
2847 GNUNET_log ( 2847 GNUNET_log (
2848 GNUNET_ERROR_TYPE_ERROR, 2848 GNUNET_ERROR_TYPE_ERROR,
2849 _ ( 2849 _ (
2850 "Transport service is lacking key configuration settings. Exiting.\n")); 2850 "Transport service is lacking key configuration settings. Exiting.\n"));
2851 GNUNET_SCHEDULER_shutdown (); 2851 GNUNET_SCHEDULER_shutdown ();
2852 return; 2852 return;
2853 } 2853 }
@@ -2923,8 +2923,8 @@ main (int argc, char *const *argv)
2923 options, 2923 options,
2924 &run, 2924 &run,
2925 NULL)) 2925 NULL))
2926 ? 0 2926 ? 0
2927 : 1; 2927 : 1;
2928 GNUNET_free_nz ((void *) argv); 2928 GNUNET_free_nz ((void *) argv);
2929 return ret; 2929 return ret;
2930} 2930}