Merge remote-tracking branch 'origin/master' into credentials
authorSchanzenbach, Martin <mschanzenbach@posteo.de>
Sun, 27 Nov 2016 17:43:43 +0000 (18:43 +0100)
committerSchanzenbach, Martin <mschanzenbach@posteo.de>
Sun, 27 Nov 2016 17:43:43 +0000 (18:43 +0100)
15 files changed:
configure.ac
doc/man/Makefile.am
doc/man/gnunet-nat.1 [new file with mode: 0644]
po/de.po
po/es.po
po/fr.po
po/sv.po
po/vi.po
po/zh_CN.po
src/conversation/plugin_gnsrecord_conversation.c
src/include/gnunet_strings_lib.h
src/nat/Makefile.am
src/nat/gnunet-nat.c
src/util/service_new.c
src/util/strings.c

index 1a24513929cdf45557881602ce286519a7acd183..65a590fc4ce339ed592f99952eb6c03402b2f52a 100644 (file)
@@ -272,7 +272,7 @@ fi])
 AC_ARG_ENABLE(sanitizer,
   AS_HELP_STRING(--enable-sanitizer, enable Address Sanitizer and Undefined Behavior Sanitizer),
 [if test x$enableval = xyes; then
-   LDFLAGS="$CFLAGS -fsanitize=address,undefined,unsigned-integer-overflow -fsanitize-recover=all -fno-omit-frame-pointer"
+   LDFLAGS="$CFLAGS -fsanitize=address,undefined -fsanitize-recover=all -fno-omit-frame-pointer"
 fi])
 
 
index 8431ac305bcd39b2dd75688ae46484c9bede4fdb..ff1e462b777e08de49f52cb335f17394f94cebe5 100644 (file)
@@ -24,6 +24,7 @@ man_MANS = \
   gnunet-namecache.1 \
   gnunet-namestore.1 \
   gnunet-namestore-fcfsd.1 \
+  gnunet-nat.1 \
   gnunet-nat-server.1 \
   gnunet-peerinfo.1 \
   gnunet-publish.1 \
diff --git a/doc/man/gnunet-nat.1 b/doc/man/gnunet-nat.1
new file mode 100644 (file)
index 0000000..01d96af
--- /dev/null
@@ -0,0 +1,67 @@
+.TH GNUNET\-NAT 1 "27 Nov 2016" "GNUnet"
+
+.SH NAME
+gnunet\-nat \- interact with the NAT service
+
+.SH SYNOPSIS
+.B gnunet\-nat
+.RI [ options ]
+.RI PORT
+.br
+
+.SH DESCRIPTION
+
+This tool allows testing various NAT traversal functions, as well
+as attempting auto\-configuration.
+
+.SH OPTIONS
+.B
+.IP "\-a,  \-\-auto"
+Attempt auto\-configuration for NAT traversal.
+
+.B
+.IP "\-b ADDRESS,  \-\-bind=ADDRESS"
+Assume that the service is bound to ADDRESS.
+
+.B
+.IP "\-c FILENAME,  \-\-config=FILENAME"
+Use the configuration file FILENAME.
+
+.B
+.IP "\-e ADDRESS,  \-\-external=ADDRESS"
+Assume that ADDRESS is the globally visible address of the peer.
+
+.B
+.IP "\-l ADDRESS,  \-\-local=ADDRESS"
+Assuming we are listening at ADDRESS for connection reversal requests.
+
+.B
+.IP "\-r ADDRESS,  \-\-remote=ADDRESS"
+Ask the peer at ADDRESS for connection reversal.
+
+.B
+.IP "\-L,  \-\-listen"
+Listen for connection reversal requests.  
+
+.B
+.IP "\-p PORT,  \-\-port=PORT"
+Use PORT as our external port for advertising for incoming requests.
+
+.B
+.IP "\-s,  \-\-stun"
+Enable processing of STUN requests. (Not implemented).
+
+.B
+.IP "\-t,  \-\-tcp"
+Use TCP.
+
+.B
+.IP "\-u,  \-\-udp"
+Use UDP.
+
+.SH BUGS
+Report bugs by using Mantis <https://gnunet.org/bugs/> or by sending electronic mail to <gnunet\-developers@gnu.org>
+
+.SH SEE ALSO
+gnunet\-transport(1)
+
index fdc37d3bc63832aeeeadee89b6cd6983b0151b71..58a71e4f7557bd1ec1ad3eb81b6c563b10b977f8 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2016-11-21 18:08+0100\n"
+"POT-Creation-Date: 2016-11-27 09:18+0100\n"
 "PO-Revision-Date: 2015-03-08 16:16+0100\n"
 "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -243,7 +243,7 @@ msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:374 src/transport/plugin_transport_tcp.c:633
-#: src/util/service.c:565 src/util/service_new.c:604
+#: src/util/service.c:565 src/util/service_new.c:612
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -253,25 +253,26 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:652
 #: src/transport/plugin_transport_tcp.c:658
 #: src/transport/plugin_transport_tcp.c:3299 src/util/service.c:584
-#: src/util/service.c:590 src/util/service_new.c:629 src/util/service_new.c:635
+#: src/util/service.c:590 src/util/service_new.c:637
+#: src/util/service_new.c:643
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:430 src/transport/plugin_transport_tcp.c:689
-#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:674
+#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:682
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:434 src/transport/plugin_transport_tcp.c:693
-#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:679
+#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:687
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:465 src/transport/plugin_transport_tcp.c:724
-#: src/util/service.c:656 src/util/service_new.c:715
+#: src/util/service.c:656 src/util/service_new.c:723
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -279,7 +280,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:482 src/transport/plugin_transport_tcp.c:741
-#: src/util/service.c:673 src/util/service_new.c:733
+#: src/util/service.c:673 src/util/service_new.c:741
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -287,7 +288,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:513
 #: src/transport/plugin_transport_http_server.c:2617
 #: src/transport/plugin_transport_tcp.c:772 src/util/service.c:704
-#: src/util/service_new.c:774
+#: src/util/service_new.c:782
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "»%s« konnte nicht aufgelöst werden: %s\n"
@@ -295,7 +296,7 @@ msgstr "»%s« konnte nicht aufgelöst werden: %s\n"
 #: src/arm/gnunet-service-arm.c:532
 #: src/transport/plugin_transport_http_server.c:2635
 #: src/transport/plugin_transport_tcp.c:791 src/util/service.c:723
-#: src/util/service_new.c:794
+#: src/util/service_new.c:802
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
@@ -387,11 +388,13 @@ msgid ""
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:935
+#: src/ats/gnunet-ats-solver-eval.c:3293
+#: src/ats-tests/gnunet-solver-eval.c:935
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3296 src/ats-tests/gnunet-solver-eval.c:938
+#: src/ats/gnunet-ats-solver-eval.c:3296
+#: src/ats-tests/gnunet-solver-eval.c:938
 #: src/ats-tests/gnunet-solver-eval.c:941
 msgid "experiment to use"
 msgstr ""
@@ -1890,7 +1893,8 @@ msgstr ""
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1161 src/testbed/gnunet-testbed-profiler.c:255
+#: src/dht/gnunet_dht_profiler.c:1161
+#: src/testbed/gnunet-testbed-profiler.c:255
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
@@ -2070,7 +2074,8 @@ msgstr ""
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
@@ -5113,7 +5118,8 @@ msgstr ""
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:979 src/peerinfo-tool/gnunet-peerinfo.c:775
+#: src/namestore/gnunet-namestore.c:979
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
@@ -8082,7 +8088,7 @@ msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
 msgid "Expected `%s' to be a directory!\n"
 msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n"
 
-#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1371
+#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1379
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei: `%s': %s.\n"
@@ -8434,17 +8440,17 @@ msgstr "`%s' fehlgeschlagen für die Bibliothek `%s'. Ort: %s:%d. Fehler: %s\n"
 msgid "Could not determine plugin installation path.\n"
 msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n"
 
-#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1801
+#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1809
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Konfigurationsdatei `%s' wurde erzeugt.\n"
 
-#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1818
+#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1826
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "Konfigurationsdatei `%s' konnte nicht geparst werden.\n"
 
-#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1812
+#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1820
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "GNUnet Konfiguration"
@@ -8485,17 +8491,17 @@ msgstr "Standarddienst »%s« ist nicht korrekt eingerichtet!\n"
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "`%s' konnte nicht aufgelöst werden: %s\n"
 
-#: src/util/server.c:478 src/util/service_new.c:1103
+#: src/util/server.c:478 src/util/service_new.c:1111
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "`%s' fehlgeschlagen für Laufwerk %s: %u\n"
 
-#: src/util/server.c:488 src/util/service_new.c:1113
+#: src/util/server.c:488 src/util/service_new.c:1121
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "`%s' schlug fehl für Port %d: %s. Läuft gnunetd bereits?\n"
 
-#: src/util/server.c:494 src/util/service_new.c:1119
+#: src/util/server.c:494 src/util/service_new.c:1127
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "%s schlug fehl, Nachrichten Typ %d ist bereits in Verwendung.\n"
@@ -8507,7 +8513,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/util/service.c:347 src/util/service_new.c:2335
+#: src/util/service.c:347 src/util/service_new.c:2343
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -8517,26 +8523,26 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/util/service.c:410 src/util/service_new.c:431
+#: src/util/service.c:410 src/util/service_new.c:439
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:448 src/util/service_new.c:474
+#: src/util/service.c:448 src/util/service_new.c:482
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:912 src/util/service_new.c:1034
+#: src/util/service.c:912 src/util/service_new.c:1042
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1186
+#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1194
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/util/service.c:1004 src/util/service_new.c:1218
+#: src/util/service.c:1004 src/util/service_new.c:1226
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8551,37 +8557,37 @@ msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "Dienst »%s« läuft auf %s\n"
 
