diff options
author | Florian Dold <florian.dold@gmail.com> | 2013-05-22 10:29:15 +0000 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2013-05-22 10:29:15 +0000 |
commit | 4289fca5aeefd0652ae60bc16f90ed911c7e1c60 (patch) | |
tree | da266c48ada44f11ce88a38833960b0eb08c1c5d | |
parent | 3418f171c455980c99ac6363a74116243bddede6 (diff) | |
download | gnunet-4289fca5aeefd0652ae60bc16f90ed911c7e1c60.tar.gz gnunet-4289fca5aeefd0652ae60bc16f90ed911c7e1c60.zip |
- moved MQ to util
- MQ support for stream
- set api
- starting to use set for consensus
31 files changed, 1584 insertions, 4193 deletions
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
8 | "Project-Id-Version: GNUnet 0.7.0b\n" | 8 | "Project-Id-Version: GNUnet 0.7.0b\n" |
9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" | 9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" |
10 | "POT-Creation-Date: 2013-04-27 12:39+0200\n" | 10 | "POT-Creation-Date: 2013-05-20 15:09+0200\n" |
11 | "PO-Revision-Date: 2006-03-17 21:37+0100\n" | 11 | "PO-Revision-Date: 2006-03-17 21:37+0100\n" |
12 | "Last-Translator: Nils Durner <durner@gnunet.org>\n" | 12 | "Last-Translator: Nils Durner <durner@gnunet.org>\n" |
13 | "Language-Team: German <de@li.org>\n" | 13 | "Language-Team: German <de@li.org>\n" |
@@ -36,89 +36,89 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" | |||
36 | msgid "Failed to remove servicehome directory %s\n" | 36 | msgid "Failed to remove servicehome directory %s\n" |
37 | msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" | 37 | msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" |
38 | 38 | ||
39 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:712 | 39 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:962 |
40 | msgid "Message was sent successfully" | 40 | msgid "Message was sent successfully" |
41 | msgstr "" | 41 | msgstr "" |
42 | 42 | ||
43 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:714 | 43 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:964 |
44 | #, fuzzy | 44 | #, fuzzy |
45 | msgid "Misconfiguration (can't connect to the ARM service)" | 45 | msgid "Misconfiguration (can't connect to the ARM service)" |
46 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" | 46 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" |
47 | 47 | ||
48 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:716 | 48 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:966 |
49 | #, fuzzy | 49 | #, fuzzy |
50 | msgid "We disconnected from ARM before we could send a request" | 50 | msgid "We disconnected from ARM before we could send a request" |
51 | msgstr "# gap Anfragen verworfen: Kollision in RT" | 51 | msgstr "# gap Anfragen verworfen: Kollision in RT" |
52 | 52 | ||
53 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:718 | 53 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:968 |
54 | msgid "ARM API is busy" | 54 | msgid "ARM API is busy" |
55 | msgstr "" | 55 | msgstr "" |
56 | 56 | ||
57 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:720 | 57 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:970 |
58 | msgid "Request doesn't fit into a message" | 58 | msgid "Request doesn't fit into a message" |
59 | msgstr "" | 59 | msgstr "" |
60 | 60 | ||
61 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:722 | 61 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:972 |
62 | #, fuzzy | 62 | #, fuzzy |
63 | msgid "Request timed out" | 63 | msgid "Request timed out" |
64 | msgstr "# Sitzungsschlüssel akzeptiert" | 64 | msgstr "# Sitzungsschlüssel akzeptiert" |
65 | 65 | ||
66 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:724 | 66 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:974 |
67 | #, fuzzy | 67 | #, fuzzy |
68 | msgid "Unknown request status" | 68 | msgid "Unknown request status" |
69 | msgstr "Unbekannte Operation `%s'\n" | 69 | msgstr "Unbekannte Operation `%s'\n" |
70 | 70 | ||
71 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:740 | 71 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:990 |
72 | #, fuzzy, c-format | 72 | #, fuzzy, c-format |
73 | msgid "%s is stopped" | 73 | msgid "%s is stopped" |
74 | msgstr "# bytes in der Datenbank" | 74 | msgstr "# bytes in der Datenbank" |
75 | 75 | ||
76 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:742 | 76 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:992 |
77 | #, fuzzy, c-format | 77 | #, fuzzy, c-format |
78 | msgid "%s is starting" | 78 | msgid "%s is starting" |
79 | msgstr "`%s' startet\n" | 79 | msgstr "`%s' startet\n" |
80 | 80 | ||
81 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:744 | 81 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:994 |
82 | #, c-format | 82 | #, c-format |
83 | msgid "%s is stopping" | 83 | msgid "%s is stopping" |
84 | msgstr "" | 84 | msgstr "" |
85 | 85 | ||
86 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:746 | 86 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:996 |
87 | #, fuzzy, c-format | 87 | #, fuzzy, c-format |
88 | msgid "%s is starting already" | 88 | msgid "%s is starting already" |
89 | msgstr "`%s' startet\n" | 89 | msgstr "`%s' startet\n" |
90 | 90 | ||
91 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:748 | 91 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:998 |
92 | #, c-format | 92 | #, c-format |
93 | msgid "%s is stopping already" | 93 | msgid "%s is stopping already" |
94 | msgstr "" | 94 | msgstr "" |
95 | 95 | ||
96 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:750 | 96 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:1000 |
97 | #, c-format | 97 | #, c-format |
98 | msgid "%s is started already" | 98 | msgid "%s is started already" |
99 | msgstr "" | 99 | msgstr "" |
100 | 100 | ||
101 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:752 | 101 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:1002 |
102 | #, c-format | 102 | #, c-format |
103 | msgid "%s is stopped already" | 103 | msgid "%s is stopped already" |
104 | msgstr "" | 104 | msgstr "" |
105 | 105 | ||
106 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:754 | 106 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:1004 |
107 | #, fuzzy, c-format | 107 | #, fuzzy, c-format |
108 | msgid "%s service is not known to ARM" | 108 | msgid "%s service is not known to ARM" |
109 | msgstr "Namespace `%s' hat das Rating %d.\n" | 109 | msgstr "Namespace `%s' hat das Rating %d.\n" |
110 | 110 | ||
111 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:756 | 111 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:1006 |
112 | #, fuzzy, c-format | 112 | #, fuzzy, c-format |
113 | msgid "%s service failed to start" | 113 | msgid "%s service failed to start" |
114 | msgstr "Fehler beim Starten der Collection.\n" | 114 | msgstr "Fehler beim Starten der Collection.\n" |
115 | 115 | ||
116 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:758 | 116 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:1008 |
117 | #, fuzzy, c-format | 117 | #, fuzzy, c-format |
118 | msgid "%s service can't be started because ARM is shutting down" | 118 | msgid "%s service can't be started because ARM is shutting down" |
119 | msgstr "`%s' fährt herunter.\n" | 119 | msgstr "`%s' fährt herunter.\n" |
120 | 120 | ||
121 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:760 | 121 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:1010 |
122 | #, c-format | 122 | #, c-format |
123 | msgid "%.s Unknown result code." | 123 | msgid "%.s Unknown result code." |
124 | msgstr "" | 124 | msgstr "" |
@@ -844,8 +844,8 @@ msgstr "Ungültige Nachricht des Typs %u empfangen. Nachricht wird verworfen.\n" | |||
844 | #: src/transport/gnunet-service-transport_neighbours.c:1041 | 844 | #: src/transport/gnunet-service-transport_neighbours.c:1041 |
845 | #: src/transport/gnunet-service-transport_neighbours.c:1265 | 845 | #: src/transport/gnunet-service-transport_neighbours.c:1265 |
846 | #: src/transport/gnunet-service-transport_neighbours.c:1274 | 846 | #: src/transport/gnunet-service-transport_neighbours.c:1274 |
847 | #: src/transport/gnunet-service-transport_neighbours.c:2794 | 847 | #: src/transport/gnunet-service-transport_neighbours.c:2798 |
848 | #: src/transport/gnunet-service-transport_neighbours.c:3053 | 848 | #: src/transport/gnunet-service-transport_neighbours.c:3057 |
849 | #, fuzzy | 849 | #, fuzzy |
850 | msgid "# peers connected" | 850 | msgid "# peers connected" |
851 | msgstr "# verbundener Knoten" | 851 | msgstr "# verbundener Knoten" |
@@ -1332,7 +1332,7 @@ msgstr "" | |||
1332 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 | 1332 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 |
1333 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 | 1333 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 |
1334 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 | 1334 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 |
1335 | #: src/nse/gnunet-nse-profiler.c:900 | 1335 | #: src/nse/gnunet-nse-profiler.c:899 |
1336 | msgid "be verbose (print progress information)" | 1336 | msgid "be verbose (print progress information)" |
1337 | msgstr "" | 1337 | msgstr "" |
1338 | 1338 | ||
@@ -2243,7 +2243,7 @@ msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n" | |||
2243 | msgid "no-name" | 2243 | msgid "no-name" |
2244 | msgstr "Name anzeigen" | 2244 | msgstr "Name anzeigen" |
2245 | 2245 | ||
2246 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:975 | 2246 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:1014 |
2247 | #, fuzzy, c-format | 2247 | #, fuzzy, c-format |
2248 | msgid "ECC signing failed at %s:%d: %s\n" | 2248 | msgid "ECC signing failed at %s:%d: %s\n" |
2249 | msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" | 2249 | msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" |
@@ -2447,12 +2447,12 @@ msgstr "" | |||
2447 | msgid "Unrecognized URI type" | 2447 | msgid "Unrecognized URI type" |
2448 | msgstr "" | 2448 | msgstr "" |
2449 | 2449 | ||
2450 | #: src/fs/fs_uri.c:898 | 2450 | #: src/fs/fs_uri.c:898 src/util/crypto_ecc.c:941 |
2451 | #, fuzzy | 2451 | #, fuzzy |
2452 | msgid "Lacking key configuration settings.\n" | 2452 | msgid "Lacking key configuration settings.\n" |
2453 | msgstr "GNUnet Konfiguration" | 2453 | msgstr "GNUnet Konfiguration" |
2454 | 2454 | ||
2455 | #: src/fs/fs_uri.c:904 | 2455 | #: src/fs/fs_uri.c:904 src/util/crypto_ecc.c:947 |
2456 | #, fuzzy, c-format | 2456 | #, fuzzy, c-format |
2457 | msgid "Could not access hostkey file `%s'.\n" | 2457 | msgid "Could not access hostkey file `%s'.\n" |
2458 | msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n" | 2458 | msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n" |
@@ -3797,16 +3797,16 @@ msgstr "" | |||
3797 | msgid "Hostlist file `%s' could not be removed\n" | 3797 | msgid "Hostlist file `%s' could not be removed\n" |
3798 | msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" | 3798 | msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" |
3799 | 3799 | ||
3800 | #: src/hostlist/hostlist-server.c:134 | 3800 | #: src/hostlist/hostlist-server.c:137 |
3801 | #, fuzzy | 3801 | #, fuzzy |
3802 | msgid "bytes in hostlist" | 3802 | msgid "bytes in hostlist" |
3803 | msgstr "# bytes in der Datenbank" | 3803 | msgstr "# bytes in der Datenbank" |
3804 | 3804 | ||
3805 | #: src/hostlist/hostlist-server.c:157 | 3805 | #: src/hostlist/hostlist-server.c:161 |
3806 | msgid "expired addresses encountered" | 3806 | msgid "expired addresses encountered" |
3807 | msgstr "" | 3807 | msgstr "" |
3808 | 3808 | ||
3809 | #: src/hostlist/hostlist-server.c:184 src/hostlist/hostlist-server.c:421 | 3809 | #: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:424 |
3810 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 | 3810 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 |
3811 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 | 3811 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 |
3812 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 | 3812 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 |
@@ -3815,88 +3815,88 @@ msgstr "" | |||
3815 | msgid "Error in communication with PEERINFO service: %s\n" | 3815 | msgid "Error in communication with PEERINFO service: %s\n" |
3816 | msgstr "Informationen über andere GNUnet Knoten ausgeben." | 3816 | msgstr "Informationen über andere GNUnet Knoten ausgeben." |
3817 | 3817 | ||
3818 | #: src/hostlist/hostlist-server.c:205 | 3818 | #: src/hostlist/hostlist-server.c:210 |
3819 | msgid "HELLOs without addresses encountered (ignored)" | 3819 | msgid "HELLOs without addresses encountered (ignored)" |
3820 | msgstr "" | 3820 | msgstr "" |
3821 | 3821 | ||
3822 | #: src/hostlist/hostlist-server.c:219 | 3822 | #: src/hostlist/hostlist-server.c:224 |
3823 | msgid "bytes not included in hostlist (size limit)" | 3823 | msgid "bytes not included in hostlist (size limit)" |
3824 | msgstr "" | 3824 | msgstr "" |
3825 | 3825 | ||
3826 | #: src/hostlist/hostlist-server.c:263 | 3826 | #: src/hostlist/hostlist-server.c:268 |
3827 | #, fuzzy, c-format | 3827 | #, fuzzy, c-format |
3828 | msgid "Refusing `%s' request to hostlist server\n" | 3828 | msgid "Refusing `%s' request to hostlist server\n" |
3829 | msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n" | 3829 | msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n" |
3830 | 3830 | ||
3831 | #: src/hostlist/hostlist-server.c:266 | 3831 | #: src/hostlist/hostlist-server.c:271 |
3832 | #, fuzzy | 3832 | #, fuzzy |
3833 | msgid "hostlist requests refused (not HTTP GET)" | 3833 | msgid "hostlist requests refused (not HTTP GET)" |
3834 | msgstr "# Client Trace-Anfragen empfangen" | 3834 | msgstr "# Client Trace-Anfragen empfangen" |
3835 | 3835 | ||
3836 | #: src/hostlist/hostlist-server.c:279 | 3836 | #: src/hostlist/hostlist-server.c:284 |
3837 | #, c-format | 3837 | #, c-format |
3838 | msgid "Refusing `%s' request with %llu bytes of upload data\n" | 3838 | msgid "Refusing `%s' request with %llu bytes of upload data\n" |
3839 | msgstr "" | 3839 | msgstr "" |
3840 | 3840 | ||
3841 | #: src/hostlist/hostlist-server.c:283 | 3841 | #: src/hostlist/hostlist-server.c:288 |
3842 | #, fuzzy | 3842 | #, fuzzy |
3843 | msgid "hostlist requests refused (upload data)" | 3843 | msgid "hostlist requests refused (upload data)" |
3844 | msgstr "# Client Trace-Anfragen empfangen" | 3844 | msgstr "# Client Trace-Anfragen empfangen" |
3845 | 3845 | ||
3846 | #: src/hostlist/hostlist-server.c:291 | 3846 | #: src/hostlist/hostlist-server.c:296 |
3847 | msgid "Could not handle hostlist request since I do not have a response yet\n" | 3847 | msgid "Could not handle hostlist request since I do not have a response yet\n" |
3848 | msgstr "" | 3848 | msgstr "" |
3849 | 3849 | ||
3850 | #: src/hostlist/hostlist-server.c:294 | 3850 | #: src/hostlist/hostlist-server.c:299 |
3851 | #, fuzzy | 3851 | #, fuzzy |
3852 | msgid "hostlist requests refused (not ready)" | 3852 | msgid "hostlist requests refused (not ready)" |
3853 | msgstr "# Client Trace-Anfragen empfangen" | 3853 | msgstr "# Client Trace-Anfragen empfangen" |
3854 | 3854 | ||
3855 | #: src/hostlist/hostlist-server.c:298 | 3855 | #: src/hostlist/hostlist-server.c:303 |
3856 | msgid "Received request for our hostlist\n" | 3856 | msgid "Received request for our hostlist\n" |
3857 | msgstr "" | 3857 | msgstr "" |
3858 | 3858 | ||
3859 | #: src/hostlist/hostlist-server.c:299 | 3859 | #: src/hostlist/hostlist-server.c:304 |
3860 | #, fuzzy | 3860 | #, fuzzy |
3861 | msgid "hostlist requests processed" | 3861 | msgid "hostlist requests processed" |
3862 | msgstr "# Client Trace-Anfragen empfangen" | 3862 | msgstr "# Client Trace-Anfragen empfangen" |
3863 | 3863 | ||
3864 | #: src/hostlist/hostlist-server.c:341 | 3864 | #: src/hostlist/hostlist-server.c:346 |
3865 | #, fuzzy | 3865 | #, fuzzy |
3866 | msgid "# hostlist advertisements send" | 3866 | msgid "# hostlist advertisements send" |
3867 | msgstr "# Bekanntmachungen von anderen übertragen" | 3867 | msgstr "# Bekanntmachungen von anderen übertragen" |
3868 | 3868 | ||
3869 | #: src/hostlist/hostlist-server.c:384 | 3869 | #: src/hostlist/hostlist-server.c:389 |
3870 | msgid "Advertisement message could not be queued by core\n" | 3870 | msgid "Advertisement message could not be queued by core\n" |
3871 | msgstr "" | 3871 | msgstr "" |
3872 | 3872 | ||
3873 | #: src/hostlist/hostlist-server.c:548 src/peerinfo-tool/gnunet-peerinfo.c:649 | 3873 | #: src/hostlist/hostlist-server.c:560 src/peerinfo-tool/gnunet-peerinfo.c:649 |
3874 | #: src/transport/gnunet-service-transport.c:661 | 3874 | #: src/transport/gnunet-service-transport.c:661 |
3875 | #, fuzzy | 3875 | #, fuzzy |
3876 | msgid "Could not access PEERINFO service. Exiting.\n" | 3876 | msgid "Could not access PEERINFO service. Exiting.\n" |
3877 | msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" | 3877 | msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" |
3878 | 3878 | ||
3879 | #: src/hostlist/hostlist-server.c:558 | 3879 | #: src/hostlist/hostlist-server.c:570 |
3880 | #, fuzzy, c-format | 3880 | #, fuzzy, c-format |
3881 | msgid "Invalid port number %llu. Exiting.\n" | 3881 | msgid "Invalid port number %llu. Exiting.\n" |
3882 | msgstr "Ungültige Parameter. Abbruch.\n" | 3882 | msgstr "Ungültige Parameter. Abbruch.\n" |
3883 | 3883 | ||
3884 | #: src/hostlist/hostlist-server.c:567 | 3884 | #: src/hostlist/hostlist-server.c:579 |
3885 | #, c-format | 3885 | #, c-format |
3886 | msgid "Hostlist service starts on %s:%llu\n" | 3886 | msgid "Hostlist service starts on %s:%llu\n" |
3887 | msgstr "" | 3887 | msgstr "" |
3888 | 3888 | ||
3889 | #: src/hostlist/hostlist-server.c:581 | 3889 | #: src/hostlist/hostlist-server.c:593 |
3890 | #, fuzzy, c-format | 3890 | #, fuzzy, c-format |
3891 | msgid "Address to obtain hostlist: `%s'\n" | 3891 | msgid "Address to obtain hostlist: `%s'\n" |
3892 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 3892 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
3893 | 3893 | ||
3894 | #: src/hostlist/hostlist-server.c:621 | 3894 | #: src/hostlist/hostlist-server.c:633 |
3895 | #, fuzzy, c-format | 3895 | #, fuzzy, c-format |
3896 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" | 3896 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" |
3897 | msgstr "`%s' ist nicht verfügbar." | 3897 | msgstr "`%s' ist nicht verfügbar." |
3898 | 3898 | ||
3899 | #: src/hostlist/hostlist-server.c:663 | 3899 | #: src/hostlist/hostlist-server.c:675 |
3900 | #, fuzzy, c-format | 3900 | #, fuzzy, c-format |
3901 | msgid "Could not start hostlist HTTP server on port %u\n" | 3901 | msgid "Could not start hostlist HTTP server on port %u\n" |
3902 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" | 3902 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" |
@@ -3936,11 +3936,11 @@ msgstr "Informationen über andere GNUnet Knoten ausgeben." | |||
3936 | msgid "Print information about mesh tunnels and peers." | 3936 | msgid "Print information about mesh tunnels and peers." |
3937 | msgstr "Informationen über andere GNUnet Knoten ausgeben." | 3937 | msgstr "Informationen über andere GNUnet Knoten ausgeben." |
3938 | 3938 | ||
3939 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:7972 | 3939 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:4649 |
3940 | msgid "Wrong CORE service\n" | 3940 | msgid "Wrong CORE service\n" |
3941 | msgstr "" | 3941 | msgstr "" |
3942 | 3942 | ||
3943 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:8185 | 3943 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:4790 |
3944 | #, fuzzy, c-format | 3944 | #, fuzzy, c-format |
3945 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" | 3945 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" |
3946 | msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" | 3946 | msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" |
@@ -3948,14 +3948,13 @@ msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" | |||
3948 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 | 3948 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 |
3949 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 | 3949 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 |
3950 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 | 3950 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 |
3951 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:8274 | 3951 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:4860 |
3952 | #: src/mesh/gnunet-service-mesh-new.c:8286 | 3952 | #: src/mesh/gnunet-service-mesh-new.c:4872 |
3953 | #: src/mesh/gnunet-service-mesh-new.c:8298 | 3953 | #: src/mesh/gnunet-service-mesh-new.c:4884 |
3954 | #: src/mesh/gnunet-service-mesh-new.c:8312 | 3954 | #: src/mesh/gnunet-service-mesh-new.c:4896 |
3955 | #: src/mesh/gnunet-service-mesh-new.c:8324 | 3955 | #: src/mesh/gnunet-service-mesh-new.c:4908 |
3956 | #: src/mesh/gnunet-service-mesh-new.c:8336 | 3956 | #: src/mesh/gnunet-service-mesh-new.c:4920 src/nse/gnunet-service-nse.c:1500 |
3957 | #: src/mesh/gnunet-service-mesh-new.c:8348 src/nse/gnunet-service-nse.c:1516 | 3957 | #: src/nse/gnunet-service-nse.c:1518 |
3958 | #: src/nse/gnunet-service-nse.c:1534 | ||
3959 | #: src/regex/gnunet-daemon-regexprofiler.c:320 | 3958 | #: src/regex/gnunet-daemon-regexprofiler.c:320 |
3960 | #: src/regex/gnunet-daemon-regexprofiler.c:332 | 3959 | #: src/regex/gnunet-daemon-regexprofiler.c:332 |
3961 | #: src/regex/gnunet-daemon-regexprofiler.c:344 | 3960 | #: src/regex/gnunet-daemon-regexprofiler.c:344 |
@@ -3966,9 +3965,9 @@ msgid "%s service is lacking key configuration settings (%s). Exiting.\n" | |||
3966 | msgstr "GNUnet Konfiguration" | 3965 | msgstr "GNUnet Konfiguration" |
3967 | 3966 | ||
3968 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 | 3967 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 |
3969 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:8360 | 3968 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:4932 |
3970 | #: src/mesh/gnunet-service-mesh-new.c:8370 | 3969 | #: src/mesh/gnunet-service-mesh-new.c:4942 |
3971 | #: src/mesh/gnunet-service-mesh-new.c:8381 | 3970 | #: src/mesh/gnunet-service-mesh-new.c:4953 |
3972 | #, fuzzy, c-format | 3971 | #, fuzzy, c-format |
3973 | msgid "" | 3972 | msgid "" |
3974 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" | 3973 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" |
@@ -4307,32 +4306,32 @@ msgstr "" | |||
4307 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" | 4306 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" |
4308 | msgstr "" | 4307 | msgstr "" |
4309 | 4308 | ||
4310 | #: src/nat/nat.c:795 | 4309 | #: src/nat/nat.c:834 |
4311 | #, c-format | 4310 | #, c-format |
4312 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" | 4311 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" |
4313 | msgstr "" | 4312 | msgstr "" |
4314 | 4313 | ||
4315 | #: src/nat/nat.c:844 | 4314 | #: src/nat/nat.c:883 |
4316 | #, fuzzy, c-format | 4315 | #, fuzzy, c-format |
4317 | msgid "Failed to start %s\n" | 4316 | msgid "Failed to start %s\n" |
4318 | msgstr "Fehler beim Starten der Collection.\n" | 4317 | msgstr "Fehler beim Starten der Collection.\n" |
4319 | 4318 | ||
4320 | #: src/nat/nat.c:1113 | 4319 | #: src/nat/nat.c:1152 |
4321 | msgid "malformed" | 4320 | msgid "malformed" |
4322 | msgstr "" | 4321 | msgstr "" |
4323 | 4322 | ||
4324 | #: src/nat/nat.c:1179 src/nat/nat.c:1191 | 4323 | #: src/nat/nat.c:1218 src/nat/nat.c:1230 |
4325 | #, c-format | 4324 | #, c-format |
4326 | msgid "" | 4325 | msgid "" |
4327 | "Configuration requires `%s', but binary is not installed properly (SUID bit " | 4326 | "Configuration requires `%s', but binary is not installed properly (SUID bit " |
4328 | "not set). Option disabled.\n" | 4327 | "not set). Option disabled.\n" |
4329 | msgstr "" | 4328 | msgstr "" |
4330 | 4329 | ||
4331 | #: src/nat/nat.c:1326 | 4330 | #: src/nat/nat.c:1365 |
4332 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" | 4331 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" |
4333 | msgstr "" | 4332 | msgstr "" |
4334 | 4333 | ||
4335 | #: src/nat/nat.c:1337 | 4334 | #: src/nat/nat.c:1376 |
4336 | #, c-format | 4335 | #, c-format |
4337 | msgid "Running gnunet-helper-nat-client %s %s %u\n" | 4336 | msgid "Running gnunet-helper-nat-client %s %s %u\n" |
4338 | msgstr "" | 4337 | msgstr "" |
@@ -4355,46 +4354,46 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" | |||
4355 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" | 4354 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" |
4356 | msgstr "" | 4355 | msgstr "" |
4357 | 4356 | ||
4358 | #: src/nse/gnunet-nse-profiler.c:885 | 4357 | #: src/nse/gnunet-nse-profiler.c:884 |
4359 | #, fuzzy | 4358 | #, fuzzy |
4360 | msgid "limit to the number of connections to NSE services, 0 for none" | 4359 | msgid "limit to the number of connections to NSE services, 0 for none" |
4361 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." | 4360 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." |
4362 | 4361 | ||
4363 | #: src/nse/gnunet-nse-profiler.c:888 | 4362 | #: src/nse/gnunet-nse-profiler.c:887 |
4364 | msgid "name of the file for writing connection information and statistics" | 4363 | msgid "name of the file for writing connection information and statistics" |
4365 | msgstr "" | 4364 | msgstr "" |
4366 | 4365 | ||
4367 | #: src/nse/gnunet-nse-profiler.c:891 src/testbed/gnunet-testbed-profiler.c:282 | 4366 | #: src/nse/gnunet-nse-profiler.c:890 src/testbed/gnunet-testbed-profiler.c:284 |
4368 | msgid "name of the file with the login information for the testbed" | 4367 | msgid "name of the file with the login information for the testbed" |
4369 | msgstr "" | 4368 | msgstr "" |
4370 | 4369 | ||
4371 | #: src/nse/gnunet-nse-profiler.c:894 | 4370 | #: src/nse/gnunet-nse-profiler.c:893 |
4372 | msgid "name of the file for writing the main results" | 4371 | msgid "name of the file for writing the main results" |
4373 | msgstr "" | 4372 | msgstr "" |
4374 | 4373 | ||
4375 | #: src/nse/gnunet-nse-profiler.c:897 | 4374 | #: src/nse/gnunet-nse-profiler.c:896 |
4376 | msgid "Number of peers to run in each round, separated by commas" | 4375 | msgid "Number of peers to run in each round, separated by commas" |
4377 | msgstr "" | 4376 | msgstr "" |
4378 | 4377 | ||
4379 | #: src/nse/gnunet-nse-profiler.c:903 | 4378 | #: src/nse/gnunet-nse-profiler.c:902 |
4380 | msgid "delay between rounds" | 4379 | msgid "delay between rounds" |
4381 | msgstr "" | 4380 | msgstr "" |
4382 | 4381 | ||
4383 | #: src/nse/gnunet-nse-profiler.c:912 | 4382 | #: src/nse/gnunet-nse-profiler.c:911 |
4384 | #, fuzzy | 4383 | #, fuzzy |
4385 | msgid "Measure quality and performance of the NSE service." | 4384 | msgid "Measure quality and performance of the NSE service." |
4386 | msgstr "Auf den Dienst konnte nicht zugegriffen werden" | 4385 | msgstr "Auf den Dienst konnte nicht zugegriffen werden" |
4387 | 4386 | ||
4388 | #: src/nse/gnunet-service-nse.c:1405 | 4387 | #: src/nse/gnunet-service-nse.c:1419 |
4389 | #, fuzzy, c-format | 4388 | #, fuzzy, c-format |
4390 | msgid "NSE service could not access hostkey: %s\n" | 4389 | msgid "NSE service could not access hostkey: %s\n" |
4391 | msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" | 4390 | msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" |
4392 | 4391 | ||
4393 | #: src/nse/gnunet-service-nse.c:1419 | 4392 | #: src/nse/gnunet-service-nse.c:1433 |
4394 | msgid "NSE service is lacking key configuration settings. Exiting.\n" | 4393 | msgid "NSE service is lacking key configuration settings. Exiting.\n" |
4395 | msgstr "" | 4394 | msgstr "" |
4396 | 4395 | ||
4397 | #: src/nse/gnunet-service-nse.c:1524 | 4396 | #: src/nse/gnunet-service-nse.c:1508 |
4398 | #, fuzzy | 4397 | #, fuzzy |
4399 | msgid "Invalid work requirement for NSE service. Exiting.\n" | 4398 | msgid "Invalid work requirement for NSE service. Exiting.\n" |
4400 | msgstr "Ungültige Parameter. Abbruch.\n" | 4399 | msgstr "Ungültige Parameter. Abbruch.\n" |
@@ -4404,21 +4403,21 @@ msgstr "Ungültige Parameter. Abbruch.\n" | |||
4404 | msgid "Removing expired address of transport `%s'\n" | 4403 | msgid "Removing expired address of transport `%s'\n" |
4405 | msgstr "Verfügbare(r) Transport(e): %s\n" | 4404 | msgstr "Verfügbare(r) Transport(e): %s\n" |
4406 | 4405 | ||
4407 | #: src/peerinfo/gnunet-service-peerinfo.c:354 | 4406 | #: src/peerinfo/gnunet-service-peerinfo.c:355 |
4408 | #, fuzzy, c-format | 4407 | #, fuzzy, c-format |
4409 | msgid "Failed to parse HELLO in file `%s': %s\n" | 4408 | msgid "Failed to parse HELLO in file `%s': %s\n" |
4410 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 4409 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
4411 | 4410 | ||
4412 | #: src/peerinfo/gnunet-service-peerinfo.c:369 | 4411 | #: src/peerinfo/gnunet-service-peerinfo.c:370 |
4413 | #, fuzzy, c-format | 4412 | #, fuzzy, c-format |
4414 | msgid "Failed to parse HELLO in file `%s': %s %u \n" | 4413 | msgid "Failed to parse HELLO in file `%s': %s %u \n" |
4415 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 4414 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
4416 | 4415 | ||
4417 | #: src/peerinfo/gnunet-service-peerinfo.c:444 | 4416 | #: src/peerinfo/gnunet-service-peerinfo.c:445 |
4418 | msgid "# peers known" | 4417 | msgid "# peers known" |
4419 | msgstr "" | 4418 | msgstr "" |
4420 | 4419 | ||
4421 | #: src/peerinfo/gnunet-service-peerinfo.c:480 | 4420 | #: src/peerinfo/gnunet-service-peerinfo.c:481 |
4422 | #, c-format | 4421 | #, c-format |
4423 | msgid "" | 4422 | msgid "" |
4424 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" | 4423 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" |
@@ -4426,22 +4425,22 @@ msgstr "" | |||
4426 | "Die Datei `%s' im Verzeichnis `%s' entspricht nicht der Namenskonvention. " | 4425 | "Die Datei `%s' im Verzeichnis `%s' entspricht nicht der Namenskonvention. " |
4427 | "Datei wurde entfernt.\n" | 4426 | "Datei wurde entfernt.\n" |
4428 | 4427 | ||
4429 | #: src/peerinfo/gnunet-service-peerinfo.c:632 | 4428 | #: src/peerinfo/gnunet-service-peerinfo.c:633 |
4430 | #, fuzzy, c-format | 4429 | #, fuzzy, c-format |
4431 | msgid "Scanning directory `%s'\n" | 4430 | msgid "Scanning directory `%s'\n" |
4432 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 4431 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
4433 | 4432 | ||
4434 | #: src/peerinfo/gnunet-service-peerinfo.c:637 | 4433 | #: src/peerinfo/gnunet-service-peerinfo.c:638 |
4435 | #, fuzzy, c-format | 4434 | #, fuzzy, c-format |
4436 | msgid "Still no peers found in `%s'!\n" | 4435 | msgid "Still no peers found in `%s'!\n" |
4437 | msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" | 4436 | msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" |
4438 | 4437 | ||
4439 | #: src/peerinfo/gnunet-service-peerinfo.c:969 | 4438 | #: src/peerinfo/gnunet-service-peerinfo.c:970 |
4440 | #, fuzzy, c-format | 4439 | #, fuzzy, c-format |
4441 | msgid "Cleaning up directory `%s'\n" | 4440 | msgid "Cleaning up directory `%s'\n" |
4442 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 4441 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
4443 | 4442 | ||
4444 | #: src/peerinfo/gnunet-service-peerinfo.c:1249 | 4443 | #: src/peerinfo/gnunet-service-peerinfo.c:1250 |
4445 | #, c-format | 4444 | #, c-format |
4446 | msgid "Importing HELLOs from `%s'\n" | 4445 | msgid "Importing HELLOs from `%s'\n" |
4447 | msgstr "" | 4446 | msgstr "" |
@@ -4658,81 +4657,73 @@ msgstr "" | |||
4658 | msgid "Daemon to announce regular expressions for the peer using mesh." | 4657 | msgid "Daemon to announce regular expressions for the peer using mesh." |
4659 | msgstr "" | 4658 | msgstr "" |
4660 | 4659 | ||
4661 | #: src/regex/gnunet-regex-profiler.c:1246 | 4660 | #: src/regex/gnunet-regex-profiler.c:1247 |
4662 | #, fuzzy | 4661 | #, fuzzy |
4663 | msgid "No configuration file given. Exiting\n" | 4662 | msgid "No configuration file given. Exiting\n" |
4664 | msgstr "Konfigurationsdatei FILENAME verwenden" | 4663 | msgstr "Konfigurationsdatei FILENAME verwenden" |
4665 | 4664 | ||
4666 | #: src/regex/gnunet-regex-profiler.c:1257 | 4665 | #: src/regex/gnunet-regex-profiler.c:1258 |
4667 | #, fuzzy | 4666 | #, fuzzy |
4668 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" | 4667 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" |
4669 | msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n" | 4668 | msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n" |
4670 | 4669 | ||
4671 | #: src/regex/gnunet-regex-profiler.c:1276 | 4670 | #: src/regex/gnunet-regex-profiler.c:1287 |
4672 | msgid "No hosts-file specified on command line. Exiting.\n" | ||
4673 | msgstr "" | ||
4674 | |||
4675 | #: src/regex/gnunet-regex-profiler.c:1282 | ||
4676 | #: src/regex/gnunet-regex-simulation-profiler.c:622 | 4671 | #: src/regex/gnunet-regex-simulation-profiler.c:622 |
4677 | #, c-format | 4672 | #, c-format |
4678 | msgid "No policy directory specified on command line. Exiting.\n" | 4673 | msgid "No policy directory specified on command line. Exiting.\n" |
4679 | msgstr "" | 4674 | msgstr "" |
4680 | 4675 | ||
4681 | #: src/regex/gnunet-regex-profiler.c:1288 | 4676 | #: src/regex/gnunet-regex-profiler.c:1293 |
4682 | #: src/regex/gnunet-regex-simulation-profiler.c:629 | 4677 | #: src/regex/gnunet-regex-simulation-profiler.c:629 |
4683 | #, c-format | 4678 | #, c-format |
4684 | msgid "Specified policies directory does not exist. Exiting.\n" | 4679 | msgid "Specified policies directory does not exist. Exiting.\n" |
4685 | msgstr "" | 4680 | msgstr "" |
4686 | 4681 | ||
4687 | #: src/regex/gnunet-regex-profiler.c:1295 | 4682 | #: src/regex/gnunet-regex-profiler.c:1300 |
4688 | #, fuzzy, c-format | 4683 | #, fuzzy, c-format |
4689 | msgid "No files found in `%s'\n" | 4684 | msgid "No files found in `%s'\n" |
4690 | msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" | 4685 | msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" |
4691 | 4686 | ||
4692 | #: src/regex/gnunet-regex-profiler.c:1304 | 4687 | #: src/regex/gnunet-regex-profiler.c:1309 |
4693 | msgid "No search strings file given. Exiting.\n" | 4688 | msgid "No search strings file given. Exiting.\n" |
4694 | msgstr "" | 4689 | msgstr "" |
4695 | 4690 | ||
4696 | #: src/regex/gnunet-regex-profiler.c:1314 | 4691 | #: src/regex/gnunet-regex-profiler.c:1319 |
4697 | #, fuzzy | 4692 | #, fuzzy |
4698 | msgid "" | 4693 | msgid "" |
4699 | "Error loading search strings.Given file does not contain enough strings. " | 4694 | "Error loading search strings.Given file does not contain enough strings. " |
4700 | "Exiting.\n" | 4695 | "Exiting.\n" |
4701 | msgstr "Fehler beim Verlassen der DHT.\n" | 4696 | msgstr "Fehler beim Verlassen der DHT.\n" |
4702 | 4697 | ||
4703 | #: src/regex/gnunet-regex-profiler.c:1322 | 4698 | #: src/regex/gnunet-regex-profiler.c:1327 |
4704 | #, fuzzy | 4699 | #, fuzzy |
4705 | msgid "Error loading search strings. Exiting.\n" | 4700 | msgid "Error loading search strings. Exiting.\n" |
4706 | msgstr "Fehler beim Verlassen der DHT.\n" | 4701 | msgstr "Fehler beim Verlassen der DHT.\n" |
4707 | 4702 | ||
4708 | #: src/regex/gnunet-regex-profiler.c:1389 | 4703 | #: src/regex/gnunet-regex-profiler.c:1394 |
4709 | #, fuzzy | 4704 | #, fuzzy |
4710 | msgid "name of the file for writing statistics" | 4705 | msgid "name of the file for writing statistics" |
4711 | msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" | 4706 | msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" |
4712 | 4707 | ||
4713 | #: src/regex/gnunet-regex-profiler.c:1392 | 4708 | #: src/regex/gnunet-regex-profiler.c:1397 |
4714 | msgid "wait TIMEOUT before considering a string match as failed" | 4709 | msgid "wait TIMEOUT before ending the experiment" |
4715 | msgstr "" | ||
4716 | |||
4717 | #: src/regex/gnunet-regex-profiler.c:1395 | ||
4718 | msgid "number of search strings to read from search strings file" | ||
4719 | msgstr "" | 4710 | msgstr "" |
4720 | 4711 | ||
4721 | #: src/regex/gnunet-regex-profiler.c:1398 | 4712 | #: src/regex/gnunet-regex-profiler.c:1400 |
4722 | msgid "directory with policy files" | 4713 | msgid "directory with policy files" |
4723 | msgstr "" | 4714 | msgstr "" |
4724 | 4715 | ||
4725 | #: src/regex/gnunet-regex-profiler.c:1401 | 4716 | #: src/regex/gnunet-regex-profiler.c:1403 |
4726 | #, fuzzy | 4717 | #, fuzzy |
4727 | msgid "name of file with input strings" | 4718 | msgid "name of file with input strings" |
4728 | msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" | 4719 | msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" |
4729 | 4720 | ||
4730 | #: src/regex/gnunet-regex-profiler.c:1404 | 4721 | #: src/regex/gnunet-regex-profiler.c:1406 |
4731 | #, fuzzy | 4722 | #, fuzzy |
4732 | msgid "name of file with hosts' names" | 4723 | msgid "name of file with hosts' names" |
4733 | msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" | 4724 | msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" |
4734 | 4725 | ||
4735 | #: src/regex/gnunet-regex-profiler.c:1416 | 4726 | #: src/regex/gnunet-regex-profiler.c:1418 |
4736 | msgid "Profiler for regex" | 4727 | msgid "Profiler for regex" |
4737 | msgstr "" | 4728 | msgstr "" |
4738 | 4729 | ||
@@ -4851,7 +4842,7 @@ msgstr "" | |||
4851 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" | 4842 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" |
4852 | msgstr "" | 4843 | msgstr "" |
4853 | 4844 | ||
4854 | #: src/testbed/gnunet-service-testbed_cpustatus.c:670 | 4845 | #: src/testbed/gnunet-service-testbed_cpustatus.c:692 |
4855 | #, c-format | 4846 | #, c-format |
4856 | msgid "" | 4847 | msgid "" |
4857 | "Cannot open %s for writing load statistics. Not logging load statistics\n" | 4848 | "Cannot open %s for writing load statistics. Not logging load statistics\n" |
@@ -4862,28 +4853,28 @@ msgstr "" | |||
4862 | msgid "Job command file not given. Exiting\n" | 4853 | msgid "Job command file not given. Exiting\n" |
4863 | msgstr "Konfigurationsdatei FILENAME verwenden" | 4854 | msgstr "Konfigurationsdatei FILENAME verwenden" |
4864 | 4855 | ||
4865 | #: src/testbed/gnunet_testbed_mpi_spawn.c:135 | 4856 | #: src/testbed/gnunet_testbed_mpi_spawn.c:125 |
4866 | #, fuzzy | 4857 | #, fuzzy |
4867 | msgid "Waiting for child to exit.\n" | 4858 | msgid "Waiting for child to exit.\n" |
4868 | msgstr "" | 4859 | msgstr "" |
4869 | "Warte darauf, dass sich andere Knoten verbinden (%u Iterationen " | 4860 | "Warte darauf, dass sich andere Knoten verbinden (%u Iterationen " |
4870 | "verbleiben)...\n" | 4861 | "verbleiben)...\n" |
4871 | 4862 | ||
4872 | #: src/testbed/gnunet_testbed_mpi_spawn.c:296 | 4863 | #: src/testbed/gnunet_testbed_mpi_spawn.c:247 |
4873 | #, fuzzy, c-format | 4864 | #, fuzzy, c-format |
4874 | msgid "Spawning process `%s'\n" | 4865 | msgid "Spawning process `%s'\n" |
4875 | msgstr "Collection `%s' begonnen.\n" | 4866 | msgstr "Collection `%s' begonnen.\n" |
4876 | 4867 | ||
4877 | #: src/testbed/gnunet-testbed-profiler.c:249 | 4868 | #: src/testbed/gnunet-testbed-profiler.c:251 |
4878 | #, fuzzy, c-format | 4869 | #, fuzzy, c-format |
4879 | msgid "Exiting as the number of peers is %u\n" | 4870 | msgid "Exiting as the number of peers is %u\n" |
4880 | msgstr "Maximale Anzahl an Chat Clients erreicht.\n" | 4871 | msgstr "Maximale Anzahl an Chat Clients erreicht.\n" |
4881 | 4872 | ||
4882 | #: src/testbed/gnunet-testbed-profiler.c:275 | 4873 | #: src/testbed/gnunet-testbed-profiler.c:277 |
4883 | msgid "create COUNT number of peers" | 4874 | msgid "create COUNT number of peers" |
4884 | msgstr "" | 4875 | msgstr "" |
4885 | 4876 | ||
4886 | #: src/testbed/gnunet-testbed-profiler.c:278 | 4877 | #: src/testbed/gnunet-testbed-profiler.c:280 |
4887 | msgid "tolerate COUNT number of continious timeout failures" | 4878 | msgid "tolerate COUNT number of continious timeout failures" |
4888 | msgstr "" | 4879 | msgstr "" |
4889 | 4880 | ||
@@ -4902,56 +4893,56 @@ msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" | |||
4902 | msgid "Hosts file %s cannot be read\n" | 4893 | msgid "Hosts file %s cannot be read\n" |
4903 | msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" | 4894 | msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" |
4904 | 4895 | ||
4905 | #: src/testbed/testbed_api_hosts.c:583 | 4896 | #: src/testbed/testbed_api_hosts.c:595 |
4906 | #, c-format | 4897 | #, c-format |
4907 | msgid "The function %s is only available when compiled with (--with-ll)\n" | 4898 | msgid "The function %s is only available when compiled with (--with-ll)\n" |
4908 | msgstr "" | 4899 | msgstr "" |
4909 | 4900 | ||
4910 | #: src/testbed/testbed_api_hosts.c:1856 | 4901 | #: src/testbed/testbed_api_hosts.c:1879 |
4911 | #, fuzzy, c-format | 4902 | #, fuzzy, c-format |
4912 | msgid "Adding host %u failed with error: %s\n" | 4903 | msgid "Adding host %u failed with error: %s\n" |
4913 | msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n" | 4904 | msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n" |
4914 | 4905 | ||
4915 | #: src/testbed/testbed_api_testbed.c:771 | 4906 | #: src/testbed/testbed_api_testbed.c:891 |
4916 | msgid "Linking controllers failed. Exiting" | 4907 | msgid "Linking controllers failed. Exiting" |
4917 | msgstr "" | 4908 | msgstr "" |
4918 | 4909 | ||
4919 | #: src/testbed/testbed_api_testbed.c:913 | 4910 | #: src/testbed/testbed_api_testbed.c:1094 |
4920 | #, c-format | 4911 | #, c-format |
4921 | msgid "Host registration failed for a host. Error: %s\n" | 4912 | msgid "Host registration failed for a host. Error: %s\n" |
4922 | msgstr "" | 4913 | msgstr "" |
4923 | 4914 | ||
4924 | #: src/testbed/testbed_api_testbed.c:978 | 4915 | #: src/testbed/testbed_api_testbed.c:1175 |
4925 | msgid "Controller crash detected. Shutting down.\n" | 4916 | msgid "Controller crash detected. Shutting down.\n" |
4926 | msgstr "" | 4917 | msgstr "" |
4927 | 4918 | ||
4928 | #: src/testbed/testbed_api_testbed.c:1081 | 4919 | #: src/testbed/testbed_api_testbed.c:1320 |
4929 | #, c-format | 4920 | #, c-format |
4930 | msgid "Host %s cannot start testbed\n" | 4921 | msgid "Host %s cannot start testbed\n" |
4931 | msgstr "" | 4922 | msgstr "" |
4932 | 4923 | ||
4933 | #: src/testbed/testbed_api_testbed.c:1085 | 4924 | #: src/testbed/testbed_api_testbed.c:1324 |
4934 | msgid "Testbed cannot be started on localhost\n" | 4925 | msgid "Testbed cannot be started on localhost\n" |
4935 | msgstr "" | 4926 | msgstr "" |
4936 | 4927 | ||
4937 | #: src/testbed/testbed_api_testbed.c:1120 | 4928 | #: src/testbed/testbed_api_testbed.c:1365 |
4938 | #, fuzzy | 4929 | #, fuzzy |
4939 | msgid "Cannot start the master controller" | 4930 | msgid "Cannot start the master controller" |
4940 | msgstr "GNUnet testbed Controller starten." | 4931 | msgstr "GNUnet testbed Controller starten." |
4941 | 4932 | ||
4942 | #: src/testbed/testbed_api_testbed.c:1138 | 4933 | #: src/testbed/testbed_api_testbed.c:1383 |
4943 | msgid "Shutting down testbed due to timeout while setup.\n" | 4934 | msgid "Shutting down testbed due to timeout while setup.\n" |
4944 | msgstr "" | 4935 | msgstr "" |
4945 | 4936 | ||
4946 | #: src/testbed/testbed_api_testbed.c:1197 | 4937 | #: src/testbed/testbed_api_testbed.c:1443 |
4947 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" | 4938 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" |
4948 | msgstr "" | 4939 | msgstr "" |
4949 | 4940 | ||
4950 | #: src/testbed/testbed_api_testbed.c:1209 | 4941 | #: src/testbed/testbed_api_testbed.c:1455 |
4951 | msgid "No hosts loaded. Need at least one host\n" | 4942 | msgid "No hosts loaded. Need at least one host\n" |
4952 | msgstr "" | 4943 | msgstr "" |
4953 | 4944 | ||
4954 | #: src/testbed/testbed_api_testbed.c:1233 | 4945 | #: src/testbed/testbed_api_testbed.c:1479 |
4955 | msgid "Specified topology must be supported by testbed" | 4946 | msgid "Specified topology must be supported by testbed" |
4956 | msgstr "" | 4947 | msgstr "" |
4957 | 4948 | ||
@@ -5101,7 +5092,7 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" | |||
5101 | msgid "Failed to start `%s': %s\n" | 5092 | msgid "Failed to start `%s': %s\n" |
5102 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" | 5093 | msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" |
5103 | 5094 | ||
5104 | #: src/testing/testing.c:1691 | 5095 | #: src/testing/testing.c:1709 |
5105 | #, fuzzy, c-format | 5096 | #, fuzzy, c-format |
5106 | msgid "Failed to load configuration from %s\n" | 5097 | msgid "Failed to load configuration from %s\n" |
5107 | msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" | 5098 | msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" |
@@ -5255,7 +5246,7 @@ msgstr "" | |||
5255 | msgid "# bytes payload dropped (other peer was not connected)" | 5246 | msgid "# bytes payload dropped (other peer was not connected)" |
5256 | msgstr "" | 5247 | msgstr "" |
5257 | 5248 | ||
5258 | #: src/transport/gnunet-service-transport_clients.c:728 | 5249 | #: src/transport/gnunet-service-transport_clients.c:733 |
5259 | #, fuzzy | 5250 | #, fuzzy |
5260 | msgid "# REQUEST CONNECT messages received" | 5251 | msgid "# REQUEST CONNECT messages received" |
5261 | msgstr "# verschlüsselter PONG Nachrichten empfangen" | 5252 | msgstr "# verschlüsselter PONG Nachrichten empfangen" |
@@ -5328,53 +5319,53 @@ msgstr "Verfolgt die Bandbreitennutzung von gnunetd" | |||
5328 | msgid "# ms throttling suggested" | 5319 | msgid "# ms throttling suggested" |
5329 | msgstr "" | 5320 | msgstr "" |
5330 | 5321 | ||
5331 | #: src/transport/gnunet-service-transport_neighbours.c:2770 | 5322 | #: src/transport/gnunet-service-transport_neighbours.c:2774 |
5332 | #, fuzzy | 5323 | #, fuzzy |
5333 | msgid "# unexpected CONNECT_ACK messages (no peer)" | 5324 | msgid "# unexpected CONNECT_ACK messages (no peer)" |
5334 | msgstr "COUNT Nachrichten versenden" | 5325 | msgstr "COUNT Nachrichten versenden" |
5335 | 5326 | ||
5336 | #: src/transport/gnunet-service-transport_neighbours.c:2785 | 5327 | #: src/transport/gnunet-service-transport_neighbours.c:2789 |
5337 | #: src/transport/gnunet-service-transport_neighbours.c:2819 | 5328 | #: src/transport/gnunet-service-transport_neighbours.c:2823 |
5338 | #, fuzzy | 5329 | #, fuzzy |
5339 | msgid "# unexpected CONNECT_ACK messages (not ready)" | 5330 | msgid "# unexpected CONNECT_ACK messages (not ready)" |
5340 | msgstr "COUNT Nachrichten versenden" | 5331 | msgstr "COUNT Nachrichten versenden" |
5341 | 5332 | ||
5342 | #: src/transport/gnunet-service-transport_neighbours.c:2832 | 5333 | #: src/transport/gnunet-service-transport_neighbours.c:2836 |
5343 | #, fuzzy | 5334 | #, fuzzy |
5344 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" | 5335 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" |
5345 | msgstr "COUNT Nachrichten versenden" | 5336 | msgstr "COUNT Nachrichten versenden" |
5346 | 5337 | ||
5347 | #: src/transport/gnunet-service-transport_neighbours.c:2865 | 5338 | #: src/transport/gnunet-service-transport_neighbours.c:2869 |
5348 | #, fuzzy | 5339 | #, fuzzy |
5349 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" | 5340 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" |
5350 | msgstr "COUNT Nachrichten versenden" | 5341 | msgstr "COUNT Nachrichten versenden" |
5351 | 5342 | ||
5352 | #: src/transport/gnunet-service-transport_neighbours.c:3046 | 5343 | #: src/transport/gnunet-service-transport_neighbours.c:3050 |
5353 | #, fuzzy | 5344 | #, fuzzy |
5354 | msgid "# unexpected SESSION ACK messages" | 5345 | msgid "# unexpected SESSION ACK messages" |
5355 | msgstr "# verschlüsselter PONG Nachrichten gesendet" | 5346 | msgstr "# verschlüsselter PONG Nachrichten gesendet" |
5356 | 5347 | ||
5357 | #: src/transport/gnunet-service-transport_neighbours.c:3101 | 5348 | #: src/transport/gnunet-service-transport_neighbours.c:3105 |
5358 | msgid "# SET QUOTA messages ignored (no such peer)" | 5349 | msgid "# SET QUOTA messages ignored (no such peer)" |
5359 | msgstr "" | 5350 | msgstr "" |
5360 | 5351 | ||
5361 | #: src/transport/gnunet-service-transport_neighbours.c:3115 | 5352 | #: src/transport/gnunet-service-transport_neighbours.c:3119 |
5362 | msgid "# disconnects due to quota of 0" | 5353 | msgid "# disconnects due to quota of 0" |
5363 | msgstr "" | 5354 | msgstr "" |
5364 | 5355 | ||
5365 | #: src/transport/gnunet-service-transport_neighbours.c:3146 | 5356 | #: src/transport/gnunet-service-transport_neighbours.c:3150 |
5366 | msgid "# disconnect messages ignored (old format)" | 5357 | msgid "# disconnect messages ignored (old format)" |
5367 | msgstr "" | 5358 | msgstr "" |
5368 | 5359 | ||
5369 | #: src/transport/gnunet-service-transport_neighbours.c:3157 | 5360 | #: src/transport/gnunet-service-transport_neighbours.c:3161 |
5370 | msgid "# disconnect messages ignored (timestamp)" | 5361 | msgid "# disconnect messages ignored (timestamp)" |
5371 | msgstr "" | 5362 | msgstr "" |
5372 | 5363 | ||
5373 | #: src/transport/gnunet-service-transport_neighbours.c:3188 | 5364 | #: src/transport/gnunet-service-transport_neighbours.c:3192 |
5374 | msgid "# other peer asked to disconnect from us" | 5365 | msgid "# other peer asked to disconnect from us" |
5375 | msgstr "" | 5366 | msgstr "" |
5376 | 5367 | ||
5377 | #: src/transport/gnunet-service-transport_neighbours.c:3283 | 5368 | #: src/transport/gnunet-service-transport_neighbours.c:3287 |
5378 | #, fuzzy | 5369 | #, fuzzy |
5379 | msgid "# disconnected from peer upon explicit request" | 5370 | msgid "# disconnected from peer upon explicit request" |
5380 | msgstr "# gap Anfragen verworfen: Kollision in RT" | 5371 | msgstr "# gap Anfragen verworfen: Kollision in RT" |
@@ -5801,92 +5792,92 @@ msgstr "# Bytes gesendet über TCP" | |||
5801 | msgid "# bytes dropped by SMTP (outgoing)" | 5792 | msgid "# bytes dropped by SMTP (outgoing)" |
5802 | msgstr "# Bytes verworfen von TCP (ausgehend)" | 5793 | msgstr "# Bytes verworfen von TCP (ausgehend)" |
5803 | 5794 | ||
5804 | #: src/transport/plugin_transport_tcp.c:595 | 5795 | #: src/transport/plugin_transport_tcp.c:596 |
5805 | #, c-format | 5796 | #, c-format |
5806 | msgid "Unexpected address length: %u bytes\n" | 5797 | msgid "Unexpected address length: %u bytes\n" |
5807 | msgstr "" | 5798 | msgstr "" |
5808 | 5799 | ||
5809 | #: src/transport/plugin_transport_tcp.c:771 | 5800 | #: src/transport/plugin_transport_tcp.c:772 |
5810 | #: src/transport/plugin_transport_tcp.c:860 | 5801 | #: src/transport/plugin_transport_tcp.c:861 |
5811 | #: src/transport/plugin_transport_tcp.c:910 | 5802 | #: src/transport/plugin_transport_tcp.c:911 |
5812 | #: src/transport/plugin_transport_tcp.c:996 | 5803 | #: src/transport/plugin_transport_tcp.c:997 |
5813 | #: src/transport/plugin_transport_tcp.c:1139 | 5804 | #: src/transport/plugin_transport_tcp.c:1140 |
5814 | #: src/transport/plugin_transport_tcp.c:1156 | 5805 | #: src/transport/plugin_transport_tcp.c:1157 |
5815 | #, fuzzy | 5806 | #, fuzzy |
5816 | msgid "# bytes currently in TCP buffers" | 5807 | msgid "# bytes currently in TCP buffers" |
5817 | msgstr "# Bytes gesendet über TCP" | 5808 | msgstr "# Bytes gesendet über TCP" |
5818 | 5809 | ||
5819 | #: src/transport/plugin_transport_tcp.c:778 | 5810 | #: src/transport/plugin_transport_tcp.c:779 |
5820 | #: src/transport/plugin_transport_tcp.c:967 | 5811 | #: src/transport/plugin_transport_tcp.c:968 |
5821 | #: src/transport/plugin_transport_tcp.c:1826 | 5812 | #: src/transport/plugin_transport_tcp.c:1827 |
5822 | #: src/transport/plugin_transport_tcp.c:2456 | 5813 | #: src/transport/plugin_transport_tcp.c:2460 |
5823 | #, fuzzy | 5814 | #, fuzzy |
5824 | msgid "# TCP sessions active" | 5815 | msgid "# TCP sessions active" |
5825 | msgstr "# Sitzungsschlüssel akzeptiert" | 5816 | msgstr "# Sitzungsschlüssel akzeptiert" |
5826 | 5817 | ||
5827 | #: src/transport/plugin_transport_tcp.c:864 | 5818 | #: src/transport/plugin_transport_tcp.c:865 |
5828 | #, fuzzy | 5819 | #, fuzzy |
5829 | msgid "# bytes discarded by TCP (timeout)" | 5820 | msgid "# bytes discarded by TCP (timeout)" |
5830 | msgstr "# Bytes verworfen von TCP (ausgehend)" | 5821 | msgstr "# Bytes verworfen von TCP (ausgehend)" |
5831 | 5822 | ||
5832 | #: src/transport/plugin_transport_tcp.c:913 | 5823 | #: src/transport/plugin_transport_tcp.c:914 |
5833 | #, fuzzy | 5824 | #, fuzzy |
5834 | msgid "# bytes transmitted via TCP" | 5825 | msgid "# bytes transmitted via TCP" |
5835 | msgstr "# Bytes des Typs %d übertragen" | 5826 | msgstr "# Bytes des Typs %d übertragen" |
5836 | 5827 | ||
5837 | #: src/transport/plugin_transport_tcp.c:1000 | 5828 | #: src/transport/plugin_transport_tcp.c:1001 |
5838 | #, fuzzy | 5829 | #, fuzzy |
5839 | msgid "# bytes discarded by TCP (disconnect)" | 5830 | msgid "# bytes discarded by TCP (disconnect)" |
5840 | msgstr "# Bytes verworfen von TCP (ausgehend)" | 5831 | msgstr "# Bytes verworfen von TCP (ausgehend)" |
5841 | 5832 | ||
5842 | #: src/transport/plugin_transport_tcp.c:1113 | 5833 | #: src/transport/plugin_transport_tcp.c:1114 |
5843 | #, c-format | 5834 | #, c-format |
5844 | msgid "Trying to send with invalid session %p\n" | 5835 | msgid "Trying to send with invalid session %p\n" |
5845 | msgstr "" | 5836 | msgstr "" |
5846 | 5837 | ||
5847 | #: src/transport/plugin_transport_tcp.c:1349 | 5838 | #: src/transport/plugin_transport_tcp.c:1350 |
5848 | #, c-format | 5839 | #, c-format |
5849 | msgid "Address of unexpected length: %u\n" | 5840 | msgid "Address of unexpected length: %u\n" |
5850 | msgstr "" | 5841 | msgstr "" |
5851 | 5842 | ||
5852 | #: src/transport/plugin_transport_tcp.c:1466 | 5843 | #: src/transport/plugin_transport_tcp.c:1467 |
5853 | msgid "# transport-service disconnect requests for TCP" | 5844 | msgid "# transport-service disconnect requests for TCP" |
5854 | msgstr "" | 5845 | msgstr "" |
5855 | 5846 | ||
5856 | #: src/transport/plugin_transport_tcp.c:1867 | 5847 | #: src/transport/plugin_transport_tcp.c:1868 |
5857 | #, fuzzy | 5848 | #, fuzzy |
5858 | msgid "# TCP WELCOME messages received" | 5849 | msgid "# TCP WELCOME messages received" |
5859 | msgstr "# verschlüsselter PONG Nachrichten empfangen" | 5850 | msgstr "# verschlüsselter PONG Nachrichten empfangen" |
5860 | 5851 | ||
5861 | #: src/transport/plugin_transport_tcp.c:2036 | 5852 | #: src/transport/plugin_transport_tcp.c:2037 |
5862 | msgid "# bytes received via TCP" | 5853 | msgid "# bytes received via TCP" |
5863 | msgstr "# Bytes empfangen über TCP" | 5854 | msgstr "# Bytes empfangen über TCP" |
5864 | 5855 | ||
5865 | #: src/transport/plugin_transport_tcp.c:2118 | 5856 | #: src/transport/plugin_transport_tcp.c:2119 |
5866 | msgid "# network-level TCP disconnect events" | 5857 | msgid "# network-level TCP disconnect events" |
5867 | msgstr "" | 5858 | msgstr "" |
5868 | 5859 | ||
5869 | #: src/transport/plugin_transport_tcp.c:2344 src/util/service.c:948 | 5860 | #: src/transport/plugin_transport_tcp.c:2345 src/util/service.c:948 |
5870 | #: src/util/service.c:954 | 5861 | #: src/util/service.c:954 |
5871 | #, c-format | 5862 | #, c-format |
5872 | msgid "Require valid port number for service `%s' in configuration!\n" | 5863 | msgid "Require valid port number for service `%s' in configuration!\n" |
5873 | msgstr "" | 5864 | msgstr "" |
5874 | 5865 | ||
5875 | #: src/transport/plugin_transport_tcp.c:2358 | 5866 | #: src/transport/plugin_transport_tcp.c:2359 |
5876 | #, fuzzy | 5867 | #, fuzzy |
5877 | msgid "Failed to start service.\n" | 5868 | msgid "Failed to start service.\n" |
5878 | msgstr "Fehler beim Starten der Collection.\n" | 5869 | msgstr "Fehler beim Starten der Collection.\n" |
5879 | 5870 | ||
5880 | #: src/transport/plugin_transport_tcp.c:2444 | 5871 | #: src/transport/plugin_transport_tcp.c:2448 |
5881 | #, fuzzy, c-format | 5872 | #, fuzzy, c-format |
5882 | msgid "TCP transport listening on port %llu\n" | 5873 | msgid "TCP transport listening on port %llu\n" |
5883 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" | 5874 | msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" |
5884 | 5875 | ||
5885 | #: src/transport/plugin_transport_tcp.c:2448 | 5876 | #: src/transport/plugin_transport_tcp.c:2452 |
5886 | msgid "TCP transport not listening on any port (client only)\n" | 5877 | msgid "TCP transport not listening on any port (client only)\n" |
5887 | msgstr "" | 5878 | msgstr "" |
5888 | 5879 | ||
5889 | #: src/transport/plugin_transport_tcp.c:2452 | 5880 | #: src/transport/plugin_transport_tcp.c:2456 |
5890 | #, c-format | 5881 | #, c-format |
5891 | msgid "TCP transport advertises itself as being on port %llu\n" | 5882 | msgid "TCP transport advertises itself as being on port %llu\n" |
5892 | msgstr "" | 5883 | msgstr "" |
@@ -5911,14 +5902,14 @@ msgstr "" | |||
5911 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 5902 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
5912 | msgstr "" | 5903 | msgstr "" |
5913 | 5904 | ||
5914 | #: src/transport/plugin_transport_udp.c:2520 | 5905 | #: src/transport/plugin_transport_udp.c:2350 |
5915 | #, c-format | 5906 | #, c-format |
5916 | msgid "" | 5907 | msgid "" |
5917 | "UDP could not transmit message to `%s': Network seems down, please check " | 5908 | "UDP could not transmit message to `%s': Network seems down, please check " |
5918 | "your network configuration\n" | 5909 | "your network configuration\n" |
5919 | msgstr "" | 5910 | msgstr "" |
5920 | 5911 | ||
5921 | #: src/transport/plugin_transport_udp.c:2534 | 5912 | #: src/transport/plugin_transport_udp.c:2364 |
5922 | #, c-format | 5913 | #, c-format |
5923 | msgid "" | 5914 | msgid "" |
5924 | "UDP could not transmit message to `%s': Please check your network " | 5915 | "UDP could not transmit message to `%s': Please check your network " |
@@ -5926,24 +5917,29 @@ msgid "" | |||
5926 | "IPv6 address\n" | 5917 | "IPv6 address\n" |
5927 | msgstr "" | 5918 | msgstr "" |
5928 | 5919 | ||
5929 | #: src/transport/plugin_transport_udp.c:2775 | 5920 | #: src/transport/plugin_transport_udp.c:2664 |
5930 | #, fuzzy | 5921 | #, fuzzy |
5931 | msgid "Failed to open UDP sockets\n" | 5922 | msgid "Failed to open UDP sockets\n" |
5932 | msgstr "Fehler beim Binden an UDP6 Port %d.\n" | 5923 | msgstr "Fehler beim Binden an UDP6 Port %d.\n" |
5933 | 5924 | ||
5934 | #: src/transport/plugin_transport_udp.c:2851 | 5925 | #: src/transport/plugin_transport_udp.c:2762 |
5935 | #, c-format | 5926 | #, c-format |
5936 | msgid "Given `%s' option is out of range: %llu > %u\n" | 5927 | msgid "Given `%s' option is out of range: %llu > %u\n" |
5937 | msgstr "" | 5928 | msgstr "" |
5938 | 5929 | ||
5939 | #: src/transport/plugin_transport_udp.c:2894 | 5930 | #: src/transport/plugin_transport_udp.c:2805 |
5940 | #, fuzzy, c-format | 5931 | #, fuzzy, c-format |
5941 | msgid "Invalid IPv6 address: `%s'\n" | 5932 | msgid "Invalid IPv6 address: `%s'\n" |
5942 | msgstr "Ungültiger Parameter: `%s'\n" | 5933 | msgstr "Ungültiger Parameter: `%s'\n" |
5943 | 5934 | ||
5944 | #: src/transport/plugin_transport_unix.c:1353 | 5935 | #: src/transport/plugin_transport_udp.c:2862 |
5936 | #, fuzzy | ||
5937 | msgid "Failed to create network sockets, plugin failed\n" | ||
5938 | msgstr "Namespace `%s' konnte nicht erstellt werden (existiert bereits?).\n" | ||
5939 | |||
5940 | #: src/transport/plugin_transport_unix.c:1427 | ||
5945 | #, fuzzy | 5941 | #, fuzzy |
5946 | msgid "Failed to open UNIX sockets\n" | 5942 | msgid "Failed to open UNIX listen socket\n" |
5947 | msgstr "Datei wurde als `%s' gespeichert.\n" | 5943 | msgstr "Datei wurde als `%s' gespeichert.\n" |
5948 | 5944 | ||
5949 | #: src/transport/plugin_transport_wlan.c:580 | 5945 | #: src/transport/plugin_transport_wlan.c:580 |
@@ -6260,7 +6256,7 @@ msgstr "" | |||
6260 | msgid "gnunet-ecc failed" | 6256 | msgid "gnunet-ecc failed" |
6261 | msgstr "gnunet-update ausführen" | 6257 | msgstr "gnunet-update ausführen" |
6262 | 6258 | ||
6263 | #: src/util/crypto_ecc.c:1045 | 6259 | #: src/util/crypto_ecc.c:1084 |
6264 | #, fuzzy, c-format | 6260 | #, fuzzy, c-format |
6265 | msgid "ECC signature verification failed at %s:%d: %s\n" | 6261 | msgid "ECC signature verification failed at %s:%d: %s\n" |
6266 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" | 6262 | msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" |
@@ -6526,17 +6522,17 @@ msgstr "" | |||
6526 | msgid "Perform default-actions for GNUnet URIs" | 6522 | msgid "Perform default-actions for GNUnet URIs" |
6527 | msgstr "" | 6523 | msgstr "" |
6528 | 6524 | ||
6529 | #: src/util/helper.c:271 | 6525 | #: src/util/helper.c:322 |
6530 | #, fuzzy, c-format | 6526 | #, fuzzy, c-format |
6531 | msgid "Error reading from `%s': %s\n" | 6527 | msgid "Error reading from `%s': %s\n" |
6532 | msgstr "Fehler beim Anlegen des Benutzers" | 6528 | msgstr "Fehler beim Anlegen des Benutzers" |
6533 | 6529 | ||
6534 | #: src/util/helper.c:316 | 6530 | #: src/util/helper.c:367 |
6535 | #, fuzzy, c-format | 6531 | #, fuzzy, c-format |
6536 | msgid "Failed to parse inbound message from helper `%s'\n" | 6532 | msgid "Failed to parse inbound message from helper `%s'\n" |
6537 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" | 6533 | msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" |
6538 | 6534 | ||
6539 | #: src/util/helper.c:537 | 6535 | #: src/util/helper.c:564 |
6540 | #, fuzzy, c-format | 6536 | #, fuzzy, c-format |
6541 | msgid "Error writing to `%s': %s\n" | 6537 | msgid "Error writing to `%s': %s\n" |
6542 | msgstr "Fehler beim Anlegen des Benutzers" | 6538 | msgstr "Fehler beim Anlegen des Benutzers" |
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
8 | "Project-Id-Version: gnunet 0.9.5a\n" | 8 | "Project-Id-Version: gnunet 0.9.5a\n" |
9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" | 9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" |
10 | "POT-Creation-Date: 2013-04-27 12:39+0200\n" | 10 | "POT-Creation-Date: 2013-05-20 15:09+0200\n" |
11 | "PO-Revision-Date: 2013-02-23 17:50+0100\n" | 11 | "PO-Revision-Date: 2013-02-23 17:50+0100\n" |
12 | "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n" | 12 | "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n" |
13 | "Language-Team: Spanish <es@li.org>\n" | 13 | "Language-Team: Spanish <es@li.org>\n" |
@@ -40,73 +40,73 @@ msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n" | |||
40 | msgid "Failed to remove servicehome directory %s\n" | 40 | msgid "Failed to remove servicehome directory %s\n" |
41 | msgstr "Se produjo un fallo al eliminar el directorio «servicehome» %s.\n" | 41 | msgstr "Se produjo un fallo al eliminar el directorio «servicehome» %s.\n" |
42 | 42 | ||
43 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:712 | 43 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:962 |
44 | #, fuzzy | 44 | #, fuzzy |
45 | msgid "Message was sent successfully" | 45 | msgid "Message was sent successfully" |
46 | msgstr "El almacén de nombres añadió el registro satisfactoriamente" | 46 | msgstr "El almacén de nombres añadió el registro satisfactoriamente" |
47 | 47 | ||
48 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:714 | 48 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:964 |
49 | #, fuzzy | 49 | #, fuzzy |
50 | msgid "Misconfiguration (can't connect to the ARM service)" | 50 | msgid "Misconfiguration (can't connect to the ARM service)" |
51 | msgstr "¡Se produjo un fallo al conectar con el servicio dv!\n" | 51 | msgstr "¡Se produjo un fallo al conectar con el servicio dv!\n" |
52 | 52 | ||
53 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:716 | 53 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:966 |
54 | #, fuzzy | 54 | #, fuzzy |
55 | msgid "We disconnected from ARM before we could send a request" | 55 | msgid "We disconnected from ARM before we could send a request" |
56 | msgstr "# desconexiones del par debido a una petición explícita" | 56 | msgstr "# desconexiones del par debido a una petición explícita" |
57 | 57 | ||
58 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:718 | 58 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:968 |
59 | msgid "ARM API is busy" | 59 | msgid "ARM API is busy" |
60 | msgstr "" | 60 | msgstr "" |
61 | 61 | ||
62 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:720 | 62 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:970 |
63 | #, fuzzy | 63 | #, fuzzy |
64 | msgid "Request doesn't fit into a message" | 64 | msgid "Request doesn't fit into a message" |
65 | msgstr "no imprime mensajes de estado" | 65 | msgstr "no imprime mensajes de estado" |
66 | 66 | ||
67 | # Miguel: "timeout" lo he traducido como plazo, pero no se | 67 | # Miguel: "timeout" lo he traducido como plazo, pero no se |
68 | # si hay alguna palabra que lo describa mejor. | 68 | # si hay alguna palabra que lo describa mejor. |
69 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:722 | 69 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:972 |
70 | #, fuzzy | 70 | #, fuzzy |
71 | msgid "Request timed out" | 71 | msgid "Request timed out" |
72 | msgstr "plazo de consenso" | 72 | msgstr "plazo de consenso" |
73 | 73 | ||
74 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:724 | 74 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:974 |
75 | #, fuzzy | 75 | #, fuzzy |
76 | msgid "Unknown request status" | 76 | msgid "Unknown request status" |
77 | msgstr "Usuario desconocido «%s»\n" | 77 | msgstr "Usuario desconocido «%s»\n" |
78 | 78 | ||
79 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:740 | 79 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:990 |
80 | #, fuzzy, c-format | 80 | #, fuzzy, c-format |
81 | msgid "%s is stopped" | 81 | msgid "%s is stopped" |
82 | msgstr "# elementos almacenados" | 82 | msgstr "# elementos almacenados" |
83 | 83 | ||
84 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:742 | 84 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:992 |
85 | #, fuzzy, c-format | 85 | #, fuzzy, c-format |
86 | msgid "%s is starting" | 86 | msgid "%s is starting" |
87 | msgstr "'%s' comenzando\n" | 87 | msgstr "'%s' comenzando\n" |
88 | 88 | ||
89 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:744 | 89 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:994 |
90 | #, c-format | 90 | #, c-format |
91 | msgid "%s is stopping" | 91 | msgid "%s is stopping" |
92 | msgstr "" | 92 | msgstr "" |
93 | 93 | ||
94 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:746 | 94 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:996 |
95 | #, fuzzy, c-format | 95 | #, fuzzy, c-format |
96 | msgid "%s is starting already" | 96 | msgid "%s is starting already" |
97 | msgstr "'%s' comenzando\n" | 97 | msgstr "'%s' comenzando\n" |
98 | 98 | ||
99 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:748 | 99 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:998 |
100 | #, c-format | 100 | #, c-format |
101 | msgid "%s is stopping already" | 101 | msgid "%s is stopping already" |
102 | msgstr "" | 102 | msgstr "" |
103 | 103 | ||
104 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:750 | 104 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:1000 |
105 | #, c-format | 105 | #, c-format |
106 | msgid "%s is started already" | 106 | msgid "%s is started already" |
107 | msgstr "" | 107 | msgstr "" |
108 | 108 | ||
109 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:752 | 109 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:1002 |
110 | #, c-format | 110 | #, c-format |
111 | msgid "%s is stopped already" | 111 | msgid "%s is stopped already" |
112 | msgstr "" | 112 | msgstr "" |
@@ -114,23 +114,23 @@ msgstr "" | |||
114 | # Miguel: ¿Debería cambiar las siglas de ARM? | 114 | # Miguel: ¿Debería cambiar las siglas de ARM? |
115 | # De momento las he mantenido con una traducción en | 115 | # De momento las he mantenido con una traducción en |
116 | # otro mensaje. | 116 | # otro mensaje. |
117 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:754 | 117 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:1004 |
118 | #, fuzzy, c-format | 118 | #, fuzzy, c-format |
119 | msgid "%s service is not known to ARM" | 119 | msgid "%s service is not known to ARM" |
120 | msgstr "El servicio «%s» es desconocido para el ARM.\n" | 120 | msgstr "El servicio «%s» es desconocido para el ARM.\n" |
121 | 121 | ||
122 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:756 | 122 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:1006 |
123 | #, fuzzy, c-format | 123 | #, fuzzy, c-format |
124 | msgid "%s service failed to start" | 124 | msgid "%s service failed to start" |
125 | msgstr "El proceso del servicio no devolvió un estado\n" | 125 | msgstr "El proceso del servicio no devolvió un estado\n" |
126 | 126 | ||
127 | # Miguel: ¿Es mejor «ya que» que «porque» o «debido al apagado»? | 127 | # Miguel: ¿Es mejor «ya que» que «porque» o «debido al apagado»? |
128 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:758 | 128 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:1008 |
129 | #, fuzzy, c-format | 129 | #, fuzzy, c-format |
130 | msgid "%s service can't be started because ARM is shutting down" | 130 | msgid "%s service can't be started because ARM is shutting down" |
131 | msgstr "Petición ignorada porque el ARM se está apagando.\n" | 131 | msgstr "Petición ignorada porque el ARM se está apagando.\n" |
132 | 132 | ||
133 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:760 | 133 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:1010 |
134 | #, fuzzy, c-format | 134 | #, fuzzy, c-format |
135 | msgid "%.s Unknown result code." | 135 | msgid "%.s Unknown result code." |
136 | msgstr "Código de respuesta del ARM desconocido.\n" | 136 | msgstr "Código de respuesta del ARM desconocido.\n" |
@@ -883,8 +883,8 @@ msgstr "Mensaje no soportado del tipo %u (%u bytes) recibido del par «%s»\n" | |||
883 | #: src/transport/gnunet-service-transport_neighbours.c:1041 | 883 | #: src/transport/gnunet-service-transport_neighbours.c:1041 |
884 | #: src/transport/gnunet-service-transport_neighbours.c:1265 | 884 | #: src/transport/gnunet-service-transport_neighbours.c:1265 |
885 | #: src/transport/gnunet-service-transport_neighbours.c:1274 | 885 | #: src/transport/gnunet-service-transport_neighbours.c:1274 |
886 | #: src/transport/gnunet-service-transport_neighbours.c:2794 | 886 | #: src/transport/gnunet-service-transport_neighbours.c:2798 |
887 | #: src/transport/gnunet-service-transport_neighbours.c:3053 | 887 | #: src/transport/gnunet-service-transport_neighbours.c:3057 |
888 | msgid "# peers connected" | 888 | msgid "# peers connected" |
889 | msgstr "# pares conectados" | 889 | msgstr "# pares conectados" |
890 | 890 | ||
@@ -1359,7 +1359,7 @@ msgstr "opción para usar el demultiplexado de la DHT siempre" | |||
1359 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 | 1359 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 |
1360 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 | 1360 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 |
1361 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 | 1361 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 |
1362 | #: src/nse/gnunet-nse-profiler.c:900 | 1362 | #: src/nse/gnunet-nse-profiler.c:899 |
1363 | msgid "be verbose (print progress information)" | 1363 | msgid "be verbose (print progress information)" |
1364 | msgstr "ser prolijo (imprime información de progreso)" | 1364 | msgstr "ser prolijo (imprime información de progreso)" |
1365 | 1365 | ||
@@ -2278,7 +2278,7 @@ msgstr "" | |||
2278 | msgid "no-name" | 2278 | msgid "no-name" |
2279 | msgstr "sin nombre" | 2279 | msgstr "sin nombre" |
2280 | 2280 | ||
2281 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:975 | 2281 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:1014 |
2282 | #, c-format | 2282 | #, c-format |
2283 | msgid "ECC signing failed at %s:%d: %s\n" | 2283 | msgid "ECC signing failed at %s:%d: %s\n" |
2284 | msgstr "El firmado ECC falló en %s:%d: %s\n" | 2284 | msgstr "El firmado ECC falló en %s:%d: %s\n" |
@@ -2474,11 +2474,11 @@ msgstr "URI SKS mal formada (se produjo un fallo al validar la firma)" | |||
2474 | msgid "Unrecognized URI type" | 2474 | msgid "Unrecognized URI type" |
2475 | msgstr "Tipo de URI no reconocido" | 2475 | msgstr "Tipo de URI no reconocido" |
2476 | 2476 | ||
2477 | #: src/fs/fs_uri.c:898 | 2477 | #: src/fs/fs_uri.c:898 src/util/crypto_ecc.c:941 |
2478 | msgid "Lacking key configuration settings.\n" | 2478 | msgid "Lacking key configuration settings.\n" |
2479 | msgstr "Falta configuración sobre las opciones de claves.\n" | 2479 | msgstr "Falta configuración sobre las opciones de claves.\n" |
2480 | 2480 | ||
2481 | #: src/fs/fs_uri.c:904 | 2481 | #: src/fs/fs_uri.c:904 src/util/crypto_ecc.c:947 |
2482 | #, c-format | 2482 | #, c-format |
2483 | msgid "Could not access hostkey file `%s'.\n" | 2483 | msgid "Could not access hostkey file `%s'.\n" |
2484 | msgstr "No se pudo acceder al fichero de clave de máquina «%s».\n" | 2484 | msgstr "No se pudo acceder al fichero de clave de máquina «%s».\n" |
@@ -3806,15 +3806,15 @@ msgstr "" | |||
3806 | msgid "Hostlist file `%s' could not be removed\n" | 3806 | msgid "Hostlist file `%s' could not be removed\n" |
3807 | msgstr "El fichero de listas de máquinas «%s» no pudo ser eliminado\n" | 3807 | msgstr "El fichero de listas de máquinas «%s» no pudo ser eliminado\n" |
3808 | 3808 | ||
3809 | #: src/hostlist/hostlist-server.c:134 | 3809 | #: src/hostlist/hostlist-server.c:137 |
3810 | msgid "bytes in hostlist" | 3810 | msgid "bytes in hostlist" |
3811 | msgstr "bytes en la lista de máquinas" | 3811 | msgstr "bytes en la lista de máquinas" |
3812 | 3812 | ||
3813 | #: src/hostlist/hostlist-server.c:157 | 3813 | #: src/hostlist/hostlist-server.c:161 |
3814 | msgid "expired addresses encountered" | 3814 | msgid "expired addresses encountered" |
3815 | msgstr "direcciones expiradas encontradas" | 3815 | msgstr "direcciones expiradas encontradas" |
3816 | 3816 | ||
3817 | #: src/hostlist/hostlist-server.c:184 src/hostlist/hostlist-server.c:421 | 3817 | #: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:424 |
3818 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 | 3818 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 |
3819 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 | 3819 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 |
3820 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 | 3820 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 |
@@ -3825,87 +3825,87 @@ msgstr "" | |||
3825 | "Error en la comunicación con el servicio de información de pares (PEERINFO): " | 3825 | "Error en la comunicación con el servicio de información de pares (PEERINFO): " |
3826 | "%s\n" | 3826 | "%s\n" |
3827 | 3827 | ||
3828 | #: src/hostlist/hostlist-server.c:205 | 3828 | #: src/hostlist/hostlist-server.c:210 |
3829 | msgid "HELLOs without addresses encountered (ignored)" | 3829 | msgid "HELLOs without addresses encountered (ignored)" |
3830 | msgstr "«HELLO» sin dirección encontrados (ignorados)" | 3830 | msgstr "«HELLO» sin dirección encontrados (ignorados)" |
3831 | 3831 | ||
3832 | #: src/hostlist/hostlist-server.c:219 | 3832 | #: src/hostlist/hostlist-server.c:224 |
3833 | msgid "bytes not included in hostlist (size limit)" | 3833 | msgid "bytes not included in hostlist (size limit)" |
3834 | msgstr "bytes no incluidos en la lista de máquinas (límite de tamaño)" | 3834 | msgstr "bytes no incluidos en la lista de máquinas (límite de tamaño)" |
3835 | 3835 | ||
3836 | #: src/hostlist/hostlist-server.c:263 | 3836 | #: src/hostlist/hostlist-server.c:268 |
3837 | #, c-format | 3837 | #, c-format |
3838 | msgid "Refusing `%s' request to hostlist server\n" | 3838 | msgid "Refusing `%s' request to hostlist server\n" |
3839 | msgstr "Rechazando petición «%s» al servidor de listas de máquinas\n" | 3839 | msgstr "Rechazando petición «%s» al servidor de listas de máquinas\n" |
3840 | 3840 | ||
3841 | #: src/hostlist/hostlist-server.c:266 | 3841 | #: src/hostlist/hostlist-server.c:271 |
3842 | msgid "hostlist requests refused (not HTTP GET)" | 3842 | msgid "hostlist requests refused (not HTTP GET)" |
3843 | msgstr "Peticiones de listas de máquinas rechazadas (no HTTP GET)" | 3843 | msgstr "Peticiones de listas de máquinas rechazadas (no HTTP GET)" |
3844 | 3844 | ||
3845 | #: src/hostlist/hostlist-server.c:279 | 3845 | #: src/hostlist/hostlist-server.c:284 |
3846 | #, c-format | 3846 | #, c-format |
3847 | msgid "Refusing `%s' request with %llu bytes of upload data\n" | 3847 | msgid "Refusing `%s' request with %llu bytes of upload data\n" |
3848 | msgstr "Rechazando petición «%s» con %llu bytes de datos de subida\n" | 3848 | msgstr "Rechazando petición «%s» con %llu bytes de datos de subida\n" |
3849 | 3849 | ||
3850 | #: src/hostlist/hostlist-server.c:283 | 3850 | #: src/hostlist/hostlist-server.c:288 |
3851 | msgid "hostlist requests refused (upload data)" | 3851 | msgid "hostlist requests refused (upload data)" |
3852 | msgstr "Peticiones de listas de máquinas rechazadas (datos de subida)" | 3852 | msgstr "Peticiones de listas de máquinas rechazadas (datos de subida)" |
3853 | 3853 | ||
3854 | #: src/hostlist/hostlist-server.c:291 | 3854 | #: src/hostlist/hostlist-server.c:296 |
3855 | msgid "Could not handle hostlist request since I do not have a response yet\n" | 3855 | msgid "Could not handle hostlist request since I do not have a response yet\n" |
3856 | msgstr "" | 3856 | msgstr "" |
3857 | "No se pudo manejar una petición de lista de máquinas debido a que no hay una " | 3857 | "No se pudo manejar una petición de lista de máquinas debido a que no hay una " |
3858 | "respuesta todavía\n" | 3858 | "respuesta todavía\n" |
3859 | 3859 | ||
3860 | #: src/hostlist/hostlist-server.c:294 | 3860 | #: src/hostlist/hostlist-server.c:299 |
3861 | msgid "hostlist requests refused (not ready)" | 3861 | msgid "hostlist requests refused (not ready)" |
3862 | msgstr "Peticiones de listas de máquinas rechazadas (no preparados)" | 3862 | msgstr "Peticiones de listas de máquinas rechazadas (no preparados)" |
3863 | 3863 | ||
3864 | #: src/hostlist/hostlist-server.c:298 | 3864 | #: src/hostlist/hostlist-server.c:303 |
3865 | msgid "Received request for our hostlist\n" | 3865 | msgid "Received request for our hostlist\n" |
3866 | msgstr "Peticiones recibidas de nuestra lista de máquinas\n" | 3866 | msgstr "Peticiones recibidas de nuestra lista de máquinas\n" |
3867 | 3867 | ||
3868 | #: src/hostlist/hostlist-server.c:299 | 3868 | #: src/hostlist/hostlist-server.c:304 |
3869 | msgid "hostlist requests processed" | 3869 | msgid "hostlist requests processed" |
3870 | msgstr "Peticiones de lista de máquinas procesadas" | 3870 | msgstr "Peticiones de lista de máquinas procesadas" |
3871 | 3871 | ||
3872 | #: src/hostlist/hostlist-server.c:341 | 3872 | #: src/hostlist/hostlist-server.c:346 |
3873 | msgid "# hostlist advertisements send" | 3873 | msgid "# hostlist advertisements send" |
3874 | msgstr "# anuncios de listas de máquinas enviados" | 3874 | msgstr "# anuncios de listas de máquinas enviados" |
3875 | 3875 | ||
3876 | #: src/hostlist/hostlist-server.c:384 | 3876 | #: src/hostlist/hostlist-server.c:389 |
3877 | msgid "Advertisement message could not be queued by core\n" | 3877 | msgid "Advertisement message could not be queued by core\n" |
3878 | msgstr "" | 3878 | msgstr "" |
3879 | "Los mensajes de anuncio no pudieron encolarse por el servicio principal\n" | 3879 | "Los mensajes de anuncio no pudieron encolarse por el servicio principal\n" |
3880 | 3880 | ||
3881 | #: src/hostlist/hostlist-server.c:548 src/peerinfo-tool/gnunet-peerinfo.c:649 | 3881 | #: src/hostlist/hostlist-server.c:560 src/peerinfo-tool/gnunet-peerinfo.c:649 |
3882 | #: src/transport/gnunet-service-transport.c:661 | 3882 | #: src/transport/gnunet-service-transport.c:661 |
3883 | msgid "Could not access PEERINFO service. Exiting.\n" | 3883 | msgid "Could not access PEERINFO service. Exiting.\n" |
3884 | msgstr "" | 3884 | msgstr "" |
3885 | "No se pudo acceder al servicio de información de pares (PEERINFO). " | 3885 | "No se pudo acceder al servicio de información de pares (PEERINFO). " |
3886 | "Saliendo.\n" | 3886 | "Saliendo.\n" |
3887 | 3887 | ||
3888 | #: src/hostlist/hostlist-server.c:558 | 3888 | #: src/hostlist/hostlist-server.c:570 |
3889 | #, c-format | 3889 | #, c-format |
3890 | msgid "Invalid port number %llu. Exiting.\n" | 3890 | msgid "Invalid port number %llu. Exiting.\n" |
3891 | msgstr "Número de puerto %llu no válido. Saliendo.\n" | 3891 | msgstr "Número de puerto %llu no válido. Saliendo.\n" |
3892 | 3892 | ||
3893 | #: src/hostlist/hostlist-server.c:567 | 3893 | #: src/hostlist/hostlist-server.c:579 |
3894 | #, c-format | 3894 | #, c-format |
3895 | msgid "Hostlist service starts on %s:%llu\n" | 3895 | msgid "Hostlist service starts on %s:%llu\n" |
3896 | msgstr "Servicio de listas de máquinas arranca en %s:%llu\n" | 3896 | msgstr "Servicio de listas de máquinas arranca en %s:%llu\n" |
3897 | 3897 | ||
3898 | #: src/hostlist/hostlist-server.c:581 | 3898 | #: src/hostlist/hostlist-server.c:593 |
3899 | #, c-format | 3899 | #, c-format |
3900 | msgid "Address to obtain hostlist: `%s'\n" | 3900 | msgid "Address to obtain hostlist: `%s'\n" |
3901 | msgstr "Dirección para obtener la lista de máquinas: «%s»\n" | 3901 | msgstr "Dirección para obtener la lista de máquinas: «%s»\n" |
3902 | 3902 | ||
3903 | #: src/hostlist/hostlist-server.c:621 | 3903 | #: src/hostlist/hostlist-server.c:633 |
3904 | #, c-format | 3904 | #, c-format |
3905 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" | 3905 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" |
3906 | msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n" | 3906 | msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n" |
3907 | 3907 | ||
3908 | #: src/hostlist/hostlist-server.c:663 | 3908 | #: src/hostlist/hostlist-server.c:675 |
3909 | #, c-format | 3909 | #, c-format |
3910 | msgid "Could not start hostlist HTTP server on port %u\n" | 3910 | msgid "Could not start hostlist HTTP server on port %u\n" |
3911 | msgstr "" | 3911 | msgstr "" |
@@ -3945,11 +3945,11 @@ msgstr "proveer información acerca de un túnel en particular" | |||
3945 | msgid "Print information about mesh tunnels and peers." | 3945 | msgid "Print information about mesh tunnels and peers." |
3946 | msgstr "Imprimir información acerca de tuneles mesh y pares." | 3946 | msgstr "Imprimir información acerca de tuneles mesh y pares." |
3947 | 3947 | ||
3948 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:7972 | 3948 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:4649 |
3949 | msgid "Wrong CORE service\n" | 3949 | msgid "Wrong CORE service\n" |
3950 | msgstr "Servicio principal (CORE) erróneo\n" | 3950 | msgstr "Servicio principal (CORE) erróneo\n" |
3951 | 3951 | ||
3952 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:8185 | 3952 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:4790 |
3953 | #, c-format | 3953 | #, c-format |
3954 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" | 3954 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" |
3955 | msgstr "" | 3955 | msgstr "" |
@@ -3958,14 +3958,13 @@ msgstr "" | |||
3958 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 | 3958 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 |
3959 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 | 3959 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 |
3960 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 | 3960 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 |
3961 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:8274 | 3961 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:4860 |
3962 | #: src/mesh/gnunet-service-mesh-new.c:8286 | 3962 | #: src/mesh/gnunet-service-mesh-new.c:4872 |
3963 | #: src/mesh/gnunet-service-mesh-new.c:8298 | 3963 | #: src/mesh/gnunet-service-mesh-new.c:4884 |
3964 | #: src/mesh/gnunet-service-mesh-new.c:8312 | 3964 | #: src/mesh/gnunet-service-mesh-new.c:4896 |
3965 | #: src/mesh/gnunet-service-mesh-new.c:8324 | 3965 | #: src/mesh/gnunet-service-mesh-new.c:4908 |
3966 | #: src/mesh/gnunet-service-mesh-new.c:8336 | 3966 | #: src/mesh/gnunet-service-mesh-new.c:4920 src/nse/gnunet-service-nse.c:1500 |
3967 | #: src/mesh/gnunet-service-mesh-new.c:8348 src/nse/gnunet-service-nse.c:1516 | 3967 | #: src/nse/gnunet-service-nse.c:1518 |
3968 | #: src/nse/gnunet-service-nse.c:1534 | ||
3969 | #: src/regex/gnunet-daemon-regexprofiler.c:320 | 3968 | #: src/regex/gnunet-daemon-regexprofiler.c:320 |
3970 | #: src/regex/gnunet-daemon-regexprofiler.c:332 | 3969 | #: src/regex/gnunet-daemon-regexprofiler.c:332 |
3971 | #: src/regex/gnunet-daemon-regexprofiler.c:344 | 3970 | #: src/regex/gnunet-daemon-regexprofiler.c:344 |
@@ -3978,9 +3977,9 @@ msgstr "" | |||
3978 | "Saliendo.\n" | 3977 | "Saliendo.\n" |
3979 | 3978 | ||
3980 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 | 3979 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 |
3981 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:8360 | 3980 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:4932 |
3982 | #: src/mesh/gnunet-service-mesh-new.c:8370 | 3981 | #: src/mesh/gnunet-service-mesh-new.c:4942 |
3983 | #: src/mesh/gnunet-service-mesh-new.c:8381 | 3982 | #: src/mesh/gnunet-service-mesh-new.c:4953 |
3984 | #, c-format | 3983 | #, c-format |
3985 | msgid "" | 3984 | msgid "" |
3986 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" | 3985 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" |
@@ -4320,21 +4319,21 @@ msgstr "" | |||
4320 | "«gnunet-helper-nat-client» no encontrado o detrás de NAT, deshabilitando su " | 4319 | "«gnunet-helper-nat-client» no encontrado o detrás de NAT, deshabilitando su " |
4321 | "uso\n" | 4320 | "uso\n" |
4322 | 4321 | ||
4323 | #: src/nat/nat.c:795 | 4322 | #: src/nat/nat.c:834 |
4324 | #, c-format | 4323 | #, c-format |
4325 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" | 4324 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" |
4326 | msgstr "«gnunet-helper-nat-server» generó la dirección mal formada «%s»\n" | 4325 | msgstr "«gnunet-helper-nat-server» generó la dirección mal formada «%s»\n" |
4327 | 4326 | ||
4328 | #: src/nat/nat.c:844 | 4327 | #: src/nat/nat.c:883 |
4329 | #, c-format | 4328 | #, c-format |
4330 | msgid "Failed to start %s\n" | 4329 | msgid "Failed to start %s\n" |
4331 | msgstr "Se produjo un fallo al arrancar %s\n" | 4330 | msgstr "Se produjo un fallo al arrancar %s\n" |
4332 | 4331 | ||
4333 | #: src/nat/nat.c:1113 | 4332 | #: src/nat/nat.c:1152 |
4334 | msgid "malformed" | 4333 | msgid "malformed" |
4335 | msgstr "mal formado" | 4334 | msgstr "mal formado" |
4336 | 4335 | ||
4337 | #: src/nat/nat.c:1179 src/nat/nat.c:1191 | 4336 | #: src/nat/nat.c:1218 src/nat/nat.c:1230 |
4338 | #, c-format | 4337 | #, c-format |
4339 | msgid "" | 4338 | msgid "" |
4340 | "Configuration requires `%s', but binary is not installed properly (SUID bit " | 4339 | "Configuration requires `%s', but binary is not installed properly (SUID bit " |
@@ -4343,13 +4342,13 @@ msgstr "" | |||
4343 | "La configuración requiere «%s», pero el binario no está instalado de forma " | 4342 | "La configuración requiere «%s», pero el binario no está instalado de forma " |
4344 | "correcta (SUID bit no activado). Opción deshabilitada.\n" | 4343 | "correcta (SUID bit no activado). Opción deshabilitada.\n" |
4345 | 4344 | ||
4346 | #: src/nat/nat.c:1326 | 4345 | #: src/nat/nat.c:1365 |
4347 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" | 4346 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" |
4348 | msgstr "" | 4347 | msgstr "" |
4349 | "Direcciones internas IP no conocidas, no se puede usar el método del " | 4348 | "Direcciones internas IP no conocidas, no se puede usar el método del " |
4350 | "recorrido NAT ICMP\n" | 4349 | "recorrido NAT ICMP\n" |
4351 | 4350 | ||
4352 | #: src/nat/nat.c:1337 | 4351 | #: src/nat/nat.c:1376 |
4353 | #, c-format | 4352 | #, c-format |
4354 | msgid "Running gnunet-helper-nat-client %s %s %u\n" | 4353 | msgid "Running gnunet-helper-nat-client %s %s %u\n" |
4355 | msgstr "Ejecutando gnunet-helper-nat-client %s %s %u\n" | 4354 | msgstr "Ejecutando gnunet-helper-nat-client %s %s %u\n" |
@@ -4373,48 +4372,48 @@ msgstr "" | |||
4373 | "Se produjo un fallo al crear el «socket» de escucha asociado a «%s» para " | 4372 | "Se produjo un fallo al crear el «socket» de escucha asociado a «%s» para " |
4374 | "pruebas NAT: %s\n" | 4373 | "pruebas NAT: %s\n" |
4375 | 4374 | ||
4376 | #: src/nse/gnunet-nse-profiler.c:885 | 4375 | #: src/nse/gnunet-nse-profiler.c:884 |
4377 | msgid "limit to the number of connections to NSE services, 0 for none" | 4376 | msgid "limit to the number of connections to NSE services, 0 for none" |
4378 | msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas" | 4377 | msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas" |
4379 | 4378 | ||
4380 | #: src/nse/gnunet-nse-profiler.c:888 | 4379 | #: src/nse/gnunet-nse-profiler.c:887 |
4381 | msgid "name of the file for writing connection information and statistics" | 4380 | msgid "name of the file for writing connection information and statistics" |
4382 | msgstr "" | 4381 | msgstr "" |
4383 | "nombre del fichero para escribir información y estadísticas de la conexión" | 4382 | "nombre del fichero para escribir información y estadísticas de la conexión" |
4384 | 4383 | ||
4385 | #: src/nse/gnunet-nse-profiler.c:891 src/testbed/gnunet-testbed-profiler.c:282 | 4384 | #: src/nse/gnunet-nse-profiler.c:890 src/testbed/gnunet-testbed-profiler.c:284 |
4386 | msgid "name of the file with the login information for the testbed" | 4385 | msgid "name of the file with the login information for the testbed" |
4387 | msgstr "" | 4386 | msgstr "" |
4388 | "nombre del fichero con la información de acceso usada para la batería de " | 4387 | "nombre del fichero con la información de acceso usada para la batería de " |
4389 | "pruebas" | 4388 | "pruebas" |
4390 | 4389 | ||
4391 | #: src/nse/gnunet-nse-profiler.c:894 | 4390 | #: src/nse/gnunet-nse-profiler.c:893 |
4392 | msgid "name of the file for writing the main results" | 4391 | msgid "name of the file for writing the main results" |
4393 | msgstr "nombre del fichero en el que escribir los resultados principales" | 4392 | msgstr "nombre del fichero en el que escribir los resultados principales" |
4394 | 4393 | ||
4395 | #: src/nse/gnunet-nse-profiler.c:897 | 4394 | #: src/nse/gnunet-nse-profiler.c:896 |
4396 | msgid "Number of peers to run in each round, separated by commas" | 4395 | msgid "Number of peers to run in each round, separated by commas" |
4397 | msgstr "Número de pares a ejecutar en cada ronda, separados por comas" | 4396 | msgstr "Número de pares a ejecutar en cada ronda, separados por comas" |
4398 | 4397 | ||
4399 | #: src/nse/gnunet-nse-profiler.c:903 | 4398 | #: src/nse/gnunet-nse-profiler.c:902 |
4400 | msgid "delay between rounds" | 4399 | msgid "delay between rounds" |
4401 | msgstr "retraso entre rondas" | 4400 | msgstr "retraso entre rondas" |
4402 | 4401 | ||
4403 | #: src/nse/gnunet-nse-profiler.c:912 | 4402 | #: src/nse/gnunet-nse-profiler.c:911 |
4404 | msgid "Measure quality and performance of the NSE service." | 4403 | msgid "Measure quality and performance of the NSE service." |
4405 | msgstr "Medir la calidad y rendimiento del servicio NSE." | 4404 | msgstr "Medir la calidad y rendimiento del servicio NSE." |
4406 | 4405 | ||
4407 | #: src/nse/gnunet-service-nse.c:1405 | 4406 | #: src/nse/gnunet-service-nse.c:1419 |
4408 | #, c-format | 4407 | #, c-format |
4409 | msgid "NSE service could not access hostkey: %s\n" | 4408 | msgid "NSE service could not access hostkey: %s\n" |
4410 | msgstr "El servicio NSE no puede acceder a la clave de máquina: %s\n" | 4409 | msgstr "El servicio NSE no puede acceder a la clave de máquina: %s\n" |
4411 | 4410 | ||
4412 | #: src/nse/gnunet-service-nse.c:1419 | 4411 | #: src/nse/gnunet-service-nse.c:1433 |
4413 | msgid "NSE service is lacking key configuration settings. Exiting.\n" | 4412 | msgid "NSE service is lacking key configuration settings. Exiting.\n" |
4414 | msgstr "" | 4413 | msgstr "" |
4415 | "El servicio NSE carece de opciones de configuración de clave. Saliendo.\n" | 4414 | "El servicio NSE carece de opciones de configuración de clave. Saliendo.\n" |
4416 | 4415 | ||
4417 | #: src/nse/gnunet-service-nse.c:1524 | 4416 | #: src/nse/gnunet-service-nse.c:1508 |
4418 | msgid "Invalid work requirement for NSE service. Exiting.\n" | 4417 | msgid "Invalid work requirement for NSE service. Exiting.\n" |
4419 | msgstr "Requisitos de trabajo no válidos para el servicio NSE. Saliendo.\n" | 4418 | msgstr "Requisitos de trabajo no válidos para el servicio NSE. Saliendo.\n" |
4420 | 4419 | ||
@@ -4423,21 +4422,21 @@ msgstr "Requisitos de trabajo no válidos para el servicio NSE. Saliendo.\n" | |||
4423 | msgid "Removing expired address of transport `%s'\n" | 4422 | msgid "Removing expired address of transport `%s'\n" |
4424 | msgstr "Eliminando dirección de transporte «%s»\n" | 4423 | msgstr "Eliminando dirección de transporte «%s»\n" |
4425 | 4424 | ||
4426 | #: src/peerinfo/gnunet-service-peerinfo.c:354 | 4425 | #: src/peerinfo/gnunet-service-peerinfo.c:355 |
4427 | #, fuzzy, c-format | 4426 | #, fuzzy, c-format |
4428 | msgid "Failed to parse HELLO in file `%s': %s\n" | 4427 | msgid "Failed to parse HELLO in file `%s': %s\n" |
4429 | msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" | 4428 | msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" |
4430 | 4429 | ||
4431 | #: src/peerinfo/gnunet-service-peerinfo.c:369 | 4430 | #: src/peerinfo/gnunet-service-peerinfo.c:370 |
4432 | #, fuzzy, c-format | 4431 | #, fuzzy, c-format |
4433 | msgid "Failed to parse HELLO in file `%s': %s %u \n" | 4432 | msgid "Failed to parse HELLO in file `%s': %s %u \n" |
4434 | msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" | 4433 | msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" |
4435 | 4434 | ||
4436 | #: src/peerinfo/gnunet-service-peerinfo.c:444 | 4435 | #: src/peerinfo/gnunet-service-peerinfo.c:445 |
4437 | msgid "# peers known" | 4436 | msgid "# peers known" |
4438 | msgstr "# pares conocidos" | 4437 | msgstr "# pares conocidos" |
4439 | 4438 | ||
4440 | #: src/peerinfo/gnunet-service-peerinfo.c:480 | 4439 | #: src/peerinfo/gnunet-service-peerinfo.c:481 |
4441 | #, c-format | 4440 | #, c-format |
4442 | msgid "" | 4441 | msgid "" |
4443 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" | 4442 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" |
@@ -4445,22 +4444,22 @@ msgstr "" | |||
4445 | "El fichero «%s» en el directorio «%s» no sigue la convención de nombres. " | 4444 | "El fichero «%s» en el directorio «%s» no sigue la convención de nombres. " |
4446 | "Eliminado.\n" | 4445 | "Eliminado.\n" |
4447 | 4446 | ||
4448 | #: src/peerinfo/gnunet-service-peerinfo.c:632 | 4447 | #: src/peerinfo/gnunet-service-peerinfo.c:633 |
4449 | #, fuzzy, c-format | 4448 | #, fuzzy, c-format |
4450 | msgid "Scanning directory `%s'\n" | 4449 | msgid "Scanning directory `%s'\n" |
4451 | msgstr "Escaneando directorio «%s».\n" | 4450 | msgstr "Escaneando directorio «%s».\n" |
4452 | 4451 | ||
4453 | #: src/peerinfo/gnunet-service-peerinfo.c:637 | 4452 | #: src/peerinfo/gnunet-service-peerinfo.c:638 |
4454 | #, c-format | 4453 | #, c-format |
4455 | msgid "Still no peers found in `%s'!\n" | 4454 | msgid "Still no peers found in `%s'!\n" |
4456 | msgstr "¡Aún no se han encontrado pares en «%s»!\n" | 4455 | msgstr "¡Aún no se han encontrado pares en «%s»!\n" |
4457 | 4456 | ||
4458 | #: src/peerinfo/gnunet-service-peerinfo.c:969 | 4457 | #: src/peerinfo/gnunet-service-peerinfo.c:970 |
4459 | #, fuzzy, c-format | 4458 | #, fuzzy, c-format |
4460 | msgid "Cleaning up directory `%s'\n" | 4459 | msgid "Cleaning up directory `%s'\n" |
4461 | msgstr "Escaneando directorio «%s».\n" | 4460 | msgstr "Escaneando directorio «%s».\n" |
4462 | 4461 | ||
4463 | #: src/peerinfo/gnunet-service-peerinfo.c:1249 | 4462 | #: src/peerinfo/gnunet-service-peerinfo.c:1250 |
4464 | #, c-format | 4463 | #, c-format |
4465 | msgid "Importing HELLOs from `%s'\n" | 4464 | msgid "Importing HELLOs from `%s'\n" |
4466 | msgstr "Importando HELLO de «%s»\n" | 4465 | msgstr "Importando HELLO de «%s»\n" |
@@ -4671,22 +4670,16 @@ msgstr "" | |||
4671 | msgid "Daemon to announce regular expressions for the peer using mesh." | 4670 | msgid "Daemon to announce regular expressions for the peer using mesh." |
4672 | msgstr "Demonio para anunciar expresiones regulares para el par usando mesh." | 4671 | msgstr "Demonio para anunciar expresiones regulares para el par usando mesh." |
4673 | 4672 | ||
4674 | #: src/regex/gnunet-regex-profiler.c:1246 | 4673 | #: src/regex/gnunet-regex-profiler.c:1247 |
4675 | msgid "No configuration file given. Exiting\n" | 4674 | msgid "No configuration file given. Exiting\n" |
4676 | msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n" | 4675 | msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n" |
4677 | 4676 | ||
4678 | #: src/regex/gnunet-regex-profiler.c:1257 | 4677 | #: src/regex/gnunet-regex-profiler.c:1258 |
4679 | #, fuzzy | 4678 | #, fuzzy |
4680 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" | 4679 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" |
4681 | msgstr "Falta una opción de configuración (regex_prefix). Saliendo\n" | 4680 | msgstr "Falta una opción de configuración (regex_prefix). Saliendo\n" |
4682 | 4681 | ||
4683 | #: src/regex/gnunet-regex-profiler.c:1276 | 4682 | #: src/regex/gnunet-regex-profiler.c:1287 |
4684 | msgid "No hosts-file specified on command line. Exiting.\n" | ||
4685 | msgstr "" | ||
4686 | "No se ha especificado el fichero de máquinas en la línea de comandos. " | ||
4687 | "Saliendo.\n" | ||
4688 | |||
4689 | #: src/regex/gnunet-regex-profiler.c:1282 | ||
4690 | #: src/regex/gnunet-regex-simulation-profiler.c:622 | 4683 | #: src/regex/gnunet-regex-simulation-profiler.c:622 |
4691 | #, c-format | 4684 | #, c-format |
4692 | msgid "No policy directory specified on command line. Exiting.\n" | 4685 | msgid "No policy directory specified on command line. Exiting.\n" |
@@ -4694,22 +4687,22 @@ msgstr "" | |||
4694 | "No se ha especificado una política de directorios en la línea de comandos. " | 4687 | "No se ha especificado una política de directorios en la línea de comandos. " |
4695 | "Saliendo.\n" | 4688 | "Saliendo.\n" |
4696 | 4689 | ||
4697 | #: src/regex/gnunet-regex-profiler.c:1288 | 4690 | #: src/regex/gnunet-regex-profiler.c:1293 |
4698 | #: src/regex/gnunet-regex-simulation-profiler.c:629 | 4691 | #: src/regex/gnunet-regex-simulation-profiler.c:629 |
4699 | #, c-format | 4692 | #, c-format |
4700 | msgid "Specified policies directory does not exist. Exiting.\n" | 4693 | msgid "Specified policies directory does not exist. Exiting.\n" |
4701 | msgstr "Las políticas de directorio especificadas no existen. Saliendo.\n" | 4694 | msgstr "Las políticas de directorio especificadas no existen. Saliendo.\n" |
4702 | 4695 | ||
4703 | #: src/regex/gnunet-regex-profiler.c:1295 | 4696 | #: src/regex/gnunet-regex-profiler.c:1300 |
4704 | #, c-format | 4697 | #, c-format |
4705 | msgid "No files found in `%s'\n" | 4698 | msgid "No files found in `%s'\n" |
4706 | msgstr "No se han encontrado ficheros en «%s»\n" | 4699 | msgstr "No se han encontrado ficheros en «%s»\n" |
4707 | 4700 | ||
4708 | #: src/regex/gnunet-regex-profiler.c:1304 | 4701 | #: src/regex/gnunet-regex-profiler.c:1309 |
4709 | msgid "No search strings file given. Exiting.\n" | 4702 | msgid "No search strings file given. Exiting.\n" |
4710 | msgstr "No se ha proporcionado un fichero de cadenas de búsqueda. Saliendo.\n" | 4703 | msgstr "No se ha proporcionado un fichero de cadenas de búsqueda. Saliendo.\n" |
4711 | 4704 | ||
4712 | #: src/regex/gnunet-regex-profiler.c:1314 | 4705 | #: src/regex/gnunet-regex-profiler.c:1319 |
4713 | #, fuzzy | 4706 | #, fuzzy |
4714 | msgid "" | 4707 | msgid "" |
4715 | "Error loading search strings.Given file does not contain enough strings. " | 4708 | "Error loading search strings.Given file does not contain enough strings. " |
@@ -4718,40 +4711,36 @@ msgstr "" | |||
4718 | "Error cargando cadenas de búsqueda. El fichero proporcionado no contiene " | 4711 | "Error cargando cadenas de búsqueda. El fichero proporcionado no contiene " |
4719 | "cadenas suficientes. Saliendo.\n" | 4712 | "cadenas suficientes. Saliendo.\n" |
4720 | 4713 | ||
4721 | #: src/regex/gnunet-regex-profiler.c:1322 | 4714 | #: src/regex/gnunet-regex-profiler.c:1327 |
4722 | msgid "Error loading search strings. Exiting.\n" | 4715 | msgid "Error loading search strings. Exiting.\n" |
4723 | msgstr "Error cargando cadenas de búsqueda. Saliendo.\n" | 4716 | msgstr "Error cargando cadenas de búsqueda. Saliendo.\n" |
4724 | 4717 | ||
4725 | #: src/regex/gnunet-regex-profiler.c:1389 | 4718 | #: src/regex/gnunet-regex-profiler.c:1394 |
4726 | msgid "name of the file for writing statistics" | 4719 | msgid "name of the file for writing statistics" |
4727 | msgstr "nombre del fichero para escribir las estadísticas" | 4720 | msgstr "nombre del fichero para escribir las estadísticas" |
4728 | 4721 | ||
4729 | #: src/regex/gnunet-regex-profiler.c:1392 | 4722 | #: src/regex/gnunet-regex-profiler.c:1397 |
4730 | msgid "wait TIMEOUT before considering a string match as failed" | 4723 | #, fuzzy |
4724 | msgid "wait TIMEOUT before ending the experiment" | ||
4731 | msgstr "" | 4725 | msgstr "" |
4732 | "esperar «TIMEOUT» antes de considerar que una coincidencia de cadenas como " | 4726 | "esperar «TIMEOUT» antes de considerar que una coincidencia de cadenas como " |
4733 | "fallida" | 4727 | "fallida" |
4734 | 4728 | ||
4735 | #: src/regex/gnunet-regex-profiler.c:1395 | 4729 | #: src/regex/gnunet-regex-profiler.c:1400 |
4736 | msgid "number of search strings to read from search strings file" | ||
4737 | msgstr "" | ||
4738 | "número de cadenas de búsqueda a leer del fichero de cadenas de búsqueda" | ||
4739 | |||
4740 | #: src/regex/gnunet-regex-profiler.c:1398 | ||
4741 | msgid "directory with policy files" | 4730 | msgid "directory with policy files" |
4742 | msgstr "" | 4731 | msgstr "" |
4743 | 4732 | ||
4744 | #: src/regex/gnunet-regex-profiler.c:1401 | 4733 | #: src/regex/gnunet-regex-profiler.c:1403 |
4745 | #, fuzzy | 4734 | #, fuzzy |
4746 | msgid "name of file with input strings" | 4735 | msgid "name of file with input strings" |
4747 | msgstr "nombre del fichero para escribir las estadísticas" | 4736 | msgstr "nombre del fichero para escribir las estadísticas" |
4748 | 4737 | ||
4749 | #: src/regex/gnunet-regex-profiler.c:1404 | 4738 | #: src/regex/gnunet-regex-profiler.c:1406 |
4750 | #, fuzzy | 4739 | #, fuzzy |
4751 | msgid "name of file with hosts' names" | 4740 | msgid "name of file with hosts' names" |
4752 | msgstr "nombre del fichero para escribir las estadísticas" | 4741 | msgstr "nombre del fichero para escribir las estadísticas" |
4753 | 4742 | ||
4754 | #: src/regex/gnunet-regex-profiler.c:1416 | 4743 | #: src/regex/gnunet-regex-profiler.c:1418 |
4755 | msgid "Profiler for regex" | 4744 | msgid "Profiler for regex" |
4756 | msgstr "Perfilador para expresiones regulares." | 4745 | msgstr "Perfilador para expresiones regulares." |
4757 | 4746 | ||
@@ -4874,7 +4863,7 @@ msgstr "" | |||
4874 | "No se pudo determinar el intervalo de ejecución para «%s», estableciéndolo a " | 4863 | "No se pudo determinar el intervalo de ejecución para «%s», estableciéndolo a " |
4875 | "los 60 segundos predeterminados.\n" | 4864 | "los 60 segundos predeterminados.\n" |
4876 | 4865 | ||
4877 | #: src/testbed/gnunet-service-testbed_cpustatus.c:670 | 4866 | #: src/testbed/gnunet-service-testbed_cpustatus.c:692 |
4878 | #, c-format | 4867 | #, c-format |
4879 | msgid "" | 4868 | msgid "" |
4880 | "Cannot open %s for writing load statistics. Not logging load statistics\n" | 4869 | "Cannot open %s for writing load statistics. Not logging load statistics\n" |
@@ -4885,26 +4874,26 @@ msgstr "" | |||
4885 | msgid "Job command file not given. Exiting\n" | 4874 | msgid "Job command file not given. Exiting\n" |
4886 | msgstr "Fichero de configuración de trabajos no proporcionado. Saliendo\n" | 4875 | msgstr "Fichero de configuración de trabajos no proporcionado. Saliendo\n" |
4887 | 4876 | ||
4888 | #: src/testbed/gnunet_testbed_mpi_spawn.c:135 | 4877 | #: src/testbed/gnunet_testbed_mpi_spawn.c:125 |
4889 | #, fuzzy | 4878 | #, fuzzy |
4890 | msgid "Waiting for child to exit.\n" | 4879 | msgid "Waiting for child to exit.\n" |
4891 | msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n" | 4880 | msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n" |
4892 | 4881 | ||
4893 | #: src/testbed/gnunet_testbed_mpi_spawn.c:296 | 4882 | #: src/testbed/gnunet_testbed_mpi_spawn.c:247 |
4894 | #, fuzzy, c-format | 4883 | #, fuzzy, c-format |
4895 | msgid "Spawning process `%s'\n" | 4884 | msgid "Spawning process `%s'\n" |
4896 | msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n" | 4885 | msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n" |
4897 | 4886 | ||
4898 | #: src/testbed/gnunet-testbed-profiler.c:249 | 4887 | #: src/testbed/gnunet-testbed-profiler.c:251 |
4899 | #, fuzzy, c-format | 4888 | #, fuzzy, c-format |
4900 | msgid "Exiting as the number of peers is %u\n" | 4889 | msgid "Exiting as the number of peers is %u\n" |
4901 | msgstr "El número máximo de conexiones es %u\n" | 4890 | msgstr "El número máximo de conexiones es %u\n" |
4902 | 4891 | ||
4903 | #: src/testbed/gnunet-testbed-profiler.c:275 | 4892 | #: src/testbed/gnunet-testbed-profiler.c:277 |
4904 | msgid "create COUNT number of peers" | 4893 | msgid "create COUNT number of peers" |
4905 | msgstr "crea «COUNT» número de pares" | 4894 | msgstr "crea «COUNT» número de pares" |
4906 | 4895 | ||
4907 | #: src/testbed/gnunet-testbed-profiler.c:278 | 4896 | #: src/testbed/gnunet-testbed-profiler.c:280 |
4908 | msgid "tolerate COUNT number of continious timeout failures" | 4897 | msgid "tolerate COUNT number of continious timeout failures" |
4909 | msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo" | 4898 | msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo" |
4910 | 4899 | ||
@@ -4923,56 +4912,56 @@ msgstr "El archivo de máquinas %s no tiene datos\n" | |||
4923 | msgid "Hosts file %s cannot be read\n" | 4912 | msgid "Hosts file %s cannot be read\n" |
4924 | msgstr "El archivo de máquinas %s no puede leerse\n" | 4913 | msgstr "El archivo de máquinas %s no puede leerse\n" |
4925 | 4914 | ||
4926 | #: src/testbed/testbed_api_hosts.c:583 | 4915 | #: src/testbed/testbed_api_hosts.c:595 |
4927 | #, c-format | 4916 | #, c-format |
4928 | msgid "The function %s is only available when compiled with (--with-ll)\n" | 4917 | msgid "The function %s is only available when compiled with (--with-ll)\n" |
4929 | msgstr "" | 4918 | msgstr "" |
4930 | 4919 | ||
4931 | #: src/testbed/testbed_api_hosts.c:1856 | 4920 | #: src/testbed/testbed_api_hosts.c:1879 |
4932 | #, c-format | 4921 | #, c-format |
4933 | msgid "Adding host %u failed with error: %s\n" | 4922 | msgid "Adding host %u failed with error: %s\n" |
4934 | msgstr "No se pudo añadir la máquina %u por el error: %s\n" | 4923 | msgstr "No se pudo añadir la máquina %u por el error: %s\n" |
4935 | 4924 | ||
4936 | #: src/testbed/testbed_api_testbed.c:771 | 4925 | #: src/testbed/testbed_api_testbed.c:891 |
4937 | msgid "Linking controllers failed. Exiting" | 4926 | msgid "Linking controllers failed. Exiting" |
4938 | msgstr "Los controladores de enlazado fallaron. Saliendo" | 4927 | msgstr "Los controladores de enlazado fallaron. Saliendo" |
4939 | 4928 | ||
4940 | #: src/testbed/testbed_api_testbed.c:913 | 4929 | #: src/testbed/testbed_api_testbed.c:1094 |
4941 | #, c-format | 4930 | #, c-format |
4942 | msgid "Host registration failed for a host. Error: %s\n" | 4931 | msgid "Host registration failed for a host. Error: %s\n" |
4943 | msgstr "El registro de máquinas falló para una máquina. Error: %s\n" | 4932 | msgstr "El registro de máquinas falló para una máquina. Error: %s\n" |
4944 | 4933 | ||
4945 | #: src/testbed/testbed_api_testbed.c:978 | 4934 | #: src/testbed/testbed_api_testbed.c:1175 |
4946 | msgid "Controller crash detected. Shutting down.\n" | 4935 | msgid "Controller crash detected. Shutting down.\n" |
4947 | msgstr "" | 4936 | msgstr "" |
4948 | 4937 | ||
4949 | #: src/testbed/testbed_api_testbed.c:1081 | 4938 | #: src/testbed/testbed_api_testbed.c:1320 |
4950 | #, c-format | 4939 | #, c-format |
4951 | msgid "Host %s cannot start testbed\n" | 4940 | msgid "Host %s cannot start testbed\n" |
4952 | msgstr "La máquina %s no puede comenzar la batería de pruebas\n" | 4941 | msgstr "La máquina %s no puede comenzar la batería de pruebas\n" |
4953 | 4942 | ||
4954 | #: src/testbed/testbed_api_testbed.c:1085 | 4943 | #: src/testbed/testbed_api_testbed.c:1324 |
4955 | msgid "Testbed cannot be started on localhost\n" | 4944 | msgid "Testbed cannot be started on localhost\n" |
4956 | msgstr "La batería de pruebas no se puede iniciar en localhost\n" | 4945 | msgstr "La batería de pruebas no se puede iniciar en localhost\n" |
4957 | 4946 | ||
4958 | #: src/testbed/testbed_api_testbed.c:1120 | 4947 | #: src/testbed/testbed_api_testbed.c:1365 |
4959 | msgid "Cannot start the master controller" | 4948 | msgid "Cannot start the master controller" |
4960 | msgstr "No se puede iniciar el controlador maestro" | 4949 | msgstr "No se puede iniciar el controlador maestro" |
4961 | 4950 | ||
4962 | #: src/testbed/testbed_api_testbed.c:1138 | 4951 | #: src/testbed/testbed_api_testbed.c:1383 |
4963 | msgid "Shutting down testbed due to timeout while setup.\n" | 4952 | msgid "Shutting down testbed due to timeout while setup.\n" |
4964 | msgstr "" | 4953 | msgstr "" |
4965 | 4954 | ||
4966 | #: src/testbed/testbed_api_testbed.c:1197 | 4955 | #: src/testbed/testbed_api_testbed.c:1443 |
4967 | #, fuzzy | 4956 | #, fuzzy |
4968 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" | 4957 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" |
4969 | msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n" | 4958 | msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n" |
4970 | 4959 | ||
4971 | #: src/testbed/testbed_api_testbed.c:1209 | 4960 | #: src/testbed/testbed_api_testbed.c:1455 |
4972 | msgid "No hosts loaded. Need at least one host\n" | 4961 | msgid "No hosts loaded. Need at least one host\n" |
4973 | msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n" | 4962 | msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n" |
4974 | 4963 | ||
4975 | #: src/testbed/testbed_api_testbed.c:1233 | 4964 | #: src/testbed/testbed_api_testbed.c:1479 |
4976 | msgid "Specified topology must be supported by testbed" | 4965 | msgid "Specified topology must be supported by testbed" |
4977 | msgstr "" | 4966 | msgstr "" |
4978 | "La topología especificada debe estar soportada por la batería de pruebas" | 4967 | "La topología especificada debe estar soportada por la batería de pruebas" |
@@ -5134,7 +5123,7 @@ msgstr "" | |||
5134 | msgid "Failed to start `%s': %s\n" | 5123 | msgid "Failed to start `%s': %s\n" |
5135 | msgstr "Se produjo un fallo al arrancar «%s»: %s\n" | 5124 | msgstr "Se produjo un fallo al arrancar «%s»: %s\n" |
5136 | 5125 | ||
5137 | #: src/testing/testing.c:1691 | 5126 | #: src/testing/testing.c:1709 |
5138 | #, c-format | 5127 | #, c-format |
5139 | msgid "Failed to load configuration from %s\n" | 5128 | msgid "Failed to load configuration from %s\n" |
5140 | msgstr "Se produjo un fallo al cargar la configuración de %s\n" | 5129 | msgstr "Se produjo un fallo al cargar la configuración de %s\n" |
@@ -5299,7 +5288,7 @@ msgstr "¡Rechazando conexión de control del par «%s», que no soy yo!\n" | |||
5299 | msgid "# bytes payload dropped (other peer was not connected)" | 5288 | msgid "# bytes payload dropped (other peer was not connected)" |
5300 | msgstr "# bytes de «payload» omitidos (el otro par no estaba conectado)" | 5289 | msgstr "# bytes de «payload» omitidos (el otro par no estaba conectado)" |
5301 | 5290 | ||
5302 | #: src/transport/gnunet-service-transport_clients.c:728 | 5291 | #: src/transport/gnunet-service-transport_clients.c:733 |
5303 | msgid "# REQUEST CONNECT messages received" | 5292 | msgid "# REQUEST CONNECT messages received" |
5304 | msgstr "# mensajes «REQUEST CONNECT» recibidos" | 5293 | msgstr "# mensajes «REQUEST CONNECT» recibidos" |
5305 | 5294 | ||
@@ -5361,48 +5350,48 @@ msgstr "# violaciones de la cuota de ancho de banda por otros pares" | |||
5361 | msgid "# ms throttling suggested" | 5350 | msgid "# ms throttling suggested" |
5362 | msgstr "# ms de impulso sugeridos" | 5351 | msgstr "# ms de impulso sugeridos" |
5363 | 5352 | ||
5364 | #: src/transport/gnunet-service-transport_neighbours.c:2770 | 5353 | #: src/transport/gnunet-service-transport_neighbours.c:2774 |
5365 | msgid "# unexpected CONNECT_ACK messages (no peer)" | 5354 | msgid "# unexpected CONNECT_ACK messages (no peer)" |
5366 | msgstr "# Mensajes «CONNECT_ACK» inesperados (sin par)" | 5355 | msgstr "# Mensajes «CONNECT_ACK» inesperados (sin par)" |
5367 | 5356 | ||
5368 | #: src/transport/gnunet-service-transport_neighbours.c:2785 | 5357 | #: src/transport/gnunet-service-transport_neighbours.c:2789 |
5369 | #: src/transport/gnunet-service-transport_neighbours.c:2819 | 5358 | #: src/transport/gnunet-service-transport_neighbours.c:2823 |
5370 | msgid "# unexpected CONNECT_ACK messages (not ready)" | 5359 | msgid "# unexpected CONNECT_ACK messages (not ready)" |
5371 | msgstr "# Mensajes «CONNECT_ACK» inesperados (no estaba preparado)" | 5360 | msgstr "# Mensajes «CONNECT_ACK» inesperados (no estaba preparado)" |
5372 | 5361 | ||
5373 | #: src/transport/gnunet-service-transport_neighbours.c:2832 | 5362 | #: src/transport/gnunet-service-transport_neighbours.c:2836 |
5374 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" | 5363 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" |
5375 | msgstr "# Mensajes «CONNECT_ACK» inesperados (esperando en el ATS)" | 5364 | msgstr "# Mensajes «CONNECT_ACK» inesperados (esperando en el ATS)" |
5376 | 5365 | ||
5377 | #: src/transport/gnunet-service-transport_neighbours.c:2865 | 5366 | #: src/transport/gnunet-service-transport_neighbours.c:2869 |
5378 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" | 5367 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" |
5379 | msgstr "# Mensajes «CONNECT_ACK» inesperados (desconectando)" | 5368 | msgstr "# Mensajes «CONNECT_ACK» inesperados (desconectando)" |
5380 | 5369 | ||
5381 | #: src/transport/gnunet-service-transport_neighbours.c:3046 | 5370 | #: src/transport/gnunet-service-transport_neighbours.c:3050 |
5382 | msgid "# unexpected SESSION ACK messages" | 5371 | msgid "# unexpected SESSION ACK messages" |
5383 | msgstr "# Mensajes «SESSION ACK» inesperados" | 5372 | msgstr "# Mensajes «SESSION ACK» inesperados" |
5384 | 5373 | ||
5385 | #: src/transport/gnunet-service-transport_neighbours.c:3101 | 5374 | #: src/transport/gnunet-service-transport_neighbours.c:3105 |
5386 | msgid "# SET QUOTA messages ignored (no such peer)" | 5375 | msgid "# SET QUOTA messages ignored (no such peer)" |
5387 | msgstr "# Mensajes «SET QUOTA» ignorados (no existe tal par)" | 5376 | msgstr "# Mensajes «SET QUOTA» ignorados (no existe tal par)" |
5388 | 5377 | ||
5389 | #: src/transport/gnunet-service-transport_neighbours.c:3115 | 5378 | #: src/transport/gnunet-service-transport_neighbours.c:3119 |
5390 | msgid "# disconnects due to quota of 0" | 5379 | msgid "# disconnects due to quota of 0" |
5391 | msgstr "# desconexiones debido a una cuota de 0" | 5380 | msgstr "# desconexiones debido a una cuota de 0" |
5392 | 5381 | ||
5393 | #: src/transport/gnunet-service-transport_neighbours.c:3146 | 5382 | #: src/transport/gnunet-service-transport_neighbours.c:3150 |
5394 | msgid "# disconnect messages ignored (old format)" | 5383 | msgid "# disconnect messages ignored (old format)" |
5395 | msgstr "# mensajes de desconexión ignorados (formato antiguo)" | 5384 | msgstr "# mensajes de desconexión ignorados (formato antiguo)" |
5396 | 5385 | ||
5397 | #: src/transport/gnunet-service-transport_neighbours.c:3157 | 5386 | #: src/transport/gnunet-service-transport_neighbours.c:3161 |
5398 | msgid "# disconnect messages ignored (timestamp)" | 5387 | msgid "# disconnect messages ignored (timestamp)" |
5399 | msgstr "# mensajes de desconexión ignorados (marca temporal)" | 5388 | msgstr "# mensajes de desconexión ignorados (marca temporal)" |
5400 | 5389 | ||
5401 | #: src/transport/gnunet-service-transport_neighbours.c:3188 | 5390 | #: src/transport/gnunet-service-transport_neighbours.c:3192 |
5402 | msgid "# other peer asked to disconnect from us" | 5391 | msgid "# other peer asked to disconnect from us" |
5403 | msgstr "# peticiones de otro par para desconectarse de nosotros" | 5392 | msgstr "# peticiones de otro par para desconectarse de nosotros" |
5404 | 5393 | ||
5405 | #: src/transport/gnunet-service-transport_neighbours.c:3283 | 5394 | #: src/transport/gnunet-service-transport_neighbours.c:3287 |
5406 | msgid "# disconnected from peer upon explicit request" | 5395 | msgid "# disconnected from peer upon explicit request" |
5407 | msgstr "# desconexiones del par debido a una petición explícita" | 5396 | msgstr "# desconexiones del par debido a una petición explícita" |
5408 | 5397 | ||
@@ -5837,66 +5826,66 @@ msgstr "# bytes enviados vía SMTP" | |||
5837 | msgid "# bytes dropped by SMTP (outgoing)" | 5826 | msgid "# bytes dropped by SMTP (outgoing)" |
5838 | msgstr "# bytes omitidos por SMTP (salientes)" | 5827 | msgstr "# bytes omitidos por SMTP (salientes)" |
5839 | 5828 | ||
5840 | #: src/transport/plugin_transport_tcp.c:595 | 5829 | #: src/transport/plugin_transport_tcp.c:596 |
5841 | #, c-format | 5830 | #, c-format |
5842 | msgid "Unexpected address length: %u bytes\n" | 5831 | msgid "Unexpected address length: %u bytes\n" |
5843 | msgstr "Longitud de dirección inesperada: %u bytes\n" | 5832 | msgstr "Longitud de dirección inesperada: %u bytes\n" |
5844 | 5833 | ||
5845 | #: src/transport/plugin_transport_tcp.c:771 | 5834 | #: src/transport/plugin_transport_tcp.c:772 |
5846 | #: src/transport/plugin_transport_tcp.c:860 | 5835 | #: src/transport/plugin_transport_tcp.c:861 |
5847 | #: src/transport/plugin_transport_tcp.c:910 | 5836 | #: src/transport/plugin_transport_tcp.c:911 |
5848 | #: src/transport/plugin_transport_tcp.c:996 | 5837 | #: src/transport/plugin_transport_tcp.c:997 |
5849 | #: src/transport/plugin_transport_tcp.c:1139 | 5838 | #: src/transport/plugin_transport_tcp.c:1140 |
5850 | #: src/transport/plugin_transport_tcp.c:1156 | 5839 | #: src/transport/plugin_transport_tcp.c:1157 |
5851 | msgid "# bytes currently in TCP buffers" | 5840 | msgid "# bytes currently in TCP buffers" |
5852 | msgstr "# bytes actualmente en los buffer TCP" | 5841 | msgstr "# bytes actualmente en los buffer TCP" |
5853 | 5842 | ||
5854 | #: src/transport/plugin_transport_tcp.c:778 | 5843 | #: src/transport/plugin_transport_tcp.c:779 |
5855 | #: src/transport/plugin_transport_tcp.c:967 | 5844 | #: src/transport/plugin_transport_tcp.c:968 |
5856 | #: src/transport/plugin_transport_tcp.c:1826 | 5845 | #: src/transport/plugin_transport_tcp.c:1827 |
5857 | #: src/transport/plugin_transport_tcp.c:2456 | 5846 | #: src/transport/plugin_transport_tcp.c:2460 |
5858 | msgid "# TCP sessions active" | 5847 | msgid "# TCP sessions active" |
5859 | msgstr "# Sesiones TCP activas" | 5848 | msgstr "# Sesiones TCP activas" |
5860 | 5849 | ||
5861 | #: src/transport/plugin_transport_tcp.c:864 | 5850 | #: src/transport/plugin_transport_tcp.c:865 |
5862 | msgid "# bytes discarded by TCP (timeout)" | 5851 | msgid "# bytes discarded by TCP (timeout)" |
5863 | msgstr "# bytes omitidos por TCP (expirados)" | 5852 | msgstr "# bytes omitidos por TCP (expirados)" |
5864 | 5853 | ||
5865 | #: src/transport/plugin_transport_tcp.c:913 | 5854 | #: src/transport/plugin_transport_tcp.c:914 |
5866 | msgid "# bytes transmitted via TCP" | 5855 | msgid "# bytes transmitted via TCP" |
5867 | msgstr "# bytes recibidos vía TCP" | 5856 | msgstr "# bytes recibidos vía TCP" |
5868 | 5857 | ||
5869 | #: src/transport/plugin_transport_tcp.c:1000 | 5858 | #: src/transport/plugin_transport_tcp.c:1001 |
5870 | msgid "# bytes discarded by TCP (disconnect)" | 5859 | msgid "# bytes discarded by TCP (disconnect)" |
5871 | msgstr "# bytes descartados por TCP (desconectado)" | 5860 | msgstr "# bytes descartados por TCP (desconectado)" |
5872 | 5861 | ||
5873 | #: src/transport/plugin_transport_tcp.c:1113 | 5862 | #: src/transport/plugin_transport_tcp.c:1114 |
5874 | #, c-format | 5863 | #, c-format |
5875 | msgid "Trying to send with invalid session %p\n" | 5864 | msgid "Trying to send with invalid session %p\n" |
5876 | msgstr "Intentando enviar con una sesión no válida %p\n" | 5865 | msgstr "Intentando enviar con una sesión no válida %p\n" |
5877 | 5866 | ||
5878 | #: src/transport/plugin_transport_tcp.c:1349 | 5867 | #: src/transport/plugin_transport_tcp.c:1350 |
5879 | #, c-format | 5868 | #, c-format |
5880 | msgid "Address of unexpected length: %u\n" | 5869 | msgid "Address of unexpected length: %u\n" |
5881 | msgstr "Dirección de tamaño inesperado: %u\n" | 5870 | msgstr "Dirección de tamaño inesperado: %u\n" |
5882 | 5871 | ||
5883 | #: src/transport/plugin_transport_tcp.c:1466 | 5872 | #: src/transport/plugin_transport_tcp.c:1467 |
5884 | msgid "# transport-service disconnect requests for TCP" | 5873 | msgid "# transport-service disconnect requests for TCP" |
5885 | msgstr "# peticiones de desconexión del servicio de transporte por TCP" | 5874 | msgstr "# peticiones de desconexión del servicio de transporte por TCP" |
5886 | 5875 | ||
5887 | #: src/transport/plugin_transport_tcp.c:1867 | 5876 | #: src/transport/plugin_transport_tcp.c:1868 |
5888 | msgid "# TCP WELCOME messages received" | 5877 | msgid "# TCP WELCOME messages received" |
5889 | msgstr "# Mensajes «WELCOME» TCP recibidos" | 5878 | msgstr "# Mensajes «WELCOME» TCP recibidos" |
5890 | 5879 | ||
5891 | #: src/transport/plugin_transport_tcp.c:2036 | 5880 | #: src/transport/plugin_transport_tcp.c:2037 |
5892 | msgid "# bytes received via TCP" | 5881 | msgid "# bytes received via TCP" |
5893 | msgstr "# bytes recibidos vía TCP" | 5882 | msgstr "# bytes recibidos vía TCP" |
5894 | 5883 | ||
5895 | #: src/transport/plugin_transport_tcp.c:2118 | 5884 | #: src/transport/plugin_transport_tcp.c:2119 |
5896 | msgid "# network-level TCP disconnect events" | 5885 | msgid "# network-level TCP disconnect events" |
5897 | msgstr "# eventos de desconexión TCP a nivel de red" | 5886 | msgstr "# eventos de desconexión TCP a nivel de red" |
5898 | 5887 | ||
5899 | #: src/transport/plugin_transport_tcp.c:2344 src/util/service.c:948 | 5888 | #: src/transport/plugin_transport_tcp.c:2345 src/util/service.c:948 |
5900 | #: src/util/service.c:954 | 5889 | #: src/util/service.c:954 |
5901 | #, c-format | 5890 | #, c-format |
5902 | msgid "Require valid port number for service `%s' in configuration!\n" | 5891 | msgid "Require valid port number for service `%s' in configuration!\n" |
@@ -5904,20 +5893,20 @@ msgstr "" | |||
5904 | "¡Se requiere un número de puerto válido para el servicio «%s» en la " | 5893 | "¡Se requiere un número de puerto válido para el servicio «%s» en la " |
5905 | "configuración!\n" | 5894 | "configuración!\n" |
5906 | 5895 | ||
5907 | #: src/transport/plugin_transport_tcp.c:2358 | 5896 | #: src/transport/plugin_transport_tcp.c:2359 |
5908 | msgid "Failed to start service.\n" | 5897 | msgid "Failed to start service.\n" |
5909 | msgstr "Se produjo un fallo al iniciar el servicio.\n" | 5898 | msgstr "Se produjo un fallo al iniciar el servicio.\n" |
5910 | 5899 | ||
5911 | #: src/transport/plugin_transport_tcp.c:2444 | 5900 | #: src/transport/plugin_transport_tcp.c:2448 |
5912 | #, c-format | 5901 | #, c-format |
5913 | msgid "TCP transport listening on port %llu\n" | 5902 | msgid "TCP transport listening on port %llu\n" |
5914 | msgstr "Transporte TCP escuchando en el puerto %llu\n" | 5903 | msgstr "Transporte TCP escuchando en el puerto %llu\n" |
5915 | 5904 | ||
5916 | #: src/transport/plugin_transport_tcp.c:2448 | 5905 | #: src/transport/plugin_transport_tcp.c:2452 |
5917 | msgid "TCP transport not listening on any port (client only)\n" | 5906 | msgid "TCP transport not listening on any port (client only)\n" |
5918 | msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n" | 5907 | msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n" |
5919 | 5908 | ||
5920 | #: src/transport/plugin_transport_tcp.c:2452 | 5909 | #: src/transport/plugin_transport_tcp.c:2456 |
5921 | #, c-format | 5910 | #, c-format |
5922 | msgid "TCP transport advertises itself as being on port %llu\n" | 5911 | msgid "TCP transport advertises itself as being on port %llu\n" |
5923 | msgstr "El transporte TCP anuncia que está en el puerto %llu\n" | 5912 | msgstr "El transporte TCP anuncia que está en el puerto %llu\n" |
@@ -5942,7 +5931,7 @@ msgstr "" | |||
5942 | "Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el " | 5931 | "Se produjo un fallo al establecer la opción de «broadcast» IPv4 para el " |
5943 | "«socket» en el puerto %d\n" | 5932 | "«socket» en el puerto %d\n" |
5944 | 5933 | ||
5945 | #: src/transport/plugin_transport_udp.c:2520 | 5934 | #: src/transport/plugin_transport_udp.c:2350 |
5946 | #, c-format | 5935 | #, c-format |
5947 | msgid "" | 5936 | msgid "" |
5948 | "UDP could not transmit message to `%s': Network seems down, please check " | 5937 | "UDP could not transmit message to `%s': Network seems down, please check " |
@@ -5951,7 +5940,7 @@ msgstr "" | |||
5951 | "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, " | 5940 | "UDP no pudo transmitir el mensaje a «%s»: La red parece caída, por favor, " |
5952 | "compruebe su configuración de red\n" | 5941 | "compruebe su configuración de red\n" |
5953 | 5942 | ||
5954 | #: src/transport/plugin_transport_udp.c:2534 | 5943 | #: src/transport/plugin_transport_udp.c:2364 |
5955 | #, c-format | 5944 | #, c-format |
5956 | msgid "" | 5945 | msgid "" |
5957 | "UDP could not transmit message to `%s': Please check your network " | 5946 | "UDP could not transmit message to `%s': Please check your network " |
@@ -5962,22 +5951,28 @@ msgstr "" | |||
5962 | "configuración de red y deshabilite IPv6 si su conexión carece de una " | 5951 | "configuración de red y deshabilite IPv6 si su conexión carece de una " |
5963 | "dirección IPv6 global\n" | 5952 | "dirección IPv6 global\n" |
5964 | 5953 | ||
5965 | #: src/transport/plugin_transport_udp.c:2775 | 5954 | #: src/transport/plugin_transport_udp.c:2664 |
5966 | msgid "Failed to open UDP sockets\n" | 5955 | msgid "Failed to open UDP sockets\n" |
5967 | msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" | 5956 | msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" |
5968 | 5957 | ||
5969 | #: src/transport/plugin_transport_udp.c:2851 | 5958 | #: src/transport/plugin_transport_udp.c:2762 |
5970 | #, c-format | 5959 | #, c-format |
5971 | msgid "Given `%s' option is out of range: %llu > %u\n" | 5960 | msgid "Given `%s' option is out of range: %llu > %u\n" |
5972 | msgstr "La opción «%s» dada está fuera de rango: %llu > %u\n" | 5961 | msgstr "La opción «%s» dada está fuera de rango: %llu > %u\n" |
5973 | 5962 | ||
5974 | #: src/transport/plugin_transport_udp.c:2894 | 5963 | #: src/transport/plugin_transport_udp.c:2805 |
5975 | #, c-format | 5964 | #, c-format |
5976 | msgid "Invalid IPv6 address: `%s'\n" | 5965 | msgid "Invalid IPv6 address: `%s'\n" |
5977 | msgstr "Dirección IPv6 no válida: «%s»\n" | 5966 | msgstr "Dirección IPv6 no válida: «%s»\n" |
5978 | 5967 | ||
5979 | #: src/transport/plugin_transport_unix.c:1353 | 5968 | #: src/transport/plugin_transport_udp.c:2862 |
5980 | msgid "Failed to open UNIX sockets\n" | 5969 | #, fuzzy |
5970 | msgid "Failed to create network sockets, plugin failed\n" | ||
5971 | msgstr "Se produjo un fallo al crear una nueva firma" | ||
5972 | |||
5973 | #: src/transport/plugin_transport_unix.c:1427 | ||
5974 | #, fuzzy | ||
5975 | msgid "Failed to open UNIX listen socket\n" | ||
5981 | msgstr "Se produjo un fallo al abrir los «sockets» UNIX\n" | 5976 | msgstr "Se produjo un fallo al abrir los «sockets» UNIX\n" |
5982 | 5977 | ||
5983 | #: src/transport/plugin_transport_wlan.c:580 | 5978 | #: src/transport/plugin_transport_wlan.c:580 |
@@ -6300,7 +6295,7 @@ msgstr "interrumpido por apagado" | |||
6300 | msgid "gnunet-ecc failed" | 6295 | msgid "gnunet-ecc failed" |
6301 | msgstr "«gnunet-ecc» falló" | 6296 | msgstr "«gnunet-ecc» falló" |
6302 | 6297 | ||
6303 | #: src/util/crypto_ecc.c:1045 | 6298 | #: src/util/crypto_ecc.c:1084 |
6304 | #, c-format | 6299 | #, c-format |
6305 | msgid "ECC signature verification failed at %s:%d: %s\n" | 6300 | msgid "ECC signature verification failed at %s:%d: %s\n" |
6306 | msgstr "La verificación de firma ECC falló en %s:%d: %s\n" | 6301 | msgstr "La verificación de firma ECC falló en %s:%d: %s\n" |
@@ -6567,19 +6562,19 @@ msgstr "No hay un manejador conocido para el subsistema «%s»\n" | |||
6567 | msgid "Perform default-actions for GNUnet URIs" | 6562 | msgid "Perform default-actions for GNUnet URIs" |
6568 | msgstr "Realizar las acciones predeterminadas para URI de GNUnet" | 6563 | msgstr "Realizar las acciones predeterminadas para URI de GNUnet" |
6569 | 6564 | ||
6570 | #: src/util/helper.c:271 | 6565 | #: src/util/helper.c:322 |
6571 | #, c-format | 6566 | #, c-format |
6572 | msgid "Error reading from `%s': %s\n" | 6567 | msgid "Error reading from `%s': %s\n" |
6573 | msgstr "Error leyendo de «%s»: %s\n" | 6568 | msgstr "Error leyendo de «%s»: %s\n" |
6574 | 6569 | ||
6575 | #: src/util/helper.c:316 | 6570 | #: src/util/helper.c:367 |
6576 | #, c-format | 6571 | #, c-format |
6577 | msgid "Failed to parse inbound message from helper `%s'\n" | 6572 | msgid "Failed to parse inbound message from helper `%s'\n" |
6578 | msgstr "" | 6573 | msgstr "" |
6579 | "Se produjo un fallo al procesar el mensaje interno del programa auxiliar " | 6574 | "Se produjo un fallo al procesar el mensaje interno del programa auxiliar " |
6580 | "«%s»\n" | 6575 | "«%s»\n" |
6581 | 6576 | ||
6582 | #: src/util/helper.c:537 | 6577 | #: src/util/helper.c:564 |
6583 | #, c-format | 6578 | #, c-format |
6584 | msgid "Error writing to `%s': %s\n" | 6579 | msgid "Error writing to `%s': %s\n" |
6585 | msgstr "Error escribiendo a «%s»: %s\n" | 6580 | msgstr "Error escribiendo a «%s»: %s\n" |
@@ -7097,6 +7092,15 @@ msgstr "Violación externa del protocolo detectada en %s:%d.\n" | |||
7097 | msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" | 7092 | msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" |
7098 | msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" | 7093 | msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" |
7099 | 7094 | ||
7095 | #~ msgid "No hosts-file specified on command line. Exiting.\n" | ||
7096 | #~ msgstr "" | ||
7097 | #~ "No se ha especificado el fichero de máquinas en la línea de comandos. " | ||
7098 | #~ "Saliendo.\n" | ||
7099 | |||
7100 | #~ msgid "number of search strings to read from search strings file" | ||
7101 | #~ msgstr "" | ||
7102 | #~ "número de cadenas de búsqueda a leer del fichero de cadenas de búsqueda" | ||
7103 | |||
7100 | # Miguel: "shutdown request" se refiere a finalizar el | 7104 | # Miguel: "shutdown request" se refiere a finalizar el |
7101 | # que hace de cliente. | 7105 | # que hace de cliente. |
7102 | #~ msgid "Failed to transmit shutdown request to client.\n" | 7106 | #~ msgid "Failed to transmit shutdown request to client.\n" |
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
8 | "Project-Id-Version: GNUnet 0.7.0b\n" | 8 | "Project-Id-Version: GNUnet 0.7.0b\n" |
9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" | 9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" |
10 | "POT-Creation-Date: 2013-04-27 12:39+0200\n" | 10 | "POT-Creation-Date: 2013-05-20 15:09+0200\n" |
11 | "PO-Revision-Date: 2006-01-21 17:16+0100\n" | 11 | "PO-Revision-Date: 2006-01-21 17:16+0100\n" |
12 | "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" | 12 | "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" |
13 | "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" | 13 | "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" |
@@ -35,89 +35,89 @@ msgstr "Kunde inte spara konfigurationsfil \"%s\":" | |||
35 | msgid "Failed to remove servicehome directory %s\n" | 35 | msgid "Failed to remove servicehome directory %s\n" |
36 | msgstr "Filformatsfel (inte en GNUnet-katalog?)\n" | 36 | msgstr "Filformatsfel (inte en GNUnet-katalog?)\n" |
37 | 37 | ||
38 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:712 | 38 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:962 |
39 | msgid "Message was sent successfully" | 39 | msgid "Message was sent successfully" |
40 | msgstr "" | 40 | msgstr "" |
41 | 41 | ||
42 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:714 | 42 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:964 |
43 | #, fuzzy | 43 | #, fuzzy |
44 | msgid "Misconfiguration (can't connect to the ARM service)" | 44 | msgid "Misconfiguration (can't connect to the ARM service)" |
45 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 45 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
46 | 46 | ||
47 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:716 | 47 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:966 |
48 | #, fuzzy | 48 | #, fuzzy |
49 | msgid "We disconnected from ARM before we could send a request" | 49 | msgid "We disconnected from ARM before we could send a request" |
50 | msgstr "# av anslutna parter" | 50 | msgstr "# av anslutna parter" |
51 | 51 | ||
52 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:718 | 52 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:968 |
53 | msgid "ARM API is busy" | 53 | msgid "ARM API is busy" |
54 | msgstr "" | 54 | msgstr "" |
55 | 55 | ||
56 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:720 | 56 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:970 |
57 | msgid "Request doesn't fit into a message" | 57 | msgid "Request doesn't fit into a message" |
58 | msgstr "" | 58 | msgstr "" |
59 | 59 | ||
60 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:722 | 60 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:972 |
61 | #, fuzzy | 61 | #, fuzzy |
62 | msgid "Request timed out" | 62 | msgid "Request timed out" |
63 | msgstr "# sessionsnycklar accepterade" | 63 | msgstr "# sessionsnycklar accepterade" |
64 | 64 | ||
65 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:724 | 65 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:974 |
66 | #, fuzzy | 66 | #, fuzzy |
67 | msgid "Unknown request status" | 67 | msgid "Unknown request status" |
68 | msgstr "Okänd operation \"%s\"\n" | 68 | msgstr "Okänd operation \"%s\"\n" |
69 | 69 | ||
70 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:740 | 70 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:990 |
71 | #, fuzzy, c-format | 71 | #, fuzzy, c-format |
72 | msgid "%s is stopped" | 72 | msgid "%s is stopped" |
73 | msgstr "# byte krypterade" | 73 | msgstr "# byte krypterade" |
74 | 74 | ||
75 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:742 | 75 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:992 |
76 | #, fuzzy, c-format | 76 | #, fuzzy, c-format |
77 | msgid "%s is starting" | 77 | msgid "%s is starting" |
78 | msgstr "\"%s\" startar\n" | 78 | msgstr "\"%s\" startar\n" |
79 | 79 | ||
80 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:744 | 80 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:994 |
81 | #, c-format | 81 | #, c-format |
82 | msgid "%s is stopping" | 82 | msgid "%s is stopping" |
83 | msgstr "" | 83 | msgstr "" |
84 | 84 | ||
85 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:746 | 85 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:996 |
86 | #, fuzzy, c-format | 86 | #, fuzzy, c-format |
87 | msgid "%s is starting already" | 87 | msgid "%s is starting already" |
88 | msgstr "\"%s\" startar\n" | 88 | msgstr "\"%s\" startar\n" |
89 | 89 | ||
90 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:748 | 90 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:998 |
91 | #, c-format | 91 | #, c-format |
92 | msgid "%s is stopping already" | 92 | msgid "%s is stopping already" |
93 | msgstr "" | 93 | msgstr "" |
94 | 94 | ||
95 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:750 | 95 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:1000 |
96 | #, c-format | 96 | #, c-format |
97 | msgid "%s is started already" | 97 | msgid "%s is started already" |
98 | msgstr "" | 98 | msgstr "" |
99 | 99 | ||
100 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:752 | 100 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:1002 |
101 | #, c-format | 101 | #, c-format |
102 | msgid "%s is stopped already" | 102 | msgid "%s is stopped already" |
103 | msgstr "" | 103 | msgstr "" |
104 | 104 | ||
105 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:754 | 105 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:1004 |
106 | #, fuzzy, c-format | 106 | #, fuzzy, c-format |
107 | msgid "%s service is not known to ARM" | 107 | msgid "%s service is not known to ARM" |
108 | msgstr "\"%s\" är inte en fil.\n" | 108 | msgstr "\"%s\" är inte en fil.\n" |
109 | 109 | ||
110 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:756 | 110 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:1006 |
111 | #, fuzzy, c-format | 111 | #, fuzzy, c-format |
112 | msgid "%s service failed to start" | 112 | msgid "%s service failed to start" |
113 | msgstr "Misslyckades att starta samling.\n" | 113 | msgstr "Misslyckades att starta samling.\n" |
114 | 114 | ||
115 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:758 | 115 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:1008 |
116 | #, c-format | 116 | #, c-format |
117 | msgid "%s service can't be started because ARM is shutting down" | 117 | msgid "%s service can't be started because ARM is shutting down" |
118 | msgstr "" | 118 | msgstr "" |
119 | 119 | ||
120 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:760 | 120 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:1010 |
121 | #, c-format | 121 | #, c-format |
122 | msgid "%.s Unknown result code." | 122 | msgid "%.s Unknown result code." |
123 | msgstr "" | 123 | msgstr "" |
@@ -841,8 +841,8 @@ msgstr "" | |||
841 | #: src/transport/gnunet-service-transport_neighbours.c:1041 | 841 | #: src/transport/gnunet-service-transport_neighbours.c:1041 |
842 | #: src/transport/gnunet-service-transport_neighbours.c:1265 | 842 | #: src/transport/gnunet-service-transport_neighbours.c:1265 |
843 | #: src/transport/gnunet-service-transport_neighbours.c:1274 | 843 | #: src/transport/gnunet-service-transport_neighbours.c:1274 |
844 | #: src/transport/gnunet-service-transport_neighbours.c:2794 | 844 | #: src/transport/gnunet-service-transport_neighbours.c:2798 |
845 | #: src/transport/gnunet-service-transport_neighbours.c:3053 | 845 | #: src/transport/gnunet-service-transport_neighbours.c:3057 |
846 | #, fuzzy | 846 | #, fuzzy |
847 | msgid "# peers connected" | 847 | msgid "# peers connected" |
848 | msgstr "# av anslutna parter" | 848 | msgstr "# av anslutna parter" |
@@ -1311,7 +1311,7 @@ msgstr "" | |||
1311 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 | 1311 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 |
1312 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 | 1312 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 |
1313 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 | 1313 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 |
1314 | #: src/nse/gnunet-nse-profiler.c:900 | 1314 | #: src/nse/gnunet-nse-profiler.c:899 |
1315 | msgid "be verbose (print progress information)" | 1315 | msgid "be verbose (print progress information)" |
1316 | msgstr "" | 1316 | msgstr "" |
1317 | 1317 | ||
@@ -2215,7 +2215,7 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | |||
2215 | msgid "no-name" | 2215 | msgid "no-name" |
2216 | msgstr "Visa namn" | 2216 | msgstr "Visa namn" |
2217 | 2217 | ||
2218 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:975 | 2218 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:1014 |
2219 | #, fuzzy, c-format | 2219 | #, fuzzy, c-format |
2220 | msgid "ECC signing failed at %s:%d: %s\n" | 2220 | msgid "ECC signing failed at %s:%d: %s\n" |
2221 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 2221 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
@@ -2418,12 +2418,12 @@ msgstr "" | |||
2418 | msgid "Unrecognized URI type" | 2418 | msgid "Unrecognized URI type" |
2419 | msgstr "" | 2419 | msgstr "" |
2420 | 2420 | ||
2421 | #: src/fs/fs_uri.c:898 | 2421 | #: src/fs/fs_uri.c:898 src/util/crypto_ecc.c:941 |
2422 | #, fuzzy | 2422 | #, fuzzy |
2423 | msgid "Lacking key configuration settings.\n" | 2423 | msgid "Lacking key configuration settings.\n" |
2424 | msgstr "GNUnet-konfiguration" | 2424 | msgstr "GNUnet-konfiguration" |
2425 | 2425 | ||
2426 | #: src/fs/fs_uri.c:904 | 2426 | #: src/fs/fs_uri.c:904 src/util/crypto_ecc.c:947 |
2427 | #, fuzzy, c-format | 2427 | #, fuzzy, c-format |
2428 | msgid "Could not access hostkey file `%s'.\n" | 2428 | msgid "Could not access hostkey file `%s'.\n" |
2429 | msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" | 2429 | msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" |
@@ -3736,16 +3736,16 @@ msgstr "" | |||
3736 | msgid "Hostlist file `%s' could not be removed\n" | 3736 | msgid "Hostlist file `%s' could not be removed\n" |
3737 | msgstr "" | 3737 | msgstr "" |
3738 | 3738 | ||
3739 | #: src/hostlist/hostlist-server.c:134 | 3739 | #: src/hostlist/hostlist-server.c:137 |
3740 | #, fuzzy | 3740 | #, fuzzy |
3741 | msgid "bytes in hostlist" | 3741 | msgid "bytes in hostlist" |
3742 | msgstr "# byte krypterade" | 3742 | msgstr "# byte krypterade" |
3743 | 3743 | ||
3744 | #: src/hostlist/hostlist-server.c:157 | 3744 | #: src/hostlist/hostlist-server.c:161 |
3745 | msgid "expired addresses encountered" | 3745 | msgid "expired addresses encountered" |
3746 | msgstr "" | 3746 | msgstr "" |
3747 | 3747 | ||
3748 | #: src/hostlist/hostlist-server.c:184 src/hostlist/hostlist-server.c:421 | 3748 | #: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:424 |
3749 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 | 3749 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 |
3750 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 | 3750 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 |
3751 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 | 3751 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 |
@@ -3754,83 +3754,83 @@ msgstr "" | |||
3754 | msgid "Error in communication with PEERINFO service: %s\n" | 3754 | msgid "Error in communication with PEERINFO service: %s\n" |
3755 | msgstr "Skriv ut information om GNUnets motparter." | 3755 | msgstr "Skriv ut information om GNUnets motparter." |
3756 | 3756 | ||
3757 | #: src/hostlist/hostlist-server.c:205 | 3757 | #: src/hostlist/hostlist-server.c:210 |
3758 | msgid "HELLOs without addresses encountered (ignored)" | 3758 | msgid "HELLOs without addresses encountered (ignored)" |
3759 | msgstr "" | 3759 | msgstr "" |
3760 | 3760 | ||
3761 | #: src/hostlist/hostlist-server.c:219 | 3761 | #: src/hostlist/hostlist-server.c:224 |
3762 | msgid "bytes not included in hostlist (size limit)" | 3762 | msgid "bytes not included in hostlist (size limit)" |
3763 | msgstr "" | 3763 | msgstr "" |
3764 | 3764 | ||
3765 | #: src/hostlist/hostlist-server.c:263 | 3765 | #: src/hostlist/hostlist-server.c:268 |
3766 | #, c-format | 3766 | #, c-format |
3767 | msgid "Refusing `%s' request to hostlist server\n" | 3767 | msgid "Refusing `%s' request to hostlist server\n" |
3768 | msgstr "" | 3768 | msgstr "" |
3769 | 3769 | ||
3770 | #: src/hostlist/hostlist-server.c:266 | 3770 | #: src/hostlist/hostlist-server.c:271 |
3771 | msgid "hostlist requests refused (not HTTP GET)" | 3771 | msgid "hostlist requests refused (not HTTP GET)" |
3772 | msgstr "" | 3772 | msgstr "" |
3773 | 3773 | ||
3774 | #: src/hostlist/hostlist-server.c:279 | 3774 | #: src/hostlist/hostlist-server.c:284 |
3775 | #, c-format | 3775 | #, c-format |
3776 | msgid "Refusing `%s' request with %llu bytes of upload data\n" | 3776 | msgid "Refusing `%s' request with %llu bytes of upload data\n" |
3777 | msgstr "" | 3777 | msgstr "" |
3778 | 3778 | ||
3779 | #: src/hostlist/hostlist-server.c:283 | 3779 | #: src/hostlist/hostlist-server.c:288 |
3780 | msgid "hostlist requests refused (upload data)" | 3780 | msgid "hostlist requests refused (upload data)" |
3781 | msgstr "" | 3781 | msgstr "" |
3782 | 3782 | ||
3783 | #: src/hostlist/hostlist-server.c:291 | 3783 | #: src/hostlist/hostlist-server.c:296 |
3784 | msgid "Could not handle hostlist request since I do not have a response yet\n" | 3784 | msgid "Could not handle hostlist request since I do not have a response yet\n" |
3785 | msgstr "" | 3785 | msgstr "" |
3786 | 3786 | ||
3787 | #: src/hostlist/hostlist-server.c:294 | 3787 | #: src/hostlist/hostlist-server.c:299 |
3788 | msgid "hostlist requests refused (not ready)" | 3788 | msgid "hostlist requests refused (not ready)" |
3789 | msgstr "" | 3789 | msgstr "" |
3790 | 3790 | ||
3791 | #: src/hostlist/hostlist-server.c:298 | 3791 | #: src/hostlist/hostlist-server.c:303 |
3792 | msgid "Received request for our hostlist\n" | 3792 | msgid "Received request for our hostlist\n" |
3793 | msgstr "" | 3793 | msgstr "" |
3794 | 3794 | ||
3795 | #: src/hostlist/hostlist-server.c:299 | 3795 | #: src/hostlist/hostlist-server.c:304 |
3796 | msgid "hostlist requests processed" | 3796 | msgid "hostlist requests processed" |
3797 | msgstr "" | 3797 | msgstr "" |
3798 | 3798 | ||
3799 | #: src/hostlist/hostlist-server.c:341 | 3799 | #: src/hostlist/hostlist-server.c:346 |
3800 | msgid "# hostlist advertisements send" | 3800 | msgid "# hostlist advertisements send" |
3801 | msgstr "" | 3801 | msgstr "" |
3802 | 3802 | ||
3803 | #: src/hostlist/hostlist-server.c:384 | 3803 | #: src/hostlist/hostlist-server.c:389 |
3804 | msgid "Advertisement message could not be queued by core\n" | 3804 | msgid "Advertisement message could not be queued by core\n" |
3805 | msgstr "" | 3805 | msgstr "" |
3806 | 3806 | ||
3807 | #: src/hostlist/hostlist-server.c:548 src/peerinfo-tool/gnunet-peerinfo.c:649 | 3807 | #: src/hostlist/hostlist-server.c:560 src/peerinfo-tool/gnunet-peerinfo.c:649 |
3808 | #: src/transport/gnunet-service-transport.c:661 | 3808 | #: src/transport/gnunet-service-transport.c:661 |
3809 | #, fuzzy | 3809 | #, fuzzy |
3810 | msgid "Could not access PEERINFO service. Exiting.\n" | 3810 | msgid "Could not access PEERINFO service. Exiting.\n" |
3811 | msgstr "Kunde inte komma åt namnrymdsinformation.\n" | 3811 | msgstr "Kunde inte komma åt namnrymdsinformation.\n" |
3812 | 3812 | ||
3813 | #: src/hostlist/hostlist-server.c:558 | 3813 | #: src/hostlist/hostlist-server.c:570 |
3814 | #, fuzzy, c-format | 3814 | #, fuzzy, c-format |
3815 | msgid "Invalid port number %llu. Exiting.\n" | 3815 | msgid "Invalid port number %llu. Exiting.\n" |
3816 | msgstr "Ogiltiga argument. Avslutar.\n" | 3816 | msgstr "Ogiltiga argument. Avslutar.\n" |
3817 | 3817 | ||
3818 | #: src/hostlist/hostlist-server.c:567 | 3818 | #: src/hostlist/hostlist-server.c:579 |
3819 | #, c-format | 3819 | #, c-format |
3820 | msgid "Hostlist service starts on %s:%llu\n" | 3820 | msgid "Hostlist service starts on %s:%llu\n" |
3821 | msgstr "" | 3821 | msgstr "" |
3822 | 3822 | ||
3823 | #: src/hostlist/hostlist-server.c:581 | 3823 | #: src/hostlist/hostlist-server.c:593 |
3824 | #, fuzzy, c-format | 3824 | #, fuzzy, c-format |
3825 | msgid "Address to obtain hostlist: `%s'\n" | 3825 | msgid "Address to obtain hostlist: `%s'\n" |
3826 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 3826 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
3827 | 3827 | ||
3828 | #: src/hostlist/hostlist-server.c:621 | 3828 | #: src/hostlist/hostlist-server.c:633 |
3829 | #, fuzzy, c-format | 3829 | #, fuzzy, c-format |
3830 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" | 3830 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" |
3831 | msgstr "\"%s\" är inte tillgänglig." | 3831 | msgstr "\"%s\" är inte tillgänglig." |
3832 | 3832 | ||
3833 | #: src/hostlist/hostlist-server.c:663 | 3833 | #: src/hostlist/hostlist-server.c:675 |
3834 | #, c-format | 3834 | #, c-format |
3835 | msgid "Could not start hostlist HTTP server on port %u\n" | 3835 | msgid "Could not start hostlist HTTP server on port %u\n" |
3836 | msgstr "" | 3836 | msgstr "" |
@@ -3870,11 +3870,11 @@ msgstr "Skriv ut information om GNUnets motparter." | |||
3870 | msgid "Print information about mesh tunnels and peers." | 3870 | msgid "Print information about mesh tunnels and peers." |
3871 | msgstr "Skriv ut information om GNUnets motparter." | 3871 | msgstr "Skriv ut information om GNUnets motparter." |
3872 | 3872 | ||
3873 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:7972 | 3873 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:4649 |
3874 | msgid "Wrong CORE service\n" | 3874 | msgid "Wrong CORE service\n" |
3875 | msgstr "" | 3875 | msgstr "" |
3876 | 3876 | ||
3877 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:8185 | 3877 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:4790 |
3878 | #, fuzzy, c-format | 3878 | #, fuzzy, c-format |
3879 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" | 3879 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" |
3880 | msgstr "Kunde inte komma åt namnrymdsinformation.\n" | 3880 | msgstr "Kunde inte komma åt namnrymdsinformation.\n" |
@@ -3882,14 +3882,13 @@ msgstr "Kunde inte komma åt namnrymdsinformation.\n" | |||
3882 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 | 3882 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 |
3883 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 | 3883 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 |
3884 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 | 3884 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 |
3885 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:8274 | 3885 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:4860 |
3886 | #: src/mesh/gnunet-service-mesh-new.c:8286 | 3886 | #: src/mesh/gnunet-service-mesh-new.c:4872 |
3887 | #: src/mesh/gnunet-service-mesh-new.c:8298 | 3887 | #: src/mesh/gnunet-service-mesh-new.c:4884 |
3888 | #: src/mesh/gnunet-service-mesh-new.c:8312 | 3888 | #: src/mesh/gnunet-service-mesh-new.c:4896 |
3889 | #: src/mesh/gnunet-service-mesh-new.c:8324 | 3889 | #: src/mesh/gnunet-service-mesh-new.c:4908 |
3890 | #: src/mesh/gnunet-service-mesh-new.c:8336 | 3890 | #: src/mesh/gnunet-service-mesh-new.c:4920 src/nse/gnunet-service-nse.c:1500 |
3891 | #: src/mesh/gnunet-service-mesh-new.c:8348 src/nse/gnunet-service-nse.c:1516 | 3891 | #: src/nse/gnunet-service-nse.c:1518 |
3892 | #: src/nse/gnunet-service-nse.c:1534 | ||
3893 | #: src/regex/gnunet-daemon-regexprofiler.c:320 | 3892 | #: src/regex/gnunet-daemon-regexprofiler.c:320 |
3894 | #: src/regex/gnunet-daemon-regexprofiler.c:332 | 3893 | #: src/regex/gnunet-daemon-regexprofiler.c:332 |
3895 | #: src/regex/gnunet-daemon-regexprofiler.c:344 | 3894 | #: src/regex/gnunet-daemon-regexprofiler.c:344 |
@@ -3900,9 +3899,9 @@ msgid "%s service is lacking key configuration settings (%s). Exiting.\n" | |||
3900 | msgstr "GNUnet-konfiguration" | 3899 | msgstr "GNUnet-konfiguration" |
3901 | 3900 | ||
3902 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 | 3901 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 |
3903 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:8360 | 3902 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:4932 |
3904 | #: src/mesh/gnunet-service-mesh-new.c:8370 | 3903 | #: src/mesh/gnunet-service-mesh-new.c:4942 |
3905 | #: src/mesh/gnunet-service-mesh-new.c:8381 | 3904 | #: src/mesh/gnunet-service-mesh-new.c:4953 |
3906 | #, fuzzy, c-format | 3905 | #, fuzzy, c-format |
3907 | msgid "" | 3906 | msgid "" |
3908 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" | 3907 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" |
@@ -4239,32 +4238,32 @@ msgstr "" | |||
4239 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" | 4238 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" |
4240 | msgstr "" | 4239 | msgstr "" |
4241 | 4240 | ||
4242 | #: src/nat/nat.c:795 | 4241 | #: src/nat/nat.c:834 |
4243 | #, c-format | 4242 | #, c-format |
4244 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" | 4243 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" |
4245 | msgstr "" | 4244 | msgstr "" |
4246 | 4245 | ||
4247 | #: src/nat/nat.c:844 | 4246 | #: src/nat/nat.c:883 |
4248 | #, fuzzy, c-format | 4247 | #, fuzzy, c-format |
4249 | msgid "Failed to start %s\n" | 4248 | msgid "Failed to start %s\n" |
4250 | msgstr "Misslyckades att starta samling.\n" | 4249 | msgstr "Misslyckades att starta samling.\n" |
4251 | 4250 | ||
4252 | #: src/nat/nat.c:1113 | 4251 | #: src/nat/nat.c:1152 |
4253 | msgid "malformed" | 4252 | msgid "malformed" |
4254 | msgstr "" | 4253 | msgstr "" |
4255 | 4254 | ||
4256 | #: src/nat/nat.c:1179 src/nat/nat.c:1191 | 4255 | #: src/nat/nat.c:1218 src/nat/nat.c:1230 |
4257 | #, c-format | 4256 | #, c-format |
4258 | msgid "" | 4257 | msgid "" |
4259 | "Configuration requires `%s', but binary is not installed properly (SUID bit " | 4258 | "Configuration requires `%s', but binary is not installed properly (SUID bit " |
4260 | "not set). Option disabled.\n" | 4259 | "not set). Option disabled.\n" |
4261 | msgstr "" | 4260 | msgstr "" |
4262 | 4261 | ||
4263 | #: src/nat/nat.c:1326 | 4262 | #: src/nat/nat.c:1365 |
4264 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" | 4263 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" |
4265 | msgstr "" | 4264 | msgstr "" |
4266 | 4265 | ||
4267 | #: src/nat/nat.c:1337 | 4266 | #: src/nat/nat.c:1376 |
4268 | #, c-format | 4267 | #, c-format |
4269 | msgid "Running gnunet-helper-nat-client %s %s %u\n" | 4268 | msgid "Running gnunet-helper-nat-client %s %s %u\n" |
4270 | msgstr "" | 4269 | msgstr "" |
@@ -4287,46 +4286,46 @@ msgstr "Misslyckades att ansluta till gnunetd.\n" | |||
4287 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" | 4286 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" |
4288 | msgstr "" | 4287 | msgstr "" |
4289 | 4288 | ||
4290 | #: src/nse/gnunet-nse-profiler.c:885 | 4289 | #: src/nse/gnunet-nse-profiler.c:884 |
4291 | #, fuzzy | 4290 | #, fuzzy |
4292 | msgid "limit to the number of connections to NSE services, 0 for none" | 4291 | msgid "limit to the number of connections to NSE services, 0 for none" |
4293 | msgstr "Misslyckades att ansluta till gnunetd.\n" | 4292 | msgstr "Misslyckades att ansluta till gnunetd.\n" |
4294 | 4293 | ||
4295 | #: src/nse/gnunet-nse-profiler.c:888 | 4294 | #: src/nse/gnunet-nse-profiler.c:887 |
4296 | msgid "name of the file for writing connection information and statistics" | 4295 | msgid "name of the file for writing connection information and statistics" |
4297 | msgstr "" | 4296 | msgstr "" |
4298 | 4297 | ||
4299 | #: src/nse/gnunet-nse-profiler.c:891 src/testbed/gnunet-testbed-profiler.c:282 | 4298 | #: src/nse/gnunet-nse-profiler.c:890 src/testbed/gnunet-testbed-profiler.c:284 |
4300 | msgid "name of the file with the login information for the testbed" | 4299 | msgid "name of the file with the login information for the testbed" |
4301 | msgstr "" | 4300 | msgstr "" |
4302 | 4301 | ||
4303 | #: src/nse/gnunet-nse-profiler.c:894 | 4302 | #: src/nse/gnunet-nse-profiler.c:893 |
4304 | msgid "name of the file for writing the main results" | 4303 | msgid "name of the file for writing the main results" |
4305 | msgstr "" | 4304 | msgstr "" |
4306 | 4305 | ||
4307 | #: src/nse/gnunet-nse-profiler.c:897 | 4306 | #: src/nse/gnunet-nse-profiler.c:896 |
4308 | msgid "Number of peers to run in each round, separated by commas" | 4307 | msgid "Number of peers to run in each round, separated by commas" |
4309 | msgstr "" | 4308 | msgstr "" |
4310 | 4309 | ||
4311 | #: src/nse/gnunet-nse-profiler.c:903 | 4310 | #: src/nse/gnunet-nse-profiler.c:902 |
4312 | msgid "delay between rounds" | 4311 | msgid "delay between rounds" |
4313 | msgstr "" | 4312 | msgstr "" |
4314 | 4313 | ||
4315 | #: src/nse/gnunet-nse-profiler.c:912 | 4314 | #: src/nse/gnunet-nse-profiler.c:911 |
4316 | #, fuzzy | 4315 | #, fuzzy |
4317 | msgid "Measure quality and performance of the NSE service." | 4316 | msgid "Measure quality and performance of the NSE service." |
4318 | msgstr "Kan inte tillgå tjänsten" | 4317 | msgstr "Kan inte tillgå tjänsten" |
4319 | 4318 | ||
4320 | #: src/nse/gnunet-service-nse.c:1405 | 4319 | #: src/nse/gnunet-service-nse.c:1419 |
4321 | #, fuzzy, c-format | 4320 | #, fuzzy, c-format |
4322 | msgid "NSE service could not access hostkey: %s\n" | 4321 | msgid "NSE service could not access hostkey: %s\n" |
4323 | msgstr "Kunde inte komma åt namnrymdsinformation.\n" | 4322 | msgstr "Kunde inte komma åt namnrymdsinformation.\n" |
4324 | 4323 | ||
4325 | #: src/nse/gnunet-service-nse.c:1419 | 4324 | #: src/nse/gnunet-service-nse.c:1433 |
4326 | msgid "NSE service is lacking key configuration settings. Exiting.\n" | 4325 | msgid "NSE service is lacking key configuration settings. Exiting.\n" |
4327 | msgstr "" | 4326 | msgstr "" |
4328 | 4327 | ||
4329 | #: src/nse/gnunet-service-nse.c:1524 | 4328 | #: src/nse/gnunet-service-nse.c:1508 |
4330 | #, fuzzy | 4329 | #, fuzzy |
4331 | msgid "Invalid work requirement for NSE service. Exiting.\n" | 4330 | msgid "Invalid work requirement for NSE service. Exiting.\n" |
4332 | msgstr "Ogiltiga argument. Avslutar.\n" | 4331 | msgstr "Ogiltiga argument. Avslutar.\n" |
@@ -4336,42 +4335,42 @@ msgstr "Ogiltiga argument. Avslutar.\n" | |||
4336 | msgid "Removing expired address of transport `%s'\n" | 4335 | msgid "Removing expired address of transport `%s'\n" |
4337 | msgstr "Tillgängliga transport(er): %s\n" | 4336 | msgstr "Tillgängliga transport(er): %s\n" |
4338 | 4337 | ||
4339 | #: src/peerinfo/gnunet-service-peerinfo.c:354 | 4338 | #: src/peerinfo/gnunet-service-peerinfo.c:355 |
4340 | #, fuzzy, c-format | 4339 | #, fuzzy, c-format |
4341 | msgid "Failed to parse HELLO in file `%s': %s\n" | 4340 | msgid "Failed to parse HELLO in file `%s': %s\n" |
4342 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 4341 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
4343 | 4342 | ||
4344 | #: src/peerinfo/gnunet-service-peerinfo.c:369 | 4343 | #: src/peerinfo/gnunet-service-peerinfo.c:370 |
4345 | #, fuzzy, c-format | 4344 | #, fuzzy, c-format |
4346 | msgid "Failed to parse HELLO in file `%s': %s %u \n" | 4345 | msgid "Failed to parse HELLO in file `%s': %s %u \n" |
4347 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 4346 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
4348 | 4347 | ||
4349 | #: src/peerinfo/gnunet-service-peerinfo.c:444 | 4348 | #: src/peerinfo/gnunet-service-peerinfo.c:445 |
4350 | msgid "# peers known" | 4349 | msgid "# peers known" |
4351 | msgstr "" | 4350 | msgstr "" |
4352 | 4351 | ||
4353 | #: src/peerinfo/gnunet-service-peerinfo.c:480 | 4352 | #: src/peerinfo/gnunet-service-peerinfo.c:481 |
4354 | #, c-format | 4353 | #, c-format |
4355 | msgid "" | 4354 | msgid "" |
4356 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" | 4355 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" |
4357 | msgstr "" | 4356 | msgstr "" |
4358 | 4357 | ||
4359 | #: src/peerinfo/gnunet-service-peerinfo.c:632 | 4358 | #: src/peerinfo/gnunet-service-peerinfo.c:633 |
4360 | #, fuzzy, c-format | 4359 | #, fuzzy, c-format |
4361 | msgid "Scanning directory `%s'\n" | 4360 | msgid "Scanning directory `%s'\n" |
4362 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 4361 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
4363 | 4362 | ||
4364 | #: src/peerinfo/gnunet-service-peerinfo.c:637 | 4363 | #: src/peerinfo/gnunet-service-peerinfo.c:638 |
4365 | #, c-format | 4364 | #, c-format |
4366 | msgid "Still no peers found in `%s'!\n" | 4365 | msgid "Still no peers found in `%s'!\n" |
4367 | msgstr "" | 4366 | msgstr "" |
4368 | 4367 | ||
4369 | #: src/peerinfo/gnunet-service-peerinfo.c:969 | 4368 | #: src/peerinfo/gnunet-service-peerinfo.c:970 |
4370 | #, fuzzy, c-format | 4369 | #, fuzzy, c-format |
4371 | msgid "Cleaning up directory `%s'\n" | 4370 | msgid "Cleaning up directory `%s'\n" |
4372 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 4371 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
4373 | 4372 | ||
4374 | #: src/peerinfo/gnunet-service-peerinfo.c:1249 | 4373 | #: src/peerinfo/gnunet-service-peerinfo.c:1250 |
4375 | #, c-format | 4374 | #, c-format |
4376 | msgid "Importing HELLOs from `%s'\n" | 4375 | msgid "Importing HELLOs from `%s'\n" |
4377 | msgstr "" | 4376 | msgstr "" |
@@ -4587,81 +4586,73 @@ msgstr "" | |||
4587 | msgid "Daemon to announce regular expressions for the peer using mesh." | 4586 | msgid "Daemon to announce regular expressions for the peer using mesh." |
4588 | msgstr "" | 4587 | msgstr "" |
4589 | 4588 | ||
4590 | #: src/regex/gnunet-regex-profiler.c:1246 | 4589 | #: src/regex/gnunet-regex-profiler.c:1247 |
4591 | #, fuzzy | 4590 | #, fuzzy |
4592 | msgid "No configuration file given. Exiting\n" | 4591 | msgid "No configuration file given. Exiting\n" |
4593 | msgstr "använd konfigurationsfil FILNAMN" | 4592 | msgstr "använd konfigurationsfil FILNAMN" |
4594 | 4593 | ||
4595 | #: src/regex/gnunet-regex-profiler.c:1257 | 4594 | #: src/regex/gnunet-regex-profiler.c:1258 |
4596 | #, fuzzy | 4595 | #, fuzzy |
4597 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" | 4596 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" |
4598 | msgstr "Konfigurationsfil \"%s\" skapad.\n" | 4597 | msgstr "Konfigurationsfil \"%s\" skapad.\n" |
4599 | 4598 | ||
4600 | #: src/regex/gnunet-regex-profiler.c:1276 | 4599 | #: src/regex/gnunet-regex-profiler.c:1287 |
4601 | msgid "No hosts-file specified on command line. Exiting.\n" | ||
4602 | msgstr "" | ||
4603 | |||
4604 | #: src/regex/gnunet-regex-profiler.c:1282 | ||
4605 | #: src/regex/gnunet-regex-simulation-profiler.c:622 | 4600 | #: src/regex/gnunet-regex-simulation-profiler.c:622 |
4606 | #, c-format | 4601 | #, c-format |
4607 | msgid "No policy directory specified on command line. Exiting.\n" | 4602 | msgid "No policy directory specified on command line. Exiting.\n" |
4608 | msgstr "" | 4603 | msgstr "" |
4609 | 4604 | ||
4610 | #: src/regex/gnunet-regex-profiler.c:1288 | 4605 | #: src/regex/gnunet-regex-profiler.c:1293 |
4611 | #: src/regex/gnunet-regex-simulation-profiler.c:629 | 4606 | #: src/regex/gnunet-regex-simulation-profiler.c:629 |
4612 | #, c-format | 4607 | #, c-format |
4613 | msgid "Specified policies directory does not exist. Exiting.\n" | 4608 | msgid "Specified policies directory does not exist. Exiting.\n" |
4614 | msgstr "" | 4609 | msgstr "" |
4615 | 4610 | ||
4616 | #: src/regex/gnunet-regex-profiler.c:1295 | 4611 | #: src/regex/gnunet-regex-profiler.c:1300 |
4617 | #, fuzzy, c-format | 4612 | #, fuzzy, c-format |
4618 | msgid "No files found in `%s'\n" | 4613 | msgid "No files found in `%s'\n" |
4619 | msgstr "%d filer hittades i katalog.\n" | 4614 | msgstr "%d filer hittades i katalog.\n" |
4620 | 4615 | ||
4621 | #: src/regex/gnunet-regex-profiler.c:1304 | 4616 | #: src/regex/gnunet-regex-profiler.c:1309 |
4622 | msgid "No search strings file given. Exiting.\n" | 4617 | msgid "No search strings file given. Exiting.\n" |
4623 | msgstr "" | 4618 | msgstr "" |
4624 | 4619 | ||
4625 | #: src/regex/gnunet-regex-profiler.c:1314 | 4620 | #: src/regex/gnunet-regex-profiler.c:1319 |
4626 | #, fuzzy | 4621 | #, fuzzy |
4627 | msgid "" | 4622 | msgid "" |
4628 | "Error loading search strings.Given file does not contain enough strings. " | 4623 | "Error loading search strings.Given file does not contain enough strings. " |
4629 | "Exiting.\n" | 4624 | "Exiting.\n" |
4630 | msgstr "Fel vid lämning av DHT.\n" | 4625 | msgstr "Fel vid lämning av DHT.\n" |
4631 | 4626 | ||
4632 | #: src/regex/gnunet-regex-profiler.c:1322 | 4627 | #: src/regex/gnunet-regex-profiler.c:1327 |
4633 | #, fuzzy | 4628 | #, fuzzy |
4634 | msgid "Error loading search strings. Exiting.\n" | 4629 | msgid "Error loading search strings. Exiting.\n" |
4635 | msgstr "Fel vid lämning av DHT.\n" | 4630 | msgstr "Fel vid lämning av DHT.\n" |
4636 | 4631 | ||
4637 | #: src/regex/gnunet-regex-profiler.c:1389 | 4632 | #: src/regex/gnunet-regex-profiler.c:1394 |
4638 | #, fuzzy | 4633 | #, fuzzy |
4639 | msgid "name of the file for writing statistics" | 4634 | msgid "name of the file for writing statistics" |
4640 | msgstr "Visa värde av alternativet" | 4635 | msgstr "Visa värde av alternativet" |
4641 | 4636 | ||
4642 | #: src/regex/gnunet-regex-profiler.c:1392 | 4637 | #: src/regex/gnunet-regex-profiler.c:1397 |
4643 | msgid "wait TIMEOUT before considering a string match as failed" | 4638 | msgid "wait TIMEOUT before ending the experiment" |
4644 | msgstr "" | ||
4645 | |||
4646 | #: src/regex/gnunet-regex-profiler.c:1395 | ||
4647 | msgid "number of search strings to read from search strings file" | ||
4648 | msgstr "" | 4639 | msgstr "" |
4649 | 4640 | ||
4650 | #: src/regex/gnunet-regex-profiler.c:1398 | 4641 | #: src/regex/gnunet-regex-profiler.c:1400 |
4651 | msgid "directory with policy files" | 4642 | msgid "directory with policy files" |
4652 | msgstr "" | 4643 | msgstr "" |
4653 | 4644 | ||
4654 | #: src/regex/gnunet-regex-profiler.c:1401 | 4645 | #: src/regex/gnunet-regex-profiler.c:1403 |
4655 | #, fuzzy | 4646 | #, fuzzy |
4656 | msgid "name of file with input strings" | 4647 | msgid "name of file with input strings" |
4657 | msgstr "Visa värde av alternativet" | 4648 | msgstr "Visa värde av alternativet" |
4658 | 4649 | ||
4659 | #: src/regex/gnunet-regex-profiler.c:1404 | 4650 | #: src/regex/gnunet-regex-profiler.c:1406 |
4660 | #, fuzzy | 4651 | #, fuzzy |
4661 | msgid "name of file with hosts' names" | 4652 | msgid "name of file with hosts' names" |
4662 | msgstr "Visa värde av alternativet" | 4653 | msgstr "Visa värde av alternativet" |
4663 | 4654 | ||
4664 | #: src/regex/gnunet-regex-profiler.c:1416 | 4655 | #: src/regex/gnunet-regex-profiler.c:1418 |
4665 | msgid "Profiler for regex" | 4656 | msgid "Profiler for regex" |
4666 | msgstr "" | 4657 | msgstr "" |
4667 | 4658 | ||
@@ -4779,7 +4770,7 @@ msgstr "" | |||
4779 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" | 4770 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" |
4780 | msgstr "" | 4771 | msgstr "" |
4781 | 4772 | ||
4782 | #: src/testbed/gnunet-service-testbed_cpustatus.c:670 | 4773 | #: src/testbed/gnunet-service-testbed_cpustatus.c:692 |
4783 | #, c-format | 4774 | #, c-format |
4784 | msgid "" | 4775 | msgid "" |
4785 | "Cannot open %s for writing load statistics. Not logging load statistics\n" | 4776 | "Cannot open %s for writing load statistics. Not logging load statistics\n" |
@@ -4790,26 +4781,26 @@ msgstr "" | |||
4790 | msgid "Job command file not given. Exiting\n" | 4781 | msgid "Job command file not given. Exiting\n" |
4791 | msgstr "använd konfigurationsfil FILNAMN" | 4782 | msgstr "använd konfigurationsfil FILNAMN" |
4792 | 4783 | ||
4793 | #: src/testbed/gnunet_testbed_mpi_spawn.c:135 | 4784 | #: src/testbed/gnunet_testbed_mpi_spawn.c:125 |
4794 | #, fuzzy | 4785 | #, fuzzy |
4795 | msgid "Waiting for child to exit.\n" | 4786 | msgid "Waiting for child to exit.\n" |
4796 | msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n" | 4787 | msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n" |
4797 | 4788 | ||
4798 | #: src/testbed/gnunet_testbed_mpi_spawn.c:296 | 4789 | #: src/testbed/gnunet_testbed_mpi_spawn.c:247 |
4799 | #, fuzzy, c-format | 4790 | #, fuzzy, c-format |
4800 | msgid "Spawning process `%s'\n" | 4791 | msgid "Spawning process `%s'\n" |
4801 | msgstr "Startade samling \"%s\".\n" | 4792 | msgstr "Startade samling \"%s\".\n" |
4802 | 4793 | ||
4803 | #: src/testbed/gnunet-testbed-profiler.c:249 | 4794 | #: src/testbed/gnunet-testbed-profiler.c:251 |
4804 | #, fuzzy, c-format | 4795 | #, fuzzy, c-format |
4805 | msgid "Exiting as the number of peers is %u\n" | 4796 | msgid "Exiting as the number of peers is %u\n" |
4806 | msgstr "Maximalt antal chattklienter uppnått.\n" | 4797 | msgstr "Maximalt antal chattklienter uppnått.\n" |
4807 | 4798 | ||
4808 | #: src/testbed/gnunet-testbed-profiler.c:275 | 4799 | #: src/testbed/gnunet-testbed-profiler.c:277 |
4809 | msgid "create COUNT number of peers" | 4800 | msgid "create COUNT number of peers" |
4810 | msgstr "" | 4801 | msgstr "" |
4811 | 4802 | ||
4812 | #: src/testbed/gnunet-testbed-profiler.c:278 | 4803 | #: src/testbed/gnunet-testbed-profiler.c:280 |
4813 | msgid "tolerate COUNT number of continious timeout failures" | 4804 | msgid "tolerate COUNT number of continious timeout failures" |
4814 | msgstr "" | 4805 | msgstr "" |
4815 | 4806 | ||
@@ -4828,55 +4819,55 @@ msgstr "" | |||
4828 | msgid "Hosts file %s cannot be read\n" | 4819 | msgid "Hosts file %s cannot be read\n" |
4829 | msgstr "" | 4820 | msgstr "" |
4830 | 4821 | ||
4831 | #: src/testbed/testbed_api_hosts.c:583 | 4822 | #: src/testbed/testbed_api_hosts.c:595 |
4832 | #, c-format | 4823 | #, c-format |
4833 | msgid "The function %s is only available when compiled with (--with-ll)\n" | 4824 | msgid "The function %s is only available when compiled with (--with-ll)\n" |
4834 | msgstr "" | 4825 | msgstr "" |
4835 | 4826 | ||
4836 | #: src/testbed/testbed_api_hosts.c:1856 | 4827 | #: src/testbed/testbed_api_hosts.c:1879 |
4837 | #, fuzzy, c-format | 4828 | #, fuzzy, c-format |
4838 | msgid "Adding host %u failed with error: %s\n" | 4829 | msgid "Adding host %u failed with error: %s\n" |
4839 | msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" | 4830 | msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" |
4840 | 4831 | ||
4841 | #: src/testbed/testbed_api_testbed.c:771 | 4832 | #: src/testbed/testbed_api_testbed.c:891 |
4842 | msgid "Linking controllers failed. Exiting" | 4833 | msgid "Linking controllers failed. Exiting" |
4843 | msgstr "" | 4834 | msgstr "" |
4844 | 4835 | ||
4845 | #: src/testbed/testbed_api_testbed.c:913 | 4836 | #: src/testbed/testbed_api_testbed.c:1094 |
4846 | #, c-format | 4837 | #, c-format |
4847 | msgid "Host registration failed for a host. Error: %s\n" | 4838 | msgid "Host registration failed for a host. Error: %s\n" |
4848 | msgstr "" | 4839 | msgstr "" |
4849 | 4840 | ||
4850 | #: src/testbed/testbed_api_testbed.c:978 | 4841 | #: src/testbed/testbed_api_testbed.c:1175 |
4851 | msgid "Controller crash detected. Shutting down.\n" | 4842 | msgid "Controller crash detected. Shutting down.\n" |
4852 | msgstr "" | 4843 | msgstr "" |
4853 | 4844 | ||
4854 | #: src/testbed/testbed_api_testbed.c:1081 | 4845 | #: src/testbed/testbed_api_testbed.c:1320 |
4855 | #, c-format | 4846 | #, c-format |
4856 | msgid "Host %s cannot start testbed\n" | 4847 | msgid "Host %s cannot start testbed\n" |
4857 | msgstr "" | 4848 | msgstr "" |
4858 | 4849 | ||
4859 | #: src/testbed/testbed_api_testbed.c:1085 | 4850 | #: src/testbed/testbed_api_testbed.c:1324 |
4860 | msgid "Testbed cannot be started on localhost\n" | 4851 | msgid "Testbed cannot be started on localhost\n" |
4861 | msgstr "" | 4852 | msgstr "" |
4862 | 4853 | ||
4863 | #: src/testbed/testbed_api_testbed.c:1120 | 4854 | #: src/testbed/testbed_api_testbed.c:1365 |
4864 | msgid "Cannot start the master controller" | 4855 | msgid "Cannot start the master controller" |
4865 | msgstr "" | 4856 | msgstr "" |
4866 | 4857 | ||
4867 | #: src/testbed/testbed_api_testbed.c:1138 | 4858 | #: src/testbed/testbed_api_testbed.c:1383 |
4868 | msgid "Shutting down testbed due to timeout while setup.\n" | 4859 | msgid "Shutting down testbed due to timeout while setup.\n" |
4869 | msgstr "" | 4860 | msgstr "" |
4870 | 4861 | ||
4871 | #: src/testbed/testbed_api_testbed.c:1197 | 4862 | #: src/testbed/testbed_api_testbed.c:1443 |
4872 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" | 4863 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" |
4873 | msgstr "" | 4864 | msgstr "" |
4874 | 4865 | ||
4875 | #: src/testbed/testbed_api_testbed.c:1209 | 4866 | #: src/testbed/testbed_api_testbed.c:1455 |
4876 | msgid "No hosts loaded. Need at least one host\n" | 4867 | msgid "No hosts loaded. Need at least one host\n" |
4877 | msgstr "" | 4868 | msgstr "" |
4878 | 4869 | ||
4879 | #: src/testbed/testbed_api_testbed.c:1233 | 4870 | #: src/testbed/testbed_api_testbed.c:1479 |
4880 | msgid "Specified topology must be supported by testbed" | 4871 | msgid "Specified topology must be supported by testbed" |
4881 | msgstr "" | 4872 | msgstr "" |
4882 | 4873 | ||
@@ -5023,7 +5014,7 @@ msgstr "Kunde inte spara konfigurationsfil \"%s\":" | |||
5023 | msgid "Failed to start `%s': %s\n" | 5014 | msgid "Failed to start `%s': %s\n" |
5024 | msgstr "Fel vid %s:%d.\n" | 5015 | msgstr "Fel vid %s:%d.\n" |
5025 | 5016 | ||
5026 | #: src/testing/testing.c:1691 | 5017 | #: src/testing/testing.c:1709 |
5027 | #, fuzzy, c-format | 5018 | #, fuzzy, c-format |
5028 | msgid "Failed to load configuration from %s\n" | 5019 | msgid "Failed to load configuration from %s\n" |
5029 | msgstr "Kunde inte spara konfigurationsfil \"%s\":" | 5020 | msgstr "Kunde inte spara konfigurationsfil \"%s\":" |
@@ -5175,7 +5166,7 @@ msgstr "" | |||
5175 | msgid "# bytes payload dropped (other peer was not connected)" | 5166 | msgid "# bytes payload dropped (other peer was not connected)" |
5176 | msgstr "" | 5167 | msgstr "" |
5177 | 5168 | ||
5178 | #: src/transport/gnunet-service-transport_clients.c:728 | 5169 | #: src/transport/gnunet-service-transport_clients.c:733 |
5179 | #, fuzzy | 5170 | #, fuzzy |
5180 | msgid "# REQUEST CONNECT messages received" | 5171 | msgid "# REQUEST CONNECT messages received" |
5181 | msgstr "# krypterade PONG-meddelanden mottagna" | 5172 | msgstr "# krypterade PONG-meddelanden mottagna" |
@@ -5246,53 +5237,53 @@ msgstr "" | |||
5246 | msgid "# ms throttling suggested" | 5237 | msgid "# ms throttling suggested" |
5247 | msgstr "" | 5238 | msgstr "" |
5248 | 5239 | ||
5249 | #: src/transport/gnunet-service-transport_neighbours.c:2770 | 5240 | #: src/transport/gnunet-service-transport_neighbours.c:2774 |
5250 | #, fuzzy | 5241 | #, fuzzy |
5251 | msgid "# unexpected CONNECT_ACK messages (no peer)" | 5242 | msgid "# unexpected CONNECT_ACK messages (no peer)" |
5252 | msgstr "skicka ANTAL meddelanden" | 5243 | msgstr "skicka ANTAL meddelanden" |
5253 | 5244 | ||
5254 | #: src/transport/gnunet-service-transport_neighbours.c:2785 | 5245 | #: src/transport/gnunet-service-transport_neighbours.c:2789 |
5255 | #: src/transport/gnunet-service-transport_neighbours.c:2819 | 5246 | #: src/transport/gnunet-service-transport_neighbours.c:2823 |
5256 | #, fuzzy | 5247 | #, fuzzy |
5257 | msgid "# unexpected CONNECT_ACK messages (not ready)" | 5248 | msgid "# unexpected CONNECT_ACK messages (not ready)" |
5258 | msgstr "skicka ANTAL meddelanden" | 5249 | msgstr "skicka ANTAL meddelanden" |
5259 | 5250 | ||
5260 | #: src/transport/gnunet-service-transport_neighbours.c:2832 | 5251 | #: src/transport/gnunet-service-transport_neighbours.c:2836 |
5261 | #, fuzzy | 5252 | #, fuzzy |
5262 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" | 5253 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" |
5263 | msgstr "skicka ANTAL meddelanden" | 5254 | msgstr "skicka ANTAL meddelanden" |
5264 | 5255 | ||
5265 | #: src/transport/gnunet-service-transport_neighbours.c:2865 | 5256 | #: src/transport/gnunet-service-transport_neighbours.c:2869 |
5266 | #, fuzzy | 5257 | #, fuzzy |
5267 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" | 5258 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" |
5268 | msgstr "skicka ANTAL meddelanden" | 5259 | msgstr "skicka ANTAL meddelanden" |
5269 | 5260 | ||
5270 | #: src/transport/gnunet-service-transport_neighbours.c:3046 | 5261 | #: src/transport/gnunet-service-transport_neighbours.c:3050 |
5271 | #, fuzzy | 5262 | #, fuzzy |
5272 | msgid "# unexpected SESSION ACK messages" | 5263 | msgid "# unexpected SESSION ACK messages" |
5273 | msgstr "# krypterade PONG-meddelanden skickade" | 5264 | msgstr "# krypterade PONG-meddelanden skickade" |
5274 | 5265 | ||
5275 | #: src/transport/gnunet-service-transport_neighbours.c:3101 | 5266 | #: src/transport/gnunet-service-transport_neighbours.c:3105 |
5276 | msgid "# SET QUOTA messages ignored (no such peer)" | 5267 | msgid "# SET QUOTA messages ignored (no such peer)" |
5277 | msgstr "" | 5268 | msgstr "" |
5278 | 5269 | ||
5279 | #: src/transport/gnunet-service-transport_neighbours.c:3115 | 5270 | #: src/transport/gnunet-service-transport_neighbours.c:3119 |
5280 | msgid "# disconnects due to quota of 0" | 5271 | msgid "# disconnects due to quota of 0" |
5281 | msgstr "" | 5272 | msgstr "" |
5282 | 5273 | ||
5283 | #: src/transport/gnunet-service-transport_neighbours.c:3146 | 5274 | #: src/transport/gnunet-service-transport_neighbours.c:3150 |
5284 | msgid "# disconnect messages ignored (old format)" | 5275 | msgid "# disconnect messages ignored (old format)" |
5285 | msgstr "" | 5276 | msgstr "" |
5286 | 5277 | ||
5287 | #: src/transport/gnunet-service-transport_neighbours.c:3157 | 5278 | #: src/transport/gnunet-service-transport_neighbours.c:3161 |
5288 | msgid "# disconnect messages ignored (timestamp)" | 5279 | msgid "# disconnect messages ignored (timestamp)" |
5289 | msgstr "" | 5280 | msgstr "" |
5290 | 5281 | ||
5291 | #: src/transport/gnunet-service-transport_neighbours.c:3188 | 5282 | #: src/transport/gnunet-service-transport_neighbours.c:3192 |
5292 | msgid "# other peer asked to disconnect from us" | 5283 | msgid "# other peer asked to disconnect from us" |
5293 | msgstr "" | 5284 | msgstr "" |
5294 | 5285 | ||
5295 | #: src/transport/gnunet-service-transport_neighbours.c:3283 | 5286 | #: src/transport/gnunet-service-transport_neighbours.c:3287 |
5296 | #, fuzzy | 5287 | #, fuzzy |
5297 | msgid "# disconnected from peer upon explicit request" | 5288 | msgid "# disconnected from peer upon explicit request" |
5298 | msgstr "# av anslutna parter" | 5289 | msgstr "# av anslutna parter" |
@@ -5715,92 +5706,92 @@ msgstr "# byte skickades via TCP" | |||
5715 | msgid "# bytes dropped by SMTP (outgoing)" | 5706 | msgid "# bytes dropped by SMTP (outgoing)" |
5716 | msgstr "# byte kastade via TCP (utgående)" | 5707 | msgstr "# byte kastade via TCP (utgående)" |
5717 | 5708 | ||
5718 | #: src/transport/plugin_transport_tcp.c:595 | 5709 | #: src/transport/plugin_transport_tcp.c:596 |
5719 | #, c-format | 5710 | #, c-format |
5720 | msgid "Unexpected address length: %u bytes\n" | 5711 | msgid "Unexpected address length: %u bytes\n" |
5721 | msgstr "" | 5712 | msgstr "" |
5722 | 5713 | ||
5723 | #: src/transport/plugin_transport_tcp.c:771 | 5714 | #: src/transport/plugin_transport_tcp.c:772 |
5724 | #: src/transport/plugin_transport_tcp.c:860 | 5715 | #: src/transport/plugin_transport_tcp.c:861 |
5725 | #: src/transport/plugin_transport_tcp.c:910 | 5716 | #: src/transport/plugin_transport_tcp.c:911 |
5726 | #: src/transport/plugin_transport_tcp.c:996 | 5717 | #: src/transport/plugin_transport_tcp.c:997 |
5727 | #: src/transport/plugin_transport_tcp.c:1139 | 5718 | #: src/transport/plugin_transport_tcp.c:1140 |
5728 | #: src/transport/plugin_transport_tcp.c:1156 | 5719 | #: src/transport/plugin_transport_tcp.c:1157 |
5729 | #, fuzzy | 5720 | #, fuzzy |
5730 | msgid "# bytes currently in TCP buffers" | 5721 | msgid "# bytes currently in TCP buffers" |
5731 | msgstr "# byte skickades via TCP" | 5722 | msgstr "# byte skickades via TCP" |
5732 | 5723 | ||
5733 | #: src/transport/plugin_transport_tcp.c:778 | 5724 | #: src/transport/plugin_transport_tcp.c:779 |
5734 | #: src/transport/plugin_transport_tcp.c:967 | 5725 | #: src/transport/plugin_transport_tcp.c:968 |
5735 | #: src/transport/plugin_transport_tcp.c:1826 | 5726 | #: src/transport/plugin_transport_tcp.c:1827 |
5736 | #: src/transport/plugin_transport_tcp.c:2456 | 5727 | #: src/transport/plugin_transport_tcp.c:2460 |
5737 | #, fuzzy | 5728 | #, fuzzy |
5738 | msgid "# TCP sessions active" | 5729 | msgid "# TCP sessions active" |
5739 | msgstr "# sessionsnycklar accepterade" | 5730 | msgstr "# sessionsnycklar accepterade" |
5740 | 5731 | ||
5741 | #: src/transport/plugin_transport_tcp.c:864 | 5732 | #: src/transport/plugin_transport_tcp.c:865 |
5742 | #, fuzzy | 5733 | #, fuzzy |
5743 | msgid "# bytes discarded by TCP (timeout)" | 5734 | msgid "# bytes discarded by TCP (timeout)" |
5744 | msgstr "# byte kastade via TCP (utgående)" | 5735 | msgstr "# byte kastade via TCP (utgående)" |
5745 | 5736 | ||
5746 | #: src/transport/plugin_transport_tcp.c:913 | 5737 | #: src/transport/plugin_transport_tcp.c:914 |
5747 | #, fuzzy | 5738 | #, fuzzy |
5748 | msgid "# bytes transmitted via TCP" | 5739 | msgid "# bytes transmitted via TCP" |
5749 | msgstr "# byte skickade av typen %d" | 5740 | msgstr "# byte skickade av typen %d" |
5750 | 5741 | ||
5751 | #: src/transport/plugin_transport_tcp.c:1000 | 5742 | #: src/transport/plugin_transport_tcp.c:1001 |
5752 | #, fuzzy | 5743 | #, fuzzy |
5753 | msgid "# bytes discarded by TCP (disconnect)" | 5744 | msgid "# bytes discarded by TCP (disconnect)" |
5754 | msgstr "# byte kastade via TCP (utgående)" | 5745 | msgstr "# byte kastade via TCP (utgående)" |
5755 | 5746 | ||
5756 | #: src/transport/plugin_transport_tcp.c:1113 | 5747 | #: src/transport/plugin_transport_tcp.c:1114 |
5757 | #, c-format | 5748 | #, c-format |
5758 | msgid "Trying to send with invalid session %p\n" | 5749 | msgid "Trying to send with invalid session %p\n" |
5759 | msgstr "" | 5750 | msgstr "" |
5760 | 5751 | ||
5761 | #: src/transport/plugin_transport_tcp.c:1349 | 5752 | #: src/transport/plugin_transport_tcp.c:1350 |
5762 | #, c-format | 5753 | #, c-format |
5763 | msgid "Address of unexpected length: %u\n" | 5754 | msgid "Address of unexpected length: %u\n" |
5764 | msgstr "" | 5755 | msgstr "" |
5765 | 5756 | ||
5766 | #: src/transport/plugin_transport_tcp.c:1466 | 5757 | #: src/transport/plugin_transport_tcp.c:1467 |
5767 | msgid "# transport-service disconnect requests for TCP" | 5758 | msgid "# transport-service disconnect requests for TCP" |
5768 | msgstr "" | 5759 | msgstr "" |
5769 | 5760 | ||
5770 | #: src/transport/plugin_transport_tcp.c:1867 | 5761 | #: src/transport/plugin_transport_tcp.c:1868 |
5771 | #, fuzzy | 5762 | #, fuzzy |
5772 | msgid "# TCP WELCOME messages received" | 5763 | msgid "# TCP WELCOME messages received" |
5773 | msgstr "# krypterade PONG-meddelanden mottagna" | 5764 | msgstr "# krypterade PONG-meddelanden mottagna" |
5774 | 5765 | ||
5775 | #: src/transport/plugin_transport_tcp.c:2036 | 5766 | #: src/transport/plugin_transport_tcp.c:2037 |
5776 | msgid "# bytes received via TCP" | 5767 | msgid "# bytes received via TCP" |
5777 | msgstr "# byte mottogs via TCP" | 5768 | msgstr "# byte mottogs via TCP" |
5778 | 5769 | ||
5779 | #: src/transport/plugin_transport_tcp.c:2118 | 5770 | #: src/transport/plugin_transport_tcp.c:2119 |
5780 | msgid "# network-level TCP disconnect events" | 5771 | msgid "# network-level TCP disconnect events" |
5781 | msgstr "" | 5772 | msgstr "" |
5782 | 5773 | ||
5783 | #: src/transport/plugin_transport_tcp.c:2344 src/util/service.c:948 | 5774 | #: src/transport/plugin_transport_tcp.c:2345 src/util/service.c:948 |
5784 | #: src/util/service.c:954 | 5775 | #: src/util/service.c:954 |
5785 | #, c-format | 5776 | #, c-format |
5786 | msgid "Require valid port number for service `%s' in configuration!\n" | 5777 | msgid "Require valid port number for service `%s' in configuration!\n" |
5787 | msgstr "" | 5778 | msgstr "" |
5788 | 5779 | ||
5789 | #: src/transport/plugin_transport_tcp.c:2358 | 5780 | #: src/transport/plugin_transport_tcp.c:2359 |
5790 | #, fuzzy | 5781 | #, fuzzy |
5791 | msgid "Failed to start service.\n" | 5782 | msgid "Failed to start service.\n" |
5792 | msgstr "Misslyckades att starta samling.\n" | 5783 | msgstr "Misslyckades att starta samling.\n" |
5793 | 5784 | ||
5794 | #: src/transport/plugin_transport_tcp.c:2444 | 5785 | #: src/transport/plugin_transport_tcp.c:2448 |
5795 | #, c-format | 5786 | #, c-format |
5796 | msgid "TCP transport listening on port %llu\n" | 5787 | msgid "TCP transport listening on port %llu\n" |
5797 | msgstr "" | 5788 | msgstr "" |
5798 | 5789 | ||
5799 | #: src/transport/plugin_transport_tcp.c:2448 | 5790 | #: src/transport/plugin_transport_tcp.c:2452 |
5800 | msgid "TCP transport not listening on any port (client only)\n" | 5791 | msgid "TCP transport not listening on any port (client only)\n" |
5801 | msgstr "" | 5792 | msgstr "" |
5802 | 5793 | ||
5803 | #: src/transport/plugin_transport_tcp.c:2452 | 5794 | #: src/transport/plugin_transport_tcp.c:2456 |
5804 | #, c-format | 5795 | #, c-format |
5805 | msgid "TCP transport advertises itself as being on port %llu\n" | 5796 | msgid "TCP transport advertises itself as being on port %llu\n" |
5806 | msgstr "" | 5797 | msgstr "" |
@@ -5825,14 +5816,14 @@ msgstr "" | |||
5825 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 5816 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
5826 | msgstr "" | 5817 | msgstr "" |
5827 | 5818 | ||
5828 | #: src/transport/plugin_transport_udp.c:2520 | 5819 | #: src/transport/plugin_transport_udp.c:2350 |
5829 | #, c-format | 5820 | #, c-format |
5830 | msgid "" | 5821 | msgid "" |
5831 | "UDP could not transmit message to `%s': Network seems down, please check " | 5822 | "UDP could not transmit message to `%s': Network seems down, please check " |
5832 | "your network configuration\n" | 5823 | "your network configuration\n" |
5833 | msgstr "" | 5824 | msgstr "" |
5834 | 5825 | ||
5835 | #: src/transport/plugin_transport_udp.c:2534 | 5826 | #: src/transport/plugin_transport_udp.c:2364 |
5836 | #, c-format | 5827 | #, c-format |
5837 | msgid "" | 5828 | msgid "" |
5838 | "UDP could not transmit message to `%s': Please check your network " | 5829 | "UDP could not transmit message to `%s': Please check your network " |
@@ -5840,24 +5831,29 @@ msgid "" | |||
5840 | "IPv6 address\n" | 5831 | "IPv6 address\n" |
5841 | msgstr "" | 5832 | msgstr "" |
5842 | 5833 | ||
5843 | #: src/transport/plugin_transport_udp.c:2775 | 5834 | #: src/transport/plugin_transport_udp.c:2664 |
5844 | #, fuzzy | 5835 | #, fuzzy |
5845 | msgid "Failed to open UDP sockets\n" | 5836 | msgid "Failed to open UDP sockets\n" |
5846 | msgstr "Misslyckades att binda till UDP6-port %d.\n" | 5837 | msgstr "Misslyckades att binda till UDP6-port %d.\n" |
5847 | 5838 | ||
5848 | #: src/transport/plugin_transport_udp.c:2851 | 5839 | #: src/transport/plugin_transport_udp.c:2762 |
5849 | #, c-format | 5840 | #, c-format |
5850 | msgid "Given `%s' option is out of range: %llu > %u\n" | 5841 | msgid "Given `%s' option is out of range: %llu > %u\n" |
5851 | msgstr "" | 5842 | msgstr "" |
5852 | 5843 | ||
5853 | #: src/transport/plugin_transport_udp.c:2894 | 5844 | #: src/transport/plugin_transport_udp.c:2805 |
5854 | #, fuzzy, c-format | 5845 | #, fuzzy, c-format |
5855 | msgid "Invalid IPv6 address: `%s'\n" | 5846 | msgid "Invalid IPv6 address: `%s'\n" |
5856 | msgstr "Ogiltigt svar på \"%s\".\n" | 5847 | msgstr "Ogiltigt svar på \"%s\".\n" |
5857 | 5848 | ||
5858 | #: src/transport/plugin_transport_unix.c:1353 | 5849 | #: src/transport/plugin_transport_udp.c:2862 |
5850 | #, fuzzy | ||
5851 | msgid "Failed to create network sockets, plugin failed\n" | ||
5852 | msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" | ||
5853 | |||
5854 | #: src/transport/plugin_transport_unix.c:1427 | ||
5859 | #, fuzzy | 5855 | #, fuzzy |
5860 | msgid "Failed to open UNIX sockets\n" | 5856 | msgid "Failed to open UNIX listen socket\n" |
5861 | msgstr "Misslyckades att leverera \"%s\" meddelande.\n" | 5857 | msgstr "Misslyckades att leverera \"%s\" meddelande.\n" |
5862 | 5858 | ||
5863 | #: src/transport/plugin_transport_wlan.c:580 | 5859 | #: src/transport/plugin_transport_wlan.c:580 |
@@ -6168,7 +6164,7 @@ msgstr "" | |||
6168 | msgid "gnunet-ecc failed" | 6164 | msgid "gnunet-ecc failed" |
6169 | msgstr "gnunet-update misslyckades!" | 6165 | msgstr "gnunet-update misslyckades!" |
6170 | 6166 | ||
6171 | #: src/util/crypto_ecc.c:1045 | 6167 | #: src/util/crypto_ecc.c:1084 |
6172 | #, fuzzy, c-format | 6168 | #, fuzzy, c-format |
6173 | msgid "ECC signature verification failed at %s:%d: %s\n" | 6169 | msgid "ECC signature verification failed at %s:%d: %s\n" |
6174 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" | 6170 | msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" |
@@ -6435,17 +6431,17 @@ msgstr "" | |||
6435 | msgid "Perform default-actions for GNUnet URIs" | 6431 | msgid "Perform default-actions for GNUnet URIs" |
6436 | msgstr "" | 6432 | msgstr "" |
6437 | 6433 | ||
6438 | #: src/util/helper.c:271 | 6434 | #: src/util/helper.c:322 |
6439 | #, fuzzy, c-format | 6435 | #, fuzzy, c-format |
6440 | msgid "Error reading from `%s': %s\n" | 6436 | msgid "Error reading from `%s': %s\n" |
6441 | msgstr "Fel vid skapandet av användare" | 6437 | msgstr "Fel vid skapandet av användare" |
6442 | 6438 | ||
6443 | #: src/util/helper.c:316 | 6439 | #: src/util/helper.c:367 |
6444 | #, fuzzy, c-format | 6440 | #, fuzzy, c-format |
6445 | msgid "Failed to parse inbound message from helper `%s'\n" | 6441 | msgid "Failed to parse inbound message from helper `%s'\n" |
6446 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" | 6442 | msgstr "Misslyckades att läsa kompislista från \"%s\"\n" |
6447 | 6443 | ||
6448 | #: src/util/helper.c:537 | 6444 | #: src/util/helper.c:564 |
6449 | #, fuzzy, c-format | 6445 | #, fuzzy, c-format |
6450 | msgid "Error writing to `%s': %s\n" | 6446 | msgid "Error writing to `%s': %s\n" |
6451 | msgstr "Fel vid skapandet av användare" | 6447 | msgstr "Fel vid skapandet av användare" |
@@ -8,7 +8,7 @@ msgid "" | |||
8 | msgstr "" | 8 | msgstr "" |
9 | "Project-Id-Version: gnunet 0.8.0a\n" | 9 | "Project-Id-Version: gnunet 0.8.0a\n" |
10 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" | 10 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" |
11 | "POT-Creation-Date: 2013-04-27 12:39+0200\n" | 11 | "POT-Creation-Date: 2013-05-20 15:09+0200\n" |
12 | "PO-Revision-Date: 2008-09-10 22:05+0930\n" | 12 | "PO-Revision-Date: 2008-09-10 22:05+0930\n" |
13 | "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" | 13 | "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" |
14 | "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" | 14 | "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" |
@@ -38,89 +38,89 @@ msgstr "Không thể lưu tập tin cấu hình « %s »:" | |||
38 | msgid "Failed to remove servicehome directory %s\n" | 38 | msgid "Failed to remove servicehome directory %s\n" |
39 | msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n" | 39 | msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n" |
40 | 40 | ||
41 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:712 | 41 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:962 |
42 | msgid "Message was sent successfully" | 42 | msgid "Message was sent successfully" |
43 | msgstr "" | 43 | msgstr "" |
44 | 44 | ||
45 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:714 | 45 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:964 |
46 | #, fuzzy | 46 | #, fuzzy |
47 | msgid "Misconfiguration (can't connect to the ARM service)" | 47 | msgid "Misconfiguration (can't connect to the ARM service)" |
48 | msgstr "Lỗi kết nối đến gnunetd.\n" | 48 | msgstr "Lỗi kết nối đến gnunetd.\n" |
49 | 49 | ||
50 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:716 | 50 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:966 |
51 | #, fuzzy | 51 | #, fuzzy |
52 | msgid "We disconnected from ARM before we could send a request" | 52 | msgid "We disconnected from ARM before we could send a request" |
53 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 53 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
54 | 54 | ||
55 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:718 | 55 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:968 |
56 | msgid "ARM API is busy" | 56 | msgid "ARM API is busy" |
57 | msgstr "" | 57 | msgstr "" |
58 | 58 | ||
59 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:720 | 59 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:970 |
60 | msgid "Request doesn't fit into a message" | 60 | msgid "Request doesn't fit into a message" |
61 | msgstr "" | 61 | msgstr "" |
62 | 62 | ||
63 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:722 | 63 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:972 |
64 | #, fuzzy | 64 | #, fuzzy |
65 | msgid "Request timed out" | 65 | msgid "Request timed out" |
66 | msgstr "# các khoá phiên chạy được chấp nhận" | 66 | msgstr "# các khoá phiên chạy được chấp nhận" |
67 | 67 | ||
68 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:724 | 68 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:974 |
69 | #, fuzzy | 69 | #, fuzzy |
70 | msgid "Unknown request status" | 70 | msgid "Unknown request status" |
71 | msgstr "Không rõ người dùng « %s »\n" | 71 | msgstr "Không rõ người dùng « %s »\n" |
72 | 72 | ||
73 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:740 | 73 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:990 |
74 | #, fuzzy, c-format | 74 | #, fuzzy, c-format |
75 | msgid "%s is stopped" | 75 | msgid "%s is stopped" |
76 | msgstr "# các byte trong kho dữ liệu" | 76 | msgstr "# các byte trong kho dữ liệu" |
77 | 77 | ||
78 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:742 | 78 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:992 |
79 | #, c-format | 79 | #, c-format |
80 | msgid "%s is starting" | 80 | msgid "%s is starting" |
81 | msgstr "" | 81 | msgstr "" |
82 | 82 | ||
83 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:744 | 83 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:994 |
84 | #, c-format | 84 | #, c-format |
85 | msgid "%s is stopping" | 85 | msgid "%s is stopping" |
86 | msgstr "" | 86 | msgstr "" |
87 | 87 | ||
88 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:746 | 88 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:996 |
89 | #, fuzzy, c-format | 89 | #, fuzzy, c-format |
90 | msgid "%s is starting already" | 90 | msgid "%s is starting already" |
91 | msgstr "« %s » đang đăng ký trình điều khiển %d\n" | 91 | msgstr "« %s » đang đăng ký trình điều khiển %d\n" |
92 | 92 | ||
93 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:748 | 93 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:998 |
94 | #, c-format | 94 | #, c-format |
95 | msgid "%s is stopping already" | 95 | msgid "%s is stopping already" |
96 | msgstr "" | 96 | msgstr "" |
97 | 97 | ||
98 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:750 | 98 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:1000 |
99 | #, c-format | 99 | #, c-format |
100 | msgid "%s is started already" | 100 | msgid "%s is started already" |
101 | msgstr "" | 101 | msgstr "" |
102 | 102 | ||
103 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:752 | 103 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:1002 |
104 | #, c-format | 104 | #, c-format |
105 | msgid "%s is stopped already" | 105 | msgid "%s is stopped already" |
106 | msgstr "" | 106 | msgstr "" |
107 | 107 | ||
108 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:754 | 108 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:1004 |
109 | #, fuzzy, c-format | 109 | #, fuzzy, c-format |
110 | msgid "%s service is not known to ARM" | 110 | msgid "%s service is not known to ARM" |
111 | msgstr "Không gian tên « %s » có đánh giá %d.\n" | 111 | msgstr "Không gian tên « %s » có đánh giá %d.\n" |
112 | 112 | ||
113 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:756 | 113 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:1006 |
114 | #, fuzzy, c-format | 114 | #, fuzzy, c-format |
115 | msgid "%s service failed to start" | 115 | msgid "%s service failed to start" |
116 | msgstr "Lỗi bắt đầu thu thập.\n" | 116 | msgstr "Lỗi bắt đầu thu thập.\n" |
117 | 117 | ||
118 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:758 | 118 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:1008 |
119 | #, fuzzy, c-format | 119 | #, fuzzy, c-format |
120 | msgid "%s service can't be started because ARM is shutting down" | 120 | msgid "%s service can't be started because ARM is shutting down" |
121 | msgstr "« %s » đang tắt.\n" | 121 | msgstr "« %s » đang tắt.\n" |
122 | 122 | ||
123 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:760 | 123 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:1010 |
124 | #, c-format | 124 | #, c-format |
125 | msgid "%.s Unknown result code." | 125 | msgid "%.s Unknown result code." |
126 | msgstr "" | 126 | msgstr "" |
@@ -848,8 +848,8 @@ msgstr "" | |||
848 | #: src/transport/gnunet-service-transport_neighbours.c:1041 | 848 | #: src/transport/gnunet-service-transport_neighbours.c:1041 |
849 | #: src/transport/gnunet-service-transport_neighbours.c:1265 | 849 | #: src/transport/gnunet-service-transport_neighbours.c:1265 |
850 | #: src/transport/gnunet-service-transport_neighbours.c:1274 | 850 | #: src/transport/gnunet-service-transport_neighbours.c:1274 |
851 | #: src/transport/gnunet-service-transport_neighbours.c:2794 | 851 | #: src/transport/gnunet-service-transport_neighbours.c:2798 |
852 | #: src/transport/gnunet-service-transport_neighbours.c:3053 | 852 | #: src/transport/gnunet-service-transport_neighbours.c:3057 |
853 | #, fuzzy | 853 | #, fuzzy |
854 | msgid "# peers connected" | 854 | msgid "# peers connected" |
855 | msgstr "# của các đồng đẳng đã kết nối" | 855 | msgstr "# của các đồng đẳng đã kết nối" |
@@ -1336,7 +1336,7 @@ msgstr "" | |||
1336 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 | 1336 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 |
1337 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 | 1337 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 |
1338 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 | 1338 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 |
1339 | #: src/nse/gnunet-nse-profiler.c:900 | 1339 | #: src/nse/gnunet-nse-profiler.c:899 |
1340 | msgid "be verbose (print progress information)" | 1340 | msgid "be verbose (print progress information)" |
1341 | msgstr "" | 1341 | msgstr "" |
1342 | 1342 | ||
@@ -2244,7 +2244,7 @@ msgstr "Lỗi phân tích dữ liệu giao diện từ « %s ».\n" | |||
2244 | msgid "no-name" | 2244 | msgid "no-name" |
2245 | msgstr "không-tên" | 2245 | msgstr "không-tên" |
2246 | 2246 | ||
2247 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:975 | 2247 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:1014 |
2248 | #, fuzzy, c-format | 2248 | #, fuzzy, c-format |
2249 | msgid "ECC signing failed at %s:%d: %s\n" | 2249 | msgid "ECC signing failed at %s:%d: %s\n" |
2250 | msgstr "%s bị lỗi tại %s:%d: « %s »\n" | 2250 | msgstr "%s bị lỗi tại %s:%d: « %s »\n" |
@@ -2442,12 +2442,12 @@ msgstr "" | |||
2442 | msgid "Unrecognized URI type" | 2442 | msgid "Unrecognized URI type" |
2443 | msgstr "" | 2443 | msgstr "" |
2444 | 2444 | ||
2445 | #: src/fs/fs_uri.c:898 | 2445 | #: src/fs/fs_uri.c:898 src/util/crypto_ecc.c:941 |
2446 | #, fuzzy | 2446 | #, fuzzy |
2447 | msgid "Lacking key configuration settings.\n" | 2447 | msgid "Lacking key configuration settings.\n" |
2448 | msgstr "Lưu cấu hình ngay bây giờ không?" | 2448 | msgstr "Lưu cấu hình ngay bây giờ không?" |
2449 | 2449 | ||
2450 | #: src/fs/fs_uri.c:904 | 2450 | #: src/fs/fs_uri.c:904 src/util/crypto_ecc.c:947 |
2451 | #, fuzzy, c-format | 2451 | #, fuzzy, c-format |
2452 | msgid "Could not access hostkey file `%s'.\n" | 2452 | msgid "Could not access hostkey file `%s'.\n" |
2453 | msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" | 2453 | msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" |
@@ -3800,16 +3800,16 @@ msgstr "" | |||
3800 | msgid "Hostlist file `%s' could not be removed\n" | 3800 | msgid "Hostlist file `%s' could not be removed\n" |
3801 | msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" | 3801 | msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" |
3802 | 3802 | ||
3803 | #: src/hostlist/hostlist-server.c:134 | 3803 | #: src/hostlist/hostlist-server.c:137 |
3804 | #, fuzzy | 3804 | #, fuzzy |
3805 | msgid "bytes in hostlist" | 3805 | msgid "bytes in hostlist" |
3806 | msgstr "# các byte trong kho dữ liệu" | 3806 | msgstr "# các byte trong kho dữ liệu" |
3807 | 3807 | ||
3808 | #: src/hostlist/hostlist-server.c:157 | 3808 | #: src/hostlist/hostlist-server.c:161 |
3809 | msgid "expired addresses encountered" | 3809 | msgid "expired addresses encountered" |
3810 | msgstr "" | 3810 | msgstr "" |
3811 | 3811 | ||
3812 | #: src/hostlist/hostlist-server.c:184 src/hostlist/hostlist-server.c:421 | 3812 | #: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:424 |
3813 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 | 3813 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 |
3814 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 | 3814 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 |
3815 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 | 3815 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 |
@@ -3818,89 +3818,89 @@ msgstr "" | |||
3818 | msgid "Error in communication with PEERINFO service: %s\n" | 3818 | msgid "Error in communication with PEERINFO service: %s\n" |
3819 | msgstr "Cổng để liên lạc với giao diện người dùng GNUnet" | 3819 | msgstr "Cổng để liên lạc với giao diện người dùng GNUnet" |
3820 | 3820 | ||
3821 | #: src/hostlist/hostlist-server.c:205 | 3821 | #: src/hostlist/hostlist-server.c:210 |
3822 | msgid "HELLOs without addresses encountered (ignored)" | 3822 | msgid "HELLOs without addresses encountered (ignored)" |
3823 | msgstr "" | 3823 | msgstr "" |
3824 | 3824 | ||
3825 | #: src/hostlist/hostlist-server.c:219 | 3825 | #: src/hostlist/hostlist-server.c:224 |
3826 | msgid "bytes not included in hostlist (size limit)" | 3826 | msgid "bytes not included in hostlist (size limit)" |
3827 | msgstr "" | 3827 | msgstr "" |
3828 | 3828 | ||
3829 | #: src/hostlist/hostlist-server.c:263 | 3829 | #: src/hostlist/hostlist-server.c:268 |
3830 | #, fuzzy, c-format | 3830 | #, fuzzy, c-format |
3831 | msgid "Refusing `%s' request to hostlist server\n" | 3831 | msgid "Refusing `%s' request to hostlist server\n" |
3832 | msgstr "trình phục vụ danh sách máy HTTP hợp nhất" | 3832 | msgstr "trình phục vụ danh sách máy HTTP hợp nhất" |
3833 | 3833 | ||
3834 | #: src/hostlist/hostlist-server.c:266 | 3834 | #: src/hostlist/hostlist-server.c:271 |
3835 | #, fuzzy | 3835 | #, fuzzy |
3836 | msgid "hostlist requests refused (not HTTP GET)" | 3836 | msgid "hostlist requests refused (not HTTP GET)" |
3837 | msgstr "# các yêu cầu danh sách máy được nhận" | 3837 | msgstr "# các yêu cầu danh sách máy được nhận" |
3838 | 3838 | ||
3839 | #: src/hostlist/hostlist-server.c:279 | 3839 | #: src/hostlist/hostlist-server.c:284 |
3840 | #, c-format | 3840 | #, c-format |
3841 | msgid "Refusing `%s' request with %llu bytes of upload data\n" | 3841 | msgid "Refusing `%s' request with %llu bytes of upload data\n" |
3842 | msgstr "" | 3842 | msgstr "" |
3843 | 3843 | ||
3844 | #: src/hostlist/hostlist-server.c:283 | 3844 | #: src/hostlist/hostlist-server.c:288 |
3845 | #, fuzzy | 3845 | #, fuzzy |
3846 | msgid "hostlist requests refused (upload data)" | 3846 | msgid "hostlist requests refused (upload data)" |
3847 | msgstr "# các yêu cầu danh sách máy được nhận" | 3847 | msgstr "# các yêu cầu danh sách máy được nhận" |
3848 | 3848 | ||
3849 | #: src/hostlist/hostlist-server.c:291 | 3849 | #: src/hostlist/hostlist-server.c:296 |
3850 | msgid "Could not handle hostlist request since I do not have a response yet\n" | 3850 | msgid "Could not handle hostlist request since I do not have a response yet\n" |
3851 | msgstr "" | 3851 | msgstr "" |
3852 | 3852 | ||
3853 | #: src/hostlist/hostlist-server.c:294 | 3853 | #: src/hostlist/hostlist-server.c:299 |
3854 | #, fuzzy | 3854 | #, fuzzy |
3855 | msgid "hostlist requests refused (not ready)" | 3855 | msgid "hostlist requests refused (not ready)" |
3856 | msgstr "# các yêu cầu danh sách máy được nhận" | 3856 | msgstr "# các yêu cầu danh sách máy được nhận" |
3857 | 3857 | ||
3858 | #: src/hostlist/hostlist-server.c:298 | 3858 | #: src/hostlist/hostlist-server.c:303 |
3859 | #, fuzzy | 3859 | #, fuzzy |
3860 | msgid "Received request for our hostlist\n" | 3860 | msgid "Received request for our hostlist\n" |
3861 | msgstr "Nhận yêu cầu định tuyến\n" | 3861 | msgstr "Nhận yêu cầu định tuyến\n" |
3862 | 3862 | ||
3863 | #: src/hostlist/hostlist-server.c:299 | 3863 | #: src/hostlist/hostlist-server.c:304 |
3864 | #, fuzzy | 3864 | #, fuzzy |
3865 | msgid "hostlist requests processed" | 3865 | msgid "hostlist requests processed" |
3866 | msgstr "# các yêu cầu danh sách máy được nhận" | 3866 | msgstr "# các yêu cầu danh sách máy được nhận" |
3867 | 3867 | ||
3868 | #: src/hostlist/hostlist-server.c:341 | 3868 | #: src/hostlist/hostlist-server.c:346 |
3869 | #, fuzzy | 3869 | #, fuzzy |
3870 | msgid "# hostlist advertisements send" | 3870 | msgid "# hostlist advertisements send" |
3871 | msgstr "# Các quảng cáo ngoại được chuyển tiếp" | 3871 | msgstr "# Các quảng cáo ngoại được chuyển tiếp" |
3872 | 3872 | ||
3873 | #: src/hostlist/hostlist-server.c:384 | 3873 | #: src/hostlist/hostlist-server.c:389 |
3874 | msgid "Advertisement message could not be queued by core\n" | 3874 | msgid "Advertisement message could not be queued by core\n" |
3875 | msgstr "" | 3875 | msgstr "" |
3876 | 3876 | ||
3877 | #: src/hostlist/hostlist-server.c:548 src/peerinfo-tool/gnunet-peerinfo.c:649 | 3877 | #: src/hostlist/hostlist-server.c:560 src/peerinfo-tool/gnunet-peerinfo.c:649 |
3878 | #: src/transport/gnunet-service-transport.c:661 | 3878 | #: src/transport/gnunet-service-transport.c:661 |
3879 | #, fuzzy | 3879 | #, fuzzy |
3880 | msgid "Could not access PEERINFO service. Exiting.\n" | 3880 | msgid "Could not access PEERINFO service. Exiting.\n" |
3881 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" | 3881 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" |
3882 | 3882 | ||
3883 | #: src/hostlist/hostlist-server.c:558 | 3883 | #: src/hostlist/hostlist-server.c:570 |
3884 | #, c-format | 3884 | #, c-format |
3885 | msgid "Invalid port number %llu. Exiting.\n" | 3885 | msgid "Invalid port number %llu. Exiting.\n" |
3886 | msgstr "" | 3886 | msgstr "" |
3887 | 3887 | ||
3888 | #: src/hostlist/hostlist-server.c:567 | 3888 | #: src/hostlist/hostlist-server.c:579 |
3889 | #, c-format | 3889 | #, c-format |
3890 | msgid "Hostlist service starts on %s:%llu\n" | 3890 | msgid "Hostlist service starts on %s:%llu\n" |
3891 | msgstr "" | 3891 | msgstr "" |
3892 | 3892 | ||
3893 | #: src/hostlist/hostlist-server.c:581 | 3893 | #: src/hostlist/hostlist-server.c:593 |
3894 | #, fuzzy, c-format | 3894 | #, fuzzy, c-format |
3895 | msgid "Address to obtain hostlist: `%s'\n" | 3895 | msgid "Address to obtain hostlist: `%s'\n" |
3896 | msgstr "Đang thử tải danh sách các máy xuống « %s »\n" | 3896 | msgstr "Đang thử tải danh sách các máy xuống « %s »\n" |
3897 | 3897 | ||
3898 | #: src/hostlist/hostlist-server.c:621 | 3898 | #: src/hostlist/hostlist-server.c:633 |
3899 | #, fuzzy, c-format | 3899 | #, fuzzy, c-format |
3900 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" | 3900 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" |
3901 | msgstr "« %s » không sẵn sàng.\n" | 3901 | msgstr "« %s » không sẵn sàng.\n" |
3902 | 3902 | ||
3903 | #: src/hostlist/hostlist-server.c:663 | 3903 | #: src/hostlist/hostlist-server.c:675 |
3904 | #, fuzzy, c-format | 3904 | #, fuzzy, c-format |
3905 | msgid "Could not start hostlist HTTP server on port %u\n" | 3905 | msgid "Could not start hostlist HTTP server on port %u\n" |
3906 | msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất" | 3906 | msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất" |
@@ -3939,11 +3939,11 @@ msgstr "In ra thông tin về các đồng đẳng GNUnet." | |||
3939 | msgid "Print information about mesh tunnels and peers." | 3939 | msgid "Print information about mesh tunnels and peers." |
3940 | msgstr "In ra thông tin về các đồng đẳng GNUnet." | 3940 | msgstr "In ra thông tin về các đồng đẳng GNUnet." |
3941 | 3941 | ||
3942 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:7972 | 3942 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:4649 |
3943 | msgid "Wrong CORE service\n" | 3943 | msgid "Wrong CORE service\n" |
3944 | msgstr "" | 3944 | msgstr "" |
3945 | 3945 | ||
3946 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:8185 | 3946 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:4790 |
3947 | #, fuzzy, c-format | 3947 | #, fuzzy, c-format |
3948 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" | 3948 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" |
3949 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" | 3949 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" |
@@ -3951,14 +3951,13 @@ msgstr "Không thể truy cập đến thông tin về không gian tên.\n" | |||
3951 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 | 3951 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 |
3952 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 | 3952 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 |
3953 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 | 3953 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 |
3954 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:8274 | 3954 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:4860 |
3955 | #: src/mesh/gnunet-service-mesh-new.c:8286 | 3955 | #: src/mesh/gnunet-service-mesh-new.c:4872 |
3956 | #: src/mesh/gnunet-service-mesh-new.c:8298 | 3956 | #: src/mesh/gnunet-service-mesh-new.c:4884 |
3957 | #: src/mesh/gnunet-service-mesh-new.c:8312 | 3957 | #: src/mesh/gnunet-service-mesh-new.c:4896 |
3958 | #: src/mesh/gnunet-service-mesh-new.c:8324 | 3958 | #: src/mesh/gnunet-service-mesh-new.c:4908 |
3959 | #: src/mesh/gnunet-service-mesh-new.c:8336 | 3959 | #: src/mesh/gnunet-service-mesh-new.c:4920 src/nse/gnunet-service-nse.c:1500 |
3960 | #: src/mesh/gnunet-service-mesh-new.c:8348 src/nse/gnunet-service-nse.c:1516 | 3960 | #: src/nse/gnunet-service-nse.c:1518 |
3961 | #: src/nse/gnunet-service-nse.c:1534 | ||
3962 | #: src/regex/gnunet-daemon-regexprofiler.c:320 | 3961 | #: src/regex/gnunet-daemon-regexprofiler.c:320 |
3963 | #: src/regex/gnunet-daemon-regexprofiler.c:332 | 3962 | #: src/regex/gnunet-daemon-regexprofiler.c:332 |
3964 | #: src/regex/gnunet-daemon-regexprofiler.c:344 | 3963 | #: src/regex/gnunet-daemon-regexprofiler.c:344 |
@@ -3969,9 +3968,9 @@ msgid "%s service is lacking key configuration settings (%s). Exiting.\n" | |||
3969 | msgstr "Lưu cấu hình ngay bây giờ không?" | 3968 | msgstr "Lưu cấu hình ngay bây giờ không?" |
3970 | 3969 | ||
3971 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 | 3970 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 |
3972 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:8360 | 3971 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:4932 |
3973 | #: src/mesh/gnunet-service-mesh-new.c:8370 | 3972 | #: src/mesh/gnunet-service-mesh-new.c:4942 |
3974 | #: src/mesh/gnunet-service-mesh-new.c:8381 | 3973 | #: src/mesh/gnunet-service-mesh-new.c:4953 |
3975 | #, fuzzy, c-format | 3974 | #, fuzzy, c-format |
3976 | msgid "" | 3975 | msgid "" |
3977 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" | 3976 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" |
@@ -4308,32 +4307,32 @@ msgstr "" | |||
4308 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" | 4307 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" |
4309 | msgstr "" | 4308 | msgstr "" |
4310 | 4309 | ||
4311 | #: src/nat/nat.c:795 | 4310 | #: src/nat/nat.c:834 |
4312 | #, c-format | 4311 | #, c-format |
4313 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" | 4312 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" |
4314 | msgstr "" | 4313 | msgstr "" |
4315 | 4314 | ||
4316 | #: src/nat/nat.c:844 | 4315 | #: src/nat/nat.c:883 |
4317 | #, fuzzy, c-format | 4316 | #, fuzzy, c-format |
4318 | msgid "Failed to start %s\n" | 4317 | msgid "Failed to start %s\n" |
4319 | msgstr "Lỗi bắt đầu thu thập.\n" | 4318 | msgstr "Lỗi bắt đầu thu thập.\n" |
4320 | 4319 | ||
4321 | #: src/nat/nat.c:1113 | 4320 | #: src/nat/nat.c:1152 |
4322 | msgid "malformed" | 4321 | msgid "malformed" |
4323 | msgstr "" | 4322 | msgstr "" |
4324 | 4323 | ||
4325 | #: src/nat/nat.c:1179 src/nat/nat.c:1191 | 4324 | #: src/nat/nat.c:1218 src/nat/nat.c:1230 |
4326 | #, c-format | 4325 | #, c-format |
4327 | msgid "" | 4326 | msgid "" |
4328 | "Configuration requires `%s', but binary is not installed properly (SUID bit " | 4327 | "Configuration requires `%s', but binary is not installed properly (SUID bit " |
4329 | "not set). Option disabled.\n" | 4328 | "not set). Option disabled.\n" |
4330 | msgstr "" | 4329 | msgstr "" |
4331 | 4330 | ||
4332 | #: src/nat/nat.c:1326 | 4331 | #: src/nat/nat.c:1365 |
4333 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" | 4332 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" |
4334 | msgstr "" | 4333 | msgstr "" |
4335 | 4334 | ||
4336 | #: src/nat/nat.c:1337 | 4335 | #: src/nat/nat.c:1376 |
4337 | #, c-format | 4336 | #, c-format |
4338 | msgid "Running gnunet-helper-nat-client %s %s %u\n" | 4337 | msgid "Running gnunet-helper-nat-client %s %s %u\n" |
4339 | msgstr "" | 4338 | msgstr "" |
@@ -4356,46 +4355,46 @@ msgstr "Lỗi kết nối đến gnunetd.\n" | |||
4356 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" | 4355 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" |
4357 | msgstr "" | 4356 | msgstr "" |
4358 | 4357 | ||
4359 | #: src/nse/gnunet-nse-profiler.c:885 | 4358 | #: src/nse/gnunet-nse-profiler.c:884 |
4360 | #, fuzzy | 4359 | #, fuzzy |
4361 | msgid "limit to the number of connections to NSE services, 0 for none" | 4360 | msgid "limit to the number of connections to NSE services, 0 for none" |
4362 | msgstr "Không kết nối được đến trình nền gnunetd." | 4361 | msgstr "Không kết nối được đến trình nền gnunetd." |
4363 | 4362 | ||
4364 | #: src/nse/gnunet-nse-profiler.c:888 | 4363 | #: src/nse/gnunet-nse-profiler.c:887 |
4365 | msgid "name of the file for writing connection information and statistics" | 4364 | msgid "name of the file for writing connection information and statistics" |
4366 | msgstr "" | 4365 | msgstr "" |
4367 | 4366 | ||
4368 | #: src/nse/gnunet-nse-profiler.c:891 src/testbed/gnunet-testbed-profiler.c:282 | 4367 | #: src/nse/gnunet-nse-profiler.c:890 src/testbed/gnunet-testbed-profiler.c:284 |
4369 | msgid "name of the file with the login information for the testbed" | 4368 | msgid "name of the file with the login information for the testbed" |
4370 | msgstr "" | 4369 | msgstr "" |
4371 | 4370 | ||
4372 | #: src/nse/gnunet-nse-profiler.c:894 | 4371 | #: src/nse/gnunet-nse-profiler.c:893 |
4373 | msgid "name of the file for writing the main results" | 4372 | msgid "name of the file for writing the main results" |
4374 | msgstr "" | 4373 | msgstr "" |
4375 | 4374 | ||
4376 | #: src/nse/gnunet-nse-profiler.c:897 | 4375 | #: src/nse/gnunet-nse-profiler.c:896 |
4377 | msgid "Number of peers to run in each round, separated by commas" | 4376 | msgid "Number of peers to run in each round, separated by commas" |
4378 | msgstr "" | 4377 | msgstr "" |
4379 | 4378 | ||
4380 | #: src/nse/gnunet-nse-profiler.c:903 | 4379 | #: src/nse/gnunet-nse-profiler.c:902 |
4381 | msgid "delay between rounds" | 4380 | msgid "delay between rounds" |
4382 | msgstr "" | 4381 | msgstr "" |
4383 | 4382 | ||
4384 | #: src/nse/gnunet-nse-profiler.c:912 | 4383 | #: src/nse/gnunet-nse-profiler.c:911 |
4385 | #, fuzzy | 4384 | #, fuzzy |
4386 | msgid "Measure quality and performance of the NSE service." | 4385 | msgid "Measure quality and performance of the NSE service." |
4387 | msgstr "Không thể truy cập đến dịch vụ" | 4386 | msgstr "Không thể truy cập đến dịch vụ" |
4388 | 4387 | ||
4389 | #: src/nse/gnunet-service-nse.c:1405 | 4388 | #: src/nse/gnunet-service-nse.c:1419 |
4390 | #, fuzzy, c-format | 4389 | #, fuzzy, c-format |
4391 | msgid "NSE service could not access hostkey: %s\n" | 4390 | msgid "NSE service could not access hostkey: %s\n" |
4392 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" | 4391 | msgstr "Không thể truy cập đến thông tin về không gian tên.\n" |
4393 | 4392 | ||
4394 | #: src/nse/gnunet-service-nse.c:1419 | 4393 | #: src/nse/gnunet-service-nse.c:1433 |
4395 | msgid "NSE service is lacking key configuration settings. Exiting.\n" | 4394 | msgid "NSE service is lacking key configuration settings. Exiting.\n" |
4396 | msgstr "" | 4395 | msgstr "" |
4397 | 4396 | ||
4398 | #: src/nse/gnunet-service-nse.c:1524 | 4397 | #: src/nse/gnunet-service-nse.c:1508 |
4399 | msgid "Invalid work requirement for NSE service. Exiting.\n" | 4398 | msgid "Invalid work requirement for NSE service. Exiting.\n" |
4400 | msgstr "" | 4399 | msgstr "" |
4401 | 4400 | ||
@@ -4404,21 +4403,21 @@ msgstr "" | |||
4404 | msgid "Removing expired address of transport `%s'\n" | 4403 | msgid "Removing expired address of transport `%s'\n" |
4405 | msgstr "Đã nạp truyền tải « %s »\n" | 4404 | msgstr "Đã nạp truyền tải « %s »\n" |
4406 | 4405 | ||
4407 | #: src/peerinfo/gnunet-service-peerinfo.c:354 | 4406 | #: src/peerinfo/gnunet-service-peerinfo.c:355 |
4408 | #, fuzzy, c-format | 4407 | #, fuzzy, c-format |
4409 | msgid "Failed to parse HELLO in file `%s': %s\n" | 4408 | msgid "Failed to parse HELLO in file `%s': %s\n" |
4410 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 4409 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
4411 | 4410 | ||
4412 | #: src/peerinfo/gnunet-service-peerinfo.c:369 | 4411 | #: src/peerinfo/gnunet-service-peerinfo.c:370 |
4413 | #, fuzzy, c-format | 4412 | #, fuzzy, c-format |
4414 | msgid "Failed to parse HELLO in file `%s': %s %u \n" | 4413 | msgid "Failed to parse HELLO in file `%s': %s %u \n" |
4415 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 4414 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
4416 | 4415 | ||
4417 | #: src/peerinfo/gnunet-service-peerinfo.c:444 | 4416 | #: src/peerinfo/gnunet-service-peerinfo.c:445 |
4418 | msgid "# peers known" | 4417 | msgid "# peers known" |
4419 | msgstr "" | 4418 | msgstr "" |
4420 | 4419 | ||
4421 | #: src/peerinfo/gnunet-service-peerinfo.c:480 | 4420 | #: src/peerinfo/gnunet-service-peerinfo.c:481 |
4422 | #, c-format | 4421 | #, c-format |
4423 | msgid "" | 4422 | msgid "" |
4424 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" | 4423 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" |
@@ -4426,22 +4425,22 @@ msgstr "" | |||
4426 | "Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ " | 4425 | "Tập tin « %s » trong thư mục « %s » không tùy theo quy ước đặt tên. Bị gỡ " |
4427 | "bỏ.\n" | 4426 | "bỏ.\n" |
4428 | 4427 | ||
4429 | #: src/peerinfo/gnunet-service-peerinfo.c:632 | 4428 | #: src/peerinfo/gnunet-service-peerinfo.c:633 |
4430 | #, fuzzy, c-format | 4429 | #, fuzzy, c-format |
4431 | msgid "Scanning directory `%s'\n" | 4430 | msgid "Scanning directory `%s'\n" |
4432 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 4431 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
4433 | 4432 | ||
4434 | #: src/peerinfo/gnunet-service-peerinfo.c:637 | 4433 | #: src/peerinfo/gnunet-service-peerinfo.c:638 |
4435 | #, c-format | 4434 | #, c-format |
4436 | msgid "Still no peers found in `%s'!\n" | 4435 | msgid "Still no peers found in `%s'!\n" |
4437 | msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" | 4436 | msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" |
4438 | 4437 | ||
4439 | #: src/peerinfo/gnunet-service-peerinfo.c:969 | 4438 | #: src/peerinfo/gnunet-service-peerinfo.c:970 |
4440 | #, fuzzy, c-format | 4439 | #, fuzzy, c-format |
4441 | msgid "Cleaning up directory `%s'\n" | 4440 | msgid "Cleaning up directory `%s'\n" |
4442 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 4441 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
4443 | 4442 | ||
4444 | #: src/peerinfo/gnunet-service-peerinfo.c:1249 | 4443 | #: src/peerinfo/gnunet-service-peerinfo.c:1250 |
4445 | #, c-format | 4444 | #, c-format |
4446 | msgid "Importing HELLOs from `%s'\n" | 4445 | msgid "Importing HELLOs from `%s'\n" |
4447 | msgstr "" | 4446 | msgstr "" |
@@ -4662,81 +4661,73 @@ msgstr "" | |||
4662 | msgid "Daemon to announce regular expressions for the peer using mesh." | 4661 | msgid "Daemon to announce regular expressions for the peer using mesh." |
4663 | msgstr "" | 4662 | msgstr "" |
4664 | 4663 | ||
4665 | #: src/regex/gnunet-regex-profiler.c:1246 | 4664 | #: src/regex/gnunet-regex-profiler.c:1247 |
4666 | #, fuzzy | 4665 | #, fuzzy |
4667 | msgid "No configuration file given. Exiting\n" | 4666 | msgid "No configuration file given. Exiting\n" |
4668 | msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" | 4667 | msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" |
4669 | 4668 | ||
4670 | #: src/regex/gnunet-regex-profiler.c:1257 | 4669 | #: src/regex/gnunet-regex-profiler.c:1258 |
4671 | #, fuzzy | 4670 | #, fuzzy |
4672 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" | 4671 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" |
4673 | msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" | 4672 | msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" |
4674 | 4673 | ||
4675 | #: src/regex/gnunet-regex-profiler.c:1276 | 4674 | #: src/regex/gnunet-regex-profiler.c:1287 |
4676 | msgid "No hosts-file specified on command line. Exiting.\n" | ||
4677 | msgstr "" | ||
4678 | |||
4679 | #: src/regex/gnunet-regex-profiler.c:1282 | ||
4680 | #: src/regex/gnunet-regex-simulation-profiler.c:622 | 4675 | #: src/regex/gnunet-regex-simulation-profiler.c:622 |
4681 | #, c-format | 4676 | #, c-format |
4682 | msgid "No policy directory specified on command line. Exiting.\n" | 4677 | msgid "No policy directory specified on command line. Exiting.\n" |
4683 | msgstr "" | 4678 | msgstr "" |
4684 | 4679 | ||
4685 | #: src/regex/gnunet-regex-profiler.c:1288 | 4680 | #: src/regex/gnunet-regex-profiler.c:1293 |
4686 | #: src/regex/gnunet-regex-simulation-profiler.c:629 | 4681 | #: src/regex/gnunet-regex-simulation-profiler.c:629 |
4687 | #, c-format | 4682 | #, c-format |
4688 | msgid "Specified policies directory does not exist. Exiting.\n" | 4683 | msgid "Specified policies directory does not exist. Exiting.\n" |
4689 | msgstr "" | 4684 | msgstr "" |
4690 | 4685 | ||
4691 | #: src/regex/gnunet-regex-profiler.c:1295 | 4686 | #: src/regex/gnunet-regex-profiler.c:1300 |
4692 | #, fuzzy, c-format | 4687 | #, fuzzy, c-format |
4693 | msgid "No files found in `%s'\n" | 4688 | msgid "No files found in `%s'\n" |
4694 | msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" | 4689 | msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" |
4695 | 4690 | ||
4696 | #: src/regex/gnunet-regex-profiler.c:1304 | 4691 | #: src/regex/gnunet-regex-profiler.c:1309 |
4697 | msgid "No search strings file given. Exiting.\n" | 4692 | msgid "No search strings file given. Exiting.\n" |
4698 | msgstr "" | 4693 | msgstr "" |
4699 | 4694 | ||
4700 | #: src/regex/gnunet-regex-profiler.c:1314 | 4695 | #: src/regex/gnunet-regex-profiler.c:1319 |
4701 | #, fuzzy | 4696 | #, fuzzy |
4702 | msgid "" | 4697 | msgid "" |
4703 | "Error loading search strings.Given file does not contain enough strings. " | 4698 | "Error loading search strings.Given file does not contain enough strings. " |
4704 | "Exiting.\n" | 4699 | "Exiting.\n" |
4705 | msgstr "Gặp lỗi khi tải xuống: %s\n" | 4700 | msgstr "Gặp lỗi khi tải xuống: %s\n" |
4706 | 4701 | ||
4707 | #: src/regex/gnunet-regex-profiler.c:1322 | 4702 | #: src/regex/gnunet-regex-profiler.c:1327 |
4708 | #, fuzzy | 4703 | #, fuzzy |
4709 | msgid "Error loading search strings. Exiting.\n" | 4704 | msgid "Error loading search strings. Exiting.\n" |
4710 | msgstr "Gặp lỗi khi tải xuống: %s\n" | 4705 | msgstr "Gặp lỗi khi tải xuống: %s\n" |
4711 | 4706 | ||
4712 | #: src/regex/gnunet-regex-profiler.c:1389 | 4707 | #: src/regex/gnunet-regex-profiler.c:1394 |
4713 | #, fuzzy | 4708 | #, fuzzy |
4714 | msgid "name of the file for writing statistics" | 4709 | msgid "name of the file for writing statistics" |
4715 | msgstr "Lỗi lấy thông kê về truyền tải.\n" | 4710 | msgstr "Lỗi lấy thông kê về truyền tải.\n" |
4716 | 4711 | ||
4717 | #: src/regex/gnunet-regex-profiler.c:1392 | 4712 | #: src/regex/gnunet-regex-profiler.c:1397 |
4718 | msgid "wait TIMEOUT before considering a string match as failed" | 4713 | msgid "wait TIMEOUT before ending the experiment" |
4719 | msgstr "" | ||
4720 | |||
4721 | #: src/regex/gnunet-regex-profiler.c:1395 | ||
4722 | msgid "number of search strings to read from search strings file" | ||
4723 | msgstr "" | 4714 | msgstr "" |
4724 | 4715 | ||
4725 | #: src/regex/gnunet-regex-profiler.c:1398 | 4716 | #: src/regex/gnunet-regex-profiler.c:1400 |
4726 | msgid "directory with policy files" | 4717 | msgid "directory with policy files" |
4727 | msgstr "" | 4718 | msgstr "" |
4728 | 4719 | ||
4729 | #: src/regex/gnunet-regex-profiler.c:1401 | 4720 | #: src/regex/gnunet-regex-profiler.c:1403 |
4730 | #, fuzzy | 4721 | #, fuzzy |
4731 | msgid "name of file with input strings" | 4722 | msgid "name of file with input strings" |
4732 | msgstr "Lỗi lấy thông kê về truyền tải.\n" | 4723 | msgstr "Lỗi lấy thông kê về truyền tải.\n" |
4733 | 4724 | ||
4734 | #: src/regex/gnunet-regex-profiler.c:1404 | 4725 | #: src/regex/gnunet-regex-profiler.c:1406 |
4735 | #, fuzzy | 4726 | #, fuzzy |
4736 | msgid "name of file with hosts' names" | 4727 | msgid "name of file with hosts' names" |
4737 | msgstr "Lỗi lấy thông kê về truyền tải.\n" | 4728 | msgstr "Lỗi lấy thông kê về truyền tải.\n" |
4738 | 4729 | ||
4739 | #: src/regex/gnunet-regex-profiler.c:1416 | 4730 | #: src/regex/gnunet-regex-profiler.c:1418 |
4740 | msgid "Profiler for regex" | 4731 | msgid "Profiler for regex" |
4741 | msgstr "" | 4732 | msgstr "" |
4742 | 4733 | ||
@@ -4853,7 +4844,7 @@ msgstr "" | |||
4853 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" | 4844 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" |
4854 | msgstr "" | 4845 | msgstr "" |
4855 | 4846 | ||
4856 | #: src/testbed/gnunet-service-testbed_cpustatus.c:670 | 4847 | #: src/testbed/gnunet-service-testbed_cpustatus.c:692 |
4857 | #, c-format | 4848 | #, c-format |
4858 | msgid "" | 4849 | msgid "" |
4859 | "Cannot open %s for writing load statistics. Not logging load statistics\n" | 4850 | "Cannot open %s for writing load statistics. Not logging load statistics\n" |
@@ -4864,26 +4855,26 @@ msgstr "" | |||
4864 | msgid "Job command file not given. Exiting\n" | 4855 | msgid "Job command file not given. Exiting\n" |
4865 | msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" | 4856 | msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" |
4866 | 4857 | ||
4867 | #: src/testbed/gnunet_testbed_mpi_spawn.c:135 | 4858 | #: src/testbed/gnunet_testbed_mpi_spawn.c:125 |
4868 | #, fuzzy | 4859 | #, fuzzy |
4869 | msgid "Waiting for child to exit.\n" | 4860 | msgid "Waiting for child to exit.\n" |
4870 | msgstr "Đang đợi các đồng đẳng kết nối" | 4861 | msgstr "Đang đợi các đồng đẳng kết nối" |
4871 | 4862 | ||
4872 | #: src/testbed/gnunet_testbed_mpi_spawn.c:296 | 4863 | #: src/testbed/gnunet_testbed_mpi_spawn.c:247 |
4873 | #, fuzzy, c-format | 4864 | #, fuzzy, c-format |
4874 | msgid "Spawning process `%s'\n" | 4865 | msgid "Spawning process `%s'\n" |
4875 | msgstr "Đang bắt đầu tài về « %s »\n" | 4866 | msgstr "Đang bắt đầu tài về « %s »\n" |
4876 | 4867 | ||
4877 | #: src/testbed/gnunet-testbed-profiler.c:249 | 4868 | #: src/testbed/gnunet-testbed-profiler.c:251 |
4878 | #, fuzzy, c-format | 4869 | #, fuzzy, c-format |
4879 | msgid "Exiting as the number of peers is %u\n" | 4870 | msgid "Exiting as the number of peers is %u\n" |
4880 | msgstr "tăng sổ tối đa các kết nối TCP/IP" | 4871 | msgstr "tăng sổ tối đa các kết nối TCP/IP" |
4881 | 4872 | ||
4882 | #: src/testbed/gnunet-testbed-profiler.c:275 | 4873 | #: src/testbed/gnunet-testbed-profiler.c:277 |
4883 | msgid "create COUNT number of peers" | 4874 | msgid "create COUNT number of peers" |
4884 | msgstr "" | 4875 | msgstr "" |
4885 | 4876 | ||
4886 | #: src/testbed/gnunet-testbed-profiler.c:278 | 4877 | #: src/testbed/gnunet-testbed-profiler.c:280 |
4887 | msgid "tolerate COUNT number of continious timeout failures" | 4878 | msgid "tolerate COUNT number of continious timeout failures" |
4888 | msgstr "" | 4879 | msgstr "" |
4889 | 4880 | ||
@@ -4902,55 +4893,55 @@ msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được | |||
4902 | msgid "Hosts file %s cannot be read\n" | 4893 | msgid "Hosts file %s cannot be read\n" |
4903 | msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" | 4894 | msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" |
4904 | 4895 | ||
4905 | #: src/testbed/testbed_api_hosts.c:583 | 4896 | #: src/testbed/testbed_api_hosts.c:595 |
4906 | #, c-format | 4897 | #, c-format |
4907 | msgid "The function %s is only available when compiled with (--with-ll)\n" | 4898 | msgid "The function %s is only available when compiled with (--with-ll)\n" |
4908 | msgstr "" | 4899 | msgstr "" |
4909 | 4900 | ||
4910 | #: src/testbed/testbed_api_hosts.c:1856 | 4901 | #: src/testbed/testbed_api_hosts.c:1879 |
4911 | #, fuzzy, c-format | 4902 | #, fuzzy, c-format |
4912 | msgid "Adding host %u failed with error: %s\n" | 4903 | msgid "Adding host %u failed with error: %s\n" |
4913 | msgstr "« %s » thất bại với mã lỗi %d: %s\n" | 4904 | msgstr "« %s » thất bại với mã lỗi %d: %s\n" |
4914 | 4905 | ||
4915 | #: src/testbed/testbed_api_testbed.c:771 | 4906 | #: src/testbed/testbed_api_testbed.c:891 |
4916 | msgid "Linking controllers failed. Exiting" | 4907 | msgid "Linking controllers failed. Exiting" |
4917 | msgstr "" | 4908 | msgstr "" |
4918 | 4909 | ||
4919 | #: src/testbed/testbed_api_testbed.c:913 | 4910 | #: src/testbed/testbed_api_testbed.c:1094 |
4920 | #, c-format | 4911 | #, c-format |
4921 | msgid "Host registration failed for a host. Error: %s\n" | 4912 | msgid "Host registration failed for a host. Error: %s\n" |
4922 | msgstr "" | 4913 | msgstr "" |
4923 | 4914 | ||
4924 | #: src/testbed/testbed_api_testbed.c:978 | 4915 | #: src/testbed/testbed_api_testbed.c:1175 |
4925 | msgid "Controller crash detected. Shutting down.\n" | 4916 | msgid "Controller crash detected. Shutting down.\n" |
4926 | msgstr "" | 4917 | msgstr "" |
4927 | 4918 | ||
4928 | #: src/testbed/testbed_api_testbed.c:1081 | 4919 | #: src/testbed/testbed_api_testbed.c:1320 |
4929 | #, c-format | 4920 | #, c-format |
4930 | msgid "Host %s cannot start testbed\n" | 4921 | msgid "Host %s cannot start testbed\n" |
4931 | msgstr "" | 4922 | msgstr "" |
4932 | 4923 | ||
4933 | #: src/testbed/testbed_api_testbed.c:1085 | 4924 | #: src/testbed/testbed_api_testbed.c:1324 |
4934 | msgid "Testbed cannot be started on localhost\n" | 4925 | msgid "Testbed cannot be started on localhost\n" |
4935 | msgstr "" | 4926 | msgstr "" |
4936 | 4927 | ||
4937 | #: src/testbed/testbed_api_testbed.c:1120 | 4928 | #: src/testbed/testbed_api_testbed.c:1365 |
4938 | msgid "Cannot start the master controller" | 4929 | msgid "Cannot start the master controller" |
4939 | msgstr "" | 4930 | msgstr "" |
4940 | 4931 | ||
4941 | #: src/testbed/testbed_api_testbed.c:1138 | 4932 | #: src/testbed/testbed_api_testbed.c:1383 |
4942 | msgid "Shutting down testbed due to timeout while setup.\n" | 4933 | msgid "Shutting down testbed due to timeout while setup.\n" |
4943 | msgstr "" | 4934 | msgstr "" |
4944 | 4935 | ||
4945 | #: src/testbed/testbed_api_testbed.c:1197 | 4936 | #: src/testbed/testbed_api_testbed.c:1443 |
4946 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" | 4937 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" |
4947 | msgstr "" | 4938 | msgstr "" |
4948 | 4939 | ||
4949 | #: src/testbed/testbed_api_testbed.c:1209 | 4940 | #: src/testbed/testbed_api_testbed.c:1455 |
4950 | msgid "No hosts loaded. Need at least one host\n" | 4941 | msgid "No hosts loaded. Need at least one host\n" |
4951 | msgstr "" | 4942 | msgstr "" |
4952 | 4943 | ||
4953 | #: src/testbed/testbed_api_testbed.c:1233 | 4944 | #: src/testbed/testbed_api_testbed.c:1479 |
4954 | msgid "Specified topology must be supported by testbed" | 4945 | msgid "Specified topology must be supported by testbed" |
4955 | msgstr "" | 4946 | msgstr "" |
4956 | 4947 | ||
@@ -5097,7 +5088,7 @@ msgstr "Không thể lưu tập tin cấu hình « %s »:" | |||
5097 | msgid "Failed to start `%s': %s\n" | 5088 | msgid "Failed to start `%s': %s\n" |
5098 | msgstr "Lỗi chạy %s: %s %d\n" | 5089 | msgstr "Lỗi chạy %s: %s %d\n" |
5099 | 5090 | ||
5100 | #: src/testing/testing.c:1691 | 5091 | #: src/testing/testing.c:1709 |
5101 | #, fuzzy, c-format | 5092 | #, fuzzy, c-format |
5102 | msgid "Failed to load configuration from %s\n" | 5093 | msgid "Failed to load configuration from %s\n" |
5103 | msgstr "Không thể lưu tập tin cấu hình « %s »:" | 5094 | msgstr "Không thể lưu tập tin cấu hình « %s »:" |
@@ -5257,7 +5248,7 @@ msgstr "" | |||
5257 | msgid "# bytes payload dropped (other peer was not connected)" | 5248 | msgid "# bytes payload dropped (other peer was not connected)" |
5258 | msgstr "" | 5249 | msgstr "" |
5259 | 5250 | ||
5260 | #: src/transport/gnunet-service-transport_clients.c:728 | 5251 | #: src/transport/gnunet-service-transport_clients.c:733 |
5261 | #, fuzzy | 5252 | #, fuzzy |
5262 | msgid "# REQUEST CONNECT messages received" | 5253 | msgid "# REQUEST CONNECT messages received" |
5263 | msgstr "# các thông báo PONG đã mật mã được nhận" | 5254 | msgstr "# các thông báo PONG đã mật mã được nhận" |
@@ -5330,53 +5321,53 @@ msgstr "theo dõi gnunetd sử dụng dải thông" | |||
5330 | msgid "# ms throttling suggested" | 5321 | msgid "# ms throttling suggested" |
5331 | msgstr "" | 5322 | msgstr "" |
5332 | 5323 | ||
5333 | #: src/transport/gnunet-service-transport_neighbours.c:2770 | 5324 | #: src/transport/gnunet-service-transport_neighbours.c:2774 |
5334 | #, fuzzy | 5325 | #, fuzzy |
5335 | msgid "# unexpected CONNECT_ACK messages (no peer)" | 5326 | msgid "# unexpected CONNECT_ACK messages (no peer)" |
5336 | msgstr "gửi ĐẾM thông báo" | 5327 | msgstr "gửi ĐẾM thông báo" |
5337 | 5328 | ||
5338 | #: src/transport/gnunet-service-transport_neighbours.c:2785 | 5329 | #: src/transport/gnunet-service-transport_neighbours.c:2789 |
5339 | #: src/transport/gnunet-service-transport_neighbours.c:2819 | 5330 | #: src/transport/gnunet-service-transport_neighbours.c:2823 |
5340 | #, fuzzy | 5331 | #, fuzzy |
5341 | msgid "# unexpected CONNECT_ACK messages (not ready)" | 5332 | msgid "# unexpected CONNECT_ACK messages (not ready)" |
5342 | msgstr "gửi ĐẾM thông báo" | 5333 | msgstr "gửi ĐẾM thông báo" |
5343 | 5334 | ||
5344 | #: src/transport/gnunet-service-transport_neighbours.c:2832 | 5335 | #: src/transport/gnunet-service-transport_neighbours.c:2836 |
5345 | #, fuzzy | 5336 | #, fuzzy |
5346 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" | 5337 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" |
5347 | msgstr "gửi ĐẾM thông báo" | 5338 | msgstr "gửi ĐẾM thông báo" |
5348 | 5339 | ||
5349 | #: src/transport/gnunet-service-transport_neighbours.c:2865 | 5340 | #: src/transport/gnunet-service-transport_neighbours.c:2869 |
5350 | #, fuzzy | 5341 | #, fuzzy |
5351 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" | 5342 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" |
5352 | msgstr "gửi ĐẾM thông báo" | 5343 | msgstr "gửi ĐẾM thông báo" |
5353 | 5344 | ||
5354 | #: src/transport/gnunet-service-transport_neighbours.c:3046 | 5345 | #: src/transport/gnunet-service-transport_neighbours.c:3050 |
5355 | #, fuzzy | 5346 | #, fuzzy |
5356 | msgid "# unexpected SESSION ACK messages" | 5347 | msgid "# unexpected SESSION ACK messages" |
5357 | msgstr "# các thông báo PONG đã mật mã được gửi" | 5348 | msgstr "# các thông báo PONG đã mật mã được gửi" |
5358 | 5349 | ||
5359 | #: src/transport/gnunet-service-transport_neighbours.c:3101 | 5350 | #: src/transport/gnunet-service-transport_neighbours.c:3105 |
5360 | msgid "# SET QUOTA messages ignored (no such peer)" | 5351 | msgid "# SET QUOTA messages ignored (no such peer)" |
5361 | msgstr "" | 5352 | msgstr "" |
5362 | 5353 | ||
5363 | #: src/transport/gnunet-service-transport_neighbours.c:3115 | 5354 | #: src/transport/gnunet-service-transport_neighbours.c:3119 |
5364 | msgid "# disconnects due to quota of 0" | 5355 | msgid "# disconnects due to quota of 0" |
5365 | msgstr "" | 5356 | msgstr "" |
5366 | 5357 | ||
5367 | #: src/transport/gnunet-service-transport_neighbours.c:3146 | 5358 | #: src/transport/gnunet-service-transport_neighbours.c:3150 |
5368 | msgid "# disconnect messages ignored (old format)" | 5359 | msgid "# disconnect messages ignored (old format)" |
5369 | msgstr "" | 5360 | msgstr "" |
5370 | 5361 | ||
5371 | #: src/transport/gnunet-service-transport_neighbours.c:3157 | 5362 | #: src/transport/gnunet-service-transport_neighbours.c:3161 |
5372 | msgid "# disconnect messages ignored (timestamp)" | 5363 | msgid "# disconnect messages ignored (timestamp)" |
5373 | msgstr "" | 5364 | msgstr "" |
5374 | 5365 | ||
5375 | #: src/transport/gnunet-service-transport_neighbours.c:3188 | 5366 | #: src/transport/gnunet-service-transport_neighbours.c:3192 |
5376 | msgid "# other peer asked to disconnect from us" | 5367 | msgid "# other peer asked to disconnect from us" |
5377 | msgstr "" | 5368 | msgstr "" |
5378 | 5369 | ||
5379 | #: src/transport/gnunet-service-transport_neighbours.c:3283 | 5370 | #: src/transport/gnunet-service-transport_neighbours.c:3287 |
5380 | #, fuzzy | 5371 | #, fuzzy |
5381 | msgid "# disconnected from peer upon explicit request" | 5372 | msgid "# disconnected from peer upon explicit request" |
5382 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" | 5373 | msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" |
@@ -5790,92 +5781,92 @@ msgstr "# các byte đã gửi qua SMTP" | |||
5790 | msgid "# bytes dropped by SMTP (outgoing)" | 5781 | msgid "# bytes dropped by SMTP (outgoing)" |
5791 | msgstr "# các byte loại đi bởi SMTP (đi ra)" | 5782 | msgstr "# các byte loại đi bởi SMTP (đi ra)" |
5792 | 5783 | ||
5793 | #: src/transport/plugin_transport_tcp.c:595 | 5784 | #: src/transport/plugin_transport_tcp.c:596 |
5794 | #, fuzzy, c-format | 5785 | #, fuzzy, c-format |
5795 | msgid "Unexpected address length: %u bytes\n" | 5786 | msgid "Unexpected address length: %u bytes\n" |
5796 | msgstr "Gặp sự kiện bất thường: %d\n" | 5787 | msgstr "Gặp sự kiện bất thường: %d\n" |
5797 | 5788 | ||
5798 | #: src/transport/plugin_transport_tcp.c:771 | 5789 | #: src/transport/plugin_transport_tcp.c:772 |
5799 | #: src/transport/plugin_transport_tcp.c:860 | 5790 | #: src/transport/plugin_transport_tcp.c:861 |
5800 | #: src/transport/plugin_transport_tcp.c:910 | 5791 | #: src/transport/plugin_transport_tcp.c:911 |
5801 | #: src/transport/plugin_transport_tcp.c:996 | 5792 | #: src/transport/plugin_transport_tcp.c:997 |
5802 | #: src/transport/plugin_transport_tcp.c:1139 | 5793 | #: src/transport/plugin_transport_tcp.c:1140 |
5803 | #: src/transport/plugin_transport_tcp.c:1156 | 5794 | #: src/transport/plugin_transport_tcp.c:1157 |
5804 | #, fuzzy | 5795 | #, fuzzy |
5805 | msgid "# bytes currently in TCP buffers" | 5796 | msgid "# bytes currently in TCP buffers" |
5806 | msgstr "# các byte đã gừi qua TCP" | 5797 | msgstr "# các byte đã gừi qua TCP" |
5807 | 5798 | ||
5808 | #: src/transport/plugin_transport_tcp.c:778 | 5799 | #: src/transport/plugin_transport_tcp.c:779 |
5809 | #: src/transport/plugin_transport_tcp.c:967 | 5800 | #: src/transport/plugin_transport_tcp.c:968 |
5810 | #: src/transport/plugin_transport_tcp.c:1826 | 5801 | #: src/transport/plugin_transport_tcp.c:1827 |
5811 | #: src/transport/plugin_transport_tcp.c:2456 | 5802 | #: src/transport/plugin_transport_tcp.c:2460 |
5812 | #, fuzzy | 5803 | #, fuzzy |
5813 | msgid "# TCP sessions active" | 5804 | msgid "# TCP sessions active" |
5814 | msgstr "# các khoá phiên chạy được chấp nhận" | 5805 | msgstr "# các khoá phiên chạy được chấp nhận" |
5815 | 5806 | ||
5816 | #: src/transport/plugin_transport_tcp.c:864 | 5807 | #: src/transport/plugin_transport_tcp.c:865 |
5817 | #, fuzzy | 5808 | #, fuzzy |
5818 | msgid "# bytes discarded by TCP (timeout)" | 5809 | msgid "# bytes discarded by TCP (timeout)" |
5819 | msgstr "# các byte loại đi bởi TCP (đi ra)" | 5810 | msgstr "# các byte loại đi bởi TCP (đi ra)" |
5820 | 5811 | ||
5821 | #: src/transport/plugin_transport_tcp.c:913 | 5812 | #: src/transport/plugin_transport_tcp.c:914 |
5822 | #, fuzzy | 5813 | #, fuzzy |
5823 | msgid "# bytes transmitted via TCP" | 5814 | msgid "# bytes transmitted via TCP" |
5824 | msgstr "# các byte được gửi" | 5815 | msgstr "# các byte được gửi" |
5825 | 5816 | ||
5826 | #: src/transport/plugin_transport_tcp.c:1000 | 5817 | #: src/transport/plugin_transport_tcp.c:1001 |
5827 | #, fuzzy | 5818 | #, fuzzy |
5828 | msgid "# bytes discarded by TCP (disconnect)" | 5819 | msgid "# bytes discarded by TCP (disconnect)" |
5829 | msgstr "# các byte loại đi bởi TCP (đi ra)" | 5820 | msgstr "# các byte loại đi bởi TCP (đi ra)" |
5830 | 5821 | ||
5831 | #: src/transport/plugin_transport_tcp.c:1113 | 5822 | #: src/transport/plugin_transport_tcp.c:1114 |
5832 | #, c-format | 5823 | #, c-format |
5833 | msgid "Trying to send with invalid session %p\n" | 5824 | msgid "Trying to send with invalid session %p\n" |
5834 | msgstr "" | 5825 | msgstr "" |
5835 | 5826 | ||
5836 | #: src/transport/plugin_transport_tcp.c:1349 | 5827 | #: src/transport/plugin_transport_tcp.c:1350 |
5837 | #, fuzzy, c-format | 5828 | #, fuzzy, c-format |
5838 | msgid "Address of unexpected length: %u\n" | 5829 | msgid "Address of unexpected length: %u\n" |
5839 | msgstr "Gặp sự kiện bất thường: %d\n" | 5830 | msgstr "Gặp sự kiện bất thường: %d\n" |
5840 | 5831 | ||
5841 | #: src/transport/plugin_transport_tcp.c:1466 | 5832 | #: src/transport/plugin_transport_tcp.c:1467 |
5842 | msgid "# transport-service disconnect requests for TCP" | 5833 | msgid "# transport-service disconnect requests for TCP" |
5843 | msgstr "" | 5834 | msgstr "" |
5844 | 5835 | ||
5845 | #: src/transport/plugin_transport_tcp.c:1867 | 5836 | #: src/transport/plugin_transport_tcp.c:1868 |
5846 | #, fuzzy | 5837 | #, fuzzy |
5847 | msgid "# TCP WELCOME messages received" | 5838 | msgid "# TCP WELCOME messages received" |
5848 | msgstr "# các thông báo PONG đã mật mã được nhận" | 5839 | msgstr "# các thông báo PONG đã mật mã được nhận" |
5849 | 5840 | ||
5850 | #: src/transport/plugin_transport_tcp.c:2036 | 5841 | #: src/transport/plugin_transport_tcp.c:2037 |
5851 | msgid "# bytes received via TCP" | 5842 | msgid "# bytes received via TCP" |
5852 | msgstr "# các byte đã nhận qua TCP" | 5843 | msgstr "# các byte đã nhận qua TCP" |
5853 | 5844 | ||
5854 | #: src/transport/plugin_transport_tcp.c:2118 | 5845 | #: src/transport/plugin_transport_tcp.c:2119 |
5855 | msgid "# network-level TCP disconnect events" | 5846 | msgid "# network-level TCP disconnect events" |
5856 | msgstr "" | 5847 | msgstr "" |
5857 | 5848 | ||
5858 | #: src/transport/plugin_transport_tcp.c:2344 src/util/service.c:948 | 5849 | #: src/transport/plugin_transport_tcp.c:2345 src/util/service.c:948 |
5859 | #: src/util/service.c:954 | 5850 | #: src/util/service.c:954 |
5860 | #, c-format | 5851 | #, c-format |
5861 | msgid "Require valid port number for service `%s' in configuration!\n" | 5852 | msgid "Require valid port number for service `%s' in configuration!\n" |
5862 | msgstr "" | 5853 | msgstr "" |
5863 | 5854 | ||
5864 | #: src/transport/plugin_transport_tcp.c:2358 | 5855 | #: src/transport/plugin_transport_tcp.c:2359 |
5865 | #, fuzzy | 5856 | #, fuzzy |
5866 | msgid "Failed to start service.\n" | 5857 | msgid "Failed to start service.\n" |
5867 | msgstr "Lỗi bắt đầu thu thập.\n" | 5858 | msgstr "Lỗi bắt đầu thu thập.\n" |
5868 | 5859 | ||
5869 | #: src/transport/plugin_transport_tcp.c:2444 | 5860 | #: src/transport/plugin_transport_tcp.c:2448 |
5870 | #, c-format | 5861 | #, c-format |
5871 | msgid "TCP transport listening on port %llu\n" | 5862 | msgid "TCP transport listening on port %llu\n" |
5872 | msgstr "" | 5863 | msgstr "" |
5873 | 5864 | ||
5874 | #: src/transport/plugin_transport_tcp.c:2448 | 5865 | #: src/transport/plugin_transport_tcp.c:2452 |
5875 | msgid "TCP transport not listening on any port (client only)\n" | 5866 | msgid "TCP transport not listening on any port (client only)\n" |
5876 | msgstr "" | 5867 | msgstr "" |
5877 | 5868 | ||
5878 | #: src/transport/plugin_transport_tcp.c:2452 | 5869 | #: src/transport/plugin_transport_tcp.c:2456 |
5879 | #, c-format | 5870 | #, c-format |
5880 | msgid "TCP transport advertises itself as being on port %llu\n" | 5871 | msgid "TCP transport advertises itself as being on port %llu\n" |
5881 | msgstr "" | 5872 | msgstr "" |
@@ -5900,14 +5891,14 @@ msgstr "" | |||
5900 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 5891 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
5901 | msgstr "" | 5892 | msgstr "" |
5902 | 5893 | ||
5903 | #: src/transport/plugin_transport_udp.c:2520 | 5894 | #: src/transport/plugin_transport_udp.c:2350 |
5904 | #, c-format | 5895 | #, c-format |
5905 | msgid "" | 5896 | msgid "" |
5906 | "UDP could not transmit message to `%s': Network seems down, please check " | 5897 | "UDP could not transmit message to `%s': Network seems down, please check " |
5907 | "your network configuration\n" | 5898 | "your network configuration\n" |
5908 | msgstr "" | 5899 | msgstr "" |
5909 | 5900 | ||
5910 | #: src/transport/plugin_transport_udp.c:2534 | 5901 | #: src/transport/plugin_transport_udp.c:2364 |
5911 | #, c-format | 5902 | #, c-format |
5912 | msgid "" | 5903 | msgid "" |
5913 | "UDP could not transmit message to `%s': Please check your network " | 5904 | "UDP could not transmit message to `%s': Please check your network " |
@@ -5915,24 +5906,29 @@ msgid "" | |||
5915 | "IPv6 address\n" | 5906 | "IPv6 address\n" |
5916 | msgstr "" | 5907 | msgstr "" |
5917 | 5908 | ||
5918 | #: src/transport/plugin_transport_udp.c:2775 | 5909 | #: src/transport/plugin_transport_udp.c:2664 |
5919 | #, fuzzy | 5910 | #, fuzzy |
5920 | msgid "Failed to open UDP sockets\n" | 5911 | msgid "Failed to open UDP sockets\n" |
5921 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" | 5912 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" |
5922 | 5913 | ||
5923 | #: src/transport/plugin_transport_udp.c:2851 | 5914 | #: src/transport/plugin_transport_udp.c:2762 |
5924 | #, c-format | 5915 | #, c-format |
5925 | msgid "Given `%s' option is out of range: %llu > %u\n" | 5916 | msgid "Given `%s' option is out of range: %llu > %u\n" |
5926 | msgstr "" | 5917 | msgstr "" |
5927 | 5918 | ||
5928 | #: src/transport/plugin_transport_udp.c:2894 | 5919 | #: src/transport/plugin_transport_udp.c:2805 |
5929 | #, fuzzy, c-format | 5920 | #, fuzzy, c-format |
5930 | msgid "Invalid IPv6 address: `%s'\n" | 5921 | msgid "Invalid IPv6 address: `%s'\n" |
5931 | msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" | 5922 | msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" |
5932 | 5923 | ||
5933 | #: src/transport/plugin_transport_unix.c:1353 | 5924 | #: src/transport/plugin_transport_udp.c:2862 |
5925 | #, fuzzy | ||
5926 | msgid "Failed to create network sockets, plugin failed\n" | ||
5927 | msgstr "Không thể tạo miền tên.\n" | ||
5928 | |||
5929 | #: src/transport/plugin_transport_unix.c:1427 | ||
5934 | #, fuzzy | 5930 | #, fuzzy |
5935 | msgid "Failed to open UNIX sockets\n" | 5931 | msgid "Failed to open UNIX listen socket\n" |
5936 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" | 5932 | msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" |
5937 | 5933 | ||
5938 | #: src/transport/plugin_transport_wlan.c:580 | 5934 | #: src/transport/plugin_transport_wlan.c:580 |
@@ -6245,7 +6241,7 @@ msgstr "" | |||
6245 | msgid "gnunet-ecc failed" | 6241 | msgid "gnunet-ecc failed" |
6246 | msgstr "" | 6242 | msgstr "" |
6247 | 6243 | ||
6248 | #: src/util/crypto_ecc.c:1045 | 6244 | #: src/util/crypto_ecc.c:1084 |
6249 | #, fuzzy, c-format | 6245 | #, fuzzy, c-format |
6250 | msgid "ECC signature verification failed at %s:%d: %s\n" | 6246 | msgid "ECC signature verification failed at %s:%d: %s\n" |
6251 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" | 6247 | msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" |
@@ -6510,17 +6506,17 @@ msgstr "" | |||
6510 | msgid "Perform default-actions for GNUnet URIs" | 6506 | msgid "Perform default-actions for GNUnet URIs" |
6511 | msgstr "" | 6507 | msgstr "" |
6512 | 6508 | ||
6513 | #: src/util/helper.c:271 | 6509 | #: src/util/helper.c:322 |
6514 | #, fuzzy, c-format | 6510 | #, fuzzy, c-format |
6515 | msgid "Error reading from `%s': %s\n" | 6511 | msgid "Error reading from `%s': %s\n" |
6516 | msgstr "Gặp lỗi khi tạo người dùng" | 6512 | msgstr "Gặp lỗi khi tạo người dùng" |
6517 | 6513 | ||
6518 | #: src/util/helper.c:316 | 6514 | #: src/util/helper.c:367 |
6519 | #, fuzzy, c-format | 6515 | #, fuzzy, c-format |
6520 | msgid "Failed to parse inbound message from helper `%s'\n" | 6516 | msgid "Failed to parse inbound message from helper `%s'\n" |
6521 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" | 6517 | msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" |
6522 | 6518 | ||
6523 | #: src/util/helper.c:537 | 6519 | #: src/util/helper.c:564 |
6524 | #, fuzzy, c-format | 6520 | #, fuzzy, c-format |
6525 | msgid "Error writing to `%s': %s\n" | 6521 | msgid "Error writing to `%s': %s\n" |
6526 | msgstr "Gặp lỗi khi tạo người dùng" | 6522 | msgstr "Gặp lỗi khi tạo người dùng" |
diff --git a/po/zh_CN.po b/po/zh_CN.po index ac79c4616..1c18e6bcd 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po | |||
@@ -7,7 +7,7 @@ msgid "" | |||
7 | msgstr "" | 7 | msgstr "" |
8 | "Project-Id-Version: gnunet-0.8.1\n" | 8 | "Project-Id-Version: gnunet-0.8.1\n" |
9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" | 9 | "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" |
10 | "POT-Creation-Date: 2013-04-27 12:39+0200\n" | 10 | "POT-Creation-Date: 2013-05-20 15:09+0200\n" |
11 | "PO-Revision-Date: 2011-07-09 12:12+0800\n" | 11 | "PO-Revision-Date: 2011-07-09 12:12+0800\n" |
12 | "Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n" | 12 | "Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n" |
13 | "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" | 13 | "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" |
@@ -35,87 +35,87 @@ msgstr "解析配置文件“%s”失败\n" | |||
35 | msgid "Failed to remove servicehome directory %s\n" | 35 | msgid "Failed to remove servicehome directory %s\n" |
36 | msgstr "" | 36 | msgstr "" |
37 | 37 | ||
38 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:712 | 38 | #: src/arm/gnunet-arm.c:204 src/testbed/gnunet-service-testbed_peers.c:962 |
39 | msgid "Message was sent successfully" | 39 | msgid "Message was sent successfully" |
40 | msgstr "" | 40 | msgstr "" |
41 | 41 | ||
42 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:714 | 42 | #: src/arm/gnunet-arm.c:206 src/testbed/gnunet-service-testbed_peers.c:964 |
43 | #, fuzzy | 43 | #, fuzzy |
44 | msgid "Misconfiguration (can't connect to the ARM service)" | 44 | msgid "Misconfiguration (can't connect to the ARM service)" |
45 | msgstr "初始化“%s”服务失败。\n" | 45 | msgstr "初始化“%s”服务失败。\n" |
46 | 46 | ||
47 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:716 | 47 | #: src/arm/gnunet-arm.c:208 src/testbed/gnunet-service-testbed_peers.c:966 |
48 | msgid "We disconnected from ARM before we could send a request" | 48 | msgid "We disconnected from ARM before we could send a request" |
49 | msgstr "" | 49 | msgstr "" |
50 | 50 | ||
51 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:718 | 51 | #: src/arm/gnunet-arm.c:210 src/testbed/gnunet-service-testbed_peers.c:968 |
52 | msgid "ARM API is busy" | 52 | msgid "ARM API is busy" |
53 | msgstr "" | 53 | msgstr "" |
54 | 54 | ||
55 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:720 | 55 | #: src/arm/gnunet-arm.c:212 src/testbed/gnunet-service-testbed_peers.c:970 |
56 | msgid "Request doesn't fit into a message" | 56 | msgid "Request doesn't fit into a message" |
57 | msgstr "" | 57 | msgstr "" |
58 | 58 | ||
59 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:722 | 59 | #: src/arm/gnunet-arm.c:214 src/testbed/gnunet-service-testbed_peers.c:972 |
60 | msgid "Request timed out" | 60 | msgid "Request timed out" |
61 | msgstr "" | 61 | msgstr "" |
62 | 62 | ||
63 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:724 | 63 | #: src/arm/gnunet-arm.c:216 src/testbed/gnunet-service-testbed_peers.c:974 |
64 | #, fuzzy | 64 | #, fuzzy |
65 | msgid "Unknown request status" | 65 | msgid "Unknown request status" |
66 | msgstr "未知的用户“%s”\n" | 66 | msgstr "未知的用户“%s”\n" |
67 | 67 | ||
68 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:740 | 68 | #: src/arm/gnunet-arm.c:232 src/testbed/gnunet-service-testbed_peers.c:990 |
69 | #, c-format | 69 | #, c-format |
70 | msgid "%s is stopped" | 70 | msgid "%s is stopped" |
71 | msgstr "" | 71 | msgstr "" |
72 | 72 | ||
73 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:742 | 73 | #: src/arm/gnunet-arm.c:234 src/testbed/gnunet-service-testbed_peers.c:992 |
74 | #, c-format | 74 | #, c-format |
75 | msgid "%s is starting" | 75 | msgid "%s is starting" |
76 | msgstr "" | 76 | msgstr "" |
77 | 77 | ||
78 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:744 | 78 | #: src/arm/gnunet-arm.c:236 src/testbed/gnunet-service-testbed_peers.c:994 |
79 | #, c-format | 79 | #, c-format |
80 | msgid "%s is stopping" | 80 | msgid "%s is stopping" |
81 | msgstr "" | 81 | msgstr "" |
82 | 82 | ||
83 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:746 | 83 | #: src/arm/gnunet-arm.c:238 src/testbed/gnunet-service-testbed_peers.c:996 |
84 | #, c-format | 84 | #, c-format |
85 | msgid "%s is starting already" | 85 | msgid "%s is starting already" |
86 | msgstr "" | 86 | msgstr "" |
87 | 87 | ||
88 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:748 | 88 | #: src/arm/gnunet-arm.c:240 src/testbed/gnunet-service-testbed_peers.c:998 |
89 | #, c-format | 89 | #, c-format |
90 | msgid "%s is stopping already" | 90 | msgid "%s is stopping already" |
91 | msgstr "" | 91 | msgstr "" |
92 | 92 | ||
93 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:750 | 93 | #: src/arm/gnunet-arm.c:242 src/testbed/gnunet-service-testbed_peers.c:1000 |
94 | #, c-format | 94 | #, c-format |
95 | msgid "%s is started already" | 95 | msgid "%s is started already" |
96 | msgstr "" | 96 | msgstr "" |
97 | 97 | ||
98 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:752 | 98 | #: src/arm/gnunet-arm.c:244 src/testbed/gnunet-service-testbed_peers.c:1002 |
99 | #, c-format | 99 | #, c-format |
100 | msgid "%s is stopped already" | 100 | msgid "%s is stopped already" |
101 | msgstr "" | 101 | msgstr "" |
102 | 102 | ||
103 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:754 | 103 | #: src/arm/gnunet-arm.c:246 src/testbed/gnunet-service-testbed_peers.c:1004 |
104 | #, fuzzy, c-format | 104 | #, fuzzy, c-format |
105 | msgid "%s service is not known to ARM" | 105 | msgid "%s service is not known to ARM" |
106 | msgstr "服务已删除。\n" | 106 | msgstr "服务已删除。\n" |
107 | 107 | ||
108 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:756 | 108 | #: src/arm/gnunet-arm.c:248 src/testbed/gnunet-service-testbed_peers.c:1006 |
109 | #, fuzzy, c-format | 109 | #, fuzzy, c-format |
110 | msgid "%s service failed to start" | 110 | msgid "%s service failed to start" |
111 | msgstr "运行 %s失败:%s %d\n" | 111 | msgstr "运行 %s失败:%s %d\n" |
112 | 112 | ||
113 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:758 | 113 | #: src/arm/gnunet-arm.c:250 src/testbed/gnunet-service-testbed_peers.c:1008 |
114 | #, c-format | 114 | #, c-format |
115 | msgid "%s service can't be started because ARM is shutting down" | 115 | msgid "%s service can't be started because ARM is shutting down" |
116 | msgstr "" | 116 | msgstr "" |
117 | 117 | ||
118 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:760 | 118 | #: src/arm/gnunet-arm.c:252 src/testbed/gnunet-service-testbed_peers.c:1010 |
119 | #, c-format | 119 | #, c-format |
120 | msgid "%.s Unknown result code." | 120 | msgid "%.s Unknown result code." |
121 | msgstr "" | 121 | msgstr "" |
@@ -814,8 +814,8 @@ msgstr "" | |||
814 | #: src/transport/gnunet-service-transport_neighbours.c:1041 | 814 | #: src/transport/gnunet-service-transport_neighbours.c:1041 |
815 | #: src/transport/gnunet-service-transport_neighbours.c:1265 | 815 | #: src/transport/gnunet-service-transport_neighbours.c:1265 |
816 | #: src/transport/gnunet-service-transport_neighbours.c:1274 | 816 | #: src/transport/gnunet-service-transport_neighbours.c:1274 |
817 | #: src/transport/gnunet-service-transport_neighbours.c:2794 | 817 | #: src/transport/gnunet-service-transport_neighbours.c:2798 |
818 | #: src/transport/gnunet-service-transport_neighbours.c:3053 | 818 | #: src/transport/gnunet-service-transport_neighbours.c:3057 |
819 | msgid "# peers connected" | 819 | msgid "# peers connected" |
820 | msgstr "" | 820 | msgstr "" |
821 | 821 | ||
@@ -1268,7 +1268,7 @@ msgstr "" | |||
1268 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 | 1268 | #: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:753 |
1269 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 | 1269 | #: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:736 |
1270 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 | 1270 | #: src/fs/gnunet-search.c:294 src/fs/gnunet-unindex.c:168 |
1271 | #: src/nse/gnunet-nse-profiler.c:900 | 1271 | #: src/nse/gnunet-nse-profiler.c:899 |
1272 | msgid "be verbose (print progress information)" | 1272 | msgid "be verbose (print progress information)" |
1273 | msgstr "" | 1273 | msgstr "" |
1274 | 1274 | ||
@@ -2120,7 +2120,7 @@ msgstr "打开日志文件“%s”失败:%s\n" | |||
2120 | msgid "no-name" | 2120 | msgid "no-name" |
2121 | msgstr "无名称" | 2121 | msgstr "无名称" |
2122 | 2122 | ||
2123 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:975 | 2123 | #: src/fs/fs_pseudonym.c:1182 src/util/crypto_ecc.c:1014 |
2124 | #, fuzzy, c-format | 2124 | #, fuzzy, c-format |
2125 | msgid "ECC signing failed at %s:%d: %s\n" | 2125 | msgid "ECC signing failed at %s:%d: %s\n" |
2126 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" | 2126 | msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" |
@@ -2314,12 +2314,12 @@ msgstr "" | |||
2314 | msgid "Unrecognized URI type" | 2314 | msgid "Unrecognized URI type" |
2315 | msgstr "" | 2315 | msgstr "" |
2316 | 2316 | ||
2317 | #: src/fs/fs_uri.c:898 | 2317 | #: src/fs/fs_uri.c:898 src/util/crypto_ecc.c:941 |
2318 | #, fuzzy | 2318 | #, fuzzy |
2319 | msgid "Lacking key configuration settings.\n" | 2319 | msgid "Lacking key configuration settings.\n" |
2320 | msgstr "立即保存配置?" | 2320 | msgstr "立即保存配置?" |
2321 | 2321 | ||
2322 | #: src/fs/fs_uri.c:904 | 2322 | #: src/fs/fs_uri.c:904 src/util/crypto_ecc.c:947 |
2323 | #, fuzzy, c-format | 2323 | #, fuzzy, c-format |
2324 | msgid "Could not access hostkey file `%s'.\n" | 2324 | msgid "Could not access hostkey file `%s'.\n" |
2325 | msgstr "找不到接口“%s”的一个 IP 地址。\n" | 2325 | msgstr "找不到接口“%s”的一个 IP 地址。\n" |
@@ -3592,15 +3592,15 @@ msgstr "" | |||
3592 | msgid "Hostlist file `%s' could not be removed\n" | 3592 | msgid "Hostlist file `%s' could not be removed\n" |
3593 | msgstr "" | 3593 | msgstr "" |
3594 | 3594 | ||
3595 | #: src/hostlist/hostlist-server.c:134 | 3595 | #: src/hostlist/hostlist-server.c:137 |
3596 | msgid "bytes in hostlist" | 3596 | msgid "bytes in hostlist" |
3597 | msgstr "" | 3597 | msgstr "" |
3598 | 3598 | ||
3599 | #: src/hostlist/hostlist-server.c:157 | 3599 | #: src/hostlist/hostlist-server.c:161 |
3600 | msgid "expired addresses encountered" | 3600 | msgid "expired addresses encountered" |
3601 | msgstr "" | 3601 | msgstr "" |
3602 | 3602 | ||
3603 | #: src/hostlist/hostlist-server.c:184 src/hostlist/hostlist-server.c:421 | 3603 | #: src/hostlist/hostlist-server.c:189 src/hostlist/hostlist-server.c:424 |
3604 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 | 3604 | #: src/peerinfo-tool/gnunet-peerinfo.c:348 |
3605 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 | 3605 | #: src/peerinfo-tool/gnunet-peerinfo.c:418 |
3606 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 | 3606 | #: src/peerinfo-tool/gnunet-peerinfo.c:489 |
@@ -3609,82 +3609,82 @@ msgstr "" | |||
3609 | msgid "Error in communication with PEERINFO service: %s\n" | 3609 | msgid "Error in communication with PEERINFO service: %s\n" |
3610 | msgstr "" | 3610 | msgstr "" |
3611 | 3611 | ||
3612 | #: src/hostlist/hostlist-server.c:205 | 3612 | #: src/hostlist/hostlist-server.c:210 |
3613 | msgid "HELLOs without addresses encountered (ignored)" | 3613 | msgid "HELLOs without addresses encountered (ignored)" |
3614 | msgstr "" | 3614 | msgstr "" |
3615 | 3615 | ||
3616 | #: src/hostlist/hostlist-server.c:219 | 3616 | #: src/hostlist/hostlist-server.c:224 |
3617 | msgid "bytes not included in hostlist (size limit)" | 3617 | msgid "bytes not included in hostlist (size limit)" |
3618 | msgstr "" | 3618 | msgstr "" |
3619 | 3619 | ||
3620 | #: src/hostlist/hostlist-server.c:263 | 3620 | #: src/hostlist/hostlist-server.c:268 |
3621 | #, c-format | 3621 | #, c-format |
3622 | msgid "Refusing `%s' request to hostlist server\n" | 3622 | msgid "Refusing `%s' request to hostlist server\n" |
3623 | msgstr "" | 3623 | msgstr "" |
3624 | 3624 | ||
3625 | #: src/hostlist/hostlist-server.c:266 | 3625 | #: src/hostlist/hostlist-server.c:271 |
3626 | msgid "hostlist requests refused (not HTTP GET)" | 3626 | msgid "hostlist requests refused (not HTTP GET)" |
3627 | msgstr "" | 3627 | msgstr "" |
3628 | 3628 | ||
3629 | #: src/hostlist/hostlist-server.c:279 | 3629 | #: src/hostlist/hostlist-server.c:284 |
3630 | #, c-format | 3630 | #, c-format |
3631 | msgid "Refusing `%s' request with %llu bytes of upload data\n" | 3631 | msgid "Refusing `%s' request with %llu bytes of upload data\n" |
3632 | msgstr "" | 3632 | msgstr "" |
3633 | 3633 | ||
3634 | #: src/hostlist/hostlist-server.c:283 | 3634 | #: src/hostlist/hostlist-server.c:288 |
3635 | msgid "hostlist requests refused (upload data)" | 3635 | msgid "hostlist requests refused (upload data)" |
3636 | msgstr "" | 3636 | msgstr "" |
3637 | 3637 | ||
3638 | #: src/hostlist/hostlist-server.c:291 | 3638 | #: src/hostlist/hostlist-server.c:296 |
3639 | msgid "Could not handle hostlist request since I do not have a response yet\n" | 3639 | msgid "Could not handle hostlist request since I do not have a response yet\n" |
3640 | msgstr "" | 3640 | msgstr "" |
3641 | 3641 | ||
3642 | #: src/hostlist/hostlist-server.c:294 | 3642 | #: src/hostlist/hostlist-server.c:299 |
3643 | msgid "hostlist requests refused (not ready)" | 3643 | msgid "hostlist requests refused (not ready)" |
3644 | msgstr "" | 3644 | msgstr "" |
3645 | 3645 | ||
3646 | #: src/hostlist/hostlist-server.c:298 | 3646 | #: src/hostlist/hostlist-server.c:303 |
3647 | msgid "Received request for our hostlist\n" | 3647 | msgid "Received request for our hostlist\n" |
3648 | msgstr "" | 3648 | msgstr "" |
3649 | 3649 | ||
3650 | #: src/hostlist/hostlist-server.c:299 | 3650 | #: src/hostlist/hostlist-server.c:304 |
3651 | msgid "hostlist requests processed" | 3651 | msgid "hostlist requests processed" |
3652 | msgstr "" | 3652 | msgstr "" |
3653 | 3653 | ||
3654 | #: src/hostlist/hostlist-server.c:341 | 3654 | #: src/hostlist/hostlist-server.c:346 |
3655 | msgid "# hostlist advertisements send" | 3655 | msgid "# hostlist advertisements send" |
3656 | msgstr "" | 3656 | msgstr "" |
3657 | 3657 | ||
3658 | #: src/hostlist/hostlist-server.c:384 | 3658 | #: src/hostlist/hostlist-server.c:389 |
3659 | msgid "Advertisement message could not be queued by core\n" | 3659 | msgid "Advertisement message could not be queued by core\n" |
3660 | msgstr "" | 3660 | msgstr "" |
3661 | 3661 | ||
3662 | #: src/hostlist/hostlist-server.c:548 src/peerinfo-tool/gnunet-peerinfo.c:649 | 3662 | #: src/hostlist/hostlist-server.c:560 src/peerinfo-tool/gnunet-peerinfo.c:649 |
3663 | #: src/transport/gnunet-service-transport.c:661 | 3663 | #: src/transport/gnunet-service-transport.c:661 |
3664 | msgid "Could not access PEERINFO service. Exiting.\n" | 3664 | msgid "Could not access PEERINFO service. Exiting.\n" |
3665 | msgstr "" | 3665 | msgstr "" |
3666 | 3666 | ||
3667 | #: src/hostlist/hostlist-server.c:558 | 3667 | #: src/hostlist/hostlist-server.c:570 |
3668 | #, c-format | 3668 | #, c-format |
3669 | msgid "Invalid port number %llu. Exiting.\n" | 3669 | msgid "Invalid port number %llu. Exiting.\n" |
3670 | msgstr "" | 3670 | msgstr "" |
3671 | 3671 | ||
3672 | #: src/hostlist/hostlist-server.c:567 | 3672 | #: src/hostlist/hostlist-server.c:579 |
3673 | #, c-format | 3673 | #, c-format |
3674 | msgid "Hostlist service starts on %s:%llu\n" | 3674 | msgid "Hostlist service starts on %s:%llu\n" |
3675 | msgstr "" | 3675 | msgstr "" |
3676 | 3676 | ||
3677 | #: src/hostlist/hostlist-server.c:581 | 3677 | #: src/hostlist/hostlist-server.c:593 |
3678 | #, c-format | 3678 | #, c-format |
3679 | msgid "Address to obtain hostlist: `%s'\n" | 3679 | msgid "Address to obtain hostlist: `%s'\n" |
3680 | msgstr "" | 3680 | msgstr "" |
3681 | 3681 | ||
3682 | #: src/hostlist/hostlist-server.c:621 | 3682 | #: src/hostlist/hostlist-server.c:633 |
3683 | #, fuzzy, c-format | 3683 | #, fuzzy, c-format |
3684 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" | 3684 | msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" |
3685 | msgstr "“%s”不可用。\n" | 3685 | msgstr "“%s”不可用。\n" |
3686 | 3686 | ||
3687 | #: src/hostlist/hostlist-server.c:663 | 3687 | #: src/hostlist/hostlist-server.c:675 |
3688 | #, c-format | 3688 | #, c-format |
3689 | msgid "Could not start hostlist HTTP server on port %u\n" | 3689 | msgid "Could not start hostlist HTTP server on port %u\n" |
3690 | msgstr "" | 3690 | msgstr "" |
@@ -3722,11 +3722,11 @@ msgstr "无法获取有关用户“%s”的信息:%s\n" | |||
3722 | msgid "Print information about mesh tunnels and peers." | 3722 | msgid "Print information about mesh tunnels and peers." |
3723 | msgstr "无法获取有关用户“%s”的信息:%s\n" | 3723 | msgstr "无法获取有关用户“%s”的信息:%s\n" |
3724 | 3724 | ||
3725 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:7972 | 3725 | #: src/mesh/gnunet-service-mesh.c:7966 src/mesh/gnunet-service-mesh-new.c:4649 |
3726 | msgid "Wrong CORE service\n" | 3726 | msgid "Wrong CORE service\n" |
3727 | msgstr "" | 3727 | msgstr "" |
3728 | 3728 | ||
3729 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:8185 | 3729 | #: src/mesh/gnunet-service-mesh.c:8179 src/mesh/gnunet-service-mesh-new.c:4790 |
3730 | #, fuzzy, c-format | 3730 | #, fuzzy, c-format |
3731 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" | 3731 | msgid "Mesh service could not access hostkey: %s. Exiting.\n" |
3732 | msgstr "找不到接口“%s”的一个 IP 地址。\n" | 3732 | msgstr "找不到接口“%s”的一个 IP 地址。\n" |
@@ -3734,14 +3734,13 @@ msgstr "找不到接口“%s”的一个 IP 地址。\n" | |||
3734 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 | 3734 | #: src/mesh/gnunet-service-mesh.c:8261 src/mesh/gnunet-service-mesh.c:8273 |
3735 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 | 3735 | #: src/mesh/gnunet-service-mesh.c:8285 src/mesh/gnunet-service-mesh.c:8299 |
3736 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 | 3736 | #: src/mesh/gnunet-service-mesh.c:8311 src/mesh/gnunet-service-mesh.c:8323 |
3737 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:8274 | 3737 | #: src/mesh/gnunet-service-mesh.c:8335 src/mesh/gnunet-service-mesh-new.c:4860 |
3738 | #: src/mesh/gnunet-service-mesh-new.c:8286 | 3738 | #: src/mesh/gnunet-service-mesh-new.c:4872 |
3739 | #: src/mesh/gnunet-service-mesh-new.c:8298 | 3739 | #: src/mesh/gnunet-service-mesh-new.c:4884 |
3740 | #: src/mesh/gnunet-service-mesh-new.c:8312 | 3740 | #: src/mesh/gnunet-service-mesh-new.c:4896 |
3741 | #: src/mesh/gnunet-service-mesh-new.c:8324 | 3741 | #: src/mesh/gnunet-service-mesh-new.c:4908 |
3742 | #: src/mesh/gnunet-service-mesh-new.c:8336 | 3742 | #: src/mesh/gnunet-service-mesh-new.c:4920 src/nse/gnunet-service-nse.c:1500 |
3743 | #: src/mesh/gnunet-service-mesh-new.c:8348 src/nse/gnunet-service-nse.c:1516 | 3743 | #: src/nse/gnunet-service-nse.c:1518 |
3744 | #: src/nse/gnunet-service-nse.c:1534 | ||
3745 | #: src/regex/gnunet-daemon-regexprofiler.c:320 | 3744 | #: src/regex/gnunet-daemon-regexprofiler.c:320 |
3746 | #: src/regex/gnunet-daemon-regexprofiler.c:332 | 3745 | #: src/regex/gnunet-daemon-regexprofiler.c:332 |
3747 | #: src/regex/gnunet-daemon-regexprofiler.c:344 | 3746 | #: src/regex/gnunet-daemon-regexprofiler.c:344 |
@@ -3752,9 +3751,9 @@ msgid "%s service is lacking key configuration settings (%s). Exiting.\n" | |||
3752 | msgstr "立即保存配置?" | 3751 | msgstr "立即保存配置?" |
3753 | 3752 | ||
3754 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 | 3753 | #: src/mesh/gnunet-service-mesh.c:8347 src/mesh/gnunet-service-mesh.c:8357 |
3755 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:8360 | 3754 | #: src/mesh/gnunet-service-mesh.c:8368 src/mesh/gnunet-service-mesh-new.c:4932 |
3756 | #: src/mesh/gnunet-service-mesh-new.c:8370 | 3755 | #: src/mesh/gnunet-service-mesh-new.c:4942 |
3757 | #: src/mesh/gnunet-service-mesh-new.c:8381 | 3756 | #: src/mesh/gnunet-service-mesh-new.c:4953 |
3758 | #, fuzzy, c-format | 3757 | #, fuzzy, c-format |
3759 | msgid "" | 3758 | msgid "" |
3760 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" | 3759 | "%s service is lacking key configuration settings (%s). Using default (%u).\n" |
@@ -4083,32 +4082,32 @@ msgstr "" | |||
4083 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" | 4082 | msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" |
4084 | msgstr "" | 4083 | msgstr "" |
4085 | 4084 | ||
4086 | #: src/nat/nat.c:795 | 4085 | #: src/nat/nat.c:834 |
4087 | #, c-format | 4086 | #, c-format |
4088 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" | 4087 | msgid "gnunet-helper-nat-server generated malformed address `%s'\n" |
4089 | msgstr "" | 4088 | msgstr "" |
4090 | 4089 | ||
4091 | #: src/nat/nat.c:844 | 4090 | #: src/nat/nat.c:883 |
4092 | #, fuzzy, c-format | 4091 | #, fuzzy, c-format |
4093 | msgid "Failed to start %s\n" | 4092 | msgid "Failed to start %s\n" |
4094 | msgstr "运行 %s失败:%s %d\n" | 4093 | msgstr "运行 %s失败:%s %d\n" |
4095 | 4094 | ||
4096 | #: src/nat/nat.c:1113 | 4095 | #: src/nat/nat.c:1152 |
4097 | msgid "malformed" | 4096 | msgid "malformed" |
4098 | msgstr "" | 4097 | msgstr "" |
4099 | 4098 | ||
4100 | #: src/nat/nat.c:1179 src/nat/nat.c:1191 | 4099 | #: src/nat/nat.c:1218 src/nat/nat.c:1230 |
4101 | #, c-format | 4100 | #, c-format |
4102 | msgid "" | 4101 | msgid "" |
4103 | "Configuration requires `%s', but binary is not installed properly (SUID bit " | 4102 | "Configuration requires `%s', but binary is not installed properly (SUID bit " |
4104 | "not set). Option disabled.\n" | 4103 | "not set). Option disabled.\n" |
4105 | msgstr "" | 4104 | msgstr "" |
4106 | 4105 | ||
4107 | #: src/nat/nat.c:1326 | 4106 | #: src/nat/nat.c:1365 |
4108 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" | 4107 | msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" |
4109 | msgstr "" | 4108 | msgstr "" |
4110 | 4109 | ||
4111 | #: src/nat/nat.c:1337 | 4110 | #: src/nat/nat.c:1376 |
4112 | #, c-format | 4111 | #, c-format |
4113 | msgid "Running gnunet-helper-nat-client %s %s %u\n" | 4112 | msgid "Running gnunet-helper-nat-client %s %s %u\n" |
4114 | msgstr "" | 4113 | msgstr "" |
@@ -4130,45 +4129,45 @@ msgstr "" | |||
4130 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" | 4129 | msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" |
4131 | msgstr "" | 4130 | msgstr "" |
4132 | 4131 | ||
4133 | #: src/nse/gnunet-nse-profiler.c:885 | 4132 | #: src/nse/gnunet-nse-profiler.c:884 |
4134 | msgid "limit to the number of connections to NSE services, 0 for none" | 4133 | msgid "limit to the number of connections to NSE services, 0 for none" |
4135 | msgstr "" | 4134 | msgstr "" |
4136 | 4135 | ||
4137 | #: src/nse/gnunet-nse-profiler.c:888 | 4136 | #: src/nse/gnunet-nse-profiler.c:887 |
4138 | msgid "name of the file for writing connection information and statistics" | 4137 | msgid "name of the file for writing connection information and statistics" |
4139 | msgstr "" | 4138 | msgstr "" |
4140 | 4139 | ||
4141 | #: src/nse/gnunet-nse-profiler.c:891 src/testbed/gnunet-testbed-profiler.c:282 | 4140 | #: src/nse/gnunet-nse-profiler.c:890 src/testbed/gnunet-testbed-profiler.c:284 |
4142 | msgid "name of the file with the login information for the testbed" | 4141 | msgid "name of the file with the login information for the testbed" |
4143 | msgstr "" | 4142 | msgstr "" |
4144 | 4143 | ||
4145 | #: src/nse/gnunet-nse-profiler.c:894 | 4144 | #: src/nse/gnunet-nse-profiler.c:893 |
4146 | msgid "name of the file for writing the main results" | 4145 | msgid "name of the file for writing the main results" |
4147 | msgstr "" | 4146 | msgstr "" |
4148 | 4147 | ||
4149 | #: src/nse/gnunet-nse-profiler.c:897 | 4148 | #: src/nse/gnunet-nse-profiler.c:896 |
4150 | msgid "Number of peers to run in each round, separated by commas" | 4149 | msgid "Number of peers to run in each round, separated by commas" |
4151 | msgstr "" | 4150 | msgstr "" |
4152 | 4151 | ||
4153 | #: src/nse/gnunet-nse-profiler.c:903 | 4152 | #: src/nse/gnunet-nse-profiler.c:902 |
4154 | msgid "delay between rounds" | 4153 | msgid "delay between rounds" |
4155 | msgstr "" | 4154 | msgstr "" |
4156 | 4155 | ||
4157 | #: src/nse/gnunet-nse-profiler.c:912 | 4156 | #: src/nse/gnunet-nse-profiler.c:911 |
4158 | #, fuzzy | 4157 | #, fuzzy |
4159 | msgid "Measure quality and performance of the NSE service." | 4158 | msgid "Measure quality and performance of the NSE service." |
4160 | msgstr "无法访问该服务" | 4159 | msgstr "无法访问该服务" |
4161 | 4160 | ||
4162 | #: src/nse/gnunet-service-nse.c:1405 | 4161 | #: src/nse/gnunet-service-nse.c:1419 |
4163 | #, fuzzy, c-format | 4162 | #, fuzzy, c-format |
4164 | msgid "NSE service could not access hostkey: %s\n" | 4163 | msgid "NSE service could not access hostkey: %s\n" |
4165 | msgstr "找不到接口“%s”的一个 IP 地址。\n" | 4164 | msgstr "找不到接口“%s”的一个 IP 地址。\n" |
4166 | 4165 | ||
4167 | #: src/nse/gnunet-service-nse.c:1419 | 4166 | #: src/nse/gnunet-service-nse.c:1433 |
4168 | msgid "NSE service is lacking key configuration settings. Exiting.\n" | 4167 | msgid "NSE service is lacking key configuration settings. Exiting.\n" |
4169 | msgstr "" | 4168 | msgstr "" |
4170 | 4169 | ||
4171 | #: src/nse/gnunet-service-nse.c:1524 | 4170 | #: src/nse/gnunet-service-nse.c:1508 |
4172 | msgid "Invalid work requirement for NSE service. Exiting.\n" | 4171 | msgid "Invalid work requirement for NSE service. Exiting.\n" |
4173 | msgstr "" | 4172 | msgstr "" |
4174 | 4173 | ||
@@ -4177,42 +4176,42 @@ msgstr "" | |||
4177 | msgid "Removing expired address of transport `%s'\n" | 4176 | msgid "Removing expired address of transport `%s'\n" |
4178 | msgstr "" | 4177 | msgstr "" |
4179 | 4178 | ||
4180 | #: src/peerinfo/gnunet-service-peerinfo.c:354 | 4179 | #: src/peerinfo/gnunet-service-peerinfo.c:355 |
4181 | #, fuzzy, c-format | 4180 | #, fuzzy, c-format |
4182 | msgid "Failed to parse HELLO in file `%s': %s\n" | 4181 | msgid "Failed to parse HELLO in file `%s': %s\n" |
4183 | msgstr "解析配置文件“%s”失败\n" | 4182 | msgstr "解析配置文件“%s”失败\n" |
4184 | 4183 | ||
4185 | #: src/peerinfo/gnunet-service-peerinfo.c:369 | 4184 | #: src/peerinfo/gnunet-service-peerinfo.c:370 |
4186 | #, fuzzy, c-format | 4185 | #, fuzzy, c-format |
4187 | msgid "Failed to parse HELLO in file `%s': %s %u \n" | 4186 | msgid "Failed to parse HELLO in file `%s': %s %u \n" |
4188 | msgstr "解析配置文件“%s”失败\n" | 4187 | msgstr "解析配置文件“%s”失败\n" |
4189 | 4188 | ||
4190 | #: src/peerinfo/gnunet-service-peerinfo.c:444 | 4189 | #: src/peerinfo/gnunet-service-peerinfo.c:445 |
4191 | msgid "# peers known" | 4190 | msgid "# peers known" |
4192 | msgstr "" | 4191 | msgstr "" |
4193 | 4192 | ||
4194 | #: src/peerinfo/gnunet-service-peerinfo.c:480 | 4193 | #: src/peerinfo/gnunet-service-peerinfo.c:481 |
4195 | #, c-format | 4194 | #, c-format |
4196 | msgid "" | 4195 | msgid "" |
4197 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" | 4196 | "File `%s' in directory `%s' does not match naming convention. Removed.\n" |
4198 | msgstr "" | 4197 | msgstr "" |
4199 | 4198 | ||
4200 | #: src/peerinfo/gnunet-service-peerinfo.c:632 | 4199 | #: src/peerinfo/gnunet-service-peerinfo.c:633 |
4201 | #, fuzzy, c-format | 4200 | #, fuzzy, c-format |
4202 | msgid "Scanning directory `%s'\n" | 4201 | msgid "Scanning directory `%s'\n" |
4203 | msgstr "解析配置文件“%s”失败\n" | 4202 | msgstr "解析配置文件“%s”失败\n" |
4204 | 4203 | ||
4205 | #: src/peerinfo/gnunet-service-peerinfo.c:637 | 4204 | #: src/peerinfo/gnunet-service-peerinfo.c:638 |
4206 | #, c-format | 4205 | #, c-format |
4207 | msgid "Still no peers found in `%s'!\n" | 4206 | msgid "Still no peers found in `%s'!\n" |
4208 | msgstr "" | 4207 | msgstr "" |
4209 | 4208 | ||
4210 | #: src/peerinfo/gnunet-service-peerinfo.c:969 | 4209 | #: src/peerinfo/gnunet-service-peerinfo.c:970 |
4211 | #, fuzzy, c-format | 4210 | #, fuzzy, c-format |
4212 | msgid "Cleaning up directory `%s'\n" | 4211 | msgid "Cleaning up directory `%s'\n" |
4213 | msgstr "解析配置文件“%s”失败\n" | 4212 | msgstr "解析配置文件“%s”失败\n" |
4214 | 4213 | ||
4215 | #: src/peerinfo/gnunet-service-peerinfo.c:1249 | 4214 | #: src/peerinfo/gnunet-service-peerinfo.c:1250 |
4216 | #, c-format | 4215 | #, c-format |
4217 | msgid "Importing HELLOs from `%s'\n" | 4216 | msgid "Importing HELLOs from `%s'\n" |
4218 | msgstr "" | 4217 | msgstr "" |
@@ -4420,80 +4419,72 @@ msgstr "" | |||
4420 | msgid "Daemon to announce regular expressions for the peer using mesh." | 4419 | msgid "Daemon to announce regular expressions for the peer using mesh." |
4421 | msgstr "" | 4420 | msgstr "" |
4422 | 4421 | ||
4423 | #: src/regex/gnunet-regex-profiler.c:1246 | 4422 | #: src/regex/gnunet-regex-profiler.c:1247 |
4424 | msgid "No configuration file given. Exiting\n" | 4423 | msgid "No configuration file given. Exiting\n" |
4425 | msgstr "" | 4424 | msgstr "" |
4426 | 4425 | ||
4427 | #: src/regex/gnunet-regex-profiler.c:1257 | 4426 | #: src/regex/gnunet-regex-profiler.c:1258 |
4428 | #, fuzzy | 4427 | #, fuzzy |
4429 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" | 4428 | msgid "Configuration option \"regex_prefix\" missing. Exiting\n" |
4430 | msgstr "配置文件“%s”已写入。\n" | 4429 | msgstr "配置文件“%s”已写入。\n" |
4431 | 4430 | ||
4432 | #: src/regex/gnunet-regex-profiler.c:1276 | 4431 | #: src/regex/gnunet-regex-profiler.c:1287 |
4433 | msgid "No hosts-file specified on command line. Exiting.\n" | ||
4434 | msgstr "" | ||
4435 | |||
4436 | #: src/regex/gnunet-regex-profiler.c:1282 | ||
4437 | #: src/regex/gnunet-regex-simulation-profiler.c:622 | 4432 | #: src/regex/gnunet-regex-simulation-profiler.c:622 |
4438 | #, c-format | 4433 | #, c-format |
4439 | msgid "No policy directory specified on command line. Exiting.\n" | 4434 | msgid "No policy directory specified on command line. Exiting.\n" |
4440 | msgstr "" | 4435 | msgstr "" |
4441 | 4436 | ||
4442 | #: src/regex/gnunet-regex-profiler.c:1288 | 4437 | #: src/regex/gnunet-regex-profiler.c:1293 |
4443 | #: src/regex/gnunet-regex-simulation-profiler.c:629 | 4438 | #: src/regex/gnunet-regex-simulation-profiler.c:629 |
4444 | #, c-format | 4439 | #, c-format |
4445 | msgid "Specified policies directory does not exist. Exiting.\n" | 4440 | msgid "Specified policies directory does not exist. Exiting.\n" |
4446 | msgstr "" | 4441 | msgstr "" |
4447 | 4442 | ||
4448 | #: src/regex/gnunet-regex-profiler.c:1295 | 4443 | #: src/regex/gnunet-regex-profiler.c:1300 |
4449 | #, fuzzy, c-format | 4444 | #, fuzzy, c-format |
4450 | msgid "No files found in `%s'\n" | 4445 | msgid "No files found in `%s'\n" |
4451 | msgstr "运行 %s失败:%s %d\n" | 4446 | msgstr "运行 %s失败:%s %d\n" |
4452 | 4447 | ||
4453 | #: src/regex/gnunet-regex-profiler.c:1304 | 4448 | #: src/regex/gnunet-regex-profiler.c:1309 |
4454 | msgid "No search strings file given. Exiting.\n" | 4449 | msgid "No search strings file given. Exiting.\n" |
4455 | msgstr "" | 4450 | msgstr "" |
4456 | 4451 | ||
4457 | #: src/regex/gnunet-regex-profiler.c:1314 | 4452 | #: src/regex/gnunet-regex-profiler.c:1319 |
4458 | #, fuzzy | 4453 | #, fuzzy |
4459 | msgid "" | 4454 | msgid "" |
4460 | "Error loading search strings.Given file does not contain enough strings. " | 4455 | "Error loading search strings.Given file does not contain enough strings. " |
4461 | "Exiting.\n" | 4456 | "Exiting.\n" |
4462 | msgstr "创建用户出错" | 4457 | msgstr "创建用户出错" |
4463 | 4458 | ||
4464 | #: src/regex/gnunet-regex-profiler.c:1322 | 4459 | #: src/regex/gnunet-regex-profiler.c:1327 |
4465 | #, fuzzy | 4460 | #, fuzzy |
4466 | msgid "Error loading search strings. Exiting.\n" | 4461 | msgid "Error loading search strings. Exiting.\n" |
4467 | msgstr "创建用户出错" | 4462 | msgstr "创建用户出错" |
4468 | 4463 | ||
4469 | #: src/regex/gnunet-regex-profiler.c:1389 | 4464 | #: src/regex/gnunet-regex-profiler.c:1394 |
4470 | #, fuzzy | 4465 | #, fuzzy |
4471 | msgid "name of the file for writing statistics" | 4466 | msgid "name of the file for writing statistics" |
4472 | msgstr "初始化“%s”服务失败。\n" | 4467 | msgstr "初始化“%s”服务失败。\n" |
4473 | 4468 | ||
4474 | #: src/regex/gnunet-regex-profiler.c:1392 | 4469 | #: src/regex/gnunet-regex-profiler.c:1397 |
4475 | msgid "wait TIMEOUT before considering a string match as failed" | 4470 | msgid "wait TIMEOUT before ending the experiment" |
4476 | msgstr "" | ||
4477 | |||
4478 | #: src/regex/gnunet-regex-profiler.c:1395 | ||
4479 | msgid "number of search strings to read from search strings file" | ||
4480 | msgstr "" | 4471 | msgstr "" |
4481 | 4472 | ||
4482 | #: src/regex/gnunet-regex-profiler.c:1398 | 4473 | #: src/regex/gnunet-regex-profiler.c:1400 |
4483 | msgid "directory with policy files" | 4474 | msgid "directory with policy files" |
4484 | msgstr "" | 4475 | msgstr "" |
4485 | 4476 | ||
4486 | #: src/regex/gnunet-regex-profiler.c:1401 | 4477 | #: src/regex/gnunet-regex-profiler.c:1403 |
4487 | #, fuzzy | 4478 | #, fuzzy |
4488 | msgid "name of file with input strings" | 4479 | msgid "name of file with input strings" |
4489 | msgstr "初始化“%s”服务失败。\n" | 4480 | msgstr "初始化“%s”服务失败。\n" |
4490 | 4481 | ||
4491 | #: src/regex/gnunet-regex-profiler.c:1404 | 4482 | #: src/regex/gnunet-regex-profiler.c:1406 |
4492 | #, fuzzy | 4483 | #, fuzzy |
4493 | msgid "name of file with hosts' names" | 4484 | msgid "name of file with hosts' names" |
4494 | msgstr "初始化“%s”服务失败。\n" | 4485 | msgstr "初始化“%s”服务失败。\n" |
4495 | 4486 | ||
4496 | #: src/regex/gnunet-regex-profiler.c:1416 | 4487 | #: src/regex/gnunet-regex-profiler.c:1418 |
4497 | msgid "Profiler for regex" | 4488 | msgid "Profiler for regex" |
4498 | msgstr "" | 4489 | msgstr "" |
4499 | 4490 | ||
@@ -4610,7 +4601,7 @@ msgstr "" | |||
4610 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" | 4601 | msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" |
4611 | msgstr "" | 4602 | msgstr "" |
4612 | 4603 | ||
4613 | #: src/testbed/gnunet-service-testbed_cpustatus.c:670 | 4604 | #: src/testbed/gnunet-service-testbed_cpustatus.c:692 |
4614 | #, c-format | 4605 | #, c-format |
4615 | msgid "" | 4606 | msgid "" |
4616 | "Cannot open %s for writing load statistics. Not logging load statistics\n" | 4607 | "Cannot open %s for writing load statistics. Not logging load statistics\n" |
@@ -4621,25 +4612,25 @@ msgstr "" | |||
4621 | msgid "Job command file not given. Exiting\n" | 4612 | msgid "Job command file not given. Exiting\n" |
4622 | msgstr "" | 4613 | msgstr "" |
4623 | 4614 | ||
4624 | #: src/testbed/gnunet_testbed_mpi_spawn.c:135 | 4615 | #: src/testbed/gnunet_testbed_mpi_spawn.c:125 |
4625 | msgid "Waiting for child to exit.\n" | 4616 | msgid "Waiting for child to exit.\n" |
4626 | msgstr "" | 4617 | msgstr "" |
4627 | 4618 | ||
4628 | #: src/testbed/gnunet_testbed_mpi_spawn.c:296 | 4619 | #: src/testbed/gnunet_testbed_mpi_spawn.c:247 |
4629 | #, fuzzy, c-format | 4620 | #, fuzzy, c-format |
4630 | msgid "Spawning process `%s'\n" | 4621 | msgid "Spawning process `%s'\n" |
4631 | msgstr "卸载 GNUnet 服务" | 4622 | msgstr "卸载 GNUnet 服务" |
4632 | 4623 | ||
4633 | #: src/testbed/gnunet-testbed-profiler.c:249 | 4624 | #: src/testbed/gnunet-testbed-profiler.c:251 |
4634 | #, fuzzy, c-format | 4625 | #, fuzzy, c-format |
4635 | msgid "Exiting as the number of peers is %u\n" | 4626 | msgid "Exiting as the number of peers is %u\n" |
4636 | msgstr "增加 TCP/IP 的最大连接数" | 4627 | msgstr "增加 TCP/IP 的最大连接数" |
4637 | 4628 | ||
4638 | #: src/testbed/gnunet-testbed-profiler.c:275 | 4629 | #: src/testbed/gnunet-testbed-profiler.c:277 |
4639 | msgid "create COUNT number of peers" | 4630 | msgid "create COUNT number of peers" |
4640 | msgstr "" | 4631 | msgstr "" |
4641 | 4632 | ||
4642 | #: src/testbed/gnunet-testbed-profiler.c:278 | 4633 | #: src/testbed/gnunet-testbed-profiler.c:280 |
4643 | msgid "tolerate COUNT number of continious timeout failures" | 4634 | msgid "tolerate COUNT number of continious timeout failures" |
4644 | msgstr "" | 4635 | msgstr "" |
4645 | 4636 | ||
@@ -4658,55 +4649,55 @@ msgstr "" | |||
4658 | msgid "Hosts file %s cannot be read\n" | 4649 | msgid "Hosts file %s cannot be read\n" |
4659 | msgstr "" | 4650 | msgstr "" |
4660 | 4651 | ||
4661 | #: src/testbed/testbed_api_hosts.c:583 | 4652 | #: src/testbed/testbed_api_hosts.c:595 |
4662 | #, c-format | 4653 | #, c-format |
4663 | msgid "The function %s is only available when compiled with (--with-ll)\n" | 4654 | msgid "The function %s is only available when compiled with (--with-ll)\n" |
4664 | msgstr "" | 4655 | msgstr "" |
4665 | 4656 | ||
4666 | #: src/testbed/testbed_api_hosts.c:1856 | 4657 | #: src/testbed/testbed_api_hosts.c:1879 |
4667 | #, fuzzy, c-format | 4658 | #, fuzzy, c-format |
4668 | msgid "Adding host %u failed with error: %s\n" | 4659 | msgid "Adding host %u failed with error: %s\n" |
4669 | msgstr "“%s”以错误码 %d 失败:%s\n" | 4660 | msgstr "“%s”以错误码 %d 失败:%s\n" |
4670 | 4661 | ||
4671 | #: src/testbed/testbed_api_testbed.c:771 | 4662 | #: src/testbed/testbed_api_testbed.c:891 |
4672 | msgid "Linking controllers failed. Exiting" | 4663 | msgid "Linking controllers failed. Exiting" |
4673 | msgstr "" | 4664 | msgstr "" |
4674 | 4665 | ||
4675 | #: src/testbed/testbed_api_testbed.c:913 | 4666 | #: src/testbed/testbed_api_testbed.c:1094 |
4676 | #, c-format | 4667 | #, c-format |
4677 | msgid "Host registration failed for a host. Error: %s\n" | 4668 | msgid "Host registration failed for a host. Error: %s\n" |
4678 | msgstr "" | 4669 | msgstr "" |
4679 | 4670 | ||
4680 | #: src/testbed/testbed_api_testbed.c:978 | 4671 | #: src/testbed/testbed_api_testbed.c:1175 |
4681 | msgid "Controller crash detected. Shutting down.\n" | 4672 | msgid "Controller crash detected. Shutting down.\n" |
4682 | msgstr "" | 4673 | msgstr "" |
4683 | 4674 | ||
4684 | #: src/testbed/testbed_api_testbed.c:1081 | 4675 | #: src/testbed/testbed_api_testbed.c:1320 |
4685 | #, c-format | 4676 | #, c-format |
4686 | msgid "Host %s cannot start testbed\n" | 4677 | msgid "Host %s cannot start testbed\n" |
4687 | msgstr "" | 4678 | msgstr "" |
4688 | 4679 | ||
4689 | #: src/testbed/testbed_api_testbed.c:1085 | 4680 | #: src/testbed/testbed_api_testbed.c:1324 |
4690 | msgid "Testbed cannot be started on localhost\n" | 4681 | msgid "Testbed cannot be started on localhost\n" |
4691 | msgstr "" | 4682 | msgstr "" |
4692 | 4683 | ||
4693 | #: src/testbed/testbed_api_testbed.c:1120 | 4684 | #: src/testbed/testbed_api_testbed.c:1365 |
4694 | msgid "Cannot start the master controller" | 4685 | msgid "Cannot start the master controller" |
4695 | msgstr "" | 4686 | msgstr "" |
4696 | 4687 | ||
4697 | #: src/testbed/testbed_api_testbed.c:1138 | 4688 | #: src/testbed/testbed_api_testbed.c:1383 |
4698 | msgid "Shutting down testbed due to timeout while setup.\n" | 4689 | msgid "Shutting down testbed due to timeout while setup.\n" |
4699 | msgstr "" | 4690 | msgstr "" |
4700 | 4691 | ||
4701 | #: src/testbed/testbed_api_testbed.c:1197 | 4692 | #: src/testbed/testbed_api_testbed.c:1443 |
4702 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" | 4693 | msgid "No hosts loaded from LoadLeveler. Need at least one host\n" |
4703 | msgstr "" | 4694 | msgstr "" |
4704 | 4695 | ||
4705 | #: src/testbed/testbed_api_testbed.c:1209 | 4696 | #: src/testbed/testbed_api_testbed.c:1455 |
4706 | msgid "No hosts loaded. Need at least one host\n" | 4697 | msgid "No hosts loaded. Need at least one host\n" |
4707 | msgstr "" | 4698 | msgstr "" |
4708 | 4699 | ||
4709 | #: src/testbed/testbed_api_testbed.c:1233 | 4700 | #: src/testbed/testbed_api_testbed.c:1479 |
4710 | msgid "Specified topology must be supported by testbed" | 4701 | msgid "Specified topology must be supported by testbed" |
4711 | msgstr "" | 4702 | msgstr "" |
4712 | 4703 | ||
@@ -4853,7 +4844,7 @@ msgstr "解析配置文件“%s”失败\n" | |||
4853 | msgid "Failed to start `%s': %s\n" | 4844 | msgid "Failed to start `%s': %s\n" |
4854 | msgstr "运行 %s失败:%s %d\n" | 4845 | msgstr "运行 %s失败:%s %d\n" |
4855 | 4846 | ||
4856 | #: src/testing/testing.c:1691 | 4847 | #: src/testing/testing.c:1709 |
4857 | #, fuzzy, c-format | 4848 | #, fuzzy, c-format |
4858 | msgid "Failed to load configuration from %s\n" | 4849 | msgid "Failed to load configuration from %s\n" |
4859 | msgstr "解析配置文件“%s”失败\n" | 4850 | msgstr "解析配置文件“%s”失败\n" |
@@ -5003,7 +4994,7 @@ msgstr "" | |||
5003 | msgid "# bytes payload dropped (other peer was not connected)" | 4994 | msgid "# bytes payload dropped (other peer was not connected)" |
5004 | msgstr "" | 4995 | msgstr "" |
5005 | 4996 | ||
5006 | #: src/transport/gnunet-service-transport_clients.c:728 | 4997 | #: src/transport/gnunet-service-transport_clients.c:733 |
5007 | msgid "# REQUEST CONNECT messages received" | 4998 | msgid "# REQUEST CONNECT messages received" |
5008 | msgstr "" | 4999 | msgstr "" |
5009 | 5000 | ||
@@ -5064,48 +5055,48 @@ msgstr "" | |||
5064 | msgid "# ms throttling suggested" | 5055 | msgid "# ms throttling suggested" |
5065 | msgstr "" | 5056 | msgstr "" |
5066 | 5057 | ||
5067 | #: src/transport/gnunet-service-transport_neighbours.c:2770 | 5058 | #: src/transport/gnunet-service-transport_neighbours.c:2774 |
5068 | msgid "# unexpected CONNECT_ACK messages (no peer)" | 5059 | msgid "# unexpected CONNECT_ACK messages (no peer)" |
5069 | msgstr "" | 5060 | msgstr "" |
5070 | 5061 | ||
5071 | #: src/transport/gnunet-service-transport_neighbours.c:2785 | 5062 | #: src/transport/gnunet-service-transport_neighbours.c:2789 |
5072 | #: src/transport/gnunet-service-transport_neighbours.c:2819 | 5063 | #: src/transport/gnunet-service-transport_neighbours.c:2823 |
5073 | msgid "# unexpected CONNECT_ACK messages (not ready)" | 5064 | msgid "# unexpected CONNECT_ACK messages (not ready)" |
5074 | msgstr "" | 5065 | msgstr "" |
5075 | 5066 | ||
5076 | #: src/transport/gnunet-service-transport_neighbours.c:2832 | 5067 | #: src/transport/gnunet-service-transport_neighbours.c:2836 |
5077 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" | 5068 | msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" |
5078 | msgstr "" | 5069 | msgstr "" |
5079 | 5070 | ||
5080 | #: src/transport/gnunet-service-transport_neighbours.c:2865 | 5071 | #: src/transport/gnunet-service-transport_neighbours.c:2869 |
5081 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" | 5072 | msgid "# unexpected CONNECT_ACK messages (disconnecting)" |
5082 | msgstr "" | 5073 | msgstr "" |
5083 | 5074 | ||
5084 | #: src/transport/gnunet-service-transport_neighbours.c:3046 | 5075 | #: src/transport/gnunet-service-transport_neighbours.c:3050 |
5085 | msgid "# unexpected SESSION ACK messages" | 5076 | msgid "# unexpected SESSION ACK messages" |
5086 | msgstr "" | 5077 | msgstr "" |
5087 | 5078 | ||
5088 | #: src/transport/gnunet-service-transport_neighbours.c:3101 | 5079 | #: src/transport/gnunet-service-transport_neighbours.c:3105 |
5089 | msgid "# SET QUOTA messages ignored (no such peer)" | 5080 | msgid "# SET QUOTA messages ignored (no such peer)" |
5090 | msgstr "" | 5081 | msgstr "" |
5091 | 5082 | ||
5092 | #: src/transport/gnunet-service-transport_neighbours.c:3115 | 5083 | #: src/transport/gnunet-service-transport_neighbours.c:3119 |
5093 | msgid "# disconnects due to quota of 0" | 5084 | msgid "# disconnects due to quota of 0" |
5094 | msgstr "" | 5085 | msgstr "" |
5095 | 5086 | ||
5096 | #: src/transport/gnunet-service-transport_neighbours.c:3146 | 5087 | #: src/transport/gnunet-service-transport_neighbours.c:3150 |
5097 | msgid "# disconnect messages ignored (old format)" | 5088 | msgid "# disconnect messages ignored (old format)" |
5098 | msgstr "" | 5089 | msgstr "" |
5099 | 5090 | ||
5100 | #: src/transport/gnunet-service-transport_neighbours.c:3157 | 5091 | #: src/transport/gnunet-service-transport_neighbours.c:3161 |
5101 | msgid "# disconnect messages ignored (timestamp)" | 5092 | msgid "# disconnect messages ignored (timestamp)" |
5102 | msgstr "" | 5093 | msgstr "" |
5103 | 5094 | ||
5104 | #: src/transport/gnunet-service-transport_neighbours.c:3188 | 5095 | #: src/transport/gnunet-service-transport_neighbours.c:3192 |
5105 | msgid "# other peer asked to disconnect from us" | 5096 | msgid "# other peer asked to disconnect from us" |
5106 | msgstr "" | 5097 | msgstr "" |
5107 | 5098 | ||
5108 | #: src/transport/gnunet-service-transport_neighbours.c:3283 | 5099 | #: src/transport/gnunet-service-transport_neighbours.c:3287 |
5109 | msgid "# disconnected from peer upon explicit request" | 5100 | msgid "# disconnected from peer upon explicit request" |
5110 | msgstr "" | 5101 | msgstr "" |
5111 | 5102 | ||
@@ -5515,86 +5506,86 @@ msgstr "" | |||
5515 | msgid "# bytes dropped by SMTP (outgoing)" | 5506 | msgid "# bytes dropped by SMTP (outgoing)" |
5516 | msgstr "" | 5507 | msgstr "" |
5517 | 5508 | ||
5518 | #: src/transport/plugin_transport_tcp.c:595 | 5509 | #: src/transport/plugin_transport_tcp.c:596 |
5519 | #, c-format | 5510 | #, c-format |
5520 | msgid "Unexpected address length: %u bytes\n" | 5511 | msgid "Unexpected address length: %u bytes\n" |
5521 | msgstr "" | 5512 | msgstr "" |
5522 | 5513 | ||
5523 | #: src/transport/plugin_transport_tcp.c:771 | 5514 | #: src/transport/plugin_transport_tcp.c:772 |
5524 | #: src/transport/plugin_transport_tcp.c:860 | 5515 | #: src/transport/plugin_transport_tcp.c:861 |
5525 | #: src/transport/plugin_transport_tcp.c:910 | 5516 | #: src/transport/plugin_transport_tcp.c:911 |
5526 | #: src/transport/plugin_transport_tcp.c:996 | 5517 | #: src/transport/plugin_transport_tcp.c:997 |
5527 | #: src/transport/plugin_transport_tcp.c:1139 | 5518 | #: src/transport/plugin_transport_tcp.c:1140 |
5528 | #: src/transport/plugin_transport_tcp.c:1156 | 5519 | #: src/transport/plugin_transport_tcp.c:1157 |
5529 | msgid "# bytes currently in TCP buffers" | 5520 | msgid "# bytes currently in TCP buffers" |
5530 | msgstr "" | 5521 | msgstr "" |
5531 | 5522 | ||
5532 | #: src/transport/plugin_transport_tcp.c:778 | 5523 | #: src/transport/plugin_transport_tcp.c:779 |
5533 | #: src/transport/plugin_transport_tcp.c:967 | 5524 | #: src/transport/plugin_transport_tcp.c:968 |
5534 | #: src/transport/plugin_transport_tcp.c:1826 | 5525 | #: src/transport/plugin_transport_tcp.c:1827 |
5535 | #: src/transport/plugin_transport_tcp.c:2456 | 5526 | #: src/transport/plugin_transport_tcp.c:2460 |
5536 | msgid "# TCP sessions active" | 5527 | msgid "# TCP sessions active" |
5537 | msgstr "" | 5528 | msgstr "" |
5538 | 5529 | ||
5539 | #: src/transport/plugin_transport_tcp.c:864 | 5530 | #: src/transport/plugin_transport_tcp.c:865 |
5540 | msgid "# bytes discarded by TCP (timeout)" | 5531 | msgid "# bytes discarded by TCP (timeout)" |
5541 | msgstr "" | 5532 | msgstr "" |
5542 | 5533 | ||
5543 | #: src/transport/plugin_transport_tcp.c:913 | 5534 | #: src/transport/plugin_transport_tcp.c:914 |
5544 | msgid "# bytes transmitted via TCP" | 5535 | msgid "# bytes transmitted via TCP" |
5545 | msgstr "" | 5536 | msgstr "" |
5546 | 5537 | ||
5547 | #: src/transport/plugin_transport_tcp.c:1000 | 5538 | #: src/transport/plugin_transport_tcp.c:1001 |
5548 | msgid "# bytes discarded by TCP (disconnect)" | 5539 | msgid "# bytes discarded by TCP (disconnect)" |
5549 | msgstr "" | 5540 | msgstr "" |
5550 | 5541 | ||
5551 | #: src/transport/plugin_transport_tcp.c:1113 | 5542 | #: src/transport/plugin_transport_tcp.c:1114 |
5552 | #, c-format | 5543 | #, c-format |
5553 | msgid "Trying to send with invalid session %p\n" | 5544 | msgid "Trying to send with invalid session %p\n" |
5554 | msgstr "" | 5545 | msgstr "" |
5555 | 5546 | ||
5556 | #: src/transport/plugin_transport_tcp.c:1349 | 5547 | #: src/transport/plugin_transport_tcp.c:1350 |
5557 | #, c-format | 5548 | #, c-format |
5558 | msgid "Address of unexpected length: %u\n" | 5549 | msgid "Address of unexpected length: %u\n" |
5559 | msgstr "" | 5550 | msgstr "" |
5560 | 5551 | ||
5561 | #: src/transport/plugin_transport_tcp.c:1466 | 5552 | #: src/transport/plugin_transport_tcp.c:1467 |
5562 | msgid "# transport-service disconnect requests for TCP" | 5553 | msgid "# transport-service disconnect requests for TCP" |
5563 | msgstr "" | 5554 | msgstr "" |
5564 | 5555 | ||
5565 | #: src/transport/plugin_transport_tcp.c:1867 | 5556 | #: src/transport/plugin_transport_tcp.c:1868 |
5566 | msgid "# TCP WELCOME messages received" | 5557 | msgid "# TCP WELCOME messages received" |
5567 | msgstr "" | 5558 | msgstr "" |
5568 | 5559 | ||
5569 | #: src/transport/plugin_transport_tcp.c:2036 | 5560 | #: src/transport/plugin_transport_tcp.c:2037 |
5570 | msgid "# bytes received via TCP" | 5561 | msgid "# bytes received via TCP" |
5571 | msgstr "" | 5562 | msgstr "" |
5572 | 5563 | ||
5573 | #: src/transport/plugin_transport_tcp.c:2118 | 5564 | #: src/transport/plugin_transport_tcp.c:2119 |
5574 | msgid "# network-level TCP disconnect events" | 5565 | msgid "# network-level TCP disconnect events" |
5575 | msgstr "" | 5566 | msgstr "" |
5576 | 5567 | ||
5577 | #: src/transport/plugin_transport_tcp.c:2344 src/util/service.c:948 | 5568 | #: src/transport/plugin_transport_tcp.c:2345 src/util/service.c:948 |
5578 | #: src/util/service.c:954 | 5569 | #: src/util/service.c:954 |
5579 | #, c-format | 5570 | #, c-format |
5580 | msgid "Require valid port number for service `%s' in configuration!\n" | 5571 | msgid "Require valid port number for service `%s' in configuration!\n" |
5581 | msgstr "" | 5572 | msgstr "" |
5582 | 5573 | ||
5583 | #: src/transport/plugin_transport_tcp.c:2358 | 5574 | #: src/transport/plugin_transport_tcp.c:2359 |
5584 | #, fuzzy | 5575 | #, fuzzy |
5585 | msgid "Failed to start service.\n" | 5576 | msgid "Failed to start service.\n" |
5586 | msgstr "初始化“%s”服务失败。\n" | 5577 | msgstr "初始化“%s”服务失败。\n" |
5587 | 5578 | ||
5588 | #: src/transport/plugin_transport_tcp.c:2444 | 5579 | #: src/transport/plugin_transport_tcp.c:2448 |
5589 | #, c-format | 5580 | #, c-format |
5590 | msgid "TCP transport listening on port %llu\n" | 5581 | msgid "TCP transport listening on port %llu\n" |
5591 | msgstr "" | 5582 | msgstr "" |
5592 | 5583 | ||
5593 | #: src/transport/plugin_transport_tcp.c:2448 | 5584 | #: src/transport/plugin_transport_tcp.c:2452 |
5594 | msgid "TCP transport not listening on any port (client only)\n" | 5585 | msgid "TCP transport not listening on any port (client only)\n" |
5595 | msgstr "" | 5586 | msgstr "" |
5596 | 5587 | ||
5597 | #: src/transport/plugin_transport_tcp.c:2452 | 5588 | #: src/transport/plugin_transport_tcp.c:2456 |
5598 | #, c-format | 5589 | #, c-format |
5599 | msgid "TCP transport advertises itself as being on port %llu\n" | 5590 | msgid "TCP transport advertises itself as being on port %llu\n" |
5600 | msgstr "" | 5591 | msgstr "" |
@@ -5617,14 +5608,14 @@ msgstr "" | |||
5617 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" | 5608 | msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" |
5618 | msgstr "" | 5609 | msgstr "" |
5619 | 5610 | ||
5620 | #: src/transport/plugin_transport_udp.c:2520 | 5611 | #: src/transport/plugin_transport_udp.c:2350 |
5621 | #, c-format | 5612 | #, c-format |
5622 | msgid "" | 5613 | msgid "" |
5623 | "UDP could not transmit message to `%s': Network seems down, please check " | 5614 | "UDP could not transmit message to `%s': Network seems down, please check " |
5624 | "your network configuration\n" | 5615 | "your network configuration\n" |
5625 | msgstr "" | 5616 | msgstr "" |
5626 | 5617 | ||
5627 | #: src/transport/plugin_transport_udp.c:2534 | 5618 | #: src/transport/plugin_transport_udp.c:2364 |
5628 | #, c-format | 5619 | #, c-format |
5629 | msgid "" | 5620 | msgid "" |
5630 | "UDP could not transmit message to `%s': Please check your network " | 5621 | "UDP could not transmit message to `%s': Please check your network " |
@@ -5632,24 +5623,29 @@ msgid "" | |||
5632 | "IPv6 address\n" | 5623 | "IPv6 address\n" |
5633 | msgstr "" | 5624 | msgstr "" |
5634 | 5625 | ||
5635 | #: src/transport/plugin_transport_udp.c:2775 | 5626 | #: src/transport/plugin_transport_udp.c:2664 |
5636 | #, fuzzy | 5627 | #, fuzzy |
5637 | msgid "Failed to open UDP sockets\n" | 5628 | msgid "Failed to open UDP sockets\n" |
5638 | msgstr "打开日志文件“%s”失败:%s\n" | 5629 | msgstr "打开日志文件“%s”失败:%s\n" |
5639 | 5630 | ||
5640 | #: src/transport/plugin_transport_udp.c:2851 | 5631 | #: src/transport/plugin_transport_udp.c:2762 |
5641 | #, c-format | 5632 | #, c-format |
5642 | msgid "Given `%s' option is out of range: %llu > %u\n" | 5633 | msgid "Given `%s' option is out of range: %llu > %u\n" |
5643 | msgstr "" | 5634 | msgstr "" |
5644 | 5635 | ||
5645 | #: src/transport/plugin_transport_udp.c:2894 | 5636 | #: src/transport/plugin_transport_udp.c:2805 |
5646 | #, fuzzy, c-format | 5637 | #, fuzzy, c-format |
5647 | msgid "Invalid IPv6 address: `%s'\n" | 5638 | msgid "Invalid IPv6 address: `%s'\n" |
5648 | msgstr "无效的进程优先级“%s”\n" | 5639 | msgstr "无效的进程优先级“%s”\n" |
5649 | 5640 | ||
5650 | #: src/transport/plugin_transport_unix.c:1353 | 5641 | #: src/transport/plugin_transport_udp.c:2862 |
5642 | #, fuzzy | ||
5643 | msgid "Failed to create network sockets, plugin failed\n" | ||
5644 | msgstr "发送消息失败。\n" | ||
5645 | |||
5646 | #: src/transport/plugin_transport_unix.c:1427 | ||
5651 | #, fuzzy | 5647 | #, fuzzy |
5652 | msgid "Failed to open UNIX sockets\n" | 5648 | msgid "Failed to open UNIX listen socket\n" |
5653 | msgstr "打开日志文件“%s”失败:%s\n" | 5649 | msgstr "打开日志文件“%s”失败:%s\n" |
5654 | 5650 | ||
5655 | #: src/transport/plugin_transport_wlan.c:580 | 5651 | #: src/transport/plugin_transport_wlan.c:580 |
@@ -5947,7 +5943,7 @@ msgstr "" | |||
5947 | msgid "gnunet-ecc failed" | 5943 | msgid "gnunet-ecc failed" |
5948 | msgstr "" | 5944 | msgstr "" |
5949 | 5945 | ||
5950 | #: src/util/crypto_ecc.c:1045 | 5946 | #: src/util/crypto_ecc.c:1084 |
5951 | #, c-format | 5947 | #, c-format |
5952 | msgid "ECC signature verification failed at %s:%d: %s\n" | 5948 | msgid "ECC signature verification failed at %s:%d: %s\n" |
5953 | msgstr "" | 5949 | msgstr "" |
@@ -6209,17 +6205,17 @@ msgstr "" | |||
6209 | msgid "Perform default-actions for GNUnet URIs" | 6205 | msgid "Perform default-actions for GNUnet URIs" |
6210 | msgstr "" | 6206 | msgstr "" |
6211 | 6207 | ||
6212 | #: src/util/helper.c:271 | 6208 | #: src/util/helper.c:322 |
6213 | #, fuzzy, c-format | 6209 | #, fuzzy, c-format |
6214 | msgid "Error reading from `%s': %s\n" | 6210 | msgid "Error reading from `%s': %s\n" |
6215 | msgstr "创建用户出错" | 6211 | msgstr "创建用户出错" |
6216 | 6212 | ||
6217 | #: src/util/helper.c:316 | 6213 | #: src/util/helper.c:367 |
6218 | #, fuzzy, c-format | 6214 | #, fuzzy, c-format |
6219 | msgid "Failed to parse inbound message from helper `%s'\n" | 6215 | msgid "Failed to parse inbound message from helper `%s'\n" |
6220 | msgstr "打开日志文件“%s”失败:%s\n" | 6216 | msgstr "打开日志文件“%s”失败:%s\n" |
6221 | 6217 | ||
6222 | #: src/util/helper.c:537 | 6218 | #: src/util/helper.c:564 |
6223 | #, fuzzy, c-format | 6219 | #, fuzzy, c-format |
6224 | msgid "Error writing to `%s': %s\n" | 6220 | msgid "Error writing to `%s': %s\n" |
6225 | msgstr "创建用户出错" | 6221 | msgstr "创建用户出错" |
diff --git a/src/consensus/Makefile.am b/src/consensus/Makefile.am index 82af29c87..a0edb1d65 100644 --- a/src/consensus/Makefile.am +++ b/src/consensus/Makefile.am | |||
@@ -17,8 +17,7 @@ endif | |||
17 | 17 | ||
18 | bin_PROGRAMS = \ | 18 | bin_PROGRAMS = \ |
19 | gnunet-consensus \ | 19 | gnunet-consensus \ |
20 | gnunet-consensus-start-peers \ | 20 | gnunet-consensus-start-peers |
21 | gnunet-consensus-ibf | ||
22 | 21 | ||
23 | libexec_PROGRAMS = \ | 22 | libexec_PROGRAMS = \ |
24 | gnunet-service-consensus | 23 | gnunet-service-consensus |
@@ -52,33 +51,25 @@ gnunet_consensus_start_peers_LDADD = \ | |||
52 | gnunet_consensus_start_peers_DEPENDENCIES = \ | 51 | gnunet_consensus_start_peers_DEPENDENCIES = \ |
53 | libgnunetconsensus.la | 52 | libgnunetconsensus.la |
54 | 53 | ||
55 | gnunet_consensus_ibf_SOURCES = \ | ||
56 | gnunet-consensus-ibf.c \ | ||
57 | ibf.c | ||
58 | gnunet_consensus_ibf_LDADD = \ | ||
59 | $(top_builddir)/src/util/libgnunetutil.la \ | ||
60 | $(GN_LIBINTL) | ||
61 | 54 | ||
62 | gnunet_service_consensus_SOURCES = \ | 55 | gnunet_service_consensus_SOURCES = \ |
63 | gnunet-service-consensus.c \ | 56 | gnunet-service-consensus.c |
64 | ibf.c \ | ||
65 | strata_estimator.c | ||
66 | gnunet_service_consensus_LDADD = \ | 57 | gnunet_service_consensus_LDADD = \ |
67 | $(top_builddir)/src/util/libgnunetutil.la \ | 58 | $(top_builddir)/src/util/libgnunetutil.la \ |
68 | $(top_builddir)/src/core/libgnunetcore.la \ | 59 | $(top_builddir)/src/core/libgnunetcore.la \ |
69 | $(top_builddir)/src/stream/libgnunetstream.la \ | 60 | $(top_builddir)/src/stream/libgnunetstream.la \ |
70 | $(top_builddir)/src/mesh/libgnunetmesh.la \ | 61 | $(top_builddir)/src/mesh/libgnunetmesh.la \ |
62 | $(top_builddir)/src/set/libgnunetset.la \ | ||
71 | $(GN_LIBINTL) | 63 | $(GN_LIBINTL) |
72 | 64 | ||
73 | gnunet_service_evil_consensus_SOURCES = \ | 65 | gnunet_service_evil_consensus_SOURCES = \ |
74 | gnunet-service-consensus.c \ | 66 | gnunet-service-consensus.c |
75 | ibf.c \ | ||
76 | strata_estimator.c | ||
77 | gnunet_service_evil_consensus_LDADD = \ | 67 | gnunet_service_evil_consensus_LDADD = \ |
78 | $(top_builddir)/src/util/libgnunetutil.la \ | 68 | $(top_builddir)/src/util/libgnunetutil.la \ |
79 | $(top_builddir)/src/core/libgnunetcore.la \ | 69 | $(top_builddir)/src/core/libgnunetcore.la \ |
80 | $(top_builddir)/src/stream/libgnunetstream.la \ | 70 | $(top_builddir)/src/stream/libgnunetstream.la \ |
81 | $(top_builddir)/src/mesh/libgnunetmesh.la \ | 71 | $(top_builddir)/src/mesh/libgnunetmesh.la \ |
72 | $(top_builddir)/src/set/libgnunetset.la \ | ||
82 | $(GN_LIBINTL) | 73 | $(GN_LIBINTL) |
83 | gnunet_service_evil_consensus_CFLAGS = -DEVIL | 74 | gnunet_service_evil_consensus_CFLAGS = -DEVIL |
84 | 75 | ||
diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h index 06a66caed..e3c84e6fe 100644 --- a/src/consensus/consensus.h +++ b/src/consensus/consensus.h | |||
@@ -30,6 +30,10 @@ | |||
30 | 30 | ||
31 | GNUNET_NETWORK_STRUCT_BEGIN | 31 | GNUNET_NETWORK_STRUCT_BEGIN |
32 | 32 | ||
33 | /** | ||
34 | * Sent by the client to the service, | ||
35 | * when the client wants the service to join a consensus session. | ||
36 | */ | ||
33 | struct GNUNET_CONSENSUS_JoinMessage | 37 | struct GNUNET_CONSENSUS_JoinMessage |
34 | { | 38 | { |
35 | /** | 39 | /** |
diff --git a/src/consensus/consensus_protocol.h b/src/consensus/consensus_protocol.h index 32c3d8b09..af4d74100 100644 --- a/src/consensus/consensus_protocol.h +++ b/src/consensus/consensus_protocol.h | |||
@@ -35,54 +35,17 @@ | |||
35 | 35 | ||
36 | GNUNET_NETWORK_STRUCT_BEGIN | 36 | GNUNET_NETWORK_STRUCT_BEGIN |
37 | 37 | ||
38 | struct StrataMessage | 38 | /** |
39 | { | 39 | * Sent as context message for set reconciliation. |
40 | struct GNUNET_MessageHeader header; | 40 | */ |
41 | uint8_t round; | 41 | struct ConsensusRoundMessage |
42 | uint8_t exp_round; | ||
43 | uint8_t exp_subround; | ||
44 | /* struct GNUNET_HashCode hash_buckets[ibf_size*num_strata] */ | ||
45 | /* struct GNUNET_HashCode id_buckets[ibf_size*num_strata] */ | ||
46 | /* uint8_t count_buckets[ibf_size*num_strata] */ | ||
47 | }; | ||
48 | |||
49 | struct DifferenceDigest | ||
50 | { | 42 | { |
51 | struct GNUNET_MessageHeader header; | 43 | struct GNUNET_MessageHeader header; |
52 | uint8_t order; | ||
53 | uint8_t round; | 44 | uint8_t round; |
54 | uint8_t exp_round; | 45 | uint8_t exp_round; |
55 | uint8_t exp_subround; | 46 | uint8_t exp_subround; |
56 | /* rest: IBF */ | ||
57 | }; | ||
58 | |||
59 | |||
60 | struct Element | ||
61 | { | ||
62 | struct GNUNET_MessageHeader header; | ||
63 | struct GNUNET_HashCode hash; | ||
64 | }; | 47 | }; |
65 | 48 | ||
66 | |||
67 | struct ElementRequest | ||
68 | { | ||
69 | struct GNUNET_MessageHeader header; | ||
70 | /* struct GNUNET_HashCode[] rest */ | ||
71 | }; | ||
72 | |||
73 | struct ConsensusHello | ||
74 | { | ||
75 | struct GNUNET_MessageHeader header; | ||
76 | struct GNUNET_HashCode global_id; | ||
77 | }; | ||
78 | |||
79 | struct ConsensusRoundMessage | ||
80 | { | ||
81 | struct GNUNET_MessageHeader header; | ||
82 | uint8_t round; | ||
83 | }; | ||
84 | |||
85 | |||
86 | GNUNET_NETWORK_STRUCT_END | 49 | GNUNET_NETWORK_STRUCT_END |
87 | 50 | ||
88 | #endif | 51 | #endif |
diff --git a/src/consensus/gnunet-service-consensus.c b/src/consensus/gnunet-service-consensus.c index a7640c51f..44edeb215 100644 --- a/src/consensus/gnunet-service-consensus.c +++ b/src/consensus/gnunet-service-consensus.c | |||
@@ -29,14 +29,10 @@ | |||
29 | #include "gnunet_protocols.h" | 29 | #include "gnunet_protocols.h" |
30 | #include "gnunet_applications.h" | 30 | #include "gnunet_applications.h" |
31 | #include "gnunet_util_lib.h" | 31 | #include "gnunet_util_lib.h" |
32 | #include "gnunet_set_service.h" | ||
32 | #include "gnunet_consensus_service.h" | 33 | #include "gnunet_consensus_service.h" |
33 | #include "gnunet_core_service.h" | ||
34 | #include "gnunet_stream_lib.h" | ||
35 | |||
36 | #include "consensus_protocol.h" | 34 | #include "consensus_protocol.h" |
37 | #include "consensus.h" | 35 | #include "consensus.h" |
38 | #include "ibf.h" | ||
39 | #include "strata_estimator.h" | ||
40 | 36 | ||
41 | 37 | ||
42 | /* | 38 | /* |
@@ -47,82 +43,19 @@ | |||
47 | 43 | ||
48 | 44 | ||
49 | /** | 45 | /** |
50 | * Number of IBFs in a strata estimator. | ||
51 | */ | ||
52 | #define SE_STRATA_COUNT 32 | ||
53 | /** | ||
54 | * Size of the IBFs in the strata estimator. | ||
55 | */ | ||
56 | #define SE_IBF_SIZE 80 | ||
57 | /** | ||
58 | * hash num parameter for the difference digests and strata estimators | ||
59 | */ | ||
60 | #define SE_IBF_HASH_NUM 3 | ||
61 | |||
62 | /** | ||
63 | * Number of buckets that can be transmitted in one message. | ||
64 | */ | ||
65 | #define BUCKETS_PER_MESSAGE ((1<<15) / IBF_BUCKET_SIZE) | ||
66 | |||
67 | /** | ||
68 | * The maximum size of an ibf we use is 2^(MAX_IBF_ORDER). | ||
69 | * Choose this value so that computing the IBF is still cheaper | ||
70 | * than transmitting all values. | ||
71 | */ | ||
72 | #define MAX_IBF_ORDER (16) | ||
73 | |||
74 | /** | ||
75 | * Number of exponential rounds, used in the inventory and completion round. | 46 | * Number of exponential rounds, used in the inventory and completion round. |
76 | */ | 47 | */ |
77 | #define NUM_EXP_ROUNDS (4) | 48 | #define NUM_EXP_ROUNDS (4) |
78 | 49 | ||
79 | |||
80 | /* forward declarations */ | 50 | /* forward declarations */ |
81 | 51 | ||
82 | /* mutual recursion with struct ConsensusSession */ | 52 | /* mutual recursion with struct ConsensusSession */ |
83 | struct ConsensusPeerInformation; | 53 | struct ConsensusPeerInformation; |
84 | 54 | ||
85 | struct MessageQueue; | ||
86 | |||
87 | /* mutual recursion with round_over */ | 55 | /* mutual recursion with round_over */ |
88 | static void | 56 | static void |
89 | subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); | 57 | subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); |
90 | 58 | ||
91 | /* mutial recursion with transmit_queued */ | ||
92 | static void | ||
93 | client_send_next (struct MessageQueue *mq); | ||
94 | |||
95 | /* mutual recursion with mst_session_callback */ | ||
96 | static void | ||
97 | open_cb (void *cls, struct GNUNET_STREAM_Socket *socket); | ||
98 | |||
99 | static int | ||
100 | mst_session_callback (void *cls, void *client, const struct GNUNET_MessageHeader *message); | ||
101 | |||
102 | |||
103 | /** | ||
104 | * Additional information about a consensus element. | ||
105 | */ | ||
106 | struct ElementInfo | ||
107 | { | ||
108 | /** | ||
109 | * The element itself. | ||
110 | */ | ||
111 | struct GNUNET_CONSENSUS_Element *element; | ||
112 | /** | ||
113 | * Hash of the element | ||
114 | */ | ||
115 | struct GNUNET_HashCode *element_hash; | ||
116 | /** | ||
117 | * Number of other peers that have the element in the inventory. | ||
118 | */ | ||
119 | unsigned int inventory_count; | ||
120 | /** | ||
121 | * Bitmap of peers that have this element in their inventory | ||
122 | */ | ||
123 | uint8_t *inventory_bitmap; | ||
124 | }; | ||
125 | |||
126 | 59 | ||
127 | /** | 60 | /** |
128 | * Describes the current round a consensus session is in. | 61 | * Describes the current round a consensus session is in. |
@@ -138,7 +71,8 @@ enum ConsensusRound | |||
138 | */ | 71 | */ |
139 | CONSENSUS_ROUND_EXCHANGE, | 72 | CONSENSUS_ROUND_EXCHANGE, |
140 | /** | 73 | /** |
141 | * Exchange which elements each peer has, but not the elements. | 74 | * Exchange which elements each peer has, but don't |
75 | * transmit the element's data, only their SHA-512 hashes. | ||
142 | * This round uses the all-to-all scheme. | 76 | * This round uses the all-to-all scheme. |
143 | */ | 77 | */ |
144 | CONSENSUS_ROUND_INVENTORY, | 78 | CONSENSUS_ROUND_INVENTORY, |
@@ -153,82 +87,6 @@ enum ConsensusRound | |||
153 | CONSENSUS_ROUND_FINISH | 87 | CONSENSUS_ROUND_FINISH |
154 | }; | 88 | }; |
155 | 89 | ||
156 | /* FIXME: review states, ANTICIPATE_DIFF and DECODING in particular */ | ||
157 | |||
158 | /** | ||
159 | * State of another peer with respect to the | ||
160 | * current ibf. | ||
161 | */ | ||
162 | enum ConsensusIBFState { | ||
163 | /** | ||
164 | * There is nothing going on with the IBF. | ||
165 | */ | ||
166 | IBF_STATE_NONE=0, | ||
167 | /** | ||
168 | * We currently receive an ibf. | ||
169 | */ | ||
170 | IBF_STATE_RECEIVING, | ||
171 | /* | ||
172 | * we decode a received ibf | ||
173 | */ | ||
174 | IBF_STATE_DECODING, | ||
175 | /** | ||
176 | * wait for elements and element requests | ||
177 | */ | ||
178 | IBF_STATE_ANTICIPATE_DIFF | ||
179 | }; | ||
180 | |||
181 | |||
182 | typedef void (*AddCallback) (struct MessageQueue *mq); | ||
183 | typedef void (*MessageSentCallback) (void *cls); | ||
184 | |||
185 | |||
186 | /** | ||
187 | * Collection of the state necessary to read and write gnunet messages | ||
188 | * to a stream socket. Should be used as closure for stream_data_processor. | ||
189 | */ | ||
190 | struct MessageStreamState | ||
191 | { | ||
192 | struct GNUNET_SERVER_MessageStreamTokenizer *mst; | ||
193 | struct MessageQueue *mq; | ||
194 | void *mst_cls; | ||
195 | struct GNUNET_STREAM_Socket *socket; | ||
196 | struct GNUNET_STREAM_ReadHandle *rh; | ||
197 | struct GNUNET_STREAM_WriteHandle *wh; | ||
198 | }; | ||
199 | |||
200 | |||
201 | struct ServerClientSocketState | ||
202 | { | ||
203 | struct GNUNET_SERVER_Client *client; | ||
204 | struct GNUNET_SERVER_TransmitHandle* th; | ||
205 | }; | ||
206 | |||
207 | |||
208 | /** | ||
209 | * Generic message queue, for queueing outgoing messages. | ||
210 | */ | ||
211 | struct MessageQueue | ||
212 | { | ||
213 | void *state; | ||
214 | AddCallback add_cb; | ||
215 | struct PendingMessage *pending_head; | ||
216 | struct PendingMessage *pending_tail; | ||
217 | struct PendingMessage *current_pm; | ||
218 | }; | ||
219 | |||
220 | |||
221 | struct PendingMessage | ||
222 | { | ||
223 | struct GNUNET_MessageHeader *msg; | ||
224 | struct MessageQueue *parent_queue; | ||
225 | struct PendingMessage *next; | ||
226 | struct PendingMessage *prev; | ||
227 | MessageSentCallback sent_cb; | ||
228 | void *sent_cb_cls; | ||
229 | }; | ||
230 | |||
231 | |||
232 | /** | 90 | /** |
233 | * A consensus session consists of one local client and the remote authorities. | 91 | * A consensus session consists of one local client and the remote authorities. |
234 | */ | 92 | */ |
@@ -245,58 +103,35 @@ struct ConsensusSession | |||
245 | struct ConsensusSession *prev; | 103 | struct ConsensusSession *prev; |
246 | 104 | ||
247 | /** | 105 | /** |
248 | * Join message. Used to initialize the session later, | ||
249 | * if the identity of the local peer is not yet known. | ||
250 | * NULL if the session has been fully initialized. | ||
251 | */ | ||
252 | struct GNUNET_CONSENSUS_JoinMessage *join_msg; | ||
253 | |||
254 | /** | ||
255 | * Global consensus identification, computed | 106 | * Global consensus identification, computed |
256 | * from the session id and participating authorities. | 107 | * from the session id and participating authorities. |
257 | */ | 108 | */ |
258 | struct GNUNET_HashCode global_id; | 109 | struct GNUNET_HashCode global_id; |
259 | 110 | ||
260 | /** | 111 | /** |
261 | * The server's client and associated local state | 112 | * Client that inhabits the session |
262 | */ | 113 | */ |
263 | struct ServerClientSocketState scss; | 114 | struct GNUNET_SERVER_Client *client; |
264 | 115 | ||
265 | /** | 116 | /** |
266 | * Queued messages to the client. | 117 | * Queued messages to the client. |
267 | */ | 118 | */ |
268 | struct MessageQueue *client_mq; | 119 | struct GNUNET_MQ_MessageQueue *client_mq; |
269 | |||
270 | /** | ||
271 | * IBF_Key -> 2^(HashCode*) | ||
272 | * FIXME: | ||
273 | * should be array of hash maps, mapping replicated struct IBF_Keys to struct HashCode *. | ||
274 | */ | ||
275 | struct GNUNET_CONTAINER_MultiHashMap *ibf_key_map; | ||
276 | |||
277 | /** | ||
278 | * Maps HashCodes to ElementInfos | ||
279 | */ | ||
280 | struct GNUNET_CONTAINER_MultiHashMap *values; | ||
281 | |||
282 | /** | ||
283 | * Currently active transmit handle for sending to the client | ||
284 | */ | ||
285 | struct GNUNET_SERVER_TransmitHandle *client_th; | ||
286 | 120 | ||
287 | /** | 121 | /** |
288 | * Timeout for all rounds together, single rounds will schedule a timeout task | 122 | * Timeout for all rounds together, single rounds will schedule a timeout task |
289 | * with a fraction of the conclude timeout. | 123 | * with a fraction of the conclude timeout. |
124 | * Only valid once the current round is not CONSENSUS_ROUND_BEGIN. | ||
290 | */ | 125 | */ |
291 | struct GNUNET_TIME_Relative conclude_timeout; | 126 | struct GNUNET_TIME_Relative conclude_timeout; |
292 | 127 | ||
293 | /** | 128 | /** |
294 | * Timeout task identifier for the current round | 129 | * Timeout task identifier for the current round. |
295 | */ | 130 | */ |
296 | GNUNET_SCHEDULER_TaskIdentifier round_timeout_tid; | 131 | GNUNET_SCHEDULER_TaskIdentifier round_timeout_tid; |
297 | 132 | ||
298 | /** | 133 | /** |
299 | * Number of other peers in the consensus | 134 | * Number of other peers in the consensus. |
300 | */ | 135 | */ |
301 | unsigned int num_peers; | 136 | unsigned int num_peers; |
302 | 137 | ||
@@ -307,26 +142,11 @@ struct ConsensusSession | |||
307 | struct ConsensusPeerInformation *info; | 142 | struct ConsensusPeerInformation *info; |
308 | 143 | ||
309 | /** | 144 | /** |
310 | * GNUNET_YES if the client has called conclude. | ||
311 | * */ | ||
312 | int conclude; | ||
313 | |||
314 | /** | ||
315 | * Index of the local peer in the peers array | 145 | * Index of the local peer in the peers array |
316 | */ | 146 | */ |
317 | unsigned int local_peer_idx; | 147 | unsigned int local_peer_idx; |
318 | 148 | ||
319 | /** | 149 | /** |
320 | * Strata estimator, computed online | ||
321 | */ | ||
322 | struct StrataEstimator *se; | ||
323 | |||
324 | /** | ||
325 | * Pre-computed IBFs | ||
326 | */ | ||
327 | struct InvertibleBloomFilter **ibfs; | ||
328 | |||
329 | /** | ||
330 | * Current round | 150 | * Current round |
331 | */ | 151 | */ |
332 | enum ConsensusRound current_round; | 152 | enum ConsensusRound current_round; |
@@ -337,19 +157,36 @@ struct ConsensusSession | |||
337 | */ | 157 | */ |
338 | int *shuffle; | 158 | int *shuffle; |
339 | 159 | ||
160 | /** | ||
161 | * Current round of the exponential scheme. | ||
162 | */ | ||
340 | int exp_round; | 163 | int exp_round; |
341 | 164 | ||
165 | /** | ||
166 | * Current sub-round of the exponential scheme. | ||
167 | */ | ||
342 | int exp_subround; | 168 | int exp_subround; |
343 | 169 | ||
344 | /** | 170 | /** |
345 | * The partner for the current exp-round | 171 | * The partner for the current exp-round |
346 | */ | 172 | */ |
347 | struct ConsensusPeerInformation* partner_outgoing; | 173 | struct ConsensusPeerInformation *partner_outgoing; |
348 | 174 | ||
349 | /** | 175 | /** |
350 | * The partner for the current exp-round | 176 | * The partner for the current exp-round |
351 | */ | 177 | */ |
352 | struct ConsensusPeerInformation* partner_incoming; | 178 | struct ConsensusPeerInformation *partner_incoming; |
179 | |||
180 | /** | ||
181 | * The consensus set of this session. | ||
182 | */ | ||
183 | struct GNUNET_SET_Handle *element_set; | ||
184 | |||
185 | /** | ||
186 | * Listener for requests from other peers. | ||
187 | * Uses the session's global id as app id. | ||
188 | */ | ||
189 | struct GNUNET_SET_ListenHandle *set_listener; | ||
353 | }; | 190 | }; |
354 | 191 | ||
355 | 192 | ||
@@ -374,41 +211,6 @@ struct ConsensusPeerInformation | |||
374 | */ | 211 | */ |
375 | int hello; | 212 | int hello; |
376 | 213 | ||
377 | /* | ||
378 | * FIXME | ||
379 | */ | ||
380 | struct MessageStreamState mss; | ||
381 | |||
382 | /** | ||
383 | * Current state | ||
384 | */ | ||
385 | enum ConsensusIBFState ibf_state; | ||
386 | |||
387 | /** | ||
388 | * What is the order (=log2 size) of the ibf | ||
389 | * we're currently dealing with? | ||
390 | * Interpretation depends on ibf_state. | ||
391 | */ | ||
392 | int ibf_order; | ||
393 | |||
394 | /** | ||
395 | * The current IBF for this peer, | ||
396 | * purpose dependent on ibf_state | ||
397 | */ | ||
398 | struct InvertibleBloomFilter *ibf; | ||
399 | |||
400 | /** | ||
401 | * How many buckets have we transmitted/received? | ||
402 | * Interpretatin depends on ibf_state | ||
403 | */ | ||
404 | int ibf_bucket_counter; | ||
405 | |||
406 | /** | ||
407 | * Strata estimator of the peer, NULL if our peer | ||
408 | * initiated the reconciliation. | ||
409 | */ | ||
410 | struct StrataEstimator *se; | ||
411 | |||
412 | /** | 214 | /** |
413 | * Back-reference to the consensus session, | 215 | * Back-reference to the consensus session, |
414 | * to that ConsensusPeerInformation can be used as a closure | 216 | * to that ConsensusPeerInformation can be used as a closure |
@@ -416,18 +218,6 @@ struct ConsensusPeerInformation | |||
416 | struct ConsensusSession *session; | 218 | struct ConsensusSession *session; |
417 | 219 | ||
418 | /** | 220 | /** |
419 | * True if we are actually replaying the strata message, | ||
420 | * e.g. currently handling the premature_strata_message. | ||
421 | */ | ||
422 | int replaying_strata_message; | ||
423 | |||
424 | /** | ||
425 | * A strata message that is not actually for the current round, | ||
426 | * used in the exp-scheme. | ||
427 | */ | ||
428 | struct StrataMessage *premature_strata_message; | ||
429 | |||
430 | /** | ||
431 | * We have finishes the exp-subround with the peer. | 221 | * We have finishes the exp-subround with the peer. |
432 | */ | 222 | */ |
433 | int exp_subround_finished; | 223 | int exp_subround_finished; |
@@ -444,65 +234,15 @@ struct ConsensusPeerInformation | |||
444 | * older round, while we are already in the next round. | 234 | * older round, while we are already in the next round. |
445 | */ | 235 | */ |
446 | enum ConsensusRound apparent_round; | 236 | enum ConsensusRound apparent_round; |
447 | }; | ||
448 | |||
449 | |||
450 | /** | ||
451 | * Sockets from other peers who want to communicate with us. | ||
452 | * It may not be known yet which consensus session they belong to, we have to wait for the | ||
453 | * peer's hello. | ||
454 | * Also, the session might not exist yet locally, we have to wait for a local client to connect. | ||
455 | */ | ||
456 | struct IncomingSocket | ||
457 | { | ||
458 | /** | ||
459 | * Incoming sockets are kept in a double linked list. | ||
460 | */ | ||
461 | struct IncomingSocket *next; | ||
462 | |||
463 | /** | ||
464 | * Incoming sockets are kept in a double linked list. | ||
465 | */ | ||
466 | struct IncomingSocket *prev; | ||
467 | |||
468 | /** | ||
469 | * Peer that connected to us with the socket. | ||
470 | */ | ||
471 | struct GNUNET_PeerIdentity peer_id; | ||
472 | 237 | ||
473 | /** | 238 | /** |
474 | * Peer-in-session this socket belongs to, once known, otherwise NULL. | 239 | * Set operation we are currently executing with this peer. |
475 | */ | 240 | */ |
476 | struct ConsensusPeerInformation *cpi; | 241 | struct GNUNET_SET_OperationHandle *set_op; |
477 | |||
478 | /** | ||
479 | * Set to the global session id, if the peer sent us a hello-message, | ||
480 | * but the session does not exist yet. | ||
481 | */ | ||
482 | struct GNUNET_HashCode *requested_gid; | ||
483 | |||
484 | /* | ||
485 | * Timeout, will disconnect the socket if not yet in a session. | ||
486 | * FIXME: implement | ||
487 | */ | ||
488 | GNUNET_SCHEDULER_TaskIdentifier timeout; | ||
489 | |||
490 | /* FIXME */ | ||
491 | struct MessageStreamState mss; | ||
492 | }; | 242 | }; |
493 | 243 | ||
494 | 244 | ||
495 | /** | 245 | /** |
496 | * Linked list of incoming sockets. | ||
497 | */ | ||
498 | static struct IncomingSocket *incoming_sockets_head; | ||
499 | |||
500 | /** | ||
501 | * Linked list of incoming sockets. | ||
502 | */ | ||
503 | static struct IncomingSocket *incoming_sockets_tail; | ||
504 | |||
505 | /** | ||
506 | * Linked list of sessions this peer participates in. | 246 | * Linked list of sessions this peer participates in. |
507 | */ | 247 | */ |
508 | static struct ConsensusSession *sessions_head; | 248 | static struct ConsensusSession *sessions_head; |
@@ -525,297 +265,10 @@ static struct GNUNET_SERVER_Handle *srv; | |||
525 | /** | 265 | /** |
526 | * Peer that runs this service. | 266 | * Peer that runs this service. |
527 | */ | 267 | */ |
528 | static struct GNUNET_PeerIdentity *my_peer; | 268 | static struct GNUNET_PeerIdentity my_peer; |
529 | |||
530 | /** | ||
531 | * Handle to the core service. Only used during service startup, will be NULL after that. | ||
532 | */ | ||
533 | static struct GNUNET_CORE_Handle *core; | ||
534 | |||
535 | /** | ||
536 | * Listener for sockets from peers that want to reconcile with us. | ||
537 | */ | ||
538 | static struct GNUNET_STREAM_ListenSocket *listener; | ||
539 | |||
540 | |||
541 | /** | ||
542 | * Transmit a queued message to the session's client. | ||
543 | * | ||
544 | * @param cls consensus session | ||
545 | * @param size number of bytes available in buf | ||
546 | * @param buf where the callee should write the message | ||
547 | * @return number of bytes written to buf | ||
548 | */ | ||
549 | static size_t | ||
550 | transmit_queued (void *cls, size_t size, | ||
551 | void *buf) | ||
552 | { | ||
553 | struct MessageQueue *mq = cls; | ||
554 | struct PendingMessage *pm = mq->pending_head; | ||
555 | struct ServerClientSocketState *state = mq->state; | ||
556 | size_t msg_size; | ||
557 | |||
558 | GNUNET_assert (NULL != pm); | ||
559 | GNUNET_assert (NULL != buf); | ||
560 | msg_size = ntohs (pm->msg->size); | ||
561 | GNUNET_assert (size >= msg_size); | ||
562 | memcpy (buf, pm->msg, msg_size); | ||
563 | GNUNET_CONTAINER_DLL_remove (mq->pending_head, mq->pending_tail, pm); | ||
564 | state->th = NULL; | ||
565 | client_send_next (cls); | ||
566 | GNUNET_free (pm); | ||
567 | return msg_size; | ||
568 | } | ||
569 | |||
570 | |||
571 | static void | ||
572 | client_send_next (struct MessageQueue *mq) | ||
573 | { | ||
574 | struct ServerClientSocketState *state = mq->state; | ||
575 | int msize; | ||
576 | |||
577 | GNUNET_assert (NULL != state); | ||
578 | |||
579 | if ( (NULL != state->th) || | ||
580 | (NULL == mq->pending_head) ) | ||
581 | return; | ||
582 | msize = ntohs (mq->pending_head->msg->size); | ||
583 | state->th = | ||
584 | GNUNET_SERVER_notify_transmit_ready (state->client, msize, | ||
585 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
586 | &transmit_queued, mq); | ||
587 | } | ||
588 | |||
589 | |||
590 | struct MessageQueue * | ||
591 | create_message_queue_for_server_client (struct ServerClientSocketState *scss) | ||
592 | { | ||
593 | struct MessageQueue *mq; | ||
594 | mq = GNUNET_new (struct MessageQueue); | ||
595 | mq->add_cb = client_send_next; | ||
596 | mq->state = scss; | ||
597 | return mq; | ||
598 | } | ||
599 | |||
600 | |||
601 | /** | ||
602 | * Functions of this signature are called whenever writing operations | ||
603 | * on a stream are executed | ||
604 | * | ||
605 | * @param cls the closure from GNUNET_STREAM_write | ||
606 | * @param status the status of the stream at the time this function is called; | ||
607 | * GNUNET_STREAM_OK if writing to stream was completed successfully; | ||
608 | * GNUNET_STREAM_TIMEOUT if the given data is not sent successfully | ||
609 | * (this doesn't mean that the data is never sent, the receiver may | ||
610 | * have read the data but its ACKs may have been lost); | ||
611 | * GNUNET_STREAM_SHUTDOWN if the stream is shutdown for writing in the | ||
612 | * mean time; GNUNET_STREAM_SYSERR if the stream is broken and cannot | ||
613 | * be processed. | ||
614 | * @param size the number of bytes written | ||
615 | */ | ||
616 | static void | ||
617 | write_queued (void *cls, enum GNUNET_STREAM_Status status, size_t size) | ||
618 | { | ||
619 | struct MessageQueue *mq = cls; | ||
620 | struct MessageStreamState *mss = mq->state; | ||
621 | struct PendingMessage *pm; | ||
622 | |||
623 | GNUNET_assert (GNUNET_STREAM_OK == status); | ||
624 | |||
625 | /* call cb for message we finished sending */ | ||
626 | pm = mq->current_pm; | ||
627 | if (NULL != pm) | ||
628 | { | ||
629 | if (NULL != pm->sent_cb) | ||
630 | pm->sent_cb (pm->sent_cb_cls); | ||
631 | GNUNET_free (pm); | ||
632 | } | ||
633 | |||
634 | mss->wh = NULL; | ||
635 | |||
636 | pm = mq->pending_head; | ||
637 | mq->current_pm = pm; | ||
638 | if (NULL == pm) | ||
639 | return; | ||
640 | GNUNET_CONTAINER_DLL_remove (mq->pending_head, mq->pending_tail, pm); | ||
641 | mss->wh = GNUNET_STREAM_write (mss->socket, pm->msg, ntohs (pm->msg->size), | ||
642 | GNUNET_TIME_UNIT_FOREVER_REL, write_queued, cls); | ||
643 | GNUNET_assert (NULL != mss->wh); | ||
644 | } | ||
645 | |||
646 | |||
647 | static void | ||
648 | stream_socket_add_cb (struct MessageQueue *mq) | ||
649 | { | ||
650 | if (NULL != mq->current_pm) | ||
651 | return; | ||
652 | write_queued (mq, GNUNET_STREAM_OK, 0); | ||
653 | } | ||
654 | |||
655 | |||
656 | struct MessageQueue * | ||
657 | create_message_queue_for_stream_socket (struct MessageStreamState *mss) | ||
658 | { | ||
659 | struct MessageQueue *mq; | ||
660 | mq = GNUNET_new (struct MessageQueue); | ||
661 | mq->state = mss; | ||
662 | mq->add_cb = stream_socket_add_cb; | ||
663 | return mq; | ||
664 | } | ||
665 | |||
666 | |||
667 | struct PendingMessage * | ||
668 | new_pending_message (uint16_t size, uint16_t type) | ||
669 | { | ||
670 | struct PendingMessage *pm; | ||
671 | pm = GNUNET_malloc (sizeof *pm + size); | ||
672 | pm->msg = (void *) &pm[1]; | ||
673 | pm->msg->size = htons (size); | ||
674 | pm->msg->type = htons (type); | ||
675 | return pm; | ||
676 | } | ||
677 | |||
678 | |||
679 | /** | ||
680 | * Queue a message in a message queue. | ||
681 | * | ||
682 | * @param queue the message queue | ||
683 | * @param pending message, message with additional information | ||
684 | */ | ||
685 | void | ||
686 | message_queue_add (struct MessageQueue *queue, struct PendingMessage *msg) | ||
687 | { | ||
688 | GNUNET_CONTAINER_DLL_insert_tail (queue->pending_head, queue->pending_tail, msg); | ||
689 | queue->add_cb (queue); | ||
690 | } | ||
691 | |||
692 | |||
693 | /** | ||
694 | * Called when we receive data from a peer via stream. | ||
695 | * | ||
696 | * @param cls the closure from GNUNET_STREAM_read | ||
697 | * @param status the status of the stream at the time this function is called | ||
698 | * @param data traffic from the other side | ||
699 | * @param size the number of bytes available in data read; will be 0 on timeout | ||
700 | * @return number of bytes of processed from 'data' (any data remaining should be | ||
701 | * given to the next time the read processor is called). | ||
702 | */ | ||
703 | static size_t | ||
704 | stream_data_processor (void *cls, enum GNUNET_STREAM_Status status, const void *data, size_t size) | ||
705 | { | ||
706 | struct MessageStreamState *mss = cls; | ||
707 | int ret; | ||
708 | |||
709 | mss->rh = NULL; | ||
710 | |||
711 | if (GNUNET_STREAM_OK != status) | ||
712 | { | ||
713 | /* FIXME: handle this correctly */ | ||
714 | GNUNET_break (0); | ||
715 | return 0; | ||
716 | } | ||
717 | GNUNET_assert (NULL != mss->mst); | ||
718 | ret = GNUNET_SERVER_mst_receive (mss->mst, NULL, data, size, GNUNET_NO, GNUNET_YES); | ||
719 | if (GNUNET_SYSERR == ret) | ||
720 | { | ||
721 | /* FIXME: handle this correctly */ | ||
722 | GNUNET_break (0); | ||
723 | return 0; | ||
724 | } | ||
725 | /* read again */ | ||
726 | mss->rh = GNUNET_STREAM_read (mss->socket, GNUNET_TIME_UNIT_FOREVER_REL, &stream_data_processor, mss); | ||
727 | /* we always read all data */ | ||
728 | return size; | ||
729 | } | ||
730 | |||
731 | |||
732 | /** | ||
733 | * Send element or element report to the peer specified in cpi. | ||
734 | * | ||
735 | * @param cpi peer to send the elements to | ||
736 | * @param head head of the element list | ||
737 | */ | ||
738 | static void | ||
739 | send_element_or_report (struct ConsensusPeerInformation *cpi, struct ElementInfo *e) | ||
740 | { | ||
741 | struct PendingMessage *pm; | ||
742 | |||
743 | switch (cpi->apparent_round) | ||
744 | { | ||
745 | case CONSENSUS_ROUND_COMPLETION: | ||
746 | case CONSENSUS_ROUND_EXCHANGE: | ||
747 | pm = new_pending_message (sizeof (struct GNUNET_MessageHeader) + e->element->size, | ||
748 | GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS); | ||
749 | memcpy (&pm->msg[1], e->element->data, e->element->size); | ||
750 | message_queue_add (cpi->mss.mq, pm); | ||
751 | break; | ||
752 | case CONSENSUS_ROUND_INVENTORY: | ||
753 | pm = new_pending_message (sizeof (struct GNUNET_MessageHeader) + sizeof (struct GNUNET_HashCode), | ||
754 | GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS_REPORT); | ||
755 | memcpy (&pm->msg[1], e->element_hash, sizeof (struct GNUNET_HashCode)); | ||
756 | message_queue_add (cpi->mss.mq, pm); | ||
757 | break; | ||
758 | default: | ||
759 | GNUNET_break (0); | ||
760 | } | ||
761 | } | ||
762 | |||
763 | |||
764 | /** | ||
765 | * Iterator to insert values into an ibf. | ||
766 | * | ||
767 | * @param cls closure | ||
768 | * @param key current key code | ||
769 | * @param value value in the hash map | ||
770 | * @return GNUNET_YES if we should continue to | ||
771 | * iterate, | ||
772 | * GNUNET_NO if not. | ||
773 | */ | ||
774 | static int | ||
775 | ibf_values_iterator (void *cls, | ||
776 | const struct GNUNET_HashCode *key, | ||
777 | void *value) | ||
778 | { | ||
779 | struct ConsensusPeerInformation *cpi = cls; | ||
780 | struct ElementInfo *e = value; | ||
781 | struct IBF_Key ibf_key = ibf_key_from_hashcode (e->element_hash); | ||
782 | |||
783 | GNUNET_assert (ibf_key.key_val == ibf_key_from_hashcode (key).key_val); | ||
784 | ibf_insert (cpi->session->ibfs[cpi->ibf_order], ibf_key); | ||
785 | return GNUNET_YES; | ||
786 | } | ||
787 | |||
788 | /** | ||
789 | * Create and populate an IBF for the specified peer, | ||
790 | * if it does not already exist. | ||
791 | * | ||
792 | * @param cpi peer to create the ibf for | ||
793 | */ | ||
794 | static void | ||
795 | prepare_ibf (struct ConsensusPeerInformation *cpi) | ||
796 | { | ||
797 | if (NULL != cpi->session->ibfs[cpi->ibf_order]) | ||
798 | return; | ||
799 | cpi->session->ibfs[cpi->ibf_order] = ibf_create (1 << cpi->ibf_order, SE_IBF_HASH_NUM); | ||
800 | GNUNET_CONTAINER_multihashmap_iterate (cpi->session->values, ibf_values_iterator, cpi); | ||
801 | } | ||
802 | |||
803 | |||
804 | /** | ||
805 | * Called when a remote peer wants to inform the local peer | ||
806 | * that the remote peer misses elements. | ||
807 | * Elements are not reconciled. | ||
808 | * | ||
809 | * @param cpi session | ||
810 | * @param msg message | ||
811 | */ | ||
812 | static int | ||
813 | handle_p2p_element_report (struct ConsensusPeerInformation *cpi, const struct GNUNET_MessageHeader *msg) | ||
814 | { | ||
815 | GNUNET_assert (0); | ||
816 | } | ||
817 | 269 | ||
818 | 270 | ||
271 | /* | ||
819 | static int | 272 | static int |
820 | exp_subround_finished (const struct ConsensusSession *session) | 273 | exp_subround_finished (const struct ConsensusSession *session) |
821 | { | 274 | { |
@@ -831,8 +284,11 @@ exp_subround_finished (const struct ConsensusSession *session) | |||
831 | return GNUNET_YES; | 284 | return GNUNET_YES; |
832 | return GNUNET_NO; | 285 | return GNUNET_NO; |
833 | } | 286 | } |
287 | */ | ||
288 | |||
834 | 289 | ||
835 | 290 | ||
291 | /* | ||
836 | static int | 292 | static int |
837 | inventory_round_finished (struct ConsensusSession *session) | 293 | inventory_round_finished (struct ConsensusSession *session) |
838 | { | 294 | { |
@@ -846,61 +302,7 @@ inventory_round_finished (struct ConsensusSession *session) | |||
846 | return GNUNET_YES; | 302 | return GNUNET_YES; |
847 | return GNUNET_NO; | 303 | return GNUNET_NO; |
848 | } | 304 | } |
849 | 305 | */ | |
850 | |||
851 | static void | ||
852 | clear_message_stream_state (struct MessageStreamState *mss) | ||
853 | { | ||
854 | if (NULL != mss->mst) | ||
855 | { | ||
856 | GNUNET_SERVER_mst_destroy (mss->mst); | ||
857 | mss->mst = NULL; | ||
858 | } | ||
859 | if (NULL != mss->rh) | ||
860 | { | ||
861 | GNUNET_STREAM_read_cancel (mss->rh); | ||
862 | mss->rh = NULL; | ||
863 | } | ||
864 | if (NULL != mss->wh) | ||
865 | { | ||
866 | GNUNET_STREAM_write_cancel (mss->wh); | ||
867 | mss->wh = NULL; | ||
868 | } | ||
869 | if (NULL != mss->socket) | ||
870 | { | ||
871 | GNUNET_STREAM_close (mss->socket); | ||
872 | mss->socket = NULL; | ||
873 | } | ||
874 | if (NULL != mss->mq) | ||
875 | { | ||
876 | GNUNET_free (mss->mq); | ||
877 | mss->mq = NULL; | ||
878 | } | ||
879 | } | ||
880 | |||
881 | |||
882 | /** | ||
883 | * Iterator over hash map entries. | ||
884 | * | ||
885 | * @param cls closure | ||
886 | * @param key current key code | ||
887 | * @param value value in the hash map | ||
888 | * @return GNUNET_YES if we should continue to | ||
889 | * iterate, | ||
890 | * GNUNET_NO if not. | ||
891 | */ | ||
892 | static int | ||
893 | destroy_element_info_iter (void *cls, | ||
894 | const struct GNUNET_HashCode * key, | ||
895 | void *value) | ||
896 | { | ||
897 | struct ElementInfo *ei = value; | ||
898 | GNUNET_free (ei->element); | ||
899 | GNUNET_free (ei->element_hash); | ||
900 | GNUNET_free (ei); | ||
901 | return GNUNET_YES; | ||
902 | } | ||
903 | |||
904 | 306 | ||
905 | /** | 307 | /** |
906 | * Destroy a session, free all resources associated with it. | 308 | * Destroy a session, free all resources associated with it. |
@@ -913,11 +315,9 @@ destroy_session (struct ConsensusSession *session) | |||
913 | int i; | 315 | int i; |
914 | 316 | ||
915 | GNUNET_CONTAINER_DLL_remove (sessions_head, sessions_tail, session); | 317 | GNUNET_CONTAINER_DLL_remove (sessions_head, sessions_tail, session); |
916 | GNUNET_SERVER_client_drop (session->scss.client); | ||
917 | session->scss.client = NULL; | ||
918 | if (NULL != session->client_mq) | 318 | if (NULL != session->client_mq) |
919 | { | 319 | { |
920 | GNUNET_free (session->client_mq); | 320 | GNUNET_MQ_destroy (session->client_mq); |
921 | session->client_mq = NULL; | 321 | session->client_mq = NULL; |
922 | } | 322 | } |
923 | if (NULL != session->shuffle) | 323 | if (NULL != session->shuffle) |
@@ -925,617 +325,21 @@ destroy_session (struct ConsensusSession *session) | |||
925 | GNUNET_free (session->shuffle); | 325 | GNUNET_free (session->shuffle); |
926 | session->shuffle = NULL; | 326 | session->shuffle = NULL; |
927 | } | 327 | } |
928 | if (NULL != session->se) | ||
929 | { | ||
930 | strata_estimator_destroy (session->se); | ||
931 | session->se = NULL; | ||
932 | } | ||
933 | if (NULL != session->info) | 328 | if (NULL != session->info) |
934 | { | 329 | { |
935 | for (i = 0; i < session->num_peers; i++) | 330 | for (i = 0; i < session->num_peers; i++) |
936 | { | 331 | { |
937 | struct ConsensusPeerInformation *cpi; | 332 | struct ConsensusPeerInformation *cpi; |
938 | cpi = &session->info[i]; | 333 | cpi = &session->info[i]; |
939 | clear_message_stream_state (&cpi->mss); | 334 | GNUNET_free (cpi); |
940 | if (NULL != cpi->se) | ||
941 | { | ||
942 | strata_estimator_destroy (cpi->se); | ||
943 | cpi->se = NULL; | ||
944 | } | ||
945 | if (NULL != cpi->ibf) | ||
946 | { | ||
947 | ibf_destroy (cpi->ibf); | ||
948 | cpi->ibf = NULL; | ||
949 | } | ||
950 | } | 335 | } |
951 | GNUNET_free (session->info); | 336 | GNUNET_free (session->info); |
952 | session->info = NULL; | 337 | session->info = NULL; |
953 | } | 338 | } |
954 | if (NULL != session->ibfs) | ||
955 | { | ||
956 | for (i = 0; i <= MAX_IBF_ORDER; i++) | ||
957 | { | ||
958 | if (NULL != session->ibfs[i]) | ||
959 | { | ||
960 | ibf_destroy (session->ibfs[i]); | ||
961 | session->ibfs[i] = NULL; | ||
962 | } | ||
963 | } | ||
964 | GNUNET_free (session->ibfs); | ||
965 | session->ibfs = NULL; | ||
966 | } | ||
967 | if (NULL != session->values) | ||
968 | { | ||
969 | GNUNET_CONTAINER_multihashmap_iterate (session->values, destroy_element_info_iter, NULL); | ||
970 | GNUNET_CONTAINER_multihashmap_destroy (session->values); | ||
971 | session->values = NULL; | ||
972 | } | ||
973 | |||
974 | if (NULL != session->ibf_key_map) | ||
975 | { | ||
976 | GNUNET_CONTAINER_multihashmap_destroy (session->ibf_key_map); | ||
977 | session->ibf_key_map = NULL; | ||
978 | } | ||
979 | GNUNET_free (session); | 339 | GNUNET_free (session); |
980 | } | 340 | } |
981 | 341 | ||
982 | 342 | ||
983 | static void | ||
984 | send_client_conclude_done (struct ConsensusSession *session) | ||
985 | { | ||
986 | struct PendingMessage *pm; | ||
987 | |||
988 | /* check if client is even there anymore */ | ||
989 | if (NULL == session->scss.client) | ||
990 | return; | ||
991 | pm = new_pending_message (sizeof (struct GNUNET_MessageHeader), | ||
992 | GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_CONCLUDE_DONE); | ||
993 | message_queue_add (session->client_mq, pm); | ||
994 | } | ||
995 | |||
996 | |||
997 | /** | ||
998 | * Check if a strata message is for the current round or not | ||
999 | * | ||
1000 | * @param session session we are in | ||
1001 | * @param strata_msg the strata message to check | ||
1002 | * @return GNUNET_YES if the strata_msg is premature, GNUNET_NO otherwise | ||
1003 | */ | ||
1004 | static int | ||
1005 | is_premature_strata_message (const struct ConsensusSession *session, const struct StrataMessage *strata_msg) | ||
1006 | { | ||
1007 | switch (strata_msg->round) | ||
1008 | { | ||
1009 | case CONSENSUS_ROUND_COMPLETION: | ||
1010 | case CONSENSUS_ROUND_EXCHANGE: | ||
1011 | /* here, we also have to compare subrounds */ | ||
1012 | if ( (strata_msg->round != session->current_round) || | ||
1013 | (strata_msg->exp_round != session->exp_round) || | ||
1014 | (strata_msg->exp_subround != session->exp_subround) ) | ||
1015 | return GNUNET_YES; | ||
1016 | break; | ||
1017 | default: | ||
1018 | if (session->current_round != strata_msg->round) | ||
1019 | return GNUNET_YES; | ||
1020 | break; | ||
1021 | } | ||
1022 | return GNUNET_NO; | ||
1023 | } | ||
1024 | |||
1025 | |||
1026 | /** | ||
1027 | * Send a strata estimator. | ||
1028 | * | ||
1029 | * @param cpi the peer | ||
1030 | */ | ||
1031 | static void | ||
1032 | send_strata_estimator (struct ConsensusPeerInformation *cpi) | ||
1033 | { | ||
1034 | struct PendingMessage *pm; | ||
1035 | struct StrataMessage *strata_msg; | ||
1036 | |||
1037 | /* FIXME: why is this correct? */ | ||
1038 | cpi->apparent_round = cpi->session->current_round; | ||
1039 | cpi->ibf_state = IBF_STATE_NONE; | ||
1040 | cpi->ibf_bucket_counter = 0; | ||
1041 | |||
1042 | LOG_PP (GNUNET_ERROR_TYPE_INFO, cpi, "sending SE (in round: %d)\n", cpi->session->current_round); | ||
1043 | |||
1044 | pm = new_pending_message ((sizeof *strata_msg) + (SE_STRATA_COUNT * IBF_BUCKET_SIZE * SE_IBF_SIZE), | ||
1045 | GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_DELTA_ESTIMATE); | ||
1046 | strata_msg = (struct StrataMessage *) pm->msg; | ||
1047 | strata_msg->round = cpi->session->current_round; | ||
1048 | strata_msg->exp_round = cpi->session->exp_round; | ||
1049 | strata_msg->exp_subround = cpi->session->exp_subround; | ||
1050 | strata_estimator_write (cpi->session->se, &strata_msg[1]); | ||
1051 | message_queue_add (cpi->mss.mq, pm); | ||
1052 | } | ||
1053 | |||
1054 | |||
1055 | /** | ||
1056 | * Send an IBF of the order specified in cpi. | ||
1057 | * | ||
1058 | * @param cpi the peer | ||
1059 | */ | ||
1060 | static void | ||
1061 | send_ibf (struct ConsensusPeerInformation *cpi) | ||
1062 | { | ||
1063 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: sending IBF to P%d\n", | ||
1064 | cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1065 | |||
1066 | cpi->ibf_bucket_counter = 0; | ||
1067 | while (cpi->ibf_bucket_counter < (1 << cpi->ibf_order)) | ||
1068 | { | ||
1069 | unsigned int num_buckets; | ||
1070 | struct PendingMessage *pm; | ||
1071 | struct DifferenceDigest *digest; | ||
1072 | |||
1073 | num_buckets = (1 << cpi->ibf_order) - cpi->ibf_bucket_counter; | ||
1074 | /* limit to maximum */ | ||
1075 | if (num_buckets > BUCKETS_PER_MESSAGE) | ||
1076 | num_buckets = BUCKETS_PER_MESSAGE; | ||
1077 | |||
1078 | pm = new_pending_message ((sizeof *digest) + (num_buckets * IBF_BUCKET_SIZE), | ||
1079 | GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_DIFFERENCE_DIGEST); | ||
1080 | digest = (struct DifferenceDigest *) pm->msg; | ||
1081 | digest->order = cpi->ibf_order; | ||
1082 | digest->round = cpi->apparent_round; | ||
1083 | ibf_write_slice (cpi->ibf, cpi->ibf_bucket_counter, num_buckets, &digest[1]); | ||
1084 | cpi->ibf_bucket_counter += num_buckets; | ||
1085 | message_queue_add (cpi->mss.mq, pm); | ||
1086 | } | ||
1087 | cpi->ibf_bucket_counter = 0; | ||
1088 | cpi->ibf_state = IBF_STATE_ANTICIPATE_DIFF; | ||
1089 | } | ||
1090 | |||
1091 | |||
1092 | /** | ||
1093 | * Called when a peer sends us its strata estimator. | ||
1094 | * In response, we sent out IBF of appropriate size back. | ||
1095 | * | ||
1096 | * @param cpi session | ||
1097 | * @param strata_msg message | ||
1098 | */ | ||
1099 | static int | ||
1100 | handle_p2p_strata (struct ConsensusPeerInformation *cpi, const struct StrataMessage *strata_msg) | ||
1101 | { | ||
1102 | unsigned int diff; | ||
1103 | |||
1104 | if ( (cpi->session->current_round == CONSENSUS_ROUND_COMPLETION) && | ||
1105 | (strata_msg->round == CONSENSUS_ROUND_INVENTORY) ) | ||
1106 | { | ||
1107 | /* we still have to handle this request appropriately */ | ||
1108 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: got inventory SE from P%d, we are already further alog\n", | ||
1109 | cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1110 | } | ||
1111 | else if (is_premature_strata_message (cpi->session, strata_msg)) | ||
1112 | { | ||
1113 | if (GNUNET_NO == cpi->replaying_strata_message) | ||
1114 | { | ||
1115 | LOG_PP (GNUNET_ERROR_TYPE_INFO, cpi, "got probably premature SE (%d,%d)\n", | ||
1116 | strata_msg->exp_round, strata_msg->exp_subround); | ||
1117 | cpi->premature_strata_message = (struct StrataMessage *) GNUNET_copy_message (&strata_msg->header); | ||
1118 | } | ||
1119 | return GNUNET_YES; | ||
1120 | } | ||
1121 | |||
1122 | if (NULL == cpi->se) | ||
1123 | cpi->se = strata_estimator_create (SE_STRATA_COUNT, SE_IBF_SIZE, SE_IBF_HASH_NUM); | ||
1124 | |||
1125 | cpi->apparent_round = strata_msg->round; | ||
1126 | |||
1127 | if (htons (strata_msg->header.size) != ((sizeof *strata_msg) + SE_STRATA_COUNT * SE_IBF_SIZE * IBF_BUCKET_SIZE)) | ||
1128 | { | ||
1129 | LOG_PP (GNUNET_ERROR_TYPE_WARNING, cpi, "got SE of wrong size\n"); | ||
1130 | return GNUNET_NO; | ||
1131 | } | ||
1132 | strata_estimator_read (&strata_msg[1], cpi->se); | ||
1133 | GNUNET_assert (NULL != cpi->session->se); | ||
1134 | diff = strata_estimator_difference (cpi->session->se, cpi->se); | ||
1135 | |||
1136 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: got SE from P%d, diff=%d\n", | ||
1137 | cpi->session->local_peer_idx, (int) (cpi - cpi->session->info), diff); | ||
1138 | |||
1139 | switch (cpi->session->current_round) | ||
1140 | { | ||
1141 | case CONSENSUS_ROUND_EXCHANGE: | ||
1142 | case CONSENSUS_ROUND_INVENTORY: | ||
1143 | case CONSENSUS_ROUND_COMPLETION: | ||
1144 | /* send IBF of the right size */ | ||
1145 | cpi->ibf_order = 0; | ||
1146 | while (((1 << cpi->ibf_order) < diff) || (SE_IBF_HASH_NUM > (1 << cpi->ibf_order)) ) | ||
1147 | cpi->ibf_order++; | ||
1148 | if (cpi->ibf_order > MAX_IBF_ORDER) | ||
1149 | cpi->ibf_order = MAX_IBF_ORDER; | ||
1150 | cpi->ibf_order += 1; | ||
1151 | /* create ibf if not already pre-computed */ | ||
1152 | prepare_ibf (cpi); | ||
1153 | if (NULL != cpi->ibf) | ||
1154 | ibf_destroy (cpi->ibf); | ||
1155 | cpi->ibf = ibf_dup (cpi->session->ibfs[cpi->ibf_order]); | ||
1156 | cpi->ibf_bucket_counter = 0; | ||
1157 | send_ibf (cpi); | ||
1158 | break; | ||
1159 | default: | ||
1160 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: got unexpected SE from P%d\n", | ||
1161 | cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1162 | break; | ||
1163 | } | ||
1164 | return GNUNET_YES; | ||
1165 | } | ||
1166 | |||
1167 | |||
1168 | |||
1169 | static int | ||
1170 | send_elements_iterator (void *cls, | ||
1171 | const struct GNUNET_HashCode * key, | ||
1172 | void *value) | ||
1173 | { | ||
1174 | struct ConsensusPeerInformation *cpi = cls; | ||
1175 | struct ElementInfo *ei; | ||
1176 | ei = GNUNET_CONTAINER_multihashmap_get (cpi->session->values, value); | ||
1177 | if (NULL == ei) | ||
1178 | { | ||
1179 | LOG_PP (GNUNET_ERROR_TYPE_WARNING, cpi, "peer's ibf contained non-existing element %s\n", | ||
1180 | GNUNET_h2s((struct GNUNET_HashCode *) value)); | ||
1181 | return GNUNET_YES; | ||
1182 | } | ||
1183 | LOG_PP (GNUNET_ERROR_TYPE_INFO, cpi, "sending element\n"); | ||
1184 | send_element_or_report (cpi, ei); | ||
1185 | return GNUNET_YES; | ||
1186 | } | ||
1187 | |||
1188 | |||
1189 | /** | ||
1190 | * Decode the current diff ibf, and send elements/requests/reports/ | ||
1191 | * | ||
1192 | * @param cpi partner peer | ||
1193 | */ | ||
1194 | static void | ||
1195 | decode (struct ConsensusPeerInformation *cpi) | ||
1196 | { | ||
1197 | struct IBF_Key key; | ||
1198 | int side; | ||
1199 | |||
1200 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: decoding ibf from P%d\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1201 | |||
1202 | while (1) | ||
1203 | { | ||
1204 | int res; | ||
1205 | |||
1206 | res = ibf_decode (cpi->ibf, &side, &key); | ||
1207 | if (GNUNET_SYSERR == res) | ||
1208 | { | ||
1209 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "decoding failed, transmitting larger IBF\n"); | ||
1210 | /* decoding failed, we tell the other peer by sending our ibf with a larger order */ | ||
1211 | cpi->ibf_order++; | ||
1212 | prepare_ibf (cpi); | ||
1213 | cpi->ibf = ibf_dup (cpi->session->ibfs[cpi->ibf_order]); | ||
1214 | cpi->ibf_bucket_counter = 0; | ||
1215 | send_ibf (cpi); | ||
1216 | return; | ||
1217 | } | ||
1218 | if (GNUNET_NO == res) | ||
1219 | { | ||
1220 | struct PendingMessage *pm; | ||
1221 | struct ConsensusRoundMessage *rmsg; | ||
1222 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: transmitted all values, sending SYNC\n", cpi->session->local_peer_idx); | ||
1223 | |||
1224 | pm = new_pending_message (sizeof *rmsg, GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_SYNCED); | ||
1225 | rmsg = (struct ConsensusRoundMessage *) pm->msg; | ||
1226 | rmsg->round = cpi->apparent_round; | ||
1227 | message_queue_add (cpi->mss.mq, pm); | ||
1228 | return; | ||
1229 | } | ||
1230 | if (-1 == side) | ||
1231 | { | ||
1232 | struct GNUNET_HashCode hashcode; | ||
1233 | /* we have the element(s), send it to the other peer */ | ||
1234 | ibf_hashcode_from_key (key, &hashcode); | ||
1235 | GNUNET_CONTAINER_multihashmap_get_multiple (cpi->session->ibf_key_map, &hashcode, send_elements_iterator, cpi); | ||
1236 | } | ||
1237 | else | ||
1238 | { | ||
1239 | struct PendingMessage *pm; | ||
1240 | uint16_t type; | ||
1241 | |||
1242 | switch (cpi->apparent_round) | ||
1243 | { | ||
1244 | case CONSENSUS_ROUND_COMPLETION: | ||
1245 | /* FIXME: check if we really want to request the element */ | ||
1246 | case CONSENSUS_ROUND_EXCHANGE: | ||
1247 | case CONSENSUS_ROUND_INVENTORY: | ||
1248 | type = GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS_REQUEST; | ||
1249 | break; | ||
1250 | default: | ||
1251 | GNUNET_assert (0); | ||
1252 | } | ||
1253 | pm = new_pending_message (sizeof (struct GNUNET_MessageHeader) + sizeof (struct IBF_Key), | ||
1254 | type); | ||
1255 | *(struct IBF_Key *) &pm->msg[1] = key; | ||
1256 | message_queue_add (cpi->mss.mq, pm); | ||
1257 | } | ||
1258 | } | ||
1259 | } | ||
1260 | |||
1261 | |||
1262 | static int | ||
1263 | handle_p2p_ibf (struct ConsensusPeerInformation *cpi, const struct DifferenceDigest *digest) | ||
1264 | { | ||
1265 | int num_buckets; | ||
1266 | |||
1267 | /* FIXME: find out if we're still expecting the same ibf! */ | ||
1268 | |||
1269 | cpi->apparent_round = cpi->session->current_round; | ||
1270 | // FIXME: check header.size >= sizeof (DD) | ||
1271 | num_buckets = (ntohs (digest->header.size) - (sizeof *digest)) / IBF_BUCKET_SIZE; | ||
1272 | switch (cpi->ibf_state) | ||
1273 | { | ||
1274 | case IBF_STATE_NONE: | ||
1275 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: receiving IBF from P%d\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1276 | cpi->ibf_state = IBF_STATE_RECEIVING; | ||
1277 | cpi->ibf_order = digest->order; | ||
1278 | cpi->ibf_bucket_counter = 0; | ||
1279 | if (NULL != cpi->ibf) | ||
1280 | { | ||
1281 | ibf_destroy (cpi->ibf); | ||
1282 | cpi->ibf = NULL; | ||
1283 | } | ||
1284 | break; | ||
1285 | case IBF_STATE_ANTICIPATE_DIFF: | ||
1286 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: receiving IBF from P%d (probably out IBF did not decode)\n", | ||
1287 | cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1288 | cpi->ibf_state = IBF_STATE_RECEIVING; | ||
1289 | cpi->ibf_order = digest->order; | ||
1290 | cpi->ibf_bucket_counter = 0; | ||
1291 | if (NULL != cpi->ibf) | ||
1292 | { | ||
1293 | ibf_destroy (cpi->ibf); | ||
1294 | cpi->ibf = NULL; | ||
1295 | } | ||
1296 | break; | ||
1297 | case IBF_STATE_RECEIVING: | ||
1298 | break; | ||
1299 | default: | ||
1300 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: unexpected IBF from P%d\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1301 | return GNUNET_YES; | ||
1302 | } | ||
1303 | |||
1304 | if (cpi->ibf_bucket_counter + num_buckets > (1 << cpi->ibf_order)) | ||
1305 | { | ||
1306 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: overfull IBF from P%d\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1307 | return GNUNET_YES; | ||
1308 | } | ||
1309 | |||
1310 | if (NULL == cpi->ibf) | ||
1311 | cpi->ibf = ibf_create (1 << cpi->ibf_order, SE_IBF_HASH_NUM); | ||
1312 | |||
1313 | ibf_read_slice (&digest[1], cpi->ibf_bucket_counter, num_buckets, cpi->ibf); | ||
1314 | cpi->ibf_bucket_counter += num_buckets; | ||
1315 | |||
1316 | if (cpi->ibf_bucket_counter == (1 << cpi->ibf_order)) | ||
1317 | { | ||
1318 | cpi->ibf_state = IBF_STATE_DECODING; | ||
1319 | cpi->ibf_bucket_counter = 0; | ||
1320 | prepare_ibf (cpi); | ||
1321 | ibf_subtract (cpi->ibf, cpi->session->ibfs[cpi->ibf_order]); | ||
1322 | decode (cpi); | ||
1323 | } | ||
1324 | return GNUNET_YES; | ||
1325 | } | ||
1326 | |||
1327 | |||
1328 | /** | ||
1329 | * Insert an element into the consensus set of the specified session. | ||
1330 | * The element will not be copied, and freed when destroying the session. | ||
1331 | * | ||
1332 | * @param session session for new element | ||
1333 | * @param element element to insert | ||
1334 | */ | ||
1335 | static void | ||
1336 | insert_element (struct ConsensusSession *session, struct GNUNET_CONSENSUS_Element *element) | ||
1337 | { | ||
1338 | struct GNUNET_HashCode hash; | ||
1339 | struct ElementInfo *e; | ||
1340 | struct IBF_Key ibf_key; | ||
1341 | int i; | ||
1342 | |||
1343 | e = GNUNET_new (struct ElementInfo); | ||
1344 | e->element = element; | ||
1345 | e->element_hash = GNUNET_new (struct GNUNET_HashCode); | ||
1346 | GNUNET_CRYPTO_hash (e->element->data, e->element->size, e->element_hash); | ||
1347 | ibf_key = ibf_key_from_hashcode (e->element_hash); | ||
1348 | ibf_hashcode_from_key (ibf_key, &hash); | ||
1349 | strata_estimator_insert (session->se, &hash); | ||
1350 | GNUNET_CONTAINER_multihashmap_put (session->values, e->element_hash, e, | ||
1351 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); | ||
1352 | GNUNET_CONTAINER_multihashmap_put (session->ibf_key_map, &hash, e->element_hash, | ||
1353 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | ||
1354 | |||
1355 | for (i = 0; i <= MAX_IBF_ORDER; i++) | ||
1356 | { | ||
1357 | if (NULL == session->ibfs[i]) | ||
1358 | continue; | ||
1359 | ibf_insert (session->ibfs[i], ibf_key); | ||
1360 | } | ||
1361 | } | ||
1362 | |||
1363 | |||
1364 | /** | ||
1365 | * Handle an element that another peer sent us | ||
1366 | */ | ||
1367 | static int | ||
1368 | handle_p2p_element (struct ConsensusPeerInformation *cpi, const struct GNUNET_MessageHeader *element_msg) | ||
1369 | { | ||
1370 | struct GNUNET_CONSENSUS_Element *element; | ||
1371 | size_t size; | ||
1372 | |||
1373 | switch (cpi->session->current_round) | ||
1374 | { | ||
1375 | case CONSENSUS_ROUND_COMPLETION: | ||
1376 | /* FIXME: check if we really expect the element */ | ||
1377 | case CONSENSUS_ROUND_EXCHANGE: | ||
1378 | break; | ||
1379 | default: | ||
1380 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "got unexpected element, ignoring\n"); | ||
1381 | return GNUNET_YES; | ||
1382 | } | ||
1383 | |||
1384 | size = ntohs (element_msg->size) - sizeof *element_msg; | ||
1385 | |||
1386 | element = GNUNET_malloc (size + sizeof *element); | ||
1387 | element->size = size; | ||
1388 | memcpy (&element[1], &element_msg[1], size); | ||
1389 | element->data = &element[1]; | ||
1390 | |||
1391 | LOG_PP (GNUNET_ERROR_TYPE_INFO, cpi, "got element\n"); | ||
1392 | |||
1393 | insert_element (cpi->session, element); | ||
1394 | |||
1395 | return GNUNET_YES; | ||
1396 | } | ||
1397 | |||
1398 | |||
1399 | /** | ||
1400 | * Handle a request for elements. | ||
1401 | * | ||
1402 | * @param cpi peer that is requesting the element | ||
1403 | * @param msg the element request message | ||
1404 | */ | ||
1405 | static int | ||
1406 | handle_p2p_element_request (struct ConsensusPeerInformation *cpi, const struct ElementRequest *msg) | ||
1407 | { | ||
1408 | struct GNUNET_HashCode hashcode; | ||
1409 | struct IBF_Key *ibf_key; | ||
1410 | unsigned int num; | ||
1411 | |||
1412 | /* element requests are allowed in every round */ | ||
1413 | |||
1414 | num = ntohs (msg->header.size) / sizeof (struct IBF_Key); | ||
1415 | |||
1416 | ibf_key = (struct IBF_Key *) &msg[1]; | ||
1417 | while (num--) | ||
1418 | { | ||
1419 | ibf_hashcode_from_key (*ibf_key, &hashcode); | ||
1420 | GNUNET_CONTAINER_multihashmap_get_multiple (cpi->session->ibf_key_map, &hashcode, send_elements_iterator, cpi); | ||
1421 | ibf_key++; | ||
1422 | } | ||
1423 | return GNUNET_YES; | ||
1424 | } | ||
1425 | |||
1426 | static int | ||
1427 | is_peer_connected (struct ConsensusPeerInformation *cpi) | ||
1428 | { | ||
1429 | if (NULL == cpi->mss.socket) | ||
1430 | return GNUNET_NO; | ||
1431 | return GNUNET_YES; | ||
1432 | } | ||
1433 | |||
1434 | |||
1435 | static void | ||
1436 | ensure_peer_connected (struct ConsensusPeerInformation *cpi) | ||
1437 | { | ||
1438 | if (NULL != cpi->mss.socket) | ||
1439 | return; | ||
1440 | cpi->mss.socket = GNUNET_STREAM_open (cfg, &cpi->peer_id, GNUNET_APPLICATION_TYPE_CONSENSUS, | ||
1441 | open_cb, cpi, GNUNET_STREAM_OPTION_END); | ||
1442 | } | ||
1443 | |||
1444 | |||
1445 | /** | ||
1446 | * If necessary, send a message to the peer, depending on the current | ||
1447 | * round. | ||
1448 | */ | ||
1449 | static void | ||
1450 | embrace_peer (struct ConsensusPeerInformation *cpi) | ||
1451 | { | ||
1452 | if (GNUNET_NO == is_peer_connected (cpi)) | ||
1453 | { | ||
1454 | ensure_peer_connected (cpi); | ||
1455 | return; | ||
1456 | } | ||
1457 | if (GNUNET_NO == cpi->hello) | ||
1458 | return; | ||
1459 | /* FIXME: correctness of switch */ | ||
1460 | switch (cpi->session->current_round) | ||
1461 | { | ||
1462 | case CONSENSUS_ROUND_EXCHANGE: | ||
1463 | case CONSENSUS_ROUND_INVENTORY: | ||
1464 | if (cpi->session->partner_outgoing != cpi) | ||
1465 | break; | ||
1466 | /* fallthrough */ | ||
1467 | case CONSENSUS_ROUND_COMPLETION: | ||
1468 | send_strata_estimator (cpi); | ||
1469 | default: | ||
1470 | break; | ||
1471 | } | ||
1472 | } | ||
1473 | |||
1474 | |||
1475 | /** | ||
1476 | * Called when stream has finishes writing the hello message | ||
1477 | */ | ||
1478 | static void | ||
1479 | hello_cont (void *cls) | ||
1480 | { | ||
1481 | struct ConsensusPeerInformation *cpi = cls; | ||
1482 | |||
1483 | cpi->hello = GNUNET_YES; | ||
1484 | embrace_peer (cpi); | ||
1485 | } | ||
1486 | |||
1487 | |||
1488 | /** | ||
1489 | * Called when we established a stream connection to another peer | ||
1490 | * | ||
1491 | * @param cls cpi of the peer we just connected to | ||
1492 | * @param socket socket to use to communicate with the other side (read/write) | ||
1493 | */ | ||
1494 | static void | ||
1495 | open_cb (void *cls, struct GNUNET_STREAM_Socket *socket) | ||
1496 | { | ||
1497 | struct ConsensusPeerInformation *cpi = cls; | ||
1498 | struct PendingMessage *pm; | ||
1499 | struct ConsensusHello *hello; | ||
1500 | |||
1501 | GNUNET_assert (NULL == cpi->mss.mst); | ||
1502 | GNUNET_assert (NULL == cpi->mss.mq); | ||
1503 | |||
1504 | cpi->mss.mq = create_message_queue_for_stream_socket (&cpi->mss); | ||
1505 | cpi->mss.mst = GNUNET_SERVER_mst_create (mst_session_callback, cpi); | ||
1506 | cpi->mss.mst_cls = cpi; | ||
1507 | |||
1508 | pm = new_pending_message (sizeof *hello, GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_HELLO); | ||
1509 | hello = (struct ConsensusHello *) pm->msg; | ||
1510 | memcpy (&hello->global_id, &cpi->session->global_id, sizeof (struct GNUNET_HashCode)); | ||
1511 | pm->sent_cb = hello_cont; | ||
1512 | pm->sent_cb_cls = cpi; | ||
1513 | message_queue_add (cpi->mss.mq, pm); | ||
1514 | cpi->mss.rh = GNUNET_STREAM_read (socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
1515 | &stream_data_processor, &cpi->mss); | ||
1516 | } | ||
1517 | |||
1518 | |||
1519 | static void | ||
1520 | replay_premature_message (struct ConsensusPeerInformation *cpi) | ||
1521 | { | ||
1522 | if (NULL != cpi->premature_strata_message) | ||
1523 | { | ||
1524 | struct StrataMessage *sm; | ||
1525 | |||
1526 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "replaying premature SE\n"); | ||
1527 | sm = cpi->premature_strata_message; | ||
1528 | cpi->premature_strata_message = NULL; | ||
1529 | |||
1530 | cpi->replaying_strata_message = GNUNET_YES; | ||
1531 | handle_p2p_strata (cpi, sm); | ||
1532 | cpi->replaying_strata_message = GNUNET_NO; | ||
1533 | |||
1534 | GNUNET_free (sm); | ||
1535 | } | ||
1536 | } | ||
1537 | |||
1538 | |||
1539 | /** | 343 | /** |
1540 | * Start the inventory round, contact all peers we are supposed to contact. | 344 | * Start the inventory round, contact all peers we are supposed to contact. |
1541 | * | 345 | * |
@@ -1548,11 +352,7 @@ start_inventory (struct ConsensusSession *session) | |||
1548 | int last; | 352 | int last; |
1549 | 353 | ||
1550 | for (i = 0; i < session->num_peers; i++) | 354 | for (i = 0; i < session->num_peers; i++) |
1551 | { | ||
1552 | session->info[i].ibf_bucket_counter = 0; | ||
1553 | session->info[i].ibf_state = IBF_STATE_NONE; | ||
1554 | session->info[i].is_outgoing = GNUNET_NO; | 355 | session->info[i].is_outgoing = GNUNET_NO; |
1555 | } | ||
1556 | 356 | ||
1557 | last = (session->local_peer_idx + ((session->num_peers - 1) / 2) + 1) % session->num_peers; | 357 | last = (session->local_peer_idx + ((session->num_peers - 1) / 2) + 1) % session->num_peers; |
1558 | i = (session->local_peer_idx + 1) % session->num_peers; | 358 | i = (session->local_peer_idx + 1) % session->num_peers; |
@@ -1560,7 +360,7 @@ start_inventory (struct ConsensusSession *session) | |||
1560 | { | 360 | { |
1561 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d contacting P%d in all-to-all\n", session->local_peer_idx, i); | 361 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d contacting P%d in all-to-all\n", session->local_peer_idx, i); |
1562 | session->info[i].is_outgoing = GNUNET_YES; | 362 | session->info[i].is_outgoing = GNUNET_YES; |
1563 | embrace_peer (&session->info[i]); | 363 | // embrace_peer (&session->info[i]); |
1564 | i = (i + 1) % session->num_peers; | 364 | i = (i + 1) % session->num_peers; |
1565 | } | 365 | } |
1566 | // tie-breaker for even number of peers | 366 | // tie-breaker for even number of peers |
@@ -1568,49 +368,12 @@ start_inventory (struct ConsensusSession *session) | |||
1568 | { | 368 | { |
1569 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d contacting P%d in all-to-all (tie-breaker)\n", session->local_peer_idx, i); | 369 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d contacting P%d in all-to-all (tie-breaker)\n", session->local_peer_idx, i); |
1570 | session->info[last].is_outgoing = GNUNET_YES; | 370 | session->info[last].is_outgoing = GNUNET_YES; |
1571 | embrace_peer (&session->info[last]); | 371 | // embrace_peer (&session->info[last]); |
1572 | } | ||
1573 | |||
1574 | for (i = 0; i < session->num_peers; i++) | ||
1575 | { | ||
1576 | if (GNUNET_NO == session->info[i].is_outgoing) | ||
1577 | replay_premature_message (&session->info[i]); | ||
1578 | } | 372 | } |
1579 | } | 373 | } |
1580 | 374 | ||
1581 | 375 | ||
1582 | /** | 376 | /** |
1583 | * Iterator over hash map entries. | ||
1584 | * | ||
1585 | * @param cls closure | ||
1586 | * @param key current key code | ||
1587 | * @param value value in the hash map | ||
1588 | * @return GNUNET_YES if we should continue to | ||
1589 | * iterate, | ||
1590 | * GNUNET_NO if not. | ||
1591 | */ | ||
1592 | static int | ||
1593 | send_client_elements_iter (void *cls, | ||
1594 | const struct GNUNET_HashCode * key, | ||
1595 | void *value) | ||
1596 | { | ||
1597 | struct ConsensusSession *session = cls; | ||
1598 | struct ElementInfo *ei = value; | ||
1599 | struct PendingMessage *pm; | ||
1600 | |||
1601 | /* is the client still there? */ | ||
1602 | if (NULL == session->scss.client) | ||
1603 | return GNUNET_NO; | ||
1604 | |||
1605 | pm = new_pending_message (sizeof (struct GNUNET_MessageHeader) + ei->element->size, | ||
1606 | GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_RECEIVED_ELEMENT); | ||
1607 | message_queue_add (session->client_mq, pm); | ||
1608 | return GNUNET_YES; | ||
1609 | } | ||
1610 | |||
1611 | |||
1612 | |||
1613 | /** | ||
1614 | * Start the next round. | 377 | * Start the next round. |
1615 | * This function can be invoked as a timeout task, or called manually (tc will be NULL then). | 378 | * This function can be invoked as a timeout task, or called manually (tc will be NULL then). |
1616 | * | 379 | * |
@@ -1630,7 +393,7 @@ round_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1630 | session = cls; | 393 | session = cls; |
1631 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: round over\n", session->local_peer_idx); | 394 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: round over\n", session->local_peer_idx); |
1632 | 395 | ||
1633 | if ((NULL == tc) && (session->round_timeout_tid != GNUNET_SCHEDULER_NO_TASK)) | 396 | if (session->round_timeout_tid != GNUNET_SCHEDULER_NO_TASK) |
1634 | { | 397 | { |
1635 | GNUNET_SCHEDULER_cancel (session->round_timeout_tid); | 398 | GNUNET_SCHEDULER_cancel (session->round_timeout_tid); |
1636 | session->round_timeout_tid = GNUNET_SCHEDULER_NO_TASK; | 399 | session->round_timeout_tid = GNUNET_SCHEDULER_NO_TASK; |
@@ -1648,8 +411,8 @@ round_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1648 | if (session->num_peers <= 2) | 411 | if (session->num_peers <= 2) |
1649 | { | 412 | { |
1650 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: 2-peer consensus done\n", session->local_peer_idx); | 413 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: 2-peer consensus done\n", session->local_peer_idx); |
1651 | GNUNET_CONTAINER_multihashmap_iterate (session->values, send_client_elements_iter, session); | 414 | //GNUNET_CONTAINER_multihashmap_iterate (session->values, send_client_elements_iter, session); |
1652 | send_client_conclude_done (session); | 415 | //send_client_conclude_done (session); |
1653 | session->current_round = CONSENSUS_ROUND_FINISH; | 416 | session->current_round = CONSENSUS_ROUND_FINISH; |
1654 | return; | 417 | return; |
1655 | } | 418 | } |
@@ -1663,7 +426,7 @@ round_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1663 | break; | 426 | break; |
1664 | case CONSENSUS_ROUND_COMPLETION: | 427 | case CONSENSUS_ROUND_COMPLETION: |
1665 | session->current_round = CONSENSUS_ROUND_FINISH; | 428 | session->current_round = CONSENSUS_ROUND_FINISH; |
1666 | send_client_conclude_done (session); | 429 | //send_client_conclude_done (session); |
1667 | break; | 430 | break; |
1668 | default: | 431 | default: |
1669 | GNUNET_assert (0); | 432 | GNUNET_assert (0); |
@@ -1671,159 +434,9 @@ round_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1671 | } | 434 | } |
1672 | 435 | ||
1673 | 436 | ||
1674 | static void | ||
1675 | fin_sent_cb (void *cls) | ||
1676 | { | ||
1677 | struct ConsensusPeerInformation *cpi; | ||
1678 | cpi = cls; | ||
1679 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: sent FIN\n", cpi->session->local_peer_idx); | ||
1680 | switch (cpi->session->current_round) | ||
1681 | { | ||
1682 | case CONSENSUS_ROUND_EXCHANGE: | ||
1683 | case CONSENSUS_ROUND_COMPLETION: | ||
1684 | if (cpi->session->current_round != cpi->apparent_round) | ||
1685 | { | ||
1686 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: FIN to SYNC from the past\n", cpi->session->local_peer_idx); | ||
1687 | break; | ||
1688 | } | ||
1689 | cpi->exp_subround_finished = GNUNET_YES; | ||
1690 | /* the subround is only really over if *both* partners are done */ | ||
1691 | if (GNUNET_YES == exp_subround_finished (cpi->session)) | ||
1692 | subround_over (cpi->session, NULL); | ||
1693 | else | ||
1694 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: still waiting for more after FIN sent\n", cpi->session->local_peer_idx); | ||
1695 | break; | ||
1696 | case CONSENSUS_ROUND_INVENTORY: | ||
1697 | cpi->inventory_synced = GNUNET_YES; | ||
1698 | if (inventory_round_finished (cpi->session) && cpi->session->current_round == cpi->apparent_round) | ||
1699 | round_over (cpi->session, NULL); | ||
1700 | /* FIXME: maybe go to next round */ | ||
1701 | break; | ||
1702 | default: | ||
1703 | GNUNET_break (0); | ||
1704 | } | ||
1705 | } | ||
1706 | |||
1707 | |||
1708 | /** | 437 | /** |
1709 | * The other peer wants us to inform that he sent us all the elements we requested. | 438 | * Adapt the shuffle of the session for the current round. |
1710 | */ | 439 | */ |
1711 | static int | ||
1712 | handle_p2p_fin (struct ConsensusPeerInformation *cpi, const struct GNUNET_MessageHeader *msg) | ||
1713 | { | ||
1714 | struct ConsensusRoundMessage *round_msg; | ||
1715 | round_msg = (struct ConsensusRoundMessage *) msg; | ||
1716 | /* FIXME: only call subround_over if round is the current one! */ | ||
1717 | switch (cpi->session->current_round) | ||
1718 | { | ||
1719 | case CONSENSUS_ROUND_EXCHANGE: | ||
1720 | case CONSENSUS_ROUND_COMPLETION: | ||
1721 | if (cpi->session->current_round != round_msg->round) | ||
1722 | { | ||
1723 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: got FIN from P%d (past round)\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1724 | cpi->ibf_state = IBF_STATE_NONE; | ||
1725 | cpi->ibf_bucket_counter = 0; | ||
1726 | break; | ||
1727 | } | ||
1728 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: got FIN from P%d (exp)\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1729 | cpi->exp_subround_finished = GNUNET_YES; | ||
1730 | if (GNUNET_YES == exp_subround_finished (cpi->session)) | ||
1731 | subround_over (cpi->session, NULL); | ||
1732 | else | ||
1733 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: still waiting for more after got FIN\n", cpi->session->local_peer_idx); | ||
1734 | break; | ||
1735 | case CONSENSUS_ROUND_INVENTORY: | ||
1736 | cpi->inventory_synced = GNUNET_YES; | ||
1737 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: got FIN from P%d (a2a)\n", cpi->session->local_peer_idx, (int) (cpi - cpi->session->info)); | ||
1738 | if (inventory_round_finished (cpi->session)) | ||
1739 | round_over (cpi->session, NULL); | ||
1740 | break; | ||
1741 | default: | ||
1742 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "unexpected FIN message the current round\n"); | ||
1743 | break; | ||
1744 | } | ||
1745 | return GNUNET_YES; | ||
1746 | } | ||
1747 | |||
1748 | |||
1749 | /** | ||
1750 | * Gets called when the other peer wants us to inform that | ||
1751 | * it has decoded our ibf and sent us all elements / requests | ||
1752 | */ | ||
1753 | static int | ||
1754 | handle_p2p_synced (struct ConsensusPeerInformation *cpi, const struct GNUNET_MessageHeader *msg) | ||
1755 | { | ||
1756 | struct PendingMessage *pm; | ||
1757 | struct ConsensusRoundMessage *fin_msg; | ||
1758 | |||
1759 | /* FIXME: why handle current round?? */ | ||
1760 | switch (cpi->session->current_round) | ||
1761 | { | ||
1762 | case CONSENSUS_ROUND_INVENTORY: | ||
1763 | cpi->inventory_synced = GNUNET_YES; | ||
1764 | case CONSENSUS_ROUND_COMPLETION: | ||
1765 | case CONSENSUS_ROUND_EXCHANGE: | ||
1766 | LOG_PP (GNUNET_ERROR_TYPE_INFO, cpi, "received SYNC\n"); | ||
1767 | pm = new_pending_message (sizeof *fin_msg, | ||
1768 | GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_FIN); | ||
1769 | fin_msg = (struct ConsensusRoundMessage *) pm->msg; | ||
1770 | fin_msg->round = cpi->apparent_round; | ||
1771 | /* the subround is over once we kicked off sending the fin msg */ | ||
1772 | /* FIXME: assert we are talking to the right peer! */ | ||
1773 | /* FIXME: mark peer as synced */ | ||
1774 | pm->sent_cb = fin_sent_cb; | ||
1775 | pm->sent_cb_cls = cpi; | ||
1776 | message_queue_add (cpi->mss.mq, pm); | ||
1777 | break; | ||
1778 | default: | ||
1779 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "unexpected SYNCED message the current round\n"); | ||
1780 | break; | ||
1781 | } | ||
1782 | return GNUNET_YES; | ||
1783 | } | ||
1784 | |||
1785 | |||
1786 | /** | ||
1787 | * Functions with this signature are called whenever a | ||
1788 | * complete message is received by the tokenizer. | ||
1789 | * | ||
1790 | * Do not call GNUNET_SERVER_mst_destroy in callback | ||
1791 | * | ||
1792 | * @param cls closure | ||
1793 | * @param client identification of the client | ||
1794 | * @param message the actual message | ||
1795 | * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing | ||
1796 | */ | ||
1797 | static int | ||
1798 | mst_session_callback (void *cls, void *client, const struct GNUNET_MessageHeader *message) | ||
1799 | { | ||
1800 | struct ConsensusPeerInformation *cpi = cls; | ||
1801 | GNUNET_assert (NULL == client); | ||
1802 | GNUNET_assert (NULL != cls); | ||
1803 | switch (ntohs (message->type)) | ||
1804 | { | ||
1805 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_DELTA_ESTIMATE: | ||
1806 | return handle_p2p_strata (cpi, (struct StrataMessage *) message); | ||
1807 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_DIFFERENCE_DIGEST: | ||
1808 | return handle_p2p_ibf (cpi, (struct DifferenceDigest *) message); | ||
1809 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS: | ||
1810 | return handle_p2p_element (cpi, message); | ||
1811 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS_REPORT: | ||
1812 | return handle_p2p_element_report (cpi, message); | ||
1813 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ELEMENTS_REQUEST: | ||
1814 | return handle_p2p_element_request (cpi, (struct ElementRequest *) message); | ||
1815 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_SYNCED: | ||
1816 | return handle_p2p_synced (cpi, message); | ||
1817 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_FIN: | ||
1818 | return handle_p2p_fin (cpi, message); | ||
1819 | default: | ||
1820 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "ignoring unexpected message type (%u) from peer: %s\n", | ||
1821 | ntohs (message->type), GNUNET_h2s (&cpi->peer_id.hashPubKey)); | ||
1822 | } | ||
1823 | return GNUNET_OK; | ||
1824 | } | ||
1825 | |||
1826 | |||
1827 | static void | 440 | static void |
1828 | shuffle (struct ConsensusSession *session) | 441 | shuffle (struct ConsensusSession *session) |
1829 | { | 442 | { |
@@ -1860,6 +473,7 @@ find_partners (struct ConsensusSession *session) | |||
1860 | { | 473 | { |
1861 | int mark[session->num_peers]; | 474 | int mark[session->num_peers]; |
1862 | int i; | 475 | int i; |
476 | |||
1863 | memset (mark, 0, session->num_peers * sizeof (int)); | 477 | memset (mark, 0, session->num_peers * sizeof (int)); |
1864 | session->partner_incoming = session->partner_outgoing = NULL; | 478 | session->partner_incoming = session->partner_outgoing = NULL; |
1865 | for (i = 0; i < session->num_peers; i++) | 479 | for (i = 0; i < session->num_peers; i++) |
@@ -1887,6 +501,22 @@ find_partners (struct ConsensusSession *session) | |||
1887 | 501 | ||
1888 | 502 | ||
1889 | /** | 503 | /** |
504 | * Callback for set operation results. Called for each element | ||
505 | * in the result set. | ||
506 | * | ||
507 | * @param cls closure | ||
508 | * @param element a result element, only valid if status is GNUNET_SET_STATUS_OK | ||
509 | * @param status see enum GNUNET_SET_Status | ||
510 | */ | ||
511 | static void set_result_cb (void *cls, | ||
512 | const struct GNUNET_SET_Element *element, | ||
513 | enum GNUNET_SET_Status status) | ||
514 | { | ||
515 | /* FIXME */ | ||
516 | } | ||
517 | |||
518 | |||
519 | /** | ||
1890 | * Do the next subround in the exp-scheme. | 520 | * Do the next subround in the exp-scheme. |
1891 | * This function can be invoked as a timeout task, or called manually (tc will be NULL then). | 521 | * This function can be invoked as a timeout task, or called manually (tc will be NULL then). |
1892 | * | 522 | * |
@@ -1905,9 +535,11 @@ subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1905 | return; | 535 | return; |
1906 | session = cls; | 536 | session = cls; |
1907 | /* cancel timeout */ | 537 | /* cancel timeout */ |
1908 | if ((NULL == tc) && (session->round_timeout_tid != GNUNET_SCHEDULER_NO_TASK)) | 538 | if (session->round_timeout_tid != GNUNET_SCHEDULER_NO_TASK) |
539 | { | ||
1909 | GNUNET_SCHEDULER_cancel (session->round_timeout_tid); | 540 | GNUNET_SCHEDULER_cancel (session->round_timeout_tid); |
1910 | session->round_timeout_tid = GNUNET_SCHEDULER_NO_TASK; | 541 | session->round_timeout_tid = GNUNET_SCHEDULER_NO_TASK; |
542 | } | ||
1911 | /* check if we are done with the log phase, 2-peer consensus only does one log round */ | 543 | /* check if we are done with the log phase, 2-peer consensus only does one log round */ |
1912 | if ( (session->exp_round == NUM_EXP_ROUNDS) || | 544 | if ( (session->exp_round == NUM_EXP_ROUNDS) || |
1913 | ((session->num_peers == 2) && (session->exp_round == 1))) | 545 | ((session->num_peers == 2) && (session->exp_round == 1))) |
@@ -1938,8 +570,25 @@ subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1938 | session->exp_subround++; | 570 | session->exp_subround++; |
1939 | } | 571 | } |
1940 | 572 | ||
573 | /* determine the incoming and outgoing partner */ | ||
1941 | find_partners (session); | 574 | find_partners (session); |
1942 | 575 | ||
576 | if (NULL != session->partner_outgoing) | ||
577 | { | ||
578 | if (NULL != session->partner_outgoing->set_op) | ||
579 | GNUNET_SET_operation_cancel (session->partner_outgoing->set_op); | ||
580 | session->partner_outgoing->set_op = | ||
581 | GNUNET_SET_evaluate (session->element_set, | ||
582 | &session->partner_outgoing->peer_id, | ||
583 | &session->global_id, | ||
584 | NULL, /* FIXME */ | ||
585 | 0, /* FIXME */ | ||
586 | GNUNET_SET_RESULT_ADDED, | ||
587 | set_result_cb, session); | ||
588 | |||
589 | |||
590 | } | ||
591 | |||
1943 | #ifdef GNUNET_EXTRA_LOGGING | 592 | #ifdef GNUNET_EXTRA_LOGGING |
1944 | { | 593 | { |
1945 | int in; | 594 | int in; |
@@ -1957,29 +606,6 @@ subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1957 | } | 606 | } |
1958 | #endif /* GNUNET_EXTRA_LOGGING */ | 607 | #endif /* GNUNET_EXTRA_LOGGING */ |
1959 | 608 | ||
1960 | if (NULL != session->partner_incoming) | ||
1961 | { | ||
1962 | session->partner_incoming->ibf_state = IBF_STATE_NONE; | ||
1963 | session->partner_incoming->exp_subround_finished = GNUNET_NO; | ||
1964 | session->partner_incoming->ibf_bucket_counter = 0; | ||
1965 | |||
1966 | /* maybe there's an early strata estimator? */ | ||
1967 | replay_premature_message (session->partner_incoming); | ||
1968 | } | ||
1969 | |||
1970 | if (NULL != session->partner_outgoing) | ||
1971 | { | ||
1972 | session->partner_outgoing->ibf_state = IBF_STATE_NONE; | ||
1973 | session->partner_outgoing->ibf_bucket_counter = 0; | ||
1974 | session->partner_outgoing->exp_subround_finished = GNUNET_NO; | ||
1975 | /* make sure peer is connected and send the SE */ | ||
1976 | embrace_peer (session->partner_outgoing); | ||
1977 | } | ||
1978 | |||
1979 | /* | ||
1980 | session->round_timeout_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide (session->conclude_timeout, 3 * NUM_EXP_ROUNDS), | ||
1981 | subround_over, session); | ||
1982 | */ | ||
1983 | } | 609 | } |
1984 | 610 | ||
1985 | 611 | ||
@@ -2002,146 +628,6 @@ get_peer_idx (const struct GNUNET_PeerIdentity *peer, const struct ConsensusSess | |||
2002 | 628 | ||
2003 | 629 | ||
2004 | /** | 630 | /** |
2005 | * Handle a HELLO-message, send when another peer wants to join a session where | ||
2006 | * our peer is a member. The session may or may not be inhabited yet. | ||
2007 | */ | ||
2008 | static int | ||
2009 | handle_p2p_hello (struct IncomingSocket *inc, const struct ConsensusHello *hello) | ||
2010 | { | ||
2011 | struct ConsensusSession *session; | ||
2012 | |||
2013 | if (NULL != inc->requested_gid) | ||
2014 | { | ||
2015 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "peer tried to HELLO uninhabited session more than once, ignoring\n"); | ||
2016 | return GNUNET_YES; | ||
2017 | } | ||
2018 | if (NULL != inc->cpi) | ||
2019 | { | ||
2020 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "peer with active session sent HELLO again, ignoring\n"); | ||
2021 | return GNUNET_YES; | ||
2022 | } | ||
2023 | |||
2024 | for (session = sessions_head; NULL != session; session = session->next) | ||
2025 | { | ||
2026 | int idx; | ||
2027 | struct ConsensusPeerInformation *cpi; | ||
2028 | if (0 != GNUNET_CRYPTO_hash_cmp (&session->global_id, &hello->global_id)) | ||
2029 | continue; | ||
2030 | idx = get_peer_idx (&inc->peer_id, session); | ||
2031 | GNUNET_assert (-1 != idx); | ||
2032 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "peer %d hello'ed session %d\n", idx); | ||
2033 | cpi = &session->info[idx]; | ||
2034 | inc->cpi = cpi; | ||
2035 | cpi->mss = inc->mss; | ||
2036 | cpi = &session->info[idx]; | ||
2037 | cpi->hello = GNUNET_YES; | ||
2038 | cpi->mss.mq = create_message_queue_for_stream_socket (&cpi->mss); | ||
2039 | embrace_peer (cpi); | ||
2040 | return GNUNET_YES; | ||
2041 | } | ||
2042 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "peer tried to HELLO uninhabited session\n"); | ||
2043 | inc->requested_gid = GNUNET_memdup (&hello->global_id, sizeof (struct GNUNET_HashCode)); | ||
2044 | return GNUNET_YES; | ||
2045 | } | ||
2046 | |||
2047 | |||
2048 | |||
2049 | /** | ||
2050 | * Handle tokenized messages from stream sockets. | ||
2051 | * Delegate them if the socket belongs to a session, | ||
2052 | * handle hello messages otherwise. | ||
2053 | * | ||
2054 | * Do not call GNUNET_SERVER_mst_destroy in callback | ||
2055 | * | ||
2056 | * @param cls closure, unused | ||
2057 | * @param client incoming socket this message comes from | ||
2058 | * @param message the actual message | ||
2059 | * | ||
2060 | * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing | ||
2061 | */ | ||
2062 | static int | ||
2063 | mst_incoming_callback (void *cls, void *client, const struct GNUNET_MessageHeader *message) | ||
2064 | { | ||
2065 | struct IncomingSocket *inc; | ||
2066 | GNUNET_assert (NULL == client); | ||
2067 | GNUNET_assert (NULL != cls); | ||
2068 | inc = (struct IncomingSocket *) cls; | ||
2069 | switch (ntohs( message->type)) | ||
2070 | { | ||
2071 | case GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_HELLO: | ||
2072 | return handle_p2p_hello (inc, (struct ConsensusHello *) message); | ||
2073 | default: | ||
2074 | if (NULL != inc->cpi) | ||
2075 | return mst_session_callback (inc->cpi, client, message); | ||
2076 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "ignoring unexpected message type (%u) from peer: %s (not in session)\n", | ||
2077 | ntohs (message->type), GNUNET_h2s (&inc->peer_id.hashPubKey)); | ||
2078 | } | ||
2079 | return GNUNET_OK; | ||
2080 | } | ||
2081 | |||
2082 | |||
2083 | /** | ||
2084 | * Functions of this type are called upon new stream connection from other peers | ||
2085 | * or upon binding error which happen when the app_port given in | ||
2086 | * GNUNET_STREAM_listen() is already taken. | ||
2087 | * | ||
2088 | * @param cls the closure from GNUNET_STREAM_listen | ||
2089 | * @param socket the socket representing the stream; NULL on binding error | ||
2090 | * @param initiator the identity of the peer who wants to establish a stream | ||
2091 | * with us; NULL on binding error | ||
2092 | * @return GNUNET_OK to keep the socket open, GNUNET_SYSERR to close the | ||
2093 | * stream (the socket will be invalid after the call) | ||
2094 | */ | ||
2095 | static int | ||
2096 | listen_cb (void *cls, | ||
2097 | struct GNUNET_STREAM_Socket *socket, | ||
2098 | const struct GNUNET_PeerIdentity *initiator) | ||
2099 | { | ||
2100 | struct IncomingSocket *incoming; | ||
2101 | |||
2102 | if (NULL == socket) | ||
2103 | { | ||
2104 | GNUNET_break (0); | ||
2105 | return GNUNET_SYSERR; | ||
2106 | } | ||
2107 | incoming = GNUNET_malloc (sizeof *incoming); | ||
2108 | incoming->peer_id = *initiator; | ||
2109 | incoming->mss.socket = socket; | ||
2110 | incoming->mss.rh = GNUNET_STREAM_read (socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
2111 | &stream_data_processor, &incoming->mss); | ||
2112 | incoming->mss.mst = GNUNET_SERVER_mst_create (mst_incoming_callback, incoming); | ||
2113 | incoming->mss.mst_cls = incoming; | ||
2114 | GNUNET_CONTAINER_DLL_insert_tail (incoming_sockets_head, incoming_sockets_tail, incoming); | ||
2115 | return GNUNET_OK; | ||
2116 | } | ||
2117 | |||
2118 | |||
2119 | /** | ||
2120 | * Disconnect a client, and destroy all sessions associated with it. | ||
2121 | * | ||
2122 | * @param client the client to disconnect | ||
2123 | */ | ||
2124 | static void | ||
2125 | disconnect_client (struct GNUNET_SERVER_Client *client) | ||
2126 | { | ||
2127 | struct ConsensusSession *session; | ||
2128 | GNUNET_SERVER_client_disconnect (client); | ||
2129 | |||
2130 | /* if the client owns a session, remove it */ | ||
2131 | session = sessions_head; | ||
2132 | while (NULL != session) | ||
2133 | { | ||
2134 | if (client == session->scss.client) | ||
2135 | { | ||
2136 | destroy_session (session); | ||
2137 | break; | ||
2138 | } | ||
2139 | session = session->next; | ||
2140 | } | ||
2141 | } | ||
2142 | |||
2143 | |||
2144 | /** | ||
2145 | * Compute a global, (hopefully) unique consensus session id, | 631 | * Compute a global, (hopefully) unique consensus session id, |
2146 | * from the local id of the consensus session, and the identities of all participants. | 632 | * from the local id of the consensus session, and the identities of all participants. |
2147 | * Thus, if the local id of two consensus sessions coincide, but are not comprised of | 633 | * Thus, if the local id of two consensus sessions coincide, but are not comprised of |
@@ -2188,7 +674,8 @@ hash_cmp (const void *h1, const void *h2) | |||
2188 | * add the local peer if not in the join message. | 674 | * add the local peer if not in the join message. |
2189 | */ | 675 | */ |
2190 | static void | 676 | static void |
2191 | initialize_session_peer_list (struct ConsensusSession *session) | 677 | initialize_session_peer_list (struct ConsensusSession *session, |
678 | struct GNUNET_CONSENSUS_JoinMessage *join_msg) | ||
2192 | { | 679 | { |
2193 | unsigned int local_peer_in_list; | 680 | unsigned int local_peer_in_list; |
2194 | uint32_t listed_peers; | 681 | uint32_t listed_peers; |
@@ -2196,19 +683,19 @@ initialize_session_peer_list (struct ConsensusSession *session) | |||
2196 | struct GNUNET_PeerIdentity *peers; | 683 | struct GNUNET_PeerIdentity *peers; |
2197 | unsigned int i; | 684 | unsigned int i; |
2198 | 685 | ||
2199 | GNUNET_assert (NULL != session->join_msg); | 686 | GNUNET_assert (NULL != join_msg); |
2200 | 687 | ||
2201 | /* peers in the join message, may or may not include the local peer */ | 688 | /* peers in the join message, may or may not include the local peer */ |
2202 | listed_peers = ntohl (session->join_msg->num_peers); | 689 | listed_peers = ntohl (join_msg->num_peers); |
2203 | 690 | ||
2204 | session->num_peers = listed_peers; | 691 | session->num_peers = listed_peers; |
2205 | 692 | ||
2206 | msg_peers = (struct GNUNET_PeerIdentity *) &session->join_msg[1]; | 693 | msg_peers = (struct GNUNET_PeerIdentity *) &join_msg[1]; |
2207 | 694 | ||
2208 | local_peer_in_list = GNUNET_NO; | 695 | local_peer_in_list = GNUNET_NO; |
2209 | for (i = 0; i < listed_peers; i++) | 696 | for (i = 0; i < listed_peers; i++) |
2210 | { | 697 | { |
2211 | if (0 == memcmp (&msg_peers[i], my_peer, sizeof (struct GNUNET_PeerIdentity))) | 698 | if (0 == memcmp (&msg_peers[i], &my_peer, sizeof (struct GNUNET_PeerIdentity))) |
2212 | { | 699 | { |
2213 | local_peer_in_list = GNUNET_YES; | 700 | local_peer_in_list = GNUNET_YES; |
2214 | break; | 701 | break; |
@@ -2221,7 +708,7 @@ initialize_session_peer_list (struct ConsensusSession *session) | |||
2221 | peers = GNUNET_malloc (session->num_peers * sizeof (struct GNUNET_PeerIdentity)); | 708 | peers = GNUNET_malloc (session->num_peers * sizeof (struct GNUNET_PeerIdentity)); |
2222 | 709 | ||
2223 | if (GNUNET_NO == local_peer_in_list) | 710 | if (GNUNET_NO == local_peer_in_list) |
2224 | peers[session->num_peers - 1] = *my_peer; | 711 | peers[session->num_peers - 1] = my_peer; |
2225 | 712 | ||
2226 | memcpy (peers, msg_peers, listed_peers * sizeof (struct GNUNET_PeerIdentity)); | 713 | memcpy (peers, msg_peers, listed_peers * sizeof (struct GNUNET_PeerIdentity)); |
2227 | qsort (peers, session->num_peers, sizeof (struct GNUNET_PeerIdentity), &hash_cmp); | 714 | qsort (peers, session->num_peers, sizeof (struct GNUNET_PeerIdentity), &hash_cmp); |
@@ -2236,38 +723,34 @@ initialize_session_peer_list (struct ConsensusSession *session) | |||
2236 | session->info[i].peer_id = peers[i]; | 723 | session->info[i].peer_id = peers[i]; |
2237 | } | 724 | } |
2238 | 725 | ||
2239 | free (peers); | 726 | GNUNET_free (peers); |
2240 | } | 727 | } |
2241 | 728 | ||
2242 | 729 | ||
730 | |||
731 | |||
732 | |||
2243 | /** | 733 | /** |
2244 | * Add incoming peer connections to the session, | 734 | * Called when another peer wants to do a set operation with the |
2245 | * for peers who have connected to us before the local session has been established | 735 | * local peer. |
2246 | * | 736 | * |
2247 | * @param session ... | 737 | * @param other_peer the other peer |
738 | * @param context_msg message with application specific information from | ||
739 | * the other peer | ||
740 | * @param request request from the other peer, use GNUNET_SET_accept | ||
741 | * to accept it, otherwise the request will be refused | ||
742 | * Note that we don't use a return value here, as it is also | ||
743 | * necessary to specify the set we want to do the operation with, | ||
744 | * whith sometimes can be derived from the context message. | ||
745 | * Also necessary to specify the timeout. | ||
2248 | */ | 746 | */ |
2249 | static void | 747 | static void |
2250 | add_incoming_peers (struct ConsensusSession *session) | 748 | set_listen_cb (void *cls, |
749 | const struct GNUNET_PeerIdentity *other_peer, | ||
750 | const struct GNUNET_MessageHeader *context_msg, | ||
751 | struct GNUNET_SET_Request *request) | ||
2251 | { | 752 | { |
2252 | struct IncomingSocket *inc; | 753 | /* FIXME */ |
2253 | int i; | ||
2254 | struct ConsensusPeerInformation *cpi; | ||
2255 | |||
2256 | for (inc = incoming_sockets_head; NULL != inc; inc = inc->next) | ||
2257 | { | ||
2258 | if ( (NULL == inc->requested_gid) || | ||
2259 | (0 != GNUNET_CRYPTO_hash_cmp (&session->global_id, inc->requested_gid)) ) | ||
2260 | continue; | ||
2261 | for (i = 0; i < session->num_peers; i++) | ||
2262 | { | ||
2263 | cpi = &session->info[i]; | ||
2264 | cpi->peer_id = inc->peer_id; | ||
2265 | cpi->mss = inc->mss; | ||
2266 | cpi->hello = GNUNET_YES; | ||
2267 | inc->cpi = cpi; | ||
2268 | break; | ||
2269 | } | ||
2270 | } | ||
2271 | } | 754 | } |
2272 | 755 | ||
2273 | 756 | ||
@@ -2277,46 +760,59 @@ add_incoming_peers (struct ConsensusSession *session) | |||
2277 | * @param session the session to initialize | 760 | * @param session the session to initialize |
2278 | */ | 761 | */ |
2279 | static void | 762 | static void |
2280 | initialize_session (struct ConsensusSession *session) | 763 | initialize_session (struct ConsensusSession *session, |
764 | struct GNUNET_CONSENSUS_JoinMessage *join_msg) | ||
2281 | { | 765 | { |
2282 | struct ConsensusSession *other_session; | 766 | struct ConsensusSession *other_session; |
2283 | 767 | ||
2284 | GNUNET_assert (NULL != session->join_msg); | 768 | initialize_session_peer_list (session, join_msg); |
2285 | initialize_session_peer_list (session); | ||
2286 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "session with %u peers\n", session->num_peers); | 769 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "session with %u peers\n", session->num_peers); |
2287 | compute_global_id (session, &session->join_msg->session_id); | 770 | compute_global_id (session, &join_msg->session_id); |
2288 | 771 | ||
2289 | /* Check if some local client already owns the session. */ | 772 | /* check if some local client already owns the session. */ |
2290 | other_session = sessions_head; | 773 | other_session = sessions_head; |
2291 | while (NULL != other_session) | 774 | while (NULL != other_session) |
2292 | { | 775 | { |
2293 | if ((other_session != session) && | 776 | if ((other_session != session) && |
2294 | (0 == GNUNET_CRYPTO_hash_cmp (&session->global_id, &other_session->global_id))) | 777 | (0 == GNUNET_CRYPTO_hash_cmp (&session->global_id, &other_session->global_id))) |
2295 | { | 778 | { |
2296 | if (GNUNET_NO == other_session->conclude) | 779 | if (CONSENSUS_ROUND_FINISH != other_session->current_round) |
2297 | { | 780 | { |
2298 | GNUNET_break (0); | 781 | GNUNET_break (0); |
2299 | destroy_session (session); | 782 | destroy_session (session); |
2300 | return; | 783 | return; |
2301 | } | 784 | } |
2302 | GNUNET_SERVER_client_drop (other_session->scss.client); | ||
2303 | other_session->scss.client = NULL; | ||
2304 | break; | 785 | break; |
2305 | } | 786 | } |
2306 | other_session = other_session->next; | 787 | other_session = other_session->next; |
2307 | } | 788 | } |
2308 | 789 | ||
2309 | session->local_peer_idx = get_peer_idx (my_peer, session); | 790 | session->local_peer_idx = get_peer_idx (&my_peer, session); |
2310 | GNUNET_assert (-1 != session->local_peer_idx); | 791 | GNUNET_assert (-1 != session->local_peer_idx); |
792 | session->set_listener = GNUNET_SET_listen (cfg, GNUNET_SET_OPERATION_UNION, | ||
793 | &session->global_id, | ||
794 | set_listen_cb, session); | ||
2311 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%d is the local peer\n", session->local_peer_idx); | 795 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%d is the local peer\n", session->local_peer_idx); |
2312 | GNUNET_free (session->join_msg); | ||
2313 | session->join_msg = NULL; | ||
2314 | add_incoming_peers (session); | ||
2315 | GNUNET_SERVER_receive_done (session->scss.client, GNUNET_OK); | ||
2316 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "session %s initialized\n", GNUNET_h2s (&session->global_id)); | 796 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "session %s initialized\n", GNUNET_h2s (&session->global_id)); |
2317 | } | 797 | } |
2318 | 798 | ||
2319 | 799 | ||
800 | static struct ConsensusSession * | ||
801 | get_session_by_client (struct GNUNET_SERVER_Client *client) | ||
802 | { | ||
803 | struct ConsensusSession *session; | ||
804 | |||
805 | session = sessions_head; | ||
806 | while (NULL != session) | ||
807 | { | ||
808 | if (session->client == client) | ||
809 | return session; | ||
810 | session = session->next; | ||
811 | } | ||
812 | return NULL; | ||
813 | } | ||
814 | |||
815 | |||
2320 | /** | 816 | /** |
2321 | * Called when a client wants to join a consensus session. | 817 | * Called when a client wants to join a consensus session. |
2322 | * | 818 | * |
@@ -2331,45 +827,20 @@ client_join (void *cls, | |||
2331 | { | 827 | { |
2332 | struct ConsensusSession *session; | 828 | struct ConsensusSession *session; |
2333 | 829 | ||
2334 | // make sure the client has not already joined a session | 830 | session = get_session_by_client (client); |
2335 | session = sessions_head; | 831 | if (NULL != session) |
2336 | while (NULL != session) | ||
2337 | { | 832 | { |
2338 | if (session->scss.client == client) | 833 | GNUNET_break (0); |
2339 | { | 834 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); |
2340 | GNUNET_break (0); | 835 | return; |
2341 | disconnect_client (client); | ||
2342 | return; | ||
2343 | } | ||
2344 | session = session->next; | ||
2345 | } | 836 | } |
2346 | |||
2347 | session = GNUNET_new (struct ConsensusSession); | 837 | session = GNUNET_new (struct ConsensusSession); |
2348 | session->join_msg = (struct GNUNET_CONSENSUS_JoinMessage *) GNUNET_copy_message (m); | ||
2349 | /* these have to be initialized here, as the client can already start to give us values */ | ||
2350 | session->ibfs = GNUNET_malloc ((MAX_IBF_ORDER+1) * sizeof (struct InvertibleBloomFilter *)); | ||
2351 | session->values = GNUNET_CONTAINER_multihashmap_create (256, GNUNET_NO); | ||
2352 | session->ibf_key_map = GNUNET_CONTAINER_multihashmap_create (256, GNUNET_NO); | ||
2353 | session->se = strata_estimator_create (SE_STRATA_COUNT, SE_IBF_SIZE, SE_IBF_HASH_NUM); | ||
2354 | session->scss.client = client; | ||
2355 | session->client_mq = create_message_queue_for_server_client (&session->scss); | ||
2356 | GNUNET_SERVER_client_keep (client); | 838 | GNUNET_SERVER_client_keep (client); |
2357 | |||
2358 | GNUNET_CONTAINER_DLL_insert (sessions_head, sessions_tail, session); | 839 | GNUNET_CONTAINER_DLL_insert (sessions_head, sessions_tail, session); |
2359 | 840 | initialize_session (session, (struct GNUNET_CONSENSUS_JoinMessage *) m); | |
2360 | // Initialize session later if local peer identity is not known yet. | ||
2361 | if (NULL == my_peer) | ||
2362 | { | ||
2363 | GNUNET_SERVER_disable_receive_done_warning (client); | ||
2364 | return; | ||
2365 | } | ||
2366 | |||
2367 | initialize_session (session); | ||
2368 | } | 841 | } |
2369 | 842 | ||
2370 | 843 | ||
2371 | |||
2372 | |||
2373 | /** | 844 | /** |
2374 | * Called when a client performs an insert operation. | 845 | * Called when a client performs an insert operation. |
2375 | * | 846 | * |
@@ -2379,38 +850,48 @@ client_join (void *cls, | |||
2379 | */ | 850 | */ |
2380 | void | 851 | void |
2381 | client_insert (void *cls, | 852 | client_insert (void *cls, |
2382 | struct GNUNET_SERVER_Client *client, | 853 | struct GNUNET_SERVER_Client *client, |
2383 | const struct GNUNET_MessageHeader *m) | 854 | const struct GNUNET_MessageHeader *m) |
2384 | { | 855 | { |
2385 | struct ConsensusSession *session; | 856 | struct ConsensusSession *session; |
2386 | struct GNUNET_CONSENSUS_ElementMessage *msg; | 857 | struct GNUNET_CONSENSUS_ElementMessage *msg; |
2387 | struct GNUNET_CONSENSUS_Element *element; | 858 | struct GNUNET_SET_Element *element; |
2388 | int element_size; | 859 | ssize_t element_size; |
2389 | 860 | ||
2390 | session = sessions_head; | 861 | session = sessions_head; |
2391 | while (NULL != session) | 862 | while (NULL != session) |
2392 | { | 863 | { |
2393 | if (session->scss.client == client) | 864 | if (session->client == client) |
2394 | break; | 865 | break; |
2395 | } | 866 | } |
2396 | 867 | ||
2397 | if (NULL == session) | 868 | if (NULL == session) |
2398 | { | 869 | { |
2399 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "client tried to insert, but client is not in any session\n"); | 870 | GNUNET_break (0); |
871 | GNUNET_SERVER_client_disconnect (client); | ||
872 | return; | ||
873 | } | ||
874 | |||
875 | if (CONSENSUS_ROUND_BEGIN != session->current_round) | ||
876 | { | ||
877 | GNUNET_break (0); | ||
2400 | GNUNET_SERVER_client_disconnect (client); | 878 | GNUNET_SERVER_client_disconnect (client); |
2401 | return; | 879 | return; |
2402 | } | 880 | } |
2403 | 881 | ||
2404 | msg = (struct GNUNET_CONSENSUS_ElementMessage *) m; | 882 | msg = (struct GNUNET_CONSENSUS_ElementMessage *) m; |
2405 | element_size = ntohs (msg->header.size )- sizeof (struct GNUNET_CONSENSUS_ElementMessage); | 883 | element_size = ntohs (msg->header.size) - sizeof (struct GNUNET_CONSENSUS_ElementMessage); |
2406 | element = GNUNET_malloc (sizeof (struct GNUNET_CONSENSUS_Element) + element_size); | 884 | if (element_size < 0) |
885 | { | ||
886 | GNUNET_break (0); | ||
887 | return; | ||
888 | } | ||
889 | element = GNUNET_malloc (sizeof (struct GNUNET_SET_Element) + element_size); | ||
2407 | element->type = msg->element_type; | 890 | element->type = msg->element_type; |
2408 | element->size = element_size; | 891 | element->size = element_size; |
2409 | memcpy (&element[1], &msg[1], element_size); | 892 | memcpy (&element[1], &msg[1], element_size); |
2410 | element->data = &element[1]; | 893 | element->data = &element[1]; |
2411 | GNUNET_assert (NULL != element->data); | 894 | GNUNET_SET_add_element (session->element_set, element, NULL, NULL); |
2412 | insert_element (session, element); | ||
2413 | |||
2414 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 895 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
2415 | } | 896 | } |
2416 | 897 | ||
@@ -2432,9 +913,8 @@ client_conclude (void *cls, | |||
2432 | 913 | ||
2433 | cmsg = (struct GNUNET_CONSENSUS_ConcludeMessage *) message; | 914 | cmsg = (struct GNUNET_CONSENSUS_ConcludeMessage *) message; |
2434 | 915 | ||
2435 | session = sessions_head; | 916 | session = get_session_by_client (client); |
2436 | while ((session != NULL) && (session->scss.client != client)) | 917 | |
2437 | session = session->next; | ||
2438 | if (NULL == session) | 918 | if (NULL == session) |
2439 | { | 919 | { |
2440 | /* client not found */ | 920 | /* client not found */ |
@@ -2447,16 +927,12 @@ client_conclude (void *cls, | |||
2447 | { | 927 | { |
2448 | /* client requested conclude twice */ | 928 | /* client requested conclude twice */ |
2449 | GNUNET_break (0); | 929 | GNUNET_break (0); |
2450 | /* client may still own a session, destroy it */ | ||
2451 | disconnect_client (client); | ||
2452 | return; | 930 | return; |
2453 | } | 931 | } |
2454 | 932 | ||
2455 | session->conclude = GNUNET_YES; | ||
2456 | |||
2457 | if (session->num_peers <= 1) | 933 | if (session->num_peers <= 1) |
2458 | { | 934 | { |
2459 | send_client_conclude_done (session); | 935 | //send_client_conclude_done (session); |
2460 | } | 936 | } |
2461 | else | 937 | else |
2462 | { | 938 | { |
@@ -2465,48 +941,12 @@ client_conclude (void *cls, | |||
2465 | round_over (session, NULL); | 941 | round_over (session, NULL); |
2466 | } | 942 | } |
2467 | 943 | ||
944 | GNUNET_assert (CONSENSUS_ROUND_BEGIN != session->current_round); | ||
2468 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 945 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
2469 | } | 946 | } |
2470 | 947 | ||
2471 | 948 | ||
2472 | /** | 949 | /** |
2473 | * Task that disconnects from core. | ||
2474 | * | ||
2475 | * @param cls core handle | ||
2476 | * @param tc context information (why was this task triggered now) | ||
2477 | */ | ||
2478 | static void | ||
2479 | disconnect_core (void *cls, | ||
2480 | const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
2481 | { | ||
2482 | if (core != NULL) | ||
2483 | { | ||
2484 | GNUNET_CORE_disconnect (core); | ||
2485 | core = NULL; | ||
2486 | } | ||
2487 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "disconnected from core\n"); | ||
2488 | } | ||
2489 | |||
2490 | |||
2491 | static void | ||
2492 | core_startup (void *cls, | ||
2493 | struct GNUNET_CORE_Handle *core, | ||
2494 | const struct GNUNET_PeerIdentity *peer) | ||
2495 | { | ||
2496 | struct ConsensusSession *session; | ||
2497 | |||
2498 | my_peer = GNUNET_memdup(peer, sizeof (struct GNUNET_PeerIdentity)); | ||
2499 | /* core can't be disconnected directly in the core startup callback, schedule a task to do it! */ | ||
2500 | GNUNET_SCHEDULER_add_now (&disconnect_core, core); | ||
2501 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "connected to core\n"); | ||
2502 | /* initialize sessions that are waiting for the local peer identity */ | ||
2503 | for (session = sessions_head; NULL != session; session = session->next) | ||
2504 | if (NULL != session->join_msg) | ||
2505 | initialize_session (session); | ||
2506 | } | ||
2507 | |||
2508 | |||
2509 | /** | ||
2510 | * Called to clean up, after a shutdown has been requested. | 950 | * Called to clean up, after a shutdown has been requested. |
2511 | * | 951 | * |
2512 | * @param cls closure | 952 | * @param cls closure |
@@ -2516,35 +956,8 @@ static void | |||
2516 | shutdown_task (void *cls, | 956 | shutdown_task (void *cls, |
2517 | const struct GNUNET_SCHEDULER_TaskContext *tc) | 957 | const struct GNUNET_SCHEDULER_TaskContext *tc) |
2518 | { | 958 | { |
2519 | while (NULL != incoming_sockets_head) | ||
2520 | { | ||
2521 | struct IncomingSocket *socket; | ||
2522 | socket = incoming_sockets_head; | ||
2523 | if (NULL == socket->cpi) | ||
2524 | clear_message_stream_state (&socket->mss); | ||
2525 | incoming_sockets_head = incoming_sockets_head->next; | ||
2526 | GNUNET_free (socket); | ||
2527 | } | ||
2528 | |||
2529 | while (NULL != sessions_head) | 959 | while (NULL != sessions_head) |
2530 | { | ||
2531 | struct ConsensusSession *session; | ||
2532 | session = sessions_head->next; | ||
2533 | destroy_session (sessions_head); | 960 | destroy_session (sessions_head); |
2534 | sessions_head = session; | ||
2535 | } | ||
2536 | |||
2537 | if (NULL != core) | ||
2538 | { | ||
2539 | GNUNET_CORE_disconnect (core); | ||
2540 | core = NULL; | ||
2541 | } | ||
2542 | |||
2543 | if (NULL != listener) | ||
2544 | { | ||
2545 | GNUNET_STREAM_listen_close (listener); | ||
2546 | listener = NULL; | ||
2547 | } | ||
2548 | 961 | ||
2549 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "handled shutdown request\n"); | 962 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "handled shutdown request\n"); |
2550 | } | 963 | } |
@@ -2560,10 +973,6 @@ shutdown_task (void *cls, | |||
2560 | static void | 973 | static void |
2561 | run (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *c) | 974 | run (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *c) |
2562 | { | 975 | { |
2563 | /* core is only used to retrieve the peer identity */ | ||
2564 | static const struct GNUNET_CORE_MessageHandler core_handlers[] = { | ||
2565 | {NULL, 0, 0} | ||
2566 | }; | ||
2567 | static const struct GNUNET_SERVER_MessageHandler server_handlers[] = { | 976 | static const struct GNUNET_SERVER_MessageHandler server_handlers[] = { |
2568 | {&client_join, NULL, GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_JOIN, 0}, | 977 | {&client_join, NULL, GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_JOIN, 0}, |
2569 | {&client_insert, NULL, GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_INSERT, 0}, | 978 | {&client_insert, NULL, GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_INSERT, 0}, |
@@ -2574,21 +983,15 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGU | |||
2574 | 983 | ||
2575 | cfg = c; | 984 | cfg = c; |
2576 | srv = server; | 985 | srv = server; |
2577 | 986 | if (GNUNET_OK != GNUNET_CRYPTO_get_host_identity (cfg, &my_peer)) | |
987 | { | ||
988 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "could not retrieve host identity\n"); | ||
989 | GNUNET_break (0); | ||
990 | GNUNET_SCHEDULER_shutdown (); | ||
991 | return; | ||
992 | } | ||
2578 | GNUNET_SERVER_add_handlers (server, server_handlers); | 993 | GNUNET_SERVER_add_handlers (server, server_handlers); |
2579 | |||
2580 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, NULL); | 994 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, NULL); |
2581 | |||
2582 | listener = GNUNET_STREAM_listen (cfg, GNUNET_APPLICATION_TYPE_CONSENSUS, | ||
2583 | &listen_cb, NULL, | ||
2584 | GNUNET_STREAM_OPTION_END); | ||
2585 | |||
2586 | /* we have to wait for the core_startup callback before proceeding with the consensus service startup */ | ||
2587 | core = GNUNET_CORE_connect (c, NULL, | ||
2588 | &core_startup, NULL, | ||
2589 | NULL, NULL, GNUNET_NO, NULL, | ||
2590 | GNUNET_NO, core_handlers); | ||
2591 | GNUNET_assert (NULL != core); | ||
2592 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "consensus running\n"); | 995 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "consensus running\n"); |
2593 | } | 996 | } |
2594 | 997 | ||
diff --git a/src/consensus/ibf.c b/src/consensus/ibf.c deleted file mode 100644 index 739b97339..000000000 --- a/src/consensus/ibf.c +++ /dev/null | |||
@@ -1,357 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet | ||
3 | (C) 2012 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file consensus/ibf.c | ||
23 | * @brief implementation of the invertible bloom filter | ||
24 | * @author Florian Dold | ||
25 | */ | ||
26 | |||
27 | #include "ibf.h" | ||
28 | |||
29 | /** | ||
30 | * Create a key from a hashcode. | ||
31 | * | ||
32 | * @param hash the hashcode | ||
33 | * @return a key | ||
34 | */ | ||
35 | struct IBF_Key | ||
36 | ibf_key_from_hashcode (const struct GNUNET_HashCode *hash) | ||
37 | { | ||
38 | /* FIXME: endianess */ | ||
39 | return *(struct IBF_Key *) hash; | ||
40 | } | ||
41 | |||
42 | /** | ||
43 | * Create a hashcode from a key, by replicating the key | ||
44 | * until the hascode is filled | ||
45 | * | ||
46 | * @param key the key | ||
47 | * @param dst hashcode to store the result in | ||
48 | */ | ||
49 | void | ||
50 | ibf_hashcode_from_key (struct IBF_Key key, struct GNUNET_HashCode *dst) | ||
51 | { | ||
52 | struct IBF_Key *p; | ||
53 | unsigned int i; | ||
54 | const unsigned int keys_per_hashcode = sizeof (struct GNUNET_HashCode) / sizeof (struct IBF_Key); | ||
55 | p = (struct IBF_Key *) dst; | ||
56 | for (i = 0; i < keys_per_hashcode; i++) | ||
57 | *p++ = key; | ||
58 | } | ||
59 | |||
60 | |||
61 | /** | ||
62 | * Create an invertible bloom filter. | ||
63 | * | ||
64 | * @param size number of IBF buckets | ||
65 | * @param hash_num number of buckets one element is hashed in | ||
66 | * @return the newly created invertible bloom filter | ||
67 | */ | ||
68 | struct InvertibleBloomFilter * | ||
69 | ibf_create (uint32_t size, uint8_t hash_num) | ||
70 | { | ||
71 | struct InvertibleBloomFilter *ibf; | ||
72 | |||
73 | /* TODO: use malloc_large */ | ||
74 | |||
75 | ibf = GNUNET_malloc (sizeof (struct InvertibleBloomFilter)); | ||
76 | ibf->count = GNUNET_malloc (size * sizeof (uint8_t)); | ||
77 | ibf->key_sum = GNUNET_malloc (size * sizeof (struct GNUNET_HashCode)); | ||
78 | ibf->key_hash_sum = GNUNET_malloc (size * sizeof (struct GNUNET_HashCode)); | ||
79 | ibf->size = size; | ||
80 | ibf->hash_num = hash_num; | ||
81 | |||
82 | return ibf; | ||
83 | } | ||
84 | |||
85 | /** | ||
86 | * Store unique bucket indices for the specified key in dst. | ||
87 | */ | ||
88 | static inline void | ||
89 | ibf_get_indices (const struct InvertibleBloomFilter *ibf, | ||
90 | struct IBF_Key key, int *dst) | ||
91 | { | ||
92 | struct GNUNET_HashCode bucket_indices; | ||
93 | unsigned int filled; | ||
94 | int i; | ||
95 | GNUNET_CRYPTO_hash (&key, sizeof key, &bucket_indices); | ||
96 | filled = 0; | ||
97 | for (i = 0; filled < ibf->hash_num; i++) | ||
98 | { | ||
99 | unsigned int bucket; | ||
100 | unsigned int j; | ||
101 | if ( (0 != i) && (0 == (i % 16)) ) | ||
102 | GNUNET_CRYPTO_hash (&bucket_indices, sizeof (struct GNUNET_HashCode), &bucket_indices); | ||
103 | bucket = bucket_indices.bits[i % 16] % ibf->size; | ||
104 | for (j = 0; j < filled; j++) | ||
105 | if (dst[j] == bucket) | ||
106 | goto try_next; | ||
107 | dst[filled++] = bucket; | ||
108 | try_next: ; | ||
109 | } | ||
110 | } | ||
111 | |||
112 | |||
113 | static void | ||
114 | ibf_insert_into (struct InvertibleBloomFilter *ibf, | ||
115 | struct IBF_Key key, | ||
116 | const int *buckets, int side) | ||
117 | { | ||
118 | int i; | ||
119 | struct GNUNET_HashCode key_hash_sha; | ||
120 | struct IBF_KeyHash key_hash; | ||
121 | GNUNET_CRYPTO_hash (&key, sizeof key, &key_hash_sha); | ||
122 | key_hash.key_hash_val = key_hash_sha.bits[0]; | ||
123 | for (i = 0; i < ibf->hash_num; i++) | ||
124 | { | ||
125 | const int bucket = buckets[i]; | ||
126 | ibf->count[bucket].count_val += side; | ||
127 | ibf->key_sum[bucket].key_val ^= key.key_val; | ||
128 | ibf->key_hash_sum[bucket].key_hash_val ^= key_hash.key_hash_val; | ||
129 | } | ||
130 | } | ||
131 | |||
132 | |||
133 | /** | ||
134 | * Insert an element into an IBF. | ||
135 | * | ||
136 | * @param ibf the IBF | ||
137 | * @param key the element's hash code | ||
138 | */ | ||
139 | void | ||
140 | ibf_insert (struct InvertibleBloomFilter *ibf, struct IBF_Key key) | ||
141 | { | ||
142 | int buckets[ibf->hash_num]; | ||
143 | GNUNET_assert (ibf->hash_num <= ibf->size); | ||
144 | ibf_get_indices (ibf, key, buckets); | ||
145 | ibf_insert_into (ibf, key, buckets, 1); | ||
146 | } | ||
147 | |||
148 | /** | ||
149 | * Test is the IBF is empty, i.e. all counts, keys and key hashes are zero. | ||
150 | */ | ||
151 | static int | ||
152 | ibf_is_empty (struct InvertibleBloomFilter *ibf) | ||
153 | { | ||
154 | int i; | ||
155 | for (i = 0; i < ibf->size; i++) | ||
156 | { | ||
157 | if (0 != ibf->count[i].count_val) | ||
158 | return GNUNET_NO; | ||
159 | if (0 != ibf->key_hash_sum[i].key_hash_val) | ||
160 | return GNUNET_NO; | ||
161 | if (0 != ibf->key_sum[i].key_val) | ||
162 | return GNUNET_NO; | ||
163 | } | ||
164 | return GNUNET_YES; | ||
165 | } | ||
166 | |||
167 | |||
168 | /** | ||
169 | * Decode and remove an element from the IBF, if possible. | ||
170 | * | ||
171 | * @param ibf the invertible bloom filter to decode | ||
172 | * @param ret_side sign of the cell's count where the decoded element came from. | ||
173 | * A negative sign indicates that the element was recovered | ||
174 | * resides in an IBF that was previously subtracted from. | ||
175 | * @param ret_id receives the hash code of the decoded element, if successful | ||
176 | * @return GNUNET_YES if decoding an element was successful, | ||
177 | * GNUNET_NO if the IBF is empty, | ||
178 | * GNUNET_SYSERR if the decoding has failed | ||
179 | */ | ||
180 | int | ||
181 | ibf_decode (struct InvertibleBloomFilter *ibf, | ||
182 | int *ret_side, struct IBF_Key *ret_id) | ||
183 | { | ||
184 | struct IBF_KeyHash hash; | ||
185 | int i; | ||
186 | struct GNUNET_HashCode key_hash_sha; | ||
187 | int buckets[ibf->hash_num]; | ||
188 | |||
189 | GNUNET_assert (NULL != ibf); | ||
190 | |||
191 | for (i = 0; i < ibf->size; i++) | ||
192 | { | ||
193 | int j; | ||
194 | int hit; | ||
195 | |||
196 | /* we can only decode from pure buckets */ | ||
197 | if ((1 != ibf->count[i].count_val) && (-1 != ibf->count[i].count_val)) | ||
198 | continue; | ||
199 | |||
200 | GNUNET_CRYPTO_hash (&ibf->key_sum[i], sizeof (struct IBF_Key), &key_hash_sha); | ||
201 | hash.key_hash_val = key_hash_sha.bits[0]; | ||
202 | |||
203 | /* test if the hash matches the key */ | ||
204 | if (hash.key_hash_val != ibf->key_hash_sum[i].key_hash_val) | ||
205 | continue; | ||
206 | |||
207 | /* test if key in bucket hits its own location, | ||
208 | * if not, the key hash was subject to collision */ | ||
209 | hit = GNUNET_NO; | ||
210 | ibf_get_indices (ibf, ibf->key_sum[i], buckets); | ||
211 | for (j = 0; j < ibf->hash_num; j++) | ||
212 | if (buckets[j] == i) | ||
213 | hit = GNUNET_YES; | ||
214 | |||
215 | if (GNUNET_NO == hit) | ||
216 | continue; | ||
217 | |||
218 | if (NULL != ret_side) | ||
219 | *ret_side = ibf->count[i].count_val; | ||
220 | if (NULL != ret_id) | ||
221 | *ret_id = ibf->key_sum[i]; | ||
222 | |||
223 | /* insert on the opposite side, effectively removing the element */ | ||
224 | ibf_insert_into (ibf, ibf->key_sum[i], buckets, -ibf->count[i].count_val); | ||
225 | |||
226 | return GNUNET_YES; | ||
227 | } | ||
228 | |||
229 | if (GNUNET_YES == ibf_is_empty (ibf)) | ||
230 | return GNUNET_NO; | ||
231 | return GNUNET_SYSERR; | ||
232 | } | ||
233 | |||
234 | |||
235 | /** | ||
236 | * Write buckets from an ibf to a buffer. | ||
237 | * Exactly (IBF_BUCKET_SIZE*ibf->size) bytes are written to buf. | ||
238 | * | ||
239 | * @param ibf the ibf to write | ||
240 | * @param start with which bucket to start | ||
241 | * @param count how many buckets to write | ||
242 | * @param buf buffer to write the data to | ||
243 | */ | ||
244 | void | ||
245 | ibf_write_slice (const struct InvertibleBloomFilter *ibf, uint32_t start, uint32_t count, void *buf) | ||
246 | { | ||
247 | struct IBF_Key *key_dst; | ||
248 | struct IBF_KeyHash *key_hash_dst; | ||
249 | struct IBF_Count *count_dst; | ||
250 | |||
251 | GNUNET_assert (start + count <= ibf->size); | ||
252 | |||
253 | /* copy keys */ | ||
254 | key_dst = (struct IBF_Key *) buf; | ||
255 | memcpy (key_dst, ibf->key_sum + start, count * sizeof *key_dst); | ||
256 | key_dst += count; | ||
257 | /* copy key hashes */ | ||
258 | key_hash_dst = (struct IBF_KeyHash *) key_dst; | ||
259 | memcpy (key_hash_dst, ibf->key_hash_sum + start, count * sizeof *key_hash_dst); | ||
260 | key_hash_dst += count; | ||
261 | /* copy counts */ | ||
262 | count_dst = (struct IBF_Count *) key_hash_dst; | ||
263 | memcpy (count_dst, ibf->count + start, count * sizeof *count_dst); | ||
264 | count_dst += count; | ||
265 | } | ||
266 | |||
267 | |||
268 | /** | ||
269 | * Read buckets from a buffer into an ibf. | ||
270 | * | ||
271 | * @param buf pointer to the buffer to read from | ||
272 | * @param start which bucket to start at | ||
273 | * @param count how many buckets to read | ||
274 | * @param ibf the ibf to read from | ||
275 | */ | ||
276 | void | ||
277 | ibf_read_slice (const void *buf, uint32_t start, uint32_t count, struct InvertibleBloomFilter *ibf) | ||
278 | { | ||
279 | struct IBF_Key *key_src; | ||
280 | struct IBF_KeyHash *key_hash_src; | ||
281 | struct IBF_Count *count_src; | ||
282 | |||
283 | GNUNET_assert (start + count <= ibf->size); | ||
284 | |||
285 | /* copy keys */ | ||
286 | key_src = (struct IBF_Key *) buf; | ||
287 | memcpy (ibf->key_sum + start, key_src, count * sizeof *key_src); | ||
288 | key_src += count; | ||
289 | /* copy key hashes */ | ||
290 | key_hash_src = (struct IBF_KeyHash *) key_src; | ||
291 | memcpy (ibf->key_hash_sum + start, key_hash_src, count * sizeof *key_hash_src); | ||
292 | key_hash_src += count; | ||
293 | /* copy counts */ | ||
294 | count_src = (struct IBF_Count *) key_hash_src; | ||
295 | memcpy (ibf->count + start, count_src, count * sizeof *count_src); | ||
296 | count_src += count; | ||
297 | } | ||
298 | |||
299 | |||
300 | /** | ||
301 | * Subtract ibf2 from ibf1, storing the result in ibf1. | ||
302 | * The two IBF's must have the same parameters size and hash_num. | ||
303 | * | ||
304 | * @param ibf1 IBF that is subtracted from | ||
305 | * @param ibf2 IBF that will be subtracted from ibf1 | ||
306 | */ | ||
307 | void | ||
308 | ibf_subtract (struct InvertibleBloomFilter *ibf1, const struct InvertibleBloomFilter *ibf2) | ||
309 | { | ||
310 | int i; | ||
311 | |||
312 | GNUNET_assert (ibf1->size == ibf2->size); | ||
313 | GNUNET_assert (ibf1->hash_num == ibf2->hash_num); | ||
314 | |||
315 | for (i = 0; i < ibf1->size; i++) | ||
316 | { | ||
317 | ibf1->count[i].count_val -= ibf2->count[i].count_val; | ||
318 | ibf1->key_hash_sum[i].key_hash_val ^= ibf2->key_hash_sum[i].key_hash_val; | ||
319 | ibf1->key_sum[i].key_val ^= ibf2->key_sum[i].key_val; | ||
320 | } | ||
321 | } | ||
322 | |||
323 | |||
324 | /** | ||
325 | * Create a copy of an IBF, the copy has to be destroyed properly. | ||
326 | * | ||
327 | * @param ibf the IBF to copy | ||
328 | */ | ||
329 | struct InvertibleBloomFilter * | ||
330 | ibf_dup (const struct InvertibleBloomFilter *ibf) | ||
331 | { | ||
332 | struct InvertibleBloomFilter *copy; | ||
333 | copy = GNUNET_malloc (sizeof *copy); | ||
334 | copy->hash_num = ibf->hash_num; | ||
335 | copy->size = ibf->size; | ||
336 | copy->key_hash_sum = GNUNET_memdup (ibf->key_hash_sum, ibf->size * sizeof (struct IBF_KeyHash)); | ||
337 | copy->key_sum = GNUNET_memdup (ibf->key_sum, ibf->size * sizeof (struct IBF_Key)); | ||
338 | copy->count = GNUNET_memdup (ibf->count, ibf->size * sizeof (struct IBF_Count)); | ||
339 | return copy; | ||
340 | } | ||
341 | |||
342 | |||
343 | /** | ||
344 | * Destroy all resources associated with the invertible bloom filter. | ||
345 | * No more ibf_*-functions may be called on ibf after calling destroy. | ||
346 | * | ||
347 | * @param ibf the intertible bloom filter to destroy | ||
348 | */ | ||
349 | void | ||
350 | ibf_destroy (struct InvertibleBloomFilter *ibf) | ||
351 | { | ||
352 | GNUNET_free (ibf->key_sum); | ||
353 | GNUNET_free (ibf->key_hash_sum); | ||
354 | GNUNET_free (ibf->count); | ||
355 | GNUNET_free (ibf); | ||
356 | } | ||
357 | |||
diff --git a/src/consensus/ibf.h b/src/consensus/ibf.h deleted file mode 100644 index 2bf3ef7c7..000000000 --- a/src/consensus/ibf.h +++ /dev/null | |||
@@ -1,224 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet | ||
3 | (C) 2012 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file consensus/ibf.h | ||
23 | * @brief invertible bloom filter | ||
24 | * @author Florian Dold | ||
25 | */ | ||
26 | |||
27 | #ifndef GNUNET_CONSENSUS_IBF_H | ||
28 | #define GNUNET_CONSENSUS_IBF_H | ||
29 | |||
30 | #include "platform.h" | ||
31 | #include "gnunet_common.h" | ||
32 | #include "gnunet_util_lib.h" | ||
33 | |||
34 | #ifdef __cplusplus | ||
35 | extern "C" | ||
36 | { | ||
37 | #if 0 /* keep Emacsens' auto-indent happy */ | ||
38 | } | ||
39 | #endif | ||
40 | #endif | ||
41 | |||
42 | |||
43 | struct IBF_Key | ||
44 | { | ||
45 | uint64_t key_val; | ||
46 | }; | ||
47 | |||
48 | struct IBF_KeyHash | ||
49 | { | ||
50 | uint32_t key_hash_val; | ||
51 | }; | ||
52 | |||
53 | struct IBF_Count | ||
54 | { | ||
55 | int8_t count_val; | ||
56 | }; | ||
57 | |||
58 | /** | ||
59 | * Size of one ibf bucket in bytes | ||
60 | */ | ||
61 | #define IBF_BUCKET_SIZE (sizeof (struct IBF_Count) + sizeof (struct IBF_Key) + \ | ||
62 | sizeof (struct IBF_KeyHash)) | ||
63 | |||
64 | /** | ||
65 | * Invertible bloom filter (IBF). | ||
66 | * | ||
67 | * An IBF is a counting bloom filter that has the ability to restore | ||
68 | * the hashes of its stored elements with high probability. | ||
69 | */ | ||
70 | struct InvertibleBloomFilter | ||
71 | { | ||
72 | /** | ||
73 | * How many cells does this IBF have? | ||
74 | */ | ||
75 | uint32_t size; | ||
76 | |||
77 | /** | ||
78 | * In how many cells do we hash one element? | ||
79 | * Usually 4 or 3. | ||
80 | */ | ||
81 | uint8_t hash_num; | ||
82 | |||
83 | /** | ||
84 | * Xor sums of the elements' keys, used to identify the elements. | ||
85 | * Array of 'size' elements. | ||
86 | */ | ||
87 | struct IBF_Key *key_sum; | ||
88 | |||
89 | /** | ||
90 | * Xor sums of the hashes of the keys of inserted elements. | ||
91 | * Array of 'size' elements. | ||
92 | */ | ||
93 | struct IBF_KeyHash *key_hash_sum; | ||
94 | |||
95 | /** | ||
96 | * How many times has a bucket been hit? | ||
97 | * Can be negative, as a result of IBF subtraction. | ||
98 | * Array of 'size' elements. | ||
99 | */ | ||
100 | struct IBF_Count *count; | ||
101 | }; | ||
102 | |||
103 | |||
104 | /** | ||
105 | * Write buckets from an ibf to a buffer. | ||
106 | * Exactly (IBF_BUCKET_SIZE*ibf->size) bytes are written to buf. | ||
107 | * | ||
108 | * @param ibf the ibf to write | ||
109 | * @param start with which bucket to start | ||
110 | * @param count how many buckets to write | ||
111 | * @param buf buffer to write the data to | ||
112 | */ | ||
113 | void | ||
114 | ibf_write_slice (const struct InvertibleBloomFilter *ibf, uint32_t start, uint32_t count, void *buf); | ||
115 | |||
116 | |||
117 | /** | ||
118 | * Read buckets from a buffer into an ibf. | ||
119 | * | ||
120 | * @param buf pointer to the buffer to read from | ||
121 | * @param start which bucket to start at | ||
122 | * @param count how many buckets to read | ||
123 | * @param ibf the ibf to read from | ||
124 | */ | ||
125 | void | ||
126 | ibf_read_slice (const void *buf, uint32_t start, uint32_t count, struct InvertibleBloomFilter *ibf); | ||
127 | |||
128 | |||
129 | /** | ||
130 | * Create a key from a hashcode. | ||
131 | * | ||
132 | * @param hash the hashcode | ||
133 | * @return a key | ||
134 | */ | ||
135 | struct IBF_Key | ||
136 | ibf_key_from_hashcode (const struct GNUNET_HashCode *hash); | ||
137 | |||
138 | |||
139 | /** | ||
140 | * Create a hashcode from a key, by replicating the key | ||
141 | * until the hascode is filled | ||
142 | * | ||
143 | * @param key the key | ||
144 | * @param dst hashcode to store the result in | ||
145 | */ | ||
146 | void | ||
147 | ibf_hashcode_from_key (struct IBF_Key key, struct GNUNET_HashCode *dst); | ||
148 | |||
149 | |||
150 | /** | ||
151 | * Create an invertible bloom filter. | ||
152 | * | ||
153 | * @param size number of IBF buckets | ||
154 | * @param hash_num number of buckets one element is hashed in, usually 3 or 4 | ||
155 | * @return the newly created invertible bloom filter | ||
156 | */ | ||
157 | struct InvertibleBloomFilter * | ||
158 | ibf_create (uint32_t size, uint8_t hash_num); | ||
159 | |||
160 | |||
161 | /** | ||
162 | * Insert an element into an IBF. | ||
163 | * | ||
164 | * @param ibf the IBF | ||
165 | * @param key the element's hash code | ||
166 | */ | ||
167 | void | ||
168 | ibf_insert (struct InvertibleBloomFilter *ibf, struct IBF_Key key); | ||
169 | |||
170 | |||
171 | /** | ||
172 | * Subtract ibf2 from ibf1, storing the result in ibf1. | ||
173 | * The two IBF's must have the same parameters size and hash_num. | ||
174 | * | ||
175 | * @param ibf1 IBF that is subtracted from | ||
176 | * @param ibf2 IBF that will be subtracted from ibf1 | ||
177 | */ | ||
178 | void | ||
179 | ibf_subtract (struct InvertibleBloomFilter *ibf1, const struct InvertibleBloomFilter *ibf2); | ||
180 | |||
181 | |||
182 | /** | ||
183 | * Decode and remove an element from the IBF, if possible. | ||
184 | * | ||
185 | * @param ibf the invertible bloom filter to decode | ||
186 | * @param ret_side sign of the cell's count where the decoded element came from. | ||
187 | * A negative sign indicates that the element was recovered | ||
188 | * resides in an IBF that was previously subtracted from. | ||
189 | * @param ret_id receives the hash code of the decoded element, if successful | ||
190 | * @return GNUNET_YES if decoding an element was successful, | ||
191 | * GNUNET_NO if the IBF is empty, | ||
192 | * GNUNET_SYSERR if the decoding has failed | ||
193 | */ | ||
194 | int | ||
195 | ibf_decode (struct InvertibleBloomFilter *ibf, int *ret_side, struct IBF_Key *ret_id); | ||
196 | |||
197 | |||
198 | /** | ||
199 | * Create a copy of an IBF, the copy has to be destroyed properly. | ||
200 | * | ||
201 | * @param ibf the IBF to copy | ||
202 | */ | ||
203 | struct InvertibleBloomFilter * | ||
204 | ibf_dup (const struct InvertibleBloomFilter *ibf); | ||
205 | |||
206 | /** | ||
207 | * Destroy all resources associated with the invertible bloom filter. | ||
208 | * No more ibf_*-functions may be called on ibf after calling destroy. | ||
209 | * | ||
210 | * @param ibf the intertible bloom filter to destroy | ||
211 | */ | ||
212 | void | ||
213 | ibf_destroy (struct InvertibleBloomFilter *ibf); | ||
214 | |||
215 | |||
216 | #if 0 /* keep Emacsens' auto-indent happy */ | ||
217 | { | ||
218 | #endif | ||
219 | #ifdef __cplusplus | ||
220 | } | ||
221 | #endif | ||
222 | |||
223 | #endif | ||
224 | |||
diff --git a/src/consensus/strata_estimator.c b/src/consensus/strata_estimator.c deleted file mode 100644 index 685c50f0f..000000000 --- a/src/consensus/strata_estimator.c +++ /dev/null | |||
@@ -1,145 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet | ||
3 | (C) 2012 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file consensus/ibf.h | ||
23 | * @brief invertible bloom filter | ||
24 | * @author Florian Dold | ||
25 | */ | ||
26 | |||
27 | #include "platform.h" | ||
28 | #include "gnunet_common.h" | ||
29 | #include "ibf.h" | ||
30 | #include "strata_estimator.h" | ||
31 | |||
32 | void | ||
33 | strata_estimator_write (const struct StrataEstimator *se, void *buf) | ||
34 | { | ||
35 | int i; | ||
36 | for (i = 0; i < se->strata_count; i++) | ||
37 | { | ||
38 | ibf_write_slice (se->strata[i], 0, se->ibf_size, buf); | ||
39 | buf += se->ibf_size * IBF_BUCKET_SIZE; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | void | ||
44 | strata_estimator_read (const void *buf, struct StrataEstimator *se) | ||
45 | { | ||
46 | int i; | ||
47 | for (i = 0; i < se->strata_count; i++) | ||
48 | { | ||
49 | ibf_read_slice (buf, 0, se->ibf_size, se->strata[i]); | ||
50 | buf += se->ibf_size * IBF_BUCKET_SIZE; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | |||
55 | void | ||
56 | strata_estimator_insert (struct StrataEstimator *se, struct GNUNET_HashCode *key) | ||
57 | { | ||
58 | uint32_t v; | ||
59 | int i; | ||
60 | v = key->bits[0]; | ||
61 | /* count trailing '1'-bits of v */ | ||
62 | for (i = 0; v & 1; v>>=1, i++) | ||
63 | /* empty */; | ||
64 | ibf_insert (se->strata[i], ibf_key_from_hashcode (key)); | ||
65 | } | ||
66 | |||
67 | |||
68 | |||
69 | struct StrataEstimator * | ||
70 | strata_estimator_create (unsigned int strata_count, uint32_t ibf_size, uint8_t ibf_hashnum) | ||
71 | { | ||
72 | struct StrataEstimator *se; | ||
73 | int i; | ||
74 | |||
75 | /* fixme: allocate everything in one chunk */ | ||
76 | |||
77 | se = GNUNET_malloc (sizeof (struct StrataEstimator)); | ||
78 | se->strata_count = strata_count; | ||
79 | se->ibf_size = ibf_size; | ||
80 | se->strata = GNUNET_malloc (sizeof (struct InvertibleBloomFilter *) * strata_count); | ||
81 | for (i = 0; i < strata_count; i++) | ||
82 | se->strata[i] = ibf_create (ibf_size, ibf_hashnum); | ||
83 | return se; | ||
84 | } | ||
85 | |||
86 | |||
87 | /** | ||
88 | * Estimate set difference with two strata estimators, | ||
89 | * i.e. arrays of IBFs. | ||
90 | * Does not not modify its arguments. | ||
91 | * | ||
92 | * @param se1 first strata estimator | ||
93 | * @param se2 second strata estimator | ||
94 | * @return the estimated difference | ||
95 | */ | ||
96 | unsigned int | ||
97 | strata_estimator_difference (const struct StrataEstimator *se1, | ||
98 | const struct StrataEstimator *se2) | ||
99 | { | ||
100 | int i; | ||
101 | int count; | ||
102 | |||
103 | GNUNET_assert (se1->strata_count == se2->strata_count); | ||
104 | count = 0; | ||
105 | for (i = se1->strata_count - 1; i >= 0; i--) | ||
106 | { | ||
107 | struct InvertibleBloomFilter *diff; | ||
108 | /* number of keys decoded from the ibf */ | ||
109 | int ibf_count; | ||
110 | int more; | ||
111 | ibf_count = 0; | ||
112 | /* FIXME: implement this without always allocating new IBFs */ | ||
113 | diff = ibf_dup (se1->strata[i]); | ||
114 | ibf_subtract (diff, se2->strata[i]); | ||
115 | for (;;) | ||
116 | { | ||
117 | more = ibf_decode (diff, NULL, NULL); | ||
118 | if (GNUNET_NO == more) | ||
119 | { | ||
120 | count += ibf_count; | ||
121 | break; | ||
122 | } | ||
123 | if (GNUNET_SYSERR == more) | ||
124 | { | ||
125 | ibf_destroy (diff); | ||
126 | return count * (1 << (i + 1)); | ||
127 | } | ||
128 | ibf_count++; | ||
129 | } | ||
130 | ibf_destroy (diff); | ||
131 | } | ||
132 | return count; | ||
133 | } | ||
134 | |||
135 | |||
136 | void | ||
137 | strata_estimator_destroy (struct StrataEstimator *se) | ||
138 | { | ||
139 | int i; | ||
140 | for (i = 0; i < se->strata_count; i++) | ||
141 | ibf_destroy (se->strata[i]); | ||
142 | GNUNET_free (se->strata); | ||
143 | GNUNET_free (se); | ||
144 | } | ||
145 | |||
diff --git a/src/consensus/strata_estimator.h b/src/consensus/strata_estimator.h deleted file mode 100644 index cb5bd3d0a..000000000 --- a/src/consensus/strata_estimator.h +++ /dev/null | |||
@@ -1,84 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet | ||
3 | (C) 2012 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file consensus/strata_estimator.h | ||
23 | * @brief estimator of set difference | ||
24 | * @author Florian Dold | ||
25 | */ | ||
26 | |||
27 | #ifndef GNUNET_CONSENSUS_STRATA_ESTIMATOR_H | ||
28 | #define GNUNET_CONSENSUS_STRATA_ESTIMATOR_H | ||
29 | |||
30 | #include "platform.h" | ||
31 | #include "gnunet_common.h" | ||
32 | #include "gnunet_util_lib.h" | ||
33 | |||
34 | #ifdef __cplusplus | ||
35 | extern "C" | ||
36 | { | ||
37 | #if 0 /* keep Emacsens' auto-indent happy */ | ||
38 | } | ||
39 | #endif | ||
40 | #endif | ||
41 | |||
42 | |||
43 | struct StrataEstimator | ||
44 | { | ||
45 | struct InvertibleBloomFilter **strata; | ||
46 | unsigned int strata_count; | ||
47 | unsigned int ibf_size; | ||
48 | }; | ||
49 | |||
50 | |||
51 | void | ||
52 | strata_estimator_write (const struct StrataEstimator *se, void *buf); | ||
53 | |||
54 | |||
55 | void | ||
56 | strata_estimator_read (const void *buf, struct StrataEstimator *se); | ||
57 | |||
58 | |||
59 | struct StrataEstimator * | ||
60 | strata_estimator_create (unsigned int strata_count, uint32_t ibf_size, uint8_t ibf_hashnum); | ||
61 | |||
62 | |||
63 | unsigned int | ||
64 | strata_estimator_difference (const struct StrataEstimator *se1, | ||
65 | const struct StrataEstimator *se2); | ||
66 | |||
67 | |||
68 | void | ||
69 | strata_estimator_insert (struct StrataEstimator *se, struct GNUNET_HashCode *key); | ||
70 | |||
71 | |||
72 | void | ||
73 | strata_estimator_destroy (struct StrataEstimator *se); | ||
74 | |||
75 | |||
76 | #if 0 /* keep Emacsens' auto-indent happy */ | ||
77 | { | ||
78 | #endif | ||
79 | #ifdef __cplusplus | ||
80 | } | ||
81 | #endif | ||
82 | |||
83 | #endif | ||
84 | |||
diff --git a/src/set/mq.h b/src/include/gnunet_mq_lib.h index b7a89f6e0..59b692cf0 100644 --- a/src/set/mq.h +++ b/src/include/gnunet_mq_lib.h | |||
@@ -23,15 +23,10 @@ | |||
23 | * @file set/mq.h | 23 | * @file set/mq.h |
24 | * @brief general purpose request queue | 24 | * @brief general purpose request queue |
25 | */ | 25 | */ |
26 | #ifndef MQ_H | 26 | #ifndef GNUNET_MQ_H |
27 | #define MQ_H | 27 | #define GNUNET_MQ_H |
28 | 28 | ||
29 | #include "platform.h" | ||
30 | #include "gnunet_common.h" | 29 | #include "gnunet_common.h" |
31 | #include "gnunet_util_lib.h" | ||
32 | #include "gnunet_connection_lib.h" | ||
33 | #include "gnunet_server_lib.h" | ||
34 | #include "gnunet_stream_lib.h" | ||
35 | 30 | ||
36 | 31 | ||
37 | /** | 32 | /** |
@@ -69,12 +64,12 @@ | |||
69 | * @param mqm MQ message to augment with additional data | 64 | * @param mqm MQ message to augment with additional data |
70 | * @param src source buffer for the additional data | 65 | * @param src source buffer for the additional data |
71 | * @param len length of the additional data | 66 | * @param len length of the additional data |
72 | * @return FIXME | 67 | * @return GNUNET_SYSERR if nesting the message failed, |
68 | * GNUNET_OK on success | ||
73 | */ | 69 | */ |
74 | #define GNUNET_MQ_nest(mqm, src, len) GNUNET_MQ_nest_ (&mqm, src, len) | 70 | #define GNUNET_MQ_nest(mqm, src, len) GNUNET_MQ_nest_ (&mqm, src, len) |
75 | 71 | ||
76 | 72 | ||
77 | |||
78 | /** | 73 | /** |
79 | * Append a message to the end of an existing MQ message. | 74 | * Append a message to the end of an existing MQ message. |
80 | * If the operation is successful, mqm is changed to point to the new MQ message, | 75 | * If the operation is successful, mqm is changed to point to the new MQ message, |
@@ -114,15 +109,18 @@ | |||
114 | */ | 109 | */ |
115 | #define GNUNET_MQ_HANDLERS_END {NULL, 0, 0} | 110 | #define GNUNET_MQ_HANDLERS_END {NULL, 0, 0} |
116 | 111 | ||
117 | /** | 112 | |
118 | * Opaque handle to a message queue | ||
119 | */ | ||
120 | struct GNUNET_MQ_MessageQueue; | 113 | struct GNUNET_MQ_MessageQueue; |
121 | 114 | ||
122 | /** | 115 | struct GNUNET_MQ_Message; |
123 | * Opaque handle to an allocated message | 116 | |
124 | */ | 117 | enum GNUNET_MQ_Error |
125 | struct GNUNET_MQ_Message; // Entry (/ Request) | 118 | { |
119 | GNUNET_MQ_ERROR_READ = 1, | ||
120 | GNUNET_MQ_ERROR_WRITE = 2, | ||
121 | GNUNET_MQ_ERROR_TIMEOUT = 4 | ||
122 | }; | ||
123 | |||
126 | 124 | ||
127 | /** | 125 | /** |
128 | * Called when a message has been received. | 126 | * Called when a message has been received. |
@@ -134,6 +132,135 @@ typedef void (*GNUNET_MQ_MessageCallback) (void *cls, const struct GNUNET_Messag | |||
134 | 132 | ||
135 | 133 | ||
136 | /** | 134 | /** |
135 | * Signature of functions implementing the | ||
136 | * sending part of a message queue | ||
137 | * | ||
138 | * @param q the message queue | ||
139 | * @param m the message | ||
140 | */ | ||
141 | typedef void | ||
142 | (*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_MessageQueue *q, struct GNUNET_MQ_Message *m); | ||
143 | |||
144 | |||
145 | typedef void | ||
146 | (*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_MessageQueue *q); | ||
147 | |||
148 | |||
149 | /** | ||
150 | * Callback used for notifications | ||
151 | * | ||
152 | * @param cls closure | ||
153 | */ | ||
154 | typedef void (*GNUNET_MQ_NotifyCallback) (void *cls); | ||
155 | |||
156 | |||
157 | typedef void (*GNUNET_MQ_ErrorHandler) (void *cls, enum GNUNET_MQ_Error error); | ||
158 | |||
159 | |||
160 | struct GNUNET_MQ_Message | ||
161 | { | ||
162 | /** | ||
163 | * Messages are stored in a linked list | ||
164 | */ | ||
165 | struct GNUNET_MQ_Message *next; | ||
166 | |||
167 | /** | ||
168 | * Messages are stored in a linked list | ||
169 | */ | ||
170 | struct GNUNET_MQ_Message *prev; | ||
171 | |||
172 | /** | ||
173 | * Actual allocated message header, | ||
174 | * usually points to the end of the containing GNUNET_MQ_Message | ||
175 | */ | ||
176 | struct GNUNET_MessageHeader *mh; | ||
177 | |||
178 | /** | ||
179 | * Queue the message is queued in, NULL if message is not queued. | ||
180 | */ | ||
181 | struct GNUNET_MQ_MessageQueue *parent_queue; | ||
182 | |||
183 | /** | ||
184 | * Called after the message was sent irrevokably | ||
185 | */ | ||
186 | GNUNET_MQ_NotifyCallback sent_cb; | ||
187 | |||
188 | /** | ||
189 | * Closure for send_cb | ||
190 | */ | ||
191 | void *sent_cls; | ||
192 | }; | ||
193 | |||
194 | |||
195 | /** | ||
196 | * Handle to a message queue. | ||
197 | */ | ||
198 | struct GNUNET_MQ_MessageQueue | ||
199 | { | ||
200 | /** | ||
201 | * Handlers array, or NULL if the queue should not receive messages | ||
202 | */ | ||
203 | const struct GNUNET_MQ_Handler *handlers; | ||
204 | |||
205 | /** | ||
206 | * Closure for the handler callbacks, | ||
207 | * as well as for the error handler. | ||
208 | */ | ||
209 | void *handlers_cls; | ||
210 | |||
211 | /** | ||
212 | * Actual implementation of message sending, | ||
213 | * called when a message is added | ||
214 | */ | ||
215 | GNUNET_MQ_SendImpl send_impl; | ||
216 | |||
217 | /** | ||
218 | * Implementation-dependent queue destruction function | ||
219 | */ | ||
220 | GNUNET_MQ_DestroyImpl destroy_impl; | ||
221 | |||
222 | /** | ||
223 | * Implementation-specific state | ||
224 | */ | ||
225 | void *impl_state; | ||
226 | |||
227 | /** | ||
228 | * Callback will be called when an error occurs. | ||
229 | */ | ||
230 | GNUNET_MQ_ErrorHandler error_handler; | ||
231 | |||
232 | /** | ||
233 | * Linked list of messages pending to be sent | ||
234 | */ | ||
235 | struct GNUNET_MQ_Message *msg_head; | ||
236 | |||
237 | /** | ||
238 | * Linked list of messages pending to be sent | ||
239 | */ | ||
240 | struct GNUNET_MQ_Message *msg_tail; | ||
241 | |||
242 | /** | ||
243 | * Message that is currently scheduled to be | ||
244 | * sent. Not the head of the message queue, as the implementation | ||
245 | * needs to know if sending has been already scheduled or not. | ||
246 | */ | ||
247 | struct GNUNET_MQ_Message *current_msg; | ||
248 | |||
249 | /** | ||
250 | * Map of associations, lazily allocated | ||
251 | */ | ||
252 | struct GNUNET_CONTAINER_MultiHashMap32 *assoc_map; | ||
253 | |||
254 | /** | ||
255 | * Next id that should be used for the assoc_map, | ||
256 | * initialized lazily to a random value together with | ||
257 | * assoc_map | ||
258 | */ | ||
259 | uint32_t assoc_id; | ||
260 | }; | ||
261 | |||
262 | |||
263 | /** | ||
137 | * Message handler for a specific message type. | 264 | * Message handler for a specific message type. |
138 | */ | 265 | */ |
139 | struct GNUNET_MQ_Handler | 266 | struct GNUNET_MQ_Handler |
@@ -159,13 +286,6 @@ struct GNUNET_MQ_Handler | |||
159 | uint16_t expected_size; | 286 | uint16_t expected_size; |
160 | }; | 287 | }; |
161 | 288 | ||
162 | /** | ||
163 | * Callback used for notifications | ||
164 | * | ||
165 | * @param cls closure | ||
166 | */ | ||
167 | typedef void (*GNUNET_MQ_NotifyCallback) (void *cls); | ||
168 | |||
169 | 289 | ||
170 | /** | 290 | /** |
171 | * Create a new message for MQ. | 291 | * Create a new message for MQ. |
@@ -179,6 +299,16 @@ struct GNUNET_MQ_Message * | |||
179 | GNUNET_MQ_msg_ (struct GNUNET_MessageHeader **mhp, uint16_t size, uint16_t type); | 299 | GNUNET_MQ_msg_ (struct GNUNET_MessageHeader **mhp, uint16_t size, uint16_t type); |
180 | 300 | ||
181 | 301 | ||
302 | /** | ||
303 | * Resize the the mq message pointed to by mqmp, | ||
304 | * and append the given data to it. | ||
305 | * | ||
306 | * @param mqmp pointer to a mq message pointer | ||
307 | * @param src source of the data to append | ||
308 | * @param len length of the data to append | ||
309 | * @return GNUNET_OK on success, | ||
310 | * GNUNET_SYSERR on error (e.g. if len is too large) | ||
311 | */ | ||
182 | int | 312 | int |
183 | GNUNET_MQ_nest_ (struct GNUNET_MQ_Message **mqmp, | 313 | GNUNET_MQ_nest_ (struct GNUNET_MQ_Message **mqmp, |
184 | const void *src, uint16_t len); | 314 | const void *src, uint16_t len); |
@@ -277,19 +407,23 @@ GNUNET_MQ_queue_for_server_client (struct GNUNET_SERVER_Client *client); | |||
277 | 407 | ||
278 | 408 | ||
279 | /** | 409 | /** |
280 | * Create a message queue for a GNUNET_STREAM_Socket. | 410 | * Create a message queue for the specified handlers. |
281 | * If handlers are specfied, receive messages from the stream socket. | ||
282 | * | 411 | * |
283 | * @param socket the stream socket | 412 | * @param send function the implements sending messages |
284 | * @param handlers handlers for receiving messages | 413 | * @param destroy function that implements destroying the queue |
285 | * @param cls closure for the handlers | 414 | * @param state for the queue, passed to 'send' and 'destroy' |
286 | * @return the message queue | 415 | * @param handlers array of message handlers |
287 | * @deprecated - GNUNET_MQ_queue_create_with_callbacks | 416 | * @param error_handler handler for read and write errors |
417 | * @return a new message queue | ||
288 | */ | 418 | */ |
289 | struct GNUNET_MQ_MessageQueue * | 419 | struct GNUNET_MQ_MessageQueue * |
290 | GNUNET_MQ_queue_for_stream_socket (struct GNUNET_STREAM_Socket *socket, | 420 | GNUNET_MQ_queue_for_callbacks (GNUNET_MQ_SendImpl send, |
291 | const struct GNUNET_MQ_Handler *handlers, | 421 | GNUNET_MQ_DestroyImpl destroy, |
292 | void *cls); | 422 | void *impl_state, |
423 | struct GNUNET_MQ_Handler *handlers, | ||
424 | GNUNET_MQ_ErrorHandler error_handler, | ||
425 | void *cls); | ||
426 | |||
293 | 427 | ||
294 | 428 | ||
295 | /** | 429 | /** |
@@ -323,40 +457,22 @@ GNUNET_MQ_notify_sent (struct GNUNET_MQ_Message *mqm, | |||
323 | 457 | ||
324 | 458 | ||
325 | /** | 459 | /** |
326 | * Call a callback once all messages queued have been sent, | 460 | * Destroy the message queue. |
327 | * i.e. the message queue is empty. | ||
328 | * | ||
329 | * @param mqm the message queue to send the notification for | ||
330 | * @param cb the callback to call on an empty queue | ||
331 | * @param cls closure for cb | ||
332 | * @deprecated | ||
333 | */ | ||
334 | void | ||
335 | GNUNET_MQ_notify_empty (struct GNUNET_MQ_MessageQueue *mqm, | ||
336 | GNUNET_MQ_NotifyCallback cb, | ||
337 | void *cls); | ||
338 | |||
339 | |||
340 | /** | ||
341 | * Call a callback if reading encountered an error. | ||
342 | * | 461 | * |
343 | * @param mqm the message queue to send the notification for | 462 | * @param mq message queue to destroy |
344 | * @param cb the callback to call on a read error | ||
345 | * @param cls closure for cb | ||
346 | * @deprecated, integrate with queue creation | ||
347 | */ | 463 | */ |
348 | void | 464 | void |
349 | GNUNET_MQ_notify_read_error (struct GNUNET_MQ_MessageQueue *mqm, | 465 | GNUNET_MQ_destroy (struct GNUNET_MQ_MessageQueue *mq); |
350 | GNUNET_MQ_NotifyCallback cb, | ||
351 | void *cls); | ||
352 | 466 | ||
353 | 467 | ||
354 | /** | 468 | /** |
355 | * Destroy the message queue. | 469 | * Call the right callback for a message. |
356 | * | 470 | * |
357 | * @param mq message queue to destroy | 471 | * @param mq message queue with the handlers |
472 | * @param mh message to dispatch | ||
358 | */ | 473 | */ |
359 | void | 474 | void |
360 | GNUNET_MQ_destroy (struct GNUNET_MQ_MessageQueue *mq); | 475 | GNUNET_MQ_dispatch (struct GNUNET_MQ_MessageQueue *mq, |
476 | const struct GNUNET_MessageHeader *mh); | ||
361 | 477 | ||
362 | #endif | 478 | #endif |
diff --git a/src/include/gnunet_set_service.h b/src/include/gnunet_set_service.h index 72d7ee521..7415e75f3 100644 --- a/src/include/gnunet_set_service.h +++ b/src/include/gnunet_set_service.h | |||
@@ -35,7 +35,6 @@ extern "C" | |||
35 | #endif | 35 | #endif |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | #include "platform.h" | ||
39 | #include "gnunet_common.h" | 38 | #include "gnunet_common.h" |
40 | #include "gnunet_time_lib.h" | 39 | #include "gnunet_time_lib.h" |
41 | #include "gnunet_configuration_lib.h" | 40 | #include "gnunet_configuration_lib.h" |
@@ -176,7 +175,7 @@ typedef void (*GNUNET_SET_ResultIterator) (void *cls, | |||
176 | 175 | ||
177 | /** | 176 | /** |
178 | * Called when another peer wants to do a set operation with the | 177 | * Called when another peer wants to do a set operation with the |
179 | * local peer | 178 | * local peer. |
180 | * | 179 | * |
181 | * @param other_peer the other peer | 180 | * @param other_peer the other peer |
182 | * @param context_msg message with application specific information from | 181 | * @param context_msg message with application specific information from |
@@ -266,8 +265,6 @@ GNUNET_SET_destroy (struct GNUNET_SET_Handle *set); | |||
266 | * @param salt salt used for the set operation; sometimes set operations | 265 | * @param salt salt used for the set operation; sometimes set operations |
267 | * fail due to hash collisions, using a different salt for each operation | 266 | * fail due to hash collisions, using a different salt for each operation |
268 | * makes it harder for an attacker to exploit this | 267 | * makes it harder for an attacker to exploit this |
269 | * @param timeout result_cb will be called with GNUNET_SET_STATUS_TIMEOUT | ||
270 | * if the operation is not done after the specified time; @deprecated | ||
271 | * @param result_mode specified how results will be returned, | 268 | * @param result_mode specified how results will be returned, |
272 | * see 'GNUNET_SET_ResultMode'. | 269 | * see 'GNUNET_SET_ResultMode'. |
273 | * @param result_cb called on error or success | 270 | * @param result_cb called on error or success |
@@ -280,7 +277,6 @@ GNUNET_SET_evaluate (struct GNUNET_SET_Handle *set, | |||
280 | const struct GNUNET_HashCode *app_id, | 277 | const struct GNUNET_HashCode *app_id, |
281 | const struct GNUNET_MessageHeader *context_msg, | 278 | const struct GNUNET_MessageHeader *context_msg, |
282 | uint16_t salt, | 279 | uint16_t salt, |
283 | struct GNUNET_TIME_Relative timeout, | ||
284 | enum GNUNET_SET_ResultMode result_mode, | 280 | enum GNUNET_SET_ResultMode result_mode, |
285 | GNUNET_SET_ResultIterator result_cb, | 281 | GNUNET_SET_ResultIterator result_cb, |
286 | void *result_cls); | 282 | void *result_cls); |
@@ -322,7 +318,6 @@ GNUNET_SET_listen_cancel (struct GNUNET_SET_ListenHandle *lh); | |||
322 | * | 318 | * |
323 | * @param request request to accept | 319 | * @param request request to accept |
324 | * @param set set used for the requested operation | 320 | * @param set set used for the requested operation |
325 | * @param timeout timeout for the set operation, @deprecated | ||
326 | * @param result_mode specified how results will be returned, | 321 | * @param result_mode specified how results will be returned, |
327 | * see 'GNUNET_SET_ResultMode'. | 322 | * see 'GNUNET_SET_ResultMode'. |
328 | * @param result_cb callback for the results | 323 | * @param result_cb callback for the results |
@@ -332,7 +327,6 @@ GNUNET_SET_listen_cancel (struct GNUNET_SET_ListenHandle *lh); | |||
332 | struct GNUNET_SET_OperationHandle * | 327 | struct GNUNET_SET_OperationHandle * |
333 | GNUNET_SET_accept (struct GNUNET_SET_Request *request, | 328 | GNUNET_SET_accept (struct GNUNET_SET_Request *request, |
334 | struct GNUNET_SET_Handle *set, | 329 | struct GNUNET_SET_Handle *set, |
335 | struct GNUNET_TIME_Relative timeout, | ||
336 | enum GNUNET_SET_ResultMode result_mode, | 330 | enum GNUNET_SET_ResultMode result_mode, |
337 | GNUNET_SET_ResultIterator result_cb, | 331 | GNUNET_SET_ResultIterator result_cb, |
338 | void *cls); | 332 | void *cls); |
diff --git a/src/include/gnunet_stream_lib.h b/src/include/gnunet_stream_lib.h index 056695ba3..ece60c033 100644 --- a/src/include/gnunet_stream_lib.h +++ b/src/include/gnunet_stream_lib.h | |||
@@ -395,6 +395,21 @@ void | |||
395 | GNUNET_STREAM_read_cancel (struct GNUNET_STREAM_ReadHandle *rh); | 395 | GNUNET_STREAM_read_cancel (struct GNUNET_STREAM_ReadHandle *rh); |
396 | 396 | ||
397 | 397 | ||
398 | /** | ||
399 | * Create a message queue for a stream socket. | ||
400 | * | ||
401 | * @param socket the socket to read/write in the message queue | ||
402 | * @param msg_handlers message handler array | ||
403 | * @param error_handler callback for errors | ||
404 | * @return the message queue for the socket | ||
405 | */ | ||
406 | struct GNUNET_MQ_MessageQueue * | ||
407 | GNUNET_STREAM_mq_create (struct GNUNET_STREAM_Socket *socket, | ||
408 | const struct GNUNET_MQ_Handler *msg_handlers, | ||
409 | GNUNET_MQ_ErrorHandler error_handler, | ||
410 | void *cls); | ||
411 | |||
412 | |||
398 | #if 0 | 413 | #if 0 |
399 | { | 414 | { |
400 | #endif | 415 | #endif |
diff --git a/src/include/gnunet_util_lib.h b/src/include/gnunet_util_lib.h index 30ec7cd3f..439230560 100644 --- a/src/include/gnunet_util_lib.h +++ b/src/include/gnunet_util_lib.h | |||
@@ -47,6 +47,7 @@ extern "C" | |||
47 | #include "gnunet_disk_lib.h" | 47 | #include "gnunet_disk_lib.h" |
48 | #include "gnunet_getopt_lib.h" | 48 | #include "gnunet_getopt_lib.h" |
49 | #include "gnunet_helper_lib.h" | 49 | #include "gnunet_helper_lib.h" |
50 | #include "gnunet_mq_lib.h" | ||
50 | #include "gnunet_network_lib.h" | 51 | #include "gnunet_network_lib.h" |
51 | #include "gnunet_os_lib.h" | 52 | #include "gnunet_os_lib.h" |
52 | #include "gnunet_peer_lib.h" | 53 | #include "gnunet_peer_lib.h" |
diff --git a/src/set/Makefile.am b/src/set/Makefile.am index a609840b1..13278b05c 100644 --- a/src/set/Makefile.am +++ b/src/set/Makefile.am | |||
@@ -16,7 +16,7 @@ if USE_COVERAGE | |||
16 | endif | 16 | endif |
17 | 17 | ||
18 | bin_PROGRAMS = \ | 18 | bin_PROGRAMS = \ |
19 | gnunet-set gnunet-set-bug | 19 | gnunet-set |
20 | 20 | ||
21 | libexec_PROGRAMS = \ | 21 | libexec_PROGRAMS = \ |
22 | gnunet-service-set | 22 | gnunet-service-set |
@@ -35,17 +35,9 @@ gnunet_set_LDADD = \ | |||
35 | gnunet_set_DEPENDENCIES = \ | 35 | gnunet_set_DEPENDENCIES = \ |
36 | libgnunetset.la | 36 | libgnunetset.la |
37 | 37 | ||
38 | gnunet_set_bug_SOURCES = \ | ||
39 | gnunet-set-bug.c | ||
40 | gnunet_set_bug_LDADD = \ | ||
41 | $(top_builddir)/src/util/libgnunetutil.la \ | ||
42 | $(top_builddir)/src/stream/libgnunetstream.la \ | ||
43 | $(GN_LIBINTL) | ||
44 | |||
45 | gnunet_service_set_SOURCES = \ | 38 | gnunet_service_set_SOURCES = \ |
46 | gnunet-service-set.c \ | 39 | gnunet-service-set.c \ |
47 | gnunet-service-set_union.c \ | 40 | gnunet-service-set_union.c \ |
48 | mq.c \ | ||
49 | ibf.c \ | 41 | ibf.c \ |
50 | strata_estimator.c | 42 | strata_estimator.c |
51 | gnunet_service_set_LDADD = \ | 43 | gnunet_service_set_LDADD = \ |
@@ -54,13 +46,9 @@ gnunet_service_set_LDADD = \ | |||
54 | $(top_builddir)/src/stream/libgnunetstream.la \ | 46 | $(top_builddir)/src/stream/libgnunetstream.la \ |
55 | $(top_builddir)/src/mesh/libgnunetmesh.la \ | 47 | $(top_builddir)/src/mesh/libgnunetmesh.la \ |
56 | $(GN_LIBINTL) | 48 | $(GN_LIBINTL) |
57 | # hack for mq.c, see automake Objects ‘created with both libtool and without’ | ||
58 | # remove once GNUNET_MQ is in util/ | ||
59 | gnunet_service_set_CFLAGS = $(AM_CFLAGS) | ||
60 | 49 | ||
61 | libgnunetset_la_SOURCES = \ | 50 | libgnunetset_la_SOURCES = \ |
62 | set_api.c \ | 51 | set_api.c |
63 | mq.c | ||
64 | libgnunetset_la_LIBADD = \ | 52 | libgnunetset_la_LIBADD = \ |
65 | $(top_builddir)/src/util/libgnunetutil.la \ | 53 | $(top_builddir)/src/util/libgnunetutil.la \ |
66 | $(top_builddir)/src/stream/libgnunetstream.la \ | 54 | $(top_builddir)/src/stream/libgnunetstream.la \ |
@@ -84,24 +72,6 @@ test_set_api_LDADD = \ | |||
84 | test_set_api_DEPENDENCIES = \ | 72 | test_set_api_DEPENDENCIES = \ |
85 | libgnunetset.la | 73 | libgnunetset.la |
86 | 74 | ||
87 | |||
88 | test_mq_SOURCES = \ | ||
89 | test_mq.c \ | ||
90 | mq.c | ||
91 | test_mq_LDADD = \ | ||
92 | $(top_builddir)/src/util/libgnunetutil.la \ | ||
93 | $(top_builddir)/src/stream/libgnunetstream.la | ||
94 | test_mq_CFLAGS = $(AM_CFLAGS) | ||
95 | |||
96 | |||
97 | test_mq_client_SOURCES = \ | ||
98 | test_mq_client.c \ | ||
99 | mq.c | ||
100 | test_mq_client_LDADD = \ | ||
101 | $(top_builddir)/src/util/libgnunetutil.la \ | ||
102 | $(top_builddir)/src/stream/libgnunetstream.la | ||
103 | test_mq_client_CFLAGS = $(AM_CFLAGS) | ||
104 | |||
105 | EXTRA_DIST = \ | 75 | EXTRA_DIST = \ |
106 | test_set.conf | 76 | test_set.conf |
107 | 77 | ||
diff --git a/src/set/gnunet-service-set.c b/src/set/gnunet-service-set.c index 9ac0fbee6..2aea50365 100644 --- a/src/set/gnunet-service-set.c +++ b/src/set/gnunet-service-set.c | |||
@@ -632,7 +632,7 @@ stream_listen_cb (void *cls, | |||
632 | incoming = GNUNET_new (struct Incoming); | 632 | incoming = GNUNET_new (struct Incoming); |
633 | incoming->peer = *initiator; | 633 | incoming->peer = *initiator; |
634 | incoming->socket = socket; | 634 | incoming->socket = socket; |
635 | incoming->mq = GNUNET_MQ_queue_for_stream_socket (incoming->socket, handlers, incoming); | 635 | incoming->mq = GNUNET_STREAM_mq_create (incoming->socket, handlers, NULL, incoming); |
636 | /* FIXME: timeout for peers that only connect but don't send anything */ | 636 | /* FIXME: timeout for peers that only connect but don't send anything */ |
637 | GNUNET_CONTAINER_DLL_insert_tail (incoming_head, incoming_tail, incoming); | 637 | GNUNET_CONTAINER_DLL_insert_tail (incoming_head, incoming_tail, incoming); |
638 | return GNUNET_OK; | 638 | return GNUNET_OK; |
diff --git a/src/set/gnunet-service-set.h b/src/set/gnunet-service-set.h index cc28e9701..bea77416e 100644 --- a/src/set/gnunet-service-set.h +++ b/src/set/gnunet-service-set.h | |||
@@ -36,7 +36,6 @@ | |||
36 | #include "gnunet_stream_lib.h" | 36 | #include "gnunet_stream_lib.h" |
37 | #include "gnunet_set_service.h" | 37 | #include "gnunet_set_service.h" |
38 | #include "set.h" | 38 | #include "set.h" |
39 | #include "mq.h" | ||
40 | 39 | ||
41 | 40 | ||
42 | /* FIXME: cfuchs */ | 41 | /* FIXME: cfuchs */ |
diff --git a/src/set/gnunet-service-set_union.c b/src/set/gnunet-service-set_union.c index 05b125047..ae7f47266 100644 --- a/src/set/gnunet-service-set_union.c +++ b/src/set/gnunet-service-set_union.c | |||
@@ -1053,8 +1053,8 @@ handle_p2p_elements (void *cls, const struct GNUNET_MessageHeader *mh) | |||
1053 | } | 1053 | } |
1054 | element_size = ntohs (mh->size) - sizeof (struct GNUNET_MessageHeader); | 1054 | element_size = ntohs (mh->size) - sizeof (struct GNUNET_MessageHeader); |
1055 | ee = GNUNET_malloc (sizeof *eo + element_size); | 1055 | ee = GNUNET_malloc (sizeof *eo + element_size); |
1056 | memcpy (&ee[1], &mh[1], element_size); | ||
1056 | ee->element.data = &ee[1]; | 1057 | ee->element.data = &ee[1]; |
1057 | memcpy (ee->element.data, &mh[1], element_size); | ||
1058 | ee->remote = GNUNET_YES; | 1058 | ee->remote = GNUNET_YES; |
1059 | 1059 | ||
1060 | insert_element (eo, ee); | 1060 | insert_element (eo, ee); |
@@ -1183,8 +1183,8 @@ stream_open_cb (void *cls, | |||
1183 | 1183 | ||
1184 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "open cb successful\n"); | 1184 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "open cb successful\n"); |
1185 | 1185 | ||
1186 | eo->mq = GNUNET_MQ_queue_for_stream_socket (eo->socket, | 1186 | |
1187 | union_handlers, eo); | 1187 | eo->mq = GNUNET_STREAM_mq_create (eo->socket, union_handlers, NULL, eo); |
1188 | /* we started the operation, thus we have to send the operation request */ | 1188 | /* we started the operation, thus we have to send the operation request */ |
1189 | send_operation_request (eo); | 1189 | send_operation_request (eo); |
1190 | eo->phase = PHASE_EXPECT_SE; | 1190 | eo->phase = PHASE_EXPECT_SE; |
@@ -1312,9 +1312,9 @@ _GSS_union_add (struct ElementMessage *m, struct Set *set) | |||
1312 | element_size = ntohs (m->header.size) - sizeof *m; | 1312 | element_size = ntohs (m->header.size) - sizeof *m; |
1313 | ee = GNUNET_malloc (element_size + sizeof *ee); | 1313 | ee = GNUNET_malloc (element_size + sizeof *ee); |
1314 | ee->element.size = element_size; | 1314 | ee->element.size = element_size; |
1315 | memcpy (&ee[1], &m[1], element_size); | ||
1315 | ee->element.data = &ee[1]; | 1316 | ee->element.data = &ee[1]; |
1316 | ee->generation_added = set->state.u->current_generation; | 1317 | ee->generation_added = set->state.u->current_generation; |
1317 | memcpy (ee->element.data, &m[1], element_size); | ||
1318 | GNUNET_CRYPTO_hash (ee->element.data, element_size, &ee->element_hash); | 1318 | GNUNET_CRYPTO_hash (ee->element.data, element_size, &ee->element_hash); |
1319 | ee_dup = GNUNET_CONTAINER_multihashmap_get (set->state.u->elements, &ee->element_hash); | 1319 | ee_dup = GNUNET_CONTAINER_multihashmap_get (set->state.u->elements, &ee->element_hash); |
1320 | if (NULL != ee_dup) | 1320 | if (NULL != ee_dup) |
diff --git a/src/set/gnunet-set-bug.c b/src/set/gnunet-set-bug.c deleted file mode 100644 index 112def7d7..000000000 --- a/src/set/gnunet-set-bug.c +++ /dev/null | |||
@@ -1,142 +0,0 @@ | |||
1 | /* | ||
2 | This file is part of GNUnet | ||
3 | (C) 2012 Christian Grothoff (and other contributing authors) | ||
4 | |||
5 | GNUnet is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 2, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | GNUnet is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with GNUnet; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 59 Temple Place - Suite 330, | ||
18 | Boston, MA 02111-1307, USA. | ||
19 | */ | ||
20 | |||
21 | /** | ||
22 | * @file set/gnunet-set.c | ||
23 | * @brief profiling tool for the set service | ||
24 | * @author Florian Dold | ||
25 | */ | ||
26 | #include "platform.h" | ||
27 | #include "gnunet_common.h" | ||
28 | #include "gnunet_applications.h" | ||
29 | #include "gnunet_util_lib.h" | ||
30 | #include "gnunet_stream_lib.h" | ||
31 | |||
32 | |||
33 | static struct GNUNET_PeerIdentity local_id; | ||
34 | |||
35 | static struct GNUNET_CONFIGURATION_Handle *cfg; | ||
36 | |||
37 | static struct GNUNET_STREAM_ListenSocket *listen_socket; | ||
38 | |||
39 | static struct GNUNET_STREAM_Socket *s1; | ||
40 | |||
41 | static struct GNUNET_STREAM_Socket *s2; | ||
42 | |||
43 | static void | ||
44 | do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | ||
45 | { | ||
46 | if (NULL != s2) | ||
47 | GNUNET_STREAM_close (s2); | ||
48 | GNUNET_STREAM_close (s1); | ||
49 | GNUNET_STREAM_listen_close (listen_socket); | ||
50 | GNUNET_CONFIGURATION_destroy (cfg); | ||
51 | } | ||
52 | |||
53 | static size_t | ||
54 | stream_data_processor (void *cls, | ||
55 | enum GNUNET_STREAM_Status status, | ||
56 | const void *data, | ||
57 | size_t size) | ||
58 | { | ||
59 | return size; | ||
60 | } | ||
61 | |||
62 | static int | ||
63 | listen_cb (void *cls, | ||
64 | struct GNUNET_STREAM_Socket *socket, | ||
65 | const struct | ||
66 | GNUNET_PeerIdentity *initiator) | ||
67 | { | ||
68 | if (NULL == (s2 = socket)) | ||
69 | { | ||
70 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "socket listen failed\n"); | ||
71 | return GNUNET_NO; | ||
72 | } | ||
73 | |||
74 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "socket listen succesful\n"); | ||
75 | GNUNET_assert (NULL != socket); | ||
76 | GNUNET_assert (0 == memcmp (initiator, &local_id, sizeof (*initiator))); | ||
77 | GNUNET_STREAM_read (socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
78 | &stream_data_processor, NULL); | ||
79 | return GNUNET_YES; | ||
80 | } | ||
81 | |||
82 | static void | ||
83 | open_cb (void *cls, struct GNUNET_STREAM_Socket *socket) | ||
84 | { | ||
85 | |||
86 | } | ||
87 | |||
88 | static void | ||
89 | stream_connect (void) | ||
90 | { | ||
91 | s1 = GNUNET_STREAM_open (cfg, | ||
92 | &local_id, | ||
93 | GNUNET_APPLICATION_TYPE_SET, | ||
94 | &open_cb, | ||
95 | NULL, | ||
96 | GNUNET_STREAM_OPTION_END); | ||
97 | } | ||
98 | |||
99 | /** | ||
100 | * Main function that will be run. | ||
101 | * | ||
102 | * @param cls closure | ||
103 | * @param args remaining command-line arguments | ||
104 | * @param cfgfile name of the configuration file used (for saving, can be NULL!) | ||
105 | * @param cfg configuration | ||
106 | */ | ||
107 | static void | ||
108 | run (void *cls, char *const *args, | ||
109 | const char *cfgfile, | ||
110 | const struct GNUNET_CONFIGURATION_Handle *cfg2) | ||
111 | { | ||
112 | |||
113 | cfg = GNUNET_CONFIGURATION_dup (cfg2); | ||
114 | GNUNET_CRYPTO_get_host_identity (cfg, &local_id); | ||
115 | |||
116 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "I am Peer %s\n", GNUNET_h2s (&local_id.hashPubKey)); | ||
117 | |||
118 | listen_socket = GNUNET_STREAM_listen (cfg, | ||
119 | GNUNET_APPLICATION_TYPE_SET, | ||
120 | &listen_cb, | ||
121 | NULL, | ||
122 | GNUNET_STREAM_OPTION_SIGNAL_LISTEN_SUCCESS, | ||
123 | &stream_connect, | ||
124 | GNUNET_STREAM_OPTION_END); | ||
125 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, | ||
126 | &do_shutdown, NULL); | ||
127 | } | ||
128 | |||
129 | |||
130 | |||
131 | int | ||
132 | main (int argc, char **argv) | ||
133 | { | ||
134 | static const struct GNUNET_GETOPT_CommandLineOption options[] = { | ||
135 | GNUNET_GETOPT_OPTION_END | ||
136 | }; | ||
137 | GNUNET_PROGRAM_run (argc, argv, "gnunet-set", | ||
138 | "help", | ||
139 | options, &run, NULL); | ||
140 | return 0; | ||
141 | } | ||
142 | |||
diff --git a/src/consensus/gnunet-consensus-ibf.c b/src/set/gnunet-set-ibf.c index d431795f1..d431795f1 100644 --- a/src/consensus/gnunet-consensus-ibf.c +++ b/src/set/gnunet-set-ibf.c | |||
diff --git a/src/set/gnunet-set.c b/src/set/gnunet-set.c index d665fce11..5f2d1c976 100644 --- a/src/set/gnunet-set.c +++ b/src/set/gnunet-set.c | |||
@@ -42,8 +42,8 @@ int num_done; | |||
42 | 42 | ||
43 | 43 | ||
44 | static void | 44 | static void |
45 | result_cb_set1 (void *cls, struct GNUNET_SET_Element *element, | 45 | result_cb_set1 (void *cls, const struct GNUNET_SET_Element *element, |
46 | enum GNUNET_SET_Status status) | 46 | enum GNUNET_SET_Status status) |
47 | { | 47 | { |
48 | switch (status) | 48 | switch (status) |
49 | { | 49 | { |
@@ -64,7 +64,7 @@ result_cb_set1 (void *cls, struct GNUNET_SET_Element *element, | |||
64 | 64 | ||
65 | 65 | ||
66 | static void | 66 | static void |
67 | result_cb_set2 (void *cls, struct GNUNET_SET_Element *element, | 67 | result_cb_set2 (void *cls, const struct GNUNET_SET_Element *element, |
68 | enum GNUNET_SET_Status status) | 68 | enum GNUNET_SET_Status status) |
69 | { | 69 | { |
70 | switch (status) | 70 | switch (status) |
@@ -94,7 +94,7 @@ listen_cb (void *cls, | |||
94 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "listen cb called\n"); | 94 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "listen cb called\n"); |
95 | GNUNET_SET_listen_cancel (listen_handle); | 95 | GNUNET_SET_listen_cancel (listen_handle); |
96 | 96 | ||
97 | GNUNET_SET_accept (request, set2, GNUNET_TIME_UNIT_FOREVER_REL, | 97 | GNUNET_SET_accept (request, set2, |
98 | GNUNET_SET_RESULT_ADDED, result_cb_set2, NULL); | 98 | GNUNET_SET_RESULT_ADDED, result_cb_set2, NULL); |
99 | } | 99 | } |
100 | 100 | ||
@@ -110,7 +110,7 @@ start (void *cls) | |||
110 | listen_handle = GNUNET_SET_listen (config, GNUNET_SET_OPERATION_UNION, | 110 | listen_handle = GNUNET_SET_listen (config, GNUNET_SET_OPERATION_UNION, |
111 | &app_id, listen_cb, NULL); | 111 | &app_id, listen_cb, NULL); |
112 | GNUNET_SET_evaluate (set1, &local_id, &app_id, NULL, 42, | 112 | GNUNET_SET_evaluate (set1, &local_id, &app_id, NULL, 42, |
113 | GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_SET_RESULT_ADDED, | 113 | GNUNET_SET_RESULT_ADDED, |
114 | result_cb_set1, NULL); | 114 | result_cb_set1, NULL); |
115 | } | 115 | } |
116 | 116 | ||
diff --git a/src/set/set_api.c b/src/set/set_api.c index 775e390de..5838680b9 100644 --- a/src/set/set_api.c +++ b/src/set/set_api.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | (C) 2012 Christian Grothoff (and other contributing authors) | 3 | (C) 2012, 2013 Christian Grothoff (and other contributing authors) |
4 | 4 | ||
5 | GNUnet is free software; you can redistribute it and/or modify | 5 | GNUnet is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published | 6 | it under the terms of the GNU General Public License as published |
@@ -29,8 +29,6 @@ | |||
29 | #include "gnunet_client_lib.h" | 29 | #include "gnunet_client_lib.h" |
30 | #include "gnunet_set_service.h" | 30 | #include "gnunet_set_service.h" |
31 | #include "set.h" | 31 | #include "set.h" |
32 | #include "mq.h" | ||
33 | #include <inttypes.h> | ||
34 | 32 | ||
35 | 33 | ||
36 | #define LOG(kind,...) GNUNET_log_from (kind, "set-api",__VA_ARGS__) | 34 | #define LOG(kind,...) GNUNET_log_from (kind, "set-api",__VA_ARGS__) |
@@ -61,7 +59,6 @@ struct GNUNET_SET_OperationHandle | |||
61 | void *result_cls; | 59 | void *result_cls; |
62 | struct GNUNET_SET_Handle *set; | 60 | struct GNUNET_SET_Handle *set; |
63 | uint32_t request_id; | 61 | uint32_t request_id; |
64 | GNUNET_SCHEDULER_TaskIdentifier timeout_task; | ||
65 | }; | 62 | }; |
66 | 63 | ||
67 | 64 | ||
@@ -104,11 +101,6 @@ handle_result (void *cls, const struct GNUNET_MessageHeader *mh) | |||
104 | * and this is the last result message we get */ | 101 | * and this is the last result message we get */ |
105 | if (htons (msg->result_status) != GNUNET_SET_STATUS_OK) | 102 | if (htons (msg->result_status) != GNUNET_SET_STATUS_OK) |
106 | { | 103 | { |
107 | if (GNUNET_SCHEDULER_NO_TASK != oh->timeout_task) | ||
108 | { | ||
109 | GNUNET_SCHEDULER_cancel (oh->timeout_task); | ||
110 | oh->timeout_task = GNUNET_SCHEDULER_NO_TASK; | ||
111 | } | ||
112 | GNUNET_MQ_assoc_remove (set->mq, ntohl (msg->request_id)); | 104 | GNUNET_MQ_assoc_remove (set->mq, ntohl (msg->request_id)); |
113 | if (NULL != oh->result_cb) | 105 | if (NULL != oh->result_cb) |
114 | oh->result_cb (oh->result_cls, NULL, htons (msg->result_status)); | 106 | oh->result_cb (oh->result_cls, NULL, htons (msg->result_status)); |
@@ -264,26 +256,6 @@ GNUNET_SET_destroy (struct GNUNET_SET_Handle *set) | |||
264 | 256 | ||
265 | 257 | ||
266 | /** | 258 | /** |
267 | * Signature of the main function of a task. | ||
268 | * | ||
269 | * @param cls closure | ||
270 | * @param tc context information (why was this task triggered now) | ||
271 | */ | ||
272 | static void | ||
273 | operation_timeout_task (void *cls, | ||
274 | const struct GNUNET_SCHEDULER_TaskContext * tc) | ||
275 | { | ||
276 | struct GNUNET_SET_OperationHandle *oh = cls; | ||
277 | oh->timeout_task = GNUNET_SCHEDULER_NO_TASK; | ||
278 | if (NULL != oh->result_cb) | ||
279 | oh->result_cb (oh->result_cls, NULL, GNUNET_SET_STATUS_TIMEOUT); | ||
280 | oh->result_cb = NULL; | ||
281 | oh->result_cls = NULL; | ||
282 | GNUNET_SET_operation_cancel (oh); | ||
283 | } | ||
284 | |||
285 | |||
286 | /** | ||
287 | * Evaluate a set operation with our set and the set of another peer. | 259 | * Evaluate a set operation with our set and the set of another peer. |
288 | * | 260 | * |
289 | * @param set set to use | 261 | * @param set set to use |
@@ -294,8 +266,6 @@ operation_timeout_task (void *cls, | |||
294 | * @param salt salt used for the set operation; sometimes set operations | 266 | * @param salt salt used for the set operation; sometimes set operations |
295 | * fail due to hash collisions, using a different salt for each operation | 267 | * fail due to hash collisions, using a different salt for each operation |
296 | * makes it harder for an attacker to exploit this | 268 | * makes it harder for an attacker to exploit this |
297 | * @param timeout result_cb will be called with GNUNET_SET_STATUS_TIMEOUT | ||
298 | * if the operation is not done after the specified time | ||
299 | * @param result_mode specified how results will be returned, | 269 | * @param result_mode specified how results will be returned, |
300 | * see 'GNUNET_SET_ResultMode'. | 270 | * see 'GNUNET_SET_ResultMode'. |
301 | * @param result_cb called on error or success | 271 | * @param result_cb called on error or success |
@@ -308,7 +278,6 @@ GNUNET_SET_evaluate (struct GNUNET_SET_Handle *set, | |||
308 | const struct GNUNET_HashCode *app_id, | 278 | const struct GNUNET_HashCode *app_id, |
309 | const struct GNUNET_MessageHeader *context_msg, | 279 | const struct GNUNET_MessageHeader *context_msg, |
310 | uint16_t salt, | 280 | uint16_t salt, |
311 | struct GNUNET_TIME_Relative timeout, | ||
312 | enum GNUNET_SET_ResultMode result_mode, | 281 | enum GNUNET_SET_ResultMode result_mode, |
313 | GNUNET_SET_ResultIterator result_cb, | 282 | GNUNET_SET_ResultIterator result_cb, |
314 | void *result_cls) | 283 | void *result_cls) |
@@ -331,7 +300,6 @@ GNUNET_SET_evaluate (struct GNUNET_SET_Handle *set, | |||
331 | if (GNUNET_OK != GNUNET_MQ_nest (mqm, context_msg, ntohs (context_msg->size))) | 300 | if (GNUNET_OK != GNUNET_MQ_nest (mqm, context_msg, ntohs (context_msg->size))) |
332 | GNUNET_assert (0); | 301 | GNUNET_assert (0); |
333 | 302 | ||
334 | oh->timeout_task = GNUNET_SCHEDULER_add_delayed (timeout, operation_timeout_task, oh); | ||
335 | GNUNET_MQ_send (set->mq, mqm); | 303 | GNUNET_MQ_send (set->mq, mqm); |
336 | 304 | ||
337 | return oh; | 305 | return oh; |
@@ -399,7 +367,6 @@ GNUNET_SET_listen_cancel (struct GNUNET_SET_ListenHandle *lh) | |||
399 | * | 367 | * |
400 | * @param request request to accept | 368 | * @param request request to accept |
401 | * @param set set used for the requested operation | 369 | * @param set set used for the requested operation |
402 | * @param timeout timeout for the set operation | ||
403 | * @param result_mode specified how results will be returned, | 370 | * @param result_mode specified how results will be returned, |
404 | * see 'GNUNET_SET_ResultMode'. | 371 | * see 'GNUNET_SET_ResultMode'. |
405 | * @param result_cb callback for the results | 372 | * @param result_cb callback for the results |
@@ -409,7 +376,6 @@ GNUNET_SET_listen_cancel (struct GNUNET_SET_ListenHandle *lh) | |||
409 | struct GNUNET_SET_OperationHandle * | 376 | struct GNUNET_SET_OperationHandle * |
410 | GNUNET_SET_accept (struct GNUNET_SET_Request *request, | 377 | GNUNET_SET_accept (struct GNUNET_SET_Request *request, |
411 | struct GNUNET_SET_Handle *set, | 378 | struct GNUNET_SET_Handle *set, |
412 | struct GNUNET_TIME_Relative timeout, | ||
413 | enum GNUNET_SET_ResultMode result_mode, | 379 | enum GNUNET_SET_ResultMode result_mode, |
414 | GNUNET_SET_ResultIterator result_cb, | 380 | GNUNET_SET_ResultIterator result_cb, |
415 | void *result_cls) | 381 | void *result_cls) |
@@ -432,8 +398,6 @@ GNUNET_SET_accept (struct GNUNET_SET_Request *request, | |||
432 | msg->accept_id = htonl (request->accept_id); | 398 | msg->accept_id = htonl (request->accept_id); |
433 | GNUNET_MQ_send (set->mq, mqm); | 399 | GNUNET_MQ_send (set->mq, mqm); |
434 | 400 | ||
435 | oh->timeout_task = GNUNET_SCHEDULER_add_delayed (timeout, operation_timeout_task, oh); | ||
436 | |||
437 | return oh; | 401 | return oh; |
438 | } | 402 | } |
439 | 403 | ||
diff --git a/src/set/test_set_api.c b/src/set/test_set_api.c index 0ab02cad7..66e7a81d1 100644 --- a/src/set/test_set_api.c +++ b/src/set/test_set_api.c | |||
@@ -29,26 +29,57 @@ | |||
29 | 29 | ||
30 | 30 | ||
31 | static struct GNUNET_PeerIdentity local_id; | 31 | static struct GNUNET_PeerIdentity local_id; |
32 | |||
32 | static struct GNUNET_HashCode app_id; | 33 | static struct GNUNET_HashCode app_id; |
33 | static struct GNUNET_SET_Handle *set1; | 34 | static struct GNUNET_SET_Handle *set1; |
34 | static struct GNUNET_SET_Handle *set2; | 35 | static struct GNUNET_SET_Handle *set2; |
35 | static struct GNUNET_SET_ListenHandle *listen_handle; | 36 | static struct GNUNET_SET_ListenHandle *listen_handle; |
36 | const static struct GNUNET_CONFIGURATION_Handle *config; | 37 | const static struct GNUNET_CONFIGURATION_Handle *config; |
37 | 38 | ||
39 | int num_done; | ||
40 | |||
38 | 41 | ||
39 | static void | 42 | static void |
40 | result_cb_set1 (void *cls, struct GNUNET_SET_Element *element, | 43 | result_cb_set1 (void *cls, const struct GNUNET_SET_Element *element, |
41 | enum GNUNET_SET_Status status) | 44 | enum GNUNET_SET_Status status) |
42 | { | 45 | { |
43 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got result (set 1)\n"); | 46 | switch (status) |
47 | { | ||
48 | case GNUNET_SET_STATUS_OK: | ||
49 | printf ("set 1: got element\n"); | ||
50 | break; | ||
51 | case GNUNET_SET_STATUS_FAILURE: | ||
52 | printf ("set 1: failure\n"); | ||
53 | break; | ||
54 | case GNUNET_SET_STATUS_DONE: | ||
55 | printf ("set 1: done\n"); | ||
56 | GNUNET_SET_destroy (set1); | ||
57 | break; | ||
58 | default: | ||
59 | GNUNET_assert (0); | ||
60 | } | ||
44 | } | 61 | } |
45 | 62 | ||
46 | 63 | ||
47 | static void | 64 | static void |
48 | result_cb_set2 (void *cls, struct GNUNET_SET_Element *element, | 65 | result_cb_set2 (void *cls, const struct GNUNET_SET_Element *element, |
49 | enum GNUNET_SET_Status status) | 66 | enum GNUNET_SET_Status status) |
50 | { | 67 | { |
51 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "got result (set 2)\n"); | 68 | switch (status) |
69 | { | ||
70 | case GNUNET_SET_STATUS_OK: | ||
71 | printf ("set 2: got element\n"); | ||
72 | break; | ||
73 | case GNUNET_SET_STATUS_FAILURE: | ||
74 | printf ("set 2: failure\n"); | ||
75 | break; | ||
76 | case GNUNET_SET_STATUS_DONE: | ||
77 | printf ("set 2: done\n"); | ||
78 | GNUNET_SET_destroy (set2); | ||
79 | break; | ||
80 | default: | ||
81 | GNUNET_assert (0); | ||
82 | } | ||
52 | } | 83 | } |
53 | 84 | ||
54 | 85 | ||
@@ -59,7 +90,9 @@ listen_cb (void *cls, | |||
59 | struct GNUNET_SET_Request *request) | 90 | struct GNUNET_SET_Request *request) |
60 | { | 91 | { |
61 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "listen cb called\n"); | 92 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "listen cb called\n"); |
62 | GNUNET_SET_accept (request, set2, GNUNET_TIME_UNIT_FOREVER_REL, | 93 | GNUNET_SET_listen_cancel (listen_handle); |
94 | |||
95 | GNUNET_SET_accept (request, set2, | ||
63 | GNUNET_SET_RESULT_ADDED, result_cb_set2, NULL); | 96 | GNUNET_SET_RESULT_ADDED, result_cb_set2, NULL); |
64 | } | 97 | } |
65 | 98 | ||
@@ -75,7 +108,7 @@ start (void *cls) | |||
75 | listen_handle = GNUNET_SET_listen (config, GNUNET_SET_OPERATION_UNION, | 108 | listen_handle = GNUNET_SET_listen (config, GNUNET_SET_OPERATION_UNION, |
76 | &app_id, listen_cb, NULL); | 109 | &app_id, listen_cb, NULL); |
77 | GNUNET_SET_evaluate (set1, &local_id, &app_id, NULL, 42, | 110 | GNUNET_SET_evaluate (set1, &local_id, &app_id, NULL, 42, |
78 | GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_SET_RESULT_ADDED, | 111 | GNUNET_SET_RESULT_ADDED, |
79 | result_cb_set1, NULL); | 112 | result_cb_set1, NULL); |
80 | } | 113 | } |
81 | 114 | ||
@@ -120,7 +153,6 @@ init_set1 (void) | |||
120 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized set 1\n"); | 153 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "initialized set 1\n"); |
121 | } | 154 | } |
122 | 155 | ||
123 | |||
124 | /** | 156 | /** |
125 | * Signature of the 'main' function for a (single-peer) testcase that | 157 | * Signature of the 'main' function for a (single-peer) testcase that |
126 | * is run using 'GNUNET_TESTING_peer_run'. | 158 | * is run using 'GNUNET_TESTING_peer_run'. |
diff --git a/src/stream/stream_api.c b/src/stream/stream_api.c index 8994afc24..b4a47b53d 100644 --- a/src/stream/stream_api.c +++ b/src/stream/stream_api.c | |||
@@ -579,6 +579,37 @@ struct GNUNET_STREAM_ShutdownHandle | |||
579 | 579 | ||
580 | 580 | ||
581 | /** | 581 | /** |
582 | * Collection of the state necessary to read and write gnunet messages | ||
583 | * to a stream socket. Should be used as closure for stream_data_processor. | ||
584 | */ | ||
585 | struct MQStreamState | ||
586 | { | ||
587 | /** | ||
588 | * Message stream tokenizer for the data received from the | ||
589 | * stream socket. | ||
590 | */ | ||
591 | struct GNUNET_SERVER_MessageStreamTokenizer *mst; | ||
592 | |||
593 | /** | ||
594 | * The stream socket to use for receiving and transmitting | ||
595 | * messages with the message queue. | ||
596 | */ | ||
597 | struct GNUNET_STREAM_Socket *socket; | ||
598 | |||
599 | /** | ||
600 | * Current read handle, NULL if no read active. | ||
601 | */ | ||
602 | struct GNUNET_STREAM_ReadHandle *rh; | ||
603 | |||
604 | /** | ||
605 | * Current write handle, NULL if no write active. | ||
606 | */ | ||
607 | struct GNUNET_STREAM_WriteHandle *wh; | ||
608 | }; | ||
609 | |||
610 | |||
611 | |||
612 | /** | ||
582 | * Default value in seconds for various timeouts | 613 | * Default value in seconds for various timeouts |
583 | */ | 614 | */ |
584 | static const unsigned int default_timeout = 10; | 615 | static const unsigned int default_timeout = 10; |
@@ -3731,4 +3762,186 @@ GNUNET_STREAM_read_cancel (struct GNUNET_STREAM_ReadHandle *rh) | |||
3731 | cleanup_read_handle (socket); | 3762 | cleanup_read_handle (socket); |
3732 | } | 3763 | } |
3733 | 3764 | ||
3765 | |||
3766 | /** | ||
3767 | * Functions of this signature are called whenever writing operations | ||
3768 | * on a stream are executed | ||
3769 | * | ||
3770 | * @param cls the closure from GNUNET_STREAM_write | ||
3771 | * @param status the status of the stream at the time this function is called; | ||
3772 | * GNUNET_STREAM_OK if writing to stream was completed successfully; | ||
3773 | * GNUNET_STREAM_TIMEOUT if the given data is not sent successfully | ||
3774 | * (this doesn't mean that the data is never sent, the receiver may | ||
3775 | * have read the data but its ACKs may have been lost); | ||
3776 | * GNUNET_STREAM_SHUTDOWN if the stream is shutdown for writing in the | ||
3777 | * mean time; GNUNET_STREAM_SYSERR if the stream is broken and cannot | ||
3778 | * be processed. | ||
3779 | * @param size the number of bytes written | ||
3780 | */ | ||
3781 | static void | ||
3782 | mq_stream_write_queued (void *cls, enum GNUNET_STREAM_Status status, size_t size) | ||
3783 | { | ||
3784 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
3785 | struct MQStreamState *mss = (struct MQStreamState *) mq->impl_state; | ||
3786 | struct GNUNET_MQ_Message *mqm; | ||
3787 | |||
3788 | GNUNET_assert (GNUNET_STREAM_OK == status); | ||
3789 | |||
3790 | /* call cb for message we finished sending */ | ||
3791 | mqm = mq->current_msg; | ||
3792 | GNUNET_assert (NULL != mq->current_msg); | ||
3793 | if (NULL != mqm->sent_cb) | ||
3794 | mqm->sent_cb (mqm->sent_cls); | ||
3795 | GNUNET_free (mqm); | ||
3796 | |||
3797 | mss->wh = NULL; | ||
3798 | |||
3799 | mqm = mq->msg_head; | ||
3800 | mq->current_msg = mqm; | ||
3801 | if (NULL == mqm) | ||
3802 | return; | ||
3803 | GNUNET_CONTAINER_DLL_remove (mq->msg_head, mq->msg_tail, mqm); | ||
3804 | mss->wh = GNUNET_STREAM_write (mss->socket, mqm->mh, ntohs (mqm->mh->size), | ||
3805 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
3806 | mq_stream_write_queued, mq); | ||
3807 | GNUNET_assert (NULL != mss->wh); | ||
3808 | } | ||
3809 | |||
3810 | |||
3811 | static void | ||
3812 | mq_stream_send_impl (struct GNUNET_MQ_MessageQueue *mq, | ||
3813 | struct GNUNET_MQ_Message *mqm) | ||
3814 | { | ||
3815 | struct MQStreamState *mss = (struct MQStreamState *) mq->impl_state; | ||
3816 | |||
3817 | if (NULL != mq->current_msg) | ||
3818 | { | ||
3819 | GNUNET_CONTAINER_DLL_insert_tail (mq->msg_head, mq->msg_tail, mqm); | ||
3820 | return; | ||
3821 | } | ||
3822 | mq->current_msg = mqm; | ||
3823 | mss->wh = GNUNET_STREAM_write (mss->socket, mqm->mh, ntohs (mqm->mh->size), | ||
3824 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
3825 | mq_stream_write_queued, mq); | ||
3826 | } | ||
3827 | |||
3828 | |||
3829 | /** | ||
3830 | * Functions with this signature are called whenever a | ||
3831 | * complete message is received by the tokenizer. | ||
3832 | * | ||
3833 | * Do not call GNUNET_SERVER_mst_destroy in callback | ||
3834 | * | ||
3835 | * @param cls closure | ||
3836 | * @param client identification of the client | ||
3837 | * @param message the actual message | ||
3838 | * | ||
3839 | * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing | ||
3840 | */ | ||
3841 | static int | ||
3842 | mq_stream_mst_callback (void *cls, void *client, | ||
3843 | const struct GNUNET_MessageHeader *message) | ||
3844 | { | ||
3845 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
3846 | |||
3847 | GNUNET_assert (NULL != message); | ||
3848 | GNUNET_MQ_dispatch (mq, message); | ||
3849 | return GNUNET_OK; | ||
3850 | } | ||
3851 | |||
3852 | |||
3853 | /** | ||
3854 | * Functions of this signature are called whenever data is available from the | ||
3855 | * stream. | ||
3856 | * | ||
3857 | * @param cls the closure from GNUNET_STREAM_read | ||
3858 | * @param status the status of the stream at the time this function is called | ||
3859 | * @param data traffic from the other side | ||
3860 | * @param size the number of bytes available in data read; will be 0 on timeout | ||
3861 | * @return number of bytes of processed from 'data' (any data remaining should be | ||
3862 | * given to the next time the read processor is called). | ||
3863 | */ | ||
3864 | static size_t | ||
3865 | mq_stream_data_processor (void *cls, | ||
3866 | enum GNUNET_STREAM_Status status, | ||
3867 | const void *data, | ||
3868 | size_t size) | ||
3869 | { | ||
3870 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
3871 | struct MQStreamState *mss; | ||
3872 | int ret; | ||
3873 | |||
3874 | mss = (struct MQStreamState *) mq->impl_state; | ||
3875 | GNUNET_assert (GNUNET_STREAM_OK == status); | ||
3876 | ret = GNUNET_SERVER_mst_receive (mss->mst, NULL, data, size, GNUNET_NO, GNUNET_NO); | ||
3877 | GNUNET_assert (GNUNET_OK == ret); | ||
3878 | /* we always read all data */ | ||
3879 | mss->rh = GNUNET_STREAM_read (mss->socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
3880 | mq_stream_data_processor, mq); | ||
3881 | return size; | ||
3882 | } | ||
3883 | |||
3884 | |||
3885 | static void | ||
3886 | mq_stream_destroy_impl (struct GNUNET_MQ_MessageQueue *mq) | ||
3887 | { | ||
3888 | struct MQStreamState *mss = (struct MQStreamState *) mq->impl_state; | ||
3889 | |||
3890 | if (NULL != mss->rh) | ||
3891 | { | ||
3892 | GNUNET_STREAM_read_cancel (mss->rh); | ||
3893 | mss->rh = NULL; | ||
3894 | } | ||
3895 | |||
3896 | if (NULL != mss->wh) | ||
3897 | { | ||
3898 | GNUNET_STREAM_write_cancel (mss->wh); | ||
3899 | mss->wh = NULL; | ||
3900 | } | ||
3901 | |||
3902 | if (NULL != mss->mst) | ||
3903 | { | ||
3904 | GNUNET_SERVER_mst_destroy (mss->mst); | ||
3905 | mss->mst = NULL; | ||
3906 | } | ||
3907 | |||
3908 | GNUNET_free (mss); | ||
3909 | } | ||
3910 | |||
3911 | |||
3912 | |||
3913 | /** | ||
3914 | * Create a message queue for a stream socket. | ||
3915 | * | ||
3916 | * @param socket the socket to read/write in the message queue | ||
3917 | * @param msg_handlers message handler array | ||
3918 | * @param error_handler callback for errors | ||
3919 | * @return the message queue for the socket | ||
3920 | */ | ||
3921 | struct GNUNET_MQ_MessageQueue * | ||
3922 | GNUNET_STREAM_mq_create (struct GNUNET_STREAM_Socket *socket, | ||
3923 | const struct GNUNET_MQ_Handler *msg_handlers, | ||
3924 | GNUNET_MQ_ErrorHandler error_handler, | ||
3925 | void *cls) | ||
3926 | { | ||
3927 | struct GNUNET_MQ_MessageQueue *mq; | ||
3928 | struct MQStreamState *mss; | ||
3929 | |||
3930 | mq = GNUNET_new (struct GNUNET_MQ_MessageQueue); | ||
3931 | mss = GNUNET_new (struct MQStreamState); | ||
3932 | mss->socket = socket; | ||
3933 | mq->impl_state = mss; | ||
3934 | mq->send_impl = mq_stream_send_impl; | ||
3935 | mq->destroy_impl = mq_stream_destroy_impl; | ||
3936 | mq->handlers = msg_handlers; | ||
3937 | mq->handlers_cls = cls; | ||
3938 | if (NULL != msg_handlers) | ||
3939 | { | ||
3940 | mss->mst = GNUNET_SERVER_mst_create (mq_stream_mst_callback, mq); | ||
3941 | mss->rh = GNUNET_STREAM_read (socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
3942 | mq_stream_data_processor, mq); | ||
3943 | } | ||
3944 | return mq; | ||
3945 | } | ||
3946 | |||
3734 | /* end of stream_api.c */ | 3947 | /* end of stream_api.c */ |
diff --git a/src/util/Makefile.am b/src/util/Makefile.am index ac855c25e..491006a42 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am | |||
@@ -90,6 +90,7 @@ libgnunetutil_la_SOURCES = \ | |||
90 | getopt_helpers.c \ | 90 | getopt_helpers.c \ |
91 | helper.c \ | 91 | helper.c \ |
92 | load.c \ | 92 | load.c \ |
93 | mq.c \ | ||
93 | network.c \ | 94 | network.c \ |
94 | os_installation.c \ | 95 | os_installation.c \ |
95 | os_network.c \ | 96 | os_network.c \ |
@@ -230,6 +231,8 @@ check_PROGRAMS = \ | |||
230 | test_connection_timeout \ | 231 | test_connection_timeout \ |
231 | test_connection_timeout_no_connect \ | 232 | test_connection_timeout_no_connect \ |
232 | test_connection_transmit_cancel \ | 233 | test_connection_transmit_cancel \ |
234 | test_mq \ | ||
235 | test_mq_client \ | ||
233 | test_os_network \ | 236 | test_os_network \ |
234 | test_os_priority \ | 237 | test_os_priority \ |
235 | test_peer \ | 238 | test_peer \ |
@@ -416,6 +419,16 @@ test_connection_transmit_cancel_SOURCES = \ | |||
416 | test_connection_transmit_cancel_LDADD = \ | 419 | test_connection_transmit_cancel_LDADD = \ |
417 | $(top_builddir)/src/util/libgnunetutil.la | 420 | $(top_builddir)/src/util/libgnunetutil.la |
418 | 421 | ||
422 | test_mq_SOURCES = \ | ||
423 | test_mq.c | ||
424 | test_mq_LDADD = \ | ||
425 | $(top_builddir)/src/util/libgnunetutil.la | ||
426 | |||
427 | test_mq_client_SOURCES = \ | ||
428 | test_mq_client.c | ||
429 | test_mq_client_LDADD = \ | ||
430 | $(top_builddir)/src/util/libgnunetutil.la | ||
431 | |||
419 | test_os_network_SOURCES = \ | 432 | test_os_network_SOURCES = \ |
420 | test_os_network.c | 433 | test_os_network.c |
421 | test_os_network_LDADD = \ | 434 | test_os_network_LDADD = \ |
diff --git a/src/set/mq.c b/src/util/mq.c index 0ced014dd..36cacd30b 100644 --- a/src/set/mq.c +++ b/src/util/mq.c | |||
@@ -20,40 +20,16 @@ | |||
20 | 20 | ||
21 | /** | 21 | /** |
22 | * @author Florian Dold | 22 | * @author Florian Dold |
23 | * @file set/mq.c | 23 | * @file util/mq.c |
24 | * @brief general purpose request queue | 24 | * @brief general purpose request queue |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #include "mq.h" | 27 | #include "platform.h" |
28 | 28 | #include "gnunet_common.h" | |
29 | #include "gnunet_util_lib.h" | ||
29 | 30 | ||
30 | #define LOG(kind,...) GNUNET_log_from (kind, "mq",__VA_ARGS__) | 31 | #define LOG(kind,...) GNUNET_log_from (kind, "mq",__VA_ARGS__) |
31 | 32 | ||
32 | /** | ||
33 | * Signature of functions implementing the | ||
34 | * sending part of a message queue | ||
35 | * | ||
36 | * @param q the message queue | ||
37 | * @param m the message | ||
38 | */ | ||
39 | typedef void (*SendImpl) (struct GNUNET_MQ_MessageQueue *q, struct GNUNET_MQ_Message *m); | ||
40 | |||
41 | |||
42 | typedef void (*DestroyImpl) (struct GNUNET_MQ_MessageQueue *q); | ||
43 | |||
44 | |||
45 | /** | ||
46 | * Collection of the state necessary to read and write gnunet messages | ||
47 | * to a stream socket. Should be used as closure for stream_data_processor. | ||
48 | */ | ||
49 | struct MessageStreamState | ||
50 | { | ||
51 | struct GNUNET_SERVER_MessageStreamTokenizer *mst; | ||
52 | struct MessageQueue *mq; | ||
53 | struct GNUNET_STREAM_Socket *socket; | ||
54 | struct GNUNET_STREAM_ReadHandle *rh; | ||
55 | struct GNUNET_STREAM_WriteHandle *wh; | ||
56 | }; | ||
57 | 33 | ||
58 | 34 | ||
59 | struct ServerClientSocketState | 35 | struct ServerClientSocketState |
@@ -65,131 +41,25 @@ struct ServerClientSocketState | |||
65 | 41 | ||
66 | struct ClientConnectionState | 42 | struct ClientConnectionState |
67 | { | 43 | { |
68 | struct GNUNET_CLIENT_Connection *connection; | ||
69 | struct GNUNET_CLIENT_TransmitHandle *th; | ||
70 | }; | ||
71 | |||
72 | |||
73 | struct GNUNET_MQ_MessageQueue | ||
74 | { | ||
75 | /** | ||
76 | * Handlers array, or NULL if the queue should not receive messages | ||
77 | */ | ||
78 | const struct GNUNET_MQ_Handler *handlers; | ||
79 | |||
80 | /** | ||
81 | * Closure for the handler callbacks | ||
82 | */ | ||
83 | void *handlers_cls; | ||
84 | |||
85 | /** | ||
86 | * Actual implementation of message sending, | ||
87 | * called when a message is added | ||
88 | */ | ||
89 | SendImpl send_impl; | ||
90 | |||
91 | /** | ||
92 | * Implementation-dependent queue destruction function | ||
93 | */ | ||
94 | DestroyImpl destroy_impl; | ||
95 | |||
96 | /** | 44 | /** |
97 | * Implementation-specific state | 45 | * Did we call receive? |
98 | */ | 46 | */ |
99 | void *impl_state; | 47 | int receive_active; |
100 | 48 | struct GNUNET_CLIENT_Connection *connection; | |
101 | /** | 49 | struct GNUNET_CLIENT_TransmitHandle *th; |
102 | * Callback will be called when the message queue is empty | ||
103 | */ | ||
104 | GNUNET_MQ_NotifyCallback empty_cb; | ||
105 | |||
106 | /** | ||
107 | * Closure for empty_cb | ||
108 | */ | ||
109 | void *empty_cls; | ||
110 | |||
111 | /** | ||
112 | * Callback will be called when a read error occurs. | ||
113 | */ | ||
114 | GNUNET_MQ_NotifyCallback read_error_cb; | ||
115 | |||
116 | /** | ||
117 | * Closure for read_error_cb | ||
118 | */ | ||
119 | void *read_error_cls; | ||
120 | |||
121 | /** | ||
122 | * Linked list of messages pending to be sent | ||
123 | */ | ||
124 | struct GNUNET_MQ_Message *msg_head; | ||
125 | |||
126 | /** | ||
127 | * Linked list of messages pending to be sent | ||
128 | */ | ||
129 | struct GNUNET_MQ_Message *msg_tail; | ||
130 | |||
131 | /** | ||
132 | * Message that is currently scheduled to be | ||
133 | * sent. Not the head of the message queue, as the implementation | ||
134 | * needs to know if sending has been already scheduled or not. | ||
135 | */ | ||
136 | struct GNUNET_MQ_Message *current_msg; | ||
137 | |||
138 | /** | ||
139 | * Map of associations, lazily allocated | ||
140 | */ | ||
141 | struct GNUNET_CONTAINER_MultiHashMap32 *assoc_map; | ||
142 | |||
143 | /** | ||
144 | * Next id that should be used for the assoc_map, | ||
145 | * initialized lazily to a random value together with | ||
146 | * assoc_map | ||
147 | */ | ||
148 | uint32_t assoc_id; | ||
149 | }; | 50 | }; |
150 | 51 | ||
151 | 52 | ||
152 | struct GNUNET_MQ_Message | ||
153 | { | ||
154 | /** | ||
155 | * Messages are stored in a linked list | ||
156 | */ | ||
157 | struct GNUNET_MQ_Message *next; | ||
158 | |||
159 | /** | ||
160 | * Messages are stored in a linked list | ||
161 | */ | ||
162 | struct GNUNET_MQ_Message *prev; | ||
163 | |||
164 | /** | ||
165 | * Actual allocated message header, | ||
166 | * usually points to the end of the containing GNUNET_MQ_Message | ||
167 | */ | ||
168 | struct GNUNET_MessageHeader *mh; | ||
169 | |||
170 | /** | ||
171 | * Queue the message is queued in, NULL if message is not queued. | ||
172 | */ | ||
173 | struct GNUNET_MQ_MessageQueue *parent_queue; | ||
174 | |||
175 | /** | ||
176 | * Called after the message was sent irrevokably | ||
177 | */ | ||
178 | GNUNET_MQ_NotifyCallback sent_cb; | ||
179 | |||
180 | /** | ||
181 | * Closure for send_cb | ||
182 | */ | ||
183 | void *sent_cls; | ||
184 | }; | ||
185 | 53 | ||
186 | 54 | ||
187 | /** | 55 | /** |
188 | * Call the right callback for a message received | 56 | * Call the right callback for a message. |
189 | * by a queue | 57 | * |
58 | * @param mq message queue with the handlers | ||
59 | * @param mh message to dispatch | ||
190 | */ | 60 | */ |
191 | static void | 61 | void |
192 | dispatch_message (struct GNUNET_MQ_MessageQueue *mq, const struct GNUNET_MessageHeader *mh) | 62 | GNUNET_MQ_dispatch (struct GNUNET_MQ_MessageQueue *mq, const struct GNUNET_MessageHeader *mh) |
193 | { | 63 | { |
194 | const struct GNUNET_MQ_Handler *handler; | 64 | const struct GNUNET_MQ_Handler *handler; |
195 | int handled = GNUNET_NO; | 65 | int handled = GNUNET_NO; |
@@ -273,181 +143,6 @@ GNUNET_MQ_nest_ (struct GNUNET_MQ_Message **mqmp, | |||
273 | } | 143 | } |
274 | 144 | ||
275 | 145 | ||
276 | /** | ||
277 | * Functions of this signature are called whenever writing operations | ||
278 | * on a stream are executed | ||
279 | * | ||
280 | * @param cls the closure from GNUNET_STREAM_write | ||
281 | * @param status the status of the stream at the time this function is called; | ||
282 | * GNUNET_STREAM_OK if writing to stream was completed successfully; | ||
283 | * GNUNET_STREAM_TIMEOUT if the given data is not sent successfully | ||
284 | * (this doesn't mean that the data is never sent, the receiver may | ||
285 | * have read the data but its ACKs may have been lost); | ||
286 | * GNUNET_STREAM_SHUTDOWN if the stream is shutdown for writing in the | ||
287 | * mean time; GNUNET_STREAM_SYSERR if the stream is broken and cannot | ||
288 | * be processed. | ||
289 | * @param size the number of bytes written | ||
290 | */ | ||
291 | static void | ||
292 | stream_write_queued (void *cls, enum GNUNET_STREAM_Status status, size_t size) | ||
293 | { | ||
294 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
295 | struct MessageStreamState *mss = (struct MessageStreamState *) mq->impl_state; | ||
296 | struct GNUNET_MQ_Message *mqm; | ||
297 | |||
298 | GNUNET_assert (GNUNET_STREAM_OK == status); | ||
299 | |||
300 | /* call cb for message we finished sending */ | ||
301 | mqm = mq->current_msg; | ||
302 | GNUNET_assert (NULL != mq->current_msg); | ||
303 | if (NULL != mqm->sent_cb) | ||
304 | mqm->sent_cb (mqm->sent_cls); | ||
305 | GNUNET_free (mqm); | ||
306 | |||
307 | mss->wh = NULL; | ||
308 | |||
309 | mqm = mq->msg_head; | ||
310 | mq->current_msg = mqm; | ||
311 | if (NULL == mqm) | ||
312 | { | ||
313 | if (NULL != mq->empty_cb) | ||
314 | mq->empty_cb (mq->empty_cls); | ||
315 | return; | ||
316 | } | ||
317 | GNUNET_CONTAINER_DLL_remove (mq->msg_head, mq->msg_tail, mqm); | ||
318 | mss->wh = GNUNET_STREAM_write (mss->socket, mqm->mh, ntohs (mqm->mh->size), | ||
319 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
320 | stream_write_queued, mq); | ||
321 | GNUNET_assert (NULL != mss->wh); | ||
322 | } | ||
323 | |||
324 | |||
325 | static void | ||
326 | stream_socket_send_impl (struct GNUNET_MQ_MessageQueue *mq, | ||
327 | struct GNUNET_MQ_Message *mqm) | ||
328 | { | ||
329 | struct MessageStreamState *mss = (struct MessageStreamState *) mq->impl_state; | ||
330 | if (NULL != mq->current_msg) | ||
331 | { | ||
332 | GNUNET_CONTAINER_DLL_insert_tail (mq->msg_head, mq->msg_tail, mqm); | ||
333 | return; | ||
334 | } | ||
335 | mq->current_msg = mqm; | ||
336 | mss->wh = GNUNET_STREAM_write (mss->socket, mqm->mh, ntohs (mqm->mh->size), | ||
337 | GNUNET_TIME_UNIT_FOREVER_REL, | ||
338 | stream_write_queued, mq); | ||
339 | } | ||
340 | |||
341 | |||
342 | /** | ||
343 | * Functions with this signature are called whenever a | ||
344 | * complete message is received by the tokenizer. | ||
345 | * | ||
346 | * Do not call GNUNET_SERVER_mst_destroy in callback | ||
347 | * | ||
348 | * @param cls closure | ||
349 | * @param client identification of the client | ||
350 | * @param message the actual message | ||
351 | * | ||
352 | * @return GNUNET_OK on success, GNUNET_SYSERR to stop further processing | ||
353 | */ | ||
354 | static int | ||
355 | stream_mst_callback (void *cls, void *client, | ||
356 | const struct GNUNET_MessageHeader *message) | ||
357 | { | ||
358 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
359 | |||
360 | GNUNET_assert (NULL != message); | ||
361 | dispatch_message (mq, message); | ||
362 | return GNUNET_OK; | ||
363 | } | ||
364 | |||
365 | |||
366 | /** | ||
367 | * Functions of this signature are called whenever data is available from the | ||
368 | * stream. | ||
369 | * | ||
370 | * @param cls the closure from GNUNET_STREAM_read | ||
371 | * @param status the status of the stream at the time this function is called | ||
372 | * @param data traffic from the other side | ||
373 | * @param size the number of bytes available in data read; will be 0 on timeout | ||
374 | * @return number of bytes of processed from 'data' (any data remaining should be | ||
375 | * given to the next time the read processor is called). | ||
376 | */ | ||
377 | static size_t | ||
378 | stream_data_processor (void *cls, | ||
379 | enum GNUNET_STREAM_Status status, | ||
380 | const void *data, | ||
381 | size_t size) | ||
382 | { | ||
383 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
384 | struct MessageStreamState *mss; | ||
385 | int ret; | ||
386 | |||
387 | mss = (struct MessageStreamState *) mq->impl_state; | ||
388 | GNUNET_assert (GNUNET_STREAM_OK == status); | ||
389 | ret = GNUNET_SERVER_mst_receive (mss->mst, NULL, data, size, GNUNET_NO, GNUNET_NO); | ||
390 | GNUNET_assert (GNUNET_OK == ret); | ||
391 | /* we always read all data */ | ||
392 | mss->rh = GNUNET_STREAM_read (mss->socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
393 | stream_data_processor, mq); | ||
394 | return size; | ||
395 | } | ||
396 | |||
397 | |||
398 | static void | ||
399 | stream_socket_destroy_impl (struct GNUNET_MQ_MessageQueue *mq) | ||
400 | { | ||
401 | struct MessageStreamState *mss = (struct MessageStreamState *) mq->impl_state; | ||
402 | |||
403 | if (NULL != mss->rh) | ||
404 | { | ||
405 | GNUNET_STREAM_read_cancel (mss->rh); | ||
406 | mss->rh = NULL; | ||
407 | } | ||
408 | |||
409 | if (NULL != mss->wh) | ||
410 | { | ||
411 | GNUNET_STREAM_write_cancel (mss->wh); | ||
412 | mss->wh = NULL; | ||
413 | } | ||
414 | |||
415 | if (NULL != mss->mst) | ||
416 | { | ||
417 | GNUNET_SERVER_mst_destroy (mss->mst); | ||
418 | mss->mst = NULL; | ||
419 | } | ||
420 | |||
421 | GNUNET_free (mss); | ||
422 | } | ||
423 | |||
424 | |||
425 | |||
426 | |||
427 | struct GNUNET_MQ_MessageQueue * | ||
428 | GNUNET_MQ_queue_for_stream_socket (struct GNUNET_STREAM_Socket *socket, | ||
429 | const struct GNUNET_MQ_Handler *handlers, | ||
430 | void *cls) | ||
431 | { | ||
432 | struct GNUNET_MQ_MessageQueue *mq; | ||
433 | struct MessageStreamState *mss; | ||
434 | |||
435 | mq = GNUNET_new (struct GNUNET_MQ_MessageQueue); | ||
436 | mss = GNUNET_new (struct MessageStreamState); | ||
437 | mss->socket = socket; | ||
438 | mq->impl_state = mss; | ||
439 | mq->send_impl = stream_socket_send_impl; | ||
440 | mq->destroy_impl = &stream_socket_destroy_impl; | ||
441 | mq->handlers = handlers; | ||
442 | mq->handlers_cls = cls; | ||
443 | if (NULL != handlers) | ||
444 | { | ||
445 | mss->mst = GNUNET_SERVER_mst_create (stream_mst_callback, mq); | ||
446 | mss->rh = GNUNET_STREAM_read (socket, GNUNET_TIME_UNIT_FOREVER_REL, | ||
447 | stream_data_processor, mq); | ||
448 | } | ||
449 | return mq; | ||
450 | } | ||
451 | 146 | ||
452 | 147 | ||
453 | /*** Transmit a queued message to the session's client. | 148 | /*** Transmit a queued message to the session's client. |
@@ -490,8 +185,6 @@ transmit_queued (void *cls, size_t size, | |||
490 | GNUNET_TIME_UNIT_FOREVER_REL, | 185 | GNUNET_TIME_UNIT_FOREVER_REL, |
491 | &transmit_queued, mq); | 186 | &transmit_queued, mq); |
492 | } | 187 | } |
493 | else if (NULL != mq->empty_cb) | ||
494 | mq->empty_cb (mq->empty_cls); | ||
495 | return msg_size; | 188 | return msg_size; |
496 | } | 189 | } |
497 | 190 | ||
@@ -553,6 +246,37 @@ GNUNET_MQ_queue_for_server_client (struct GNUNET_SERVER_Client *client) | |||
553 | 246 | ||
554 | 247 | ||
555 | /** | 248 | /** |
249 | * Type of a function to call when we receive a message | ||
250 | * from the service. | ||
251 | * | ||
252 | * @param cls closure | ||
253 | * @param msg message received, NULL on timeout or fatal error | ||
254 | */ | ||
255 | static void | ||
256 | handle_client_message (void *cls, | ||
257 | const struct GNUNET_MessageHeader *msg) | ||
258 | { | ||
259 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
260 | struct ClientConnectionState *state; | ||
261 | |||
262 | state = mq->impl_state; | ||
263 | |||
264 | if (NULL == msg) | ||
265 | { | ||
266 | if (NULL == mq->error_handler) | ||
267 | LOG (GNUNET_ERROR_TYPE_WARNING, "ignoring read error (no handler installed)\n"); | ||
268 | mq->error_handler (mq->handlers_cls, GNUNET_MQ_ERROR_READ); | ||
269 | return; | ||
270 | } | ||
271 | |||
272 | GNUNET_CLIENT_receive (state->connection, handle_client_message, mq, | ||
273 | GNUNET_TIME_UNIT_FOREVER_REL); | ||
274 | |||
275 | GNUNET_MQ_dispatch (mq, msg); | ||
276 | } | ||
277 | |||
278 | |||
279 | /** | ||
556 | * Transmit a queued message to the session's client. | 280 | * Transmit a queued message to the session's client. |
557 | * | 281 | * |
558 | * @param cls consensus session | 282 | * @param cls consensus session |
@@ -569,6 +293,24 @@ connection_client_transmit_queued (void *cls, size_t size, | |||
569 | struct ClientConnectionState *state = mq->impl_state; | 293 | struct ClientConnectionState *state = mq->impl_state; |
570 | size_t msg_size; | 294 | size_t msg_size; |
571 | 295 | ||
296 | if (NULL == buf) | ||
297 | { | ||
298 | if (NULL == mq->error_handler) | ||
299 | { | ||
300 | LOG (GNUNET_ERROR_TYPE_WARNING, "read error, but no error handler installed\n"); | ||
301 | return 0; | ||
302 | } | ||
303 | mq->error_handler (mq->handlers_cls, GNUNET_MQ_ERROR_READ); | ||
304 | return 0; | ||
305 | } | ||
306 | |||
307 | if ((NULL != mq->handlers) && (GNUNET_NO == state->receive_active)) | ||
308 | { | ||
309 | state->receive_active = GNUNET_YES; | ||
310 | GNUNET_CLIENT_receive (state->connection, handle_client_message, mq, | ||
311 | GNUNET_TIME_UNIT_FOREVER_REL); | ||
312 | } | ||
313 | |||
572 | 314 | ||
573 | GNUNET_assert (NULL != mqm); | 315 | GNUNET_assert (NULL != mqm); |
574 | 316 | ||
@@ -593,8 +335,6 @@ connection_client_transmit_queued (void *cls, size_t size, | |||
593 | GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_NO, | 335 | GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_NO, |
594 | &connection_client_transmit_queued, mq); | 336 | &connection_client_transmit_queued, mq); |
595 | } | 337 | } |
596 | else if (NULL != mq->empty_cb) | ||
597 | mq->empty_cb (mq->empty_cls); | ||
598 | return msg_size; | 338 | return msg_size; |
599 | } | 339 | } |
600 | 340 | ||
@@ -631,35 +371,6 @@ connection_client_send_impl (struct GNUNET_MQ_MessageQueue *mq, | |||
631 | 371 | ||
632 | 372 | ||
633 | 373 | ||
634 | /** | ||
635 | * Type of a function to call when we receive a message | ||
636 | * from the service. | ||
637 | * | ||
638 | * @param cls closure | ||
639 | * @param msg message received, NULL on timeout or fatal error | ||
640 | */ | ||
641 | static void | ||
642 | handle_client_message (void *cls, | ||
643 | const struct GNUNET_MessageHeader *msg) | ||
644 | { | ||
645 | struct GNUNET_MQ_MessageQueue *mq = cls; | ||
646 | struct ClientConnectionState *state; | ||
647 | |||
648 | state = mq->impl_state; | ||
649 | |||
650 | if (NULL == msg) | ||
651 | { | ||
652 | if (NULL == mq->read_error_cb) | ||
653 | LOG (GNUNET_ERROR_TYPE_WARNING, "ignoring read error (no handler installed)\n"); | ||
654 | mq->read_error_cb (mq->read_error_cls); | ||
655 | return; | ||
656 | } | ||
657 | |||
658 | GNUNET_CLIENT_receive (state->connection, handle_client_message, mq, | ||
659 | GNUNET_TIME_UNIT_FOREVER_REL); | ||
660 | |||
661 | dispatch_message (mq, msg); | ||
662 | } | ||
663 | 374 | ||
664 | 375 | ||
665 | struct GNUNET_MQ_MessageQueue * | 376 | struct GNUNET_MQ_MessageQueue * |
@@ -681,12 +392,6 @@ GNUNET_MQ_queue_for_connection_client (struct GNUNET_CLIENT_Connection *connecti | |||
681 | mq->send_impl = connection_client_send_impl; | 392 | mq->send_impl = connection_client_send_impl; |
682 | mq->destroy_impl = connection_client_destroy_impl; | 393 | mq->destroy_impl = connection_client_destroy_impl; |
683 | 394 | ||
684 | if (NULL != handlers) | ||
685 | { | ||
686 | GNUNET_CLIENT_receive (connection, handle_client_message, mq, | ||
687 | GNUNET_TIME_UNIT_FOREVER_REL); | ||
688 | } | ||
689 | |||
690 | return mq; | 395 | return mq; |
691 | } | 396 | } |
692 | 397 | ||
@@ -774,20 +479,3 @@ GNUNET_MQ_destroy (struct GNUNET_MQ_MessageQueue *mq) | |||
774 | GNUNET_free (mq); | 479 | GNUNET_free (mq); |
775 | } | 480 | } |
776 | 481 | ||
777 | |||
778 | /** | ||
779 | * Call a callback once all messages queued have been sent, | ||
780 | * i.e. the message queue is empty. | ||
781 | * | ||
782 | * @param mqm the message queue to send the notification for | ||
783 | * @param cb the callback to call on an empty queue | ||
784 | * @param cls closure for cb | ||
785 | */ | ||
786 | void | ||
787 | GNUNET_MQ_notify_empty (struct GNUNET_MQ_MessageQueue *mqm, | ||
788 | GNUNET_MQ_NotifyCallback cb, | ||
789 | void *cls) | ||
790 | { | ||
791 | mqm->empty_cb = cb; | ||
792 | mqm->empty_cls = cls; | ||
793 | } | ||
diff --git a/src/set/test_mq.c b/src/util/test_mq.c index d13c63440..161b40a20 100644 --- a/src/set/test_mq.c +++ b/src/util/test_mq.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include "platform.h" | 25 | #include "platform.h" |
26 | #include "gnunet_util_lib.h" | 26 | #include "gnunet_util_lib.h" |
27 | #include "gnunet_testing_lib.h" | 27 | #include "gnunet_testing_lib.h" |
28 | #include "mq.h" | ||
29 | 28 | ||
30 | 29 | ||
31 | GNUNET_NETWORK_STRUCT_BEGIN | 30 | GNUNET_NETWORK_STRUCT_BEGIN |
diff --git a/src/set/test_mq_client.c b/src/util/test_mq_client.c index ca615d37e..b7eb1516a 100644 --- a/src/set/test_mq_client.c +++ b/src/util/test_mq_client.c | |||
@@ -19,22 +19,12 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | /** | 21 | /** |
22 | * @file set/test_mq.c | 22 | * @file util/test_mq_client.c |
23 | * @brief tests for mq with connection client | 23 | * @brief tests for mq with connection client |
24 | */ | 24 | */ |
25 | /** | ||
26 | * @file util/test_server_with_client.c | ||
27 | * @brief tests for server.c and client.c, | ||
28 | * specifically disconnect_notify, | ||
29 | * client_get_address and receive_done (resume processing) | ||
30 | */ | ||
31 | #include "platform.h" | 25 | #include "platform.h" |
32 | #include "gnunet_common.h" | 26 | #include "gnunet_common.h" |
33 | #include "gnunet_scheduler_lib.h" | 27 | #include "gnunet_util_lib.h" |
34 | #include "gnunet_client_lib.h" | ||
35 | #include "gnunet_server_lib.h" | ||
36 | #include "gnunet_time_lib.h" | ||
37 | #include "mq.h" | ||
38 | 28 | ||
39 | #define PORT 23336 | 29 | #define PORT 23336 |
40 | 30 | ||