aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2013-05-22 10:29:15 +0000
committerFlorian Dold <florian.dold@gmail.com>2013-05-22 10:29:15 +0000
commit4289fca5aeefd0652ae60bc16f90ed911c7e1c60 (patch)
treeda266c48ada44f11ce88a38833960b0eb08c1c5d
parent3418f171c455980c99ac6363a74116243bddede6 (diff)
downloadgnunet-4289fca5aeefd0652ae60bc16f90ed911c7e1c60.tar.gz
gnunet-4289fca5aeefd0652ae60bc16f90ed911c7e1c60.zip
- moved MQ to util
- MQ support for stream - set api - starting to use set for consensus
-rw-r--r--po/de.po344
-rw-r--r--po/es.po358
-rw-r--r--po/sv.po344
-rw-r--r--po/vi.po344
-rw-r--r--po/zh_CN.po344
-rw-r--r--src/consensus/Makefile.am19
-rw-r--r--src/consensus/consensus.h4
-rw-r--r--src/consensus/consensus_protocol.h45
-rw-r--r--src/consensus/gnunet-service-consensus.c1945
-rw-r--r--src/consensus/ibf.c357
-rw-r--r--src/consensus/ibf.h224
-rw-r--r--src/consensus/strata_estimator.c145
-rw-r--r--src/consensus/strata_estimator.h84
-rw-r--r--src/include/gnunet_mq_lib.h (renamed from src/set/mq.h)234
-rw-r--r--src/include/gnunet_set_service.h8
-rw-r--r--src/include/gnunet_stream_lib.h15
-rw-r--r--src/include/gnunet_util_lib.h1
-rw-r--r--src/set/Makefile.am34
-rw-r--r--src/set/gnunet-service-set.c2
-rw-r--r--src/set/gnunet-service-set.h1
-rw-r--r--src/set/gnunet-service-set_union.c8
-rw-r--r--src/set/gnunet-set-bug.c142
-rw-r--r--src/set/gnunet-set-ibf.c (renamed from src/consensus/gnunet-consensus-ibf.c)0
-rw-r--r--src/set/gnunet-set.c10
-rw-r--r--src/set/set_api.c38
-rw-r--r--src/set/test_set_api.c48
-rw-r--r--src/stream/stream_api.c213
-rw-r--r--src/util/Makefile.am13
-rw-r--r--src/util/mq.c (renamed from src/set/mq.c)438
-rw-r--r--src/util/test_mq.c (renamed from src/set/test_mq.c)1
-rw-r--r--src/util/test_mq_client.c (renamed from src/set/test_mq_client.c)14
31 files changed, 1584 insertions, 4193 deletions
diff --git a/po/de.po b/po/de.po
index 7723625c2..ee760d67c 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
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':"
36msgid "Failed to remove servicehome directory %s\n" 36msgid "Failed to remove servicehome directory %s\n"
37msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n" 37msgstr "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
40msgid "Message was sent successfully" 40msgid "Message was sent successfully"
41msgstr "" 41msgstr ""
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
45msgid "Misconfiguration (can't connect to the ARM service)" 45msgid "Misconfiguration (can't connect to the ARM service)"
46msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 46msgstr "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
50msgid "We disconnected from ARM before we could send a request" 50msgid "We disconnected from ARM before we could send a request"
51msgstr "# gap Anfragen verworfen: Kollision in RT" 51msgstr "# 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
54msgid "ARM API is busy" 54msgid "ARM API is busy"
55msgstr "" 55msgstr ""
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
58msgid "Request doesn't fit into a message" 58msgid "Request doesn't fit into a message"
59msgstr "" 59msgstr ""
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
63msgid "Request timed out" 63msgid "Request timed out"
64msgstr "# Sitzungsschlüssel akzeptiert" 64msgstr "# 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
68msgid "Unknown request status" 68msgid "Unknown request status"
69msgstr "Unbekannte Operation `%s'\n" 69msgstr "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
73msgid "%s is stopped" 73msgid "%s is stopped"
74msgstr "# bytes in der Datenbank" 74msgstr "# 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
78msgid "%s is starting" 78msgid "%s is starting"
79msgstr "`%s' startet\n" 79msgstr "`%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
83msgid "%s is stopping" 83msgid "%s is stopping"
84msgstr "" 84msgstr ""
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
88msgid "%s is starting already" 88msgid "%s is starting already"
89msgstr "`%s' startet\n" 89msgstr "`%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
93msgid "%s is stopping already" 93msgid "%s is stopping already"
94msgstr "" 94msgstr ""
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
98msgid "%s is started already" 98msgid "%s is started already"
99msgstr "" 99msgstr ""
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
103msgid "%s is stopped already" 103msgid "%s is stopped already"
104msgstr "" 104msgstr ""
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
108msgid "%s service is not known to ARM" 108msgid "%s service is not known to ARM"
109msgstr "Namespace `%s' hat das Rating %d.\n" 109msgstr "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
113msgid "%s service failed to start" 113msgid "%s service failed to start"
114msgstr "Fehler beim Starten der Collection.\n" 114msgstr "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
118msgid "%s service can't be started because ARM is shutting down" 118msgid "%s service can't be started because ARM is shutting down"
119msgstr "`%s' fährt herunter.\n" 119msgstr "`%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
123msgid "%.s Unknown result code." 123msgid "%.s Unknown result code."
124msgstr "" 124msgstr ""
@@ -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
850msgid "# peers connected" 850msgid "# peers connected"
851msgstr "# verbundener Knoten" 851msgstr "# 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
1336msgid "be verbose (print progress information)" 1336msgid "be verbose (print progress information)"
1337msgstr "" 1337msgstr ""
1338 1338
@@ -2243,7 +2243,7 @@ msgstr "Fehler beim Parsen der Gerätedaten von `%s' bei %s:%d.\n"
2243msgid "no-name" 2243msgid "no-name"
2244msgstr "Name anzeigen" 2244msgstr "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
2248msgid "ECC signing failed at %s:%d: %s\n" 2248msgid "ECC signing failed at %s:%d: %s\n"
2249msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" 2249msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
@@ -2447,12 +2447,12 @@ msgstr ""
2447msgid "Unrecognized URI type" 2447msgid "Unrecognized URI type"
2448msgstr "" 2448msgstr ""
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
2452msgid "Lacking key configuration settings.\n" 2452msgid "Lacking key configuration settings.\n"
2453msgstr "GNUnet Konfiguration" 2453msgstr "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
2457msgid "Could not access hostkey file `%s'.\n" 2457msgid "Could not access hostkey file `%s'.\n"
2458msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n" 2458msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n"
@@ -3797,16 +3797,16 @@ msgstr ""
3797msgid "Hostlist file `%s' could not be removed\n" 3797msgid "Hostlist file `%s' could not be removed\n"
3798msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" 3798msgstr "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
3802msgid "bytes in hostlist" 3802msgid "bytes in hostlist"
3803msgstr "# bytes in der Datenbank" 3803msgstr "# bytes in der Datenbank"
3804 3804
3805#: src/hostlist/hostlist-server.c:157 3805#: src/hostlist/hostlist-server.c:161
3806msgid "expired addresses encountered" 3806msgid "expired addresses encountered"
3807msgstr "" 3807msgstr ""
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 ""
3815msgid "Error in communication with PEERINFO service: %s\n" 3815msgid "Error in communication with PEERINFO service: %s\n"
3816msgstr "Informationen über andere GNUnet Knoten ausgeben." 3816msgstr "Informationen über andere GNUnet Knoten ausgeben."
3817 3817
3818#: src/hostlist/hostlist-server.c:205 3818#: src/hostlist/hostlist-server.c:210
3819msgid "HELLOs without addresses encountered (ignored)" 3819msgid "HELLOs without addresses encountered (ignored)"
3820msgstr "" 3820msgstr ""
3821 3821
3822#: src/hostlist/hostlist-server.c:219 3822#: src/hostlist/hostlist-server.c:224
3823msgid "bytes not included in hostlist (size limit)" 3823msgid "bytes not included in hostlist (size limit)"
3824msgstr "" 3824msgstr ""
3825 3825
3826#: src/hostlist/hostlist-server.c:263 3826#: src/hostlist/hostlist-server.c:268
3827#, fuzzy, c-format 3827#, fuzzy, c-format
3828msgid "Refusing `%s' request to hostlist server\n" 3828msgid "Refusing `%s' request to hostlist server\n"
3829msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n" 3829msgstr "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
3833msgid "hostlist requests refused (not HTTP GET)" 3833msgid "hostlist requests refused (not HTTP GET)"
3834msgstr "# Client Trace-Anfragen empfangen" 3834msgstr "# 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
3838msgid "Refusing `%s' request with %llu bytes of upload data\n" 3838msgid "Refusing `%s' request with %llu bytes of upload data\n"
3839msgstr "" 3839msgstr ""
3840 3840
3841#: src/hostlist/hostlist-server.c:283 3841#: src/hostlist/hostlist-server.c:288
3842#, fuzzy 3842#, fuzzy
3843msgid "hostlist requests refused (upload data)" 3843msgid "hostlist requests refused (upload data)"
3844msgstr "# Client Trace-Anfragen empfangen" 3844msgstr "# Client Trace-Anfragen empfangen"
3845 3845
3846#: src/hostlist/hostlist-server.c:291 3846#: src/hostlist/hostlist-server.c:296
3847msgid "Could not handle hostlist request since I do not have a response yet\n" 3847msgid "Could not handle hostlist request since I do not have a response yet\n"
3848msgstr "" 3848msgstr ""
3849 3849
3850#: src/hostlist/hostlist-server.c:294 3850#: src/hostlist/hostlist-server.c:299
3851#, fuzzy 3851#, fuzzy
3852msgid "hostlist requests refused (not ready)" 3852msgid "hostlist requests refused (not ready)"
3853msgstr "# Client Trace-Anfragen empfangen" 3853msgstr "# Client Trace-Anfragen empfangen"
3854 3854
3855#: src/hostlist/hostlist-server.c:298 3855#: src/hostlist/hostlist-server.c:303
3856msgid "Received request for our hostlist\n" 3856msgid "Received request for our hostlist\n"
3857msgstr "" 3857msgstr ""
3858 3858
3859#: src/hostlist/hostlist-server.c:299 3859#: src/hostlist/hostlist-server.c:304
3860#, fuzzy 3860#, fuzzy
3861msgid "hostlist requests processed" 3861msgid "hostlist requests processed"
3862msgstr "# Client Trace-Anfragen empfangen" 3862msgstr "# Client Trace-Anfragen empfangen"
3863 3863
3864#: src/hostlist/hostlist-server.c:341 3864#: src/hostlist/hostlist-server.c:346
3865#, fuzzy 3865#, fuzzy
3866msgid "# hostlist advertisements send" 3866msgid "# hostlist advertisements send"
3867msgstr "# Bekanntmachungen von anderen übertragen" 3867msgstr "# Bekanntmachungen von anderen übertragen"
3868 3868
3869#: src/hostlist/hostlist-server.c:384 3869#: src/hostlist/hostlist-server.c:389
3870msgid "Advertisement message could not be queued by core\n" 3870msgid "Advertisement message could not be queued by core\n"
3871msgstr "" 3871msgstr ""
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
3876msgid "Could not access PEERINFO service. Exiting.\n" 3876msgid "Could not access PEERINFO service. Exiting.\n"
3877msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" 3877msgstr "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
3881msgid "Invalid port number %llu. Exiting.\n" 3881msgid "Invalid port number %llu. Exiting.\n"
3882msgstr "Ungültige Parameter. Abbruch.\n" 3882msgstr "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
3886msgid "Hostlist service starts on %s:%llu\n" 3886msgid "Hostlist service starts on %s:%llu\n"
3887msgstr "" 3887msgstr ""
3888 3888
3889#: src/hostlist/hostlist-server.c:581 3889#: src/hostlist/hostlist-server.c:593
3890#, fuzzy, c-format 3890#, fuzzy, c-format
3891msgid "Address to obtain hostlist: `%s'\n" 3891msgid "Address to obtain hostlist: `%s'\n"
3892msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 3892msgstr "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
3896msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" 3896msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n"
3897msgstr "`%s' ist nicht verfügbar." 3897msgstr "`%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
3901msgid "Could not start hostlist HTTP server on port %u\n" 3901msgid "Could not start hostlist HTTP server on port %u\n"
3902msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" 3902msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n"
@@ -3936,11 +3936,11 @@ msgstr "Informationen über andere GNUnet Knoten ausgeben."
3936msgid "Print information about mesh tunnels and peers." 3936msgid "Print information about mesh tunnels and peers."
3937msgstr "Informationen über andere GNUnet Knoten ausgeben." 3937msgstr "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
3940msgid "Wrong CORE service\n" 3940msgid "Wrong CORE service\n"
3941msgstr "" 3941msgstr ""
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
3945msgid "Mesh service could not access hostkey: %s. Exiting.\n" 3945msgid "Mesh service could not access hostkey: %s. Exiting.\n"
3946msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" 3946msgstr "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"
3966msgstr "GNUnet Konfiguration" 3965msgstr "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
3973msgid "" 3972msgid ""
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 ""
4307msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" 4306msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n"
4308msgstr "" 4307msgstr ""
4309 4308
4310#: src/nat/nat.c:795 4309#: src/nat/nat.c:834
4311#, c-format 4310#, c-format
4312msgid "gnunet-helper-nat-server generated malformed address `%s'\n" 4311msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
4313msgstr "" 4312msgstr ""
4314 4313
4315#: src/nat/nat.c:844 4314#: src/nat/nat.c:883
4316#, fuzzy, c-format 4315#, fuzzy, c-format
4317msgid "Failed to start %s\n" 4316msgid "Failed to start %s\n"
4318msgstr "Fehler beim Starten der Collection.\n" 4317msgstr "Fehler beim Starten der Collection.\n"
4319 4318
4320#: src/nat/nat.c:1113 4319#: src/nat/nat.c:1152
4321msgid "malformed" 4320msgid "malformed"
4322msgstr "" 4321msgstr ""
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
4326msgid "" 4325msgid ""
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"
4329msgstr "" 4328msgstr ""
4330 4329
4331#: src/nat/nat.c:1326 4330#: src/nat/nat.c:1365
4332msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" 4331msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
4333msgstr "" 4332msgstr ""
4334 4333
4335#: src/nat/nat.c:1337 4334#: src/nat/nat.c:1376
4336#, c-format 4335#, c-format
4337msgid "Running gnunet-helper-nat-client %s %s %u\n" 4336msgid "Running gnunet-helper-nat-client %s %s %u\n"
4338msgstr "" 4337msgstr ""
@@ -4355,46 +4354,46 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
4355msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" 4354msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
4356msgstr "" 4355msgstr ""
4357 4356
4358#: src/nse/gnunet-nse-profiler.c:885 4357#: src/nse/gnunet-nse-profiler.c:884
4359#, fuzzy 4358#, fuzzy
4360msgid "limit to the number of connections to NSE services, 0 for none" 4359msgid "limit to the number of connections to NSE services, 0 for none"
4361msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden." 4360msgstr "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
4364msgid "name of the file for writing connection information and statistics" 4363msgid "name of the file for writing connection information and statistics"
4365msgstr "" 4364msgstr ""
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
4368msgid "name of the file with the login information for the testbed" 4367msgid "name of the file with the login information for the testbed"
4369msgstr "" 4368msgstr ""
4370 4369
4371#: src/nse/gnunet-nse-profiler.c:894 4370#: src/nse/gnunet-nse-profiler.c:893
4372msgid "name of the file for writing the main results" 4371msgid "name of the file for writing the main results"
4373msgstr "" 4372msgstr ""
4374 4373
4375#: src/nse/gnunet-nse-profiler.c:897 4374#: src/nse/gnunet-nse-profiler.c:896
4376msgid "Number of peers to run in each round, separated by commas" 4375msgid "Number of peers to run in each round, separated by commas"
4377msgstr "" 4376msgstr ""
4378 4377
4379#: src/nse/gnunet-nse-profiler.c:903 4378#: src/nse/gnunet-nse-profiler.c:902
4380msgid "delay between rounds" 4379msgid "delay between rounds"
4381msgstr "" 4380msgstr ""
4382 4381
4383#: src/nse/gnunet-nse-profiler.c:912 4382#: src/nse/gnunet-nse-profiler.c:911
4384#, fuzzy 4383#, fuzzy
4385msgid "Measure quality and performance of the NSE service." 4384msgid "Measure quality and performance of the NSE service."
4386msgstr "Auf den Dienst konnte nicht zugegriffen werden" 4385msgstr "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
4390msgid "NSE service could not access hostkey: %s\n" 4389msgid "NSE service could not access hostkey: %s\n"
4391msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n" 4390msgstr "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
4394msgid "NSE service is lacking key configuration settings. Exiting.\n" 4393msgid "NSE service is lacking key configuration settings. Exiting.\n"
4395msgstr "" 4394msgstr ""
4396 4395
4397#: src/nse/gnunet-service-nse.c:1524 4396#: src/nse/gnunet-service-nse.c:1508
4398#, fuzzy 4397#, fuzzy
4399msgid "Invalid work requirement for NSE service. Exiting.\n" 4398msgid "Invalid work requirement for NSE service. Exiting.\n"
4400msgstr "Ungültige Parameter. Abbruch.\n" 4399msgstr "Ungültige Parameter. Abbruch.\n"
@@ -4404,21 +4403,21 @@ msgstr "Ungültige Parameter. Abbruch.\n"
4404msgid "Removing expired address of transport `%s'\n" 4403msgid "Removing expired address of transport `%s'\n"
4405msgstr "Verfügbare(r) Transport(e): %s\n" 4404msgstr "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
4409msgid "Failed to parse HELLO in file `%s': %s\n" 4408msgid "Failed to parse HELLO in file `%s': %s\n"
4410msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 4409msgstr "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
4414msgid "Failed to parse HELLO in file `%s': %s %u \n" 4413msgid "Failed to parse HELLO in file `%s': %s %u \n"
4415msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 4414msgstr "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
4418msgid "# peers known" 4417msgid "# peers known"
4419msgstr "" 4418msgstr ""
4420 4419
4421#: src/peerinfo/gnunet-service-peerinfo.c:480 4420#: src/peerinfo/gnunet-service-peerinfo.c:481
4422#, c-format 4421#, c-format
4423msgid "" 4422msgid ""
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
4431msgid "Scanning directory `%s'\n" 4430msgid "Scanning directory `%s'\n"
4432msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 4431msgstr "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
4436msgid "Still no peers found in `%s'!\n" 4435msgid "Still no peers found in `%s'!\n"
4437msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" 4436msgstr "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
4441msgid "Cleaning up directory `%s'\n" 4440msgid "Cleaning up directory `%s'\n"
4442msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 4441msgstr "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
4446msgid "Importing HELLOs from `%s'\n" 4445msgid "Importing HELLOs from `%s'\n"
4447msgstr "" 4446msgstr ""
@@ -4658,81 +4657,73 @@ msgstr ""
4658msgid "Daemon to announce regular expressions for the peer using mesh." 4657msgid "Daemon to announce regular expressions for the peer using mesh."
4659msgstr "" 4658msgstr ""
4660 4659
4661#: src/regex/gnunet-regex-profiler.c:1246 4660#: src/regex/gnunet-regex-profiler.c:1247
4662#, fuzzy 4661#, fuzzy
4663msgid "No configuration file given. Exiting\n" 4662msgid "No configuration file given. Exiting\n"
4664msgstr "Konfigurationsdatei FILENAME verwenden" 4663msgstr "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
4668msgid "Configuration option \"regex_prefix\" missing. Exiting\n" 4667msgid "Configuration option \"regex_prefix\" missing. Exiting\n"
4669msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n" 4668msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
4670 4669
4671#: src/regex/gnunet-regex-profiler.c:1276 4670#: src/regex/gnunet-regex-profiler.c:1287
4672msgid "No hosts-file specified on command line. Exiting.\n"
4673msgstr ""
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
4678msgid "No policy directory specified on command line. Exiting.\n" 4673msgid "No policy directory specified on command line. Exiting.\n"
4679msgstr "" 4674msgstr ""
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
4684msgid "Specified policies directory does not exist. Exiting.\n" 4679msgid "Specified policies directory does not exist. Exiting.\n"
4685msgstr "" 4680msgstr ""
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
4689msgid "No files found in `%s'\n" 4684msgid "No files found in `%s'\n"
4690msgstr "Dienst `%s' konnte nicht ordentlich entladen werden!\n" 4685msgstr "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
4693msgid "No search strings file given. Exiting.\n" 4688msgid "No search strings file given. Exiting.\n"
4694msgstr "" 4689msgstr ""
4695 4690
4696#: src/regex/gnunet-regex-profiler.c:1314 4691#: src/regex/gnunet-regex-profiler.c:1319
4697#, fuzzy 4692#, fuzzy
4698msgid "" 4693msgid ""
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"
4701msgstr "Fehler beim Verlassen der DHT.\n" 4696msgstr "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
4705msgid "Error loading search strings. Exiting.\n" 4700msgid "Error loading search strings. Exiting.\n"
4706msgstr "Fehler beim Verlassen der DHT.\n" 4701msgstr "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
4710msgid "name of the file for writing statistics" 4705msgid "name of the file for writing statistics"
4711msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" 4706msgstr "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
4714msgid "wait TIMEOUT before considering a string match as failed" 4709msgid "wait TIMEOUT before ending the experiment"
4715msgstr ""
4716
4717#: src/regex/gnunet-regex-profiler.c:1395
4718msgid "number of search strings to read from search strings file"
4719msgstr "" 4710msgstr ""
4720 4711
4721#: src/regex/gnunet-regex-profiler.c:1398 4712#: src/regex/gnunet-regex-profiler.c:1400
4722msgid "directory with policy files" 4713msgid "directory with policy files"
4723msgstr "" 4714msgstr ""
4724 4715
4725#: src/regex/gnunet-regex-profiler.c:1401 4716#: src/regex/gnunet-regex-profiler.c:1403
4726#, fuzzy 4717#, fuzzy
4727msgid "name of file with input strings" 4718msgid "name of file with input strings"
4728msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" 4719msgstr "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
4732msgid "name of file with hosts' names" 4723msgid "name of file with hosts' names"
4733msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" 4724msgstr "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
4736msgid "Profiler for regex" 4727msgid "Profiler for regex"
4737msgstr "" 4728msgstr ""
4738 4729
@@ -4851,7 +4842,7 @@ msgstr ""
4851msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" 4842msgid "Could not parse execution interval for `%s', set to default 60 sec.\n"
4852msgstr "" 4843msgstr ""
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
4856msgid "" 4847msgid ""
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 ""
4862msgid "Job command file not given. Exiting\n" 4853msgid "Job command file not given. Exiting\n"
4863msgstr "Konfigurationsdatei FILENAME verwenden" 4854msgstr "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
4867msgid "Waiting for child to exit.\n" 4858msgid "Waiting for child to exit.\n"
4868msgstr "" 4859msgstr ""
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
4874msgid "Spawning process `%s'\n" 4865msgid "Spawning process `%s'\n"
4875msgstr "Collection `%s' begonnen.\n" 4866msgstr "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
4879msgid "Exiting as the number of peers is %u\n" 4870msgid "Exiting as the number of peers is %u\n"
4880msgstr "Maximale Anzahl an Chat Clients erreicht.\n" 4871msgstr "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
4883msgid "create COUNT number of peers" 4874msgid "create COUNT number of peers"
4884msgstr "" 4875msgstr ""
4885 4876
4886#: src/testbed/gnunet-testbed-profiler.c:278 4877#: src/testbed/gnunet-testbed-profiler.c:280
4887msgid "tolerate COUNT number of continious timeout failures" 4878msgid "tolerate COUNT number of continious timeout failures"
4888msgstr "" 4879msgstr ""
4889 4880
@@ -4902,56 +4893,56 @@ msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n"
4902msgid "Hosts file %s cannot be read\n" 4893msgid "Hosts file %s cannot be read\n"
4903msgstr "Sitzungsschlüssel von Knoten `%s' konnte nicht überprüft werden.\n" 4894msgstr "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
4907msgid "The function %s is only available when compiled with (--with-ll)\n" 4898msgid "The function %s is only available when compiled with (--with-ll)\n"
4908msgstr "" 4899msgstr ""
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
4912msgid "Adding host %u failed with error: %s\n" 4903msgid "Adding host %u failed with error: %s\n"
4913msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n" 4904msgstr "`%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
4916msgid "Linking controllers failed. Exiting" 4907msgid "Linking controllers failed. Exiting"
4917msgstr "" 4908msgstr ""
4918 4909
4919#: src/testbed/testbed_api_testbed.c:913 4910#: src/testbed/testbed_api_testbed.c:1094
4920#, c-format 4911#, c-format
4921msgid "Host registration failed for a host. Error: %s\n" 4912msgid "Host registration failed for a host. Error: %s\n"
4922msgstr "" 4913msgstr ""
4923 4914
4924#: src/testbed/testbed_api_testbed.c:978 4915#: src/testbed/testbed_api_testbed.c:1175
4925msgid "Controller crash detected. Shutting down.\n" 4916msgid "Controller crash detected. Shutting down.\n"
4926msgstr "" 4917msgstr ""
4927 4918
4928#: src/testbed/testbed_api_testbed.c:1081 4919#: src/testbed/testbed_api_testbed.c:1320
4929#, c-format 4920#, c-format
4930msgid "Host %s cannot start testbed\n" 4921msgid "Host %s cannot start testbed\n"
4931msgstr "" 4922msgstr ""
4932 4923
4933#: src/testbed/testbed_api_testbed.c:1085 4924#: src/testbed/testbed_api_testbed.c:1324
4934msgid "Testbed cannot be started on localhost\n" 4925msgid "Testbed cannot be started on localhost\n"
4935msgstr "" 4926msgstr ""
4936 4927
4937#: src/testbed/testbed_api_testbed.c:1120 4928#: src/testbed/testbed_api_testbed.c:1365
4938#, fuzzy 4929#, fuzzy
4939msgid "Cannot start the master controller" 4930msgid "Cannot start the master controller"
4940msgstr "GNUnet testbed Controller starten." 4931msgstr "GNUnet testbed Controller starten."
4941 4932
4942#: src/testbed/testbed_api_testbed.c:1138 4933#: src/testbed/testbed_api_testbed.c:1383
4943msgid "Shutting down testbed due to timeout while setup.\n" 4934msgid "Shutting down testbed due to timeout while setup.\n"
4944msgstr "" 4935msgstr ""
4945 4936
4946#: src/testbed/testbed_api_testbed.c:1197 4937#: src/testbed/testbed_api_testbed.c:1443
4947msgid "No hosts loaded from LoadLeveler. Need at least one host\n" 4938msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
4948msgstr "" 4939msgstr ""
4949 4940
4950#: src/testbed/testbed_api_testbed.c:1209 4941#: src/testbed/testbed_api_testbed.c:1455
4951msgid "No hosts loaded. Need at least one host\n" 4942msgid "No hosts loaded. Need at least one host\n"
4952msgstr "" 4943msgstr ""
4953 4944
4954#: src/testbed/testbed_api_testbed.c:1233 4945#: src/testbed/testbed_api_testbed.c:1479
4955msgid "Specified topology must be supported by testbed" 4946msgid "Specified topology must be supported by testbed"
4956msgstr "" 4947msgstr ""
4957 4948
@@ -5101,7 +5092,7 @@ msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
5101msgid "Failed to start `%s': %s\n" 5092msgid "Failed to start `%s': %s\n"
5102msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n" 5093msgstr "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
5106msgid "Failed to load configuration from %s\n" 5097msgid "Failed to load configuration from %s\n"
5107msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':" 5098msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
@@ -5255,7 +5246,7 @@ msgstr ""
5255msgid "# bytes payload dropped (other peer was not connected)" 5246msgid "# bytes payload dropped (other peer was not connected)"
5256msgstr "" 5247msgstr ""
5257 5248
5258#: src/transport/gnunet-service-transport_clients.c:728 5249#: src/transport/gnunet-service-transport_clients.c:733
5259#, fuzzy 5250#, fuzzy
5260msgid "# REQUEST CONNECT messages received" 5251msgid "# REQUEST CONNECT messages received"
5261msgstr "# verschlüsselter PONG Nachrichten empfangen" 5252msgstr "# verschlüsselter PONG Nachrichten empfangen"
@@ -5328,53 +5319,53 @@ msgstr "Verfolgt die Bandbreitennutzung von gnunetd"
5328msgid "# ms throttling suggested" 5319msgid "# ms throttling suggested"
5329msgstr "" 5320msgstr ""
5330 5321
5331#: src/transport/gnunet-service-transport_neighbours.c:2770 5322#: src/transport/gnunet-service-transport_neighbours.c:2774
5332#, fuzzy 5323#, fuzzy
5333msgid "# unexpected CONNECT_ACK messages (no peer)" 5324msgid "# unexpected CONNECT_ACK messages (no peer)"
5334msgstr "COUNT Nachrichten versenden" 5325msgstr "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
5339msgid "# unexpected CONNECT_ACK messages (not ready)" 5330msgid "# unexpected CONNECT_ACK messages (not ready)"
5340msgstr "COUNT Nachrichten versenden" 5331msgstr "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
5344msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" 5335msgid "# unexpected CONNECT_ACK messages (waiting on ATS)"
5345msgstr "COUNT Nachrichten versenden" 5336msgstr "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
5349msgid "# unexpected CONNECT_ACK messages (disconnecting)" 5340msgid "# unexpected CONNECT_ACK messages (disconnecting)"
5350msgstr "COUNT Nachrichten versenden" 5341msgstr "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
5354msgid "# unexpected SESSION ACK messages" 5345msgid "# unexpected SESSION ACK messages"
5355msgstr "# verschlüsselter PONG Nachrichten gesendet" 5346msgstr "# 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
5358msgid "# SET QUOTA messages ignored (no such peer)" 5349msgid "# SET QUOTA messages ignored (no such peer)"
5359msgstr "" 5350msgstr ""
5360 5351
5361#: src/transport/gnunet-service-transport_neighbours.c:3115 5352#: src/transport/gnunet-service-transport_neighbours.c:3119
5362msgid "# disconnects due to quota of 0" 5353msgid "# disconnects due to quota of 0"
5363msgstr "" 5354msgstr ""
5364 5355
5365#: src/transport/gnunet-service-transport_neighbours.c:3146 5356#: src/transport/gnunet-service-transport_neighbours.c:3150
5366msgid "# disconnect messages ignored (old format)" 5357msgid "# disconnect messages ignored (old format)"
5367msgstr "" 5358msgstr ""
5368 5359
5369#: src/transport/gnunet-service-transport_neighbours.c:3157 5360#: src/transport/gnunet-service-transport_neighbours.c:3161
5370msgid "# disconnect messages ignored (timestamp)" 5361msgid "# disconnect messages ignored (timestamp)"
5371msgstr "" 5362msgstr ""
5372 5363
5373#: src/transport/gnunet-service-transport_neighbours.c:3188 5364#: src/transport/gnunet-service-transport_neighbours.c:3192
5374msgid "# other peer asked to disconnect from us" 5365msgid "# other peer asked to disconnect from us"
5375msgstr "" 5366msgstr ""
5376 5367
5377#: src/transport/gnunet-service-transport_neighbours.c:3283 5368#: src/transport/gnunet-service-transport_neighbours.c:3287
5378#, fuzzy 5369#, fuzzy
5379msgid "# disconnected from peer upon explicit request" 5370msgid "# disconnected from peer upon explicit request"
5380msgstr "# gap Anfragen verworfen: Kollision in RT" 5371msgstr "# gap Anfragen verworfen: Kollision in RT"
@@ -5801,92 +5792,92 @@ msgstr "# Bytes gesendet über TCP"
5801msgid "# bytes dropped by SMTP (outgoing)" 5792msgid "# bytes dropped by SMTP (outgoing)"
5802msgstr "# Bytes verworfen von TCP (ausgehend)" 5793msgstr "# 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
5806msgid "Unexpected address length: %u bytes\n" 5797msgid "Unexpected address length: %u bytes\n"
5807msgstr "" 5798msgstr ""
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
5816msgid "# bytes currently in TCP buffers" 5807msgid "# bytes currently in TCP buffers"
5817msgstr "# Bytes gesendet über TCP" 5808msgstr "# 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
5824msgid "# TCP sessions active" 5815msgid "# TCP sessions active"
5825msgstr "# Sitzungsschlüssel akzeptiert" 5816msgstr "# 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
5829msgid "# bytes discarded by TCP (timeout)" 5820msgid "# bytes discarded by TCP (timeout)"
5830msgstr "# Bytes verworfen von TCP (ausgehend)" 5821msgstr "# 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
5834msgid "# bytes transmitted via TCP" 5825msgid "# bytes transmitted via TCP"
5835msgstr "# Bytes des Typs %d übertragen" 5826msgstr "# 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
5839msgid "# bytes discarded by TCP (disconnect)" 5830msgid "# bytes discarded by TCP (disconnect)"
5840msgstr "# Bytes verworfen von TCP (ausgehend)" 5831msgstr "# 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
5844msgid "Trying to send with invalid session %p\n" 5835msgid "Trying to send with invalid session %p\n"
5845msgstr "" 5836msgstr ""
5846 5837
5847#: src/transport/plugin_transport_tcp.c:1349 5838#: src/transport/plugin_transport_tcp.c:1350
5848#, c-format 5839#, c-format
5849msgid "Address of unexpected length: %u\n" 5840msgid "Address of unexpected length: %u\n"
5850msgstr "" 5841msgstr ""
5851 5842
5852#: src/transport/plugin_transport_tcp.c:1466 5843#: src/transport/plugin_transport_tcp.c:1467
5853msgid "# transport-service disconnect requests for TCP" 5844msgid "# transport-service disconnect requests for TCP"
5854msgstr "" 5845msgstr ""
5855 5846
5856#: src/transport/plugin_transport_tcp.c:1867 5847#: src/transport/plugin_transport_tcp.c:1868
5857#, fuzzy 5848#, fuzzy
5858msgid "# TCP WELCOME messages received" 5849msgid "# TCP WELCOME messages received"
5859msgstr "# verschlüsselter PONG Nachrichten empfangen" 5850msgstr "# verschlüsselter PONG Nachrichten empfangen"
5860 5851
5861#: src/transport/plugin_transport_tcp.c:2036 5852#: src/transport/plugin_transport_tcp.c:2037
5862msgid "# bytes received via TCP" 5853msgid "# bytes received via TCP"
5863msgstr "# Bytes empfangen über TCP" 5854msgstr "# Bytes empfangen über TCP"
5864 5855
5865#: src/transport/plugin_transport_tcp.c:2118 5856#: src/transport/plugin_transport_tcp.c:2119
5866msgid "# network-level TCP disconnect events" 5857msgid "# network-level TCP disconnect events"
5867msgstr "" 5858msgstr ""
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
5872msgid "Require valid port number for service `%s' in configuration!\n" 5863msgid "Require valid port number for service `%s' in configuration!\n"
5873msgstr "" 5864msgstr ""
5874 5865
5875#: src/transport/plugin_transport_tcp.c:2358 5866#: src/transport/plugin_transport_tcp.c:2359
5876#, fuzzy 5867#, fuzzy
5877msgid "Failed to start service.\n" 5868msgid "Failed to start service.\n"
5878msgstr "Fehler beim Starten der Collection.\n" 5869msgstr "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
5882msgid "TCP transport listening on port %llu\n" 5873msgid "TCP transport listening on port %llu\n"
5883msgstr "Der Transportdienst auf Port %d konnte nicht gestartet werden.\n" 5874msgstr "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
5886msgid "TCP transport not listening on any port (client only)\n" 5877msgid "TCP transport not listening on any port (client only)\n"
5887msgstr "" 5878msgstr ""
5888 5879
5889#: src/transport/plugin_transport_tcp.c:2452 5880#: src/transport/plugin_transport_tcp.c:2456
5890#, c-format 5881#, c-format
5891msgid "TCP transport advertises itself as being on port %llu\n" 5882msgid "TCP transport advertises itself as being on port %llu\n"
5892msgstr "" 5883msgstr ""
@@ -5911,14 +5902,14 @@ msgstr ""
5911msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" 5902msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
5912msgstr "" 5903msgstr ""
5913 5904
5914#: src/transport/plugin_transport_udp.c:2520 5905#: src/transport/plugin_transport_udp.c:2350
5915#, c-format 5906#, c-format
5916msgid "" 5907msgid ""
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"
5919msgstr "" 5910msgstr ""
5920 5911
5921#: src/transport/plugin_transport_udp.c:2534 5912#: src/transport/plugin_transport_udp.c:2364
5922#, c-format 5913#, c-format
5923msgid "" 5914msgid ""
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"
5927msgstr "" 5918msgstr ""
5928 5919
5929#: src/transport/plugin_transport_udp.c:2775 5920#: src/transport/plugin_transport_udp.c:2664
5930#, fuzzy 5921#, fuzzy
5931msgid "Failed to open UDP sockets\n" 5922msgid "Failed to open UDP sockets\n"
5932msgstr "Fehler beim Binden an UDP6 Port %d.\n" 5923msgstr "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
5936msgid "Given `%s' option is out of range: %llu > %u\n" 5927msgid "Given `%s' option is out of range: %llu > %u\n"
5937msgstr "" 5928msgstr ""
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
5941msgid "Invalid IPv6 address: `%s'\n" 5932msgid "Invalid IPv6 address: `%s'\n"
5942msgstr "Ungültiger Parameter: `%s'\n" 5933msgstr "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
5937msgid "Failed to create network sockets, plugin failed\n"
5938msgstr "Namespace `%s' konnte nicht erstellt werden (existiert bereits?).\n"
5939
5940#: src/transport/plugin_transport_unix.c:1427
5945#, fuzzy 5941#, fuzzy
5946msgid "Failed to open UNIX sockets\n" 5942msgid "Failed to open UNIX listen socket\n"
5947msgstr "Datei wurde als `%s' gespeichert.\n" 5943msgstr "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 ""
6260msgid "gnunet-ecc failed" 6256msgid "gnunet-ecc failed"
6261msgstr "gnunet-update ausführen" 6257msgstr "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
6265msgid "ECC signature verification failed at %s:%d: %s\n" 6261msgid "ECC signature verification failed at %s:%d: %s\n"
6266msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" 6262msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
@@ -6526,17 +6522,17 @@ msgstr ""
6526msgid "Perform default-actions for GNUnet URIs" 6522msgid "Perform default-actions for GNUnet URIs"
6527msgstr "" 6523msgstr ""
6528 6524
6529#: src/util/helper.c:271 6525#: src/util/helper.c:322
6530#, fuzzy, c-format 6526#, fuzzy, c-format
6531msgid "Error reading from `%s': %s\n" 6527msgid "Error reading from `%s': %s\n"
6532msgstr "Fehler beim Anlegen des Benutzers" 6528msgstr "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
6536msgid "Failed to parse inbound message from helper `%s'\n" 6532msgid "Failed to parse inbound message from helper `%s'\n"
6537msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n" 6533msgstr "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
6541msgid "Error writing to `%s': %s\n" 6537msgid "Error writing to `%s': %s\n"
6542msgstr "Fehler beim Anlegen des Benutzers" 6538msgstr "Fehler beim Anlegen des Benutzers"
diff --git a/po/es.po b/po/es.po
index 4603f756d..fe331137a 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
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"
40msgid "Failed to remove servicehome directory %s\n" 40msgid "Failed to remove servicehome directory %s\n"
41msgstr "Se produjo un fallo al eliminar el directorio «servicehome» %s.\n" 41msgstr "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
45msgid "Message was sent successfully" 45msgid "Message was sent successfully"
46msgstr "El almacén de nombres añadió el registro satisfactoriamente" 46msgstr "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
50msgid "Misconfiguration (can't connect to the ARM service)" 50msgid "Misconfiguration (can't connect to the ARM service)"
51msgstr "¡Se produjo un fallo al conectar con el servicio dv!\n" 51msgstr "¡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
55msgid "We disconnected from ARM before we could send a request" 55msgid "We disconnected from ARM before we could send a request"
56msgstr "# desconexiones del par debido a una petición explícita" 56msgstr "# 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
59msgid "ARM API is busy" 59msgid "ARM API is busy"
60msgstr "" 60msgstr ""
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
64msgid "Request doesn't fit into a message" 64msgid "Request doesn't fit into a message"
65msgstr "no imprime mensajes de estado" 65msgstr "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
71msgid "Request timed out" 71msgid "Request timed out"
72msgstr "plazo de consenso" 72msgstr "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
76msgid "Unknown request status" 76msgid "Unknown request status"
77msgstr "Usuario desconocido «%s»\n" 77msgstr "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
81msgid "%s is stopped" 81msgid "%s is stopped"
82msgstr "# elementos almacenados" 82msgstr "# 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
86msgid "%s is starting" 86msgid "%s is starting"
87msgstr "'%s' comenzando\n" 87msgstr "'%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
91msgid "%s is stopping" 91msgid "%s is stopping"
92msgstr "" 92msgstr ""
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
96msgid "%s is starting already" 96msgid "%s is starting already"
97msgstr "'%s' comenzando\n" 97msgstr "'%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
101msgid "%s is stopping already" 101msgid "%s is stopping already"
102msgstr "" 102msgstr ""
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
106msgid "%s is started already" 106msgid "%s is started already"
107msgstr "" 107msgstr ""
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
111msgid "%s is stopped already" 111msgid "%s is stopped already"
112msgstr "" 112msgstr ""
@@ -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
119msgid "%s service is not known to ARM" 119msgid "%s service is not known to ARM"
120msgstr "El servicio «%s» es desconocido para el ARM.\n" 120msgstr "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
124msgid "%s service failed to start" 124msgid "%s service failed to start"
125msgstr "El proceso del servicio no devolvió un estado\n" 125msgstr "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
130msgid "%s service can't be started because ARM is shutting down" 130msgid "%s service can't be started because ARM is shutting down"
131msgstr "Petición ignorada porque el ARM se está apagando.\n" 131msgstr "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
135msgid "%.s Unknown result code." 135msgid "%.s Unknown result code."
136msgstr "Código de respuesta del ARM desconocido.\n" 136msgstr "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
888msgid "# peers connected" 888msgid "# peers connected"
889msgstr "# pares conectados" 889msgstr "# 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
1363msgid "be verbose (print progress information)" 1363msgid "be verbose (print progress information)"
1364msgstr "ser prolijo (imprime información de progreso)" 1364msgstr "ser prolijo (imprime información de progreso)"
1365 1365
@@ -2278,7 +2278,7 @@ msgstr ""
2278msgid "no-name" 2278msgid "no-name"
2279msgstr "sin nombre" 2279msgstr "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
2283msgid "ECC signing failed at %s:%d: %s\n" 2283msgid "ECC signing failed at %s:%d: %s\n"
2284msgstr "El firmado ECC falló en %s:%d: %s\n" 2284msgstr "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)"
2474msgid "Unrecognized URI type" 2474msgid "Unrecognized URI type"
2475msgstr "Tipo de URI no reconocido" 2475msgstr "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
2478msgid "Lacking key configuration settings.\n" 2478msgid "Lacking key configuration settings.\n"
2479msgstr "Falta configuración sobre las opciones de claves.\n" 2479msgstr "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
2483msgid "Could not access hostkey file `%s'.\n" 2483msgid "Could not access hostkey file `%s'.\n"
2484msgstr "No se pudo acceder al fichero de clave de máquina «%s».\n" 2484msgstr "No se pudo acceder al fichero de clave de máquina «%s».\n"
@@ -3806,15 +3806,15 @@ msgstr ""
3806msgid "Hostlist file `%s' could not be removed\n" 3806msgid "Hostlist file `%s' could not be removed\n"
3807msgstr "El fichero de listas de máquinas «%s» no pudo ser eliminado\n" 3807msgstr "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
3810msgid "bytes in hostlist" 3810msgid "bytes in hostlist"
3811msgstr "bytes en la lista de máquinas" 3811msgstr "bytes en la lista de máquinas"
3812 3812
3813#: src/hostlist/hostlist-server.c:157 3813#: src/hostlist/hostlist-server.c:161
3814msgid "expired addresses encountered" 3814msgid "expired addresses encountered"
3815msgstr "direcciones expiradas encontradas" 3815msgstr "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
3829msgid "HELLOs without addresses encountered (ignored)" 3829msgid "HELLOs without addresses encountered (ignored)"
3830msgstr "«HELLO» sin dirección encontrados (ignorados)" 3830msgstr "«HELLO» sin dirección encontrados (ignorados)"
3831 3831
3832#: src/hostlist/hostlist-server.c:219 3832#: src/hostlist/hostlist-server.c:224
3833msgid "bytes not included in hostlist (size limit)" 3833msgid "bytes not included in hostlist (size limit)"
3834msgstr "bytes no incluidos en la lista de máquinas (límite de tamaño)" 3834msgstr "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
3838msgid "Refusing `%s' request to hostlist server\n" 3838msgid "Refusing `%s' request to hostlist server\n"
3839msgstr "Rechazando petición «%s» al servidor de listas de máquinas\n" 3839msgstr "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
3842msgid "hostlist requests refused (not HTTP GET)" 3842msgid "hostlist requests refused (not HTTP GET)"
3843msgstr "Peticiones de listas de máquinas rechazadas (no HTTP GET)" 3843msgstr "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
3847msgid "Refusing `%s' request with %llu bytes of upload data\n" 3847msgid "Refusing `%s' request with %llu bytes of upload data\n"
3848msgstr "Rechazando petición «%s» con %llu bytes de datos de subida\n" 3848msgstr "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
3851msgid "hostlist requests refused (upload data)" 3851msgid "hostlist requests refused (upload data)"
3852msgstr "Peticiones de listas de máquinas rechazadas (datos de subida)" 3852msgstr "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
3855msgid "Could not handle hostlist request since I do not have a response yet\n" 3855msgid "Could not handle hostlist request since I do not have a response yet\n"
3856msgstr "" 3856msgstr ""
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
3861msgid "hostlist requests refused (not ready)" 3861msgid "hostlist requests refused (not ready)"
3862msgstr "Peticiones de listas de máquinas rechazadas (no preparados)" 3862msgstr "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
3865msgid "Received request for our hostlist\n" 3865msgid "Received request for our hostlist\n"
3866msgstr "Peticiones recibidas de nuestra lista de máquinas\n" 3866msgstr "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
3869msgid "hostlist requests processed" 3869msgid "hostlist requests processed"
3870msgstr "Peticiones de lista de máquinas procesadas" 3870msgstr "Peticiones de lista de máquinas procesadas"
3871 3871
3872#: src/hostlist/hostlist-server.c:341 3872#: src/hostlist/hostlist-server.c:346
3873msgid "# hostlist advertisements send" 3873msgid "# hostlist advertisements send"
3874msgstr "# anuncios de listas de máquinas enviados" 3874msgstr "# anuncios de listas de máquinas enviados"
3875 3875
3876#: src/hostlist/hostlist-server.c:384 3876#: src/hostlist/hostlist-server.c:389
3877msgid "Advertisement message could not be queued by core\n" 3877msgid "Advertisement message could not be queued by core\n"
3878msgstr "" 3878msgstr ""
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
3883msgid "Could not access PEERINFO service. Exiting.\n" 3883msgid "Could not access PEERINFO service. Exiting.\n"
3884msgstr "" 3884msgstr ""
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
3890msgid "Invalid port number %llu. Exiting.\n" 3890msgid "Invalid port number %llu. Exiting.\n"
3891msgstr "Número de puerto %llu no válido. Saliendo.\n" 3891msgstr "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
3895msgid "Hostlist service starts on %s:%llu\n" 3895msgid "Hostlist service starts on %s:%llu\n"
3896msgstr "Servicio de listas de máquinas arranca en %s:%llu\n" 3896msgstr "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
3900msgid "Address to obtain hostlist: `%s'\n" 3900msgid "Address to obtain hostlist: `%s'\n"
3901msgstr "Dirección para obtener la lista de máquinas: «%s»\n" 3901msgstr "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
3905msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" 3905msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n"
3906msgstr "¡«%s» no es una dirección IP válida! Ignorando «BINDTOIP».\n" 3906msgstr "¡«%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
3910msgid "Could not start hostlist HTTP server on port %u\n" 3910msgid "Could not start hostlist HTTP server on port %u\n"
3911msgstr "" 3911msgstr ""
@@ -3945,11 +3945,11 @@ msgstr "proveer información acerca de un túnel en particular"
3945msgid "Print information about mesh tunnels and peers." 3945msgid "Print information about mesh tunnels and peers."
3946msgstr "Imprimir información acerca de tuneles mesh y pares." 3946msgstr "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
3949msgid "Wrong CORE service\n" 3949msgid "Wrong CORE service\n"
3950msgstr "Servicio principal (CORE) erróneo\n" 3950msgstr "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
3954msgid "Mesh service could not access hostkey: %s. Exiting.\n" 3954msgid "Mesh service could not access hostkey: %s. Exiting.\n"
3955msgstr "" 3955msgstr ""
@@ -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
3985msgid "" 3984msgid ""
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
4325msgid "gnunet-helper-nat-server generated malformed address `%s'\n" 4324msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
4326msgstr "«gnunet-helper-nat-server» generó la dirección mal formada «%s»\n" 4325msgstr "«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
4330msgid "Failed to start %s\n" 4329msgid "Failed to start %s\n"
4331msgstr "Se produjo un fallo al arrancar %s\n" 4330msgstr "Se produjo un fallo al arrancar %s\n"
4332 4331
4333#: src/nat/nat.c:1113 4332#: src/nat/nat.c:1152
4334msgid "malformed" 4333msgid "malformed"
4335msgstr "mal formado" 4334msgstr "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
4339msgid "" 4338msgid ""
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
4347msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" 4346msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
4348msgstr "" 4347msgstr ""
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
4354msgid "Running gnunet-helper-nat-client %s %s %u\n" 4353msgid "Running gnunet-helper-nat-client %s %s %u\n"
4355msgstr "Ejecutando gnunet-helper-nat-client %s %s %u\n" 4354msgstr "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
4377msgid "limit to the number of connections to NSE services, 0 for none" 4376msgid "limit to the number of connections to NSE services, 0 for none"
4378msgstr "límite al número de conexiones a servicios NSE, 0 para ilimitadas" 4377msgstr "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
4381msgid "name of the file for writing connection information and statistics" 4380msgid "name of the file for writing connection information and statistics"
4382msgstr "" 4381msgstr ""
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
4386msgid "name of the file with the login information for the testbed" 4385msgid "name of the file with the login information for the testbed"
4387msgstr "" 4386msgstr ""
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
4392msgid "name of the file for writing the main results" 4391msgid "name of the file for writing the main results"
4393msgstr "nombre del fichero en el que escribir los resultados principales" 4392msgstr "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
4396msgid "Number of peers to run in each round, separated by commas" 4395msgid "Number of peers to run in each round, separated by commas"
4397msgstr "Número de pares a ejecutar en cada ronda, separados por comas" 4396msgstr "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
4400msgid "delay between rounds" 4399msgid "delay between rounds"
4401msgstr "retraso entre rondas" 4400msgstr "retraso entre rondas"
4402 4401
4403#: src/nse/gnunet-nse-profiler.c:912 4402#: src/nse/gnunet-nse-profiler.c:911
4404msgid "Measure quality and performance of the NSE service." 4403msgid "Measure quality and performance of the NSE service."
4405msgstr "Medir la calidad y rendimiento del servicio NSE." 4404msgstr "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
4409msgid "NSE service could not access hostkey: %s\n" 4408msgid "NSE service could not access hostkey: %s\n"
4410msgstr "El servicio NSE no puede acceder a la clave de máquina: %s\n" 4409msgstr "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
4413msgid "NSE service is lacking key configuration settings. Exiting.\n" 4412msgid "NSE service is lacking key configuration settings. Exiting.\n"
4414msgstr "" 4413msgstr ""
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
4418msgid "Invalid work requirement for NSE service. Exiting.\n" 4417msgid "Invalid work requirement for NSE service. Exiting.\n"
4419msgstr "Requisitos de trabajo no válidos para el servicio NSE. Saliendo.\n" 4418msgstr "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"
4423msgid "Removing expired address of transport `%s'\n" 4422msgid "Removing expired address of transport `%s'\n"
4424msgstr "Eliminando dirección de transporte «%s»\n" 4423msgstr "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
4428msgid "Failed to parse HELLO in file `%s': %s\n" 4427msgid "Failed to parse HELLO in file `%s': %s\n"
4429msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" 4428msgstr "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
4433msgid "Failed to parse HELLO in file `%s': %s %u \n" 4432msgid "Failed to parse HELLO in file `%s': %s %u \n"
4434msgstr "Se produjo un fallo al procesar «HELLO» en el fichero «%s»\n" 4433msgstr "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
4437msgid "# peers known" 4436msgid "# peers known"
4438msgstr "# pares conocidos" 4437msgstr "# 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
4442msgid "" 4441msgid ""
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
4450msgid "Scanning directory `%s'\n" 4449msgid "Scanning directory `%s'\n"
4451msgstr "Escaneando directorio «%s».\n" 4450msgstr "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
4455msgid "Still no peers found in `%s'!\n" 4454msgid "Still no peers found in `%s'!\n"
4456msgstr "¡Aún no se han encontrado pares en «%s»!\n" 4455msgstr "¡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
4460msgid "Cleaning up directory `%s'\n" 4459msgid "Cleaning up directory `%s'\n"
4461msgstr "Escaneando directorio «%s».\n" 4460msgstr "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
4465msgid "Importing HELLOs from `%s'\n" 4464msgid "Importing HELLOs from `%s'\n"
4466msgstr "Importando HELLO de «%s»\n" 4465msgstr "Importando HELLO de «%s»\n"
@@ -4671,22 +4670,16 @@ msgstr ""
4671msgid "Daemon to announce regular expressions for the peer using mesh." 4670msgid "Daemon to announce regular expressions for the peer using mesh."
4672msgstr "Demonio para anunciar expresiones regulares para el par usando mesh." 4671msgstr "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
4675msgid "No configuration file given. Exiting\n" 4674msgid "No configuration file given. Exiting\n"
4676msgstr "No se ha introducido ningún fichero de configuración. Saliendo\n" 4675msgstr "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
4680msgid "Configuration option \"regex_prefix\" missing. Exiting\n" 4679msgid "Configuration option \"regex_prefix\" missing. Exiting\n"
4681msgstr "Falta una opción de configuración (regex_prefix). Saliendo\n" 4680msgstr "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
4684msgid "No hosts-file specified on command line. Exiting.\n"
4685msgstr ""
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
4692msgid "No policy directory specified on command line. Exiting.\n" 4685msgid "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
4700msgid "Specified policies directory does not exist. Exiting.\n" 4693msgid "Specified policies directory does not exist. Exiting.\n"
4701msgstr "Las políticas de directorio especificadas no existen. Saliendo.\n" 4694msgstr "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
4705msgid "No files found in `%s'\n" 4698msgid "No files found in `%s'\n"
4706msgstr "No se han encontrado ficheros en «%s»\n" 4699msgstr "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
4709msgid "No search strings file given. Exiting.\n" 4702msgid "No search strings file given. Exiting.\n"
4710msgstr "No se ha proporcionado un fichero de cadenas de búsqueda. Saliendo.\n" 4703msgstr "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
4714msgid "" 4707msgid ""
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
4722msgid "Error loading search strings. Exiting.\n" 4715msgid "Error loading search strings. Exiting.\n"
4723msgstr "Error cargando cadenas de búsqueda. Saliendo.\n" 4716msgstr "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
4726msgid "name of the file for writing statistics" 4719msgid "name of the file for writing statistics"
4727msgstr "nombre del fichero para escribir las estadísticas" 4720msgstr "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
4730msgid "wait TIMEOUT before considering a string match as failed" 4723#, fuzzy
4724msgid "wait TIMEOUT before ending the experiment"
4731msgstr "" 4725msgstr ""
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
4736msgid "number of search strings to read from search strings file"
4737msgstr ""
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
4741msgid "directory with policy files" 4730msgid "directory with policy files"
4742msgstr "" 4731msgstr ""
4743 4732
4744#: src/regex/gnunet-regex-profiler.c:1401 4733#: src/regex/gnunet-regex-profiler.c:1403
4745#, fuzzy 4734#, fuzzy
4746msgid "name of file with input strings" 4735msgid "name of file with input strings"
4747msgstr "nombre del fichero para escribir las estadísticas" 4736msgstr "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
4751msgid "name of file with hosts' names" 4740msgid "name of file with hosts' names"
4752msgstr "nombre del fichero para escribir las estadísticas" 4741msgstr "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
4755msgid "Profiler for regex" 4744msgid "Profiler for regex"
4756msgstr "Perfilador para expresiones regulares." 4745msgstr "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
4879msgid "" 4868msgid ""
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 ""
4885msgid "Job command file not given. Exiting\n" 4874msgid "Job command file not given. Exiting\n"
4886msgstr "Fichero de configuración de trabajos no proporcionado. Saliendo\n" 4875msgstr "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
4890msgid "Waiting for child to exit.\n" 4879msgid "Waiting for child to exit.\n"
4891msgstr "Esperando a los pares para conectar (%u ciclos restantes)...\n" 4880msgstr "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
4895msgid "Spawning process `%s'\n" 4884msgid "Spawning process `%s'\n"
4896msgstr "Iniciando el proceso auxiliar (HELPER) «%s»\n" 4885msgstr "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
4900msgid "Exiting as the number of peers is %u\n" 4889msgid "Exiting as the number of peers is %u\n"
4901msgstr "El número máximo de conexiones es %u\n" 4890msgstr "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
4904msgid "create COUNT number of peers" 4893msgid "create COUNT number of peers"
4905msgstr "crea «COUNT» número de pares" 4894msgstr "crea «COUNT» número de pares"
4906 4895
4907#: src/testbed/gnunet-testbed-profiler.c:278 4896#: src/testbed/gnunet-testbed-profiler.c:280
4908msgid "tolerate COUNT number of continious timeout failures" 4897msgid "tolerate COUNT number of continious timeout failures"
4909msgstr "tolerar un número «COUNT» de continuas expiraciones de plazo" 4898msgstr "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"
4923msgid "Hosts file %s cannot be read\n" 4912msgid "Hosts file %s cannot be read\n"
4924msgstr "El archivo de máquinas %s no puede leerse\n" 4913msgstr "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
4928msgid "The function %s is only available when compiled with (--with-ll)\n" 4917msgid "The function %s is only available when compiled with (--with-ll)\n"
4929msgstr "" 4918msgstr ""
4930 4919
4931#: src/testbed/testbed_api_hosts.c:1856 4920#: src/testbed/testbed_api_hosts.c:1879
4932#, c-format 4921#, c-format
4933msgid "Adding host %u failed with error: %s\n" 4922msgid "Adding host %u failed with error: %s\n"
4934msgstr "No se pudo añadir la máquina %u por el error: %s\n" 4923msgstr "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
4937msgid "Linking controllers failed. Exiting" 4926msgid "Linking controllers failed. Exiting"
4938msgstr "Los controladores de enlazado fallaron. Saliendo" 4927msgstr "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
4942msgid "Host registration failed for a host. Error: %s\n" 4931msgid "Host registration failed for a host. Error: %s\n"
4943msgstr "El registro de máquinas falló para una máquina. Error: %s\n" 4932msgstr "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
4946msgid "Controller crash detected. Shutting down.\n" 4935msgid "Controller crash detected. Shutting down.\n"
4947msgstr "" 4936msgstr ""
4948 4937
4949#: src/testbed/testbed_api_testbed.c:1081 4938#: src/testbed/testbed_api_testbed.c:1320
4950#, c-format 4939#, c-format
4951msgid "Host %s cannot start testbed\n" 4940msgid "Host %s cannot start testbed\n"
4952msgstr "La máquina %s no puede comenzar la batería de pruebas\n" 4941msgstr "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
4955msgid "Testbed cannot be started on localhost\n" 4944msgid "Testbed cannot be started on localhost\n"
4956msgstr "La batería de pruebas no se puede iniciar en localhost\n" 4945msgstr "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
4959msgid "Cannot start the master controller" 4948msgid "Cannot start the master controller"
4960msgstr "No se puede iniciar el controlador maestro" 4949msgstr "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
4963msgid "Shutting down testbed due to timeout while setup.\n" 4952msgid "Shutting down testbed due to timeout while setup.\n"
4964msgstr "" 4953msgstr ""
4965 4954
4966#: src/testbed/testbed_api_testbed.c:1197 4955#: src/testbed/testbed_api_testbed.c:1443
4967#, fuzzy 4956#, fuzzy
4968msgid "No hosts loaded from LoadLeveler. Need at least one host\n" 4957msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
4969msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n" 4958msgstr "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
4972msgid "No hosts loaded. Need at least one host\n" 4961msgid "No hosts loaded. Need at least one host\n"
4973msgstr "No se han cargado máquinas. Se necesita al menos una máquina.\n" 4962msgstr "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
4976msgid "Specified topology must be supported by testbed" 4965msgid "Specified topology must be supported by testbed"
4977msgstr "" 4966msgstr ""
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 ""
5134msgid "Failed to start `%s': %s\n" 5123msgid "Failed to start `%s': %s\n"
5135msgstr "Se produjo un fallo al arrancar «%s»: %s\n" 5124msgstr "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
5139msgid "Failed to load configuration from %s\n" 5128msgid "Failed to load configuration from %s\n"
5140msgstr "Se produjo un fallo al cargar la configuración de %s\n" 5129msgstr "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"
5299msgid "# bytes payload dropped (other peer was not connected)" 5288msgid "# bytes payload dropped (other peer was not connected)"
5300msgstr "# bytes de «payload» omitidos (el otro par no estaba conectado)" 5289msgstr "# 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
5303msgid "# REQUEST CONNECT messages received" 5292msgid "# REQUEST CONNECT messages received"
5304msgstr "# mensajes «REQUEST CONNECT» recibidos" 5293msgstr "# mensajes «REQUEST CONNECT» recibidos"
5305 5294
@@ -5361,48 +5350,48 @@ msgstr "# violaciones de la cuota de ancho de banda por otros pares"
5361msgid "# ms throttling suggested" 5350msgid "# ms throttling suggested"
5362msgstr "# ms de impulso sugeridos" 5351msgstr "# ms de impulso sugeridos"
5363 5352
5364#: src/transport/gnunet-service-transport_neighbours.c:2770 5353#: src/transport/gnunet-service-transport_neighbours.c:2774
5365msgid "# unexpected CONNECT_ACK messages (no peer)" 5354msgid "# unexpected CONNECT_ACK messages (no peer)"
5366msgstr "# Mensajes «CONNECT_ACK» inesperados (sin par)" 5355msgstr "# 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
5370msgid "# unexpected CONNECT_ACK messages (not ready)" 5359msgid "# unexpected CONNECT_ACK messages (not ready)"
5371msgstr "# Mensajes «CONNECT_ACK» inesperados (no estaba preparado)" 5360msgstr "# 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
5374msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" 5363msgid "# unexpected CONNECT_ACK messages (waiting on ATS)"
5375msgstr "# Mensajes «CONNECT_ACK» inesperados (esperando en el ATS)" 5364msgstr "# 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
5378msgid "# unexpected CONNECT_ACK messages (disconnecting)" 5367msgid "# unexpected CONNECT_ACK messages (disconnecting)"
5379msgstr "# Mensajes «CONNECT_ACK» inesperados (desconectando)" 5368msgstr "# 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
5382msgid "# unexpected SESSION ACK messages" 5371msgid "# unexpected SESSION ACK messages"
5383msgstr "# Mensajes «SESSION ACK» inesperados" 5372msgstr "# Mensajes «SESSION ACK» inesperados"
5384 5373
5385#: src/transport/gnunet-service-transport_neighbours.c:3101 5374#: src/transport/gnunet-service-transport_neighbours.c:3105
5386msgid "# SET QUOTA messages ignored (no such peer)" 5375msgid "# SET QUOTA messages ignored (no such peer)"
5387msgstr "# Mensajes «SET QUOTA» ignorados (no existe tal par)" 5376msgstr "# 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
5390msgid "# disconnects due to quota of 0" 5379msgid "# disconnects due to quota of 0"
5391msgstr "# desconexiones debido a una cuota de 0" 5380msgstr "# 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
5394msgid "# disconnect messages ignored (old format)" 5383msgid "# disconnect messages ignored (old format)"
5395msgstr "# mensajes de desconexión ignorados (formato antiguo)" 5384msgstr "# 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
5398msgid "# disconnect messages ignored (timestamp)" 5387msgid "# disconnect messages ignored (timestamp)"
5399msgstr "# mensajes de desconexión ignorados (marca temporal)" 5388msgstr "# 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
5402msgid "# other peer asked to disconnect from us" 5391msgid "# other peer asked to disconnect from us"
5403msgstr "# peticiones de otro par para desconectarse de nosotros" 5392msgstr "# 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
5406msgid "# disconnected from peer upon explicit request" 5395msgid "# disconnected from peer upon explicit request"
5407msgstr "# desconexiones del par debido a una petición explícita" 5396msgstr "# desconexiones del par debido a una petición explícita"
5408 5397
@@ -5837,66 +5826,66 @@ msgstr "# bytes enviados vía SMTP"
5837msgid "# bytes dropped by SMTP (outgoing)" 5826msgid "# bytes dropped by SMTP (outgoing)"
5838msgstr "# bytes omitidos por SMTP (salientes)" 5827msgstr "# 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
5842msgid "Unexpected address length: %u bytes\n" 5831msgid "Unexpected address length: %u bytes\n"
5843msgstr "Longitud de dirección inesperada: %u bytes\n" 5832msgstr "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
5851msgid "# bytes currently in TCP buffers" 5840msgid "# bytes currently in TCP buffers"
5852msgstr "# bytes actualmente en los buffer TCP" 5841msgstr "# 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
5858msgid "# TCP sessions active" 5847msgid "# TCP sessions active"
5859msgstr "# Sesiones TCP activas" 5848msgstr "# Sesiones TCP activas"
5860 5849
5861#: src/transport/plugin_transport_tcp.c:864 5850#: src/transport/plugin_transport_tcp.c:865
5862msgid "# bytes discarded by TCP (timeout)" 5851msgid "# bytes discarded by TCP (timeout)"
5863msgstr "# bytes omitidos por TCP (expirados)" 5852msgstr "# bytes omitidos por TCP (expirados)"
5864 5853
5865#: src/transport/plugin_transport_tcp.c:913 5854#: src/transport/plugin_transport_tcp.c:914
5866msgid "# bytes transmitted via TCP" 5855msgid "# bytes transmitted via TCP"
5867msgstr "# bytes recibidos vía TCP" 5856msgstr "# bytes recibidos vía TCP"
5868 5857
5869#: src/transport/plugin_transport_tcp.c:1000 5858#: src/transport/plugin_transport_tcp.c:1001
5870msgid "# bytes discarded by TCP (disconnect)" 5859msgid "# bytes discarded by TCP (disconnect)"
5871msgstr "# bytes descartados por TCP (desconectado)" 5860msgstr "# 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
5875msgid "Trying to send with invalid session %p\n" 5864msgid "Trying to send with invalid session %p\n"
5876msgstr "Intentando enviar con una sesión no válida %p\n" 5865msgstr "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
5880msgid "Address of unexpected length: %u\n" 5869msgid "Address of unexpected length: %u\n"
5881msgstr "Dirección de tamaño inesperado: %u\n" 5870msgstr "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
5884msgid "# transport-service disconnect requests for TCP" 5873msgid "# transport-service disconnect requests for TCP"
5885msgstr "# peticiones de desconexión del servicio de transporte por TCP" 5874msgstr "# 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
5888msgid "# TCP WELCOME messages received" 5877msgid "# TCP WELCOME messages received"
5889msgstr "# Mensajes «WELCOME» TCP recibidos" 5878msgstr "# Mensajes «WELCOME» TCP recibidos"
5890 5879
5891#: src/transport/plugin_transport_tcp.c:2036 5880#: src/transport/plugin_transport_tcp.c:2037
5892msgid "# bytes received via TCP" 5881msgid "# bytes received via TCP"
5893msgstr "# bytes recibidos vía TCP" 5882msgstr "# bytes recibidos vía TCP"
5894 5883
5895#: src/transport/plugin_transport_tcp.c:2118 5884#: src/transport/plugin_transport_tcp.c:2119
5896msgid "# network-level TCP disconnect events" 5885msgid "# network-level TCP disconnect events"
5897msgstr "# eventos de desconexión TCP a nivel de red" 5886msgstr "# 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
5902msgid "Require valid port number for service `%s' in configuration!\n" 5891msgid "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
5908msgid "Failed to start service.\n" 5897msgid "Failed to start service.\n"
5909msgstr "Se produjo un fallo al iniciar el servicio.\n" 5898msgstr "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
5913msgid "TCP transport listening on port %llu\n" 5902msgid "TCP transport listening on port %llu\n"
5914msgstr "Transporte TCP escuchando en el puerto %llu\n" 5903msgstr "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
5917msgid "TCP transport not listening on any port (client only)\n" 5906msgid "TCP transport not listening on any port (client only)\n"
5918msgstr "Transporte TCP no escuchando en ningún puerto (únicamente cliente)\n" 5907msgstr "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
5922msgid "TCP transport advertises itself as being on port %llu\n" 5911msgid "TCP transport advertises itself as being on port %llu\n"
5923msgstr "El transporte TCP anuncia que está en el puerto %llu\n" 5912msgstr "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
5947msgid "" 5936msgid ""
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
5956msgid "" 5945msgid ""
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
5966msgid "Failed to open UDP sockets\n" 5955msgid "Failed to open UDP sockets\n"
5967msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" 5956msgstr "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
5971msgid "Given `%s' option is out of range: %llu > %u\n" 5960msgid "Given `%s' option is out of range: %llu > %u\n"
5972msgstr "La opción «%s» dada está fuera de rango: %llu > %u\n" 5961msgstr "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
5976msgid "Invalid IPv6 address: `%s'\n" 5965msgid "Invalid IPv6 address: `%s'\n"
5977msgstr "Dirección IPv6 no válida: «%s»\n" 5966msgstr "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
5980msgid "Failed to open UNIX sockets\n" 5969#, fuzzy
5970msgid "Failed to create network sockets, plugin failed\n"
5971msgstr "Se produjo un fallo al crear una nueva firma"
5972
5973#: src/transport/plugin_transport_unix.c:1427
5974#, fuzzy
5975msgid "Failed to open UNIX listen socket\n"
5981msgstr "Se produjo un fallo al abrir los «sockets» UNIX\n" 5976msgstr "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"
6300msgid "gnunet-ecc failed" 6295msgid "gnunet-ecc failed"
6301msgstr "«gnunet-ecc» falló" 6296msgstr "«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
6305msgid "ECC signature verification failed at %s:%d: %s\n" 6300msgid "ECC signature verification failed at %s:%d: %s\n"
6306msgstr "La verificación de firma ECC falló en %s:%d: %s\n" 6301msgstr "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"
6567msgid "Perform default-actions for GNUnet URIs" 6562msgid "Perform default-actions for GNUnet URIs"
6568msgstr "Realizar las acciones predeterminadas para URI de GNUnet" 6563msgstr "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
6572msgid "Error reading from `%s': %s\n" 6567msgid "Error reading from `%s': %s\n"
6573msgstr "Error leyendo de «%s»: %s\n" 6568msgstr "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
6577msgid "Failed to parse inbound message from helper `%s'\n" 6572msgid "Failed to parse inbound message from helper `%s'\n"
6578msgstr "" 6573msgstr ""
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
6584msgid "Error writing to `%s': %s\n" 6579msgid "Error writing to `%s': %s\n"
6585msgstr "Error escribiendo a «%s»: %s\n" 6580msgstr "Error escribiendo a «%s»: %s\n"
@@ -7097,6 +7092,15 @@ msgstr "Violación externa del protocolo detectada en %s:%d.\n"
7097msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" 7092msgid "`%s' failed on file `%s' at %s:%d with error: %s\n"
7098msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" 7093msgstr "«%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"
diff --git a/po/sv.po b/po/sv.po
index 87be6e6a9..08e2d36f7 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
7msgstr "" 7msgstr ""
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\":"
35msgid "Failed to remove servicehome directory %s\n" 35msgid "Failed to remove servicehome directory %s\n"
36msgstr "Filformatsfel (inte en GNUnet-katalog?)\n" 36msgstr "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
39msgid "Message was sent successfully" 39msgid "Message was sent successfully"
40msgstr "" 40msgstr ""
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
44msgid "Misconfiguration (can't connect to the ARM service)" 44msgid "Misconfiguration (can't connect to the ARM service)"
45msgstr "Misslyckades att ansluta till gnunetd.\n" 45msgstr "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
49msgid "We disconnected from ARM before we could send a request" 49msgid "We disconnected from ARM before we could send a request"
50msgstr "# av anslutna parter" 50msgstr "# 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
53msgid "ARM API is busy" 53msgid "ARM API is busy"
54msgstr "" 54msgstr ""
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
57msgid "Request doesn't fit into a message" 57msgid "Request doesn't fit into a message"
58msgstr "" 58msgstr ""
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
62msgid "Request timed out" 62msgid "Request timed out"
63msgstr "# sessionsnycklar accepterade" 63msgstr "# 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
67msgid "Unknown request status" 67msgid "Unknown request status"
68msgstr "Okänd operation \"%s\"\n" 68msgstr "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
72msgid "%s is stopped" 72msgid "%s is stopped"
73msgstr "# byte krypterade" 73msgstr "# 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
77msgid "%s is starting" 77msgid "%s is starting"
78msgstr "\"%s\" startar\n" 78msgstr "\"%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
82msgid "%s is stopping" 82msgid "%s is stopping"
83msgstr "" 83msgstr ""
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
87msgid "%s is starting already" 87msgid "%s is starting already"
88msgstr "\"%s\" startar\n" 88msgstr "\"%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
92msgid "%s is stopping already" 92msgid "%s is stopping already"
93msgstr "" 93msgstr ""
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
97msgid "%s is started already" 97msgid "%s is started already"
98msgstr "" 98msgstr ""
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
102msgid "%s is stopped already" 102msgid "%s is stopped already"
103msgstr "" 103msgstr ""
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
107msgid "%s service is not known to ARM" 107msgid "%s service is not known to ARM"
108msgstr "\"%s\" är inte en fil.\n" 108msgstr "\"%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
112msgid "%s service failed to start" 112msgid "%s service failed to start"
113msgstr "Misslyckades att starta samling.\n" 113msgstr "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
117msgid "%s service can't be started because ARM is shutting down" 117msgid "%s service can't be started because ARM is shutting down"
118msgstr "" 118msgstr ""
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
122msgid "%.s Unknown result code." 122msgid "%.s Unknown result code."
123msgstr "" 123msgstr ""
@@ -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
847msgid "# peers connected" 847msgid "# peers connected"
848msgstr "# av anslutna parter" 848msgstr "# 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
1315msgid "be verbose (print progress information)" 1315msgid "be verbose (print progress information)"
1316msgstr "" 1316msgstr ""
1317 1317
@@ -2215,7 +2215,7 @@ msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
2215msgid "no-name" 2215msgid "no-name"
2216msgstr "Visa namn" 2216msgstr "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
2220msgid "ECC signing failed at %s:%d: %s\n" 2220msgid "ECC signing failed at %s:%d: %s\n"
2221msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" 2221msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
@@ -2418,12 +2418,12 @@ msgstr ""
2418msgid "Unrecognized URI type" 2418msgid "Unrecognized URI type"
2419msgstr "" 2419msgstr ""
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
2423msgid "Lacking key configuration settings.\n" 2423msgid "Lacking key configuration settings.\n"
2424msgstr "GNUnet-konfiguration" 2424msgstr "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
2428msgid "Could not access hostkey file `%s'.\n" 2428msgid "Could not access hostkey file `%s'.\n"
2429msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n" 2429msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
@@ -3736,16 +3736,16 @@ msgstr ""
3736msgid "Hostlist file `%s' could not be removed\n" 3736msgid "Hostlist file `%s' could not be removed\n"
3737msgstr "" 3737msgstr ""
3738 3738
3739#: src/hostlist/hostlist-server.c:134 3739#: src/hostlist/hostlist-server.c:137
3740#, fuzzy 3740#, fuzzy
3741msgid "bytes in hostlist" 3741msgid "bytes in hostlist"
3742msgstr "# byte krypterade" 3742msgstr "# byte krypterade"
3743 3743
3744#: src/hostlist/hostlist-server.c:157 3744#: src/hostlist/hostlist-server.c:161
3745msgid "expired addresses encountered" 3745msgid "expired addresses encountered"
3746msgstr "" 3746msgstr ""
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 ""
3754msgid "Error in communication with PEERINFO service: %s\n" 3754msgid "Error in communication with PEERINFO service: %s\n"
3755msgstr "Skriv ut information om GNUnets motparter." 3755msgstr "Skriv ut information om GNUnets motparter."
3756 3756
3757#: src/hostlist/hostlist-server.c:205 3757#: src/hostlist/hostlist-server.c:210
3758msgid "HELLOs without addresses encountered (ignored)" 3758msgid "HELLOs without addresses encountered (ignored)"
3759msgstr "" 3759msgstr ""
3760 3760
3761#: src/hostlist/hostlist-server.c:219 3761#: src/hostlist/hostlist-server.c:224
3762msgid "bytes not included in hostlist (size limit)" 3762msgid "bytes not included in hostlist (size limit)"
3763msgstr "" 3763msgstr ""
3764 3764
3765#: src/hostlist/hostlist-server.c:263 3765#: src/hostlist/hostlist-server.c:268
3766#, c-format 3766#, c-format
3767msgid "Refusing `%s' request to hostlist server\n" 3767msgid "Refusing `%s' request to hostlist server\n"
3768msgstr "" 3768msgstr ""
3769 3769
3770#: src/hostlist/hostlist-server.c:266 3770#: src/hostlist/hostlist-server.c:271
3771msgid "hostlist requests refused (not HTTP GET)" 3771msgid "hostlist requests refused (not HTTP GET)"
3772msgstr "" 3772msgstr ""
3773 3773
3774#: src/hostlist/hostlist-server.c:279 3774#: src/hostlist/hostlist-server.c:284
3775#, c-format 3775#, c-format
3776msgid "Refusing `%s' request with %llu bytes of upload data\n" 3776msgid "Refusing `%s' request with %llu bytes of upload data\n"
3777msgstr "" 3777msgstr ""
3778 3778
3779#: src/hostlist/hostlist-server.c:283 3779#: src/hostlist/hostlist-server.c:288
3780msgid "hostlist requests refused (upload data)" 3780msgid "hostlist requests refused (upload data)"
3781msgstr "" 3781msgstr ""
3782 3782
3783#: src/hostlist/hostlist-server.c:291 3783#: src/hostlist/hostlist-server.c:296
3784msgid "Could not handle hostlist request since I do not have a response yet\n" 3784msgid "Could not handle hostlist request since I do not have a response yet\n"
3785msgstr "" 3785msgstr ""
3786 3786
3787#: src/hostlist/hostlist-server.c:294 3787#: src/hostlist/hostlist-server.c:299
3788msgid "hostlist requests refused (not ready)" 3788msgid "hostlist requests refused (not ready)"
3789msgstr "" 3789msgstr ""
3790 3790
3791#: src/hostlist/hostlist-server.c:298 3791#: src/hostlist/hostlist-server.c:303
3792msgid "Received request for our hostlist\n" 3792msgid "Received request for our hostlist\n"
3793msgstr "" 3793msgstr ""
3794 3794
3795#: src/hostlist/hostlist-server.c:299 3795#: src/hostlist/hostlist-server.c:304
3796msgid "hostlist requests processed" 3796msgid "hostlist requests processed"
3797msgstr "" 3797msgstr ""
3798 3798
3799#: src/hostlist/hostlist-server.c:341 3799#: src/hostlist/hostlist-server.c:346
3800msgid "# hostlist advertisements send" 3800msgid "# hostlist advertisements send"
3801msgstr "" 3801msgstr ""
3802 3802
3803#: src/hostlist/hostlist-server.c:384 3803#: src/hostlist/hostlist-server.c:389
3804msgid "Advertisement message could not be queued by core\n" 3804msgid "Advertisement message could not be queued by core\n"
3805msgstr "" 3805msgstr ""
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
3810msgid "Could not access PEERINFO service. Exiting.\n" 3810msgid "Could not access PEERINFO service. Exiting.\n"
3811msgstr "Kunde inte komma åt namnrymdsinformation.\n" 3811msgstr "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
3815msgid "Invalid port number %llu. Exiting.\n" 3815msgid "Invalid port number %llu. Exiting.\n"
3816msgstr "Ogiltiga argument. Avslutar.\n" 3816msgstr "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
3820msgid "Hostlist service starts on %s:%llu\n" 3820msgid "Hostlist service starts on %s:%llu\n"
3821msgstr "" 3821msgstr ""
3822 3822
3823#: src/hostlist/hostlist-server.c:581 3823#: src/hostlist/hostlist-server.c:593
3824#, fuzzy, c-format 3824#, fuzzy, c-format
3825msgid "Address to obtain hostlist: `%s'\n" 3825msgid "Address to obtain hostlist: `%s'\n"
3826msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 3826msgstr "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
3830msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" 3830msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n"
3831msgstr "\"%s\" är inte tillgänglig." 3831msgstr "\"%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
3835msgid "Could not start hostlist HTTP server on port %u\n" 3835msgid "Could not start hostlist HTTP server on port %u\n"
3836msgstr "" 3836msgstr ""
@@ -3870,11 +3870,11 @@ msgstr "Skriv ut information om GNUnets motparter."
3870msgid "Print information about mesh tunnels and peers." 3870msgid "Print information about mesh tunnels and peers."
3871msgstr "Skriv ut information om GNUnets motparter." 3871msgstr "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
3874msgid "Wrong CORE service\n" 3874msgid "Wrong CORE service\n"
3875msgstr "" 3875msgstr ""
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
3879msgid "Mesh service could not access hostkey: %s. Exiting.\n" 3879msgid "Mesh service could not access hostkey: %s. Exiting.\n"
3880msgstr "Kunde inte komma åt namnrymdsinformation.\n" 3880msgstr "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"
3900msgstr "GNUnet-konfiguration" 3899msgstr "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
3907msgid "" 3906msgid ""
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 ""
4239msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" 4238msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n"
4240msgstr "" 4239msgstr ""
4241 4240
4242#: src/nat/nat.c:795 4241#: src/nat/nat.c:834
4243#, c-format 4242#, c-format
4244msgid "gnunet-helper-nat-server generated malformed address `%s'\n" 4243msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
4245msgstr "" 4244msgstr ""
4246 4245
4247#: src/nat/nat.c:844 4246#: src/nat/nat.c:883
4248#, fuzzy, c-format 4247#, fuzzy, c-format
4249msgid "Failed to start %s\n" 4248msgid "Failed to start %s\n"
4250msgstr "Misslyckades att starta samling.\n" 4249msgstr "Misslyckades att starta samling.\n"
4251 4250
4252#: src/nat/nat.c:1113 4251#: src/nat/nat.c:1152
4253msgid "malformed" 4252msgid "malformed"
4254msgstr "" 4253msgstr ""
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
4258msgid "" 4257msgid ""
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"
4261msgstr "" 4260msgstr ""
4262 4261
4263#: src/nat/nat.c:1326 4262#: src/nat/nat.c:1365
4264msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" 4263msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
4265msgstr "" 4264msgstr ""
4266 4265
4267#: src/nat/nat.c:1337 4266#: src/nat/nat.c:1376
4268#, c-format 4267#, c-format
4269msgid "Running gnunet-helper-nat-client %s %s %u\n" 4268msgid "Running gnunet-helper-nat-client %s %s %u\n"
4270msgstr "" 4269msgstr ""
@@ -4287,46 +4286,46 @@ msgstr "Misslyckades att ansluta till gnunetd.\n"
4287msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" 4286msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
4288msgstr "" 4287msgstr ""
4289 4288
4290#: src/nse/gnunet-nse-profiler.c:885 4289#: src/nse/gnunet-nse-profiler.c:884
4291#, fuzzy 4290#, fuzzy
4292msgid "limit to the number of connections to NSE services, 0 for none" 4291msgid "limit to the number of connections to NSE services, 0 for none"
4293msgstr "Misslyckades att ansluta till gnunetd.\n" 4292msgstr "Misslyckades att ansluta till gnunetd.\n"
4294 4293
4295#: src/nse/gnunet-nse-profiler.c:888 4294#: src/nse/gnunet-nse-profiler.c:887
4296msgid "name of the file for writing connection information and statistics" 4295msgid "name of the file for writing connection information and statistics"
4297msgstr "" 4296msgstr ""
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
4300msgid "name of the file with the login information for the testbed" 4299msgid "name of the file with the login information for the testbed"
4301msgstr "" 4300msgstr ""
4302 4301
4303#: src/nse/gnunet-nse-profiler.c:894 4302#: src/nse/gnunet-nse-profiler.c:893
4304msgid "name of the file for writing the main results" 4303msgid "name of the file for writing the main results"
4305msgstr "" 4304msgstr ""
4306 4305
4307#: src/nse/gnunet-nse-profiler.c:897 4306#: src/nse/gnunet-nse-profiler.c:896
4308msgid "Number of peers to run in each round, separated by commas" 4307msgid "Number of peers to run in each round, separated by commas"
4309msgstr "" 4308msgstr ""
4310 4309
4311#: src/nse/gnunet-nse-profiler.c:903 4310#: src/nse/gnunet-nse-profiler.c:902
4312msgid "delay between rounds" 4311msgid "delay between rounds"
4313msgstr "" 4312msgstr ""
4314 4313
4315#: src/nse/gnunet-nse-profiler.c:912 4314#: src/nse/gnunet-nse-profiler.c:911
4316#, fuzzy 4315#, fuzzy
4317msgid "Measure quality and performance of the NSE service." 4316msgid "Measure quality and performance of the NSE service."
4318msgstr "Kan inte tillgå tjänsten" 4317msgstr "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
4322msgid "NSE service could not access hostkey: %s\n" 4321msgid "NSE service could not access hostkey: %s\n"
4323msgstr "Kunde inte komma åt namnrymdsinformation.\n" 4322msgstr "Kunde inte komma åt namnrymdsinformation.\n"
4324 4323
4325#: src/nse/gnunet-service-nse.c:1419 4324#: src/nse/gnunet-service-nse.c:1433
4326msgid "NSE service is lacking key configuration settings. Exiting.\n" 4325msgid "NSE service is lacking key configuration settings. Exiting.\n"
4327msgstr "" 4326msgstr ""
4328 4327
4329#: src/nse/gnunet-service-nse.c:1524 4328#: src/nse/gnunet-service-nse.c:1508
4330#, fuzzy 4329#, fuzzy
4331msgid "Invalid work requirement for NSE service. Exiting.\n" 4330msgid "Invalid work requirement for NSE service. Exiting.\n"
4332msgstr "Ogiltiga argument. Avslutar.\n" 4331msgstr "Ogiltiga argument. Avslutar.\n"
@@ -4336,42 +4335,42 @@ msgstr "Ogiltiga argument. Avslutar.\n"
4336msgid "Removing expired address of transport `%s'\n" 4335msgid "Removing expired address of transport `%s'\n"
4337msgstr "Tillgängliga transport(er): %s\n" 4336msgstr "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
4341msgid "Failed to parse HELLO in file `%s': %s\n" 4340msgid "Failed to parse HELLO in file `%s': %s\n"
4342msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4341msgstr "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
4346msgid "Failed to parse HELLO in file `%s': %s %u \n" 4345msgid "Failed to parse HELLO in file `%s': %s %u \n"
4347msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4346msgstr "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
4350msgid "# peers known" 4349msgid "# peers known"
4351msgstr "" 4350msgstr ""
4352 4351
4353#: src/peerinfo/gnunet-service-peerinfo.c:480 4352#: src/peerinfo/gnunet-service-peerinfo.c:481
4354#, c-format 4353#, c-format
4355msgid "" 4354msgid ""
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"
4357msgstr "" 4356msgstr ""
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
4361msgid "Scanning directory `%s'\n" 4360msgid "Scanning directory `%s'\n"
4362msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4361msgstr "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
4366msgid "Still no peers found in `%s'!\n" 4365msgid "Still no peers found in `%s'!\n"
4367msgstr "" 4366msgstr ""
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
4371msgid "Cleaning up directory `%s'\n" 4370msgid "Cleaning up directory `%s'\n"
4372msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 4371msgstr "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
4376msgid "Importing HELLOs from `%s'\n" 4375msgid "Importing HELLOs from `%s'\n"
4377msgstr "" 4376msgstr ""
@@ -4587,81 +4586,73 @@ msgstr ""
4587msgid "Daemon to announce regular expressions for the peer using mesh." 4586msgid "Daemon to announce regular expressions for the peer using mesh."
4588msgstr "" 4587msgstr ""
4589 4588
4590#: src/regex/gnunet-regex-profiler.c:1246 4589#: src/regex/gnunet-regex-profiler.c:1247
4591#, fuzzy 4590#, fuzzy
4592msgid "No configuration file given. Exiting\n" 4591msgid "No configuration file given. Exiting\n"
4593msgstr "använd konfigurationsfil FILNAMN" 4592msgstr "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
4597msgid "Configuration option \"regex_prefix\" missing. Exiting\n" 4596msgid "Configuration option \"regex_prefix\" missing. Exiting\n"
4598msgstr "Konfigurationsfil \"%s\" skapad.\n" 4597msgstr "Konfigurationsfil \"%s\" skapad.\n"
4599 4598
4600#: src/regex/gnunet-regex-profiler.c:1276 4599#: src/regex/gnunet-regex-profiler.c:1287
4601msgid "No hosts-file specified on command line. Exiting.\n"
4602msgstr ""
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
4607msgid "No policy directory specified on command line. Exiting.\n" 4602msgid "No policy directory specified on command line. Exiting.\n"
4608msgstr "" 4603msgstr ""
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
4613msgid "Specified policies directory does not exist. Exiting.\n" 4608msgid "Specified policies directory does not exist. Exiting.\n"
4614msgstr "" 4609msgstr ""
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
4618msgid "No files found in `%s'\n" 4613msgid "No files found in `%s'\n"
4619msgstr "%d filer hittades i katalog.\n" 4614msgstr "%d filer hittades i katalog.\n"
4620 4615
4621#: src/regex/gnunet-regex-profiler.c:1304 4616#: src/regex/gnunet-regex-profiler.c:1309
4622msgid "No search strings file given. Exiting.\n" 4617msgid "No search strings file given. Exiting.\n"
4623msgstr "" 4618msgstr ""
4624 4619
4625#: src/regex/gnunet-regex-profiler.c:1314 4620#: src/regex/gnunet-regex-profiler.c:1319
4626#, fuzzy 4621#, fuzzy
4627msgid "" 4622msgid ""
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"
4630msgstr "Fel vid lämning av DHT.\n" 4625msgstr "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
4634msgid "Error loading search strings. Exiting.\n" 4629msgid "Error loading search strings. Exiting.\n"
4635msgstr "Fel vid lämning av DHT.\n" 4630msgstr "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
4639msgid "name of the file for writing statistics" 4634msgid "name of the file for writing statistics"
4640msgstr "Visa värde av alternativet" 4635msgstr "Visa värde av alternativet"
4641 4636
4642#: src/regex/gnunet-regex-profiler.c:1392 4637#: src/regex/gnunet-regex-profiler.c:1397
4643msgid "wait TIMEOUT before considering a string match as failed" 4638msgid "wait TIMEOUT before ending the experiment"
4644msgstr ""
4645
4646#: src/regex/gnunet-regex-profiler.c:1395
4647msgid "number of search strings to read from search strings file"
4648msgstr "" 4639msgstr ""
4649 4640
4650#: src/regex/gnunet-regex-profiler.c:1398 4641#: src/regex/gnunet-regex-profiler.c:1400
4651msgid "directory with policy files" 4642msgid "directory with policy files"
4652msgstr "" 4643msgstr ""
4653 4644
4654#: src/regex/gnunet-regex-profiler.c:1401 4645#: src/regex/gnunet-regex-profiler.c:1403
4655#, fuzzy 4646#, fuzzy
4656msgid "name of file with input strings" 4647msgid "name of file with input strings"
4657msgstr "Visa värde av alternativet" 4648msgstr "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
4661msgid "name of file with hosts' names" 4652msgid "name of file with hosts' names"
4662msgstr "Visa värde av alternativet" 4653msgstr "Visa värde av alternativet"
4663 4654
4664#: src/regex/gnunet-regex-profiler.c:1416 4655#: src/regex/gnunet-regex-profiler.c:1418
4665msgid "Profiler for regex" 4656msgid "Profiler for regex"
4666msgstr "" 4657msgstr ""
4667 4658
@@ -4779,7 +4770,7 @@ msgstr ""
4779msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" 4770msgid "Could not parse execution interval for `%s', set to default 60 sec.\n"
4780msgstr "" 4771msgstr ""
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
4784msgid "" 4775msgid ""
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 ""
4790msgid "Job command file not given. Exiting\n" 4781msgid "Job command file not given. Exiting\n"
4791msgstr "använd konfigurationsfil FILNAMN" 4782msgstr "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
4795msgid "Waiting for child to exit.\n" 4786msgid "Waiting for child to exit.\n"
4796msgstr "Väntar på att motparter ska ansluta (%u iterationer kvar)...\n" 4787msgstr "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
4800msgid "Spawning process `%s'\n" 4791msgid "Spawning process `%s'\n"
4801msgstr "Startade samling \"%s\".\n" 4792msgstr "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
4805msgid "Exiting as the number of peers is %u\n" 4796msgid "Exiting as the number of peers is %u\n"
4806msgstr "Maximalt antal chattklienter uppnått.\n" 4797msgstr "Maximalt antal chattklienter uppnått.\n"
4807 4798
4808#: src/testbed/gnunet-testbed-profiler.c:275 4799#: src/testbed/gnunet-testbed-profiler.c:277
4809msgid "create COUNT number of peers" 4800msgid "create COUNT number of peers"
4810msgstr "" 4801msgstr ""
4811 4802
4812#: src/testbed/gnunet-testbed-profiler.c:278 4803#: src/testbed/gnunet-testbed-profiler.c:280
4813msgid "tolerate COUNT number of continious timeout failures" 4804msgid "tolerate COUNT number of continious timeout failures"
4814msgstr "" 4805msgstr ""
4815 4806
@@ -4828,55 +4819,55 @@ msgstr ""
4828msgid "Hosts file %s cannot be read\n" 4819msgid "Hosts file %s cannot be read\n"
4829msgstr "" 4820msgstr ""
4830 4821
4831#: src/testbed/testbed_api_hosts.c:583 4822#: src/testbed/testbed_api_hosts.c:595
4832#, c-format 4823#, c-format
4833msgid "The function %s is only available when compiled with (--with-ll)\n" 4824msgid "The function %s is only available when compiled with (--with-ll)\n"
4834msgstr "" 4825msgstr ""
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
4838msgid "Adding host %u failed with error: %s\n" 4829msgid "Adding host %u failed with error: %s\n"
4839msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" 4830msgstr "\"%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
4842msgid "Linking controllers failed. Exiting" 4833msgid "Linking controllers failed. Exiting"
4843msgstr "" 4834msgstr ""
4844 4835
4845#: src/testbed/testbed_api_testbed.c:913 4836#: src/testbed/testbed_api_testbed.c:1094
4846#, c-format 4837#, c-format
4847msgid "Host registration failed for a host. Error: %s\n" 4838msgid "Host registration failed for a host. Error: %s\n"
4848msgstr "" 4839msgstr ""
4849 4840
4850#: src/testbed/testbed_api_testbed.c:978 4841#: src/testbed/testbed_api_testbed.c:1175
4851msgid "Controller crash detected. Shutting down.\n" 4842msgid "Controller crash detected. Shutting down.\n"
4852msgstr "" 4843msgstr ""
4853 4844
4854#: src/testbed/testbed_api_testbed.c:1081 4845#: src/testbed/testbed_api_testbed.c:1320
4855#, c-format 4846#, c-format
4856msgid "Host %s cannot start testbed\n" 4847msgid "Host %s cannot start testbed\n"
4857msgstr "" 4848msgstr ""
4858 4849
4859#: src/testbed/testbed_api_testbed.c:1085 4850#: src/testbed/testbed_api_testbed.c:1324
4860msgid "Testbed cannot be started on localhost\n" 4851msgid "Testbed cannot be started on localhost\n"
4861msgstr "" 4852msgstr ""
4862 4853
4863#: src/testbed/testbed_api_testbed.c:1120 4854#: src/testbed/testbed_api_testbed.c:1365
4864msgid "Cannot start the master controller" 4855msgid "Cannot start the master controller"
4865msgstr "" 4856msgstr ""
4866 4857
4867#: src/testbed/testbed_api_testbed.c:1138 4858#: src/testbed/testbed_api_testbed.c:1383
4868msgid "Shutting down testbed due to timeout while setup.\n" 4859msgid "Shutting down testbed due to timeout while setup.\n"
4869msgstr "" 4860msgstr ""
4870 4861
4871#: src/testbed/testbed_api_testbed.c:1197 4862#: src/testbed/testbed_api_testbed.c:1443
4872msgid "No hosts loaded from LoadLeveler. Need at least one host\n" 4863msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
4873msgstr "" 4864msgstr ""
4874 4865
4875#: src/testbed/testbed_api_testbed.c:1209 4866#: src/testbed/testbed_api_testbed.c:1455
4876msgid "No hosts loaded. Need at least one host\n" 4867msgid "No hosts loaded. Need at least one host\n"
4877msgstr "" 4868msgstr ""
4878 4869
4879#: src/testbed/testbed_api_testbed.c:1233 4870#: src/testbed/testbed_api_testbed.c:1479
4880msgid "Specified topology must be supported by testbed" 4871msgid "Specified topology must be supported by testbed"
4881msgstr "" 4872msgstr ""
4882 4873
@@ -5023,7 +5014,7 @@ msgstr "Kunde inte spara konfigurationsfil \"%s\":"
5023msgid "Failed to start `%s': %s\n" 5014msgid "Failed to start `%s': %s\n"
5024msgstr "Fel vid %s:%d.\n" 5015msgstr "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
5028msgid "Failed to load configuration from %s\n" 5019msgid "Failed to load configuration from %s\n"
5029msgstr "Kunde inte spara konfigurationsfil \"%s\":" 5020msgstr "Kunde inte spara konfigurationsfil \"%s\":"
@@ -5175,7 +5166,7 @@ msgstr ""
5175msgid "# bytes payload dropped (other peer was not connected)" 5166msgid "# bytes payload dropped (other peer was not connected)"
5176msgstr "" 5167msgstr ""
5177 5168
5178#: src/transport/gnunet-service-transport_clients.c:728 5169#: src/transport/gnunet-service-transport_clients.c:733
5179#, fuzzy 5170#, fuzzy
5180msgid "# REQUEST CONNECT messages received" 5171msgid "# REQUEST CONNECT messages received"
5181msgstr "# krypterade PONG-meddelanden mottagna" 5172msgstr "# krypterade PONG-meddelanden mottagna"
@@ -5246,53 +5237,53 @@ msgstr ""
5246msgid "# ms throttling suggested" 5237msgid "# ms throttling suggested"
5247msgstr "" 5238msgstr ""
5248 5239
5249#: src/transport/gnunet-service-transport_neighbours.c:2770 5240#: src/transport/gnunet-service-transport_neighbours.c:2774
5250#, fuzzy 5241#, fuzzy
5251msgid "# unexpected CONNECT_ACK messages (no peer)" 5242msgid "# unexpected CONNECT_ACK messages (no peer)"
5252msgstr "skicka ANTAL meddelanden" 5243msgstr "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
5257msgid "# unexpected CONNECT_ACK messages (not ready)" 5248msgid "# unexpected CONNECT_ACK messages (not ready)"
5258msgstr "skicka ANTAL meddelanden" 5249msgstr "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
5262msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" 5253msgid "# unexpected CONNECT_ACK messages (waiting on ATS)"
5263msgstr "skicka ANTAL meddelanden" 5254msgstr "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
5267msgid "# unexpected CONNECT_ACK messages (disconnecting)" 5258msgid "# unexpected CONNECT_ACK messages (disconnecting)"
5268msgstr "skicka ANTAL meddelanden" 5259msgstr "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
5272msgid "# unexpected SESSION ACK messages" 5263msgid "# unexpected SESSION ACK messages"
5273msgstr "# krypterade PONG-meddelanden skickade" 5264msgstr "# krypterade PONG-meddelanden skickade"
5274 5265
5275#: src/transport/gnunet-service-transport_neighbours.c:3101 5266#: src/transport/gnunet-service-transport_neighbours.c:3105
5276msgid "# SET QUOTA messages ignored (no such peer)" 5267msgid "# SET QUOTA messages ignored (no such peer)"
5277msgstr "" 5268msgstr ""
5278 5269
5279#: src/transport/gnunet-service-transport_neighbours.c:3115 5270#: src/transport/gnunet-service-transport_neighbours.c:3119
5280msgid "# disconnects due to quota of 0" 5271msgid "# disconnects due to quota of 0"
5281msgstr "" 5272msgstr ""
5282 5273
5283#: src/transport/gnunet-service-transport_neighbours.c:3146 5274#: src/transport/gnunet-service-transport_neighbours.c:3150
5284msgid "# disconnect messages ignored (old format)" 5275msgid "# disconnect messages ignored (old format)"
5285msgstr "" 5276msgstr ""
5286 5277
5287#: src/transport/gnunet-service-transport_neighbours.c:3157 5278#: src/transport/gnunet-service-transport_neighbours.c:3161
5288msgid "# disconnect messages ignored (timestamp)" 5279msgid "# disconnect messages ignored (timestamp)"
5289msgstr "" 5280msgstr ""
5290 5281
5291#: src/transport/gnunet-service-transport_neighbours.c:3188 5282#: src/transport/gnunet-service-transport_neighbours.c:3192
5292msgid "# other peer asked to disconnect from us" 5283msgid "# other peer asked to disconnect from us"
5293msgstr "" 5284msgstr ""
5294 5285
5295#: src/transport/gnunet-service-transport_neighbours.c:3283 5286#: src/transport/gnunet-service-transport_neighbours.c:3287
5296#, fuzzy 5287#, fuzzy
5297msgid "# disconnected from peer upon explicit request" 5288msgid "# disconnected from peer upon explicit request"
5298msgstr "# av anslutna parter" 5289msgstr "# av anslutna parter"
@@ -5715,92 +5706,92 @@ msgstr "# byte skickades via TCP"
5715msgid "# bytes dropped by SMTP (outgoing)" 5706msgid "# bytes dropped by SMTP (outgoing)"
5716msgstr "# byte kastade via TCP (utgående)" 5707msgstr "# 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
5720msgid "Unexpected address length: %u bytes\n" 5711msgid "Unexpected address length: %u bytes\n"
5721msgstr "" 5712msgstr ""
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
5730msgid "# bytes currently in TCP buffers" 5721msgid "# bytes currently in TCP buffers"
5731msgstr "# byte skickades via TCP" 5722msgstr "# 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
5738msgid "# TCP sessions active" 5729msgid "# TCP sessions active"
5739msgstr "# sessionsnycklar accepterade" 5730msgstr "# sessionsnycklar accepterade"
5740 5731
5741#: src/transport/plugin_transport_tcp.c:864 5732#: src/transport/plugin_transport_tcp.c:865
5742#, fuzzy 5733#, fuzzy
5743msgid "# bytes discarded by TCP (timeout)" 5734msgid "# bytes discarded by TCP (timeout)"
5744msgstr "# byte kastade via TCP (utgående)" 5735msgstr "# 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
5748msgid "# bytes transmitted via TCP" 5739msgid "# bytes transmitted via TCP"
5749msgstr "# byte skickade av typen %d" 5740msgstr "# 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
5753msgid "# bytes discarded by TCP (disconnect)" 5744msgid "# bytes discarded by TCP (disconnect)"
5754msgstr "# byte kastade via TCP (utgående)" 5745msgstr "# 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
5758msgid "Trying to send with invalid session %p\n" 5749msgid "Trying to send with invalid session %p\n"
5759msgstr "" 5750msgstr ""
5760 5751
5761#: src/transport/plugin_transport_tcp.c:1349 5752#: src/transport/plugin_transport_tcp.c:1350
5762#, c-format 5753#, c-format
5763msgid "Address of unexpected length: %u\n" 5754msgid "Address of unexpected length: %u\n"
5764msgstr "" 5755msgstr ""
5765 5756
5766#: src/transport/plugin_transport_tcp.c:1466 5757#: src/transport/plugin_transport_tcp.c:1467
5767msgid "# transport-service disconnect requests for TCP" 5758msgid "# transport-service disconnect requests for TCP"
5768msgstr "" 5759msgstr ""
5769 5760
5770#: src/transport/plugin_transport_tcp.c:1867 5761#: src/transport/plugin_transport_tcp.c:1868
5771#, fuzzy 5762#, fuzzy
5772msgid "# TCP WELCOME messages received" 5763msgid "# TCP WELCOME messages received"
5773msgstr "# krypterade PONG-meddelanden mottagna" 5764msgstr "# krypterade PONG-meddelanden mottagna"
5774 5765
5775#: src/transport/plugin_transport_tcp.c:2036 5766#: src/transport/plugin_transport_tcp.c:2037
5776msgid "# bytes received via TCP" 5767msgid "# bytes received via TCP"
5777msgstr "# byte mottogs via TCP" 5768msgstr "# byte mottogs via TCP"
5778 5769
5779#: src/transport/plugin_transport_tcp.c:2118 5770#: src/transport/plugin_transport_tcp.c:2119
5780msgid "# network-level TCP disconnect events" 5771msgid "# network-level TCP disconnect events"
5781msgstr "" 5772msgstr ""
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
5786msgid "Require valid port number for service `%s' in configuration!\n" 5777msgid "Require valid port number for service `%s' in configuration!\n"
5787msgstr "" 5778msgstr ""
5788 5779
5789#: src/transport/plugin_transport_tcp.c:2358 5780#: src/transport/plugin_transport_tcp.c:2359
5790#, fuzzy 5781#, fuzzy
5791msgid "Failed to start service.\n" 5782msgid "Failed to start service.\n"
5792msgstr "Misslyckades att starta samling.\n" 5783msgstr "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
5796msgid "TCP transport listening on port %llu\n" 5787msgid "TCP transport listening on port %llu\n"
5797msgstr "" 5788msgstr ""
5798 5789
5799#: src/transport/plugin_transport_tcp.c:2448 5790#: src/transport/plugin_transport_tcp.c:2452
5800msgid "TCP transport not listening on any port (client only)\n" 5791msgid "TCP transport not listening on any port (client only)\n"
5801msgstr "" 5792msgstr ""
5802 5793
5803#: src/transport/plugin_transport_tcp.c:2452 5794#: src/transport/plugin_transport_tcp.c:2456
5804#, c-format 5795#, c-format
5805msgid "TCP transport advertises itself as being on port %llu\n" 5796msgid "TCP transport advertises itself as being on port %llu\n"
5806msgstr "" 5797msgstr ""
@@ -5825,14 +5816,14 @@ msgstr ""
5825msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" 5816msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
5826msgstr "" 5817msgstr ""
5827 5818
5828#: src/transport/plugin_transport_udp.c:2520 5819#: src/transport/plugin_transport_udp.c:2350
5829#, c-format 5820#, c-format
5830msgid "" 5821msgid ""
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"
5833msgstr "" 5824msgstr ""
5834 5825
5835#: src/transport/plugin_transport_udp.c:2534 5826#: src/transport/plugin_transport_udp.c:2364
5836#, c-format 5827#, c-format
5837msgid "" 5828msgid ""
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"
5841msgstr "" 5832msgstr ""
5842 5833
5843#: src/transport/plugin_transport_udp.c:2775 5834#: src/transport/plugin_transport_udp.c:2664
5844#, fuzzy 5835#, fuzzy
5845msgid "Failed to open UDP sockets\n" 5836msgid "Failed to open UDP sockets\n"
5846msgstr "Misslyckades att binda till UDP6-port %d.\n" 5837msgstr "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
5850msgid "Given `%s' option is out of range: %llu > %u\n" 5841msgid "Given `%s' option is out of range: %llu > %u\n"
5851msgstr "" 5842msgstr ""
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
5855msgid "Invalid IPv6 address: `%s'\n" 5846msgid "Invalid IPv6 address: `%s'\n"
5856msgstr "Ogiltigt svar på \"%s\".\n" 5847msgstr "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
5851msgid "Failed to create network sockets, plugin failed\n"
5852msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
5853
5854#: src/transport/plugin_transport_unix.c:1427
5859#, fuzzy 5855#, fuzzy
5860msgid "Failed to open UNIX sockets\n" 5856msgid "Failed to open UNIX listen socket\n"
5861msgstr "Misslyckades att leverera \"%s\" meddelande.\n" 5857msgstr "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 ""
6168msgid "gnunet-ecc failed" 6164msgid "gnunet-ecc failed"
6169msgstr "gnunet-update misslyckades!" 6165msgstr "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
6173msgid "ECC signature verification failed at %s:%d: %s\n" 6169msgid "ECC signature verification failed at %s:%d: %s\n"
6174msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" 6170msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
@@ -6435,17 +6431,17 @@ msgstr ""
6435msgid "Perform default-actions for GNUnet URIs" 6431msgid "Perform default-actions for GNUnet URIs"
6436msgstr "" 6432msgstr ""
6437 6433
6438#: src/util/helper.c:271 6434#: src/util/helper.c:322
6439#, fuzzy, c-format 6435#, fuzzy, c-format
6440msgid "Error reading from `%s': %s\n" 6436msgid "Error reading from `%s': %s\n"
6441msgstr "Fel vid skapandet av användare" 6437msgstr "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
6445msgid "Failed to parse inbound message from helper `%s'\n" 6441msgid "Failed to parse inbound message from helper `%s'\n"
6446msgstr "Misslyckades att läsa kompislista från \"%s\"\n" 6442msgstr "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
6450msgid "Error writing to `%s': %s\n" 6446msgid "Error writing to `%s': %s\n"
6451msgstr "Fel vid skapandet av användare" 6447msgstr "Fel vid skapandet av användare"
diff --git a/po/vi.po b/po/vi.po
index e31caa41f..9b968f9bb 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
8msgstr "" 8msgstr ""
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 »:"
38msgid "Failed to remove servicehome directory %s\n" 38msgid "Failed to remove servicehome directory %s\n"
39msgstr "Lỗi truy cập đến thư mục nhà GNUnet « %s »\n" 39msgstr "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
42msgid "Message was sent successfully" 42msgid "Message was sent successfully"
43msgstr "" 43msgstr ""
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
47msgid "Misconfiguration (can't connect to the ARM service)" 47msgid "Misconfiguration (can't connect to the ARM service)"
48msgstr "Lỗi kết nối đến gnunetd.\n" 48msgstr "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
52msgid "We disconnected from ARM before we could send a request" 52msgid "We disconnected from ARM before we could send a request"
53msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" 53msgstr "# 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
56msgid "ARM API is busy" 56msgid "ARM API is busy"
57msgstr "" 57msgstr ""
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
60msgid "Request doesn't fit into a message" 60msgid "Request doesn't fit into a message"
61msgstr "" 61msgstr ""
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
65msgid "Request timed out" 65msgid "Request timed out"
66msgstr "# các khoá phiên chạy được chấp nhận" 66msgstr "# 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
70msgid "Unknown request status" 70msgid "Unknown request status"
71msgstr "Không rõ người dùng « %s »\n" 71msgstr "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
75msgid "%s is stopped" 75msgid "%s is stopped"
76msgstr "# các byte trong kho dữ liệu" 76msgstr "# 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
80msgid "%s is starting" 80msgid "%s is starting"
81msgstr "" 81msgstr ""
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
85msgid "%s is stopping" 85msgid "%s is stopping"
86msgstr "" 86msgstr ""
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
90msgid "%s is starting already" 90msgid "%s is starting already"
91msgstr "« %s » đang đăng ký trình điều khiển %d\n" 91msgstr "« %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
95msgid "%s is stopping already" 95msgid "%s is stopping already"
96msgstr "" 96msgstr ""
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
100msgid "%s is started already" 100msgid "%s is started already"
101msgstr "" 101msgstr ""
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
105msgid "%s is stopped already" 105msgid "%s is stopped already"
106msgstr "" 106msgstr ""
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
110msgid "%s service is not known to ARM" 110msgid "%s service is not known to ARM"
111msgstr "Không gian tên « %s » có đánh giá %d.\n" 111msgstr "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
115msgid "%s service failed to start" 115msgid "%s service failed to start"
116msgstr "Lỗi bắt đầu thu thập.\n" 116msgstr "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
120msgid "%s service can't be started because ARM is shutting down" 120msgid "%s service can't be started because ARM is shutting down"
121msgstr "« %s » đang tắt.\n" 121msgstr "« %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
125msgid "%.s Unknown result code." 125msgid "%.s Unknown result code."
126msgstr "" 126msgstr ""
@@ -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
854msgid "# peers connected" 854msgid "# peers connected"
855msgstr "# của các đồng đẳng đã kết nối" 855msgstr "# 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
1340msgid "be verbose (print progress information)" 1340msgid "be verbose (print progress information)"
1341msgstr "" 1341msgstr ""
1342 1342
@@ -2244,7 +2244,7 @@ msgstr "Lỗi phân tích dữ liệu giao diện từ « %s ».\n"
2244msgid "no-name" 2244msgid "no-name"
2245msgstr "không-tên" 2245msgstr "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
2249msgid "ECC signing failed at %s:%d: %s\n" 2249msgid "ECC signing failed at %s:%d: %s\n"
2250msgstr "%s bị lỗi tại %s:%d: « %s »\n" 2250msgstr "%s bị lỗi tại %s:%d: « %s »\n"
@@ -2442,12 +2442,12 @@ msgstr ""
2442msgid "Unrecognized URI type" 2442msgid "Unrecognized URI type"
2443msgstr "" 2443msgstr ""
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
2447msgid "Lacking key configuration settings.\n" 2447msgid "Lacking key configuration settings.\n"
2448msgstr "Lưu cấu hình ngay bây giờ không?" 2448msgstr "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
2452msgid "Could not access hostkey file `%s'.\n" 2452msgid "Could not access hostkey file `%s'.\n"
2453msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n" 2453msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
@@ -3800,16 +3800,16 @@ msgstr ""
3800msgid "Hostlist file `%s' could not be removed\n" 3800msgid "Hostlist file `%s' could not be removed\n"
3801msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" 3801msgstr "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
3805msgid "bytes in hostlist" 3805msgid "bytes in hostlist"
3806msgstr "# các byte trong kho dữ liệu" 3806msgstr "# các byte trong kho dữ liệu"
3807 3807
3808#: src/hostlist/hostlist-server.c:157 3808#: src/hostlist/hostlist-server.c:161
3809msgid "expired addresses encountered" 3809msgid "expired addresses encountered"
3810msgstr "" 3810msgstr ""
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 ""
3818msgid "Error in communication with PEERINFO service: %s\n" 3818msgid "Error in communication with PEERINFO service: %s\n"
3819msgstr "Cổng để liên lạc với giao diện người dùng GNUnet" 3819msgstr "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
3822msgid "HELLOs without addresses encountered (ignored)" 3822msgid "HELLOs without addresses encountered (ignored)"
3823msgstr "" 3823msgstr ""
3824 3824
3825#: src/hostlist/hostlist-server.c:219 3825#: src/hostlist/hostlist-server.c:224
3826msgid "bytes not included in hostlist (size limit)" 3826msgid "bytes not included in hostlist (size limit)"
3827msgstr "" 3827msgstr ""
3828 3828
3829#: src/hostlist/hostlist-server.c:263 3829#: src/hostlist/hostlist-server.c:268
3830#, fuzzy, c-format 3830#, fuzzy, c-format
3831msgid "Refusing `%s' request to hostlist server\n" 3831msgid "Refusing `%s' request to hostlist server\n"
3832msgstr "trình phục vụ danh sách máy HTTP hợp nhất" 3832msgstr "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
3836msgid "hostlist requests refused (not HTTP GET)" 3836msgid "hostlist requests refused (not HTTP GET)"
3837msgstr "# các yêu cầu danh sách máy được nhận" 3837msgstr "# 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
3841msgid "Refusing `%s' request with %llu bytes of upload data\n" 3841msgid "Refusing `%s' request with %llu bytes of upload data\n"
3842msgstr "" 3842msgstr ""
3843 3843
3844#: src/hostlist/hostlist-server.c:283 3844#: src/hostlist/hostlist-server.c:288
3845#, fuzzy 3845#, fuzzy
3846msgid "hostlist requests refused (upload data)" 3846msgid "hostlist requests refused (upload data)"
3847msgstr "# các yêu cầu danh sách máy được nhận" 3847msgstr "# 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
3850msgid "Could not handle hostlist request since I do not have a response yet\n" 3850msgid "Could not handle hostlist request since I do not have a response yet\n"
3851msgstr "" 3851msgstr ""
3852 3852
3853#: src/hostlist/hostlist-server.c:294 3853#: src/hostlist/hostlist-server.c:299
3854#, fuzzy 3854#, fuzzy
3855msgid "hostlist requests refused (not ready)" 3855msgid "hostlist requests refused (not ready)"
3856msgstr "# các yêu cầu danh sách máy được nhận" 3856msgstr "# 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
3860msgid "Received request for our hostlist\n" 3860msgid "Received request for our hostlist\n"
3861msgstr "Nhận yêu cầu định tuyến\n" 3861msgstr "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
3865msgid "hostlist requests processed" 3865msgid "hostlist requests processed"
3866msgstr "# các yêu cầu danh sách máy được nhận" 3866msgstr "# 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
3870msgid "# hostlist advertisements send" 3870msgid "# hostlist advertisements send"
3871msgstr "# Các quảng cáo ngoại được chuyển tiếp" 3871msgstr "# 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
3874msgid "Advertisement message could not be queued by core\n" 3874msgid "Advertisement message could not be queued by core\n"
3875msgstr "" 3875msgstr ""
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
3880msgid "Could not access PEERINFO service. Exiting.\n" 3880msgid "Could not access PEERINFO service. Exiting.\n"
3881msgstr "Không thể truy cập đến thông tin về không gian tên.\n" 3881msgstr "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
3885msgid "Invalid port number %llu. Exiting.\n" 3885msgid "Invalid port number %llu. Exiting.\n"
3886msgstr "" 3886msgstr ""
3887 3887
3888#: src/hostlist/hostlist-server.c:567 3888#: src/hostlist/hostlist-server.c:579
3889#, c-format 3889#, c-format
3890msgid "Hostlist service starts on %s:%llu\n" 3890msgid "Hostlist service starts on %s:%llu\n"
3891msgstr "" 3891msgstr ""
3892 3892
3893#: src/hostlist/hostlist-server.c:581 3893#: src/hostlist/hostlist-server.c:593
3894#, fuzzy, c-format 3894#, fuzzy, c-format
3895msgid "Address to obtain hostlist: `%s'\n" 3895msgid "Address to obtain hostlist: `%s'\n"
3896msgstr "Đang thử tải danh sách các máy xuống « %s »\n" 3896msgstr "Đ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
3900msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" 3900msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n"
3901msgstr "« %s » không sẵn sàng.\n" 3901msgstr "« %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
3905msgid "Could not start hostlist HTTP server on port %u\n" 3905msgid "Could not start hostlist HTTP server on port %u\n"
3906msgstr "Cổng cho trình phục vụ HTTP danh sách máy chủ thống nhất" 3906msgstr "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."
3939msgid "Print information about mesh tunnels and peers." 3939msgid "Print information about mesh tunnels and peers."
3940msgstr "In ra thông tin về các đồng đẳng GNUnet." 3940msgstr "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
3943msgid "Wrong CORE service\n" 3943msgid "Wrong CORE service\n"
3944msgstr "" 3944msgstr ""
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
3948msgid "Mesh service could not access hostkey: %s. Exiting.\n" 3948msgid "Mesh service could not access hostkey: %s. Exiting.\n"
3949msgstr "Không thể truy cập đến thông tin về không gian tên.\n" 3949msgstr "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"
3969msgstr "Lưu cấu hình ngay bây giờ không?" 3968msgstr "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
3976msgid "" 3975msgid ""
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 ""
4308msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" 4307msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n"
4309msgstr "" 4308msgstr ""
4310 4309
4311#: src/nat/nat.c:795 4310#: src/nat/nat.c:834
4312#, c-format 4311#, c-format
4313msgid "gnunet-helper-nat-server generated malformed address `%s'\n" 4312msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
4314msgstr "" 4313msgstr ""
4315 4314
4316#: src/nat/nat.c:844 4315#: src/nat/nat.c:883
4317#, fuzzy, c-format 4316#, fuzzy, c-format
4318msgid "Failed to start %s\n" 4317msgid "Failed to start %s\n"
4319msgstr "Lỗi bắt đầu thu thập.\n" 4318msgstr "Lỗi bắt đầu thu thập.\n"
4320 4319
4321#: src/nat/nat.c:1113 4320#: src/nat/nat.c:1152
4322msgid "malformed" 4321msgid "malformed"
4323msgstr "" 4322msgstr ""
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
4327msgid "" 4326msgid ""
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"
4330msgstr "" 4329msgstr ""
4331 4330
4332#: src/nat/nat.c:1326 4331#: src/nat/nat.c:1365
4333msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" 4332msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
4334msgstr "" 4333msgstr ""
4335 4334
4336#: src/nat/nat.c:1337 4335#: src/nat/nat.c:1376
4337#, c-format 4336#, c-format
4338msgid "Running gnunet-helper-nat-client %s %s %u\n" 4337msgid "Running gnunet-helper-nat-client %s %s %u\n"
4339msgstr "" 4338msgstr ""
@@ -4356,46 +4355,46 @@ msgstr "Lỗi kết nối đến gnunetd.\n"
4356msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" 4355msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
4357msgstr "" 4356msgstr ""
4358 4357
4359#: src/nse/gnunet-nse-profiler.c:885 4358#: src/nse/gnunet-nse-profiler.c:884
4360#, fuzzy 4359#, fuzzy
4361msgid "limit to the number of connections to NSE services, 0 for none" 4360msgid "limit to the number of connections to NSE services, 0 for none"
4362msgstr "Không kết nối được đến trình nền gnunetd." 4361msgstr "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
4365msgid "name of the file for writing connection information and statistics" 4364msgid "name of the file for writing connection information and statistics"
4366msgstr "" 4365msgstr ""
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
4369msgid "name of the file with the login information for the testbed" 4368msgid "name of the file with the login information for the testbed"
4370msgstr "" 4369msgstr ""
4371 4370
4372#: src/nse/gnunet-nse-profiler.c:894 4371#: src/nse/gnunet-nse-profiler.c:893
4373msgid "name of the file for writing the main results" 4372msgid "name of the file for writing the main results"
4374msgstr "" 4373msgstr ""
4375 4374
4376#: src/nse/gnunet-nse-profiler.c:897 4375#: src/nse/gnunet-nse-profiler.c:896
4377msgid "Number of peers to run in each round, separated by commas" 4376msgid "Number of peers to run in each round, separated by commas"
4378msgstr "" 4377msgstr ""
4379 4378
4380#: src/nse/gnunet-nse-profiler.c:903 4379#: src/nse/gnunet-nse-profiler.c:902
4381msgid "delay between rounds" 4380msgid "delay between rounds"
4382msgstr "" 4381msgstr ""
4383 4382
4384#: src/nse/gnunet-nse-profiler.c:912 4383#: src/nse/gnunet-nse-profiler.c:911
4385#, fuzzy 4384#, fuzzy
4386msgid "Measure quality and performance of the NSE service." 4385msgid "Measure quality and performance of the NSE service."
4387msgstr "Không thể truy cập đến dịch vụ" 4386msgstr "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
4391msgid "NSE service could not access hostkey: %s\n" 4390msgid "NSE service could not access hostkey: %s\n"
4392msgstr "Không thể truy cập đến thông tin về không gian tên.\n" 4391msgstr "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
4395msgid "NSE service is lacking key configuration settings. Exiting.\n" 4394msgid "NSE service is lacking key configuration settings. Exiting.\n"
4396msgstr "" 4395msgstr ""
4397 4396
4398#: src/nse/gnunet-service-nse.c:1524 4397#: src/nse/gnunet-service-nse.c:1508
4399msgid "Invalid work requirement for NSE service. Exiting.\n" 4398msgid "Invalid work requirement for NSE service. Exiting.\n"
4400msgstr "" 4399msgstr ""
4401 4400
@@ -4404,21 +4403,21 @@ msgstr ""
4404msgid "Removing expired address of transport `%s'\n" 4403msgid "Removing expired address of transport `%s'\n"
4405msgstr "Đã nạp truyền tải « %s »\n" 4404msgstr "Đã 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
4409msgid "Failed to parse HELLO in file `%s': %s\n" 4408msgid "Failed to parse HELLO in file `%s': %s\n"
4410msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 4409msgstr "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
4414msgid "Failed to parse HELLO in file `%s': %s %u \n" 4413msgid "Failed to parse HELLO in file `%s': %s %u \n"
4415msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 4414msgstr "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
4418msgid "# peers known" 4417msgid "# peers known"
4419msgstr "" 4418msgstr ""
4420 4419
4421#: src/peerinfo/gnunet-service-peerinfo.c:480 4420#: src/peerinfo/gnunet-service-peerinfo.c:481
4422#, c-format 4421#, c-format
4423msgid "" 4422msgid ""
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
4431msgid "Scanning directory `%s'\n" 4430msgid "Scanning directory `%s'\n"
4432msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 4431msgstr "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
4436msgid "Still no peers found in `%s'!\n" 4435msgid "Still no peers found in `%s'!\n"
4437msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" 4436msgstr "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
4441msgid "Cleaning up directory `%s'\n" 4440msgid "Cleaning up directory `%s'\n"
4442msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 4441msgstr "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
4446msgid "Importing HELLOs from `%s'\n" 4445msgid "Importing HELLOs from `%s'\n"
4447msgstr "" 4446msgstr ""
@@ -4662,81 +4661,73 @@ msgstr ""
4662msgid "Daemon to announce regular expressions for the peer using mesh." 4661msgid "Daemon to announce regular expressions for the peer using mesh."
4663msgstr "" 4662msgstr ""
4664 4663
4665#: src/regex/gnunet-regex-profiler.c:1246 4664#: src/regex/gnunet-regex-profiler.c:1247
4666#, fuzzy 4665#, fuzzy
4667msgid "No configuration file given. Exiting\n" 4666msgid "No configuration file given. Exiting\n"
4668msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" 4667msgstr "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
4672msgid "Configuration option \"regex_prefix\" missing. Exiting\n" 4671msgid "Configuration option \"regex_prefix\" missing. Exiting\n"
4673msgstr "Giá trị cấu hình « %s » cho « %s » trong phần « %s » nên là con số\n" 4672msgstr "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
4676msgid "No hosts-file specified on command line. Exiting.\n"
4677msgstr ""
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
4682msgid "No policy directory specified on command line. Exiting.\n" 4677msgid "No policy directory specified on command line. Exiting.\n"
4683msgstr "" 4678msgstr ""
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
4688msgid "Specified policies directory does not exist. Exiting.\n" 4683msgid "Specified policies directory does not exist. Exiting.\n"
4689msgstr "" 4684msgstr ""
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
4693msgid "No files found in `%s'\n" 4688msgid "No files found in `%s'\n"
4694msgstr "Vẫn còn không tìm thấy đồng đẳng trong « %s ».\n" 4689msgstr "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
4697msgid "No search strings file given. Exiting.\n" 4692msgid "No search strings file given. Exiting.\n"
4698msgstr "" 4693msgstr ""
4699 4694
4700#: src/regex/gnunet-regex-profiler.c:1314 4695#: src/regex/gnunet-regex-profiler.c:1319
4701#, fuzzy 4696#, fuzzy
4702msgid "" 4697msgid ""
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"
4705msgstr "Gặp lỗi khi tải xuống: %s\n" 4700msgstr "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
4709msgid "Error loading search strings. Exiting.\n" 4704msgid "Error loading search strings. Exiting.\n"
4710msgstr "Gặp lỗi khi tải xuống: %s\n" 4705msgstr "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
4714msgid "name of the file for writing statistics" 4709msgid "name of the file for writing statistics"
4715msgstr "Lỗi lấy thông kê về truyền tải.\n" 4710msgstr "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
4718msgid "wait TIMEOUT before considering a string match as failed" 4713msgid "wait TIMEOUT before ending the experiment"
4719msgstr ""
4720
4721#: src/regex/gnunet-regex-profiler.c:1395
4722msgid "number of search strings to read from search strings file"
4723msgstr "" 4714msgstr ""
4724 4715
4725#: src/regex/gnunet-regex-profiler.c:1398 4716#: src/regex/gnunet-regex-profiler.c:1400
4726msgid "directory with policy files" 4717msgid "directory with policy files"
4727msgstr "" 4718msgstr ""
4728 4719
4729#: src/regex/gnunet-regex-profiler.c:1401 4720#: src/regex/gnunet-regex-profiler.c:1403
4730#, fuzzy 4721#, fuzzy
4731msgid "name of file with input strings" 4722msgid "name of file with input strings"
4732msgstr "Lỗi lấy thông kê về truyền tải.\n" 4723msgstr "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
4736msgid "name of file with hosts' names" 4727msgid "name of file with hosts' names"
4737msgstr "Lỗi lấy thông kê về truyền tải.\n" 4728msgstr "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
4740msgid "Profiler for regex" 4731msgid "Profiler for regex"
4741msgstr "" 4732msgstr ""
4742 4733
@@ -4853,7 +4844,7 @@ msgstr ""
4853msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" 4844msgid "Could not parse execution interval for `%s', set to default 60 sec.\n"
4854msgstr "" 4845msgstr ""
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
4858msgid "" 4849msgid ""
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 ""
4864msgid "Job command file not given. Exiting\n" 4855msgid "Job command file not given. Exiting\n"
4865msgstr "dùng tập tin cấu hình TÊN_TẬP_TIN" 4856msgstr "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
4869msgid "Waiting for child to exit.\n" 4860msgid "Waiting for child to exit.\n"
4870msgstr "Đang đợi các đồng đẳng kết nối" 4861msgstr "Đ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
4874msgid "Spawning process `%s'\n" 4865msgid "Spawning process `%s'\n"
4875msgstr "Đang bắt đầu tài về « %s »\n" 4866msgstr "Đ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
4879msgid "Exiting as the number of peers is %u\n" 4870msgid "Exiting as the number of peers is %u\n"
4880msgstr "tăng sổ tối đa các kết nối TCP/IP" 4871msgstr "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
4883msgid "create COUNT number of peers" 4874msgid "create COUNT number of peers"
4884msgstr "" 4875msgstr ""
4885 4876
4886#: src/testbed/gnunet-testbed-profiler.c:278 4877#: src/testbed/gnunet-testbed-profiler.c:280
4887msgid "tolerate COUNT number of continious timeout failures" 4878msgid "tolerate COUNT number of continious timeout failures"
4888msgstr "" 4879msgstr ""
4889 4880
@@ -4902,55 +4893,55 @@ msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được
4902msgid "Hosts file %s cannot be read\n" 4893msgid "Hosts file %s cannot be read\n"
4903msgstr "Khoá phiên chạy từ đồng đẳng « %s » không thể được thẩm tra.\n" 4894msgstr "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
4907msgid "The function %s is only available when compiled with (--with-ll)\n" 4898msgid "The function %s is only available when compiled with (--with-ll)\n"
4908msgstr "" 4899msgstr ""
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
4912msgid "Adding host %u failed with error: %s\n" 4903msgid "Adding host %u failed with error: %s\n"
4913msgstr "« %s » thất bại với mã lỗi %d: %s\n" 4904msgstr "« %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
4916msgid "Linking controllers failed. Exiting" 4907msgid "Linking controllers failed. Exiting"
4917msgstr "" 4908msgstr ""
4918 4909
4919#: src/testbed/testbed_api_testbed.c:913 4910#: src/testbed/testbed_api_testbed.c:1094
4920#, c-format 4911#, c-format
4921msgid "Host registration failed for a host. Error: %s\n" 4912msgid "Host registration failed for a host. Error: %s\n"
4922msgstr "" 4913msgstr ""
4923 4914
4924#: src/testbed/testbed_api_testbed.c:978 4915#: src/testbed/testbed_api_testbed.c:1175
4925msgid "Controller crash detected. Shutting down.\n" 4916msgid "Controller crash detected. Shutting down.\n"
4926msgstr "" 4917msgstr ""
4927 4918
4928#: src/testbed/testbed_api_testbed.c:1081 4919#: src/testbed/testbed_api_testbed.c:1320
4929#, c-format 4920#, c-format
4930msgid "Host %s cannot start testbed\n" 4921msgid "Host %s cannot start testbed\n"
4931msgstr "" 4922msgstr ""
4932 4923
4933#: src/testbed/testbed_api_testbed.c:1085 4924#: src/testbed/testbed_api_testbed.c:1324
4934msgid "Testbed cannot be started on localhost\n" 4925msgid "Testbed cannot be started on localhost\n"
4935msgstr "" 4926msgstr ""
4936 4927
4937#: src/testbed/testbed_api_testbed.c:1120 4928#: src/testbed/testbed_api_testbed.c:1365
4938msgid "Cannot start the master controller" 4929msgid "Cannot start the master controller"
4939msgstr "" 4930msgstr ""
4940 4931
4941#: src/testbed/testbed_api_testbed.c:1138 4932#: src/testbed/testbed_api_testbed.c:1383
4942msgid "Shutting down testbed due to timeout while setup.\n" 4933msgid "Shutting down testbed due to timeout while setup.\n"
4943msgstr "" 4934msgstr ""
4944 4935
4945#: src/testbed/testbed_api_testbed.c:1197 4936#: src/testbed/testbed_api_testbed.c:1443
4946msgid "No hosts loaded from LoadLeveler. Need at least one host\n" 4937msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
4947msgstr "" 4938msgstr ""
4948 4939
4949#: src/testbed/testbed_api_testbed.c:1209 4940#: src/testbed/testbed_api_testbed.c:1455
4950msgid "No hosts loaded. Need at least one host\n" 4941msgid "No hosts loaded. Need at least one host\n"
4951msgstr "" 4942msgstr ""
4952 4943
4953#: src/testbed/testbed_api_testbed.c:1233 4944#: src/testbed/testbed_api_testbed.c:1479
4954msgid "Specified topology must be supported by testbed" 4945msgid "Specified topology must be supported by testbed"
4955msgstr "" 4946msgstr ""
4956 4947
@@ -5097,7 +5088,7 @@ msgstr "Không thể lưu tập tin cấu hình « %s »:"
5097msgid "Failed to start `%s': %s\n" 5088msgid "Failed to start `%s': %s\n"
5098msgstr "Lỗi chạy %s: %s %d\n" 5089msgstr "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
5102msgid "Failed to load configuration from %s\n" 5093msgid "Failed to load configuration from %s\n"
5103msgstr "Không thể lưu tập tin cấu hình « %s »:" 5094msgstr "Không thể lưu tập tin cấu hình « %s »:"
@@ -5257,7 +5248,7 @@ msgstr ""
5257msgid "# bytes payload dropped (other peer was not connected)" 5248msgid "# bytes payload dropped (other peer was not connected)"
5258msgstr "" 5249msgstr ""
5259 5250
5260#: src/transport/gnunet-service-transport_clients.c:728 5251#: src/transport/gnunet-service-transport_clients.c:733
5261#, fuzzy 5252#, fuzzy
5262msgid "# REQUEST CONNECT messages received" 5253msgid "# REQUEST CONNECT messages received"
5263msgstr "# các thông báo PONG đã mật mã được nhận" 5254msgstr "# 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"
5330msgid "# ms throttling suggested" 5321msgid "# ms throttling suggested"
5331msgstr "" 5322msgstr ""
5332 5323
5333#: src/transport/gnunet-service-transport_neighbours.c:2770 5324#: src/transport/gnunet-service-transport_neighbours.c:2774
5334#, fuzzy 5325#, fuzzy
5335msgid "# unexpected CONNECT_ACK messages (no peer)" 5326msgid "# unexpected CONNECT_ACK messages (no peer)"
5336msgstr "gửi ĐẾM thông báo" 5327msgstr "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
5341msgid "# unexpected CONNECT_ACK messages (not ready)" 5332msgid "# unexpected CONNECT_ACK messages (not ready)"
5342msgstr "gửi ĐẾM thông báo" 5333msgstr "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
5346msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" 5337msgid "# unexpected CONNECT_ACK messages (waiting on ATS)"
5347msgstr "gửi ĐẾM thông báo" 5338msgstr "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
5351msgid "# unexpected CONNECT_ACK messages (disconnecting)" 5342msgid "# unexpected CONNECT_ACK messages (disconnecting)"
5352msgstr "gửi ĐẾM thông báo" 5343msgstr "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
5356msgid "# unexpected SESSION ACK messages" 5347msgid "# unexpected SESSION ACK messages"
5357msgstr "# các thông báo PONG đã mật mã được gửi" 5348msgstr "# 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
5360msgid "# SET QUOTA messages ignored (no such peer)" 5351msgid "# SET QUOTA messages ignored (no such peer)"
5361msgstr "" 5352msgstr ""
5362 5353
5363#: src/transport/gnunet-service-transport_neighbours.c:3115 5354#: src/transport/gnunet-service-transport_neighbours.c:3119
5364msgid "# disconnects due to quota of 0" 5355msgid "# disconnects due to quota of 0"
5365msgstr "" 5356msgstr ""
5366 5357
5367#: src/transport/gnunet-service-transport_neighbours.c:3146 5358#: src/transport/gnunet-service-transport_neighbours.c:3150
5368msgid "# disconnect messages ignored (old format)" 5359msgid "# disconnect messages ignored (old format)"
5369msgstr "" 5360msgstr ""
5370 5361
5371#: src/transport/gnunet-service-transport_neighbours.c:3157 5362#: src/transport/gnunet-service-transport_neighbours.c:3161
5372msgid "# disconnect messages ignored (timestamp)" 5363msgid "# disconnect messages ignored (timestamp)"
5373msgstr "" 5364msgstr ""
5374 5365
5375#: src/transport/gnunet-service-transport_neighbours.c:3188 5366#: src/transport/gnunet-service-transport_neighbours.c:3192
5376msgid "# other peer asked to disconnect from us" 5367msgid "# other peer asked to disconnect from us"
5377msgstr "" 5368msgstr ""
5378 5369
5379#: src/transport/gnunet-service-transport_neighbours.c:3283 5370#: src/transport/gnunet-service-transport_neighbours.c:3287
5380#, fuzzy 5371#, fuzzy
5381msgid "# disconnected from peer upon explicit request" 5372msgid "# disconnected from peer upon explicit request"
5382msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải" 5373msgstr "# 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"
5790msgid "# bytes dropped by SMTP (outgoing)" 5781msgid "# bytes dropped by SMTP (outgoing)"
5791msgstr "# các byte loại đi bởi SMTP (đi ra)" 5782msgstr "# 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
5795msgid "Unexpected address length: %u bytes\n" 5786msgid "Unexpected address length: %u bytes\n"
5796msgstr "Gặp sự kiện bất thường: %d\n" 5787msgstr "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
5805msgid "# bytes currently in TCP buffers" 5796msgid "# bytes currently in TCP buffers"
5806msgstr "# các byte đã gừi qua TCP" 5797msgstr "# 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
5813msgid "# TCP sessions active" 5804msgid "# TCP sessions active"
5814msgstr "# các khoá phiên chạy được chấp nhận" 5805msgstr "# 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
5818msgid "# bytes discarded by TCP (timeout)" 5809msgid "# bytes discarded by TCP (timeout)"
5819msgstr "# các byte loại đi bởi TCP (đi ra)" 5810msgstr "# 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
5823msgid "# bytes transmitted via TCP" 5814msgid "# bytes transmitted via TCP"
5824msgstr "# các byte được gửi" 5815msgstr "# 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
5828msgid "# bytes discarded by TCP (disconnect)" 5819msgid "# bytes discarded by TCP (disconnect)"
5829msgstr "# các byte loại đi bởi TCP (đi ra)" 5820msgstr "# 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
5833msgid "Trying to send with invalid session %p\n" 5824msgid "Trying to send with invalid session %p\n"
5834msgstr "" 5825msgstr ""
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
5838msgid "Address of unexpected length: %u\n" 5829msgid "Address of unexpected length: %u\n"
5839msgstr "Gặp sự kiện bất thường: %d\n" 5830msgstr "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
5842msgid "# transport-service disconnect requests for TCP" 5833msgid "# transport-service disconnect requests for TCP"
5843msgstr "" 5834msgstr ""
5844 5835
5845#: src/transport/plugin_transport_tcp.c:1867 5836#: src/transport/plugin_transport_tcp.c:1868
5846#, fuzzy 5837#, fuzzy
5847msgid "# TCP WELCOME messages received" 5838msgid "# TCP WELCOME messages received"
5848msgstr "# các thông báo PONG đã mật mã được nhận" 5839msgstr "# 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
5851msgid "# bytes received via TCP" 5842msgid "# bytes received via TCP"
5852msgstr "# các byte đã nhận qua TCP" 5843msgstr "# 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
5855msgid "# network-level TCP disconnect events" 5846msgid "# network-level TCP disconnect events"
5856msgstr "" 5847msgstr ""
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
5861msgid "Require valid port number for service `%s' in configuration!\n" 5852msgid "Require valid port number for service `%s' in configuration!\n"
5862msgstr "" 5853msgstr ""
5863 5854
5864#: src/transport/plugin_transport_tcp.c:2358 5855#: src/transport/plugin_transport_tcp.c:2359
5865#, fuzzy 5856#, fuzzy
5866msgid "Failed to start service.\n" 5857msgid "Failed to start service.\n"
5867msgstr "Lỗi bắt đầu thu thập.\n" 5858msgstr "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
5871msgid "TCP transport listening on port %llu\n" 5862msgid "TCP transport listening on port %llu\n"
5872msgstr "" 5863msgstr ""
5873 5864
5874#: src/transport/plugin_transport_tcp.c:2448 5865#: src/transport/plugin_transport_tcp.c:2452
5875msgid "TCP transport not listening on any port (client only)\n" 5866msgid "TCP transport not listening on any port (client only)\n"
5876msgstr "" 5867msgstr ""
5877 5868
5878#: src/transport/plugin_transport_tcp.c:2452 5869#: src/transport/plugin_transport_tcp.c:2456
5879#, c-format 5870#, c-format
5880msgid "TCP transport advertises itself as being on port %llu\n" 5871msgid "TCP transport advertises itself as being on port %llu\n"
5881msgstr "" 5872msgstr ""
@@ -5900,14 +5891,14 @@ msgstr ""
5900msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" 5891msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
5901msgstr "" 5892msgstr ""
5902 5893
5903#: src/transport/plugin_transport_udp.c:2520 5894#: src/transport/plugin_transport_udp.c:2350
5904#, c-format 5895#, c-format
5905msgid "" 5896msgid ""
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"
5908msgstr "" 5899msgstr ""
5909 5900
5910#: src/transport/plugin_transport_udp.c:2534 5901#: src/transport/plugin_transport_udp.c:2364
5911#, c-format 5902#, c-format
5912msgid "" 5903msgid ""
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"
5916msgstr "" 5907msgstr ""
5917 5908
5918#: src/transport/plugin_transport_udp.c:2775 5909#: src/transport/plugin_transport_udp.c:2664
5919#, fuzzy 5910#, fuzzy
5920msgid "Failed to open UDP sockets\n" 5911msgid "Failed to open UDP sockets\n"
5921msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" 5912msgstr "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
5925msgid "Given `%s' option is out of range: %llu > %u\n" 5916msgid "Given `%s' option is out of range: %llu > %u\n"
5926msgstr "" 5917msgstr ""
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
5930msgid "Invalid IPv6 address: `%s'\n" 5921msgid "Invalid IPv6 address: `%s'\n"
5931msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n" 5922msgstr "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
5926msgid "Failed to create network sockets, plugin failed\n"
5927msgstr "Không thể tạo miền tên.\n"
5928
5929#: src/transport/plugin_transport_unix.c:1427
5934#, fuzzy 5930#, fuzzy
5935msgid "Failed to open UNIX sockets\n" 5931msgid "Failed to open UNIX listen socket\n"
5936msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" 5932msgstr "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 ""
6245msgid "gnunet-ecc failed" 6241msgid "gnunet-ecc failed"
6246msgstr "" 6242msgstr ""
6247 6243
6248#: src/util/crypto_ecc.c:1045 6244#: src/util/crypto_ecc.c:1084
6249#, fuzzy, c-format 6245#, fuzzy, c-format
6250msgid "ECC signature verification failed at %s:%d: %s\n" 6246msgid "ECC signature verification failed at %s:%d: %s\n"
6251msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" 6247msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n"
@@ -6510,17 +6506,17 @@ msgstr ""
6510msgid "Perform default-actions for GNUnet URIs" 6506msgid "Perform default-actions for GNUnet URIs"
6511msgstr "" 6507msgstr ""
6512 6508
6513#: src/util/helper.c:271 6509#: src/util/helper.c:322
6514#, fuzzy, c-format 6510#, fuzzy, c-format
6515msgid "Error reading from `%s': %s\n" 6511msgid "Error reading from `%s': %s\n"
6516msgstr "Gặp lỗi khi tạo người dùng" 6512msgstr "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
6520msgid "Failed to parse inbound message from helper `%s'\n" 6516msgid "Failed to parse inbound message from helper `%s'\n"
6521msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" 6517msgstr "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
6525msgid "Error writing to `%s': %s\n" 6521msgid "Error writing to `%s': %s\n"
6526msgstr "Gặp lỗi khi tạo người dùng" 6522msgstr "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 ""
7msgstr "" 7msgstr ""
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"
35msgid "Failed to remove servicehome directory %s\n" 35msgid "Failed to remove servicehome directory %s\n"
36msgstr "" 36msgstr ""
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
39msgid "Message was sent successfully" 39msgid "Message was sent successfully"
40msgstr "" 40msgstr ""
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
44msgid "Misconfiguration (can't connect to the ARM service)" 44msgid "Misconfiguration (can't connect to the ARM service)"
45msgstr "初始化“%s”服务失败。\n" 45msgstr "初始化“%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
48msgid "We disconnected from ARM before we could send a request" 48msgid "We disconnected from ARM before we could send a request"
49msgstr "" 49msgstr ""
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
52msgid "ARM API is busy" 52msgid "ARM API is busy"
53msgstr "" 53msgstr ""
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
56msgid "Request doesn't fit into a message" 56msgid "Request doesn't fit into a message"
57msgstr "" 57msgstr ""
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
60msgid "Request timed out" 60msgid "Request timed out"
61msgstr "" 61msgstr ""
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
65msgid "Unknown request status" 65msgid "Unknown request status"
66msgstr "未知的用户“%s”\n" 66msgstr "未知的用户“%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
70msgid "%s is stopped" 70msgid "%s is stopped"
71msgstr "" 71msgstr ""
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
75msgid "%s is starting" 75msgid "%s is starting"
76msgstr "" 76msgstr ""
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
80msgid "%s is stopping" 80msgid "%s is stopping"
81msgstr "" 81msgstr ""
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
85msgid "%s is starting already" 85msgid "%s is starting already"
86msgstr "" 86msgstr ""
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
90msgid "%s is stopping already" 90msgid "%s is stopping already"
91msgstr "" 91msgstr ""
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
95msgid "%s is started already" 95msgid "%s is started already"
96msgstr "" 96msgstr ""
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
100msgid "%s is stopped already" 100msgid "%s is stopped already"
101msgstr "" 101msgstr ""
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
105msgid "%s service is not known to ARM" 105msgid "%s service is not known to ARM"
106msgstr "服务已删除。\n" 106msgstr "服务已删除。\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
110msgid "%s service failed to start" 110msgid "%s service failed to start"
111msgstr "运行 %s失败:%s %d\n" 111msgstr "运行 %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
115msgid "%s service can't be started because ARM is shutting down" 115msgid "%s service can't be started because ARM is shutting down"
116msgstr "" 116msgstr ""
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
120msgid "%.s Unknown result code." 120msgid "%.s Unknown result code."
121msgstr "" 121msgstr ""
@@ -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
819msgid "# peers connected" 819msgid "# peers connected"
820msgstr "" 820msgstr ""
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
1272msgid "be verbose (print progress information)" 1272msgid "be verbose (print progress information)"
1273msgstr "" 1273msgstr ""
1274 1274
@@ -2120,7 +2120,7 @@ msgstr "打开日志文件“%s”失败:%s\n"
2120msgid "no-name" 2120msgid "no-name"
2121msgstr "无名称" 2121msgstr "无名称"
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
2125msgid "ECC signing failed at %s:%d: %s\n" 2125msgid "ECC signing failed at %s:%d: %s\n"
2126msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" 2126msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
@@ -2314,12 +2314,12 @@ msgstr ""
2314msgid "Unrecognized URI type" 2314msgid "Unrecognized URI type"
2315msgstr "" 2315msgstr ""
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
2319msgid "Lacking key configuration settings.\n" 2319msgid "Lacking key configuration settings.\n"
2320msgstr "立即保存配置?" 2320msgstr "立即保存配置?"
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
2324msgid "Could not access hostkey file `%s'.\n" 2324msgid "Could not access hostkey file `%s'.\n"
2325msgstr "找不到接口“%s”的一个 IP 地址。\n" 2325msgstr "找不到接口“%s”的一个 IP 地址。\n"
@@ -3592,15 +3592,15 @@ msgstr ""
3592msgid "Hostlist file `%s' could not be removed\n" 3592msgid "Hostlist file `%s' could not be removed\n"
3593msgstr "" 3593msgstr ""
3594 3594
3595#: src/hostlist/hostlist-server.c:134 3595#: src/hostlist/hostlist-server.c:137
3596msgid "bytes in hostlist" 3596msgid "bytes in hostlist"
3597msgstr "" 3597msgstr ""
3598 3598
3599#: src/hostlist/hostlist-server.c:157 3599#: src/hostlist/hostlist-server.c:161
3600msgid "expired addresses encountered" 3600msgid "expired addresses encountered"
3601msgstr "" 3601msgstr ""
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 ""
3609msgid "Error in communication with PEERINFO service: %s\n" 3609msgid "Error in communication with PEERINFO service: %s\n"
3610msgstr "" 3610msgstr ""
3611 3611
3612#: src/hostlist/hostlist-server.c:205 3612#: src/hostlist/hostlist-server.c:210
3613msgid "HELLOs without addresses encountered (ignored)" 3613msgid "HELLOs without addresses encountered (ignored)"
3614msgstr "" 3614msgstr ""
3615 3615
3616#: src/hostlist/hostlist-server.c:219 3616#: src/hostlist/hostlist-server.c:224
3617msgid "bytes not included in hostlist (size limit)" 3617msgid "bytes not included in hostlist (size limit)"
3618msgstr "" 3618msgstr ""
3619 3619
3620#: src/hostlist/hostlist-server.c:263 3620#: src/hostlist/hostlist-server.c:268
3621#, c-format 3621#, c-format
3622msgid "Refusing `%s' request to hostlist server\n" 3622msgid "Refusing `%s' request to hostlist server\n"
3623msgstr "" 3623msgstr ""
3624 3624
3625#: src/hostlist/hostlist-server.c:266 3625#: src/hostlist/hostlist-server.c:271
3626msgid "hostlist requests refused (not HTTP GET)" 3626msgid "hostlist requests refused (not HTTP GET)"
3627msgstr "" 3627msgstr ""
3628 3628
3629#: src/hostlist/hostlist-server.c:279 3629#: src/hostlist/hostlist-server.c:284
3630#, c-format 3630#, c-format
3631msgid "Refusing `%s' request with %llu bytes of upload data\n" 3631msgid "Refusing `%s' request with %llu bytes of upload data\n"
3632msgstr "" 3632msgstr ""
3633 3633
3634#: src/hostlist/hostlist-server.c:283 3634#: src/hostlist/hostlist-server.c:288
3635msgid "hostlist requests refused (upload data)" 3635msgid "hostlist requests refused (upload data)"
3636msgstr "" 3636msgstr ""
3637 3637
3638#: src/hostlist/hostlist-server.c:291 3638#: src/hostlist/hostlist-server.c:296
3639msgid "Could not handle hostlist request since I do not have a response yet\n" 3639msgid "Could not handle hostlist request since I do not have a response yet\n"
3640msgstr "" 3640msgstr ""
3641 3641
3642#: src/hostlist/hostlist-server.c:294 3642#: src/hostlist/hostlist-server.c:299
3643msgid "hostlist requests refused (not ready)" 3643msgid "hostlist requests refused (not ready)"
3644msgstr "" 3644msgstr ""
3645 3645
3646#: src/hostlist/hostlist-server.c:298 3646#: src/hostlist/hostlist-server.c:303
3647msgid "Received request for our hostlist\n" 3647msgid "Received request for our hostlist\n"
3648msgstr "" 3648msgstr ""
3649 3649
3650#: src/hostlist/hostlist-server.c:299 3650#: src/hostlist/hostlist-server.c:304
3651msgid "hostlist requests processed" 3651msgid "hostlist requests processed"
3652msgstr "" 3652msgstr ""
3653 3653
3654#: src/hostlist/hostlist-server.c:341 3654#: src/hostlist/hostlist-server.c:346
3655msgid "# hostlist advertisements send" 3655msgid "# hostlist advertisements send"
3656msgstr "" 3656msgstr ""
3657 3657
3658#: src/hostlist/hostlist-server.c:384 3658#: src/hostlist/hostlist-server.c:389
3659msgid "Advertisement message could not be queued by core\n" 3659msgid "Advertisement message could not be queued by core\n"
3660msgstr "" 3660msgstr ""
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
3664msgid "Could not access PEERINFO service. Exiting.\n" 3664msgid "Could not access PEERINFO service. Exiting.\n"
3665msgstr "" 3665msgstr ""
3666 3666
3667#: src/hostlist/hostlist-server.c:558 3667#: src/hostlist/hostlist-server.c:570
3668#, c-format 3668#, c-format
3669msgid "Invalid port number %llu. Exiting.\n" 3669msgid "Invalid port number %llu. Exiting.\n"
3670msgstr "" 3670msgstr ""
3671 3671
3672#: src/hostlist/hostlist-server.c:567 3672#: src/hostlist/hostlist-server.c:579
3673#, c-format 3673#, c-format
3674msgid "Hostlist service starts on %s:%llu\n" 3674msgid "Hostlist service starts on %s:%llu\n"
3675msgstr "" 3675msgstr ""
3676 3676
3677#: src/hostlist/hostlist-server.c:581 3677#: src/hostlist/hostlist-server.c:593
3678#, c-format 3678#, c-format
3679msgid "Address to obtain hostlist: `%s'\n" 3679msgid "Address to obtain hostlist: `%s'\n"
3680msgstr "" 3680msgstr ""
3681 3681
3682#: src/hostlist/hostlist-server.c:621 3682#: src/hostlist/hostlist-server.c:633
3683#, fuzzy, c-format 3683#, fuzzy, c-format
3684msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n" 3684msgid "`%s' is not a valid IP address! Ignoring BINDTOIP.\n"
3685msgstr "“%s”不可用。\n" 3685msgstr "“%s”不可用。\n"
3686 3686
3687#: src/hostlist/hostlist-server.c:663 3687#: src/hostlist/hostlist-server.c:675
3688#, c-format 3688#, c-format
3689msgid "Could not start hostlist HTTP server on port %u\n" 3689msgid "Could not start hostlist HTTP server on port %u\n"
3690msgstr "" 3690msgstr ""
@@ -3722,11 +3722,11 @@ msgstr "无法获取有关用户“%s”的信息:%s\n"
3722msgid "Print information about mesh tunnels and peers." 3722msgid "Print information about mesh tunnels and peers."
3723msgstr "无法获取有关用户“%s”的信息:%s\n" 3723msgstr "无法获取有关用户“%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
3726msgid "Wrong CORE service\n" 3726msgid "Wrong CORE service\n"
3727msgstr "" 3727msgstr ""
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
3731msgid "Mesh service could not access hostkey: %s. Exiting.\n" 3731msgid "Mesh service could not access hostkey: %s. Exiting.\n"
3732msgstr "找不到接口“%s”的一个 IP 地址。\n" 3732msgstr "找不到接口“%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"
3752msgstr "立即保存配置?" 3751msgstr "立即保存配置?"
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
3759msgid "" 3758msgid ""
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 ""
4083msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n" 4082msgid "gnunet-helper-nat-client not found or behind NAT, disabling it\n"
4084msgstr "" 4083msgstr ""
4085 4084
4086#: src/nat/nat.c:795 4085#: src/nat/nat.c:834
4087#, c-format 4086#, c-format
4088msgid "gnunet-helper-nat-server generated malformed address `%s'\n" 4087msgid "gnunet-helper-nat-server generated malformed address `%s'\n"
4089msgstr "" 4088msgstr ""
4090 4089
4091#: src/nat/nat.c:844 4090#: src/nat/nat.c:883
4092#, fuzzy, c-format 4091#, fuzzy, c-format
4093msgid "Failed to start %s\n" 4092msgid "Failed to start %s\n"
4094msgstr "运行 %s失败:%s %d\n" 4093msgstr "运行 %s失败:%s %d\n"
4095 4094
4096#: src/nat/nat.c:1113 4095#: src/nat/nat.c:1152
4097msgid "malformed" 4096msgid "malformed"
4098msgstr "" 4097msgstr ""
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
4102msgid "" 4101msgid ""
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"
4105msgstr "" 4104msgstr ""
4106 4105
4107#: src/nat/nat.c:1326 4106#: src/nat/nat.c:1365
4108msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n" 4107msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
4109msgstr "" 4108msgstr ""
4110 4109
4111#: src/nat/nat.c:1337 4110#: src/nat/nat.c:1376
4112#, c-format 4111#, c-format
4113msgid "Running gnunet-helper-nat-client %s %s %u\n" 4112msgid "Running gnunet-helper-nat-client %s %s %u\n"
4114msgstr "" 4113msgstr ""
@@ -4130,45 +4129,45 @@ msgstr ""
4130msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n" 4129msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
4131msgstr "" 4130msgstr ""
4132 4131
4133#: src/nse/gnunet-nse-profiler.c:885 4132#: src/nse/gnunet-nse-profiler.c:884
4134msgid "limit to the number of connections to NSE services, 0 for none" 4133msgid "limit to the number of connections to NSE services, 0 for none"
4135msgstr "" 4134msgstr ""
4136 4135
4137#: src/nse/gnunet-nse-profiler.c:888 4136#: src/nse/gnunet-nse-profiler.c:887
4138msgid "name of the file for writing connection information and statistics" 4137msgid "name of the file for writing connection information and statistics"
4139msgstr "" 4138msgstr ""
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
4142msgid "name of the file with the login information for the testbed" 4141msgid "name of the file with the login information for the testbed"
4143msgstr "" 4142msgstr ""
4144 4143
4145#: src/nse/gnunet-nse-profiler.c:894 4144#: src/nse/gnunet-nse-profiler.c:893
4146msgid "name of the file for writing the main results" 4145msgid "name of the file for writing the main results"
4147msgstr "" 4146msgstr ""
4148 4147
4149#: src/nse/gnunet-nse-profiler.c:897 4148#: src/nse/gnunet-nse-profiler.c:896
4150msgid "Number of peers to run in each round, separated by commas" 4149msgid "Number of peers to run in each round, separated by commas"
4151msgstr "" 4150msgstr ""
4152 4151
4153#: src/nse/gnunet-nse-profiler.c:903 4152#: src/nse/gnunet-nse-profiler.c:902
4154msgid "delay between rounds" 4153msgid "delay between rounds"
4155msgstr "" 4154msgstr ""
4156 4155
4157#: src/nse/gnunet-nse-profiler.c:912 4156#: src/nse/gnunet-nse-profiler.c:911
4158#, fuzzy 4157#, fuzzy
4159msgid "Measure quality and performance of the NSE service." 4158msgid "Measure quality and performance of the NSE service."
4160msgstr "无法访问该服务" 4159msgstr "无法访问该服务"
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
4164msgid "NSE service could not access hostkey: %s\n" 4163msgid "NSE service could not access hostkey: %s\n"
4165msgstr "找不到接口“%s”的一个 IP 地址。\n" 4164msgstr "找不到接口“%s”的一个 IP 地址。\n"
4166 4165
4167#: src/nse/gnunet-service-nse.c:1419 4166#: src/nse/gnunet-service-nse.c:1433
4168msgid "NSE service is lacking key configuration settings. Exiting.\n" 4167msgid "NSE service is lacking key configuration settings. Exiting.\n"
4169msgstr "" 4168msgstr ""
4170 4169
4171#: src/nse/gnunet-service-nse.c:1524 4170#: src/nse/gnunet-service-nse.c:1508
4172msgid "Invalid work requirement for NSE service. Exiting.\n" 4171msgid "Invalid work requirement for NSE service. Exiting.\n"
4173msgstr "" 4172msgstr ""
4174 4173
@@ -4177,42 +4176,42 @@ msgstr ""
4177msgid "Removing expired address of transport `%s'\n" 4176msgid "Removing expired address of transport `%s'\n"
4178msgstr "" 4177msgstr ""
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
4182msgid "Failed to parse HELLO in file `%s': %s\n" 4181msgid "Failed to parse HELLO in file `%s': %s\n"
4183msgstr "解析配置文件“%s”失败\n" 4182msgstr "解析配置文件“%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
4187msgid "Failed to parse HELLO in file `%s': %s %u \n" 4186msgid "Failed to parse HELLO in file `%s': %s %u \n"
4188msgstr "解析配置文件“%s”失败\n" 4187msgstr "解析配置文件“%s”失败\n"
4189 4188
4190#: src/peerinfo/gnunet-service-peerinfo.c:444 4189#: src/peerinfo/gnunet-service-peerinfo.c:445
4191msgid "# peers known" 4190msgid "# peers known"
4192msgstr "" 4191msgstr ""
4193 4192
4194#: src/peerinfo/gnunet-service-peerinfo.c:480 4193#: src/peerinfo/gnunet-service-peerinfo.c:481
4195#, c-format 4194#, c-format
4196msgid "" 4195msgid ""
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"
4198msgstr "" 4197msgstr ""
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
4202msgid "Scanning directory `%s'\n" 4201msgid "Scanning directory `%s'\n"
4203msgstr "解析配置文件“%s”失败\n" 4202msgstr "解析配置文件“%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
4207msgid "Still no peers found in `%s'!\n" 4206msgid "Still no peers found in `%s'!\n"
4208msgstr "" 4207msgstr ""
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
4212msgid "Cleaning up directory `%s'\n" 4211msgid "Cleaning up directory `%s'\n"
4213msgstr "解析配置文件“%s”失败\n" 4212msgstr "解析配置文件“%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
4217msgid "Importing HELLOs from `%s'\n" 4216msgid "Importing HELLOs from `%s'\n"
4218msgstr "" 4217msgstr ""
@@ -4420,80 +4419,72 @@ msgstr ""
4420msgid "Daemon to announce regular expressions for the peer using mesh." 4419msgid "Daemon to announce regular expressions for the peer using mesh."
4421msgstr "" 4420msgstr ""
4422 4421
4423#: src/regex/gnunet-regex-profiler.c:1246 4422#: src/regex/gnunet-regex-profiler.c:1247
4424msgid "No configuration file given. Exiting\n" 4423msgid "No configuration file given. Exiting\n"
4425msgstr "" 4424msgstr ""
4426 4425
4427#: src/regex/gnunet-regex-profiler.c:1257 4426#: src/regex/gnunet-regex-profiler.c:1258
4428#, fuzzy 4427#, fuzzy
4429msgid "Configuration option \"regex_prefix\" missing. Exiting\n" 4428msgid "Configuration option \"regex_prefix\" missing. Exiting\n"
4430msgstr "配置文件“%s”已写入。\n" 4429msgstr "配置文件“%s”已写入。\n"
4431 4430
4432#: src/regex/gnunet-regex-profiler.c:1276 4431#: src/regex/gnunet-regex-profiler.c:1287
4433msgid "No hosts-file specified on command line. Exiting.\n"
4434msgstr ""
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
4439msgid "No policy directory specified on command line. Exiting.\n" 4434msgid "No policy directory specified on command line. Exiting.\n"
4440msgstr "" 4435msgstr ""
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
4445msgid "Specified policies directory does not exist. Exiting.\n" 4440msgid "Specified policies directory does not exist. Exiting.\n"
4446msgstr "" 4441msgstr ""
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
4450msgid "No files found in `%s'\n" 4445msgid "No files found in `%s'\n"
4451msgstr "运行 %s失败:%s %d\n" 4446msgstr "运行 %s失败:%s %d\n"
4452 4447
4453#: src/regex/gnunet-regex-profiler.c:1304 4448#: src/regex/gnunet-regex-profiler.c:1309
4454msgid "No search strings file given. Exiting.\n" 4449msgid "No search strings file given. Exiting.\n"
4455msgstr "" 4450msgstr ""
4456 4451
4457#: src/regex/gnunet-regex-profiler.c:1314 4452#: src/regex/gnunet-regex-profiler.c:1319
4458#, fuzzy 4453#, fuzzy
4459msgid "" 4454msgid ""
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"
4462msgstr "创建用户出错" 4457msgstr "创建用户出错"
4463 4458
4464#: src/regex/gnunet-regex-profiler.c:1322 4459#: src/regex/gnunet-regex-profiler.c:1327
4465#, fuzzy 4460#, fuzzy
4466msgid "Error loading search strings. Exiting.\n" 4461msgid "Error loading search strings. Exiting.\n"
4467msgstr "创建用户出错" 4462msgstr "创建用户出错"
4468 4463
4469#: src/regex/gnunet-regex-profiler.c:1389 4464#: src/regex/gnunet-regex-profiler.c:1394
4470#, fuzzy 4465#, fuzzy
4471msgid "name of the file for writing statistics" 4466msgid "name of the file for writing statistics"
4472msgstr "初始化“%s”服务失败。\n" 4467msgstr "初始化“%s”服务失败。\n"
4473 4468
4474#: src/regex/gnunet-regex-profiler.c:1392 4469#: src/regex/gnunet-regex-profiler.c:1397
4475msgid "wait TIMEOUT before considering a string match as failed" 4470msgid "wait TIMEOUT before ending the experiment"
4476msgstr ""
4477
4478#: src/regex/gnunet-regex-profiler.c:1395
4479msgid "number of search strings to read from search strings file"
4480msgstr "" 4471msgstr ""
4481 4472
4482#: src/regex/gnunet-regex-profiler.c:1398 4473#: src/regex/gnunet-regex-profiler.c:1400
4483msgid "directory with policy files" 4474msgid "directory with policy files"
4484msgstr "" 4475msgstr ""
4485 4476
4486#: src/regex/gnunet-regex-profiler.c:1401 4477#: src/regex/gnunet-regex-profiler.c:1403
4487#, fuzzy 4478#, fuzzy
4488msgid "name of file with input strings" 4479msgid "name of file with input strings"
4489msgstr "初始化“%s”服务失败。\n" 4480msgstr "初始化“%s”服务失败。\n"
4490 4481
4491#: src/regex/gnunet-regex-profiler.c:1404 4482#: src/regex/gnunet-regex-profiler.c:1406
4492#, fuzzy 4483#, fuzzy
4493msgid "name of file with hosts' names" 4484msgid "name of file with hosts' names"
4494msgstr "初始化“%s”服务失败。\n" 4485msgstr "初始化“%s”服务失败。\n"
4495 4486
4496#: src/regex/gnunet-regex-profiler.c:1416 4487#: src/regex/gnunet-regex-profiler.c:1418
4497msgid "Profiler for regex" 4488msgid "Profiler for regex"
4498msgstr "" 4489msgstr ""
4499 4490
@@ -4610,7 +4601,7 @@ msgstr ""
4610msgid "Could not parse execution interval for `%s', set to default 60 sec.\n" 4601msgid "Could not parse execution interval for `%s', set to default 60 sec.\n"
4611msgstr "" 4602msgstr ""
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
4615msgid "" 4606msgid ""
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 ""
4621msgid "Job command file not given. Exiting\n" 4612msgid "Job command file not given. Exiting\n"
4622msgstr "" 4613msgstr ""
4623 4614
4624#: src/testbed/gnunet_testbed_mpi_spawn.c:135 4615#: src/testbed/gnunet_testbed_mpi_spawn.c:125
4625msgid "Waiting for child to exit.\n" 4616msgid "Waiting for child to exit.\n"
4626msgstr "" 4617msgstr ""
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
4630msgid "Spawning process `%s'\n" 4621msgid "Spawning process `%s'\n"
4631msgstr "卸载 GNUnet 服务" 4622msgstr "卸载 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
4635msgid "Exiting as the number of peers is %u\n" 4626msgid "Exiting as the number of peers is %u\n"
4636msgstr "增加 TCP/IP 的最大连接数" 4627msgstr "增加 TCP/IP 的最大连接数"
4637 4628
4638#: src/testbed/gnunet-testbed-profiler.c:275 4629#: src/testbed/gnunet-testbed-profiler.c:277
4639msgid "create COUNT number of peers" 4630msgid "create COUNT number of peers"
4640msgstr "" 4631msgstr ""
4641 4632
4642#: src/testbed/gnunet-testbed-profiler.c:278 4633#: src/testbed/gnunet-testbed-profiler.c:280
4643msgid "tolerate COUNT number of continious timeout failures" 4634msgid "tolerate COUNT number of continious timeout failures"
4644msgstr "" 4635msgstr ""
4645 4636
@@ -4658,55 +4649,55 @@ msgstr ""
4658msgid "Hosts file %s cannot be read\n" 4649msgid "Hosts file %s cannot be read\n"
4659msgstr "" 4650msgstr ""
4660 4651
4661#: src/testbed/testbed_api_hosts.c:583 4652#: src/testbed/testbed_api_hosts.c:595
4662#, c-format 4653#, c-format
4663msgid "The function %s is only available when compiled with (--with-ll)\n" 4654msgid "The function %s is only available when compiled with (--with-ll)\n"
4664msgstr "" 4655msgstr ""
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
4668msgid "Adding host %u failed with error: %s\n" 4659msgid "Adding host %u failed with error: %s\n"
4669msgstr "“%s”以错误码 %d 失败:%s\n" 4660msgstr "“%s”以错误码 %d 失败:%s\n"
4670 4661
4671#: src/testbed/testbed_api_testbed.c:771 4662#: src/testbed/testbed_api_testbed.c:891
4672msgid "Linking controllers failed. Exiting" 4663msgid "Linking controllers failed. Exiting"
4673msgstr "" 4664msgstr ""
4674 4665
4675#: src/testbed/testbed_api_testbed.c:913 4666#: src/testbed/testbed_api_testbed.c:1094
4676#, c-format 4667#, c-format
4677msgid "Host registration failed for a host. Error: %s\n" 4668msgid "Host registration failed for a host. Error: %s\n"
4678msgstr "" 4669msgstr ""
4679 4670
4680#: src/testbed/testbed_api_testbed.c:978 4671#: src/testbed/testbed_api_testbed.c:1175
4681msgid "Controller crash detected. Shutting down.\n" 4672msgid "Controller crash detected. Shutting down.\n"
4682msgstr "" 4673msgstr ""
4683 4674
4684#: src/testbed/testbed_api_testbed.c:1081 4675#: src/testbed/testbed_api_testbed.c:1320
4685#, c-format 4676#, c-format
4686msgid "Host %s cannot start testbed\n" 4677msgid "Host %s cannot start testbed\n"
4687msgstr "" 4678msgstr ""
4688 4679
4689#: src/testbed/testbed_api_testbed.c:1085 4680#: src/testbed/testbed_api_testbed.c:1324
4690msgid "Testbed cannot be started on localhost\n" 4681msgid "Testbed cannot be started on localhost\n"
4691msgstr "" 4682msgstr ""
4692 4683
4693#: src/testbed/testbed_api_testbed.c:1120 4684#: src/testbed/testbed_api_testbed.c:1365
4694msgid "Cannot start the master controller" 4685msgid "Cannot start the master controller"
4695msgstr "" 4686msgstr ""
4696 4687
4697#: src/testbed/testbed_api_testbed.c:1138 4688#: src/testbed/testbed_api_testbed.c:1383
4698msgid "Shutting down testbed due to timeout while setup.\n" 4689msgid "Shutting down testbed due to timeout while setup.\n"
4699msgstr "" 4690msgstr ""
4700 4691
4701#: src/testbed/testbed_api_testbed.c:1197 4692#: src/testbed/testbed_api_testbed.c:1443
4702msgid "No hosts loaded from LoadLeveler. Need at least one host\n" 4693msgid "No hosts loaded from LoadLeveler. Need at least one host\n"
4703msgstr "" 4694msgstr ""
4704 4695
4705#: src/testbed/testbed_api_testbed.c:1209 4696#: src/testbed/testbed_api_testbed.c:1455
4706msgid "No hosts loaded. Need at least one host\n" 4697msgid "No hosts loaded. Need at least one host\n"
4707msgstr "" 4698msgstr ""
4708 4699
4709#: src/testbed/testbed_api_testbed.c:1233 4700#: src/testbed/testbed_api_testbed.c:1479
4710msgid "Specified topology must be supported by testbed" 4701msgid "Specified topology must be supported by testbed"
4711msgstr "" 4702msgstr ""
4712 4703
@@ -4853,7 +4844,7 @@ msgstr "解析配置文件“%s”失败\n"
4853msgid "Failed to start `%s': %s\n" 4844msgid "Failed to start `%s': %s\n"
4854msgstr "运行 %s失败:%s %d\n" 4845msgstr "运行 %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
4858msgid "Failed to load configuration from %s\n" 4849msgid "Failed to load configuration from %s\n"
4859msgstr "解析配置文件“%s”失败\n" 4850msgstr "解析配置文件“%s”失败\n"
@@ -5003,7 +4994,7 @@ msgstr ""
5003msgid "# bytes payload dropped (other peer was not connected)" 4994msgid "# bytes payload dropped (other peer was not connected)"
5004msgstr "" 4995msgstr ""
5005 4996
5006#: src/transport/gnunet-service-transport_clients.c:728 4997#: src/transport/gnunet-service-transport_clients.c:733
5007msgid "# REQUEST CONNECT messages received" 4998msgid "# REQUEST CONNECT messages received"
5008msgstr "" 4999msgstr ""
5009 5000
@@ -5064,48 +5055,48 @@ msgstr ""
5064msgid "# ms throttling suggested" 5055msgid "# ms throttling suggested"
5065msgstr "" 5056msgstr ""
5066 5057
5067#: src/transport/gnunet-service-transport_neighbours.c:2770 5058#: src/transport/gnunet-service-transport_neighbours.c:2774
5068msgid "# unexpected CONNECT_ACK messages (no peer)" 5059msgid "# unexpected CONNECT_ACK messages (no peer)"
5069msgstr "" 5060msgstr ""
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
5073msgid "# unexpected CONNECT_ACK messages (not ready)" 5064msgid "# unexpected CONNECT_ACK messages (not ready)"
5074msgstr "" 5065msgstr ""
5075 5066
5076#: src/transport/gnunet-service-transport_neighbours.c:2832 5067#: src/transport/gnunet-service-transport_neighbours.c:2836
5077msgid "# unexpected CONNECT_ACK messages (waiting on ATS)" 5068msgid "# unexpected CONNECT_ACK messages (waiting on ATS)"
5078msgstr "" 5069msgstr ""
5079 5070
5080#: src/transport/gnunet-service-transport_neighbours.c:2865 5071#: src/transport/gnunet-service-transport_neighbours.c:2869
5081msgid "# unexpected CONNECT_ACK messages (disconnecting)" 5072msgid "# unexpected CONNECT_ACK messages (disconnecting)"
5082msgstr "" 5073msgstr ""
5083 5074
5084#: src/transport/gnunet-service-transport_neighbours.c:3046 5075#: src/transport/gnunet-service-transport_neighbours.c:3050
5085msgid "# unexpected SESSION ACK messages" 5076msgid "# unexpected SESSION ACK messages"
5086msgstr "" 5077msgstr ""
5087 5078
5088#: src/transport/gnunet-service-transport_neighbours.c:3101 5079#: src/transport/gnunet-service-transport_neighbours.c:3105
5089msgid "# SET QUOTA messages ignored (no such peer)" 5080msgid "# SET QUOTA messages ignored (no such peer)"
5090msgstr "" 5081msgstr ""
5091 5082
5092#: src/transport/gnunet-service-transport_neighbours.c:3115 5083#: src/transport/gnunet-service-transport_neighbours.c:3119
5093msgid "# disconnects due to quota of 0" 5084msgid "# disconnects due to quota of 0"
5094msgstr "" 5085msgstr ""
5095 5086
5096#: src/transport/gnunet-service-transport_neighbours.c:3146 5087#: src/transport/gnunet-service-transport_neighbours.c:3150
5097msgid "# disconnect messages ignored (old format)" 5088msgid "# disconnect messages ignored (old format)"
5098msgstr "" 5089msgstr ""
5099 5090
5100#: src/transport/gnunet-service-transport_neighbours.c:3157 5091#: src/transport/gnunet-service-transport_neighbours.c:3161
5101msgid "# disconnect messages ignored (timestamp)" 5092msgid "# disconnect messages ignored (timestamp)"
5102msgstr "" 5093msgstr ""
5103 5094
5104#: src/transport/gnunet-service-transport_neighbours.c:3188 5095#: src/transport/gnunet-service-transport_neighbours.c:3192
5105msgid "# other peer asked to disconnect from us" 5096msgid "# other peer asked to disconnect from us"
5106msgstr "" 5097msgstr ""
5107 5098
5108#: src/transport/gnunet-service-transport_neighbours.c:3283 5099#: src/transport/gnunet-service-transport_neighbours.c:3287
5109msgid "# disconnected from peer upon explicit request" 5100msgid "# disconnected from peer upon explicit request"
5110msgstr "" 5101msgstr ""
5111 5102
@@ -5515,86 +5506,86 @@ msgstr ""
5515msgid "# bytes dropped by SMTP (outgoing)" 5506msgid "# bytes dropped by SMTP (outgoing)"
5516msgstr "" 5507msgstr ""
5517 5508
5518#: src/transport/plugin_transport_tcp.c:595 5509#: src/transport/plugin_transport_tcp.c:596
5519#, c-format 5510#, c-format
5520msgid "Unexpected address length: %u bytes\n" 5511msgid "Unexpected address length: %u bytes\n"
5521msgstr "" 5512msgstr ""
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
5529msgid "# bytes currently in TCP buffers" 5520msgid "# bytes currently in TCP buffers"
5530msgstr "" 5521msgstr ""
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
5536msgid "# TCP sessions active" 5527msgid "# TCP sessions active"
5537msgstr "" 5528msgstr ""
5538 5529
5539#: src/transport/plugin_transport_tcp.c:864 5530#: src/transport/plugin_transport_tcp.c:865
5540msgid "# bytes discarded by TCP (timeout)" 5531msgid "# bytes discarded by TCP (timeout)"
5541msgstr "" 5532msgstr ""
5542 5533
5543#: src/transport/plugin_transport_tcp.c:913 5534#: src/transport/plugin_transport_tcp.c:914
5544msgid "# bytes transmitted via TCP" 5535msgid "# bytes transmitted via TCP"
5545msgstr "" 5536msgstr ""
5546 5537
5547#: src/transport/plugin_transport_tcp.c:1000 5538#: src/transport/plugin_transport_tcp.c:1001
5548msgid "# bytes discarded by TCP (disconnect)" 5539msgid "# bytes discarded by TCP (disconnect)"
5549msgstr "" 5540msgstr ""
5550 5541
5551#: src/transport/plugin_transport_tcp.c:1113 5542#: src/transport/plugin_transport_tcp.c:1114
5552#, c-format 5543#, c-format
5553msgid "Trying to send with invalid session %p\n" 5544msgid "Trying to send with invalid session %p\n"
5554msgstr "" 5545msgstr ""
5555 5546
5556#: src/transport/plugin_transport_tcp.c:1349 5547#: src/transport/plugin_transport_tcp.c:1350
5557#, c-format 5548#, c-format
5558msgid "Address of unexpected length: %u\n" 5549msgid "Address of unexpected length: %u\n"
5559msgstr "" 5550msgstr ""
5560 5551
5561#: src/transport/plugin_transport_tcp.c:1466 5552#: src/transport/plugin_transport_tcp.c:1467
5562msgid "# transport-service disconnect requests for TCP" 5553msgid "# transport-service disconnect requests for TCP"
5563msgstr "" 5554msgstr ""
5564 5555
5565#: src/transport/plugin_transport_tcp.c:1867 5556#: src/transport/plugin_transport_tcp.c:1868
5566msgid "# TCP WELCOME messages received" 5557msgid "# TCP WELCOME messages received"
5567msgstr "" 5558msgstr ""
5568 5559
5569#: src/transport/plugin_transport_tcp.c:2036 5560#: src/transport/plugin_transport_tcp.c:2037
5570msgid "# bytes received via TCP" 5561msgid "# bytes received via TCP"
5571msgstr "" 5562msgstr ""
5572 5563
5573#: src/transport/plugin_transport_tcp.c:2118 5564#: src/transport/plugin_transport_tcp.c:2119
5574msgid "# network-level TCP disconnect events" 5565msgid "# network-level TCP disconnect events"
5575msgstr "" 5566msgstr ""
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
5580msgid "Require valid port number for service `%s' in configuration!\n" 5571msgid "Require valid port number for service `%s' in configuration!\n"
5581msgstr "" 5572msgstr ""
5582 5573
5583#: src/transport/plugin_transport_tcp.c:2358 5574#: src/transport/plugin_transport_tcp.c:2359
5584#, fuzzy 5575#, fuzzy
5585msgid "Failed to start service.\n" 5576msgid "Failed to start service.\n"
5586msgstr "初始化“%s”服务失败。\n" 5577msgstr "初始化“%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
5590msgid "TCP transport listening on port %llu\n" 5581msgid "TCP transport listening on port %llu\n"
5591msgstr "" 5582msgstr ""
5592 5583
5593#: src/transport/plugin_transport_tcp.c:2448 5584#: src/transport/plugin_transport_tcp.c:2452
5594msgid "TCP transport not listening on any port (client only)\n" 5585msgid "TCP transport not listening on any port (client only)\n"
5595msgstr "" 5586msgstr ""
5596 5587
5597#: src/transport/plugin_transport_tcp.c:2452 5588#: src/transport/plugin_transport_tcp.c:2456
5598#, c-format 5589#, c-format
5599msgid "TCP transport advertises itself as being on port %llu\n" 5590msgid "TCP transport advertises itself as being on port %llu\n"
5600msgstr "" 5591msgstr ""
@@ -5617,14 +5608,14 @@ msgstr ""
5617msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n" 5608msgid "Failed to set IPv4 broadcast option for broadcast socket on port %d\n"
5618msgstr "" 5609msgstr ""
5619 5610
5620#: src/transport/plugin_transport_udp.c:2520 5611#: src/transport/plugin_transport_udp.c:2350
5621#, c-format 5612#, c-format
5622msgid "" 5613msgid ""
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"
5625msgstr "" 5616msgstr ""
5626 5617
5627#: src/transport/plugin_transport_udp.c:2534 5618#: src/transport/plugin_transport_udp.c:2364
5628#, c-format 5619#, c-format
5629msgid "" 5620msgid ""
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"
5633msgstr "" 5624msgstr ""
5634 5625
5635#: src/transport/plugin_transport_udp.c:2775 5626#: src/transport/plugin_transport_udp.c:2664
5636#, fuzzy 5627#, fuzzy
5637msgid "Failed to open UDP sockets\n" 5628msgid "Failed to open UDP sockets\n"
5638msgstr "打开日志文件“%s”失败:%s\n" 5629msgstr "打开日志文件“%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
5642msgid "Given `%s' option is out of range: %llu > %u\n" 5633msgid "Given `%s' option is out of range: %llu > %u\n"
5643msgstr "" 5634msgstr ""
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
5647msgid "Invalid IPv6 address: `%s'\n" 5638msgid "Invalid IPv6 address: `%s'\n"
5648msgstr "无效的进程优先级“%s”\n" 5639msgstr "无效的进程优先级“%s”\n"
5649 5640
5650#: src/transport/plugin_transport_unix.c:1353 5641#: src/transport/plugin_transport_udp.c:2862
5642#, fuzzy
5643msgid "Failed to create network sockets, plugin failed\n"
5644msgstr "发送消息失败。\n"
5645
5646#: src/transport/plugin_transport_unix.c:1427
5651#, fuzzy 5647#, fuzzy
5652msgid "Failed to open UNIX sockets\n" 5648msgid "Failed to open UNIX listen socket\n"
5653msgstr "打开日志文件“%s”失败:%s\n" 5649msgstr "打开日志文件“%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 ""
5947msgid "gnunet-ecc failed" 5943msgid "gnunet-ecc failed"
5948msgstr "" 5944msgstr ""
5949 5945
5950#: src/util/crypto_ecc.c:1045 5946#: src/util/crypto_ecc.c:1084
5951#, c-format 5947#, c-format
5952msgid "ECC signature verification failed at %s:%d: %s\n" 5948msgid "ECC signature verification failed at %s:%d: %s\n"
5953msgstr "" 5949msgstr ""
@@ -6209,17 +6205,17 @@ msgstr ""
6209msgid "Perform default-actions for GNUnet URIs" 6205msgid "Perform default-actions for GNUnet URIs"
6210msgstr "" 6206msgstr ""
6211 6207
6212#: src/util/helper.c:271 6208#: src/util/helper.c:322
6213#, fuzzy, c-format 6209#, fuzzy, c-format
6214msgid "Error reading from `%s': %s\n" 6210msgid "Error reading from `%s': %s\n"
6215msgstr "创建用户出错" 6211msgstr "创建用户出错"
6216 6212
6217#: src/util/helper.c:316 6213#: src/util/helper.c:367
6218#, fuzzy, c-format 6214#, fuzzy, c-format
6219msgid "Failed to parse inbound message from helper `%s'\n" 6215msgid "Failed to parse inbound message from helper `%s'\n"
6220msgstr "打开日志文件“%s”失败:%s\n" 6216msgstr "打开日志文件“%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
6224msgid "Error writing to `%s': %s\n" 6220msgid "Error writing to `%s': %s\n"
6225msgstr "创建用户出错" 6221msgstr "创建用户出错"
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
18bin_PROGRAMS = \ 18bin_PROGRAMS = \
19 gnunet-consensus \ 19 gnunet-consensus \
20 gnunet-consensus-start-peers \ 20 gnunet-consensus-start-peers
21 gnunet-consensus-ibf
22 21
23libexec_PROGRAMS = \ 22libexec_PROGRAMS = \
24 gnunet-service-consensus 23 gnunet-service-consensus
@@ -52,33 +51,25 @@ gnunet_consensus_start_peers_LDADD = \
52gnunet_consensus_start_peers_DEPENDENCIES = \ 51gnunet_consensus_start_peers_DEPENDENCIES = \
53 libgnunetconsensus.la 52 libgnunetconsensus.la
54 53
55gnunet_consensus_ibf_SOURCES = \
56 gnunet-consensus-ibf.c \
57 ibf.c
58gnunet_consensus_ibf_LDADD = \
59 $(top_builddir)/src/util/libgnunetutil.la \
60 $(GN_LIBINTL)
61 54
62gnunet_service_consensus_SOURCES = \ 55gnunet_service_consensus_SOURCES = \
63 gnunet-service-consensus.c \ 56 gnunet-service-consensus.c
64 ibf.c \
65 strata_estimator.c
66gnunet_service_consensus_LDADD = \ 57gnunet_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
73gnunet_service_evil_consensus_SOURCES = \ 65gnunet_service_evil_consensus_SOURCES = \
74 gnunet-service-consensus.c \ 66 gnunet-service-consensus.c
75 ibf.c \
76 strata_estimator.c
77gnunet_service_evil_consensus_LDADD = \ 67gnunet_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)
83gnunet_service_evil_consensus_CFLAGS = -DEVIL 74gnunet_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
31GNUNET_NETWORK_STRUCT_BEGIN 31GNUNET_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 */
33struct GNUNET_CONSENSUS_JoinMessage 37struct 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
36GNUNET_NETWORK_STRUCT_BEGIN 36GNUNET_NETWORK_STRUCT_BEGIN
37 37
38struct StrataMessage 38/**
39{ 39 * Sent as context message for set reconciliation.
40 struct GNUNET_MessageHeader header; 40 */
41 uint8_t round; 41struct 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
49struct 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
60struct Element
61{
62 struct GNUNET_MessageHeader header;
63 struct GNUNET_HashCode hash;
64}; 47};
65 48
66
67struct ElementRequest
68{
69 struct GNUNET_MessageHeader header;
70 /* struct GNUNET_HashCode[] rest */
71};
72
73struct ConsensusHello
74{
75 struct GNUNET_MessageHeader header;
76 struct GNUNET_HashCode global_id;
77};
78
79struct ConsensusRoundMessage
80{
81 struct GNUNET_MessageHeader header;
82 uint8_t round;
83};
84
85
86GNUNET_NETWORK_STRUCT_END 49GNUNET_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 */
83struct ConsensusPeerInformation; 53struct ConsensusPeerInformation;
84 54
85struct MessageQueue;
86
87/* mutual recursion with round_over */ 55/* mutual recursion with round_over */
88static void 56static void
89subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); 57subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
90 58
91/* mutial recursion with transmit_queued */
92static void
93client_send_next (struct MessageQueue *mq);
94
95/* mutual recursion with mst_session_callback */
96static void
97open_cb (void *cls, struct GNUNET_STREAM_Socket *socket);
98
99static int
100mst_session_callback (void *cls, void *client, const struct GNUNET_MessageHeader *message);
101
102
103/**
104 * Additional information about a consensus element.
105 */
106struct 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 */
162enum 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
182typedef void (*AddCallback) (struct MessageQueue *mq);
183typedef 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 */
190struct 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
201struct 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 */
211struct 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
221struct 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 */
456struct 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 */
498static struct IncomingSocket *incoming_sockets_head;
499
500/**
501 * Linked list of incoming sockets.
502 */
503static 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 */
508static struct ConsensusSession *sessions_head; 248static 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 */
528static struct GNUNET_PeerIdentity *my_peer; 268static struct GNUNET_PeerIdentity my_peer;
529
530/**
531 * Handle to the core service. Only used during service startup, will be NULL after that.
532 */
533static struct GNUNET_CORE_Handle *core;
534
535/**
536 * Listener for sockets from peers that want to reconcile with us.
537 */
538static 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 */
549static size_t
550transmit_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
571static void
572client_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
590struct MessageQueue *
591create_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 */
616static void
617write_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
647static void
648stream_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
656struct MessageQueue *
657create_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
667struct PendingMessage *
668new_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 */
685void
686message_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 */
703static size_t
704stream_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 */
738static void
739send_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 */
774static int
775ibf_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 */
794static void
795prepare_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 */
812static int
813handle_p2p_element_report (struct ConsensusPeerInformation *cpi, const struct GNUNET_MessageHeader *msg)
814{
815 GNUNET_assert (0);
816}
817 269
818 270
271/*
819static int 272static int
820exp_subround_finished (const struct ConsensusSession *session) 273exp_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/*
836static int 292static int
837inventory_round_finished (struct ConsensusSession *session) 293inventory_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
851static void
852clear_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 */
892static int
893destroy_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
983static void
984send_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 */
1004static int
1005is_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 */
1031static void
1032send_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 */
1060static void
1061send_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 */
1099static int
1100handle_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
1169static int
1170send_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 */
1194static void
1195decode (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
1262static int
1263handle_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 */
1335static void
1336insert_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 */
1367static int
1368handle_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 */
1405static int
1406handle_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
1426static int
1427is_peer_connected (struct ConsensusPeerInformation *cpi)
1428{
1429 if (NULL == cpi->mss.socket)
1430 return GNUNET_NO;
1431 return GNUNET_YES;
1432}
1433
1434
1435static void
1436ensure_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 */
1449static void
1450embrace_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 */
1478static void
1479hello_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 */
1494static void
1495open_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
1519static void
1520replay_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 */
1592static int
1593send_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
1674static void
1675fin_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 */
1711static int
1712handle_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 */
1753static int
1754handle_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 */
1797static int
1798mst_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
1827static void 440static void
1828shuffle (struct ConsensusSession *session) 441shuffle (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 */
511static 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 */
2008static int
2009handle_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 */
2062static int
2063mst_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 */
2095static int
2096listen_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 */
2124static void
2125disconnect_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 */
2190static void 676static void
2191initialize_session_peer_list (struct ConsensusSession *session) 677initialize_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 */
2249static void 747static void
2250add_incoming_peers (struct ConsensusSession *session) 748set_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 */
2279static void 762static void
2280initialize_session (struct ConsensusSession *session) 763initialize_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
800static struct ConsensusSession *
801get_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 */
2380void 851void
2381client_insert (void *cls, 852client_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 */
2478static void
2479disconnect_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
2491static void
2492core_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
2516shutdown_task (void *cls, 956shutdown_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,
2560static void 973static void
2561run (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *c) 974run (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 */
35struct IBF_Key
36ibf_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 */
49void
50ibf_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 */
68struct InvertibleBloomFilter *
69ibf_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 */
88static inline void
89ibf_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
113static void
114ibf_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 */
139void
140ibf_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 */
151static int
152ibf_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 */
180int
181ibf_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 */
244void
245ibf_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 */
276void
277ibf_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 */
307void
308ibf_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 */
329struct InvertibleBloomFilter *
330ibf_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 */
349void
350ibf_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
35extern "C"
36{
37#if 0 /* keep Emacsens' auto-indent happy */
38}
39#endif
40#endif
41
42
43struct IBF_Key
44{
45 uint64_t key_val;
46};
47
48struct IBF_KeyHash
49{
50 uint32_t key_hash_val;
51};
52
53struct 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 */
70struct 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 */
113void
114ibf_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 */
125void
126ibf_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 */
135struct IBF_Key
136ibf_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 */
146void
147ibf_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 */
157struct InvertibleBloomFilter *
158ibf_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 */
167void
168ibf_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 */
178void
179ibf_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 */
194int
195ibf_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 */
203struct InvertibleBloomFilter *
204ibf_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 */
212void
213ibf_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
32void
33strata_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
43void
44strata_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
55void
56strata_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
69struct StrataEstimator *
70strata_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 */
96unsigned int
97strata_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
136void
137strata_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
35extern "C"
36{
37#if 0 /* keep Emacsens' auto-indent happy */
38}
39#endif
40#endif
41
42
43struct StrataEstimator
44{
45 struct InvertibleBloomFilter **strata;
46 unsigned int strata_count;
47 unsigned int ibf_size;
48};
49
50
51void
52strata_estimator_write (const struct StrataEstimator *se, void *buf);
53
54
55void
56strata_estimator_read (const void *buf, struct StrataEstimator *se);
57
58
59struct StrataEstimator *
60strata_estimator_create (unsigned int strata_count, uint32_t ibf_size, uint8_t ibf_hashnum);
61
62
63unsigned int
64strata_estimator_difference (const struct StrataEstimator *se1,
65 const struct StrataEstimator *se2);
66
67
68void
69strata_estimator_insert (struct StrataEstimator *se, struct GNUNET_HashCode *key);
70
71
72void
73strata_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 */
120struct GNUNET_MQ_MessageQueue; 113struct GNUNET_MQ_MessageQueue;
121 114
122/** 115struct GNUNET_MQ_Message;
123 * Opaque handle to an allocated message 116
124 */ 117enum GNUNET_MQ_Error
125struct 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 */
141typedef void
142(*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_MessageQueue *q, struct GNUNET_MQ_Message *m);
143
144
145typedef void
146(*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_MessageQueue *q);
147
148
149/**
150 * Callback used for notifications
151 *
152 * @param cls closure
153 */
154typedef void (*GNUNET_MQ_NotifyCallback) (void *cls);
155
156
157typedef void (*GNUNET_MQ_ErrorHandler) (void *cls, enum GNUNET_MQ_Error error);
158
159
160struct 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 */
198struct 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 */
139struct GNUNET_MQ_Handler 266struct 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 */
167typedef 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 *
179GNUNET_MQ_msg_ (struct GNUNET_MessageHeader **mhp, uint16_t size, uint16_t type); 299GNUNET_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 */
182int 312int
183GNUNET_MQ_nest_ (struct GNUNET_MQ_Message **mqmp, 313GNUNET_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 */
289struct GNUNET_MQ_MessageQueue * 419struct GNUNET_MQ_MessageQueue *
290GNUNET_MQ_queue_for_stream_socket (struct GNUNET_STREAM_Socket *socket, 420GNUNET_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 */
334void
335GNUNET_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 */
348void 464void
349GNUNET_MQ_notify_read_error (struct GNUNET_MQ_MessageQueue *mqm, 465GNUNET_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 */
359void 474void
360GNUNET_MQ_destroy (struct GNUNET_MQ_MessageQueue *mq); 475GNUNET_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);
332struct GNUNET_SET_OperationHandle * 327struct GNUNET_SET_OperationHandle *
333GNUNET_SET_accept (struct GNUNET_SET_Request *request, 328GNUNET_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
395GNUNET_STREAM_read_cancel (struct GNUNET_STREAM_ReadHandle *rh); 395GNUNET_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 */
406struct GNUNET_MQ_MessageQueue *
407GNUNET_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
16endif 16endif
17 17
18bin_PROGRAMS = \ 18bin_PROGRAMS = \
19 gnunet-set gnunet-set-bug 19 gnunet-set
20 20
21libexec_PROGRAMS = \ 21libexec_PROGRAMS = \
22 gnunet-service-set 22 gnunet-service-set
@@ -35,17 +35,9 @@ gnunet_set_LDADD = \
35gnunet_set_DEPENDENCIES = \ 35gnunet_set_DEPENDENCIES = \
36 libgnunetset.la 36 libgnunetset.la
37 37
38gnunet_set_bug_SOURCES = \
39 gnunet-set-bug.c
40gnunet_set_bug_LDADD = \
41 $(top_builddir)/src/util/libgnunetutil.la \
42 $(top_builddir)/src/stream/libgnunetstream.la \
43 $(GN_LIBINTL)
44
45gnunet_service_set_SOURCES = \ 38gnunet_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
51gnunet_service_set_LDADD = \ 43gnunet_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/
59gnunet_service_set_CFLAGS = $(AM_CFLAGS)
60 49
61libgnunetset_la_SOURCES = \ 50libgnunetset_la_SOURCES = \
62 set_api.c \ 51 set_api.c
63 mq.c
64libgnunetset_la_LIBADD = \ 52libgnunetset_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 = \
84test_set_api_DEPENDENCIES = \ 72test_set_api_DEPENDENCIES = \
85 libgnunetset.la 73 libgnunetset.la
86 74
87
88test_mq_SOURCES = \
89 test_mq.c \
90 mq.c
91test_mq_LDADD = \
92 $(top_builddir)/src/util/libgnunetutil.la \
93 $(top_builddir)/src/stream/libgnunetstream.la
94test_mq_CFLAGS = $(AM_CFLAGS)
95
96
97test_mq_client_SOURCES = \
98 test_mq_client.c \
99 mq.c
100test_mq_client_LDADD = \
101 $(top_builddir)/src/util/libgnunetutil.la \
102 $(top_builddir)/src/stream/libgnunetstream.la
103test_mq_client_CFLAGS = $(AM_CFLAGS)
104
105EXTRA_DIST = \ 75EXTRA_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
33static struct GNUNET_PeerIdentity local_id;
34
35static struct GNUNET_CONFIGURATION_Handle *cfg;
36
37static struct GNUNET_STREAM_ListenSocket *listen_socket;
38
39static struct GNUNET_STREAM_Socket *s1;
40
41static struct GNUNET_STREAM_Socket *s2;
42
43static void
44do_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
53static size_t
54stream_data_processor (void *cls,
55 enum GNUNET_STREAM_Status status,
56 const void *data,
57 size_t size)
58{
59 return size;
60}
61
62static int
63listen_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
82static void
83open_cb (void *cls, struct GNUNET_STREAM_Socket *socket)
84{
85
86}
87
88static void
89stream_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 */
107static void
108run (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
131int
132main (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
44static void 44static void
45result_cb_set1 (void *cls, struct GNUNET_SET_Element *element, 45result_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
66static void 66static void
67result_cb_set2 (void *cls, struct GNUNET_SET_Element *element, 67result_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 */
272static void
273operation_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)
409struct GNUNET_SET_OperationHandle * 376struct GNUNET_SET_OperationHandle *
410GNUNET_SET_accept (struct GNUNET_SET_Request *request, 377GNUNET_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
31static struct GNUNET_PeerIdentity local_id; 31static struct GNUNET_PeerIdentity local_id;
32
32static struct GNUNET_HashCode app_id; 33static struct GNUNET_HashCode app_id;
33static struct GNUNET_SET_Handle *set1; 34static struct GNUNET_SET_Handle *set1;
34static struct GNUNET_SET_Handle *set2; 35static struct GNUNET_SET_Handle *set2;
35static struct GNUNET_SET_ListenHandle *listen_handle; 36static struct GNUNET_SET_ListenHandle *listen_handle;
36const static struct GNUNET_CONFIGURATION_Handle *config; 37const static struct GNUNET_CONFIGURATION_Handle *config;
37 38
39int num_done;
40
38 41
39static void 42static void
40result_cb_set1 (void *cls, struct GNUNET_SET_Element *element, 43result_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
47static void 64static void
48result_cb_set2 (void *cls, struct GNUNET_SET_Element *element, 65result_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 */
585struct 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 */
584static const unsigned int default_timeout = 10; 615static 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 */
3781static void
3782mq_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
3811static void
3812mq_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 */
3841static int
3842mq_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 */
3864static size_t
3865mq_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
3885static void
3886mq_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 */
3921struct GNUNET_MQ_MessageQueue *
3922GNUNET_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 = \
416test_connection_transmit_cancel_LDADD = \ 419test_connection_transmit_cancel_LDADD = \
417 $(top_builddir)/src/util/libgnunetutil.la 420 $(top_builddir)/src/util/libgnunetutil.la
418 421
422test_mq_SOURCES = \
423 test_mq.c
424test_mq_LDADD = \
425 $(top_builddir)/src/util/libgnunetutil.la
426
427test_mq_client_SOURCES = \
428 test_mq_client.c
429test_mq_client_LDADD = \
430 $(top_builddir)/src/util/libgnunetutil.la
431
419test_os_network_SOURCES = \ 432test_os_network_SOURCES = \
420 test_os_network.c 433 test_os_network.c
421test_os_network_LDADD = \ 434test_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 */
39typedef void (*SendImpl) (struct GNUNET_MQ_MessageQueue *q, struct GNUNET_MQ_Message *m);
40
41
42typedef 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 */
49struct 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
59struct ServerClientSocketState 35struct ServerClientSocketState
@@ -65,131 +41,25 @@ struct ServerClientSocketState
65 41
66struct ClientConnectionState 42struct ClientConnectionState
67{ 43{
68 struct GNUNET_CLIENT_Connection *connection;
69 struct GNUNET_CLIENT_TransmitHandle *th;
70};
71
72
73struct 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
152struct 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 */
191static void 61void
192dispatch_message (struct GNUNET_MQ_MessageQueue *mq, const struct GNUNET_MessageHeader *mh) 62GNUNET_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 */
291static void
292stream_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
325static void
326stream_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 */
354static int
355stream_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 */
377static size_t
378stream_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
398static void
399stream_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
427struct GNUNET_MQ_MessageQueue *
428GNUNET_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 */
255static void
256handle_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 */
641static void
642handle_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
665struct GNUNET_MQ_MessageQueue * 376struct 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 */
786void
787GNUNET_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
31GNUNET_NETWORK_STRUCT_BEGIN 30GNUNET_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