-#: src/util/service.c:1260 src/util/service_new.c:1493
+#: src/util/service.c:1260 src/util/service_new.c:1501
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/util/service.c:1264 src/util/service_new.c:1497
+#: src/util/service.c:1264 src/util/service_new.c:1505
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/util/service.c:1268 src/util/service_new.c:1501
+#: src/util/service.c:1268 src/util/service_new.c:1509
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/util/service.c:1323 src/util/service_new.c:1373
+#: src/util/service.c:1323 src/util/service_new.c:1381
 msgid "No such user"
 msgstr ""
 
-#: src/util/service.c:1336 src/util/service_new.c:1392
+#: src/util/service.c:1336 src/util/service_new.c:1400
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Benutzer/Gruppe kann nicht zu »%s« geändert werden: %s\n"
 
-#: src/util/service.c:1406 src/util/service_new.c:1729
+#: src/util/service.c:1406 src/util/service_new.c:1737
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/util/service_new.c:1298
+#: src/util/service_new.c:1306
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
 
-#: src/util/service_new.c:2085
+#: src/util/service_new.c:2093
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
index efa53e4baf190e40c8ace483ca4a93b6f77abca1..8df52f5c995b955ff7042caba6f680bf9cacbcc9 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.9.5a\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2016-11-21 18:08+0100\n"
+"POT-Creation-Date: 2016-11-27 09:18+0100\n"
 "PO-Revision-Date: 2013-02-23 17:50+0100\n"
 "Last-Translator: Miguel Ángel Arruga Vivas <rosen644835@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -249,7 +249,7 @@ msgstr ""
 "Servicios de control y el Gestor de Reinicio Automático (ARM en inglés)"
 
 #: src/arm/gnunet-service-arm.c:374 src/transport/plugin_transport_tcp.c:633
-#: src/util/service.c:565 src/util/service_new.c:604
+#: src/util/service.c:565 src/util/service_new.c:612
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -261,7 +261,8 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:652
 #: src/transport/plugin_transport_tcp.c:658
 #: src/transport/plugin_transport_tcp.c:3299 src/util/service.c:584
-#: src/util/service.c:590 src/util/service_new.c:629 src/util/service_new.c:635
+#: src/util/service.c:590 src/util/service_new.c:637
+#: src/util/service_new.c:643
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
@@ -269,20 +270,20 @@ msgstr ""
 "configuración!\n"
 
 #: src/arm/gnunet-service-arm.c:430 src/transport/plugin_transport_tcp.c:689
-#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:674
+#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:682
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 "La ruta tipo UNIX «%s» es demasiado larga, la longitud máxima es %llu\n"
 
 #: src/arm/gnunet-service-arm.c:434 src/transport/plugin_transport_tcp.c:693
-#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:679
+#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:687
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr "Usando «%s» en su defecto\n"
 
 #: src/arm/gnunet-service-arm.c:465 src/transport/plugin_transport_tcp.c:724
-#: src/util/service.c:656 src/util/service_new.c:715
+#: src/util/service.c:656 src/util/service_new.c:723
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -292,7 +293,7 @@ msgstr ""
 "«%s», no se pudo crear un «socket» UNIX: %s\n"
 
 #: src/arm/gnunet-service-arm.c:482 src/transport/plugin_transport_tcp.c:741
-#: src/util/service.c:673 src/util/service_new.c:733
+#: src/util/service.c:673 src/util/service_new.c:741
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -302,7 +303,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:513
 #: src/transport/plugin_transport_http_server.c:2617
 #: src/transport/plugin_transport_tcp.c:772 src/util/service.c:704
-#: src/util/service_new.c:774
+#: src/util/service_new.c:782
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Se produjo un fallo al resolver «%s»: %s\n"
@@ -310,7 +311,7 @@ msgstr "Se produjo un fallo al resolver «%s»: %s\n"
 #: src/arm/gnunet-service-arm.c:532
 #: src/transport/plugin_transport_http_server.c:2635
 #: src/transport/plugin_transport_tcp.c:791 src/util/service.c:723
-#: src/util/service_new.c:794
+#: src/util/service_new.c:802
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "No se encontró la dirección %s para «%s».\n"
@@ -415,12 +416,14 @@ msgstr ""
 "No hay configurada una cuota de salida para la red «%s», asignando el ancho "
 "de banda predeterminado %llu\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:935
+#: src/ats/gnunet-ats-solver-eval.c:3293
+#: src/ats-tests/gnunet-solver-eval.c:935
 #, fuzzy
 msgid "solver to use"
 msgstr "valor a establecer"
 
-#: src/ats/gnunet-ats-solver-eval.c:3296 src/ats-tests/gnunet-solver-eval.c:938
+#: src/ats/gnunet-ats-solver-eval.c:3296
+#: src/ats-tests/gnunet-solver-eval.c:938
 #: src/ats-tests/gnunet-solver-eval.c:941
 msgid "experiment to use"
 msgstr ""
@@ -1973,7 +1976,8 @@ msgstr "cuanto tiempo debe ejecutarse el comando de monitorización"
 msgid "Prints all packets that go through the DHT."
 msgstr "Imprime todos los paquetes que pasan por la DHT."
 
-#: src/dht/gnunet_dht_profiler.c:1161 src/testbed/gnunet-testbed-profiler.c:255
+#: src/dht/gnunet_dht_profiler.c:1161
+#: src/testbed/gnunet-testbed-profiler.c:255
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "El número máximo de conexiones es %u\n"
@@ -2157,7 +2161,8 @@ msgstr "¡Tipo de bloque no soportado (%u) en respuesta local!\n"
 msgid "# GET requests given to datacache"
 msgstr "# Peticiones «GET» realizadas a la caché de datos"
 
-#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr "# «HELLO» obtenidos de «peerinfo»"
 
@@ -5274,7 +5279,8 @@ msgstr "borrar"
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:979 src/peerinfo-tool/gnunet-peerinfo.c:775
+#: src/namestore/gnunet-namestore.c:979
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "URI no válida: «%s»\n"
@@ -8377,7 +8383,7 @@ msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n"
 msgid "Expected `%s' to be a directory!\n"
 msgstr "¡Se esperaba que «%s» fuera un directorio!\n"
 
-#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1371
+#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1379
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "No se pudo obtener información acerca del usuario «%s»: %s\n"
@@ -8733,17 +8739,17 @@ msgstr "Falló «%s» para la biblioteca «%s» con error: %s\n"
 msgid "Could not determine plugin installation path.\n"
 msgstr "No se pudo determinar la ruta de instalación de los módulos.\n"
 
-#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1801
+#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1809
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
 
-#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1818
+#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1826
 #, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "No se pudo acceder al fichero de configuración «%s»\n"
 
-#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1812
+#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1820
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Se produjo un fallo al borrar el fichero de configuración %s\n"
@@ -8788,17 +8794,17 @@ msgid "Could not resolve our FQDN: %s\n"
 msgstr ""
 "No se pudo resolver nuestro nombre de dominio cualificado (FQDN) : %s\n"
 
-#: src/util/server.c:478 src/util/service_new.c:1103
+#: src/util/server.c:478 src/util/service_new.c:1111
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "«%s» falló para el puerto %d (%s).\n"
 
-#: src/util/server.c:488 src/util/service_new.c:1113
+#: src/util/server.c:488 src/util/service_new.c:1121
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "«%s» falló para el puerto %d (%s): dirección en uso actualmente\n"
 
-#: src/util/server.c:494 src/util/service_new.c:1119
+#: src/util/server.c:494 src/util/service_new.c:1127
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "«%s» falló para «%.*s»: dirección en uso actualmente\n"
@@ -8812,7 +8818,7 @@ msgstr ""
 "El código de procesado para el mensaje del tipo %u no llamó a "
 "«GNUNET_SERVER_receive_done» después de %s\n"
 
-#: src/util/service.c:347 src/util/service_new.c:2335
+#: src/util/service.c:347 src/util/service_new.c:2343
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr "Familia de direcciones %d desconocida\n"
@@ -8822,28 +8828,28 @@ msgstr "Familia de direcciones %d desconocida\n"
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr "Acceso denegado desde «%s» al servicio «%s»\n"
 
-#: src/util/service.c:410 src/util/service_new.c:431
+#: src/util/service.c:410 src/util/service_new.c:439
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr "No se pudo procesar la especificación de red IPv4 «%s» para «%s:%s»\n"
 
-#: src/util/service.c:448 src/util/service_new.c:474
+#: src/util/service.c:448 src/util/service_new.c:482
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr "No se pudo procesar la especificación de red IPv6 «%s» para «%s:%s»\n"
 
-#: src/util/service.c:912 src/util/service_new.c:1034
+#: src/util/service.c:912 src/util/service_new.c:1042
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 "No se pudo acceder a un «socket» pre-ascociado, lo intentaré asociar yo "
 "mismo\n"
 
-#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1186
+#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1194
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr "El valor especificado «%s» para el servicio «%s» no es válido\n"
 
