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])
gnunet-namecache.1 \
gnunet-namestore.1 \
gnunet-namestore-fcfsd.1 \
+ gnunet-nat.1 \
gnunet-nat-server.1 \
gnunet-peerinfo.1 \
gnunet-publish.1 \
--- /dev/null
+.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)
+
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"
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"
#: 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 "
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 ""
#: 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"
#: 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"
"%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 ""
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 ""
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 ""
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"
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"
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"
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"
"`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 ""
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 ""
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 "
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"
"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"
#: 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 ""
"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 "
"«%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 ""
#: 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"
#: 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"
"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 ""
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"
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»"
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"
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"
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"
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"
"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"
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 ""
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 "
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"
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"
#: 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 "
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 ""
#: 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"
#: 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 ""
"%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 ""
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 ""
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 ""
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"
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 ""
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 ""
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 ""
"`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 ""
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 ""
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 "
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"
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"
#: 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 "
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 ""
#: 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"
#: 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"
"%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 ""
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"
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"
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: "
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"
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\":"
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"
"`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"
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 ""
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 "
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"
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"
#: 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 "
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 ""
#: 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"
#: 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"
"%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 ""
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"
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"
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"
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"
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 »:"
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"
"`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"
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 ""
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 "
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"
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"
#: 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 "
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 ""
#: 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"
#: 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"
"%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 ""
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 的最大连接数"
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 ""
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"
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"
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"
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"
"`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 ""
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 ""
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 "
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),
*
* @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
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.
gnunet_nat_SOURCES = \
gnunet-nat.c nat.h
gnunet_nat_LDADD = \
- libgnunetnat.la \
+ libgnunetnatnew.la \
$(top_builddir)/src/util/libgnunetutil.la
/*
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 ();
+}
/**
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.
*
* @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:
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;
+ }
+}
/**
* @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 ();
}
* @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 */
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,
/**
- * 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.
* 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];
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++)
* @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,
}
+/**
+ * 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();
* @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;