-#: src/util/service.c:1004 src/util/service_new.c:1218
+#: src/util/service.c:1004 src/util/service_new.c:1226
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8860,38 +8866,38 @@ msgstr "Se produjo un fallo al inciar «%s» en «%s»\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "El servicio «%s» se ejecuta en %s\n"
 
-#: src/util/service.c:1260 src/util/service_new.c:1493
+#: src/util/service.c:1260 src/util/service_new.c:1501
 msgid "Service process failed to initialize\n"
 msgstr "No se pudo inicializar el proceso del servicio\n"
 
-#: src/util/service.c:1264 src/util/service_new.c:1497
+#: src/util/service.c:1264 src/util/service_new.c:1505
 msgid "Service process could not initialize server function\n"
 msgstr ""
 "No se pudo inicializar la función del servidor en el proceso del servicio\n"
 
-#: src/util/service.c:1268 src/util/service_new.c:1501
+#: src/util/service.c:1268 src/util/service_new.c:1509
 msgid "Service process failed to report status\n"
 msgstr "El proceso del servicio no devolvió un estado\n"
 
-#: src/util/service.c:1323 src/util/service_new.c:1373
+#: src/util/service.c:1323 src/util/service_new.c:1381
 msgid "No such user"
 msgstr "No existe tal usuario"
 
-#: src/util/service.c:1336 src/util/service_new.c:1392
+#: src/util/service.c:1336 src/util/service_new.c:1400
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Imposible cambiar el usuario/grupo a «%s»: %s\n"
 
-#: src/util/service.c:1406 src/util/service_new.c:1729
+#: src/util/service.c:1406 src/util/service_new.c:1737
 msgid "do daemonize (detach from terminal)"
 msgstr "demonizar (desasociar del terminal)"
 
-#: src/util/service_new.c:1298
+#: src/util/service_new.c:1306
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
 
-#: src/util/service_new.c:2085
+#: src/util/service_new.c:2093
 #, fuzzy, c-format
 msgid ""
 "Processing code for message of type %u did not call "
index 063dbe18a1fb07bf61c7e1808ee04bf9ccf9da38..a4df4ae7dd1f9443a2449ff49fc601d25c45b6d4 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2016-11-21 18:08+0100\n"
+"POT-Creation-Date: 2016-11-27 09:18+0100\n"
 "PO-Revision-Date: 2015-12-24 01:20+0100\n"
 "Last-Translator: Stéphane  Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
@@ -235,7 +235,7 @@ msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:374 src/transport/plugin_transport_tcp.c:633
-#: src/util/service.c:565 src/util/service_new.c:604
+#: src/util/service.c:565 src/util/service_new.c:612
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -245,25 +245,26 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:652
 #: src/transport/plugin_transport_tcp.c:658
 #: src/transport/plugin_transport_tcp.c:3299 src/util/service.c:584
-#: src/util/service.c:590 src/util/service_new.c:629 src/util/service_new.c:635
+#: src/util/service.c:590 src/util/service_new.c:637
+#: src/util/service_new.c:643
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:430 src/transport/plugin_transport_tcp.c:689
-#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:674
+#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:682
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:434 src/transport/plugin_transport_tcp.c:693
-#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:679
+#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:687
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:465 src/transport/plugin_transport_tcp.c:724
-#: src/util/service.c:656 src/util/service_new.c:715
+#: src/util/service.c:656 src/util/service_new.c:723
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -271,7 +272,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:482 src/transport/plugin_transport_tcp.c:741
-#: src/util/service.c:673 src/util/service_new.c:733
+#: src/util/service.c:673 src/util/service_new.c:741
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -279,7 +280,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:513
 #: src/transport/plugin_transport_http_server.c:2617
 #: src/transport/plugin_transport_tcp.c:772 src/util/service.c:704
-#: src/util/service_new.c:774
+#: src/util/service_new.c:782
 #, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
@@ -287,7 +288,7 @@ msgstr "Résolution de « %s » échouée : %s\n"
 #: src/arm/gnunet-service-arm.c:532
 #: src/transport/plugin_transport_http_server.c:2635
 #: src/transport/plugin_transport_tcp.c:791 src/util/service.c:723
-#: src/util/service_new.c:794
+#: src/util/service_new.c:802
 #, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr ""
@@ -379,11 +380,13 @@ msgid ""
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:935
+#: src/ats/gnunet-ats-solver-eval.c:3293
+#: src/ats-tests/gnunet-solver-eval.c:935
 msgid "solver to use"
 msgstr "solveur utilisé"
 
-#: src/ats/gnunet-ats-solver-eval.c:3296 src/ats-tests/gnunet-solver-eval.c:938
+#: src/ats/gnunet-ats-solver-eval.c:3296
+#: src/ats-tests/gnunet-solver-eval.c:938
 #: src/ats-tests/gnunet-solver-eval.c:941
 msgid "experiment to use"
 msgstr ""
@@ -1830,7 +1833,8 @@ msgstr ""
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1161 src/testbed/gnunet-testbed-profiler.c:255
+#: src/dht/gnunet_dht_profiler.c:1161
+#: src/testbed/gnunet-testbed-profiler.c:255
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
@@ -2006,7 +2010,8 @@ msgstr ""
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
@@ -4913,7 +4918,8 @@ msgstr "supprimer"
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:979 src/peerinfo-tool/gnunet-peerinfo.c:775
+#: src/namestore/gnunet-namestore.c:979
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "URI invalide « %s »\n"
@@ -7770,7 +7776,7 @@ msgstr ""
 msgid "Expected `%s' to be a directory!\n"
 msgstr ""
 
-#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1371
+#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1379
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr ""
@@ -8115,17 +8121,17 @@ msgstr ""
 msgid "Could not determine plugin installation path.\n"
 msgstr ""
 
-#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1801
+#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1809
 #, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr ""
 
-#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1818
+#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1826
 #, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr ""
 
-#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1812
+#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1820
 msgid "Malformed configuration, exit ...\n"
 msgstr ""
 
@@ -8162,17 +8168,17 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Résolution de « %s » échouée : %s\n"
 
-#: src/util/server.c:478 src/util/service_new.c:1103
+#: src/util/server.c:478 src/util/service_new.c:1111
 #, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr ""
 
-#: src/util/server.c:488 src/util/service_new.c:1113
+#: src/util/server.c:488 src/util/service_new.c:1121
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/util/server.c:494 src/util/service_new.c:1119
+#: src/util/server.c:494 src/util/service_new.c:1127
 #, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr ""
@@ -8184,7 +8190,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/util/service.c:347 src/util/service_new.c:2335
+#: src/util/service.c:347 src/util/service_new.c:2343
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -8194,26 +8200,26 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/util/service.c:410 src/util/service_new.c:431
+#: src/util/service.c:410 src/util/service_new.c:439
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:448 src/util/service_new.c:474
+#: src/util/service.c:448 src/util/service_new.c:482
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:912 src/util/service_new.c:1034
+#: src/util/service.c:912 src/util/service_new.c:1042
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1186
+#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1194
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/util/service.c:1004 src/util/service_new.c:1218
+#: src/util/service.c:1004 src/util/service_new.c:1226
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8228,37 +8234,37 @@ msgstr ""
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/util/service.c:1260 src/util/service_new.c:1493
+#: src/util/service.c:1260 src/util/service_new.c:1501
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/util/service.c:1264 src/util/service_new.c:1497
+#: src/util/service.c:1264 src/util/service_new.c:1505
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/util/service.c:1268 src/util/service_new.c:1501
+#: src/util/service.c:1268 src/util/service_new.c:1509
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/util/service.c:1323 src/util/service_new.c:1373
+#: src/util/service.c:1323 src/util/service_new.c:1381
 msgid "No such user"
 msgstr "Aucun utilisateur trouvé"
 
-#: src/util/service.c:1336 src/util/service_new.c:1392
+#: src/util/service.c:1336 src/util/service_new.c:1400
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr ""
 
-#: src/util/service.c:1406 src/util/service_new.c:1729
+#: src/util/service.c:1406 src/util/service_new.c:1737
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/util/service_new.c:1298
+#: src/util/service_new.c:1306
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
 
-#: src/util/service_new.c:2085
+#: src/util/service_new.c:2093
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
index bf5733320ba4f005b69a0618e833a93d2f86a100..5b3effdae691b59e757f900981ca3b1345f0bb82 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2016-11-21 18:08+0100\n"
+"POT-Creation-Date: 2016-11-27 09:18+0100\n"
 "PO-Revision-Date: 2006-01-21 17:16+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -242,7 +242,7 @@ msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:374 src/transport/plugin_transport_tcp.c:633
-#: src/util/service.c:565 src/util/service_new.c:604
+#: src/util/service.c:565 src/util/service_new.c:612
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -252,25 +252,26 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:652
 #: src/transport/plugin_transport_tcp.c:658
 #: src/transport/plugin_transport_tcp.c:3299 src/util/service.c:584
-#: src/util/service.c:590 src/util/service_new.c:629 src/util/service_new.c:635
+#: src/util/service.c:590 src/util/service_new.c:637
+#: src/util/service_new.c:643
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:430 src/transport/plugin_transport_tcp.c:689
-#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:674
+#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:682
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:434 src/transport/plugin_transport_tcp.c:693
-#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:679
+#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:687
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
 #: src/arm/gnunet-service-arm.c:465 src/transport/plugin_transport_tcp.c:724
-#: src/util/service.c:656 src/util/service_new.c:715
+#: src/util/service.c:656 src/util/service_new.c:723
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -278,7 +279,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:482 src/transport/plugin_transport_tcp.c:741
-#: src/util/service.c:673 src/util/service_new.c:733
+#: src/util/service.c:673 src/util/service_new.c:741
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -286,7 +287,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:513
 #: src/transport/plugin_transport_http_server.c:2617
 #: src/transport/plugin_transport_tcp.c:772 src/util/service.c:704
-#: src/util/service_new.c:774
+#: src/util/service_new.c:782
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
@@ -294,7 +295,7 @@ msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 #: src/arm/gnunet-service-arm.c:532
 #: src/transport/plugin_transport_http_server.c:2635
 #: src/transport/plugin_transport_tcp.c:791 src/util/service.c:723
-#: src/util/service_new.c:794
+#: src/util/service_new.c:802
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Misslyckades att binda till UDP-port %d.\n"
@@ -387,11 +388,13 @@ msgid ""
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:935
+#: src/ats/gnunet-ats-solver-eval.c:3293
+#: src/ats-tests/gnunet-solver-eval.c:935
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3296 src/ats-tests/gnunet-solver-eval.c:938
+#: src/ats/gnunet-ats-solver-eval.c:3296
+#: src/ats-tests/gnunet-solver-eval.c:938
 #: src/ats-tests/gnunet-solver-eval.c:941
 msgid "experiment to use"
 msgstr ""
@@ -1920,7 +1923,8 @@ msgstr ""
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1161 src/testbed/gnunet-testbed-profiler.c:255
+#: src/dht/gnunet_dht_profiler.c:1161
+#: src/testbed/gnunet-testbed-profiler.c:255
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "Maximalt antal chattklienter uppnått.\n"
@@ -2105,7 +2109,8 @@ msgstr ""
 msgid "# GET requests given to datacache"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-xdht_hello.c:82
 #, fuzzy
 msgid "# HELLOs obtained from peerinfo"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
@@ -5151,7 +5156,8 @@ msgstr ""
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/namestore/gnunet-namestore.c:979 src/peerinfo-tool/gnunet-peerinfo.c:775
+#: src/namestore/gnunet-namestore.c:979
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Ogiltiga argument: "
@@ -8179,7 +8185,7 @@ msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 msgid "Expected `%s' to be a directory!\n"
 msgstr "\"%s\" förväntade att \"%s\" skulle vara en katalog!\n"
 
-#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1371
+#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1379
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Kan inte öppna konfigurationsfil \"%s\".\n"
@@ -8531,17 +8537,17 @@ msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n"
 msgid "Could not determine plugin installation path.\n"
 msgstr "Kunde inte fastställa min publika IPv6-adress.\n"
 
-#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1801
+#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1809
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1818
+#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1826
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1812
+#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1820
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
@@ -8582,17 +8588,17 @@ msgid "Could not resolve our FQDN: %s\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
 # drive = hard drive ?
-#: src/util/server.c:478 src/util/service_new.c:1103
+#: src/util/server.c:478 src/util/service_new.c:1111
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "\"%s\" misslyckades för enhet %s: %u\n"
 
-#: src/util/server.c:488 src/util/service_new.c:1113
+#: src/util/server.c:488 src/util/service_new.c:1121
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "\"%s\" misslyckades för port %d: %s. Körs verkligen gnunetd?\n"
 
-#: src/util/server.c:494 src/util/service_new.c:1119
+#: src/util/server.c:494 src/util/service_new.c:1127
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "\"%s\" misslyckades för port %d: %s. Körs verkligen gnunetd?\n"
@@ -8604,7 +8610,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/util/service.c:347 src/util/service_new.c:2335
+#: src/util/service.c:347 src/util/service_new.c:2343
 #, fuzzy, c-format
 msgid "Unknown address family %d\n"
 msgstr "Okänd operation \"%s\"\n"
@@ -8614,26 +8620,26 @@ msgstr "Okänd operation \"%s\"\n"
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/util/service.c:410 src/util/service_new.c:431
+#: src/util/service.c:410 src/util/service_new.c:439
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:448 src/util/service_new.c:474
+#: src/util/service.c:448 src/util/service_new.c:482
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:912 src/util/service_new.c:1034
+#: src/util/service.c:912 src/util/service_new.c:1042
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1186
+#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1194
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/util/service.c:1004 src/util/service_new.c:1218
+#: src/util/service.c:1004 src/util/service_new.c:1226
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8648,37 +8654,37 @@ msgstr "Fel vid %s:%d.\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "Motpart \"%s\" med pålitlighet %8u och adress \"%s\"\n"
 
-#: src/util/service.c:1260 src/util/service_new.c:1493
+#: src/util/service.c:1260 src/util/service_new.c:1501
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/util/service.c:1264 src/util/service_new.c:1497
+#: src/util/service.c:1264 src/util/service_new.c:1505
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/util/service.c:1268 src/util/service_new.c:1501
+#: src/util/service.c:1268 src/util/service_new.c:1509
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/util/service.c:1323 src/util/service_new.c:1373
+#: src/util/service.c:1323 src/util/service_new.c:1381
 msgid "No such user"
 msgstr ""
 
-#: src/util/service.c:1336 src/util/service_new.c:1392
+#: src/util/service.c:1336 src/util/service_new.c:1400
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Kan inte ändra användare/grupp till \"%s\": %s\n"
 
-#: src/util/service.c:1406 src/util/service_new.c:1729
+#: src/util/service.c:1406 src/util/service_new.c:1737
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/util/service_new.c:1298
+#: src/util/service_new.c:1306
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
 
-#: src/util/service_new.c:2085
+#: src/util/service_new.c:2093
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
index 8f0c7a8d2987636ca3dc03542f2ac2f05333772e..7e9b43b60938354d703ff10bb9c52c7cb454e7d7 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet 0.8.0a\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2016-11-21 18:08+0100\n"
+"POT-Creation-Date: 2016-11-27 09:18+0100\n"
 "PO-Revision-Date: 2008-09-10 22:05+0930\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -248,7 +248,7 @@ msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:374 src/transport/plugin_transport_tcp.c:633
-#: src/util/service.c:565 src/util/service_new.c:604
+#: src/util/service.c:565 src/util/service_new.c:612
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -258,25 +258,26 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:652
 #: src/transport/plugin_transport_tcp.c:658
 #: src/transport/plugin_transport_tcp.c:3299 src/util/service.c:584
-#: src/util/service.c:590 src/util/service_new.c:629 src/util/service_new.c:635
+#: src/util/service.c:590 src/util/service_new.c:637
+#: src/util/service_new.c:643
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:430 src/transport/plugin_transport_tcp.c:689
-#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:674
+#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:682
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:434 src/transport/plugin_transport_tcp.c:693
-#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:679
+#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:687
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: tùy chọn « %s » là mơ hồ\n"
 
 #: src/arm/gnunet-service-arm.c:465 src/transport/plugin_transport_tcp.c:724
-#: src/util/service.c:656 src/util/service_new.c:715
+#: src/util/service.c:656 src/util/service_new.c:723
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -284,7 +285,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:482 src/transport/plugin_transport_tcp.c:741
-#: src/util/service.c:673 src/util/service_new.c:733
+#: src/util/service.c:673 src/util/service_new.c:741
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -292,7 +293,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:513
 #: src/transport/plugin_transport_http_server.c:2617
 #: src/transport/plugin_transport_tcp.c:772 src/util/service.c:704
-#: src/util/service_new.c:774
+#: src/util/service_new.c:782
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
@@ -300,7 +301,7 @@ msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 #: src/arm/gnunet-service-arm.c:532
 #: src/transport/plugin_transport_http_server.c:2635
 #: src/transport/plugin_transport_tcp.c:791 src/util/service.c:723
-#: src/util/service_new.c:794
+#: src/util/service_new.c:802
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "Lỗi đóng kết đến cổng %s %d.\n"
@@ -393,11 +394,13 @@ msgid ""
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:935
+#: src/ats/gnunet-ats-solver-eval.c:3293
+#: src/ats-tests/gnunet-solver-eval.c:935
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3296 src/ats-tests/gnunet-solver-eval.c:938
+#: src/ats/gnunet-ats-solver-eval.c:3296
+#: src/ats-tests/gnunet-solver-eval.c:938
 #: src/ats-tests/gnunet-solver-eval.c:941
 msgid "experiment to use"
 msgstr ""
@@ -1940,7 +1943,8 @@ msgstr ""
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1161 src/testbed/gnunet-testbed-profiler.c:255
+#: src/dht/gnunet_dht_profiler.c:1161
+#: src/testbed/gnunet-testbed-profiler.c:255
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "tăng sổ tối đa các kết nối TCP/IP"
@@ -2124,7 +2128,8 @@ msgstr ""
 msgid "# GET requests given to datacache"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-xdht_hello.c:82
 #, fuzzy
 msgid "# HELLOs obtained from peerinfo"
 msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
@@ -5202,7 +5207,8 @@ msgstr ""
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/namestore/gnunet-namestore.c:979 src/peerinfo-tool/gnunet-peerinfo.c:775
+#: src/namestore/gnunet-namestore.c:979
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Dữ liệu nhập không hợp lệ.\n"
@@ -8233,7 +8239,7 @@ msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n"
 msgid "Expected `%s' to be a directory!\n"
 msgstr "Mong đợi « %s » là một thư mục.\n"
 
-#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1371
+#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1379
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Không thể lấy thông tin về người dùng « %s »: %s\n"
@@ -8584,17 +8590,17 @@ msgstr "« %s » thất bại cho thư viện « %s » với lỗi: %s\n"
 msgid "Could not determine plugin installation path.\n"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1801
+#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1809
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1818
+#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1826
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1812
+#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1820
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
@@ -8632,17 +8638,17 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "Không thể giải quyết « %s » (%s): %s\n"
 
-#: src/util/server.c:478 src/util/service_new.c:1103
+#: src/util/server.c:478 src/util/service_new.c:1111
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "« %s » thất bại cho ổ đĩa « %s »: %u\n"
 
-#: src/util/server.c:488 src/util/service_new.c:1113
+#: src/util/server.c:488 src/util/service_new.c:1121
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr "« %s » bị lỗi cho cổng %d. Trình gnunetd có chạy chưa?\n"
 
-#: src/util/server.c:494 src/util/service_new.c:1119
+#: src/util/server.c:494 src/util/service_new.c:1127
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "« %s » bị lỗi cho cổng %d. Trình gnunetd có chạy chưa?\n"
@@ -8654,7 +8660,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/util/service.c:347 src/util/service_new.c:2335
+#: src/util/service.c:347 src/util/service_new.c:2343
 #, fuzzy, c-format
 msgid "Unknown address family %d\n"
 msgstr "\tKhông rõ miền tên « %s »\n"
@@ -8664,26 +8670,26 @@ msgstr "\tKhông rõ miền tên « %s »\n"
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/util/service.c:410 src/util/service_new.c:431
+#: src/util/service.c:410 src/util/service_new.c:439
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:448 src/util/service_new.c:474
+#: src/util/service.c:448 src/util/service_new.c:482
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:912 src/util/service_new.c:1034
+#: src/util/service.c:912 src/util/service_new.c:1042
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1186
+#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1194
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/util/service.c:1004 src/util/service_new.c:1218
+#: src/util/service.c:1004 src/util/service_new.c:1226
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8698,37 +8704,37 @@ msgstr "Lỗi chạy %s: %s %d\n"
 msgid "Service `%s' runs at %s\n"
 msgstr "Đồng đẳng « %s » có mức tin cậy %8u\n"
 
-#: src/util/service.c:1260 src/util/service_new.c:1493
+#: src/util/service.c:1260 src/util/service_new.c:1501
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/util/service.c:1264 src/util/service_new.c:1497
+#: src/util/service.c:1264 src/util/service_new.c:1505
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/util/service.c:1268 src/util/service_new.c:1501
+#: src/util/service.c:1268 src/util/service_new.c:1509
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/util/service.c:1323 src/util/service_new.c:1373
+#: src/util/service.c:1323 src/util/service_new.c:1381
 msgid "No such user"
 msgstr "Không có người dùng như vậy"
 
-#: src/util/service.c:1336 src/util/service_new.c:1392
+#: src/util/service.c:1336 src/util/service_new.c:1400
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "Không thể thay đổi người dùng/nhóm thành « %s »: %s\n"
 
-#: src/util/service.c:1406 src/util/service_new.c:1729
+#: src/util/service.c:1406 src/util/service_new.c:1737
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/util/service_new.c:1298
+#: src/util/service_new.c:1306
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
 
-#: src/util/service_new.c:2085
+#: src/util/service_new.c:2093
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
index f930317b4d1f6ad471284bd95e57d9b81b23cba6..16fee9b24a4b9441c93cd8bfc6badf6d43dcb1a1 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnunet-0.8.1\n"
 "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n"
-"POT-Creation-Date: 2016-11-21 18:08+0100\n"
+"POT-Creation-Date: 2016-11-27 09:18+0100\n"
 "PO-Revision-Date: 2011-07-09 12:12+0800\n"
 "Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -241,7 +241,7 @@ msgid "Control services and the Automated Restart Manager (ARM)"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:374 src/transport/plugin_transport_tcp.c:633
-#: src/util/service.c:565 src/util/service_new.c:604
+#: src/util/service.c:565 src/util/service_new.c:612
 #, c-format
 msgid ""
 "Disabling IPv6 support for service `%s', failed to create IPv6 socket: %s\n"
@@ -251,25 +251,26 @@ msgstr ""
 #: src/transport/plugin_transport_tcp.c:652
 #: src/transport/plugin_transport_tcp.c:658
 #: src/transport/plugin_transport_tcp.c:3299 src/util/service.c:584
-#: src/util/service.c:590 src/util/service_new.c:629 src/util/service_new.c:635
+#: src/util/service.c:590 src/util/service_new.c:637
+#: src/util/service_new.c:643
 #, c-format
 msgid "Require valid port number for service `%s' in configuration!\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:430 src/transport/plugin_transport_tcp.c:689
-#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:674
+#: src/util/client_new.c:464 src/util/service.c:621 src/util/service_new.c:682
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:434 src/transport/plugin_transport_tcp.c:693
-#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:679
+#: src/util/client_new.c:469 src/util/service.c:625 src/util/service_new.c:687
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s:选项“%s”有歧义\n"
 
 #: src/arm/gnunet-service-arm.c:465 src/transport/plugin_transport_tcp.c:724
-#: src/util/service.c:656 src/util/service_new.c:715
+#: src/util/service.c:656 src/util/service_new.c:723
 #, c-format
 msgid ""
 "Disabling UNIX domain socket support for service `%s', failed to create UNIX "
@@ -277,7 +278,7 @@ msgid ""
 msgstr ""
 
 #: src/arm/gnunet-service-arm.c:482 src/transport/plugin_transport_tcp.c:741
-#: src/util/service.c:673 src/util/service_new.c:733
+#: src/util/service.c:673 src/util/service_new.c:741
 #, c-format
 msgid "Have neither PORT nor UNIXPATH for service `%s', but one is required\n"
 msgstr ""
@@ -285,7 +286,7 @@ msgstr ""
 #: src/arm/gnunet-service-arm.c:513
 #: src/transport/plugin_transport_http_server.c:2617
 #: src/transport/plugin_transport_tcp.c:772 src/util/service.c:704
-#: src/util/service_new.c:774
+#: src/util/service_new.c:782
 #, fuzzy, c-format
 msgid "Failed to resolve `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
@@ -293,7 +294,7 @@ msgstr "打开日志文件“%s”失败:%s\n"
 #: src/arm/gnunet-service-arm.c:532
 #: src/transport/plugin_transport_http_server.c:2635
 #: src/transport/plugin_transport_tcp.c:791 src/util/service.c:723
-#: src/util/service_new.c:794
+#: src/util/service_new.c:802
 #, fuzzy, c-format
 msgid "Failed to find %saddress for `%s'.\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
@@ -386,11 +387,13 @@ msgid ""
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:935
+#: src/ats/gnunet-ats-solver-eval.c:3293
+#: src/ats-tests/gnunet-solver-eval.c:935
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3296 src/ats-tests/gnunet-solver-eval.c:938
+#: src/ats/gnunet-ats-solver-eval.c:3296
+#: src/ats-tests/gnunet-solver-eval.c:938
 #: src/ats-tests/gnunet-solver-eval.c:941
 msgid "experiment to use"
 msgstr ""
@@ -1873,7 +1876,8 @@ msgstr ""
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1161 src/testbed/gnunet-testbed-profiler.c:255
+#: src/dht/gnunet_dht_profiler.c:1161
+#: src/testbed/gnunet-testbed-profiler.c:255
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "增加 TCP/IP 的最大连接数"
@@ -2050,7 +2054,8 @@ msgstr ""
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84
+#: src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
@@ -4989,7 +4994,8 @@ msgstr ""
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/namestore/gnunet-namestore.c:979 src/peerinfo-tool/gnunet-peerinfo.c:775
+#: src/namestore/gnunet-namestore.c:979
+#: src/peerinfo-tool/gnunet-peerinfo.c:775
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "无效条目。\n"
@@ -7936,7 +7942,7 @@ msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 msgid "Expected `%s' to be a directory!\n"
 msgstr "“%s”应为目录!\n"
 
-#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1371
+#: src/util/disk.c:1486 src/util/service.c:1322 src/util/service_new.c:1379
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
@@ -8284,17 +8290,17 @@ msgstr ""
 msgid "Could not determine plugin installation path.\n"
 msgstr "无法确定用户界面定义文件。"
 
-#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1801
+#: src/util/program.c:244 src/util/service.c:1456 src/util/service_new.c:1809
 #, fuzzy, c-format
 msgid "Malformed configuration file `%s', exit ...\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1818
+#: src/util/program.c:256 src/util/service.c:1471 src/util/service_new.c:1826
 #, fuzzy, c-format
 msgid "Could not access configuration file `%s'\n"
 msgstr "找不到接口“%s”的一个 IP 地址。\n"
 
-#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1812
+#: src/util/program.c:261 src/util/service.c:1466 src/util/service_new.c:1820
 #, fuzzy
 msgid "Malformed configuration, exit ...\n"
 msgstr "解析配置文件“%s”失败\n"
@@ -8332,17 +8338,17 @@ msgstr ""
 msgid "Could not resolve our FQDN: %s\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/util/server.c:478 src/util/service_new.c:1103
+#: src/util/server.c:478 src/util/service_new.c:1111
 #, fuzzy, c-format
 msgid "`%s' failed for port %d (%s).\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/server.c:488 src/util/service_new.c:1113
+#: src/util/server.c:488 src/util/service_new.c:1121
 #, c-format
 msgid "`%s' failed for port %d (%s): address already in use\n"
 msgstr ""
 
-#: src/util/server.c:494 src/util/service_new.c:1119
+#: src/util/server.c:494 src/util/service_new.c:1127
 #, fuzzy, c-format
 msgid "`%s' failed for `%s': address already in use\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
@@ -8354,7 +8360,7 @@ msgid ""
 "`GNUNET_SERVER_receive_done' after %s\n"
 msgstr ""
 
-#: src/util/service.c:347 src/util/service_new.c:2335
+#: src/util/service.c:347 src/util/service_new.c:2343
 #, c-format
 msgid "Unknown address family %d\n"
 msgstr ""
@@ -8364,26 +8370,26 @@ msgstr ""
 msgid "Access from `%s' denied to service `%s'\n"
 msgstr ""
 
-#: src/util/service.c:410 src/util/service_new.c:431
+#: src/util/service.c:410 src/util/service_new.c:439
 #, c-format
 msgid "Could not parse IPv4 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:448 src/util/service_new.c:474
+#: src/util/service.c:448 src/util/service_new.c:482
 #, c-format
 msgid "Could not parse IPv6 network specification `%s' for `%s:%s'\n"
 msgstr ""
 
-#: src/util/service.c:912 src/util/service_new.c:1034
+#: src/util/service.c:912 src/util/service_new.c:1042
 msgid "Could not access a pre-bound socket, will try to bind myself\n"
 msgstr ""
 
-#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1186
+#: src/util/service.c:961 src/util/service.c:979 src/util/service_new.c:1194
 #, c-format
 msgid "Specified value for `%s' of service `%s' is invalid\n"
 msgstr ""
 
-#: src/util/service.c:1004 src/util/service_new.c:1218
+#: src/util/service.c:1004 src/util/service_new.c:1226
 #, c-format
 msgid "Could not access pre-bound socket %u, will try to bind myself\n"
 msgstr ""
@@ -8398,37 +8404,37 @@ msgstr "运行 %s失败:%s %d\n"
 msgid "Service `%s' runs at %s\n"
 msgstr ""
 
-#: src/util/service.c:1260 src/util/service_new.c:1493
+#: src/util/service.c:1260 src/util/service_new.c:1501
 msgid "Service process failed to initialize\n"
 msgstr ""
 
-#: src/util/service.c:1264 src/util/service_new.c:1497
+#: src/util/service.c:1264 src/util/service_new.c:1505
 msgid "Service process could not initialize server function\n"
 msgstr ""
 
-#: src/util/service.c:1268 src/util/service_new.c:1501
+#: src/util/service.c:1268 src/util/service_new.c:1509
 msgid "Service process failed to report status\n"
 msgstr ""
 
-#: src/util/service.c:1323 src/util/service_new.c:1373
+#: src/util/service.c:1323 src/util/service_new.c:1381
 msgid "No such user"
 msgstr "无此用户"
 
-#: src/util/service.c:1336 src/util/service_new.c:1392
+#: src/util/service.c:1336 src/util/service_new.c:1400
 #, c-format
 msgid "Cannot change user/group to `%s': %s\n"
 msgstr "无法更改用户/组为“%s”:%s\n"
 
-#: src/util/service.c:1406 src/util/service_new.c:1729
+#: src/util/service.c:1406 src/util/service_new.c:1737
 msgid "do daemonize (detach from terminal)"
 msgstr ""
 
-#: src/util/service_new.c:1298
+#: src/util/service_new.c:1306
 msgid ""
 "Could not bind to any of the ports I was supposed to, refusing to run!\n"
 msgstr ""
 
-#: src/util/service_new.c:2085
+#: src/util/service_new.c:2093
 #, c-format
 msgid ""
 "Processing code for message of type %u did not call "
index e2bcf7ec92b1d8eb99b040fc5a700cab9203a7a5..91cae726113a79346355755fbe2aa7ede8a8c5d4 100644 (file)
@@ -118,12 +118,12 @@ conversation_string_to_value (void *cls,
   case GNUNET_GNSRECORD_TYPE_PHONE:
     {
       struct GNUNET_CONVERSATION_PhoneRecord *pr;
-      char line_port[128];
+      char line_port[103];
       const char *dash;
       struct GNUNET_PeerIdentity peer;
 
       if ( (NULL == (dash = strchr (s, '-'))) ||
-          (1 != sscanf (s, "%128s-", line_port)) ||
+          (1 != sscanf (s, "%103s-", line_port)) ||
           (GNUNET_OK !=
            GNUNET_CRYPTO_eddsa_public_key_from_string (dash + 1,
                                                         strlen (dash + 1),
index 15d4f57ac0a177ce4771fa7531daa9efffec1618..0328882ddb64ce0afae89f99492be2a38d8fbbef 100644 (file)
@@ -349,25 +349,27 @@ GNUNET_STRINGS_base64_encode (const char *data, size_t len, char **output);
  *
  * @param data the data to encode
  * @param len the length of the input
- * @param output where to write the output (*output should be NULL,
+ * @param[out] output where to write the output (*output should be NULL,
  *   is allocated)
  * @return the size of the output
  */
 size_t
-GNUNET_STRINGS_base64_decode (const char *data, size_t len, char **output);
+GNUNET_STRINGS_base64_decode (const char *data,
+                             size_t len,
+                             char **output);
 
 
 /**
  * Parse a path that might be an URI.
  *
  * @param path path to parse. Must be NULL-terminated.
- * @param scheme_part a pointer to 'char *' where a pointer to a string that
+ * @param[out] scheme_part pointer to a string that
  *        represents the URI scheme will be stored. Can be NULL. The string is
  *        allocated by the function, and should be freed by GNUNET_free() when
  *        it is no longer needed.
  * @param path_part a pointer to 'const char *' where a pointer to the path
  *        part of the URI will be stored. Can be NULL. Points to the same block
- *        of memory as 'path', and thus must not be freed. Might point to '\0',
+ *        of memory as @a path, and thus must not be freed. Might point to '\0',
  *        if path part is zero-length.
  * @return #GNUNET_YES if it's an URI, #GNUNET_NO otherwise. If 'path' is not
  *         an URI, '* scheme_part' and '*path_part' will remain unchanged
@@ -474,6 +476,21 @@ GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
                                struct sockaddr_in *r_buf);
 
 
+/**
+ * Parse an address given as a string into a 
+ * `struct sockaddr`.
+ *
+ * @param addr the address
+ * @param[out] af set to the parsed address family (i.e. AF_INET)
+ * @param[out] sa set to the parsed address
+ * @return 0 on error, otherwise number of bytes in @a sa
+ */
+size_t
+GNUNET_STRINGS_parse_socket_addr (const char *addr,
+                                 uint8_t *af,
+                                 struct sockaddr **sa);
+
+
 /**
  * Tries to convert @a addr string to an IP (v4 or v6) address.
  * Will automatically decide whether to treat 'addr' as v4 or v6 address.
index d8d50e1a42e7f65a74ad66f1f46044c91a17bf8a..c3477930d9d71ca072c330d868329f0e480b6593 100644 (file)
@@ -58,7 +58,7 @@ gnunet_helper_nat_client_SOURCES = \
 gnunet_nat_SOURCES = \
   gnunet-nat.c nat.h
 gnunet_nat_LDADD = \
-  libgnunetnat.la \
+  libgnunetnatnew.la \
   $(top_builddir)/src/util/libgnunetutil.la
 
 
index fcd61a13660c2b44171117f91f5173c86631cc84..01dfa3d322cc832dd7db944e34884c726b6b9bb1 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2015 GNUnet e.V.
+     Copyright (C) 2015, 2016 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
 /**
  * @file src/nat/gnunet-nat.c
- * @brief Daemon to auto configure nat
+ * @brief Command-line tool to interact with the NAT service
  * @author Christian Grothoff
  * @author Bruno Cabral
  */
 #include "platform.h"
 #include "gnunet_util_lib.h"
-#include "gnunet_nat_lib.h"
-#include "gnunet_protocols.h"
-#include "nat.h"
+#include "gnunet_nat_service.h"
 
+/**
+ * Value to return from #main().
+ */
+static int global_ret;
+
+/**
+ * Handle to ongoing autoconfiguration.
+ */
+static struct GNUNET_NAT_AutoHandle *ah;
+
+/**
+ * Port we advertise.
+ */ 
+static unsigned int adv_port;
+
+/**
+ * Flag set to 1 if we use IPPROTO_UDP.
+ */
+static int use_udp;
+
+/**
+ * Flag set to 1 if we are to listen for connection reversal requests.
+ */
+static int listen_reversal;
+
+/**
+ * Flag set to 1 if we use IPPROTO_TCP.
+ */
+static int use_tcp;
+
+/**
+ * Protocol to use.
+ */
+static uint8_t proto;
+
+/**
+ * Address we are bound to (in test), or should bind to
+ * (if #do_stun is set).
+ */
+static char *bind_addr;
+
+/**
+ * External IP address and port to use for the test.
+ * If not set, use #bind_addr.
+ */
+static char *extern_addr;
+
+/**
+ * Local address to use for connection reversal request.
+ */
+static char *local_addr;
+
+/**
+ * Remote address to use for connection reversal request.
+ */
+static char *remote_addr;
 
-struct GNUNET_CONFIGURATION_Handle *cfg;
+/**
+ * Should we actually bind to #bind_addr and receive and process STUN requests?
+ */
+static unsigned int do_stun;
+
+/**
+ * Should we run autoconfiguration?
+ */
+static unsigned int do_auto;
+
+/**
+ * Handle to a NAT test operation.
+ */
+static struct GNUNET_NAT_Test *nt;
 
+/**
+ * Handle to NAT operation.
+ */
+static struct GNUNET_NAT_Handle *nh;
+
+
+/**
+ * Test if all activities have finished, and if so,
+ * terminate.
+ */
+static void
+test_finished ()
+{
+  if (NULL != ah)
+    return;
+  if (NULL != nt)
+    return;
+  if (NULL != nh)
+    return;
+  GNUNET_SCHEDULER_shutdown ();
+}
 
 
 /**
@@ -49,12 +137,12 @@ auto_conf_iter (void *cls,
                 const char *option,
                 const char *value)
 {
-
-  PRINTF ( "%s: %s \n", option, value);
+  PRINTF ("%s: %s\n",
+         option,
+         value);
 }
 
 
-
 /**
  * Function called with the result from the autoconfiguration.
  *
@@ -64,15 +152,16 @@ auto_conf_iter (void *cls,
  * @param result #GNUNET_NAT_ERROR_SUCCESS on success, otherwise the specific error code
  * @param type what the situation of the NAT
  */
-
-void
-auto_config_cb(void *cls,
-               const struct GNUNET_CONFIGURATION_Handle *diff,
-               enum GNUNET_NAT_StatusCode result, enum GNUNET_NAT_Type type)
+static void
+auto_config_cb (void *cls,
+               const struct GNUNET_CONFIGURATION_Handle *diff,
+               enum GNUNET_NAT_StatusCode result,
+               enum GNUNET_NAT_Type type)
 {
-  char* nat_type;
+  const char *nat_type;
   char unknown_type[64];
 
+  ah = NULL;
   switch (type)
   {
     case GNUNET_NAT_TYPE_NO_NAT:
@@ -88,24 +177,120 @@ auto_config_cb(void *cls,
       nat_type = "NAT but UPNP opened the ports";
       break;
     default:
-      SPRINTF (unknown_type, "NAT unknown, type %u", type);
+      SPRINTF (unknown_type,
+              "NAT unknown, type %u",
+              type);
       nat_type = unknown_type;
   }
 
-  PRINTF ("NAT status: %s \n", nat_type );
-  PRINTF ("SUGGESTED CHANGES: \n" );
-
+  PRINTF ("NAT status: %s/%s\n",
+         GNUNET_NAT_status2string (result),
+         nat_type);
+  
+  PRINTF ("SUGGESTED CHANGES:\n");
   GNUNET_CONFIGURATION_iterate_section_values (diff,
                                                "nat",
                                                &auto_conf_iter,
                                                NULL);
+  // FIXME: have option to save config
+  test_finished ();
+}
 
-  //TODO: Save config
 
+/**
+ * Function called to report success or failure for
+ * NAT configuration test.
+ *
+ * @param cls closure
+ * @param result #GNUNET_NAT_ERROR_SUCCESS on success, otherwise the specific error code
+ */
+static void
+test_report_cb (void *cls,
+               enum GNUNET_NAT_StatusCode result)
+{
+  nt = NULL;
+  PRINTF ("NAT test result: %s\n",
+         GNUNET_NAT_status2string (result));
+  test_finished ();
 }
 
 
+/**
+ * Signature of the callback passed to #GNUNET_NAT_register() for
+ * a function to call whenever our set of 'valid' addresses changes.
+ *
+ * @param cls closure, NULL
+ * @param add_remove #GNUNET_YES to add a new public IP address, 
+ *                   #GNUNET_NO to remove a previous (now invalid) one
+ * @param ac address class the address belongs to
+ * @param addr either the previous or the new public IP address
+ * @param addrlen actual length of the @a addr
+ */
+static void
+address_cb (void *cls,
+           int add_remove,
+           enum GNUNET_NAT_AddressClass ac,
+           const struct sockaddr *addr,
+           socklen_t addrlen)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+             "%s %s (%d)\n",
+             add_remove ? "+" : "-",
+             GNUNET_a2s (addr,
+                         addrlen),
+             (int) ac);
+}
+
 
+/**
+ * Signature of the callback passed to #GNUNET_NAT_register().
+ * for a function to call whenever someone asks us to do connection
+ * reversal.
+ *
+ * @param cls closure, NULL
+ * @param local_addr address where we received the request
+ * @param local_addrlen actual length of the @a local_addr
+ * @param remote_addr public IP address of the other peer
+ * @param remote_addrlen actual length of the @a remote_addr
+ */
+static void
+reversal_cb (void *cls,
+            const struct sockaddr *local_addr,
+            socklen_t local_addrlen,
+            const struct sockaddr *remote_addr,
+            socklen_t remote_addrlen)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+             "Connection reversal requested by %s\n",
+             GNUNET_a2s (remote_addr,
+                         remote_addrlen));
+}
+
+
+/**
+ * Task run on shutdown.
+ *
+ * @param cls NULL
+ */
+static void
+do_shutdown (void *cls)
+{
+  if (NULL != ah)
+  {
+    GNUNET_NAT_autoconfig_cancel (ah);
+    ah = NULL;
+  }
+  if (NULL != nt)
+  {
+    GNUNET_NAT_test_stop (nt);
+    nt = NULL;
+  }
+  if (NULL != nh)
+  {
+    GNUNET_NAT_unregister (nh);
+    nh = NULL;
+  }
+}
 
 
 /**
@@ -117,10 +302,171 @@ auto_config_cb(void *cls,
  * @param c configuration
  */
 static void
-run (void *cls, char *const *args, const char *cfgfile,
+run (void *cls,
+     char *const *args,
+     const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  GNUNET_NAT_autoconfig_start (c, auto_config_cb, NULL);
+  uint8_t af;
+  struct sockaddr_in bind_sa;
+  struct sockaddr_in extern_sa;
+  struct sockaddr *local_sa;
+  struct sockaddr *remote_sa;
+  size_t local_len;
+  size_t remote_len;
+  
+  if (use_tcp && use_udp)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+               "Cannot use TCP and UDP\n");
+    global_ret = 1;
+    return;
+  }
+  proto = 0;
+  if (use_tcp)
+    proto = IPPROTO_TCP;
+  if (use_udp)
+    proto = IPPROTO_UDP;
+  if (0 == proto)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+               "Must specify either TCP or UDP\n");
+    global_ret = 1;
+    return;
+  }
+  if (NULL != bind_addr)
+  {
+    if (GNUNET_OK !=
+       GNUNET_STRINGS_to_address_ipv4 (bind_addr,
+                                       strlen (bind_addr),
+                                       &bind_sa))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Invalid socket address `%s'\n",
+                 bind_addr);
+      global_ret = 1;
+      return;
+    }
+  }
+  if (NULL != extern_addr)
+  {
+    if (GNUNET_OK !=
+       GNUNET_STRINGS_to_address_ipv4 (extern_addr,
+                                       strlen (extern_addr),
+                                       &extern_sa))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Invalid socket address `%s'\n",
+                 extern_addr);
+      global_ret = 1;
+      return;
+    }
+  }
+  if (NULL != local_addr)
+  {
+    local_len = GNUNET_STRINGS_parse_socket_addr (local_addr,
+                                                 &af,
+                                                 &local_sa);
+    if (0 == local_len)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Invalid socket address `%s'\n",
+                 local_addr);
+      global_ret = 1;
+      return;
+    }
+  }
+  if (NULL != remote_addr)
+  {
+    remote_len = GNUNET_STRINGS_parse_socket_addr (remote_addr,
+                                                  &af,
+                                                  &remote_sa);
+    if (0 == remote_len)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Invalid socket address `%s'\n",
+                 remote_addr);
+      global_ret = 1;
+      return;
+    }
+  }
+
+  if (NULL != bind_addr)
+  {
+    if (NULL == extern_addr)
+      extern_sa = bind_sa;
+    nt = GNUNET_NAT_test_start (c,
+                               proto,
+                               bind_sa.sin_addr,
+                               ntohs (bind_sa.sin_port),
+                               extern_sa.sin_addr,
+                               ntohs (extern_sa.sin_port),
+                               &test_report_cb,
+                               NULL);
+  }
+
+  if (NULL != local_addr)
+  {
+    nh = GNUNET_NAT_register (c,
+                             proto,
+                             (uint16_t) adv_port,
+                             1,
+                             (const struct sockaddr **) &local_sa,
+                             &local_len,
+                             &address_cb,
+                             (listen_reversal) ? &reversal_cb : NULL,
+                             NULL);
+  }
+
+  if (NULL != remote_addr)
+  {
+    int ret;
+    
+    if ( (NULL == nh) ||
+        (sizeof (struct sockaddr_in) != local_len) )
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Require IPv4 local address to initiate connection reversal\n");
+      global_ret = 1;
+      GNUNET_SCHEDULER_shutdown ();
+      return;
+    }
+    if (sizeof (struct sockaddr_in) != remote_len)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Require IPv4 reversal target address\n");
+      global_ret = 1;
+      GNUNET_SCHEDULER_shutdown ();
+      return;
+    }
+    ret = GNUNET_NAT_request_reversal (nh,
+                                      (const struct sockaddr_in *) &local_sa,
+                                      (const struct sockaddr_in *) &remote_sa);
+    switch (ret)
+    {
+    case GNUNET_SYSERR:
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Connection reversal internal error\n");
+      break;
+    case GNUNET_NO:
+      GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
+                 "Connection reversal unavailable\n");
+      break;
+    case GNUNET_OK:
+      /* operation in progress */
+      break;
+    }
+  }
+  
+  if (do_auto)
+  {
+    ah = GNUNET_NAT_autoconfig_start (c,
+                                     &auto_config_cb,
+                                     NULL);
+  }
+  GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
+                                NULL);
+  test_finished ();
 }
 
 
@@ -132,49 +478,61 @@ run (void *cls, char *const *args, const char *cfgfile,
  * @return 0 on success, -1 on error
  */
 int
-main (int argc, char *const argv[])
+main (int argc,
+      char *const argv[])
 {
   static const struct GNUNET_GETOPT_CommandLineOption options[] = {
-    GNUNET_GETOPT_OPTION_END
+    {'a', "auto", NULL,
+     gettext_noop ("run autoconfiguration"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &do_auto },
+    {'b', "bind", "ADDRESS",
+     gettext_noop ("which IP and port are we bound to"),
+     GNUNET_YES, &GNUNET_GETOPT_set_string, &bind_addr },
+    {'e', "external", "ADDRESS",
+     gettext_noop ("which external IP and port should be used to test"),
+     GNUNET_YES, &GNUNET_GETOPT_set_string, &extern_addr },
+    {'l', "local", "ADDRESS",
+     gettext_noop ("which IP and port are we locally using to listen to for connection reversals"),
+     GNUNET_YES, &GNUNET_GETOPT_set_string, &local_addr },
+    {'r', "remote", "ADDRESS",
+     gettext_noop ("which remote IP and port should be asked for connection reversal"),
+     GNUNET_YES, &GNUNET_GETOPT_set_string, &remote_addr },
+    {'L', "listen", NULL,
+     gettext_noop ("listen for connection reversal requests"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &listen_reversal },
+    {'p', "port", NULL,
+     gettext_noop ("port to use to advertise"),
+     GNUNET_YES, &GNUNET_GETOPT_set_uint, &adv_port },
+    {'s', "stun", NULL,
+     gettext_noop ("enable STUN processing"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &do_stun },
+    // FIMXE: -s not implemented!
+    {'t', "tcp", NULL,
+     gettext_noop ("use TCP"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &use_tcp },
+    {'u', "udp", NULL,
+     gettext_noop ("use UDP"),
+     GNUNET_NO, &GNUNET_GETOPT_set_one, &use_udp },
+   GNUNET_GETOPT_OPTION_END
   };
 
-  int ret = 0;
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
+  if (GNUNET_OK !=
+      GNUNET_STRINGS_get_utf8_args (argc, argv,
+                                   &argc, &argv))
     return 2;
-
-  /* Lets start resolver */
-  char *fn;
-  struct GNUNET_OS_Process *proc;
-
-  fn = GNUNET_OS_get_libexec_binary_path ("gnunet-service-resolver");
-  proc = GNUNET_OS_start_process (GNUNET_YES,
-                                  GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-                                  NULL, NULL, NULL,
-                                  fn,
-                                  "gnunet-service-resolver");
-  GNUNET_assert (NULL != proc);
-
   if (GNUNET_OK !=
-      GNUNET_PROGRAM_run (argc, argv, "gnunet-nat [options]",
-                          _("GNUnet NAT traversal autoconfigure daemon"), options,
-                          &run, NULL))
+      GNUNET_PROGRAM_run (argc, argv,
+                         "gnunet-nat [options]",
+                          _("GNUnet NAT traversal autoconfigure daemon"),
+                         options,
+                          &run,
+                         NULL))
   {
-      ret = 1;
+    global_ret = 1;
   }
-
-  /* Now kill the resolver */
-  if (0 != GNUNET_OS_process_kill (proc, GNUNET_TERM_SIG))
-  {
-      GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
-  }
-  GNUNET_OS_process_wait (proc);
-  GNUNET_OS_process_destroy (proc);
-  proc = NULL;
-
-
   GNUNET_free ((void*) argv);
-  return ret;
+  return global_ret;
 }
 
 
-/* end of gnunet-nat-server.c */
+/* end of gnunet-nat.c */
index 8433c42bff67600cfce72904451411d6f2e8e5aa..a893d287b70cd07a602330bcc62609214389c001 100644 (file)
@@ -390,6 +390,14 @@ service_main (void *cls)
     GNUNET_SCHEDULER_add_shutdown (&service_shutdown,
                                    sh);
   GNUNET_SERVICE_resume (sh);
+
+  if (-1 != sh->ready_confirm_fd)
+  {
+    GNUNET_break (1 == WRITE (sh->ready_confirm_fd, ".", 1));
+    GNUNET_break (0 == CLOSE (sh->ready_confirm_fd));
+    sh->ready_confirm_fd = -1;
+  }
+
   if (NULL != sh->service_init_cb)
     sh->service_init_cb (sh->cb_cls,
                         sh->cfg,
index 6a6cad6fe8b05304ac48d61c71c3ebb5467d331f..46eab856f0be6425a3f83c244e1c258cd703cb2b 100644 (file)
@@ -1209,7 +1209,7 @@ GNUNET_STRINGS_check_filename (const char *filename,
 
 
 /**
- * Tries to convert 'zt_addr' string to an IPv6 address.
+ * Tries to convert @a zt_addr string to an IPv6 address.
  * The string is expected to have the format "[ABCD::01]:80".
  *
  * @param zt_addr 0-terminated string. May be mangled by the function.
@@ -1292,7 +1292,8 @@ GNUNET_STRINGS_to_address_ipv6 (const char *zt_addr,
  *         the contents of @a r_buf are undefined.
  */
 int
-GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr, uint16_t addrlen,
+GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr,
+                               uint16_t addrlen,
                                struct sockaddr_in *r_buf)
 {
   unsigned int temps[4];
@@ -1301,7 +1302,13 @@ GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr, uint16_t addrlen,
 
   if (addrlen < 9)
     return GNUNET_SYSERR;
-  cnt = SSCANF (zt_addr, "%u.%u.%u.%u:%u", &temps[0], &temps[1], &temps[2], &temps[3], &port);
+  cnt = SSCANF (zt_addr,
+               "%u.%u.%u.%u:%u",
+               &temps[0],
+               &temps[1],
+               &temps[2],
+               &temps[3],
+               &port);
   if (5 != cnt)
     return GNUNET_SYSERR;
   for (cnt = 0; cnt < 4; cnt++)
@@ -1328,8 +1335,8 @@ GNUNET_STRINGS_to_address_ipv4 (const char *zt_addr, uint16_t addrlen,
  * @param addrlen number of bytes in @a addr (if addr is 0-terminated,
  *        0-terminator should not be counted towards addrlen).
  * @param r_buf a buffer to fill.
- * @return #GNUNET_OK if conversion succeded. GNUNET_SYSERR otherwise, in which
- *         case the contents of r_buf are undefined.
+ * @return #GNUNET_OK if conversion succeded. #GNUNET_SYSERR otherwise, in which
+ *         case the contents of @a r_buf are undefined.
  */
 int
 GNUNET_STRINGS_to_address_ip (const char *addr,
@@ -1346,6 +1353,62 @@ GNUNET_STRINGS_to_address_ip (const char *addr,
 }
 
 
+/**
+ * Parse an address given as a string into a 
+ * `struct sockaddr`.
+ *
+ * @param addr the address
+ * @param[out] af set to the parsed address family (i.e. AF_INET)
+ * @param[out] sa set to the parsed address
+ * @return 0 on error, otherwise number of bytes in @a sa
+ */
+size_t
+GNUNET_STRINGS_parse_socket_addr (const char *addr,
+                                 uint8_t *af,
+                                 struct sockaddr **sa)
+{
+  char *cp = GNUNET_strdup (addr);
+
+  *af = AF_UNSPEC;
+  if ('[' == *addr)
+  {
+    /* IPv6 */    
+    *sa = GNUNET_malloc (sizeof (struct sockaddr_in6));
+    if (GNUNET_OK !=
+       GNUNET_STRINGS_to_address_ipv6 (cp,
+                                       strlen (cp),
+                                       (struct sockaddr_in6 *) *sa))
+    {
+      GNUNET_free (*sa);
+      *sa = NULL;
+      GNUNET_free (cp);
+      return 0;
+    }
+    *af = AF_INET6;
+    GNUNET_free (cp);
+    return sizeof (struct sockaddr_in6);
+  }
+  else
+  {
+    /* IPv4 */
+    *sa = GNUNET_malloc (sizeof (struct sockaddr_in));
+    if (GNUNET_OK !=
+       GNUNET_STRINGS_to_address_ipv4 (cp,
+                                       strlen (cp),
+                                       (struct sockaddr_in *) *sa))
+    {
+      GNUNET_free (*sa);
+      *sa = NULL;
+      GNUNET_free (cp);
+      return 0;
+    }
+    *af = AF_INET;
+    GNUNET_free (cp);
+    return sizeof (struct sockaddr_in);
+  }
+}
+
+
 /**
  * Makes a copy of argv that consists of a single memory chunk that can be
  * freed with a single call to GNUNET_free();
@@ -1388,7 +1451,10 @@ _make_continuous_arg_copy (int argc,
  * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure
  */
 int
-GNUNET_STRINGS_get_utf8_args (int argc, char *const *argv, int *u8argc, char *const **u8argv)
+GNUNET_STRINGS_get_utf8_args (int argc,
+                             char *const *argv,
+                             int *u8argc,
+                             char *const **u8argv)
 {
 #if WINDOWS
   wchar_t *wcmd;